]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
ASoC: SDCA: fix finding wrong entity
authorShuming Fan <shumingf@realtek.com>
Wed, 25 Mar 2026 11:04:06 +0000 (19:04 +0800)
committerMark Brown <broonie@kernel.org>
Wed, 25 Mar 2026 15:37:51 +0000 (15:37 +0000)
This patch fixes an issue like:
where searching for the entity 'FU 11' could incorrectly match 'FU 113' first.
The driver should first perform an exact match on the full string name.
If no exact match is found, it can then fall back to a partial match.

Fixes: 48fa77af2f4a ("ASoC: SDCA: Add terminal type into input/output widget name")
Reviewed-by: Charles Keepax <ckeepax@opensource.cirrus.com>
Signed-off-by: Shuming Fan <shumingf@realtek.com>
Link: https://patch.msgid.link/20260325110406.3232420-1-shumingf@realtek.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/sdca/sdca_functions.c

index d27ffb25ad97ee7a337bdfa5ec7fbf6ef47f5e2f..dca60ee8e62c3c4739930caac017009a9694e997 100644 (file)
@@ -1601,10 +1601,19 @@ static int find_sdca_entities(struct device *dev, struct sdw_slave *sdw,
 static struct sdca_entity *find_sdca_entity_by_label(struct sdca_function_data *function,
                                                     const char *entity_label)
 {
+       struct sdca_entity *entity = NULL;
        int i;
 
        for (i = 0; i < function->num_entities; i++) {
-               struct sdca_entity *entity = &function->entities[i];
+               entity = &function->entities[i];
+
+               /* check whole string first*/
+               if (!strcmp(entity->label, entity_label))
+                       return entity;
+       }
+
+       for (i = 0; i < function->num_entities; i++) {
+               entity = &function->entities[i];
 
                if (!strncmp(entity->label, entity_label, strlen(entity_label)))
                        return entity;