summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRanjith Lohithakshan <ranjithl@ti.com>2010-03-11 08:41:22 +0100
committerDmitry Torokhov <dmitry.torokhov@gmail.com>2010-03-11 09:02:43 +0100
commitfdba2bb1f2eed85085a0fe154e1acb82de3239f7 (patch)
treed2a8d754b81242e65b08162217303eafd1ccd770
parentInput: appletouch - fix integer overflow issue (diff)
downloadlinux-fdba2bb1f2eed85085a0fe154e1acb82de3239f7.tar.xz
linux-fdba2bb1f2eed85085a0fe154e1acb82de3239f7.zip
Input: ads7846 - add wakeup support
Add wakeup support to the ads7846 driver. Platforms can enable wakeup capability by setting the wakeup flag in ads7846_platform_data. With this patch the ads7846 driver can be used to wake the system from suspend. Signed-off-by: Ranjith Lohithakshan <ranjithl@ti.com> Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
-rw-r--r--drivers/input/touchscreen/ads7846.c10
-rw-r--r--include/linux/spi/ads7846.h1
2 files changed, 11 insertions, 0 deletions
diff --git a/drivers/input/touchscreen/ads7846.c b/drivers/input/touchscreen/ads7846.c
index d187be05955f..532279cda0e4 100644
--- a/drivers/input/touchscreen/ads7846.c
+++ b/drivers/input/touchscreen/ads7846.c
@@ -822,6 +822,9 @@ static int ads7846_suspend(struct spi_device *spi, pm_message_t message)
spin_unlock_irq(&ts->lock);
+ if (device_may_wakeup(&ts->spi->dev))
+ enable_irq_wake(ts->spi->irq);
+
return 0;
}
@@ -830,6 +833,9 @@ static int ads7846_resume(struct spi_device *spi)
{
struct ads7846 *ts = dev_get_drvdata(&spi->dev);
+ if (device_may_wakeup(&ts->spi->dev))
+ disable_irq_wake(ts->spi->irq);
+
spin_lock_irq(&ts->lock);
ts->is_suspended = 0;
@@ -1201,6 +1207,8 @@ static int __devinit ads7846_probe(struct spi_device *spi)
if (err)
goto err_remove_attr_group;
+ device_init_wakeup(&spi->dev, pdata->wakeup);
+
return 0;
err_remove_attr_group:
@@ -1230,6 +1238,8 @@ static int __devexit ads7846_remove(struct spi_device *spi)
{
struct ads7846 *ts = dev_get_drvdata(&spi->dev);
+ device_init_wakeup(&spi->dev, false);
+
ads784x_hwmon_unregister(spi, ts);
input_unregister_device(ts->input);
diff --git a/include/linux/spi/ads7846.h b/include/linux/spi/ads7846.h
index 5710c15d394a..b4ae570d3c98 100644
--- a/include/linux/spi/ads7846.h
+++ b/include/linux/spi/ads7846.h
@@ -53,5 +53,6 @@ struct ads7846_platform_data {
int (*filter) (void *filter_data, int data_idx, int *val);
void (*filter_cleanup)(void *filter_data);
void (*wait_for_sync)(void);
+ bool wakeup;
};