Skip to content

Commit ea52465

Browse files
CassivsGabriellisgregkh
authored andcommitted
ALSA: hda: cs35l56: Propagate ASP TX source control errors
commit 0faacc0 upstream. cs35l56_hda_mixer_get() ignores regmap_read() and cs35l56_hda_mixer_put() ignores regmap_update_bits_check(). This makes the ASP TX source controls report success when a regmap access fails. The write path returns no change instead of an error, and the read path continues after a failed read instead of aborting the control callback. Propagate the regmap errors, matching the posture and volume controls in this driver. Fixes: 73cfbfa ("ALSA: hda/cs35l56: Add driver for Cirrus Logic CS35L56 amplifier") Cc: stable@vger.kernel.org Signed-off-by: Cássio Gabriel <cassiogabrielcontato@gmail.com> Reviewed-by: Richard Fitzgerald <rf@opensource.cirrus.com> Signed-off-by: Takashi Iwai <tiwai@suse.de> Link: https://patch.msgid.link/20260423-alsa-cs35l56-asp-tx-source-errors-v1-1-17ea7c62ec31@gmail.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
1 parent 9119500 commit ea52465

1 file changed

Lines changed: 14 additions & 5 deletions

File tree

sound/hda/codecs/side-codecs/cs35l56_hda.c

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -180,11 +180,15 @@ static int cs35l56_hda_mixer_get(struct snd_kcontrol *kcontrol,
180180
{
181181
struct cs35l56_hda *cs35l56 = snd_kcontrol_chip(kcontrol);
182182
unsigned int reg_val;
183-
int i;
183+
int i, ret;
184184

185185
cs35l56_hda_wait_dsp_ready(cs35l56);
186186

187-
regmap_read(cs35l56->base.regmap, kcontrol->private_value, &reg_val);
187+
ret = regmap_read(cs35l56->base.regmap, kcontrol->private_value,
188+
&reg_val);
189+
if (ret)
190+
return ret;
191+
188192
reg_val &= CS35L56_ASP_TXn_SRC_MASK;
189193

190194
for (i = 0; i < CS35L56_NUM_INPUT_SRC; ++i) {
@@ -203,15 +207,20 @@ static int cs35l56_hda_mixer_put(struct snd_kcontrol *kcontrol,
203207
struct cs35l56_hda *cs35l56 = snd_kcontrol_chip(kcontrol);
204208
unsigned int item = ucontrol->value.enumerated.item[0];
205209
bool changed;
210+
int ret;
206211

207212
if (item >= CS35L56_NUM_INPUT_SRC)
208213
return -EINVAL;
209214

210215
cs35l56_hda_wait_dsp_ready(cs35l56);
211216

212-
regmap_update_bits_check(cs35l56->base.regmap, kcontrol->private_value,
213-
CS35L56_INPUT_MASK, cs35l56_tx_input_values[item],
214-
&changed);
217+
ret = regmap_update_bits_check(cs35l56->base.regmap,
218+
kcontrol->private_value,
219+
CS35L56_INPUT_MASK,
220+
cs35l56_tx_input_values[item],
221+
&changed);
222+
if (ret)
223+
return ret;
215224

216225
return changed;
217226
}

0 commit comments

Comments
 (0)