diff --git a/sound/soc/intel/boards/sof_board_helpers.c b/sound/soc/intel/boards/sof_board_helpers.c
index 2ea1dda446ec..bcd497b175a9 100644
--- a/sound/soc/intel/boards/sof_board_helpers.c
+++ b/sound/soc/intel/boards/sof_board_helpers.c
@@ -3,9 +3,11 @@
 // Copyright(c) 2023 Intel Corporation
 
 #include <sound/soc.h>
+#include "../../sof/sof-priv.h"
 #include "../common/soc-intel-quirks.h"
 #include "hda_dsp_common.h"
 #include "sof_board_helpers.h"
+#include "../../sof/intel/shim.h"
 
 /*
  * Intel HDMI DAI Link
@@ -776,6 +778,64 @@ sof_intel_board_get_ctx(struct device *dev, unsigned long board_quirk)
 }
 EXPORT_SYMBOL_NS(sof_intel_board_get_ctx, "SND_SOC_INTEL_SOF_BOARD_HELPERS");
 
+const char *sof_intel_platform_names[] = {
+	"tng", // unsure
+	"byt",
+	"bdw",
+	"bsw",
+	"skl",
+	"kbl",
+	"aml", // unsure
+	"apl",
+	"glk",
+	"cnl",
+	"cml",
+	"cfl",
+	"icl",
+	"jsl",
+	"tgl",
+	"adl",
+	"mtl",
+	"lnl",
+	"ptl",
+};
+
+int sof_intel_board_set_longname_from_tplg(struct platform_device *pdev,
+        struct snd_soc_card *sof_audio_card)
+{
+	struct snd_sof_dev *sdev = dev_get_drvdata(pdev->dev.parent);
+	const struct sof_intel_dsp_desc *chip_info = get_chip_info(sdev->pdata);
+	enum snd_soc_acpi_intel_codec codec_type, amp_type;
+	const char *long_name, *codec_name, *amp_name;
+	
+	dev_info(pdev->dev.parent, "Platform: %d (%s)\n", chip_info->platform, sof_intel_platform_names[chip_info->platform]);
+
+	codec_type = snd_soc_acpi_intel_detect_codec_type(sdev->dev);
+	amp_type = snd_soc_acpi_intel_detect_amp_type(sdev->dev);
+
+	int amp_type_valid = amp_type != CODEC_NONE && amp_type != codec_type;
+	
+	codec_name = snd_soc_acpi_intel_get_codec_tplg_suffix(codec_type);
+	if (amp_type_valid) {
+		amp_name = snd_soc_acpi_intel_get_amp_tplg_suffix(amp_type);
+		long_name = devm_kasprintf(&pdev->dev, GFP_KERNEL, "sof-%s-%s-%s",
+		                  sof_intel_platform_names[chip_info->platform],
+		                  codec_name,
+		                  amp_name);
+	} else {
+		long_name = devm_kasprintf(&pdev->dev, GFP_KERNEL, "sof-%s-%s",
+		                  sof_intel_platform_names[chip_info->platform],
+		                  codec_name);
+	}
+	if (!long_name)
+		return -ENOMEM;
+
+	sof_audio_card->long_name = long_name;
+
+	return 0;
+}
+EXPORT_SYMBOL_NS(sof_intel_board_set_longname_from_tplg, "SND_SOC_INTEL_SOF_BOARD_HELPERS");
+
 MODULE_DESCRIPTION("ASoC Intel SOF Machine Driver Board Helpers");
 MODULE_AUTHOR("Brent Lu <brent.lu@intel.com>");
 MODULE_LICENSE("GPL");
diff --git a/sound/soc/intel/boards/sof_board_helpers.h b/sound/soc/intel/boards/sof_board_helpers.h
index 33a9601b770c..8d24ef4e779f 100644
--- a/sound/soc/intel/boards/sof_board_helpers.h
+++ b/sound/soc/intel/boards/sof_board_helpers.h
@@ -169,5 +169,7 @@ int sof_intel_board_set_dai_link(struct device *dev, struct snd_soc_card *card,
 				 struct sof_card_private *ctx);
 struct sof_card_private *
 sof_intel_board_get_ctx(struct device *dev, unsigned long board_quirk);
+int sof_intel_board_set_longname_from_tplg(struct platform_device *pdev,
+        	struct snd_soc_card *sof_audio_card);
 
 #endif /* __SOF_INTEL_BOARD_HELPERS_H */
