Skip to content

Commit c9d57a2

Browse files
wenliangwubroonie
authored andcommitted
ASoC: mediatek: mt8195: add headset codec rt5682s support
mt8195 machine driver adds rt5682s support in this patch. Card name can be specified from dts by model property, and driver makes use of the name to distinguish which headset codec is on the board. Signed-off-by: Trevor Wu <trevor.wu@mediatek.com> Link: https://lore.kernel.org/r/20211129141057.12422-2-trevor.wu@mediatek.com Signed-off-by: Mark Brown <broonie@kernel.org>
1 parent 0695ad9 commit c9d57a2

3 files changed

Lines changed: 47 additions & 14 deletions

File tree

sound/soc/mediatek/Kconfig

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,7 @@ config SND_SOC_MT8195_MT6359_RT1019_RT5682
205205
select SND_SOC_MT6359
206206
select SND_SOC_RT1015P
207207
select SND_SOC_RT5682_I2C
208+
select SND_SOC_RT5682S
208209
select SND_SOC_DMIC
209210
select SND_SOC_HDMI_CODEC
210211
help
@@ -220,6 +221,7 @@ config SND_SOC_MT8195_MT6359_RT1011_RT5682
220221
select SND_SOC_MT6359
221222
select SND_SOC_RT1011
222223
select SND_SOC_RT5682_I2C
224+
select SND_SOC_RT5682S
223225
select SND_SOC_DMIC
224226
select SND_SOC_HDMI_CODEC
225227
help

sound/soc/mediatek/mt8195/mt8195-mt6359-rt1011-rt5682.c

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@
2727
#define RT5682_CODEC_DAI "rt5682-aif1"
2828
#define RT5682_DEV0_NAME "rt5682.2-001a"
2929

30+
#define RT5682S_CODEC_DAI "rt5682s-aif1"
31+
#define RT5682S_DEV0_NAME "rt5682s.2-001a"
32+
3033
struct mt8195_mt6359_rt1011_rt5682_priv {
3134
struct device_node *platform_node;
3235
struct device_node *hdmi_node;
@@ -691,14 +694,12 @@ SND_SOC_DAILINK_DEFS(ETDM1_IN_BE,
691694

692695
SND_SOC_DAILINK_DEFS(ETDM2_IN_BE,
693696
DAILINK_COMP_ARRAY(COMP_CPU("ETDM2_IN")),
694-
DAILINK_COMP_ARRAY(COMP_CODEC(RT5682_DEV0_NAME,
695-
RT5682_CODEC_DAI)),
697+
DAILINK_COMP_ARRAY(COMP_DUMMY()),
696698
DAILINK_COMP_ARRAY(COMP_EMPTY()));
697699

698700
SND_SOC_DAILINK_DEFS(ETDM1_OUT_BE,
699701
DAILINK_COMP_ARRAY(COMP_CPU("ETDM1_OUT")),
700-
DAILINK_COMP_ARRAY(COMP_CODEC(RT5682_DEV0_NAME,
701-
RT5682_CODEC_DAI)),
702+
DAILINK_COMP_ARRAY(COMP_DUMMY()),
702703
DAILINK_COMP_ARRAY(COMP_EMPTY()));
703704

704705
SND_SOC_DAILINK_DEFS(ETDM2_OUT_BE,
@@ -1046,9 +1047,19 @@ static int mt8195_mt6359_rt1011_rt5682_dev_probe(struct platform_device *pdev)
10461047
struct snd_soc_card *card = &mt8195_mt6359_rt1011_rt5682_soc_card;
10471048
struct snd_soc_dai_link *dai_link;
10481049
struct mt8195_mt6359_rt1011_rt5682_priv *priv;
1050+
int is5682s = 0;
10491051
int ret, i;
10501052

10511053
card->dev = &pdev->dev;
1054+
ret = snd_soc_of_parse_card_name(card, "model");
1055+
if (ret) {
1056+
dev_err(&pdev->dev, "%s new card name parsing error %d\n",
1057+
__func__, ret);
1058+
return ret;
1059+
}
1060+
1061+
if (strstr(card->name, "_5682s"))
1062+
is5682s = 1;
10521063

10531064
priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL);
10541065
if (!priv)
@@ -1078,9 +1089,7 @@ static int mt8195_mt6359_rt1011_rt5682_dev_probe(struct platform_device *pdev)
10781089
dai_link->codecs->dai_name = "i2s-hifi";
10791090
dai_link->init = mt8195_dptx_codec_init;
10801091
}
1081-
}
1082-
1083-
if (strcmp(dai_link->name, "ETDM3_OUT_BE") == 0) {
1092+
} else if (strcmp(dai_link->name, "ETDM3_OUT_BE") == 0) {
10841093
priv->hdmi_node =
10851094
of_parse_phandle(pdev->dev.of_node,
10861095
"mediatek,hdmi-codec", 0);
@@ -1092,6 +1101,12 @@ static int mt8195_mt6359_rt1011_rt5682_dev_probe(struct platform_device *pdev)
10921101
dai_link->codecs->dai_name = "i2s-hifi";
10931102
dai_link->init = mt8195_hdmi_codec_init;
10941103
}
1104+
} else if (strcmp(dai_link->name, "ETDM1_OUT_BE") == 0 ||
1105+
strcmp(dai_link->name, "ETDM2_IN_BE") == 0) {
1106+
dai_link->codecs->name =
1107+
is5682s ? RT5682S_DEV0_NAME : RT5682_DEV0_NAME;
1108+
dai_link->codecs->dai_name =
1109+
is5682s ? RT5682S_CODEC_DAI : RT5682_CODEC_DAI;
10951110
}
10961111
}
10971112

