ASoC: Intel: sof_rt5682: add glk_rt5682_def for glk boards
authorBrent Lu <brent.lu@intel.com>
Fri, 26 Apr 2024 15:25:20 +0000 (10:25 -0500)
committerMark Brown <broonie@kernel.org>
Mon, 29 Apr 2024 14:49:13 +0000 (23:49 +0900)
Add the board config glk_rt5682_def to rt5682 machine driver for all
glk boards using default SSP port allocation (headphone codec on SSP2,
speaker amplifiers on SSP1).

Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com>
Signed-off-by: Brent Lu <brent.lu@intel.com>
Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Link: https://lore.kernel.org/r/20240426152529.38345-15-pierre-louis.bossart@linux.intel.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/intel/boards/sof_rt5682.c

index 1e70ce4696508d31e8ff3f0788edc9c4b66decfe..80ecf31c936a4be320c1a7e021cf572b4f09314b 100644 (file)
@@ -635,6 +635,14 @@ sof_card_dai_links_create(struct device *dev, struct snd_soc_card *card,
        return 0;
 }
 
+#define GLK_LINK_ORDER SOF_LINK_ORDER(SOF_LINK_AMP,         \
+                                       SOF_LINK_CODEC,      \
+                                       SOF_LINK_DMIC01,     \
+                                       SOF_LINK_IDISP_HDMI, \
+                                       SOF_LINK_NONE,       \
+                                       SOF_LINK_NONE,       \
+                                       SOF_LINK_NONE)
+
 static int sof_audio_probe(struct platform_device *pdev)
 {
        struct snd_soc_acpi_mach *mach = pdev->dev.platform_data;
@@ -676,24 +684,34 @@ static int sof_audio_probe(struct platform_device *pdev)
                        ctx->amp_type = CODEC_RT5650;
        }
 
-       if (ctx->amp_type == CODEC_RT1011 && soc_intel_is_cml()) {
-               /* backward-compatible with existing cml devices */
-               card_name = devm_kstrdup(&pdev->dev, "cml_rt1011_rt5682",
-                                        GFP_KERNEL);
-               if (!card_name)
-                       return -ENOMEM;
-
-               sof_audio_card_rt5682.name = card_name;
-       }
+       if (mach->mach_params.codec_mask & IDISP_CODEC_MASK)
+               ctx->hdmi.idisp_codec = true;
 
        if (is_legacy_cpu) {
                ctx->rt5682.is_legacy_cpu = true;
                ctx->dmic_be_num = 0;
                /* HDMI is not supported by SOF on Baytrail/CherryTrail */
                ctx->hdmi_num = 0;
-       } else {
-               if (mach->mach_params.codec_mask & IDISP_CODEC_MASK)
-                       ctx->hdmi.idisp_codec = true;
+       } else if (soc_intel_is_glk()) {
+               /* dmic16k not support */
+               ctx->dmic_be_num = 1;
+
+               /* overwrite the DAI link order for GLK boards */
+               ctx->link_order_overwrite = GLK_LINK_ORDER;
+       } else if (soc_intel_is_cml()) {
+               /* backward-compatible with existing devices */
+               switch (ctx->amp_type) {
+               case CODEC_RT1011:
+                       card_name = devm_kstrdup(&pdev->dev, "cml_rt1011_rt5682",
+                                                GFP_KERNEL);
+                       if (!card_name)
+                               return -ENOMEM;
+
+                       sof_audio_card_rt5682.name = card_name;
+                       break;
+               default:
+                       break;
+               }
        }
 
        /* need to get main clock from pmc */
@@ -768,6 +786,12 @@ static const struct platform_device_id board_ids[] = {
        {
                .name = "sof_rt5682",
        },
+       {
+               .name = "glk_rt5682_def",
+               .driver_data = (kernel_ulong_t)(SOF_RT5682_MCLK_EN |
+                                       SOF_SSP_PORT_CODEC(2) |
+                                       SOF_SSP_PORT_AMP(1)),
+       },
        {
                .name = "cml_rt5682_def",
                .driver_data = (kernel_ulong_t)(SOF_RT5682_MCLK_EN |