]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
ASoC: sdw_utils: subtract the endpoint that is not present
authorBard Liao <yung-chuan.liao@linux.intel.com>
Fri, 12 Dec 2025 12:11:12 +0000 (20:11 +0800)
committerMark Brown <broonie@kernel.org>
Sun, 14 Dec 2025 10:32:41 +0000 (19:32 +0900)
When asoc_sdw_count_sdw_endpoints() count the num_ends, it doesn't skip
the unpresented endpoints. But, asoc_sdw_parse_sdw_endpoints() will skip
the unpresented endpoints either by quirk or the SDCA function doesn't
show up the endpoint. The endpoint number mismatches between count and
parse and the machine driver will show up a warning about it.

Fixes: 26ee34d2f5c7 ("ASoC: sdw_utils: Add codec_conf for every DAI")
Closes: https://github.com/thesofproject/linux/issues/5620
Signed-off-by: Bard Liao <yung-chuan.liao@linux.intel.com>
Reviewed-by: Péter Ujfalusi <peter.ujfalusi@linux.intel.com>
Reviewed-by: Vijendar Mukunda <Vijendar.Mukunda@amd.com>
Reviewed-by: Charles Keepax <ckeepax@opensource.cirrus.com>
Link: https://patch.msgid.link/20251212121112.3313017-1-yung-chuan.liao@linux.intel.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/sdw_utils/soc_sdw_utils.c

index 6c656b2f7f3ae5622b4625e7a6bb0a8a5d953894..f169d95895ea2b11880f362eec6346020b2a0e7a 100644 (file)
@@ -1534,8 +1534,10 @@ int asoc_sdw_parse_sdw_endpoints(struct snd_soc_card *card,
                                         * endpoint check is not necessary
                                         */
                                        if (dai_info->quirk &&
-                                           !(dai_info->quirk_exclude ^ !!(dai_info->quirk & ctx->mc_quirk)))
+                                           !(dai_info->quirk_exclude ^ !!(dai_info->quirk & ctx->mc_quirk))) {
+                                               (*num_devs)--;
                                                continue;
+                                       }
                                } else {
                                        /* Check SDCA codec endpoint if there is no matching quirk */
                                        ret = is_sdca_endpoint_present(dev, codec_info, adr_link, i, j);
@@ -1543,8 +1545,10 @@ int asoc_sdw_parse_sdw_endpoints(struct snd_soc_card *card,
                                                return ret;
 
                                        /* The endpoint is not present, skip */
-                                       if (!ret)
+                                       if (!ret) {
+                                               (*num_devs)--;
                                                continue;
+                                       }
                                }
 
                                dev_dbg(dev,