]> rtime.felk.cvut.cz Git - sojka/nv-tegra/linux-3.10.git/commitdiff
mfd: max77620: disable WK_EN0 on suspend only
authorLaxman Dewangan <ldewangan@nvidia.com>
Thu, 27 Aug 2015 11:05:00 +0000 (16:35 +0530)
committerLaxman Dewangan <ldewangan@nvidia.com>
Sun, 30 Aug 2015 15:59:30 +0000 (08:59 -0700)
Keep enabling WK_EN0 always and disable only when system
enters into suspend. The WK_EN0 need to disable to avoid
power on sequence violation.

This will avoid the system state where it is not getting power
on even after pressing power key.

Change-Id: I13e545985cdfa7b35f78646e2f5c83bb664ee06a
Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com>
(cherry picked from commit f93943056e7d3a2ea2da444bd922160a422580c2)
Reviewed-on: http://git-master/r/791511

drivers/mfd/max77620-core.c

index 429ec92102d67d5a877f5032debbe505301d7f94..3b3e2b26d69c371dcd0b7407b770f7daefb7611f 100644 (file)
@@ -364,7 +364,8 @@ static int max77620_initialise_fps(struct max77620_chip *chip,
        }
 
        ret = max77620_reg_update(chip->dev, MAX77620_PWR_SLAVE,
-                       MAX77620_REG_ONOFFCNFG2, MAX77620_ONOFFCNFG2_WK_EN0, 0);
+                       MAX77620_REG_ONOFFCNFG2, MAX77620_ONOFFCNFG2_WK_EN0,
+                       MAX77620_ONOFFCNFG2_WK_EN0);
        if (ret < 0) {
                dev_err(dev, "Reg ONOFFCNFG2 WK_EN0 update failed: %d\n", ret);
                return ret;
@@ -695,6 +696,15 @@ static int max77620_i2c_suspend(struct device *dev)
                        config);
        if (ret < 0)
                dev_err(dev, "Reg ONOFFCNFG1 update failed: %d\n", ret);
+
+       /* Disable WK_EN0 */
+       ret = max77620_reg_update(chip->dev, MAX77620_PWR_SLAVE,
+                       MAX77620_REG_ONOFFCNFG2, MAX77620_ONOFFCNFG2_WK_EN0, 0);
+       if (ret < 0) {
+               dev_err(dev, "Reg ONOFFCNFG2 WK_EN0 update failed: %d\n", ret);
+               return ret;
+       }
+
        return 0;
 }
 
@@ -708,6 +718,16 @@ static int max77620_i2c_suspend_no_irq(struct device *dev)
 static int max77620_i2c_resume(struct device *dev)
 {
        struct max77620_chip *chip = dev_get_drvdata(dev);
+       int ret;
+
+       /* Enable WK_EN0 */
+       ret = max77620_reg_update(chip->dev, MAX77620_PWR_SLAVE,
+               MAX77620_REG_ONOFFCNFG2, MAX77620_ONOFFCNFG2_WK_EN0,
+               MAX77620_ONOFFCNFG2_WK_EN0);
+       if (ret < 0) {
+               dev_err(dev, "Reg ONOFFCNFG2 WK_EN0 update failed: %d\n", ret);
+               return ret;
+       }
 
        return regmap_irq_resume(chip->top_irq_data);
 }