diff --git a/sound/soc/intel/boards/sof_cs42l42.c b/sound/soc/intel/boards/sof_cs42l42.c
index 455c5bc8c634..35c55d972ec6 100644
--- a/sound/soc/intel/boards/sof_cs42l42.c
+++ b/sound/soc/intel/boards/sof_cs42l42.c
@@ -217,6 +217,9 @@ static int sof_audio_probe(struct platform_device *pdev)
 
 	dev_dbg(&pdev->dev, "sof_cs42l42_quirk = %lx\n", sof_cs42l42_quirk);
 
+	/* Set card long name based on tplg file name */
+	sof_intel_board_set_longname_from_tplg(pdev, &sof_audio_card_cs42l42);
+
 	/* initialize ctx with board quirk */
 	ctx = sof_intel_board_get_ctx(&pdev->dev, sof_cs42l42_quirk);
 	if (!ctx)
diff --git a/sound/soc/intel/boards/sof_da7219.c b/sound/soc/intel/boards/sof_da7219.c
index 9b7082b239c1..ac7558fbdafe 100644
--- a/sound/soc/intel/boards/sof_da7219.c
+++ b/sound/soc/intel/boards/sof_da7219.c
@@ -385,6 +385,9 @@ static int audio_probe(struct platform_device *pdev)
 		}
 	}
 
+	/* Set card long name based on tplg file name */
+	sof_intel_board_set_longname_from_tplg(pdev, &card_da7219);
+
 	if (board_quirk & SOF_DA7219_MCLK_EN)
 		ctx->da7219.mclk_en = true;
 
diff --git a/sound/soc/intel/boards/sof_nau8825.c b/sound/soc/intel/boards/sof_nau8825.c
index 72ce32e2cd57..638007b15d52 100644
--- a/sound/soc/intel/boards/sof_nau8825.c
+++ b/sound/soc/intel/boards/sof_nau8825.c
@@ -243,6 +243,9 @@ static int sof_audio_probe(struct platform_device *pdev)
 
 	dev_dbg(&pdev->dev, "sof_nau8825_quirk = %lx\n", sof_nau8825_quirk);
 
+	/* Set card long name based on tplg file name */
+	sof_intel_board_set_longname_from_tplg(pdev, &sof_audio_card_nau8825);
+
 	/* initialize ctx with board quirk */
 	ctx = sof_intel_board_get_ctx(&pdev->dev, sof_nau8825_quirk);
 	if (!ctx)
diff --git a/sound/soc/intel/boards/sof_rt5682.c b/sound/soc/intel/boards/sof_rt5682.c
index 4994aaccc583..d3175ce3e46c 100644
--- a/sound/soc/intel/boards/sof_rt5682.c
+++ b/sound/soc/intel/boards/sof_rt5682.c
@@ -706,6 +706,9 @@ static int sof_audio_probe(struct platform_device *pdev)
 		}
 	}
 
