summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/staging/iio/light/ltr659ps.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/drivers/staging/iio/light/ltr659ps.c b/drivers/staging/iio/light/ltr659ps.c
index a918f8283578..6ec7773f7c63 100644
--- a/drivers/staging/iio/light/ltr659ps.c
+++ b/drivers/staging/iio/light/ltr659ps.c
@@ -27,7 +27,7 @@
#include <linux/gpio.h>
#include <linux/tegra_audio.h>
#include <linux/regulator/consumer.h>
-
+#include <linux/wakelock.h>
#include <linux/ltr659ps.h>
@@ -173,6 +173,7 @@ struct ltr659ps_data {
int near;
struct mutex prox_mtx;
+ struct wake_lock prox_wake_lock;
};
@@ -1158,6 +1159,8 @@ static void ltr659ps_work_function(struct work_struct *work)
if (!data->enable)
return;
+ wake_lock_timeout(&data->prox_wake_lock, 1 * HZ);
+
status = i2c_smbus_read_byte_data(client, LTR659PS_REG_PS_STATUS);
if ((status & 0x03) == 0x03)
ltr659ps_report_input_event(data);
@@ -1446,6 +1449,9 @@ static int __devinit ltr659ps_probe(struct i2c_client *client
goto err_iio_device_register;
}
+ wake_lock_init(&prox_data->prox_wake_lock, WAKE_LOCK_SUSPEND,
+ "prox_wake_lock");
+
queue_delayed_work(prox_data->prox_wq
, &prox_data->work, msecs_to_jiffies(200));
@@ -1478,6 +1484,7 @@ static int __devexit ltr659ps_remove(struct i2c_client *client)
struct ltr659ps_data *data = iio_priv(indio_dev);
PROX_DEBUG("\n");
+ wake_lock_destroy(&data->prox_wake_lock);
iio_device_unregister(indio_dev);
free_irq(client->irq, client);
input_unregister_device(data->ps_input_dev);