Commit f6d655a6 authored by Mark Brown's avatar Mark Brown

ASoC: Support DAPM events for DACs and ADCs

Signed-off-by: default avatarMark Brown <broonie@opensource.wolfsonmicro.com>
parent 025756ec
...@@ -140,9 +140,19 @@ ...@@ -140,9 +140,19 @@
#define SND_SOC_DAPM_DAC(wname, stname, wreg, wshift, winvert) \ #define SND_SOC_DAPM_DAC(wname, stname, wreg, wshift, winvert) \
{ .id = snd_soc_dapm_dac, .name = wname, .sname = stname, .reg = wreg, \ { .id = snd_soc_dapm_dac, .name = wname, .sname = stname, .reg = wreg, \
.shift = wshift, .invert = winvert} .shift = wshift, .invert = 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, \
.event = wevent, .event_flags = wflags}
#define SND_SOC_DAPM_ADC(wname, stname, wreg, wshift, winvert) \ #define SND_SOC_DAPM_ADC(wname, stname, wreg, wshift, winvert) \
{ .id = snd_soc_dapm_adc, .name = wname, .sname = stname, .reg = wreg, \ { .id = snd_soc_dapm_adc, .name = wname, .sname = stname, .reg = wreg, \
.shift = wshift, .invert = winvert} .shift = wshift, .invert = 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, \
.event = wevent, .event_flags = wflags}
/* generic register modifier widget */ /* generic register modifier widget */
#define SND_SOC_DAPM_REG(wid, wname, wreg, wshift, wmask, won_val, woff_val) \ #define SND_SOC_DAPM_REG(wid, wname, wreg, wshift, wmask, won_val, woff_val) \
......
...@@ -598,18 +598,22 @@ static int dapm_power_widget(struct snd_soc_codec *codec, int event, ...@@ -598,18 +598,22 @@ static int dapm_power_widget(struct snd_soc_codec *codec, int event,
if (w->id == snd_soc_dapm_adc && w->active) { if (w->id == snd_soc_dapm_adc && w->active) {
in = is_connected_input_ep(w); in = is_connected_input_ep(w);
dapm_clear_walk(w->codec); dapm_clear_walk(w->codec);
w->power = (in != 0) ? 1 : 0; power = (in != 0) ? 1 : 0;
dapm_update_bits(w); if (power == w->power)
return 0; return 0;
w->power = power;
return dapm_generic_apply_power(w);
} }
/* active DAC */ /* active DAC */
if (w->id == snd_soc_dapm_dac && w->active) { if (w->id == snd_soc_dapm_dac && w->active) {
out = is_connected_output_ep(w); out = is_connected_output_ep(w);
dapm_clear_walk(w->codec); dapm_clear_walk(w->codec);
w->power = (out != 0) ? 1 : 0; power = (out != 0) ? 1 : 0;
dapm_update_bits(w); if (power == w->power)
return 0; return 0;
w->power = power;
return dapm_generic_apply_power(w);
} }
/* pre and post event widgets */ /* pre and post event widgets */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment