Re: [PATCH 2/2] ASoC: qcom: audioreach: only disconnect the route a mixer control owns
From: Mark Brown
Date: Thu Nov 12 2026 - 16:23:19 EST
> Each AudioReach virtual mixer route control ("<BE> Audio Mixer <FE>")
> connects a front-end stream graph to a back-end device graph by storing
> the source module in the device graph's audioreach_graph_info. Writing 0
> to any of these controls clears that link unconditionally, even when the
> device graph is connected to a different front end.
>
> When two front ends can feed the same back end the result therefore
> depends on write order. On QCS6490 (Radxa Dragon Q6A):
> --- a/sound/soc/qcom/qdsp6/topology.c
> +++ b/sound/soc/qcom/qdsp6/topology.c
> @@ -1300,7 +1300,7 @@ static int audioreach_put_audio_mixer(struct snd_kcontrol *kcontrol,
> if (ucontrol->value.integer.value[0]) {
> audioreach_connect_sub_graphs(data, scontrol, dapm_scontrol, true);
> snd_soc_dapm_mixer_update_power(dapm, kcontrol, 1, NULL);
> - } else {
> + } else if (audioreach_is_vmixer_connected(data, scontrol, dapm_scontrol)) {
> audioreach_connect_sub_graphs(data, scontrol, dapm_scontrol, false);
> snd_soc_dapm_mixer_update_power(dapm, kcontrol, 0, NULL);
> }
Given that this is just about protecting the link update only
audioreach_connect_sub_graphs() should check for a connection, the mixer
update will still have updated the per mixer state so DAPM will need to
put that into effect.
--
Mark Brown <broonie@xxxxxxxxxx>