ASoC: Add signal generator widget type
authorMark Brown <broonie@opensource.wolfsonmicro.com>
Sun, 27 Nov 2011 16:21:51 +0000 (16:21 +0000)
committerMark Brown <broonie@opensource.wolfsonmicro.com>
Fri, 2 Dec 2011 10:26:07 +0000 (10:26 +0000)
A signal generator behaves as an input would but is not considered for
any of the special behaviour associated with external input pins. This
is especially useful when automatically working out not connected widgets.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Acked-by: Liam Girdwood <lrg@ti.com>
include/sound/soc-dapm.h
sound/soc/soc-dapm.c

index 0c159a7d211e78b8d3b765dbb174ce8384cb71f8..d26a9b784772d797e88a529f199342f277e32390 100644 (file)
@@ -43,6 +43,9 @@
        .num_kcontrols = 0}
 
 /* platform domain */
+#define SND_SOC_DAPM_SIGGEN(wname) \
+{      .id = snd_soc_dapm_siggen, .name = wname, .kcontrol_news = NULL, \
+       .num_kcontrols = 0, .reg = SND_SOC_NOPM }
 #define SND_SOC_DAPM_INPUT(wname) \
 {      .id = snd_soc_dapm_input, .name = wname, .kcontrol_news = NULL, \
        .num_kcontrols = 0, .reg = SND_SOC_NOPM }
@@ -410,6 +413,7 @@ enum snd_soc_dapm_type {
        snd_soc_dapm_supply,            /* power/clock supply */
        snd_soc_dapm_aif_in,            /* audio interface input */
        snd_soc_dapm_aif_out,           /* audio interface output */
+       snd_soc_dapm_siggen,            /* signal generator */
 };
 
 /*
index da5c1ae7cc300af44559d23910d32f9c1ff3e19e..6bb327e431a582982929d251b44a44e2bee8b991 100644 (file)
@@ -339,6 +339,7 @@ static void dapm_set_path_status(struct snd_soc_dapm_widget *w,
        case snd_soc_dapm_output:
        case snd_soc_dapm_adc:
        case snd_soc_dapm_input:
+       case snd_soc_dapm_siggen:
        case snd_soc_dapm_dac:
        case snd_soc_dapm_micbias:
        case snd_soc_dapm_vmid:
@@ -772,6 +773,11 @@ static int is_connected_input_ep(struct snd_soc_dapm_widget *widget)
                        return widget->inputs;
                }
 
+               /* signal generator */
+               if (widget->id == snd_soc_dapm_siggen) {
+                       widget->inputs = snd_soc_dapm_suspend_check(widget);
+                       return widget->inputs;
+               }
        }
 
        list_for_each_entry(path, &widget->sources, list_sink) {
@@ -1982,6 +1988,7 @@ static int snd_soc_dapm_add_route(struct snd_soc_dapm_context *dapm,
        case snd_soc_dapm_out_drv:
        case snd_soc_dapm_input:
        case snd_soc_dapm_output:
+       case snd_soc_dapm_siggen:
        case snd_soc_dapm_micbias:
        case snd_soc_dapm_vmid:
        case snd_soc_dapm_pre: