ASoC: Move WM5100 platform data based setup into I2C probe
[deliverable/linux.git] / sound / soc / codecs / wm8995.c
index 74ae5995a78601b43a4f1e5a2039bd24807b84fd..4d109b1ad124ab765d259e7150a1584700746ff1 100644 (file)
@@ -485,7 +485,7 @@ static int configure_aif_clock(struct snd_soc_codec *codec, int aif)
 static int configure_clock(struct snd_soc_codec *codec)
 {
        struct wm8995_priv *wm8995;
-       int old, new;
+       int change, new;
 
        wm8995 = snd_soc_codec_get_drvdata(codec);
 
@@ -509,15 +509,11 @@ static int configure_clock(struct snd_soc_codec *codec)
        else
                new = 0;
 
-       old = snd_soc_read(codec, WM8995_CLOCKING_1) & WM8995_SYSCLK_SRC;
-
-       /* If there's no change then we're done. */
-       if (old == new)
+       change = snd_soc_update_bits(codec, WM8995_CLOCKING_1,
+                                    WM8995_SYSCLK_SRC_MASK, new);
+       if (!change)
                return 0;
 
-       snd_soc_update_bits(codec, WM8995_CLOCKING_1,
-                           WM8995_SYSCLK_SRC_MASK, new);
-
        snd_soc_dapm_sync(&codec->dapm);
 
        return 0;
@@ -692,8 +688,10 @@ static const struct snd_soc_dapm_widget wm8995_dapm_widgets[] = {
        SND_SOC_DAPM_MIXER("IN1R PGA", SND_SOC_NOPM, 0, 0,
                &in1r_pga, 1),
 
-       SND_SOC_DAPM_MICBIAS("MICBIAS1", WM8995_POWER_MANAGEMENT_1, 8, 0),
-       SND_SOC_DAPM_MICBIAS("MICBIAS2", WM8995_POWER_MANAGEMENT_1, 9, 0),
+       SND_SOC_DAPM_SUPPLY("MICBIAS1", WM8995_POWER_MANAGEMENT_1, 8, 0,
+                           NULL, 0),
+       SND_SOC_DAPM_SUPPLY("MICBIAS2", WM8995_POWER_MANAGEMENT_1, 9, 0,
+                           NULL, 0),
 
        SND_SOC_DAPM_SUPPLY("AIF1CLK", WM8995_AIF1_CLOCKING_1, 0, 0, NULL, 0),
        SND_SOC_DAPM_SUPPLY("AIF2CLK", WM8995_AIF2_CLOCKING_1, 0, 0, NULL, 0),
@@ -1573,9 +1571,16 @@ static int wm8995_resume(struct snd_soc_codec *codec)
 static int wm8995_remove(struct snd_soc_codec *codec)
 {
        struct wm8995_priv *wm8995;
+       int i;
 
        wm8995 = snd_soc_codec_get_drvdata(codec);
        wm8995_set_bias_level(codec, SND_SOC_BIAS_OFF);
+
+       for (i = 0; i < ARRAY_SIZE(wm8995->supplies); ++i)
+               regulator_unregister_notifier(wm8995->supplies[i].consumer,
+                                             &wm8995->disable_nb[i]);
+
+       regulator_bulk_free(ARRAY_SIZE(wm8995->supplies), wm8995->supplies);
        return 0;
 }
 
This page took 0.040067 seconds and 5 git commands to generate.