mfd: Disable more pulls on WM8994
authorMark Brown <broonie@opensource.wolfsonmicro.com>
Thu, 3 Nov 2011 13:41:14 +0000 (13:41 +0000)
committerSamuel Ortiz <sameo@linux.intel.com>
Sun, 8 Jan 2012 23:37:29 +0000 (00:37 +0100)
Disable more pulls by default on WM8994 for a small current saving. Since
some designs do leave SPKMODE floating provide platform data to allow that
to be left enabled.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
drivers/mfd/wm8994-core.c
include/linux/mfd/wm8994/pdata.h

index ff373dcda2c776fed9a6f0cc15a1d3ed3663ea2f..776298b313ab8e769a151eddd39ad7cf8e06e78d 100644 (file)
@@ -374,6 +374,7 @@ static int wm8994_device_init(struct wm8994 *wm8994, int irq)
        struct wm8994_pdata *pdata = wm8994->dev->platform_data;
        const char *devname;
        int ret, i;
+       int pulls = 0;
 
        dev_set_drvdata(wm8994->dev, wm8994);
 
@@ -516,12 +517,16 @@ static int wm8994_device_init(struct wm8994 *wm8994, int irq)
                }
 
                wm8994->ldo_ena_always_driven = pdata->ldo_ena_always_driven;
+
+               if (pdata->spkmode_pu)
+                       pulls |= WM8994_SPKMODE_PU;
        }
 
-       /* Disable LDO pulldowns while the device is active */
+       /* Disable unneeded pulls */
        wm8994_set_bits(wm8994, WM8994_PULL_CONTROL_2,
-                       WM8994_LDO1ENA_PD | WM8994_LDO2ENA_PD,
-                       0);
+                       WM8994_LDO1ENA_PD | WM8994_LDO2ENA_PD |
+                       WM8994_SPKMODE_PU | WM8994_CSNADDR_PD,
+                       pulls);
 
        /* In some system designs where the regulators are not in use,
         * we can achieve a small reduction in leakage currents by
index ea32f306dca6963c312fe4f4b4e3968233f68393..54e2fef587d58f6a542dd33739aa8fcf87a6eb77 100644 (file)
@@ -174,6 +174,12 @@ struct wm8994_pdata {
         * consumption will rise.
         */
        bool ldo_ena_always_driven;
+
+       /*
+        * SPKMODE must be pulled internally by the device on this
+        * system.
+        */
+       bool spkmode_pu;
 };
 
 #endif