summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Tashakkor <w36098@motorola.com>2014-09-18 14:47:40 -0500
committerERIC TASHAKKOR <w36098@motorola.com>2014-09-19 13:56:34 +0000
commit3a15651179c66d7e78c89b8404db238f7554968b (patch)
tree3b044711e9d3528c0e924de17bbd33d111c1ada3
parentea8917ce24cf45b4bd6619be9d720267d8e941f1 (diff)
downloadolio-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.c29
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);