]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
ASoC: SOF: Intel: Add a is_amp flag to fix the wrong name prefix
authorDerek Fang <derek.fang@realtek.com>
Thu, 26 Mar 2026 07:53:01 +0000 (15:53 +0800)
committerMark Brown <broonie@kernel.org>
Thu, 26 Mar 2026 16:22:42 +0000 (16:22 +0000)
According to the Intel sof design, it will create the name prefix
appended with amp index for the amp codec only, such as:
rt1318-1, rt1318-2, etc...

But the rt1320 is a codec with amp and mic codec functions, it doesn't
have the amp index in its name prefix as above.
And then it will be hard to identify the codec if in multi-rt1320 case.
So we add a flag to force the amp index to be appended.

Signed-off-by: Derek Fang <derek.fang@realtek.com>
Signed-off-by: Bard Liao <yung-chuan.liao@linux.intel.com>
Link: https://patch.msgid.link/20260326075303.1083567-3-yung-chuan.liao@linux.intel.com
Signed-off-by: Mark Brown <broonie@kernel.org>
include/sound/soc_sdw_utils.h
sound/soc/sof/intel/hda.c

index 48f516ba682f76cd0f2ef4c50c7d4dc71a65b8ae..4890831836734810fed0fa173bc8eca5cb37179b 100644 (file)
@@ -83,6 +83,8 @@ struct asoc_sdw_codec_info {
        const int dai_num;
        struct asoc_sdw_aux_info auxs[SOC_SDW_MAX_AUX_NUM];
        const int aux_num;
+       /* Force AMP-style name_prefix handling (append AMP index) even if MIC/Jack DAIs exist */
+       const bool is_amp;
 
        int (*codec_card_late_probe)(struct snd_soc_card *card);
 
index 9ec33147d9af337e374a46e60240fd15402afd6c..edb80c2fa77009c9c8c23b22dbaf2cb6502176e0 100644 (file)
@@ -1232,6 +1232,16 @@ static struct snd_soc_acpi_adr_device *find_acpi_adr_device(struct device *dev,
                return NULL;
        }
 
+       /*
+        * codec_info_list[].is_amp is a codec-level override: for multi-function
+        * codecs we must treat the whole codec as an AMP when it is described as
+        * such in the codec info table, even if some endpoints were detected as
+        * non-AMP above. Callers/UCM rely on this to keep name_prefix and AMP
+        * indexing stable and backwards compatible.
+        */
+       if (codec_info_list[i].is_amp)
+               is_amp = true;
+
        adr_dev[index].adr = ((u64)sdw_device->id.class_id & 0xFF) |
                        ((u64)sdw_device->id.part_id & 0xFFFF) << 8 |
                        ((u64)sdw_device->id.mfg_id & 0xFFFF) << 24 |