ASoC: Decouple DAPM from CODECs
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / sound / soc / codecs / tpa6130a2.c
index 329acc1a207457942a560e86d7f990a2fc44ffd8..f9a92ea6b50aa8ca4a8a99246d0243424398a7ae 100644 (file)
@@ -119,13 +119,13 @@ static int tpa6130a2_power(int power)
 {
        struct  tpa6130a2_data *data;
        u8      val;
-       int     ret;
+       int     ret = 0;
 
        BUG_ON(tpa6130a2_client == NULL);
        data = i2c_get_clientdata(tpa6130a2_client);
 
        mutex_lock(&data->mutex);
-       if (power) {
+       if (power && !data->power_state) {
                /* Power on */
                if (data->power_gpio >= 0)
                        gpio_set_value(data->power_gpio, 1);
@@ -153,7 +153,7 @@ static int tpa6130a2_power(int power)
                val = tpa6130a2_read(TPA6130A2_REG_CONTROL);
                val &= ~TPA6130A2_SWS;
                tpa6130a2_i2c_write(TPA6130A2_REG_CONTROL, val);
-       } else {
+       } else if (!power && data->power_state) {
                /* set SWS */
                val = tpa6130a2_read(TPA6130A2_REG_CONTROL);
                val |= TPA6130A2_SWS;
@@ -388,16 +388,17 @@ static const struct snd_soc_dapm_route audio_map[] = {
 int tpa6130a2_add_controls(struct snd_soc_codec *codec)
 {
        struct  tpa6130a2_data *data;
+       struct snd_soc_dapm_context *dapm = &codec->dapm;
 
        if (tpa6130a2_client == NULL)
                return -ENODEV;
 
        data = i2c_get_clientdata(tpa6130a2_client);
 
-       snd_soc_dapm_new_controls(codec, tpa6130a2_dapm_widgets,
+       snd_soc_dapm_new_controls(dapm, tpa6130a2_dapm_widgets,
                                ARRAY_SIZE(tpa6130a2_dapm_widgets));
 
-       snd_soc_dapm_add_routes(codec, audio_map, ARRAY_SIZE(audio_map));
+       snd_soc_dapm_add_routes(dapm, audio_map, ARRAY_SIZE(audio_map));
 
        if (data->id == TPA6140A2)
                return snd_soc_add_controls(codec, tpa6140a2_controls,