Re: [PATCH] ALSA: hda: cs35l56: Propagate ASP TX source control errors

From: Cássio Gabriel Monteiro Pires

Date: Thu Apr 23 2026 - 15:36:13 EST


On 4/23/26 11:09, Cássio Gabriel Monteiro Pires wrote:
> On 4/23/26 10:32, Richard Fitzgerald wrote:
>> On 23/04/2026 2:11 pm, Cássio Gabriel wrote:
>>> 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.
>>
>> Are you seeing a problem on hardware? Or is this a static analysis
>> warning?
>
> This was found by code inspection, then checked with a focused
> Coccinelle rule (I do not have the hardware to check it).
>
> Rule:
>
> @ignored_regmap_read@
> position p;
> expression map, reg, val;
> @@
>
> regmap_read@p(map, reg, val);
>
> @script:python depends on ignored_regmap_read@
> p << ignored_regmap_read.p;
> @@
>
> coccilib.report.print_report(p[0], "ignored regmap_read() return value")
>
> @ignored_regmap_update_bits_check@
> position p;
> expression map, reg, mask, val, change;
> @@
>
> regmap_update_bits_check@p(map, reg, mask, val, change);
>
> @script:python depends on ignored_regmap_update_bits_check@
> p << ignored_regmap_update_bits_check.p;
> @@
>
> coccilib.report.print_report(p[0], "ignored regmap_update_bits_check() return value")
>
>
>
> Before the patch:
> $ spatch --very-quiet --cocci-file /tmp/ignored-regmap-access.cocci /tmp/cs35l56_hda-before.c
> /tmp/cs35l56_hda-before.c:187:1-12: ignored regmap_read() return value
> /tmp/cs35l56_hda-before.c:212:1-25: ignored regmap_update_bits_check() return value
>
> After the patch:
> $ spatch --very-quiet --cocci-file /tmp/ignored-regmap-access.cocci sound/hda/codecs/side-
> codecs/cs35l56_hda.c
>
> No matches.

Hello,

Sorry for bothering you guys with this minor fix.

After further analysis checking the callback contract in the current tree:

ALSA propagates negative errors from control callbacks:

sound/core/control.c
ret = kctl->get(kctl, control);
if (ret < 0)
return ret;

sound/core/control.c
result = snd_ctl_put(card, kctl, control, vd->access);
if (result < 0)
return result;

regmap_update_bits_check() also sets *change = false before attempting
the access and returns an error if the read/write fails:

drivers/base/regmap/regmap.c
if (change)
*change = false;
...
ret = _regmap_read(map, reg, &orig);
if (ret != 0)
return ret;

Before the patch, cs35l56_hda_mixer_get() ignored regmap_read() and
cs35l56_hda_mixer_put() ignored regmap_update_bits_check(), so a real
regmap failure was being converted into a successful ALSA callback
return. In the put path that can become return 0, i.e. "success, no
change".

The sibling posture/volume callbacks in the same file already propagate
the regmap errors, so this brings the ASP TX source controls in line
with the rest of the driver.

Looking forward to know what you think.
Thanks!

Attachment: OpenPGP_signature.asc
Description: OpenPGP digital signature