+	/* Set card long name based on tplg file name */
+	sof_intel_board_set_longname_from_tplg(pdev, &sof_audio_card_rt5682);
+
 	if (sof_rt5682_quirk & SOF_RT5682_MCLK_EN) {
 		ctx->rt5682.mclk_en = true;
 
diff --git a/sound/soc/intel/boards/sof_ssp_amp.c b/sound/soc/intel/boards/sof_ssp_amp.c
index 729c0cd7c19c..e3a2aa6e522e 100644
--- a/sound/soc/intel/boards/sof_ssp_amp.c
+++ b/sound/soc/intel/boards/sof_ssp_amp.c
@@ -119,6 +119,9 @@ static int sof_ssp_amp_probe(struct platform_device *pdev)
 
 	dev_dbg(&pdev->dev, "sof_ssp_amp_quirk = %lx\n", sof_ssp_amp_quirk);
 
+	/* Set card long name based on tplg file name */
+	sof_intel_board_set_longname_from_tplg(pdev, &sof_ssp_amp_card);
+
 	/* initialize ctx with board quirk */
 	ctx = sof_intel_board_get_ctx(&pdev->dev, sof_ssp_amp_quirk);
 	if (!ctx)
diff --git a/sound/soc/sof/intel/mtl.c b/sound/soc/sof/intel/mtl.c
index 2242c96bfa51..8736d1330fff 100644
--- a/sound/soc/sof/intel/mtl.c
+++ b/sound/soc/sof/intel/mtl.c
@@ -786,6 +786,7 @@ const struct sof_intel_dsp_desc mtl_chip_info = {
 	.power_down_dsp = mtl_power_down_dsp,
 	.disable_interrupts = mtl_dsp_disable_interrupts,
 	.hw_ip_version = SOF_INTEL_ACE_1_0,
+	.platform = SOF_INTEL_PLATFORM_METEORLAKE,
 };
 
 const struct sof_intel_dsp_desc arl_s_chip_info = {
diff --git a/sound/soc/sof/intel/shim.h b/sound/soc/sof/intel/shim.h
index d4372f0bff7e..9e2977dd299d 100644
--- a/sound/soc/sof/intel/shim.h
+++ b/sound/soc/sof/intel/shim.h
@@ -25,6 +25,28 @@ enum sof_intel_hw_ip_version {
 	SOF_INTEL_ACE_3_0,	/* PantherLake */
 };
 
+enum sof_intel_platform {
+	SOF_INTEL_PLATFORM_TANGIER,
+	SOF_INTEL_PLATFORM_BAYTRAIL,
+	SOF_INTEL_PLATFORM_BROADWELL,
+	SOF_INTEL_PLATFORM_BRASWELL,
+	SOF_INTEL_PLATFORM_SKYLAKE,
+	SOF_INTEL_PLATFORM_KABYLAKE,
+	SOF_INTEL_PLATFORM_AMBERLAKE,
+	SOF_INTEL_PLATFORM_APOLLOLAKE,
+	SOF_INTEL_PLATFORM_GEMINILAKE,
+	SOF_INTEL_PLATFORM_CANNONLAKE,
+	SOF_INTEL_PLATFORM_COMMETLAKE,
+	SOF_INTEL_PLATFORM_COFFEELAKE,
+	SOF_INTEL_PLATFORM_ICELAKE,
+	SOF_INTEL_PLATFORM_JASPERLAKE,
+	SOF_INTEL_PLATFORM_TIGERLAKE,
+	SOF_INTEL_PLATFORM_ALDERLAKE,
+	SOF_INTEL_PLATFORM_METEORLAKE,
+	SOF_INTEL_PLATFORM_LUNARLAKE,
+	SOF_INTEL_PLATFORM_PANTHERLAKE,
+};
+
 /*
  * SHIM registers for BYT, BSW, CHT, BDW
  */
@@ -187,6 +209,7 @@ struct sof_intel_dsp_desc {
 	u32 d0i3_offset;
 	u32 quirks;
 	enum sof_intel_hw_ip_version hw_ip_version;
+	enum sof_intel_platform platform;
 	int (*read_sdw_lcount)(struct snd_sof_dev *sdev);
 	void (*enable_sdw_irq)(struct snd_sof_dev *sdev, bool enable);
 	bool (*check_sdw_irq)(struct snd_sof_dev *sdev);
