Commit 9941ba4b authored by Kuninori Morimoto's avatar Kuninori Morimoto Committed by Mark Brown

ASoC: soc-dapm.c: merge dapm_power_one_widget() and dapm_widget_set_power()

dapm_widget_set_power() (= X) is called only from
dapm_power_one_widget() (= Y), and total purpose of these functions are
calling dapm_seq_insert() (= a) accordingly for each widget.

(X)	static void dapm_widget_set_power(...)
	{
		...
		if (power)
(a)			dapm_seq_insert(w, up_list, true);
		else
(a)			dapm_seq_insert(w, down_list, false);
	}

(Y)	static void dapm_power_one_widget(...)
	{
		..

		switch (w->id) {
		case snd_soc_dapm_pre:
(a)			dapm_seq_insert(w, down_list, false);
			break;
		case snd_soc_dapm_post:
(a)			dapm_seq_insert(w, up_list, true);
			break;

		default:
			power = dapm_widget_power_check(w);

(X)			dapm_widget_set_power(w, power, up_list, down_list);
			break;
		}
	}

It should be more simple, but the code is unnecessarily complicated,
and difficult to read/understand. This patch merge these into one.

Link: https://lore.kernel.org/all/87tu42owdd.wl-kuninori.morimoto.gx@renesas.com/Signed-off-by: default avatarKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Reviewed-by: default avatarAmadeusz Sławiński <amadeuszx.slawinski@linux.intel.com>
Link: https://lore.kernel.org/r/8735bktzrx.wl-kuninori.morimoto.gx@renesas.comSigned-off-by: default avatarMark Brown <broonie@kernel.org>
parent 2e3fafbb
......@@ -1873,11 +1873,25 @@ static void dapm_widget_set_peer_power(struct snd_soc_dapm_widget *peer,
dapm_mark_dirty(peer, "peer state change");
}
static void dapm_widget_set_power(struct snd_soc_dapm_widget *w, bool power,
static void dapm_power_one_widget(struct snd_soc_dapm_widget *w,
struct list_head *up_list,
struct list_head *down_list)
{
struct snd_soc_dapm_path *path;
int power;
switch (w->id) {
case snd_soc_dapm_pre:
power = 0;
goto end;
case snd_soc_dapm_post:
power = 1;
goto end;
default:
break;
}
power = dapm_widget_power_check(w);
if (w->power == power)
return;
......@@ -1897,35 +1911,13 @@ static void dapm_widget_set_power(struct snd_soc_dapm_widget *w, bool power,
if (!w->is_supply)
snd_soc_dapm_widget_for_each_sink_path(w, path)
dapm_widget_set_peer_power(path->sink, power, path->connect);
end:
if (power)
dapm_seq_insert(w, up_list, true);
else
dapm_seq_insert(w, down_list, false);
}
static void dapm_power_one_widget(struct snd_soc_dapm_widget *w,
struct list_head *up_list,
struct list_head *down_list)
{
int power;
switch (w->id) {
case snd_soc_dapm_pre:
dapm_seq_insert(w, down_list, false);
break;
case snd_soc_dapm_post:
dapm_seq_insert(w, up_list, true);
break;
default:
power = dapm_widget_power_check(w);
dapm_widget_set_power(w, power, up_list, down_list);
break;
}
}
static bool dapm_idle_bias_off(struct snd_soc_dapm_context *dapm)
{
if (dapm->idle_bias_off)
......
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