diff options
Diffstat (limited to 'include/sound/soc-dapm.h')
-rw-r--r-- | include/sound/soc-dapm.h | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/include/sound/soc-dapm.h b/include/sound/soc-dapm.h index c1410e3191e3..c0922a034223 100644 --- a/include/sound/soc-dapm.h +++ b/include/sound/soc-dapm.h | |||
@@ -95,6 +95,21 @@ | |||
95 | .shift = wshift, .invert = winvert, .kcontrols = wcontrols, \ | 95 | .shift = wshift, .invert = winvert, .kcontrols = wcontrols, \ |
96 | .num_kcontrols = 1} | 96 | .num_kcontrols = 1} |
97 | 97 | ||
98 | /* Simplified versions of above macros, assuming wncontrols = ARRAY_SIZE(wcontrols) */ | ||
99 | #define SOC_PGA_ARRAY(wname, wreg, wshift, winvert,\ | ||
100 | wcontrols) \ | ||
101 | { .id = snd_soc_dapm_pga, .name = wname, .reg = wreg, .shift = wshift, \ | ||
102 | .invert = winvert, .kcontrols = wcontrols, .num_kcontrols = ARRAY_SIZE(wcontrols)} | ||
103 | #define SOC_MIXER_ARRAY(wname, wreg, wshift, winvert, \ | ||
104 | wcontrols)\ | ||
105 | { .id = snd_soc_dapm_mixer, .name = wname, .reg = wreg, .shift = wshift, \ | ||
106 | .invert = winvert, .kcontrols = wcontrols, .num_kcontrols = ARRAY_SIZE(wcontrols)} | ||
107 | #define SOC_MIXER_NAMED_CTL_ARRAY(wname, wreg, wshift, winvert, \ | ||
108 | wcontrols)\ | ||
109 | { .id = snd_soc_dapm_mixer_named_ctl, .name = wname, .reg = wreg, \ | ||
110 | .shift = wshift, .invert = winvert, .kcontrols = wcontrols, \ | ||
111 | .num_kcontrols = ARRAY_SIZE(wcontrols)} | ||
112 | |||
98 | /* path domain with event - event handler must return 0 for success */ | 113 | /* path domain with event - event handler must return 0 for success */ |
99 | #define SND_SOC_DAPM_PGA_E(wname, wreg, wshift, winvert, wcontrols, \ | 114 | #define SND_SOC_DAPM_PGA_E(wname, wreg, wshift, winvert, wcontrols, \ |
100 | wncontrols, wevent, wflags) \ | 115 | wncontrols, wevent, wflags) \ |
@@ -126,6 +141,23 @@ | |||
126 | .invert = winvert, .kcontrols = wcontrols, .num_kcontrols = 1, \ | 141 | .invert = winvert, .kcontrols = wcontrols, .num_kcontrols = 1, \ |
127 | .event = wevent, .event_flags = wflags} | 142 | .event = wevent, .event_flags = wflags} |
128 | 143 | ||
144 | /* Simplified versions of above macros, assuming wncontrols = ARRAY_SIZE(wcontrols) */ | ||
145 | #define SOC_PGA_E_ARRAY(wname, wreg, wshift, winvert, wcontrols, \ | ||
146 | wevent, wflags) \ | ||
147 | { .id = snd_soc_dapm_pga, .name = wname, .reg = wreg, .shift = wshift, \ | ||
148 | .invert = winvert, .kcontrols = wcontrols, .num_kcontrols = ARRAY_SIZE(wcontrols), \ | ||
149 | .event = wevent, .event_flags = wflags} | ||
150 | #define SOC_MIXER_E_ARRAY(wname, wreg, wshift, winvert, wcontrols, \ | ||
151 | wevent, wflags) \ | ||
152 | { .id = snd_soc_dapm_mixer, .name = wname, .reg = wreg, .shift = wshift, \ | ||
153 | .invert = winvert, .kcontrols = wcontrols, .num_kcontrols = ARRAY_SIZE(wcontrols), \ | ||
154 | .event = wevent, .event_flags = wflags} | ||
155 | #define SOC_MIXER_NAMED_CTL_E_ARRAY(wname, wreg, wshift, winvert, \ | ||
156 | wcontrols, wevent, wflags) \ | ||
157 | { .id = snd_soc_dapm_mixer, .name = wname, .reg = wreg, .shift = wshift, \ | ||
158 | .invert = winvert, .kcontrols = wcontrols, \ | ||
159 | .num_kcontrols = ARRAY_SIZE(wcontrols), .event = wevent, .event_flags = wflags} | ||
160 | |||
129 | /* events that are pre and post DAPM */ | 161 | /* events that are pre and post DAPM */ |
130 | #define SND_SOC_DAPM_PRE(wname, wevent) \ | 162 | #define SND_SOC_DAPM_PRE(wname, wevent) \ |
131 | { .id = snd_soc_dapm_pre, .name = wname, .kcontrols = NULL, \ | 163 | { .id = snd_soc_dapm_pre, .name = wname, .kcontrols = NULL, \ |
@@ -206,6 +238,12 @@ | |||
206 | .get = snd_soc_dapm_get_enum_double, \ | 238 | .get = snd_soc_dapm_get_enum_double, \ |
207 | .put = snd_soc_dapm_put_enum_double, \ | 239 | .put = snd_soc_dapm_put_enum_double, \ |
208 | .private_value = (unsigned long)&xenum } | 240 | .private_value = (unsigned long)&xenum } |
241 | #define SOC_DAPM_ENUM_VIRT(xname, xenum) \ | ||
242 | { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \ | ||
243 | .info = snd_soc_info_enum_double, \ | ||
244 | .get = snd_soc_dapm_get_enum_virt, \ | ||
245 | .put = snd_soc_dapm_put_enum_virt, \ | ||
246 | .private_value = (unsigned long)&xenum } | ||
209 | #define SOC_DAPM_VALUE_ENUM(xname, xenum) \ | 247 | #define SOC_DAPM_VALUE_ENUM(xname, xenum) \ |
210 | { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \ | 248 | { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \ |
211 | .info = snd_soc_info_enum_double, \ | 249 | .info = snd_soc_info_enum_double, \ |
@@ -260,6 +298,10 @@ int snd_soc_dapm_get_enum_double(struct snd_kcontrol *kcontrol, | |||
260 | struct snd_ctl_elem_value *ucontrol); | 298 | struct snd_ctl_elem_value *ucontrol); |
261 | int snd_soc_dapm_put_enum_double(struct snd_kcontrol *kcontrol, | 299 | int snd_soc_dapm_put_enum_double(struct snd_kcontrol *kcontrol, |
262 | struct snd_ctl_elem_value *ucontrol); | 300 | struct snd_ctl_elem_value *ucontrol); |
301 | int snd_soc_dapm_get_enum_virt(struct snd_kcontrol *kcontrol, | ||
302 | struct snd_ctl_elem_value *ucontrol); | ||
303 | int snd_soc_dapm_put_enum_virt(struct snd_kcontrol *kcontrol, | ||
304 | struct snd_ctl_elem_value *ucontrol); | ||
263 | int snd_soc_dapm_get_value_enum_double(struct snd_kcontrol *kcontrol, | 305 | int snd_soc_dapm_get_value_enum_double(struct snd_kcontrol *kcontrol, |
264 | struct snd_ctl_elem_value *ucontrol); | 306 | struct snd_ctl_elem_value *ucontrol); |
265 | int snd_soc_dapm_put_value_enum_double(struct snd_kcontrol *kcontrol, | 307 | int snd_soc_dapm_put_value_enum_double(struct snd_kcontrol *kcontrol, |
@@ -333,6 +375,10 @@ struct snd_soc_dapm_route { | |||
333 | const char *sink; | 375 | const char *sink; |
334 | const char *control; | 376 | const char *control; |
335 | const char *source; | 377 | const char *source; |
378 | |||
379 | /* Note: currently only supported for links where source is a supply */ | ||
380 | int (*connected)(struct snd_soc_dapm_widget *source, | ||
381 | struct snd_soc_dapm_widget *sink); | ||
336 | }; | 382 | }; |
337 | 383 | ||
338 | /* dapm audio path between two widgets */ | 384 | /* dapm audio path between two widgets */ |
@@ -349,6 +395,9 @@ struct snd_soc_dapm_path { | |||
349 | u32 connect:1; /* source and sink widgets are connected */ | 395 | u32 connect:1; /* source and sink widgets are connected */ |
350 | u32 walked:1; /* path has been walked */ | 396 | u32 walked:1; /* path has been walked */ |
351 | 397 | ||
398 | int (*connected)(struct snd_soc_dapm_widget *source, | ||
399 | struct snd_soc_dapm_widget *sink); | ||
400 | |||
352 | struct list_head list_source; | 401 | struct list_head list_source; |
353 | struct list_head list_sink; | 402 | struct list_head list_sink; |
354 | struct list_head list; | 403 | struct list_head list; |