]> Git Repo - linux.git/commitdiff
ASoC: Intel: sof_rt5682: use common module for sof_card_private initialization
authorBrent Lu <[email protected]>
Mon, 25 Mar 2024 22:10:48 +0000 (17:10 -0500)
committerMark Brown <[email protected]>
Mon, 25 Mar 2024 22:44:58 +0000 (22:44 +0000)
Use intel_board module to initialize sof_card_private structure

Reviewed-by: Bard Liao <[email protected]>
Signed-off-by: Brent Lu <[email protected]>
Signed-off-by: Pierre-Louis Bossart <[email protected]>
Link: https://msgid.link/r/[email protected]
Signed-off-by: Mark Brown <[email protected]>
sound/soc/intel/boards/sof_rt5682.c

index 640d17c6cd35648d61d9965103c1857b0bb8399a..672636f07456d00254a5c92de9172cfa2a44c39a 100644 (file)
 #include "sof_board_helpers.h"
 #include "sof_maxim_common.h"
 #include "sof_realtek_common.h"
-#include "sof_ssp_common.h"
-
-#define SOF_RT5682_SSP_CODEC(quirk)            ((quirk) & GENMASK(2, 0))
-#define SOF_RT5682_SSP_CODEC_MASK                      (GENMASK(2, 0))
-#define SOF_RT5682_MCLK_EN                     BIT(3)
-#define SOF_RT5682_SSP_AMP_SHIFT               6
-#define SOF_RT5682_SSP_AMP_MASK                 (GENMASK(8, 6))
-#define SOF_RT5682_SSP_AMP(quirk)      \
-       (((quirk) << SOF_RT5682_SSP_AMP_SHIFT) & SOF_RT5682_SSP_AMP_MASK)
-#define SOF_RT5682_MCLK_BYTCHT_EN              BIT(9)
-#define SOF_RT5682_NUM_HDMIDEV_SHIFT           10
-#define SOF_RT5682_NUM_HDMIDEV_MASK            (GENMASK(12, 10))
-#define SOF_RT5682_NUM_HDMIDEV(quirk)  \
-       ((quirk << SOF_RT5682_NUM_HDMIDEV_SHIFT) & SOF_RT5682_NUM_HDMIDEV_MASK)
-
-/* BT audio offload: reserve 3 bits for future */
-#define SOF_BT_OFFLOAD_SSP_SHIFT               19
-#define SOF_BT_OFFLOAD_SSP_MASK                (GENMASK(21, 19))
-#define SOF_BT_OFFLOAD_SSP(quirk)      \
-       (((quirk) << SOF_BT_OFFLOAD_SSP_SHIFT) & SOF_BT_OFFLOAD_SSP_MASK)
-#define SOF_SSP_BT_OFFLOAD_PRESENT             BIT(22)
-
-/* HDMI capture*/
-#define SOF_NO_OF_HDMI_CAPTURE_SSP_SHIFT  27
-#define SOF_SSP_HDMI_CAPTURE_PRESENT_MASK (GENMASK(30, 27))
-#define SOF_HDMI_CAPTURE_SSP_MASK(quirk)   \
-       (((quirk) << SOF_NO_OF_HDMI_CAPTURE_SSP_SHIFT) & SOF_SSP_HDMI_CAPTURE_PRESENT_MASK)
+
+/* Driver-specific board quirks: from bit 0 to 7 */
+#define SOF_RT5682_MCLK_EN                     BIT(0)
+#define SOF_RT5682_MCLK_BYTCHT_EN              BIT(1)
 
 /* Default: MCLK on, MCLK 19.2M, SSP0  */
 static unsigned long sof_rt5682_quirk = SOF_RT5682_MCLK_EN |
