summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/sound/soc_sdw_utils.h2
-rw-r--r--sound/soc/sof/intel/hda.c10
2 files changed, 12 insertions, 0 deletions
diff --git a/include/sound/soc_sdw_utils.h b/include/sound/soc_sdw_utils.h
index 48f516ba682f..489083183673 100644
--- a/include/sound/soc_sdw_utils.h
+++ b/include/sound/soc_sdw_utils.h
@@ -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);
diff --git a/sound/soc/sof/intel/hda.c b/sound/soc/sof/intel/hda.c
index 9ec33147d9af..edb80c2fa770 100644
--- a/sound/soc/sof/intel/hda.c
+++ b/sound/soc/sof/intel/hda.c
@@ -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 |