]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
ASoC: es8328: Fix DAC deemphasis control handling
authorHsieh Hung-En <hungen3108@gmail.com>
Fri, 30 Jan 2026 16:00:13 +0000 (00:00 +0800)
committerMark Brown <broonie@kernel.org>
Mon, 2 Feb 2026 12:49:59 +0000 (12:49 +0000)
The DAC deemphasis control updated the hardware before updating the cached
state, causing the previous setting to be applied.

Update the cached deemphasis state first and then apply the setting.

Also check and propagate errors from es8328_set_deemph() in hw_params().

Signed-off-by: Hsieh Hung-En <hungen3108@gmail.com>
Link: https://patch.msgid.link/20260130160017.2630-2-hungen3108@gmail.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/codecs/es8328.c

index 38340f2922826bc93f09e81d1a075da047857840..46868b7924a0ba0793a6a4c4ab1a40430cf3facb 100644 (file)
@@ -163,12 +163,11 @@ static int es8328_put_deemph(struct snd_kcontrol *kcontrol,
        if (es8328->deemph == deemph)
                return 0;
 
+       es8328->deemph = deemph;
        ret = es8328_set_deemph(component);
        if (ret < 0)
                return ret;
 
-       es8328->deemph = deemph;
-
        return 1;
 }
 
@@ -530,7 +529,9 @@ static int es8328_hw_params(struct snd_pcm_substream *substream,
                        return ret;
 
                es8328->playback_fs = params_rate(params);
-               es8328_set_deemph(component);
+               ret = es8328_set_deemph(component);
+               if (ret < 0)
+                       return ret;
        } else {
                ret = snd_soc_component_update_bits(component, ES8328_ADCCONTROL4,
                                                    ES8328_ADCCONTROL4_ADCWL_MASK,