|
@@ -70,121 +70,144 @@ struct device;
|
|
|
.num_kcontrols = 0, .reg = SND_SOC_NOPM, .event = wevent, \
|
|
|
.event_flags = SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD}
|
|
|
|
|
|
+#define SND_SOC_DAPM_INIT_REG_VAL(wreg, wshift, winvert) \
|
|
|
+ .reg = wreg, .mask = 1, .shift = wshift, \
|
|
|
+ .on_val = winvert ? 0 : 1, .off_val = winvert ? 1 : 0
|
|
|
+
|
|
|
/* path domain */
|
|
|
#define SND_SOC_DAPM_PGA(wname, wreg, wshift, winvert,\
|
|
|
wcontrols, wncontrols) \
|
|
|
-{ .id = snd_soc_dapm_pga, .name = wname, .reg = wreg, .shift = wshift, \
|
|
|
- .invert = winvert, .kcontrol_news = wcontrols, .num_kcontrols = wncontrols}
|
|
|
+{ .id = snd_soc_dapm_pga, .name = wname, \
|
|
|
+ SND_SOC_DAPM_INIT_REG_VAL(wreg, wshift, winvert), \
|
|
|
+ .kcontrol_news = wcontrols, .num_kcontrols = wncontrols}
|
|
|
#define SND_SOC_DAPM_OUT_DRV(wname, wreg, wshift, winvert,\
|
|
|
wcontrols, wncontrols) \
|
|
|
-{ .id = snd_soc_dapm_out_drv, .name = wname, .reg = wreg, .shift = wshift, \
|
|
|
- .invert = winvert, .kcontrol_news = wcontrols, .num_kcontrols = wncontrols}
|
|
|
+{ .id = snd_soc_dapm_out_drv, .name = wname, \
|
|
|
+ SND_SOC_DAPM_INIT_REG_VAL(wreg, wshift, winvert), \
|
|
|
+ .kcontrol_news = wcontrols, .num_kcontrols = wncontrols}
|
|
|
#define SND_SOC_DAPM_MIXER(wname, wreg, wshift, winvert, \
|
|
|
wcontrols, wncontrols)\
|
|
|
-{ .id = snd_soc_dapm_mixer, .name = wname, .reg = wreg, .shift = wshift, \
|
|
|
- .invert = winvert, .kcontrol_news = wcontrols, .num_kcontrols = wncontrols}
|
|
|
+{ .id = snd_soc_dapm_mixer, .name = wname, \
|
|
|
+ SND_SOC_DAPM_INIT_REG_VAL(wreg, wshift, winvert), \
|
|
|
+ .kcontrol_news = wcontrols, .num_kcontrols = wncontrols}
|
|
|
#define SND_SOC_DAPM_MIXER_NAMED_CTL(wname, wreg, wshift, winvert, \
|
|
|
wcontrols, wncontrols)\
|
|
|
-{ .id = snd_soc_dapm_mixer_named_ctl, .name = wname, .reg = wreg, \
|
|
|
- .shift = wshift, .invert = winvert, .kcontrol_news = wcontrols, \
|
|
|
- .num_kcontrols = wncontrols}
|
|
|
+{ .id = snd_soc_dapm_mixer_named_ctl, .name = wname, \
|
|
|
+ SND_SOC_DAPM_INIT_REG_VAL(wreg, wshift, winvert), \
|
|
|
+ .kcontrol_news = wcontrols, .num_kcontrols = wncontrols}
|
|
|
#define SND_SOC_DAPM_MICBIAS(wname, wreg, wshift, winvert) \
|
|
|
-{ .id = snd_soc_dapm_micbias, .name = wname, .reg = wreg, .shift = wshift, \
|
|
|
- .invert = winvert, .kcontrol_news = NULL, .num_kcontrols = 0}
|
|
|
+{ .id = snd_soc_dapm_micbias, .name = wname, \
|
|
|
+ SND_SOC_DAPM_INIT_REG_VAL(wreg, wshift, winvert), \
|
|
|
+ .kcontrol_news = NULL, .num_kcontrols = 0}
|
|
|
#define SND_SOC_DAPM_SWITCH(wname, wreg, wshift, winvert, wcontrols) \
|
|
|
-{ .id = snd_soc_dapm_switch, .name = wname, .reg = wreg, .shift = wshift, \
|
|
|
- .invert = winvert, .kcontrol_news = wcontrols, .num_kcontrols = 1}
|
|
|
+{ .id = snd_soc_dapm_switch, .name = wname, \
|
|
|
+ SND_SOC_DAPM_INIT_REG_VAL(wreg, wshift, winvert), \
|
|
|
+ .kcontrol_news = wcontrols, .num_kcontrols = 1}
|
|
|
#define SND_SOC_DAPM_MUX(wname, wreg, wshift, winvert, wcontrols) \
|
|
|
-{ .id = snd_soc_dapm_mux, .name = wname, .reg = wreg, .shift = wshift, \
|
|
|
- .invert = winvert, .kcontrol_news = wcontrols, .num_kcontrols = 1}
|
|
|
+{ .id = snd_soc_dapm_mux, .name = wname, .reg = wreg, \
|
|
|
+ .kcontrol_news = wcontrols, .num_kcontrols = 1}
|
|
|
#define SND_SOC_DAPM_VIRT_MUX(wname, wreg, wshift, winvert, wcontrols) \
|
|
|
-{ .id = snd_soc_dapm_virt_mux, .name = wname, .reg = wreg, .shift = wshift, \
|
|
|
- .invert = winvert, .kcontrol_news = wcontrols, .num_kcontrols = 1}
|
|
|
+{ .id = snd_soc_dapm_virt_mux, .name = wname, \
|
|
|
+ SND_SOC_DAPM_INIT_REG_VAL(wreg, wshift, winvert), \
|
|
|
+ .kcontrol_news = wcontrols, .num_kcontrols = 1}
|
|
|
#define SND_SOC_DAPM_VALUE_MUX(wname, wreg, wshift, winvert, wcontrols) \
|
|
|
-{ .id = snd_soc_dapm_value_mux, .name = wname, .reg = wreg, \
|
|
|
- .shift = wshift, .invert = winvert, .kcontrol_news = wcontrols, \
|
|
|
- .num_kcontrols = 1}
|
|
|
+{ .id = snd_soc_dapm_value_mux, .name = wname, \
|
|
|
+ SND_SOC_DAPM_INIT_REG_VAL(wreg, wshift, winvert), \
|
|
|
+ .kcontrol_news = wcontrols, .num_kcontrols = 1}
|
|
|
|
|
|
/* Simplified versions of above macros, assuming wncontrols = ARRAY_SIZE(wcontrols) */
|
|
|
#define SOC_PGA_ARRAY(wname, wreg, wshift, winvert,\
|
|
|
wcontrols) \
|
|
|
-{ .id = snd_soc_dapm_pga, .name = wname, .reg = wreg, .shift = wshift, \
|
|
|
- .invert = winvert, .kcontrol_news = wcontrols, .num_kcontrols = ARRAY_SIZE(wcontrols)}
|
|
|
+{ .id = snd_soc_dapm_pga, .name = wname, \
|
|
|
+ SND_SOC_DAPM_INIT_REG_VAL(wreg, wshift, winvert), \
|
|
|
+ .kcontrol_news = wcontrols, .num_kcontrols = ARRAY_SIZE(wcontrols)}
|
|
|
#define SOC_MIXER_ARRAY(wname, wreg, wshift, winvert, \
|
|
|
wcontrols)\
|
|
|
-{ .id = snd_soc_dapm_mixer, .name = wname, .reg = wreg, .shift = wshift, \
|
|
|
- .invert = winvert, .kcontrol_news = wcontrols, .num_kcontrols = ARRAY_SIZE(wcontrols)}
|
|
|
+{ .id = snd_soc_dapm_mixer, .name = wname, \
|
|
|
+ SND_SOC_DAPM_INIT_REG_VAL(wreg, wshift, winvert), \
|
|
|
+ .kcontrol_news = wcontrols, .num_kcontrols = ARRAY_SIZE(wcontrols)}
|
|
|
#define SOC_MIXER_NAMED_CTL_ARRAY(wname, wreg, wshift, winvert, \
|
|
|
wcontrols)\
|
|
|
-{ .id = snd_soc_dapm_mixer_named_ctl, .name = wname, .reg = wreg, \
|
|
|
- .shift = wshift, .invert = winvert, .kcontrol_news = wcontrols, \
|
|
|
- .num_kcontrols = ARRAY_SIZE(wcontrols)}
|
|
|
+{ .id = snd_soc_dapm_mixer_named_ctl, .name = wname, \
|
|
|
+ SND_SOC_DAPM_INIT_REG_VAL(wreg, wshift, winvert), \
|
|
|
+ .kcontrol_news = wcontrols, .num_kcontrols = ARRAY_SIZE(wcontrols)}
|
|
|
|
|
|
/* path domain with event - event handler must return 0 for success */
|
|
|
#define SND_SOC_DAPM_PGA_E(wname, wreg, wshift, winvert, wcontrols, \
|
|
|
wncontrols, wevent, wflags) \
|
|
|
-{ .id = snd_soc_dapm_pga, .name = wname, .reg = wreg, .shift = wshift, \
|
|
|
- .invert = winvert, .kcontrol_news = wcontrols, .num_kcontrols = wncontrols, \
|
|
|
+{ .id = snd_soc_dapm_pga, .name = wname, \
|
|
|
+ SND_SOC_DAPM_INIT_REG_VAL(wreg, wshift, winvert), \
|
|
|
+ .kcontrol_news = wcontrols, .num_kcontrols = wncontrols, \
|
|
|
.event = wevent, .event_flags = wflags}
|
|
|
#define SND_SOC_DAPM_OUT_DRV_E(wname, wreg, wshift, winvert, wcontrols, \
|
|
|
wncontrols, wevent, wflags) \
|
|
|
-{ .id = snd_soc_dapm_out_drv, .name = wname, .reg = wreg, .shift = wshift, \
|
|
|
- .invert = winvert, .kcontrol_news = wcontrols, .num_kcontrols = wncontrols, \
|
|
|
+{ .id = snd_soc_dapm_out_drv, .name = wname, \
|
|
|
+ SND_SOC_DAPM_INIT_REG_VAL(wreg, wshift, winvert), \
|
|
|
+ .kcontrol_news = wcontrols, .num_kcontrols = wncontrols, \
|
|
|
.event = wevent, .event_flags = wflags}
|
|
|
#define SND_SOC_DAPM_MIXER_E(wname, wreg, wshift, winvert, wcontrols, \
|
|
|
wncontrols, wevent, wflags) \
|
|
|
-{ .id = snd_soc_dapm_mixer, .name = wname, .reg = wreg, .shift = wshift, \
|
|
|
- .invert = winvert, .kcontrol_news = wcontrols, .num_kcontrols = wncontrols, \
|
|
|
+{ .id = snd_soc_dapm_mixer, .name = wname, \
|
|
|
+ SND_SOC_DAPM_INIT_REG_VAL(wreg, wshift, winvert), \
|
|
|
+ .kcontrol_news = wcontrols, .num_kcontrols = wncontrols, \
|
|
|
.event = wevent, .event_flags = wflags}
|
|
|
#define SND_SOC_DAPM_MIXER_NAMED_CTL_E(wname, wreg, wshift, winvert, \
|
|
|
wcontrols, wncontrols, wevent, wflags) \
|
|
|
-{ .id = snd_soc_dapm_mixer, .name = wname, .reg = wreg, .shift = wshift, \
|
|
|
- .invert = winvert, .kcontrol_news = wcontrols, \
|
|
|
+{ .id = snd_soc_dapm_mixer, .name = wname, \
|
|
|
+ SND_SOC_DAPM_INIT_REG_VAL(wreg, wshift, winvert), \
|
|
|
+ .kcontrol_news = wcontrols, \
|
|
|
.num_kcontrols = wncontrols, .event = wevent, .event_flags = wflags}
|
|
|
#define SND_SOC_DAPM_SWITCH_E(wname, wreg, wshift, winvert, wcontrols, \
|
|
|
wevent, wflags) \
|
|
|
-{ .id = snd_soc_dapm_switch, .name = wname, .reg = wreg, .shift = wshift, \
|
|
|
- .invert = winvert, .kcontrol_news = wcontrols, .num_kcontrols = 1, \
|
|
|
+{ .id = snd_soc_dapm_switch, .name = wname, \
|
|
|
+ SND_SOC_DAPM_INIT_REG_VAL(wreg, wshift, winvert), \
|
|
|
+ .kcontrol_news = wcontrols, .num_kcontrols = 1, \
|
|
|
.event = wevent, .event_flags = wflags}
|
|
|
#define SND_SOC_DAPM_MUX_E(wname, wreg, wshift, winvert, wcontrols, \
|
|
|
wevent, wflags) \
|
|
|
-{ .id = snd_soc_dapm_mux, .name = wname, .reg = wreg, .shift = wshift, \
|
|
|
- .invert = winvert, .kcontrol_news = wcontrols, .num_kcontrols = 1, \
|
|
|
+{ .id = snd_soc_dapm_mux, .name = wname, \
|
|
|
+ SND_SOC_DAPM_INIT_REG_VAL(wreg, wshift, winvert), \
|
|
|
+ .kcontrol_news = wcontrols, .num_kcontrols = 1, \
|
|
|
.event = wevent, .event_flags = wflags}
|
|
|
#define SND_SOC_DAPM_VIRT_MUX_E(wname, wreg, wshift, winvert, wcontrols, \
|
|
|
wevent, wflags) \
|
|
|
-{ .id = snd_soc_dapm_virt_mux, .name = wname, .reg = wreg, .shift = wshift, \
|
|
|
- .invert = winvert, .kcontrol_news = wcontrols, .num_kcontrols = 1, \
|
|
|
+{ .id = snd_soc_dapm_virt_mux, .name = wname, \
|
|
|
+ SND_SOC_DAPM_INIT_REG_VAL(wreg, wshift, winvert), \
|
|
|
+ .kcontrol_news = wcontrols, .num_kcontrols = 1, \
|
|
|
.event = wevent, .event_flags = wflags}
|
|
|
|
|
|
/* additional sequencing control within an event type */
|
|
|
#define SND_SOC_DAPM_PGA_S(wname, wsubseq, wreg, wshift, winvert, \
|
|
|
wevent, wflags) \
|
|
|
-{ .id = snd_soc_dapm_pga, .name = wname, .reg = wreg, .shift = wshift, \
|
|
|
- .invert = winvert, .event = wevent, .event_flags = wflags, \
|
|
|
+{ .id = snd_soc_dapm_pga, .name = wname, \
|
|
|
+ SND_SOC_DAPM_INIT_REG_VAL(wreg, wshift, winvert), \
|
|
|
+ .event = wevent, .event_flags = wflags, \
|
|
|
.subseq = wsubseq}
|
|
|
#define SND_SOC_DAPM_SUPPLY_S(wname, wsubseq, wreg, wshift, winvert, wevent, \
|
|
|
wflags) \
|
|
|
-{ .id = snd_soc_dapm_supply, .name = wname, .reg = wreg, \
|
|
|
- .shift = wshift, .invert = winvert, .event = wevent, \
|
|
|
- .event_flags = wflags, .subseq = wsubseq}
|
|
|
+{ .id = snd_soc_dapm_supply, .name = wname, \
|
|
|
+ SND_SOC_DAPM_INIT_REG_VAL(wreg, wshift, winvert), \
|
|
|
+ .event = wevent, .event_flags = wflags, .subseq = wsubseq}
|
|
|
|
|
|
/* Simplified versions of above macros, assuming wncontrols = ARRAY_SIZE(wcontrols) */
|
|
|
#define SOC_PGA_E_ARRAY(wname, wreg, wshift, winvert, wcontrols, \
|
|
|
wevent, wflags) \
|
|
|
-{ .id = snd_soc_dapm_pga, .name = wname, .reg = wreg, .shift = wshift, \
|
|
|
- .invert = winvert, .kcontrol_news = wcontrols, .num_kcontrols = ARRAY_SIZE(wcontrols), \
|
|
|
+{ .id = snd_soc_dapm_pga, .name = wname, \
|
|
|
+ SND_SOC_DAPM_INIT_REG_VAL(wreg, wshift, winvert), \
|
|
|
+ .kcontrol_news = wcontrols, .num_kcontrols = ARRAY_SIZE(wcontrols), \
|
|
|
.event = wevent, .event_flags = wflags}
|
|
|
#define SOC_MIXER_E_ARRAY(wname, wreg, wshift, winvert, wcontrols, \
|
|
|
wevent, wflags) \
|
|
|
-{ .id = snd_soc_dapm_mixer, .name = wname, .reg = wreg, .shift = wshift, \
|
|
|
- .invert = winvert, .kcontrol_news = wcontrols, .num_kcontrols = ARRAY_SIZE(wcontrols), \
|
|
|
+{ .id = snd_soc_dapm_mixer, .name = wname, \
|
|
|
+ SND_SOC_DAPM_INIT_REG_VAL(wreg, wshift, winvert), \
|
|
|
+ .kcontrol_news = wcontrols, .num_kcontrols = ARRAY_SIZE(wcontrols), \
|
|
|
.event = wevent, .event_flags = wflags}
|
|
|
#define SOC_MIXER_NAMED_CTL_E_ARRAY(wname, wreg, wshift, winvert, \
|
|
|
wcontrols, wevent, wflags) \
|
|
|
-{ .id = snd_soc_dapm_mixer, .name = wname, .reg = wreg, .shift = wshift, \
|
|
|
- .invert = winvert, .kcontrol_news = wcontrols, \
|
|
|
- .num_kcontrols = ARRAY_SIZE(wcontrols), .event = wevent, .event_flags = wflags}
|
|
|
+{ .id = snd_soc_dapm_mixer, .name = wname, \
|
|
|
+ SND_SOC_DAPM_INIT_REG_VAL(wreg, wshift, winvert), \
|
|
|
+ .kcontrol_news = wcontrols, .num_kcontrols = ARRAY_SIZE(wcontrols), \
|
|
|
+ .event = wevent, .event_flags = wflags}
|
|
|
|
|
|
/* events that are pre and post DAPM */
|
|
|
#define SND_SOC_DAPM_PRE(wname, wevent) \
|
|
@@ -199,35 +222,36 @@ struct device;
|
|
|
/* stream domain */
|
|
|
#define SND_SOC_DAPM_AIF_IN(wname, stname, wslot, wreg, wshift, winvert) \
|
|
|
{ .id = snd_soc_dapm_aif_in, .name = wname, .sname = stname, \
|
|
|
- .reg = wreg, .shift = wshift, .invert = winvert }
|
|
|
+ SND_SOC_DAPM_INIT_REG_VAL(wreg, wshift, winvert), }
|
|
|
#define SND_SOC_DAPM_AIF_IN_E(wname, stname, wslot, wreg, wshift, winvert, \
|
|
|
wevent, wflags) \
|
|
|
{ .id = snd_soc_dapm_aif_in, .name = wname, .sname = stname, \
|
|
|
- .reg = wreg, .shift = wshift, .invert = winvert, \
|
|
|
+ SND_SOC_DAPM_INIT_REG_VAL(wreg, wshift, winvert), \
|
|
|
.event = wevent, .event_flags = wflags }
|
|
|
#define SND_SOC_DAPM_AIF_OUT(wname, stname, wslot, wreg, wshift, winvert) \
|
|
|
{ .id = snd_soc_dapm_aif_out, .name = wname, .sname = stname, \
|
|
|
- .reg = wreg, .shift = wshift, .invert = winvert }
|
|
|
+ SND_SOC_DAPM_INIT_REG_VAL(wreg, wshift, winvert), }
|
|
|
#define SND_SOC_DAPM_AIF_OUT_E(wname, stname, wslot, wreg, wshift, winvert, \
|
|
|
wevent, wflags) \
|
|
|
{ .id = snd_soc_dapm_aif_out, .name = wname, .sname = stname, \
|
|
|
- .reg = wreg, .shift = wshift, .invert = winvert, \
|
|
|
+ SND_SOC_DAPM_INIT_REG_VAL(wreg, wshift, winvert), \
|
|
|
.event = wevent, .event_flags = wflags }
|
|
|
#define SND_SOC_DAPM_DAC(wname, stname, wreg, wshift, winvert) \
|
|
|
-{ .id = snd_soc_dapm_dac, .name = wname, .sname = stname, .reg = wreg, \
|
|
|
- .shift = wshift, .invert = winvert}
|
|
|
+{ .id = snd_soc_dapm_dac, .name = wname, .sname = stname, \
|
|
|
+ SND_SOC_DAPM_INIT_REG_VAL(wreg, wshift, winvert) }
|
|
|
#define SND_SOC_DAPM_DAC_E(wname, stname, wreg, wshift, winvert, \
|
|
|
wevent, wflags) \
|
|
|
-{ .id = snd_soc_dapm_dac, .name = wname, .sname = stname, .reg = wreg, \
|
|
|
- .shift = wshift, .invert = winvert, \
|
|
|
+{ .id = snd_soc_dapm_dac, .name = wname, .sname = stname, \
|
|
|
+ SND_SOC_DAPM_INIT_REG_VAL(wreg, wshift, winvert), \
|
|
|
.event = wevent, .event_flags = wflags}
|
|
|
+
|
|
|
#define SND_SOC_DAPM_ADC(wname, stname, wreg, wshift, winvert) \
|
|
|
-{ .id = snd_soc_dapm_adc, .name = wname, .sname = stname, .reg = wreg, \
|
|
|
- .shift = wshift, .invert = winvert}
|
|
|
+{ .id = snd_soc_dapm_adc, .name = wname, .sname = stname, \
|
|
|
+ SND_SOC_DAPM_INIT_REG_VAL(wreg, wshift, winvert), }
|
|
|
#define SND_SOC_DAPM_ADC_E(wname, stname, wreg, wshift, winvert, \
|
|
|
wevent, wflags) \
|
|
|
-{ .id = snd_soc_dapm_adc, .name = wname, .sname = stname, .reg = wreg, \
|
|
|
- .shift = wshift, .invert = winvert, \
|
|
|
+{ .id = snd_soc_dapm_adc, .name = wname, .sname = stname, \
|
|
|
+ SND_SOC_DAPM_INIT_REG_VAL(wreg, wshift, winvert), \
|
|
|
.event = wevent, .event_flags = wflags}
|
|
|
#define SND_SOC_DAPM_CLOCK_SUPPLY(wname) \
|
|
|
{ .id = snd_soc_dapm_clock_supply, .name = wname, \
|
|
@@ -241,14 +265,14 @@ struct device;
|
|
|
.on_val = won_val, .off_val = woff_val, .event = dapm_reg_event, \
|
|
|
.event_flags = SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD}
|
|
|
#define SND_SOC_DAPM_SUPPLY(wname, wreg, wshift, winvert, wevent, wflags) \
|
|
|
-{ .id = snd_soc_dapm_supply, .name = wname, .reg = wreg, \
|
|
|
- .shift = wshift, .invert = winvert, .event = wevent, \
|
|
|
- .event_flags = wflags}
|
|
|
+{ .id = snd_soc_dapm_supply, .name = wname, \
|
|
|
+ SND_SOC_DAPM_INIT_REG_VAL(wreg, wshift, winvert), \
|
|
|
+ .event = wevent, .event_flags = wflags}
|
|
|
#define SND_SOC_DAPM_REGULATOR_SUPPLY(wname, wdelay, wflags) \
|
|
|
{ .id = snd_soc_dapm_regulator_supply, .name = wname, \
|
|
|
.reg = SND_SOC_NOPM, .shift = wdelay, .event = dapm_regulator_event, \
|
|
|
.event_flags = SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD, \
|
|
|
- .invert = wflags}
|
|
|
+ .on_val = wflags}
|
|
|
|
|
|
|
|
|
/* dapm kcontrol types */
|
|
@@ -527,7 +551,6 @@ struct snd_soc_dapm_widget {
|
|
|
unsigned int on_val; /* on state value */
|
|
|
unsigned int off_val; /* off state value */
|
|
|
unsigned char power:1; /* block power status */
|
|
|
- unsigned char invert:1; /* invert the power bit */
|
|
|
unsigned char active:1; /* active stream on DAC, ADC's */
|
|
|
unsigned char connected:1; /* connected codec pin */
|
|
|
unsigned char new:1; /* cnew complete */
|