-                                       SOF_RT5682_SSP_CODEC(0);
+                                       SOF_SSP_PORT_CODEC(0);
 
 static int sof_rt5682_quirk_cb(const struct dmi_system_id *id)
 {
@@ -72,7 +49,7 @@ static const struct dmi_system_id sof_rt5682_quirk_table[] = {
                        DMI_MATCH(DMI_SYS_VENDOR, "Circuitco"),
                        DMI_MATCH(DMI_PRODUCT_NAME, "Minnowboard Max"),
                },
-               .driver_data = (void *)(SOF_RT5682_SSP_CODEC(2)),
+               .driver_data = (void *)(SOF_SSP_PORT_CODEC(2)),
        },
        {
                .callback = sof_rt5682_quirk_cb,
@@ -80,7 +57,7 @@ static const struct dmi_system_id sof_rt5682_quirk_table[] = {
                        DMI_MATCH(DMI_SYS_VENDOR, "AAEON"),
                        DMI_MATCH(DMI_PRODUCT_NAME, "UP-CHT01"),
                },
-               .driver_data = (void *)(SOF_RT5682_SSP_CODEC(2)),
+               .driver_data = (void *)(SOF_SSP_PORT_CODEC(2)),
        },
        {
                .callback = sof_rt5682_quirk_cb,
@@ -89,7 +66,7 @@ static const struct dmi_system_id sof_rt5682_quirk_table[] = {
                        DMI_MATCH(DMI_PRODUCT_NAME, "WhiskeyLake Client"),
                },
                .driver_data = (void *)(SOF_RT5682_MCLK_EN |
-                                       SOF_RT5682_SSP_CODEC(1)),
+                                       SOF_SSP_PORT_CODEC(1)),
        },
        {
                .callback = sof_rt5682_quirk_cb,
@@ -97,8 +74,8 @@ static const struct dmi_system_id sof_rt5682_quirk_table[] = {
                        DMI_MATCH(DMI_PRODUCT_FAMILY, "Google_Hatch"),
                },
                .driver_data = (void *)(SOF_RT5682_MCLK_EN |
-                                       SOF_RT5682_SSP_CODEC(0) |
-                                       SOF_RT5682_SSP_AMP(1)),
+                                       SOF_SSP_PORT_CODEC(0) |
+                                       SOF_SSP_PORT_AMP(1)),
        },
        {
                .callback = sof_rt5682_quirk_cb,
@@ -107,7 +84,7 @@ static const struct dmi_system_id sof_rt5682_quirk_table[] = {
                        DMI_MATCH(DMI_PRODUCT_NAME, "Ice Lake Client"),
                },
                .driver_data = (void *)(SOF_RT5682_MCLK_EN |
-                                       SOF_RT5682_SSP_CODEC(0)),
+                                       SOF_SSP_PORT_CODEC(0)),
        },
        {
                .callback = sof_rt5682_quirk_cb,
@@ -116,9 +93,9 @@ static const struct dmi_system_id sof_rt5682_quirk_table[] = {
                        DMI_MATCH(DMI_OEM_STRING, "AUDIO-MAX98373_ALC5682I_I2S_UP4"),
                },
                .driver_data = (void *)(SOF_RT5682_MCLK_EN |
-                                       SOF_RT5682_SSP_CODEC(0) |
-                                       SOF_RT5682_SSP_AMP(2) |
-                                       SOF_RT5682_NUM_HDMIDEV(4)),
+                                       SOF_SSP_PORT_CODEC(0) |
+                                       SOF_SSP_PORT_AMP(2) |
+                                       SOF_NUM_IDISP_HDMI(4)),
        },
        {
                .callback = sof_rt5682_quirk_cb,
@@ -128,9 +105,9 @@ static const struct dmi_system_id sof_rt5682_quirk_table[] = {
                        DMI_MATCH(DMI_OEM_STRING, "AUDIO-ADL_MAX98373_ALC5682I_I2S"),
                },
                .driver_data = (void *)(SOF_RT5682_MCLK_EN |
-                                       SOF_RT5682_SSP_CODEC(0) |
-                                       SOF_RT5682_SSP_AMP(2) |
-                                       SOF_RT5682_NUM_HDMIDEV(4)),
+                                       SOF_SSP_PORT_CODEC(0) |
+                                       SOF_SSP_PORT_AMP(2) |
+                                       SOF_NUM_IDISP_HDMI(4)),
        },
        {
                .callback = sof_rt5682_quirk_cb,
@@ -139,9 +116,9 @@ static const struct dmi_system_id sof_rt5682_quirk_table[] = {
                        DMI_MATCH(DMI_OEM_STRING, "AUDIO-MAX98390_ALC5682I_I2S"),
                },
                .driver_data = (void *)(SOF_RT5682_MCLK_EN |
-                                       SOF_RT5682_SSP_CODEC(0) |
-                                       SOF_RT5682_SSP_AMP(2) |
-                                       SOF_RT5682_NUM_HDMIDEV(4)),
+                                       SOF_SSP_PORT_CODEC(0) |
+                                       SOF_SSP_PORT_AMP(2) |
+                                       SOF_NUM_IDISP_HDMI(4)),
        },
        {
                .callback = sof_rt5682_quirk_cb,
@@ -150,9 +127,9 @@ static const struct dmi_system_id sof_rt5682_quirk_table[] = {
                        DMI_MATCH(DMI_OEM_STRING, "AUDIO-MAX98360_ALC5682I_I2S_AMP_SSP2"),
                },
                .driver_data = (void *)(SOF_RT5682_MCLK_EN |
-                                       SOF_RT5682_SSP_CODEC(0) |
-                                       SOF_RT5682_SSP_AMP(2) |
-                                       SOF_RT5682_NUM_HDMIDEV(4)),
+                                       SOF_SSP_PORT_CODEC(0) |
+                                       SOF_SSP_PORT_AMP(2) |
+                                       SOF_NUM_IDISP_HDMI(4)),
        },
        {
                .callback = sof_rt5682_quirk_cb,
@@ -160,11 +137,11 @@ static const struct dmi_system_id sof_rt5682_quirk_table[] = {
                        DMI_MATCH(DMI_PRODUCT_FAMILY, "Google_Rex"),
                },
                .driver_data = (void *)(SOF_RT5682_MCLK_EN |
-                                       SOF_RT5682_SSP_CODEC(2) |
-                                       SOF_RT5682_SSP_AMP(0) |
-                                       SOF_RT5682_NUM_HDMIDEV(3) |
-                                       SOF_BT_OFFLOAD_SSP(1) |
-                                       SOF_SSP_BT_OFFLOAD_PRESENT
+                                       SOF_SSP_PORT_CODEC(2) |
+                                       SOF_SSP_PORT_AMP(0) |
+                                       SOF_NUM_IDISP_HDMI(3) |
+                                       SOF_SSP_PORT_BT_OFFLOAD(1) |
+                                       SOF_BT_OFFLOAD_PRESENT
                                        ),
        },
        {}
