mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-10 15:13:44 -04:00
ASoC: mt8195: Add support for MT8395 Radxa NIO 12L
Merge series from Julien Massot <julien.massot@collabora.com>: This patch series adds support for audio playback on the MT8395-based Radxa NIO 12L platform, which uses the integrated MT6359 codec via internal DAI links. Key additions: - Support for a new `mediatek,mt8195_mt6359` card configuration that does not rely on external codecs like rt5682. - Proper memory region declarations and pinctrl setup for the audio front-end (AFE) and audio DSP (ADSP). - A device tree sound node for headphone audio routing using `DL_SRC_BE` and `AIF1`. - Enhancements to the DT bindings to document the new compatible string, missing link-name, and additional audio routes (Headphone L/R).
This commit is contained in:
@@ -21,6 +21,7 @@ properties:
|
||||
- mediatek,mt8195_mt6359_rt1019_rt5682
|
||||
- mediatek,mt8195_mt6359_rt1011_rt5682
|
||||
- mediatek,mt8195_mt6359_max98390_rt5682
|
||||
- mediatek,mt8195_mt6359
|
||||
|
||||
model:
|
||||
$ref: /schemas/types.yaml#/definitions/string
|
||||
@@ -44,6 +45,8 @@ properties:
|
||||
- Right Spk
|
||||
|
||||
# Sources
|
||||
- Headphone L
|
||||
- Headphone R
|
||||
- Headset Mic
|
||||
- HPOL
|
||||
- HPOR
|
||||
@@ -88,6 +91,7 @@ patternProperties:
|
||||
link-name:
|
||||
description: Indicates dai-link name and PCM stream name
|
||||
enum:
|
||||
- DL_SRC_BE
|
||||
- DPTX_BE
|
||||
- ETDM1_IN_BE
|
||||
- ETDM2_IN_BE
|
||||
|
||||
@@ -92,10 +92,6 @@ static const struct snd_soc_dapm_widget mt8195_mt6359_widgets[] = {
|
||||
};
|
||||
|
||||
static const struct snd_soc_dapm_route mt8195_mt6359_routes[] = {
|
||||
/* headset */
|
||||
{ "Headphone", NULL, "HPOL" },
|
||||
{ "Headphone", NULL, "HPOR" },
|
||||
{ "IN1P", NULL, "Headset Mic" },
|
||||
/* SOF Uplink */
|
||||
{SOF_DMA_UL4, NULL, "O034"},
|
||||
{SOF_DMA_UL4, NULL, "O035"},
|
||||
@@ -131,6 +127,13 @@ static const struct snd_kcontrol_new mt8195_speaker_controls[] = {
|
||||
SOC_DAPM_PIN_SWITCH("Ext Spk"),
|
||||
};
|
||||
|
||||
static const struct snd_soc_dapm_route mt8195_rt5682_routes[] = {
|
||||
/* headset */
|
||||
{ "Headphone", NULL, "HPOL" },
|
||||
{ "Headphone", NULL, "HPOR" },
|
||||
{ "IN1P", NULL, "Headset Mic" },
|
||||
};
|
||||
|
||||
static const struct snd_soc_dapm_route mt8195_rt1011_routes[] = {
|
||||
{ "Left Spk", NULL, "Left SPO" },
|
||||
{ "Right Spk", NULL, "Right SPO" },
|
||||
@@ -447,6 +450,7 @@ static int mt8195_rt5682_init(struct snd_soc_pcm_runtime *rtd)
|
||||
snd_soc_rtdcom_lookup(rtd, AFE_PCM_NAME);
|
||||
struct mtk_base_afe *afe = snd_soc_component_get_drvdata(cmpnt_afe);
|
||||
struct mt8195_afe_private *afe_priv = afe->platform_priv;
|
||||
struct snd_soc_card *card = rtd->card;
|
||||
int ret;
|
||||
|
||||
priv->i2so1_mclk = afe_priv->clk[MT8195_CLK_TOP_APLL12_DIV2];
|
||||
@@ -473,7 +477,12 @@ static int mt8195_rt5682_init(struct snd_soc_pcm_runtime *rtd)
|
||||
return ret;
|
||||
}
|
||||
|
||||
return 0;
|
||||
ret = snd_soc_dapm_add_routes(&card->dapm, mt8195_rt5682_routes,
|
||||
ARRAY_SIZE(mt8195_rt5682_routes));
|
||||
if (ret)
|
||||
dev_err(rtd->dev, "unable to add dapm routes, ret %d\n", ret);
|
||||
|
||||
return ret;
|
||||
};
|
||||
|
||||
static int mt8195_rt1011_etdm_hw_params(struct snd_pcm_substream *substream,
|
||||
@@ -822,12 +831,12 @@ SND_SOC_DAILINK_DEFS(ETDM1_IN_BE,
|
||||
|
||||
SND_SOC_DAILINK_DEFS(ETDM2_IN_BE,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("ETDM2_IN")),
|
||||
DAILINK_COMP_ARRAY(COMP_EMPTY()),
|
||||
DAILINK_COMP_ARRAY(COMP_DUMMY()),
|
||||
DAILINK_COMP_ARRAY(COMP_EMPTY()));
|
||||
|
||||
SND_SOC_DAILINK_DEFS(ETDM1_OUT_BE,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("ETDM1_OUT")),
|
||||
DAILINK_COMP_ARRAY(COMP_EMPTY()),
|
||||
DAILINK_COMP_ARRAY(COMP_DUMMY()),
|
||||
DAILINK_COMP_ARRAY(COMP_EMPTY()));
|
||||
|
||||
SND_SOC_DAILINK_DEFS(ETDM2_OUT_BE,
|
||||
@@ -1515,6 +1524,18 @@ static const struct mtk_soundcard_pdata mt8195_mt6359_max98390_rt5682_card = {
|
||||
.soc_probe = mt8195_mt6359_soc_card_probe
|
||||
};
|
||||
|
||||
static const struct mtk_soundcard_pdata mt8195_mt6359_card = {
|
||||
.card_name = "mt8195_mt6359",
|
||||
.card_data = &(struct mtk_platform_card_data) {
|
||||
.card = &mt8195_mt6359_soc_card,
|
||||
.num_jacks = MT8195_JACK_MAX,
|
||||
.pcm_constraints = mt8195_pcm_constraints,
|
||||
.num_pcm_constraints = ARRAY_SIZE(mt8195_pcm_constraints),
|
||||
},
|
||||
.sof_priv = &mt8195_sof_priv,
|
||||
.soc_probe = mt8195_mt6359_soc_card_probe
|
||||
};
|
||||
|
||||
static const struct of_device_id mt8195_mt6359_dt_match[] = {
|
||||
{
|
||||
.compatible = "mediatek,mt8195_mt6359_rt1019_rt5682",
|
||||
@@ -1528,6 +1549,10 @@ static const struct of_device_id mt8195_mt6359_dt_match[] = {
|
||||
.compatible = "mediatek,mt8195_mt6359_max98390_rt5682",
|
||||
.data = &mt8195_mt6359_max98390_rt5682_card,
|
||||
},
|
||||
{
|
||||
.compatible = "mediatek,mt8195_mt6359",
|
||||
.data = &mt8195_mt6359_card,
|
||||
},
|
||||
{},
|
||||
};
|
||||
MODULE_DEVICE_TABLE(of, mt8195_mt6359_dt_match);
|
||||
|
||||
Reference in New Issue
Block a user