]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
ALSA: pcm_drm_eld: rate-limit ELD parsing errors
authorFrancesco Saverio Pavone <pavone.lawyer@gmail.com>
Sat, 16 May 2026 14:12:44 +0000 (16:12 +0200)
committerTakashi Iwai <tiwai@suse.de>
Sat, 16 May 2026 14:20:07 +0000 (16:20 +0200)
Mirror of Mark Brown's ASoC: hdac_hdmi rate-limit patch (commit
[lkml.kernel.org/lkml/2025/6/13/1380]) for the generic snd_parse_eld()
helper used by ASoC hdmi-codec.

When a HDMI sink is disconnected (e.g. a board with two HDMI outputs and
only one cable), userspace audio servers like PipeWire keep probing the
disconnected card and trigger:

    HDMI: Unknown ELD version 0

at every probe — easily 30+ messages per burst on rk3588. The same
applies to malformed ELD (MNL out of range). Both conditions are
expected when no sink is attached; rate-limit the dev_info() so the
kernel ring buffer does not fill up.

Signed-off-by: Francesco Saverio Pavone <pavone.lawyer@gmail.com>
Link: https://patch.msgid.link/20260516141244.21801-1-pavone.lawyer@gmail.com
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/core/pcm_drm_eld.c

index cb2eebaac85fdbd386c568954afd2fdad5ab8207..1941ee520063973fd84a201a80aa758b29635282 100644 (file)
@@ -334,7 +334,7 @@ int snd_parse_eld(struct device *dev, struct snd_parsed_hdmi_eld *e,
        e->eld_ver = GRAB_BITS(buf, 0, 3, 5);
        if (e->eld_ver != ELD_VER_CEA_861D &&
            e->eld_ver != ELD_VER_PARTIAL) {
-               dev_info(dev, "HDMI: Unknown ELD version %d\n", e->eld_ver);
+               dev_info_ratelimited(dev, "HDMI: Unknown ELD version %d\n", e->eld_ver);
                goto out_fail;
        }
 
@@ -357,7 +357,7 @@ int snd_parse_eld(struct device *dev, struct snd_parsed_hdmi_eld *e,
        e->product_id     = get_unaligned_le16(buf + 18);
 
        if (mnl > ELD_MAX_MNL) {
-               dev_info(dev, "HDMI: MNL is reserved value %d\n", mnl);
+               dev_info_ratelimited(dev, "HDMI: MNL is reserved value %d\n", mnl);
                goto out_fail;
        } else if (ELD_FIXED_BYTES + mnl > size) {
                dev_info(dev, "HDMI: out of range MNL %d\n", mnl);