]> Pileus Git - ~andy/linux/blobdiff - drivers/mfd/wm8994-core.c
Merge remote-tracking branch 'asoc/fix/omap' into asoc-linus
[~andy/linux] / drivers / mfd / wm8994-core.c
index 00e4fe2f3c75cf0d4c6300972fbe331ad5825052..781115e8dca90823bbae297ab4eadc9ff63fa791 100644 (file)
@@ -259,20 +259,6 @@ static int wm8994_suspend(struct device *dev)
                break;
        }
 
-       switch (wm8994->type) {
-       case WM1811:
-               ret = wm8994_reg_read(wm8994, WM8994_ANTIPOP_2);
-               if (ret < 0) {
-                       dev_err(dev, "Failed to read jackdet: %d\n", ret);
-               } else if (ret & WM1811_JACKDET_MODE_MASK) {
-                       dev_dbg(dev, "CODEC still active, ignoring suspend\n");
-                       return 0;
-               }
-               break;
-       default:
-               break;
-       }
-
        /* Disable LDO pulldowns while the device is suspended if we
         * don't know that something will be driving them. */
        if (!wm8994->ldo_ena_always_driven)
@@ -652,6 +638,17 @@ static int wm8994_device_init(struct wm8994 *wm8994, int irq)
                return ret;
        }
 
+       /* Explicitly put the device into reset in case regulators
+        * don't get disabled in order to ensure we know the device
+        * state.
+        */
+       ret = wm8994_reg_write(wm8994, WM8994_SOFTWARE_RESET,
+                              wm8994_reg_read(wm8994, WM8994_SOFTWARE_RESET));
+       if (ret != 0) {
+               dev_err(wm8994->dev, "Failed to reset device: %d\n", ret);
+               return ret;
+       }
+
        if (regmap_patch) {
                ret = regmap_register_patch(wm8994->regmap, regmap_patch,
                                            patch_regs);