aboutsummaryrefslogtreecommitdiffstats
path: root/include/sound/soc-dapm.h
diff options
context:
space:
mode:
authorLars-Peter Clausen <lars@metafoo.de>2014-02-28 02:31:11 -0500
committerMark Brown <broonie@linaro.org>2014-02-28 22:03:36 -0500
commit236aaa6863581634bd6d599ccf7f7b38deeafdc0 (patch)
treefd65cfab7542f5b2462891d335a41caa6caa2d63 /include/sound/soc-dapm.h
parentf6b45c28f451e8e415db49f693b2fec90c2cb557 (diff)
ASoC: dapm: Consolidate MUXs and virtual MUXs
MUXs and virtual MUXs are almost identical, the only difference is that for virtual MUX there is no hardware backing register in which setting is stored. This patch adds code, which is similar to what we already do for DAPM mixer controls to support virtual mixer controls, to DAPM enum controls. The new code will check if the enum does a hardware backing register and skip over reading and writing to the register if it has not. This allows us to use the same code path for both MUXs and virtual MUXs and a lot of nearly identical code can be removed. Signed-off-by: Lars-Peter Clausen <lars@metafoo.de> Signed-off-by: Mark Brown <broonie@linaro.org>
Diffstat (limited to 'include/sound/soc-dapm.h')
-rw-r--r--include/sound/soc-dapm.h23
1 files changed, 5 insertions, 18 deletions
diff --git a/include/sound/soc-dapm.h b/include/sound/soc-dapm.h
index 2ec14cb3ff1e..04d32d89bc7d 100644
--- a/include/sound/soc-dapm.h
+++ b/include/sound/soc-dapm.h
@@ -108,9 +108,7 @@ struct device;
108 SND_SOC_DAPM_INIT_REG_VAL(wreg, wshift, winvert), \ 108 SND_SOC_DAPM_INIT_REG_VAL(wreg, wshift, winvert), \
109 .kcontrol_news = wcontrols, .num_kcontrols = 1} 109 .kcontrol_news = wcontrols, .num_kcontrols = 1}
110#define SND_SOC_DAPM_VIRT_MUX(wname, wreg, wshift, winvert, wcontrols) \ 110#define SND_SOC_DAPM_VIRT_MUX(wname, wreg, wshift, winvert, wcontrols) \
111{ .id = snd_soc_dapm_virt_mux, .name = wname, \ 111 SND_SOC_DAPM_MUX(wname, wreg, wshift, winvert, wcontrols)
112 SND_SOC_DAPM_INIT_REG_VAL(wreg, wshift, winvert), \
113 .kcontrol_news = wcontrols, .num_kcontrols = 1}
114#define SND_SOC_DAPM_VALUE_MUX(wname, wreg, wshift, winvert, wcontrols) \ 112#define SND_SOC_DAPM_VALUE_MUX(wname, wreg, wshift, winvert, wcontrols) \
115 SND_SOC_DAPM_MUX(wname, wreg, wshift, winvert, wcontrols) 113 SND_SOC_DAPM_MUX(wname, wreg, wshift, winvert, wcontrols)
116 114
@@ -170,10 +168,8 @@ struct device;
170 .event = wevent, .event_flags = wflags} 168 .event = wevent, .event_flags = wflags}
171#define SND_SOC_DAPM_VIRT_MUX_E(wname, wreg, wshift, winvert, wcontrols, \ 169#define SND_SOC_DAPM_VIRT_MUX_E(wname, wreg, wshift, winvert, wcontrols, \
172 wevent, wflags) \ 170 wevent, wflags) \
173{ .id = snd_soc_dapm_virt_mux, .name = wname, \ 171 SND_SOC_DAPM_MUX_E(wname, wreg, wshift, winvert, wcontrols, wevent, \
174 SND_SOC_DAPM_INIT_REG_VAL(wreg, wshift, winvert), \ 172 wflags)
175 .kcontrol_news = wcontrols, .num_kcontrols = 1, \
176 .event = wevent, .event_flags = wflags}
177 173
178/* additional sequencing control within an event type */ 174/* additional sequencing control within an event type */
179#define SND_SOC_DAPM_PGA_S(wname, wsubseq, wreg, wshift, winvert, \ 175#define SND_SOC_DAPM_PGA_S(wname, wsubseq, wreg, wshift, winvert, \
@@ -309,12 +305,8 @@ struct device;
309 .get = snd_soc_dapm_get_enum_double, \ 305 .get = snd_soc_dapm_get_enum_double, \
310 .put = snd_soc_dapm_put_enum_double, \ 306 .put = snd_soc_dapm_put_enum_double, \
311 .private_value = (unsigned long)&xenum } 307 .private_value = (unsigned long)&xenum }
312#define SOC_DAPM_ENUM_VIRT(xname, xenum) \ 308#define SOC_DAPM_ENUM_VIRT(xname, xenum) \
313{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \ 309 SOC_DAPM_ENUM(xname, xenum)
314 .info = snd_soc_info_enum_double, \
315 .get = snd_soc_dapm_get_enum_virt, \
316 .put = snd_soc_dapm_put_enum_virt, \
317 .private_value = (unsigned long)&xenum }
318#define SOC_DAPM_ENUM_EXT(xname, xenum, xget, xput) \ 310#define SOC_DAPM_ENUM_EXT(xname, xenum, xget, xput) \
319{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \ 311{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \
320 .info = snd_soc_info_enum_double, \ 312 .info = snd_soc_info_enum_double, \
@@ -386,10 +378,6 @@ int snd_soc_dapm_get_enum_double(struct snd_kcontrol *kcontrol,
386 struct snd_ctl_elem_value *ucontrol); 378 struct snd_ctl_elem_value *ucontrol);
387int snd_soc_dapm_put_enum_double(struct snd_kcontrol *kcontrol, 379int snd_soc_dapm_put_enum_double(struct snd_kcontrol *kcontrol,
388 struct snd_ctl_elem_value *ucontrol); 380 struct snd_ctl_elem_value *ucontrol);
389int snd_soc_dapm_get_enum_virt(struct snd_kcontrol *kcontrol,
390 struct snd_ctl_elem_value *ucontrol);
391int snd_soc_dapm_put_enum_virt(struct snd_kcontrol *kcontrol,
392 struct snd_ctl_elem_value *ucontrol);
393int snd_soc_dapm_info_pin_switch(struct snd_kcontrol *kcontrol, 381int snd_soc_dapm_info_pin_switch(struct snd_kcontrol *kcontrol,
394 struct snd_ctl_elem_info *uinfo); 382 struct snd_ctl_elem_info *uinfo);
395int snd_soc_dapm_get_pin_switch(struct snd_kcontrol *kcontrol, 383int snd_soc_dapm_get_pin_switch(struct snd_kcontrol *kcontrol,
@@ -475,7 +463,6 @@ enum snd_soc_dapm_type {
475 snd_soc_dapm_input = 0, /* input pin */ 463 snd_soc_dapm_input = 0, /* input pin */
476 snd_soc_dapm_output, /* output pin */ 464 snd_soc_dapm_output, /* output pin */
477 snd_soc_dapm_mux, /* selects 1 analog signal from many inputs */ 465 snd_soc_dapm_mux, /* selects 1 analog signal from many inputs */
478 snd_soc_dapm_virt_mux, /* virtual version of snd_soc_dapm_mux */
479 snd_soc_dapm_mixer, /* mixes several analog signals together */ 466 snd_soc_dapm_mixer, /* mixes several analog signals together */
480 snd_soc_dapm_mixer_named_ctl, /* mixer with named controls */ 467 snd_soc_dapm_mixer_named_ctl, /* mixer with named controls */
481 snd_soc_dapm_pga, /* programmable gain/attenuation (volume) */ 468 snd_soc_dapm_pga, /* programmable gain/attenuation (volume) */