[alsa-devel] [PATCH 1/2] ASoC: Refector DAPM event handler

Takashi Iwai tiwai at suse.de
Thu Jul 17 14:45:19 CEST 2008


At Thu, 17 Jul 2008 11:59:35 +0100,
Mark Brown wrote:
> 
> The DAPM event callback code has many layers of indentation. Refector

Refactor?

> the code to give less indentation in order to facilitiate further
> refactoring.
> 
> Signed-off-by: Mark Brown <broonie at opensource.wolfsonmicro.com>
> ---
>  sound/soc/soc-dapm.c |   76 +++++++++++++++++++++++++-------------------------
>  1 files changed, 38 insertions(+), 38 deletions(-)
> 
> diff --git a/sound/soc/soc-dapm.c b/sound/soc/soc-dapm.c
> index 2c87061..9307b10 100644
> --- a/sound/soc/soc-dapm.c
> +++ b/sound/soc/soc-dapm.c
> @@ -587,44 +587,44 @@ static int dapm_power_widgets(struct snd_soc_codec *codec, int event)
>  			w->power = power;
>  
>  			/* call any power change event handlers */
> -			if (power_change) {
> -				if (w->event) {
> -					pr_debug("power %s event for %s flags %x\n",
> -						 w->power ? "on" : "off", w->name, w->event_flags);
> -					if (power) {
> -						/* power up event */
> -						if (w->event_flags & SND_SOC_DAPM_PRE_PMU) {
> -							ret = w->event(w,
> -								NULL, SND_SOC_DAPM_PRE_PMU);
> -							if (ret < 0)
> -								return ret;
> -						}
> -						dapm_update_bits(w);
> -						if (w->event_flags & SND_SOC_DAPM_POST_PMU){
> -							ret = w->event(w,
> -								NULL, SND_SOC_DAPM_POST_PMU);
> -							if (ret < 0)
> -								return ret;
> -						}
> -					} else {
> -						/* power down event */
> -						if (w->event_flags & SND_SOC_DAPM_PRE_PMD) {
> -							ret = w->event(w,
> -								NULL, SND_SOC_DAPM_PRE_PMD);
> -							if (ret < 0)
> -								return ret;
> -						}
> -						dapm_update_bits(w);
> -						if (w->event_flags & SND_SOC_DAPM_POST_PMD) {
> -							ret = w->event(w,
> -								NULL, SND_SOC_DAPM_POST_PMD);
> -							if (ret < 0)
> -								return ret;
> -						}
> -					}
> -				} else
> -					/* no event handler */
> -					dapm_update_bits(w);
> +			if (power_change && w->event)
> +				pr_debug("power %s event for %s flags %x\n",
> +					 w->power ? "on" : "off",
> +					 w->name, w->event_flags);
> +
> +			/* power up pre event */
> +			if (power_change && power && w->event &&
> +			    w->event_flags & SND_SOC_DAPM_PRE_PMU) {
> +				ret = w->event(w, NULL, SND_SOC_DAPM_PRE_PMU);
> +				if (ret < 0)
> +					return ret;
> +			}
> +
> +			/* power down pre event */
> +			if (power_change && !power && w->event &&
> +			    w->event_flags & SND_SOC_DAPM_PRE_PMD) {
> +				ret = w->event(w, NULL, SND_SOC_DAPM_PRE_PMD);
> +				if (ret < 0)
> +					return ret;
> +			}
> +
> +			dapm_update_bits(w);
> +
> +			/* power up post event */
> +			if (power_change && power && w->event &&
> +			    w->event_flags & SND_SOC_DAPM_POST_PMU){
> +				ret = w->event(w,
> +					       NULL, SND_SOC_DAPM_POST_PMU);
> +				if (ret < 0)
> +					return ret;
> +			}
> +
> +			/* power down post event */
> +			if (power_change && !power && w->event &&
> +			    w->event_flags & SND_SOC_DAPM_POST_PMD) {
> +				ret = w->event(w, NULL, SND_SOC_DAPM_POST_PMD);
> +				if (ret < 0)
> +					return ret;

With this patch, dapm_update_bits() is called even when
power_change=0, so it changes the behavior.  You can check
power_change only once and skip the rest via continue if it's false.

Also, better to put parentheses around bit-and operation.

Anyway, if the indent level really matters, you should better to put
it as a function.


thanks,

Takashi


More information about the Alsa-devel mailing list