@@ -630,19 +607,29 @@ static int sof_audio_probe(struct platform_device *pdev)
 {
        struct snd_soc_acpi_mach *mach = pdev->dev.platform_data;
        struct sof_card_private *ctx;
+       bool is_legacy_cpu;
        int ret;
 
-       ctx = devm_kzalloc(&pdev->dev, sizeof(*ctx), GFP_KERNEL);
-       if (!ctx)
-               return -ENOMEM;
-
        if (pdev->id_entry && pdev->id_entry->driver_data)
                sof_rt5682_quirk = (unsigned long)pdev->id_entry->driver_data;
 
        dmi_check_system(sof_rt5682_quirk_table);
 
-       ctx->codec_type = sof_ssp_detect_codec_type(&pdev->dev);
-       ctx->amp_type = sof_ssp_detect_amp_type(&pdev->dev);
+       if (soc_intel_is_byt() || soc_intel_is_cht()) {
+               is_legacy_cpu = true;
+
+               /* default quirk for legacy cpu */
+               sof_rt5682_quirk = SOF_RT5682_MCLK_EN |
+                                  SOF_RT5682_MCLK_BYTCHT_EN |
+                                  SOF_SSP_PORT_CODEC(2);
+       }
+
+       dev_dbg(&pdev->dev, "sof_rt5682_quirk = %lx\n", sof_rt5682_quirk);
+
+       /* initialize ctx with board quirk */
+       ctx = sof_intel_board_get_ctx(&pdev->dev, sof_rt5682_quirk);
+       if (!ctx)
+               return -ENOMEM;
 
        if (ctx->codec_type == CODEC_RT5650) {
                sof_audio_card_rt5682.name = devm_kstrdup(&pdev->dev, "rt5650",
@@ -653,23 +640,12 @@ static int sof_audio_probe(struct platform_device *pdev)
                        ctx->amp_type = CODEC_RT5650;
        }
 
-       if (soc_intel_is_byt() || soc_intel_is_cht()) {
+       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;
-               /* default quirk for legacy cpu */
-               sof_rt5682_quirk = SOF_RT5682_MCLK_EN |
-                                               SOF_RT5682_MCLK_BYTCHT_EN |
-                                               SOF_RT5682_SSP_CODEC(2);
        } else {
-               ctx->dmic_be_num = 2;
-               ctx->hdmi_num = (sof_rt5682_quirk & SOF_RT5682_NUM_HDMIDEV_MASK) >>
-                        SOF_RT5682_NUM_HDMIDEV_SHIFT;
-               /* default number of HDMI DAI's */
-               if (!ctx->hdmi_num)
-                       ctx->hdmi_num = 3;
-
                if (mach->mach_params.codec_mask & IDISP_CODEC_MASK)
                        ctx->hdmi.idisp_codec = true;
        }
@@ -694,23 +670,6 @@ static int sof_audio_probe(struct platform_device *pdev)
                }
        }
 
