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@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