diff options
author | Anatoly Palto <a.palto@sam-solutions.net> | 2013-04-05 11:07:26 +0000 |
---|---|---|
committer | Justin Waters <justin.waters@timesys.com> | 2013-11-07 12:19:32 -0500 |
commit | dbb8a6b19be148d449bc427f939dc7a338bc2de6 (patch) | |
tree | 865009cb8a77fba2683c82c7f0c77cec081e3e71 | |
parent | 9d252c06f35fc47f8bd1989a6d7d8ea3ce9cb7d6 (diff) |
Modify da9063 i2c driver. Added capability wakeup from da9063 irq (in particular 'power' button)
Signed-off-by: Uladzimir Bely <u.bely@sam-solutions.net>
Signed-off-by: Christian Hemp <c.hemp@phytec.de>
-rw-r--r-- | arch/arm/mach-mx6/board-mx6q_phytec-pmic.c | 2 | ||||
-rw-r--r-- | drivers/mfd/da9063-i2c.c | 26 |
2 files changed, 27 insertions, 1 deletions
diff --git a/arch/arm/mach-mx6/board-mx6q_phytec-pmic.c b/arch/arm/mach-mx6/board-mx6q_phytec-pmic.c index a45a8eefb61a..9073a4931576 100644 --- a/arch/arm/mach-mx6/board-mx6q_phytec-pmic.c +++ b/arch/arm/mach-mx6/board-mx6q_phytec-pmic.c @@ -359,7 +359,7 @@ static int da9063_init(struct da9063 *da9063) struct da9063_pdata da9063_data = { .bcores_merged = 0, .bmem_bio_merged = 0, - .key_power = 0, + .key_power = 1, .t_offset = 0, .regulators_pdata = &da9063_regulators, .init = da9063_init, diff --git a/drivers/mfd/da9063-i2c.c b/drivers/mfd/da9063-i2c.c index 25e416023288..36d23277f1c4 100644 --- a/drivers/mfd/da9063-i2c.c +++ b/drivers/mfd/da9063-i2c.c @@ -84,6 +84,7 @@ static int da9063_i2c_probe(struct i2c_client *i2c, i2c_set_clientdata(i2c, da9063); da9063->dev = &i2c->dev; da9063->i2c = i2c; + device_set_wakeup_capable(da9063->dev, 1); return da9063_device_init(da9063, i2c->irq); } @@ -103,6 +104,28 @@ static const struct i2c_device_id da9063_i2c_id[] = { }; MODULE_DEVICE_TABLE(i2c, da9063_i2c_id); +static bool da9063_i2c_wakeup; + +static int da9063_i2c_suspend(struct i2c_client *i2c, pm_message_t state) +{ + if (device_may_wakeup(&i2c->dev)) { + enable_irq_wake(i2c->irq); + da9063_i2c_wakeup = 1; + } + + return 0; +} + +static int da9063_i2c_resume(struct i2c_client *i2c) +{ + if (i2c && da9063_i2c_wakeup) { + disable_irq_wake(i2c->irq); + da9063_i2c_wakeup = 0; + } + + return 0; +} + static struct i2c_driver da9063_i2c_driver = { .driver = { .name = "da9063", @@ -111,6 +134,9 @@ static struct i2c_driver da9063_i2c_driver = { .probe = da9063_i2c_probe, .remove = da9063_i2c_remove, .id_table = da9063_i2c_id, + + .suspend = da9063_i2c_suspend, + .resume = da9063_i2c_resume, }; static int __init da9063_i2c_init(void) |