Re: [PATCH 1/3] input: keyboard: MCS5080: support suspend/resume.
From: Kim, HeungJun <hidden>
Date: 2010-11-15 08:21:12
Hi shubhrajyoti, 2010-11-15 오후 2:43, Datta, Shubhrajyoti 쓴 글:
Hi Kim,quoted
-----Original Message----- From: linux-input-owner@vger.kernel.org [mailto:linux-input- owner@vger.kernel.org] On Behalf Of Kim, HeungJun Sent: Monday, November 15, 2010 10:02 AM To: linux-input@vger.kernel.org; dmitry.torokhov@gmail.com Cc: kyungmin.park@samsung.com Subject: [PATCH 1/3] input: keyboard: MCS5080: support suspend/resume. This patch supports suspend/resume functions for mcs5080 touchkey driver. Signed-off-by: Heungjun Kim <redacted> Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com> --- drivers/input/keyboard/mcs_touchkey.c | 41 +++++++++++++++++++++++++++++++++ include/linux/i2c/mcs.h | 1 + 2 files changed, 42 insertions(+), 0 deletions(-)diff --git a/drivers/input/keyboard/mcs_touchkey.cb/drivers/input/keyboard/mcs_touchkey.c index 63b849d..06385f5 100644--- a/drivers/input/keyboard/mcs_touchkey.c +++ b/drivers/input/keyboard/mcs_touchkey.c@@ -45,6 +45,8 @@ struct mcs_touchkey_chip { }; struct mcs_touchkey_data { + void (*poweron)(int);Could you explain what it does?
The MCS5080 chip has enable or poweron key, or may be LDO pins. So, it used in the platformdata, like above cfg_pin(). There is one reason about using poweron(). The MCS5080 chip must be re-initialize after resume(). If it's not used power off/on method and use only disable/enable irq, it happened that it dosen't issued interrupt. This is chip-level issue. So, I think that it's the very simplest method to support poweron() function to machine or platform data.
quoted
+ struct i2c_client *client; struct input_dev *input_dev; struct mcs_touchkey_chip chip;@@ -168,6 +170,8 @@ static int __devinit mcs_touchkey_probe(structi2c_client *client, if (pdata->cfg_pin) pdata->cfg_pin(); + if (pdata->poweron) + data->poweron = pdata->poweron;Where is it called the first time?
Actually, in the suspend(), this function called the first time. but, the actual power-up() sequence is possible in the cfg_pin(), too. So, I use this method.
quoted
error = request_threaded_irq(client->irq, NULL, mcs_touchkey_interrupt, IRQF_TRIGGER_FALLING, client->dev.driver->name, data);@@ -202,6 +206,41 @@ static int __devexit mcs_touchkey_remove(structi2c_client *client) return 0; } +#ifdef CONFIG_PM +static int mcs_touchkey_suspend(struct i2c_client *client, pm_message_t mesg) +{ + struct mcs_touchkey_data *data = i2c_get_clientdata(client); + + /* Disable the work */ + disable_irq(client->irq); + + /* Don't I2C operation since we don't know I2C bus is dead already */ + + /* Finally turn off the power */ + if (data->poweron) + data->poweron(0); + + return 0; +} + +static int mcs_touchkey_resume(struct i2c_client *client) +{ + struct mcs_touchkey_data *data = i2c_get_clientdata(client); + + /* Enable the device first */ + if (data->poweron) + data->poweron(1); + + /* Enable irq again */ + enable_irq(client->irq); + + return 0; +} +#else +#define mcs_touchkey_suspend NULL +#define mcs_touchkey_resume NULL +#endif + static const struct i2c_device_id mcs_touchkey_id[] = { { "mcs5000_touchkey", MCS5000_TOUCHKEY }, { "mcs5080_touchkey", MCS5080_TOUCHKEY },@@ -216,6 +255,8 @@ static struct i2c_driver mcs_touchkey_driver = { }, .probe = mcs_touchkey_probe, .remove = __devexit_p(mcs_touchkey_remove), + .suspend = mcs_touchkey_suspend, + .resume = mcs_touchkey_resume, .id_table = mcs_touchkey_id, };diff --git a/include/linux/i2c/mcs.h b/include/linux/i2c/mcs.h index 725ae7c..c4a3869 100644 --- a/include/linux/i2c/mcs.h +++ b/include/linux/i2c/mcs.h@@ -18,6 +18,7 @@ #define MCS_KEY_CODE(v) ((v) & 0xffff) struct mcs_platform_data { + void (*poweron)(int); void (*cfg_pin)(void); /* touchscreen */ --1.7.0.4 -- To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Thanks. If u any ideas, let me know. Regards, Heundjun Kim -- To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html