summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnatoly Palto <a.palto@sam-solutions.net>2013-04-05 11:07:26 +0000
committerJustin Waters <justin.waters@timesys.com>2013-11-07 12:19:32 -0500
commitdbb8a6b19be148d449bc427f939dc7a338bc2de6 (patch)
tree865009cb8a77fba2683c82c7f0c77cec081e3e71
parent9d252c06f35fc47f8bd1989a6d7d8ea3ce9cb7d6 (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.c2
-rw-r--r--drivers/mfd/da9063-i2c.c26
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)