mirror of
https://github.com/torvalds/linux
synced 2024-09-22 03:55:39 +00:00
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>
This commit is contained in:
parent
04b4b88cca
commit
fdba2bb1f2
|
@ -822,6 +822,9 @@ static int ads7846_suspend(struct spi_device *spi, pm_message_t message)
|
||||||
|
|
||||||
spin_unlock_irq(&ts->lock);
|
spin_unlock_irq(&ts->lock);
|
||||||
|
|
||||||
|
if (device_may_wakeup(&ts->spi->dev))
|
||||||
|
enable_irq_wake(ts->spi->irq);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -830,6 +833,9 @@ static int ads7846_resume(struct spi_device *spi)
|
||||||
{
|
{
|
||||||
struct ads7846 *ts = dev_get_drvdata(&spi->dev);
|
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);
|
spin_lock_irq(&ts->lock);
|
||||||
|
|
||||||
ts->is_suspended = 0;
|
ts->is_suspended = 0;
|
||||||
|
@ -1201,6 +1207,8 @@ static int __devinit ads7846_probe(struct spi_device *spi)
|
||||||
if (err)
|
if (err)
|
||||||
goto err_remove_attr_group;
|
goto err_remove_attr_group;
|
||||||
|
|
||||||
|
device_init_wakeup(&spi->dev, pdata->wakeup);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
err_remove_attr_group:
|
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);
|
struct ads7846 *ts = dev_get_drvdata(&spi->dev);
|
||||||
|
|
||||||
|
device_init_wakeup(&spi->dev, false);
|
||||||
|
|
||||||
ads784x_hwmon_unregister(spi, ts);
|
ads784x_hwmon_unregister(spi, ts);
|
||||||
input_unregister_device(ts->input);
|
input_unregister_device(ts->input);
|
||||||
|
|
||||||
|
|
|
@ -53,5 +53,6 @@ struct ads7846_platform_data {
|
||||||
int (*filter) (void *filter_data, int data_idx, int *val);
|
int (*filter) (void *filter_data, int data_idx, int *val);
|
||||||
void (*filter_cleanup)(void *filter_data);
|
void (*filter_cleanup)(void *filter_data);
|
||||||
void (*wait_for_sync)(void);
|
void (*wait_for_sync)(void);
|
||||||
|
bool wakeup;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue