Skip to content

Commit

Permalink
ASoC: Make the DAPM power check an operation on the widget
Browse files Browse the repository at this point in the history
Rather than having switch statements at point of use make the DAPM
power check a member of the widget structure and set it when we
instantiate the widget.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
  • Loading branch information
broonie committed Apr 20, 2009
1 parent 6ea31b9 commit b75576d
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 14 deletions.
2 changes: 2 additions & 0 deletions include/sound/soc-dapm.h
Original file line number Diff line number Diff line change
Expand Up @@ -367,6 +367,8 @@ struct snd_soc_dapm_widget {
unsigned char suspend:1; /* was active before suspend */
unsigned char pmdown:1; /* waiting for timeout */

int (*power_check)(struct snd_soc_dapm_widget *w);

/* external events */
unsigned short event_flags; /* flags to specify event types */
int (*event)(struct snd_soc_dapm_widget*, struct snd_kcontrol *, int);
Expand Down
27 changes: 13 additions & 14 deletions sound/soc/soc-dapm.c
Original file line number Diff line number Diff line change
Expand Up @@ -631,20 +631,7 @@ static int dapm_power_widget(struct snd_soc_codec *codec, int event,
{
int power, ret;

/* Work out the new power state */
switch (w->id) {
case snd_soc_dapm_vmid:
/* No action required */
return 0;

case snd_soc_dapm_adc:
power = dapm_adc_check_power(w);
break;

case snd_soc_dapm_dac:
power = dapm_dac_check_power(w);
break;

case snd_soc_dapm_pre:
if (!w->event)
return 0;
Expand Down Expand Up @@ -680,10 +667,13 @@ static int dapm_power_widget(struct snd_soc_codec *codec, int event,
return 0;

default:
power = dapm_generic_check_power(w);
break;
}

if (!w->power_check)
return 0;

power = w->power_check(w);
if (w->power == power)
return 0;
w->power = power;
Expand Down Expand Up @@ -1147,15 +1137,22 @@ int snd_soc_dapm_new_widgets(struct snd_soc_codec *codec)
case snd_soc_dapm_switch:
case snd_soc_dapm_mixer:
case snd_soc_dapm_mixer_named_ctl:
w->power_check = dapm_generic_check_power;
dapm_new_mixer(codec, w);
break;
case snd_soc_dapm_mux:
case snd_soc_dapm_value_mux:
w->power_check = dapm_generic_check_power;
dapm_new_mux(codec, w);
break;
case snd_soc_dapm_adc:
w->power_check = dapm_adc_check_power;
break;
case snd_soc_dapm_dac:
w->power_check = dapm_dac_check_power;
break;
case snd_soc_dapm_pga:
w->power_check = dapm_generic_check_power;
dapm_new_pga(codec, w);
break;
case snd_soc_dapm_input:
Expand All @@ -1165,6 +1162,8 @@ int snd_soc_dapm_new_widgets(struct snd_soc_codec *codec)
case snd_soc_dapm_hp:
case snd_soc_dapm_mic:
case snd_soc_dapm_line:
w->power_check = dapm_generic_check_power;
break;
case snd_soc_dapm_vmid:
case snd_soc_dapm_pre:
case snd_soc_dapm_post:
Expand Down

0 comments on commit b75576d

Please sign in to comment.