Hi Kim, > -----Original Message----- > From: linux-input-owner@xxxxxxxxxxxxxxx [mailto:linux-input- > owner@xxxxxxxxxxxxxxx] On Behalf Of Kim, HeungJun > Sent: Monday, November 15, 2010 10:02 AM > To: linux-input@xxxxxxxxxxxxxxx; dmitry.torokhov@xxxxxxxxx > Cc: kyungmin.park@xxxxxxxxxxx > 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 <riverful.kim@xxxxxxxxxxx> > Signed-off-by: Kyungmin Park <kyungmin.park@xxxxxxxxxxx> > --- > 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.c > b/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? > + > struct i2c_client *client; > struct input_dev *input_dev; > struct mcs_touchkey_chip chip; > @@ -168,6 +170,8 @@ static int __devinit mcs_touchkey_probe(struct > i2c_client *client, > > if (pdata->cfg_pin) > pdata->cfg_pin(); > + if (pdata->poweron) > + data->poweron = pdata->poweron; Where is it called the first time? > > 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(struct > i2c_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@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html ÿ淸º{.nÇ+돴윯돪†+%듚ÿ깁負¥Šwÿº{.nÇ+돴¥Š{깸)墉穡왲^n‡r⊆¦zË곷h솳鈺Ú&{àz요z받쀺+€Ê+zf"·hš닱~넮녬iÿÿï곴ÿ묎çz_溫æj:+v돣þ)山øm