aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHeungJun Kim <riverful.kim@samsung.com>2011-02-24 00:42:49 -0500
committerDmitry Torokhov <dmitry.torokhov@gmail.com>2011-02-24 00:43:38 -0500
commit5f62615ef5e50b0ad6c125fe1e38f2ac675012e2 (patch)
tree2e291e340c54d71b3c1ec5e859a15114a414f4d6
parentadf779c1ee1d5556ebd83e39a7189022d4ebce3a (diff)
Input: mcs_touchkey - add shutdown handler
The MCS50XX series has a HW bug that requires explicit chip power down. If chip is not powered down before shutting the system down the control pins (powerup, interrupt) are pulled up and residue current continues flowing into the chips making them continue consuming power. Signed-off-by: Heungjun Kim <riverful.kim@samsung.com> Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com> Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
-rw-r--r--drivers/input/keyboard/mcs_touchkey.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/drivers/input/keyboard/mcs_touchkey.c b/drivers/input/keyboard/mcs_touchkey.c
index 03fa59a0b220..af1aab324a4c 100644
--- a/drivers/input/keyboard/mcs_touchkey.c
+++ b/drivers/input/keyboard/mcs_touchkey.c
@@ -212,6 +212,14 @@ static int __devexit mcs_touchkey_remove(struct i2c_client *client)
212 return 0; 212 return 0;
213} 213}
214 214
215static void mcs_touchkey_shutdown(struct i2c_client *client)
216{
217 struct mcs_touchkey_data *data = i2c_get_clientdata(client);
218
219 if (data->poweron)
220 data->poweron(false);
221}
222
215#ifdef CONFIG_PM_SLEEP 223#ifdef CONFIG_PM_SLEEP
216static int mcs_touchkey_suspend(struct device *dev) 224static int mcs_touchkey_suspend(struct device *dev)
217{ 225{
@@ -262,6 +270,7 @@ static struct i2c_driver mcs_touchkey_driver = {
262 }, 270 },
263 .probe = mcs_touchkey_probe, 271 .probe = mcs_touchkey_probe,
264 .remove = __devexit_p(mcs_touchkey_remove), 272 .remove = __devexit_p(mcs_touchkey_remove),
273 .shutdown = mcs_touchkey_shutdown,
265 .id_table = mcs_touchkey_id, 274 .id_table = mcs_touchkey_id,
266}; 275};
267 276