Commit 86a6b9c9 authored by Trevor Wu's avatar Trevor Wu Committed by Mark Brown

ASoC: mediatek: mt8195: add machine support for max98390 and rt5682

This patch adds support for mt8195 board with mt6359, max98390 and
rt5682.
Signed-off-by: default avatarTrevor Wu <trevor.wu@mediatek.com>
Reviewed-by: default avatarAngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Reviewed-by: default avatarTzung-Bi Shih <tzungbi@kernel.org>
Link: https://lore.kernel.org/r/20220324053851.27350-6-trevor.wu@mediatek.comSigned-off-by: default avatarMark Brown <broonie@kernel.org>
parent 3a0323c2
...@@ -207,6 +207,7 @@ config SND_SOC_MT8195_MT6359 ...@@ -207,6 +207,7 @@ config SND_SOC_MT8195_MT6359
select SND_SOC_RT1015P select SND_SOC_RT1015P
select SND_SOC_RT5682_I2C select SND_SOC_RT5682_I2C
select SND_SOC_RT5682S select SND_SOC_RT5682S
select SND_SOC_MAX98390
select SND_SOC_DMIC select SND_SOC_DMIC
select SND_SOC_HDMI_CODEC select SND_SOC_HDMI_CODEC
help help
......
...@@ -25,6 +25,7 @@ ...@@ -25,6 +25,7 @@
#define RT1011_SPEAKER_AMP_PRESENT BIT(0) #define RT1011_SPEAKER_AMP_PRESENT BIT(0)
#define RT1019_SPEAKER_AMP_PRESENT BIT(1) #define RT1019_SPEAKER_AMP_PRESENT BIT(1)
#define MAX98390_SPEAKER_AMP_PRESENT BIT(2)
#define RT1011_CODEC_DAI "rt1011-aif" #define RT1011_CODEC_DAI "rt1011-aif"
#define RT1011_DEV0_NAME "rt1011.2-0038" #define RT1011_DEV0_NAME "rt1011.2-0038"
...@@ -33,6 +34,10 @@ ...@@ -33,6 +34,10 @@
#define RT1019_CODEC_DAI "HiFi" #define RT1019_CODEC_DAI "HiFi"
#define RT1019_DEV0_NAME "rt1019p" #define RT1019_DEV0_NAME "rt1019p"
#define MAX98390_CODEC_DAI "max98390-aif1"
#define MAX98390_DEV0_NAME "max98390.2-0038" /* right */
#define MAX98390_DEV1_NAME "max98390.2-0039" /* left */
#define RT5682_CODEC_DAI "rt5682-aif1" #define RT5682_CODEC_DAI "rt5682-aif1"
#define RT5682_DEV0_NAME "rt5682.2-001a" #define RT5682_DEV0_NAME "rt5682.2-001a"
...@@ -121,6 +126,11 @@ static const struct snd_soc_dapm_route mt8195_rt1019_routes[] = { ...@@ -121,6 +126,11 @@ static const struct snd_soc_dapm_route mt8195_rt1019_routes[] = {
{ "Ext Spk", NULL, "Speaker" }, { "Ext Spk", NULL, "Speaker" },
}; };
static const struct snd_soc_dapm_route mt8195_max98390_routes[] = {
{ "Left Spk", NULL, "Left BE_OUT" },
{ "Right Spk", NULL, "Right BE_OUT" },
};
#define CKSYS_AUD_TOP_CFG 0x032c #define CKSYS_AUD_TOP_CFG 0x032c
#define CKSYS_AUD_TOP_MON 0x0330 #define CKSYS_AUD_TOP_MON 0x0330
...@@ -668,6 +678,34 @@ static int mt8195_rt1019_init(struct snd_soc_pcm_runtime *rtd) ...@@ -668,6 +678,34 @@ static int mt8195_rt1019_init(struct snd_soc_pcm_runtime *rtd)
return ret; return ret;
} }
static int mt8195_max98390_init(struct snd_soc_pcm_runtime *rtd)
{
struct snd_soc_card *card = rtd->card;
int ret;
ret = snd_soc_dapm_new_controls(&card->dapm, mt8195_dual_speaker_widgets,
ARRAY_SIZE(mt8195_dual_speaker_widgets));
if (ret) {
dev_err(rtd->dev, "unable to add dapm controls, ret %d\n", ret);
/* Don't need to add routes if widget addition failed */
return ret;
}
ret = snd_soc_add_card_controls(card, mt8195_dual_speaker_controls,
ARRAY_SIZE(mt8195_dual_speaker_controls));
if (ret) {
dev_err(rtd->dev, "unable to add card controls, ret %d\n", ret);
return ret;
}
ret = snd_soc_dapm_add_routes(&card->dapm, mt8195_max98390_routes,
ARRAY_SIZE(mt8195_max98390_routes));
if (ret)
dev_err(rtd->dev, "unable to add dapm routes, ret %d\n", ret);
return ret;
}
static int mt8195_etdm_hw_params_fixup(struct snd_soc_pcm_runtime *rtd, static int mt8195_etdm_hw_params_fixup(struct snd_soc_pcm_runtime *rtd,
struct snd_pcm_hw_params *params) struct snd_pcm_hw_params *params)
{ {
...@@ -926,6 +964,12 @@ SND_SOC_DAILINK_DEF(rt1011_comps, ...@@ -926,6 +964,12 @@ SND_SOC_DAILINK_DEF(rt1011_comps,
COMP_CODEC(RT1011_DEV1_NAME, COMP_CODEC(RT1011_DEV1_NAME,
RT1011_CODEC_DAI))); RT1011_CODEC_DAI)));
SND_SOC_DAILINK_DEF(max98390_comps,
DAILINK_COMP_ARRAY(COMP_CODEC(MAX98390_DEV0_NAME,
MAX98390_CODEC_DAI),
COMP_CODEC(MAX98390_DEV1_NAME,
MAX98390_CODEC_DAI)));
static const struct sof_conn_stream g_sof_conn_streams[] = { static const struct sof_conn_stream g_sof_conn_streams[] = {
{ "ETDM2_OUT_BE", "AFE_SOF_DL2", SOF_DMA_DL2, SNDRV_PCM_STREAM_PLAYBACK}, { "ETDM2_OUT_BE", "AFE_SOF_DL2", SOF_DMA_DL2, SNDRV_PCM_STREAM_PLAYBACK},
{ "ETDM1_OUT_BE", "AFE_SOF_DL3", SOF_DMA_DL3, SNDRV_PCM_STREAM_PLAYBACK}, { "ETDM1_OUT_BE", "AFE_SOF_DL3", SOF_DMA_DL3, SNDRV_PCM_STREAM_PLAYBACK},
...@@ -1249,6 +1293,17 @@ static struct snd_soc_codec_conf rt1011_codec_conf[] = { ...@@ -1249,6 +1293,17 @@ static struct snd_soc_codec_conf rt1011_codec_conf[] = {
}, },
}; };
static struct snd_soc_codec_conf max98390_codec_conf[] = {
{
.dlc = COMP_CODEC_CONF(MAX98390_DEV0_NAME),
.name_prefix = "Right",
},
{
.dlc = COMP_CODEC_CONF(MAX98390_DEV1_NAME),
.name_prefix = "Left",
},
};
static struct snd_soc_card mt8195_mt6359_soc_card = { static struct snd_soc_card mt8195_mt6359_soc_card = {
.owner = THIS_MODULE, .owner = THIS_MODULE,
.dai_link = mt8195_mt6359_dai_links, .dai_link = mt8195_mt6359_dai_links,
...@@ -1544,6 +1599,13 @@ static int mt8195_mt6359_dev_probe(struct platform_device *pdev) ...@@ -1544,6 +1599,13 @@ static int mt8195_mt6359_dev_probe(struct platform_device *pdev)
dai_link->num_codecs = ARRAY_SIZE(rt1019_comps); dai_link->num_codecs = ARRAY_SIZE(rt1019_comps);
dai_link->init = mt8195_rt1019_init; dai_link->init = mt8195_rt1019_init;
break; break;
case MAX98390_SPEAKER_AMP_PRESENT:
dai_link->codecs = max98390_comps;
dai_link->num_codecs = ARRAY_SIZE(max98390_comps);
dai_link->init = mt8195_max98390_init;
card->codec_conf = max98390_codec_conf;
card->num_configs = ARRAY_SIZE(max98390_codec_conf);
break;
default: default:
break; break;
} }
...@@ -1574,6 +1636,11 @@ static struct mt8195_card_data mt8195_mt6359_rt1011_rt5682_card = { ...@@ -1574,6 +1636,11 @@ static struct mt8195_card_data mt8195_mt6359_rt1011_rt5682_card = {
.quirk = RT1011_SPEAKER_AMP_PRESENT, .quirk = RT1011_SPEAKER_AMP_PRESENT,
}; };
static struct mt8195_card_data mt8195_mt6359_max98390_rt5682_card = {
.name = "mt8195_m98390_r5682",
.quirk = MAX98390_SPEAKER_AMP_PRESENT,
};
#ifdef CONFIG_OF #ifdef CONFIG_OF
static const struct of_device_id mt8195_mt6359_dt_match[] = { static const struct of_device_id mt8195_mt6359_dt_match[] = {
{ {
...@@ -1584,6 +1651,10 @@ static const struct of_device_id mt8195_mt6359_dt_match[] = { ...@@ -1584,6 +1651,10 @@ static const struct of_device_id mt8195_mt6359_dt_match[] = {
.compatible = "mediatek,mt8195_mt6359_rt1011_rt5682", .compatible = "mediatek,mt8195_mt6359_rt1011_rt5682",
.data = &mt8195_mt6359_rt1011_rt5682_card, .data = &mt8195_mt6359_rt1011_rt5682_card,
}, },
{
.compatible = "mediatek,mt8195_mt6359_max98390_rt5682",
.data = &mt8195_mt6359_max98390_rt5682_card,
},
}; };
#endif #endif
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment