From b38c459285e41fc68b70c94609fc34693a9decfb Mon Sep 17 00:00:00 2001 From: MyungJoo Ham Date: Fri, 19 Aug 2011 14:39:40 +0900 Subject: [PATCH] --- yaml --- r: 273379 b: refs/heads/master c: 01fdaab8ffced1deeee14d9c7d2745f37349484e h: refs/heads/master i: 273377: 8a27f911a00cd15857742a81a7b533ef8508a8ed 273375: 3f12b1eac33deed4e814411f786e6a7dfdb13220 v: v3 --- [refs] | 2 +- trunk/drivers/mfd/max8997.c | 27 ++++++++++++++++++++++- trunk/include/linux/mfd/max8997-private.h | 1 - 3 files changed, 27 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index 4cc562085bbb..7f16853c8f45 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 5f40c6b6508b622ea03c6b32c57b2e26eba2e4f1 +refs/heads/master: 01fdaab8ffced1deeee14d9c7d2745f37349484e diff --git a/trunk/drivers/mfd/max8997.c b/trunk/drivers/mfd/max8997.c index f83103b8970d..dc58750bb71b 100644 --- a/trunk/drivers/mfd/max8997.c +++ b/trunk/drivers/mfd/max8997.c @@ -23,6 +23,7 @@ #include #include +#include #include #include #include @@ -142,7 +143,6 @@ static int max8997_i2c_probe(struct i2c_client *i2c, max8997->irq_base = pdata->irq_base; max8997->ono = pdata->ono; - max8997->wakeup = pdata->wakeup; mutex_init(&max8997->iolock); @@ -169,6 +169,9 @@ static int max8997_i2c_probe(struct i2c_client *i2c, if (ret < 0) goto err_mfd; + /* MAX8997 has a power button input. */ + device_init_wakeup(max8997->dev, pdata->wakeup); + return ret; err_mfd: @@ -398,7 +401,29 @@ static int max8997_restore(struct device *dev) return 0; } +static int max8997_suspend(struct device *dev) +{ + struct i2c_client *i2c = container_of(dev, struct i2c_client, dev); + struct max8997_dev *max8997 = i2c_get_clientdata(i2c); + + if (device_may_wakeup(dev)) + irq_set_irq_wake(max8997->irq, 1); + return 0; +} + +static int max8997_resume(struct device *dev) +{ + struct i2c_client *i2c = container_of(dev, struct i2c_client, dev); + struct max8997_dev *max8997 = i2c_get_clientdata(i2c); + + if (device_may_wakeup(dev)) + irq_set_irq_wake(max8997->irq, 0); + return max8997_irq_resume(max8997); +} + const struct dev_pm_ops max8997_pm = { + .suspend = max8997_suspend, + .resume = max8997_resume, .freeze = max8997_freeze, .restore = max8997_restore, }; diff --git a/trunk/include/linux/mfd/max8997-private.h b/trunk/include/linux/mfd/max8997-private.h index 5ff2400ad46c..3f4deb62d6b0 100644 --- a/trunk/include/linux/mfd/max8997-private.h +++ b/trunk/include/linux/mfd/max8997-private.h @@ -326,7 +326,6 @@ struct max8997_dev { int irq; int ono; int irq_base; - bool wakeup; struct mutex irqlock; int irq_masks_cur[MAX8997_IRQ_GROUP_NR]; int irq_masks_cache[MAX8997_IRQ_GROUP_NR];