#define RT1015_DEV0_NAME       "rt1015.1-0028"
 #define RT1015_DEV1_NAME       "rt1015.1-0029"
 
+#define RT1015_RT5682_CARD_NAME "mt8192_mt6359_rt1015_rt5682"
+#define RT1015P_RT5682_CARD_NAME "mt8192_mt6359_rt1015p_rt5682"
+#define RT1015P_RT5682S_CARD_NAME "mt8192_mt6359_rt1015p_rt5682s"
+
+#define RT1015_RT5682_OF_NAME "mediatek,mt8192_mt6359_rt1015_rt5682"
+#define RT1015P_RT5682_OF_NAME "mediatek,mt8192_mt6359_rt1015p_rt5682"
+#define RT1015P_RT5682S_OF_NAME "mediatek,mt8192_mt6359_rt1015p_rt5682s"
+
 struct mt8192_mt6359_priv {
        struct snd_soc_jack headset_jack;
        struct snd_soc_jack hdmi_jack;
        return snd_soc_dai_set_sysclk(cpu_dai, 0, mclk_fs, SND_SOC_CLOCK_OUT);
 }
 
-static int mt8192_rt5682_i2s_hw_params(struct snd_pcm_substream *substream,
-                                      struct snd_pcm_hw_params *params)
+static int mt8192_rt5682x_i2s_hw_params(struct snd_pcm_substream *substream,
+                                       struct snd_pcm_hw_params *params)
 {
        struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream);
        struct snd_soc_card *card = rtd->card;
        .hw_params = mt8192_rt1015_i2s_hw_params,
 };
 
-static const struct snd_soc_ops mt8192_rt5682_i2s_ops = {
-       .hw_params = mt8192_rt5682_i2s_hw_params,
+static const struct snd_soc_ops mt8192_rt5682x_i2s_ops = {
+       .hw_params = mt8192_rt5682x_i2s_hw_params,
 };
 
 static int mt8192_mt6359_mtkaif_calibration(struct snd_soc_pcm_runtime *rtd)
                .init = mt8192_rt5682_init,
                .be_hw_params_fixup = mt8192_i2s_hw_params_fixup,
                SND_SOC_DAILINK_REG(i2s8),
-               .ops = &mt8192_rt5682_i2s_ops,
+               .ops = &mt8192_rt5682x_i2s_ops,
        },
        {
                .name = "I2S9",
                .ignore_suspend = 1,
                .be_hw_params_fixup = mt8192_i2s_hw_params_fixup,
                SND_SOC_DAILINK_REG(i2s9),
-               .ops = &mt8192_rt5682_i2s_ops,
+               .ops = &mt8192_rt5682x_i2s_ops,
        },
        {
                .name = "CONNSYS_I2S",
 };
 
 static struct snd_soc_card mt8192_mt6359_rt1015_rt5682_card = {
-       .name = "mt8192_mt6359_rt1015_rt5682",
+       .name = RT1015_RT5682_CARD_NAME,
        .owner = THIS_MODULE,
        .dai_link = mt8192_mt6359_dai_links,
        .num_links = ARRAY_SIZE(mt8192_mt6359_dai_links),
        .num_configs = ARRAY_SIZE(rt1015_amp_conf),
 };
 