-       dev_dbg(&pdev->dev, "sof_rt5682_quirk = %lx\n", sof_rt5682_quirk);
-
-       /* port number/mask of peripherals attached to ssp interface */
-       ctx->ssp_mask_hdmi_in = (sof_rt5682_quirk & SOF_SSP_HDMI_CAPTURE_PRESENT_MASK) >>
-                       SOF_NO_OF_HDMI_CAPTURE_SSP_SHIFT;
-
-       ctx->ssp_bt = (sof_rt5682_quirk & SOF_BT_OFFLOAD_SSP_MASK) >>
-                       SOF_BT_OFFLOAD_SSP_SHIFT;
-
-       ctx->ssp_amp = (sof_rt5682_quirk & SOF_RT5682_SSP_AMP_MASK) >>
-                       SOF_RT5682_SSP_AMP_SHIFT;
-
-       ctx->ssp_codec = sof_rt5682_quirk & SOF_RT5682_SSP_CODEC_MASK;
-
-       if (sof_rt5682_quirk & SOF_SSP_BT_OFFLOAD_PRESENT)
-               ctx->bt_offload_present = true;
-
        /* update dai_link */
        ret = sof_card_dai_links_create(&pdev->dev, &sof_audio_card_rt5682, ctx);
        if (ret)
