]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - sound/soc/soc-dapm.c
ASoC: dapm: Add kcontrol support for PGAs
[karo-tx-linux.git] / sound / soc / soc-dapm.c
index f4bf21a5539b0e0592cc6e622f7714730c22f0ef..9762ac4efdeb90e0a1f527f63f62030eacec3bfa 100644 (file)
@@ -779,7 +779,7 @@ static int dapm_is_shared_kcontrol(struct snd_soc_dapm_context *dapm,
  * Determine if a kcontrol is shared. If it is, look it up. If it isn't,
  * create it. Either way, add the widget into the control's widget list
  */
-static int dapm_create_or_share_mixmux_kcontrol(struct snd_soc_dapm_widget *w,
+static int dapm_create_or_share_kcontrol(struct snd_soc_dapm_widget *w,
        int kci)
 {
        struct snd_soc_dapm_context *dapm = w->dapm;
@@ -810,6 +810,7 @@ static int dapm_create_or_share_mixmux_kcontrol(struct snd_soc_dapm_widget *w,
                        switch (w->id) {
                        case snd_soc_dapm_switch:
                        case snd_soc_dapm_mixer:
+                       case snd_soc_dapm_pga:
                                wname_in_long_name = true;
                                kcname_in_long_name = true;
                                break;
@@ -899,7 +900,7 @@ static int dapm_new_mixer(struct snd_soc_dapm_widget *w)
                                continue;
 
                        if (!w->kcontrols[i]) {
-                               ret = dapm_create_or_share_mixmux_kcontrol(w, i);
+                               ret = dapm_create_or_share_kcontrol(w, i);
                                if (ret < 0)
                                        return ret;
                        }
@@ -952,7 +953,7 @@ static int dapm_new_mux(struct snd_soc_dapm_widget *w)
                return -EINVAL;
        }
 
-       ret = dapm_create_or_share_mixmux_kcontrol(w, 0);
+       ret = dapm_create_or_share_kcontrol(w, 0);
        if (ret < 0)
                return ret;
 
@@ -967,9 +968,13 @@ static int dapm_new_mux(struct snd_soc_dapm_widget *w)
 /* create new dapm volume control */
 static int dapm_new_pga(struct snd_soc_dapm_widget *w)
 {
-       if (w->num_kcontrols)
-               dev_err(w->dapm->dev,
-                       "ASoC: PGA controls not supported: '%s'\n", w->name);
+       int i, ret;
+
+       for (i = 0; i < w->num_kcontrols; i++) {
+               ret = dapm_create_or_share_kcontrol(w, i);
+               if (ret < 0)
+                       return ret;
+       }
 
        return 0;
 }