diff options
author | Sri Krishna chowdary <schowdary@nvidia.com> | 2014-06-19 12:19:10 +0530 |
---|---|---|
committer | Mandar Padmawar <mpadmawar@nvidia.com> | 2014-06-26 23:39:36 -0700 |
commit | 04343434f91c1155648f57c6ab44bfb908972b1f (patch) | |
tree | 9ac153b6c8adf99281a9658acedc055f75a59376 /drivers | |
parent | 484ae56de093443d01db9aee35655c1922721365 (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.c | 4 |
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; |