@@ -766,96 +725,96 @@ static const struct platform_device_id board_ids[] = {
        {
                .name = "cml_rt1015_rt5682",
                .driver_data = (kernel_ulong_t)(SOF_RT5682_MCLK_EN |
-                                       SOF_RT5682_SSP_CODEC(0) |
-                                       SOF_RT5682_SSP_AMP(1)),
+                                       SOF_SSP_PORT_CODEC(0) |
+                                       SOF_SSP_PORT_AMP(1)),
        },
        {
                .name = "jsl_rt5682_def",
                .driver_data = (kernel_ulong_t)(SOF_RT5682_MCLK_EN |
-                                       SOF_RT5682_SSP_CODEC(0) |
-                                       SOF_RT5682_SSP_AMP(1)),
+                                       SOF_SSP_PORT_CODEC(0) |
+                                       SOF_SSP_PORT_AMP(1)),
        },
        {
                .name = "tgl_rt5682_def",
                .driver_data = (kernel_ulong_t)(SOF_RT5682_MCLK_EN |
-                                       SOF_RT5682_SSP_CODEC(0) |
-                                       SOF_RT5682_SSP_AMP(1) |
-                                       SOF_RT5682_NUM_HDMIDEV(4) |
-                                       SOF_BT_OFFLOAD_SSP(2) |
-                                       SOF_SSP_BT_OFFLOAD_PRESENT),
+                                       SOF_SSP_PORT_CODEC(0) |
+                                       SOF_SSP_PORT_AMP(1) |
+                                       SOF_NUM_IDISP_HDMI(4) |
+                                       SOF_SSP_PORT_BT_OFFLOAD(2) |
+                                       SOF_BT_OFFLOAD_PRESENT),
        },
        {
                .name = "adl_rt5682_def",
                .driver_data = (kernel_ulong_t)(SOF_RT5682_MCLK_EN |
-                                       SOF_RT5682_SSP_CODEC(0) |
-                                       SOF_RT5682_SSP_AMP(1) |
-                                       SOF_RT5682_NUM_HDMIDEV(4) |
-                                       SOF_BT_OFFLOAD_SSP(2) |
-                                       SOF_SSP_BT_OFFLOAD_PRESENT),
+                                       SOF_SSP_PORT_CODEC(0) |
+                                       SOF_SSP_PORT_AMP(1) |
+                                       SOF_NUM_IDISP_HDMI(4) |
+                                       SOF_SSP_PORT_BT_OFFLOAD(2) |
+                                       SOF_BT_OFFLOAD_PRESENT),
        },
        {
                .name = "adl_mx98357_rt5682",
                .driver_data = (kernel_ulong_t)(SOF_RT5682_MCLK_EN |
-                                       SOF_RT5682_SSP_CODEC(0) |
-                                       SOF_RT5682_SSP_AMP(2) |
-                                       SOF_RT5682_NUM_HDMIDEV(4)),
+                                       SOF_SSP_PORT_CODEC(0) |
+                                       SOF_SSP_PORT_AMP(2) |
+                                       SOF_NUM_IDISP_HDMI(4)),
        },
        {
                .name = "adl_rt5682_c1_h02",
                .driver_data = (kernel_ulong_t)(SOF_RT5682_MCLK_EN |
-                                       SOF_RT5682_SSP_CODEC(1) |
-                                       SOF_RT5682_NUM_HDMIDEV(3) |
+                                       SOF_SSP_PORT_CODEC(1) |
+                                       SOF_NUM_IDISP_HDMI(3) |
                                        /* SSP 0 and SSP 2 are used for HDMI IN */
-                                       SOF_HDMI_CAPTURE_SSP_MASK(0x5)),
+                                       SOF_SSP_MASK_HDMI_CAPTURE(0x5)),
        },
        {
                .name = "rpl_mx98357_rt5682",
                .driver_data = (kernel_ulong_t)(SOF_RT5682_MCLK_EN |
-                                       SOF_RT5682_SSP_CODEC(0) |
-                                       SOF_RT5682_SSP_AMP(2) |
-                                       SOF_RT5682_NUM_HDMIDEV(4)),
+                                       SOF_SSP_PORT_CODEC(0) |
+                                       SOF_SSP_PORT_AMP(2) |
+                                       SOF_NUM_IDISP_HDMI(4)),
        },
        {
                .name = "rpl_rt5682_def",
                .driver_data = (kernel_ulong_t)(SOF_RT5682_MCLK_EN |
-                                       SOF_RT5682_SSP_CODEC(0) |
-                                       SOF_RT5682_SSP_AMP(1) |
-                                       SOF_RT5682_NUM_HDMIDEV(4) |
-                                       SOF_BT_OFFLOAD_SSP(2) |
-                                       SOF_SSP_BT_OFFLOAD_PRESENT),
+                                       SOF_SSP_PORT_CODEC(0) |
+                                       SOF_SSP_PORT_AMP(1) |
+                                       SOF_NUM_IDISP_HDMI(4) |
+                                       SOF_SSP_PORT_BT_OFFLOAD(2) |
+                                       SOF_BT_OFFLOAD_PRESENT),
        },
        {
                .name = "rpl_rt5682_c1_h02",
                .driver_data = (kernel_ulong_t)(SOF_RT5682_MCLK_EN |
-                                       SOF_RT5682_SSP_CODEC(1) |
-                                       SOF_RT5682_NUM_HDMIDEV(3) |
+                                       SOF_SSP_PORT_CODEC(1) |
+                                       SOF_NUM_IDISP_HDMI(3) |
                                        /* SSP 0 and SSP 2 are used for HDMI IN */
-                                       SOF_HDMI_CAPTURE_SSP_MASK(0x5)),
+                                       SOF_SSP_MASK_HDMI_CAPTURE(0x5)),
        },
        {
                .name = "mtl_mx98357_rt5682",
                .driver_data = (kernel_ulong_t)(SOF_RT5682_MCLK_EN |
-                                       SOF_RT5682_SSP_CODEC(0) |
-                                       SOF_RT5682_SSP_AMP(1) |
-                                       SOF_RT5682_NUM_HDMIDEV(3) |
-                                       SOF_BT_OFFLOAD_SSP(2) |
-                                       SOF_SSP_BT_OFFLOAD_PRESENT),
+                                       SOF_SSP_PORT_CODEC(0) |
+                                       SOF_SSP_PORT_AMP(1) |
+                                       SOF_NUM_IDISP_HDMI(3) |
+                                       SOF_SSP_PORT_BT_OFFLOAD(2) |
+                                       SOF_BT_OFFLOAD_PRESENT),
        },
        {
                .name = "mtl_mx98360_rt5682",
                .driver_data = (kernel_ulong_t)(SOF_RT5682_MCLK_EN |
-                                       SOF_RT5682_SSP_CODEC(0) |
-                                       SOF_RT5682_SSP_AMP(1) |
-                                       SOF_RT5682_NUM_HDMIDEV(3)),
+                                       SOF_SSP_PORT_CODEC(0) |
+                                       SOF_SSP_PORT_AMP(1) |
+                                       SOF_NUM_IDISP_HDMI(3)),
        },
        {
                .name = "mtl_rt5682_def",
                .driver_data = (kernel_ulong_t)(SOF_RT5682_MCLK_EN |
-                                       SOF_RT5682_SSP_CODEC(2) |
-                                       SOF_RT5682_SSP_AMP(0) |
-                                       SOF_RT5682_NUM_HDMIDEV(3) |
-                                       SOF_BT_OFFLOAD_SSP(1) |
-                                       SOF_SSP_BT_OFFLOAD_PRESENT),
+                                       SOF_SSP_PORT_CODEC(2) |
+                                       SOF_SSP_PORT_AMP(0) |
+                                       SOF_NUM_IDISP_HDMI(3) |
+                                       SOF_SSP_PORT_BT_OFFLOAD(1) |
+                                       SOF_BT_OFFLOAD_PRESENT),
        },
        { }
 };
@@ -881,4 +840,3 @@ MODULE_LICENSE("GPL v2");
 MODULE_IMPORT_NS(SND_SOC_INTEL_SOF_BOARD_HELPERS);
 MODULE_IMPORT_NS(SND_SOC_INTEL_SOF_MAXIM_COMMON);
 MODULE_IMPORT_NS(SND_SOC_INTEL_SOF_REALTEK_COMMON);
-MODULE_IMPORT_NS(SND_SOC_INTEL_SOF_SSP_COMMON);
This page took 0.077361 seconds and 4 git commands to generate.