diff options
| author | Eric Tashakkor <w36098@motorola.com> | 2014-09-18 14:47:40 -0500 |
|---|---|---|
| committer | ERIC TASHAKKOR <w36098@motorola.com> | 2014-09-19 13:56:34 +0000 |
| commit | 3a15651179c66d7e78c89b8404db238f7554968b (patch) | |
| tree | 3b044711e9d3528c0e924de17bbd33d111c1ada3 | |
| parent | ea8917ce24cf45b4bd6619be9d720267d8e941f1 (diff) | |
| download | olio-linux-3.10-3a15651179c66d7e78c89b8404db238f7554968b.tar.xz olio-linux-3.10-3a15651179c66d7e78c89b8404db238f7554968b.zip | |
IKXCLOCK-3736 Add Initial ALS Read
Add reading and sending a new ALS value on sensor registration.
Android caches its backlight value and will use it until updated, which can lead to the wrong value being used for some time.
Change-Id: I8bdb50d7b02763e0f831ac97380d64cceda6c751
Signed-off-by: Eric Tashakkor <w36098@motorola.com>
| -rw-r--r-- | drivers/misc/m4sensorhub_als.c | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/drivers/misc/m4sensorhub_als.c b/drivers/misc/m4sensorhub_als.c index 3f61edefff2..55fa5f733e1 100644 --- a/drivers/misc/m4sensorhub_als.c +++ b/drivers/misc/m4sensorhub_als.c @@ -28,6 +28,7 @@ #include <linux/m4sensorhub.h> #include <linux/input.h> #include <linux/slab.h> +#include <linux/delay.h> #define m4als_err(format, args...) KDEBUG(M4SH_ERROR, format, ## args) @@ -153,6 +154,8 @@ static ssize_t m4als_setrate_store(struct device *dev, int err = 0; struct m4als_driver_data *dd = dev_get_drvdata(dev); int value = 0; + int regsize = 0; + uint16_t luminosity = 0; mutex_lock(&(dd->mutex)); @@ -175,6 +178,32 @@ static ssize_t m4als_setrate_store(struct device *dev, goto m4als_enable_store_exit; } + /* Read and send raw value for gesture wakeup */ + msleep(120); + regsize = m4sensorhub_reg_getsize(dd->m4, M4SH_REG_LIGHTSENSOR_SIGNAL); + if (regsize < 0) { + m4als_err("%s: Reading from invalid register %d.\n", + __func__, regsize); + err = regsize; + goto m4als_enable_store_exit; + } + + err = m4sensorhub_reg_read(dd->m4, M4SH_REG_LIGHTSENSOR_SIGNAL, + (char *)&luminosity); + if (err < 0) { + m4als_err("%s: Failed to read luminosity data.\n", __func__); + goto m4als_enable_store_exit; + } else if (err != regsize) { + m4als_err("%s: Read %d bytes instead of %d.\n", + __func__, err, regsize); + goto m4als_enable_store_exit; + } + + dd->luminosity = luminosity; + + input_event(dd->indev, EV_MSC, MSC_RAW, dd->luminosity); + input_sync(dd->indev); + m4als_enable_store_exit: if (err < 0) m4als_err("%s: Failed with error code %d.\n", __func__, err); |