mfd: Disable more pulls on WM8994
authorMark Brown <broonie@opensource.wolfsonmicro.com>
Thu, 3 Nov 2011 13:20:38 +0000 (13:20 +0000)
committerMark Brown <broonie@opensource.wolfsonmicro.com>
Mon, 12 Dec 2011 16:09:34 +0000 (00:09 +0800)
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>
Acked-by: Samuel Ortiz <sameo@linux.intel.com>
drivers/mfd/wm8994-core.c
include/linux/mfd/wm8994/pdata.h

index a6846b04e156a5c898f2f7083821a4a222bdf908..c8956f2cd28064d137e23a6fa814a477e8fe95c2 100644 (file)
@@ -373,6 +373,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);
 
@@ -515,12 +516,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