Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bf1c0cf1 authored by qctecmdr Service's avatar qctecmdr Service Committed by Gerrit - the friendly Code Review server
Browse files

Merge "ASoC: Add locking in DAPM widget power update"

parents 3c99b1eb 138aec88
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -1043,6 +1043,7 @@ struct snd_soc_card {

	struct mutex mutex;
	struct mutex dapm_mutex;
	struct mutex dapm_power_mutex;

	bool instantiated;
	bool topology_shortname_created;
+1 −0
Original line number Diff line number Diff line
@@ -2733,6 +2733,7 @@ int snd_soc_register_card(struct snd_soc_card *card)
	card->instantiated = 0;
	mutex_init(&card->mutex);
	mutex_init(&card->dapm_mutex);
	mutex_init(&card->dapm_power_mutex);

	ret = snd_soc_instantiate_card(card);
	if (ret != 0)
+4 −2
Original line number Diff line number Diff line
@@ -1567,7 +1567,7 @@ static void dapm_seq_run(struct snd_soc_card *card,
		/* Do we need to apply any queued changes? */
		if (sort[w->id] != cur_sort || w->reg != cur_reg ||
		    w->dapm != cur_dapm || w->subseq != cur_subseq) {
			if (!list_empty(&pending))
			if (cur_dapm && !list_empty(&pending))
				dapm_seq_run_coalesced(card, &pending);

			if (cur_dapm && cur_dapm->seq_notifier) {
@@ -1630,7 +1630,7 @@ static void dapm_seq_run(struct snd_soc_card *card,
				"ASoC: Failed to apply widget power: %d\n", ret);
	}

	if (!list_empty(&pending))
	if (cur_dapm && !list_empty(&pending))
		dapm_seq_run_coalesced(card, &pending);

	if (cur_dapm && cur_dapm->seq_notifier) {
@@ -1875,6 +1875,7 @@ static int dapm_power_widgets(struct snd_soc_card *card, int event)
	lockdep_assert_held(&card->dapm_mutex);

	trace_snd_soc_dapm_start(card);
	mutex_lock(&card->dapm_power_mutex);

	list_for_each_entry(d, &card->dapm_list, list) {
		if (dapm_idle_bias_off(d))
@@ -1994,6 +1995,7 @@ static int dapm_power_widgets(struct snd_soc_card *card, int event)
	pop_dbg(card->dev, card->pop_time,
		"DAPM sequencing finished, waiting %dms\n", card->pop_time);
	pop_wait(card->pop_time);
	mutex_unlock(&card->dapm_power_mutex);

	trace_snd_soc_dapm_done(card);