ASoC: Stop WM8903 SYSCLK when suspending
authorMark Brown <broonie@opensource.wolfsonmicro.com>
Wed, 10 Dec 2008 19:27:10 +0000 (19:27 +0000)
committerMark Brown <broonie@opensource.wolfsonmicro.com>
Wed, 10 Dec 2008 19:47:45 +0000 (19:47 +0000)
This will save some additional power.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
sound/soc/codecs/wm8903.c

index c80968fe326e30e63ef79a90293b031e7864302b..bde74546db4a7050ee28e1617dc190390822fcc1 100644 (file)
@@ -997,6 +997,9 @@ static int wm8903_set_bias_level(struct snd_soc_codec *codec,
 
        case SND_SOC_BIAS_STANDBY:
                if (codec->bias_level == SND_SOC_BIAS_OFF) {
+                       wm8903_write(codec, WM8903_CLOCK_RATES_2,
+                                    WM8903_CLK_SYS_ENA);
+
                        wm8903_run_sequence(codec, 0);
                        wm8903_sync_reg_cache(codec, codec->reg_cache);
 
@@ -1027,6 +1030,9 @@ static int wm8903_set_bias_level(struct snd_soc_codec *codec,
 
        case SND_SOC_BIAS_OFF:
                wm8903_run_sequence(codec, 32);
+               reg = wm8903_read(codec, WM8903_CLOCK_RATES_2);
+               reg &= ~WM8903_CLK_SYS_ENA;
+               wm8903_write(codec, WM8903_CLOCK_RATES_2, reg);
                break;
        }
 
@@ -1619,9 +1625,6 @@ static int wm8903_i2c_probe(struct i2c_client *i2c,
 
        wm8903_reset(codec);
 
-       /* SYSCLK is required for pretty much anything */
-       wm8903_write(codec, WM8903_CLOCK_RATES_2, WM8903_CLK_SYS_ENA);
-
        /* power on device */
        wm8903_set_bias_level(codec, SND_SOC_BIAS_STANDBY);