sound/soc/mediatek/mt8195/mt8195-mt6359-rt1019-rt5682.c

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,9 @@
2525
#define RT5682_CODEC_DAI "rt5682-aif1"
2626
#define RT5682_DEV0_NAME "rt5682.2-001a"
2727

28+
#define RT5682S_CODEC_DAI "rt5682s-aif1"
29+
#define RT5682S_DEV0_NAME "rt5682s.2-001a"
30+
2831
struct mt8195_mt6359_rt1019_rt5682_priv {
2932
struct device_node *platform_node;
3033
struct device_node *hdmi_node;
@@ -661,14 +664,12 @@ SND_SOC_DAILINK_DEFS(ETDM1_IN_BE,
661664

662665
SND_SOC_DAILINK_DEFS(ETDM2_IN_BE,
663666
DAILINK_COMP_ARRAY(COMP_CPU("ETDM2_IN")),
664-
DAILINK_COMP_ARRAY(COMP_CODEC(RT5682_DEV0_NAME,
665-
RT5682_CODEC_DAI)),
667+
DAILINK_COMP_ARRAY(COMP_DUMMY()),
666668
DAILINK_COMP_ARRAY(COMP_EMPTY()));
667669

668670
SND_SOC_DAILINK_DEFS(ETDM1_OUT_BE,
669671
DAILINK_COMP_ARRAY(COMP_CPU("ETDM1_OUT")),
670-
DAILINK_COMP_ARRAY(COMP_CODEC(RT5682_DEV0_NAME,
671-
RT5682_CODEC_DAI)),
672+
DAILINK_COMP_ARRAY(COMP_DUMMY()),
672673
DAILINK_COMP_ARRAY(COMP_EMPTY()));
673674

674675
SND_SOC_DAILINK_DEFS(ETDM2_OUT_BE,
@@ -999,10 +1000,21 @@ static int mt8195_mt6359_rt1019_rt5682_dev_probe(struct platform_device *pdev)
9991000
struct snd_soc_card *card = &mt8195_mt6359_rt1019_rt5682_soc_card;
10001001
struct snd_soc_dai_link *dai_link;
10011002
struct mt8195_mt6359_rt1019_rt5682_priv *priv;
1003+
int is5682s = 0;
10021004
int ret, i;
10031005

10041006
card->dev = &pdev->dev;
10051007

1008+
ret = snd_soc_of_parse_card_name(card, "model");
1009+
if (ret) {
1010+
dev_err(&pdev->dev, "%s new card name parsing error %d\n",
1011+
__func__, ret);
1012+
return ret;
1013+
}
1014+
1015+
if (strstr(card->name, "_5682s"))
1016+
is5682s = 1;
1017+
10061018
priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL);
10071019
if (!priv)
10081020
return -ENOMEM;
@@ -1031,9 +1043,7 @@ static int mt8195_mt6359_rt1019_rt5682_dev_probe(struct platform_device *pdev)
10311043
dai_link->codecs->dai_name = "i2s-hifi";
10321044
dai_link->init = mt8195_dptx_codec_init;
10331045
}
1034-
}
1035-
1036-
if (strcmp(dai_link->name, "ETDM3_OUT_BE") == 0) {
1046+
} else if (strcmp(dai_link->name, "ETDM3_OUT_BE") == 0) {
10371047
priv->hdmi_node =
10381048
of_parse_phandle(pdev->dev.of_node,
10391049
"mediatek,hdmi-codec", 0);
@@ -1045,6 +1055,12 @@ static int mt8195_mt6359_rt1019_rt5682_dev_probe(struct platform_device *pdev)
10451055
dai_link->codecs->dai_name = "i2s-hifi";
10461056
dai_link->init = mt8195_hdmi_codec_init;
10471057
}
1058+
} else if (strcmp(dai_link->name, "ETDM1_OUT_BE") == 0 ||
1059+
strcmp(dai_link->name, "ETDM2_IN_BE") == 0) {
1060+
dai_link->codecs->name =
1061+
is5682s ? RT5682S_DEV0_NAME : RT5682_DEV0_NAME;
1062+
dai_link->codecs->dai_name =
1063+
is5682s ? RT5682S_CODEC_DAI : RT5682_CODEC_DAI;
10481064
}
10491065
}
10501066

0 commit comments

Comments
 (0)