summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorSri Krishna chowdary <schowdary@nvidia.com>2014-06-19 12:19:10 +0530
committerMandar Padmawar <mpadmawar@nvidia.com>2014-06-26 23:39:36 -0700
commit04343434f91c1155648f57c6ab44bfb908972b1f (patch)
tree9ac153b6c8adf99281a9658acedc055f75a59376 /drivers
parent484ae56de093443d01db9aee35655c1922721365 (diff)
staging: iio: light: cm3217: check event's validity
In case integration time for the sensor is not properly set, User space may query the updated value of a sensor before an event is generated from the sensor. Kernel driver should not send a stale or invalid event in such cases, else it may impact performance and in some cases, the user space application may behave in some undesirable way. This change checks for such invalid events and makes sure such values are not sent to user space. Bug 1521699 Change-Id: I46f8d8defb2e63038f5c4947cbbe8e2b26c06f55 Signed-off-by: Sri Krishna chowdary <schowdary@nvidia.com> Reviewed-on: http://git-master/r/425196 (cherry picked from commit 4611cda18bb67a3625c0dc802d666d801edb2ca4) Reviewed-on: http://git-master/r/427686 Reviewed-by: Sachin Nikam <snikam@nvidia.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/staging/iio/light/cm3217.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/staging/iio/light/cm3217.c b/drivers/staging/iio/light/cm3217.c
index 12da7a11e285..f1eb2fcbccdf 100644
--- a/drivers/staging/iio/light/cm3217.c
+++ b/drivers/staging/iio/light/cm3217.c
@@ -322,6 +322,7 @@ static ssize_t cm3217_enable_store(struct device *dev,
mutex_lock(&indio_dev->mlock);
if (enable) {
err = cm3217_cmd_wr(inf, 0, 0);
+ inf->raw_illuminance_val = -EINVAL;
queue_delayed_work(inf->wq, &inf->dw, CM3217_HW_DELAY);
} else {
cancel_delayed_work_sync(&inf->dw);
@@ -344,6 +345,8 @@ static ssize_t cm3217_raw_illuminance_val_show(struct device *dev,
if (inf->als_state != CHIP_POWER_ON_ALS_ON)
return sprintf(buf, "-1\n");
queue_delayed_work(inf->wq, &inf->dw, 0);
+ if (inf->raw_illuminance_val == -EINVAL)
+ return sprintf(buf, "-1\n");
return sprintf(buf, "%d\n", inf->raw_illuminance_val);
}
@@ -454,6 +457,7 @@ static int cm3217_probe(struct i2c_client *client,
goto err_iio_register;
}
+ inf->raw_illuminance_val = -EINVAL;
dev_info(&client->dev, "%s success\n", __func__);
return 0;