-static const struct snd_soc_dapm_widget
-mt8192_mt6359_rt1015p_rt5682_widgets[] = {
+static const struct snd_soc_dapm_widget mt8192_mt6359_rt1015p_rt5682x_widgets[] = {
        SND_SOC_DAPM_SPK("Speakers", NULL),
        SND_SOC_DAPM_HP("Headphone Jack", NULL),
        SND_SOC_DAPM_MIC("Headset Mic", NULL),
 };
 
-static const struct snd_soc_dapm_route mt8192_mt6359_rt1015p_rt5682_routes[] = {
+static const struct snd_soc_dapm_route mt8192_mt6359_rt1015p_rt5682x_routes[] = {
        /* speaker */
        { "Speakers", NULL, "Speaker" },
        /* headset */
        { "IN1P", NULL, "Headset Mic" },
 };
 
-static const struct snd_kcontrol_new mt8192_mt6359_rt1015p_rt5682_controls[] = {
+static const struct snd_kcontrol_new mt8192_mt6359_rt1015p_rt5682x_controls[] = {
        SOC_DAPM_PIN_SWITCH("Speakers"),
        SOC_DAPM_PIN_SWITCH("Headphone Jack"),
        SOC_DAPM_PIN_SWITCH("Headset Mic"),
 };
 
-static struct snd_soc_card mt8192_mt6359_rt1015p_rt5682_card = {
-       .name = "mt8192_mt6359_rt1015p_rt5682",
+static struct snd_soc_card mt8192_mt6359_rt1015p_rt5682x_card = {
        .owner = THIS_MODULE,
        .dai_link = mt8192_mt6359_dai_links,
        .num_links = ARRAY_SIZE(mt8192_mt6359_dai_links),
-       .controls = mt8192_mt6359_rt1015p_rt5682_controls,
-       .num_controls = ARRAY_SIZE(mt8192_mt6359_rt1015p_rt5682_controls),
-       .dapm_widgets = mt8192_mt6359_rt1015p_rt5682_widgets,
-       .num_dapm_widgets = ARRAY_SIZE(mt8192_mt6359_rt1015p_rt5682_widgets),
-       .dapm_routes = mt8192_mt6359_rt1015p_rt5682_routes,
-       .num_dapm_routes = ARRAY_SIZE(mt8192_mt6359_rt1015p_rt5682_routes),
+       .controls = mt8192_mt6359_rt1015p_rt5682x_controls,
+       .num_controls = ARRAY_SIZE(mt8192_mt6359_rt1015p_rt5682x_controls),
+       .dapm_widgets = mt8192_mt6359_rt1015p_rt5682x_widgets,
+       .num_dapm_widgets = ARRAY_SIZE(mt8192_mt6359_rt1015p_rt5682x_widgets),
+       .dapm_routes = mt8192_mt6359_rt1015p_rt5682x_routes,
+       .num_dapm_routes = ARRAY_SIZE(mt8192_mt6359_rt1015p_rt5682x_routes),
 };
 
 static int mt8192_mt6359_card_set_be_link(struct snd_soc_card *card,
                return -EINVAL;
        card->dev = &pdev->dev;
 
+       if (of_device_is_compatible(pdev->dev.of_node, RT1015P_RT5682_OF_NAME))
+               card->name = RT1015P_RT5682_CARD_NAME;
+       else if (of_device_is_compatible(pdev->dev.of_node, RT1015P_RT5682S_OF_NAME))
+               card->name = RT1015P_RT5682S_CARD_NAME;
+       else
+               dev_dbg(&pdev->dev, "No need to set card name\n");
+
        hdmi_codec = of_parse_phandle(pdev->dev.of_node, "mediatek,hdmi-codec", 0);
        if (!hdmi_codec)
                dev_dbg(&pdev->dev, "The machine has no hdmi-codec\n");
 #ifdef CONFIG_OF
 static const struct of_device_id mt8192_mt6359_dt_match[] = {
        {
-               .compatible = "mediatek,mt8192_mt6359_rt1015_rt5682",
+               .compatible = RT1015_RT5682_OF_NAME,
                .data = &mt8192_mt6359_rt1015_rt5682_card,
        },
        {
-               .compatible = "mediatek,mt8192_mt6359_rt1015p_rt5682",
-               .data = &mt8192_mt6359_rt1015p_rt5682_card,
+               .compatible = RT1015P_RT5682_OF_NAME,
+               .data = &mt8192_mt6359_rt1015p_rt5682x_card,
+       },
+       {
+               .compatible = RT1015P_RT5682S_OF_NAME,
+               .data = &mt8192_mt6359_rt1015p_rt5682x_card,
        },
        {}
 };