diff options
author | Nick Dyer <nick.dyer@itdev.co.uk> | 2011-10-07 15:15:52 +0100 |
---|---|---|
committer | Dan Willemsen <dwillemsen@nvidia.com> | 2013-09-14 12:37:41 -0700 |
commit | fd7821dfb3cfc87e67fd0ee91c796dbf79c79cc5 (patch) | |
tree | 014799703ce2932ae39f53fe1391fe42cd85e47a /drivers/input/touchscreen/atmel_mxt_ts.c | |
parent | 2a7404ed94117dd094937b3210763ef1477d6a34 (diff) |
Input: atmel_mxt_ts - Add early suspend support
Signed-off-by: Nick Dyer <nick.dyer@itdev.co.uk>
Rebase-Id: Re4e790d2029278f3e1cb1f0d92dd5c957ddf5ddb
Diffstat (limited to 'drivers/input/touchscreen/atmel_mxt_ts.c')
-rw-r--r-- | drivers/input/touchscreen/atmel_mxt_ts.c | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/drivers/input/touchscreen/atmel_mxt_ts.c b/drivers/input/touchscreen/atmel_mxt_ts.c index e4cb77fbcc75..555fc6057285 100644 --- a/drivers/input/touchscreen/atmel_mxt_ts.c +++ b/drivers/input/touchscreen/atmel_mxt_ts.c @@ -21,6 +21,9 @@ #include <linux/input/mt.h> #include <linux/interrupt.h> #include <linux/slab.h> +#ifdef CONFIG_HAS_EARLYSUSPEND +#include <linux/earlysuspend.h> +#endif /* Version */ #define MXT_VER_20 20 @@ -231,6 +234,11 @@ struct mxt_info { u8 object_num; }; +#ifdef CONFIG_HAS_EARLYSUSPEND +static void mxt_early_suspend(struct early_suspend *es); +static void mxt_late_resume(struct early_suspend *es); +#endif + struct mxt_object { u8 type; u16 start_address; @@ -279,6 +287,9 @@ struct mxt_data { u8 idle_cycle_time; u8 is_stopped; u8 max_reportid; +#ifdef CONFIG_HAS_EARLYSUSPEND + struct early_suspend early_suspend; +#endif }; /* I2C slave address pairs */ @@ -1784,6 +1795,13 @@ static int mxt_probe(struct i2c_client *client, goto err_free_object; } +#ifdef CONFIG_HAS_EARLYSUSPEND + data->early_suspend.level = EARLY_SUSPEND_LEVEL_BLANK_SCREEN + 1; + data->early_suspend.suspend = mxt_early_suspend; + data->early_suspend.resume = mxt_late_resume; + register_early_suspend(&data->early_suspend); +#endif + if (data->state == APPMODE) { error = mxt_make_highchg(data); if (error) @@ -1843,6 +1861,10 @@ static int mxt_remove(struct i2c_client *client) sysfs_remove_group(&client->dev.kobj, &mxt_attr_group); free_irq(data->irq, data); input_unregister_device(data->input_dev); +#ifdef CONFIG_HAS_EARLYSUSPEND + unregister_early_suspend(&data->early_suspend); +#endif + kfree(data->object_table); kfree(data); @@ -1881,6 +1903,27 @@ static int mxt_resume(struct device *dev) return 0; } + +#ifdef CONFIG_HAS_EARLYSUSPEND +static void mxt_early_suspend(struct early_suspend *es) +{ + struct mxt_data *mxt; + mxt = container_of(es, struct mxt_data, early_suspend); + + if (mxt_suspend(&mxt->client->dev) != 0) + dev_err(&mxt->client->dev, "%s: failed\n", __func__); +} + +static void mxt_late_resume(struct early_suspend *es) +{ + struct mxt_data *mxt; + mxt = container_of(es, struct mxt_data, early_suspend); + + if (mxt_resume(&mxt->client->dev) != 0) + dev_err(&mxt->client->dev, "%s: failed\n", __func__); +} +#endif + #endif static SIMPLE_DEV_PM_OPS(mxt_pm_ops, mxt_suspend, mxt_resume); |