]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
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>
Mon, 12 Dec 2011 11:32:57 +0000 (12:32 +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 de5eb32b344724311a8b78406beff689367110be..27064aaa11f570a0937f0ef93c1f72681ef2bd49 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