Skip to content

Commit aad45b8

Browse files
AngeloGioacchino Del Regnobroonie
authored andcommitted
ASoC: mediatek: mt8188: Migrate to mtk_soundcard_common_probe
Add mtk_soundcard_pdata platform data for the MediaTek common sound card probe mechanism, including a driver/soc-specific probe extension (used for bits that cannot be commonized hence specific to this driver), and change the probe function to mtk_soundcard_common_probe. Reviewed-by: Alexandre Mergnat <amergnat@baylibre.com> Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com> Link: https://lore.kernel.org/r/20240416071410.75620-4-angelogioacchino.delregno@collabora.com Signed-off-by: Mark Brown <broonie@kernel.org>
1 parent f8782f7 commit aad45b8

1 file changed

Lines changed: 64 additions & 139 deletions

File tree

sound/soc/mediatek/mt8188/mt8188-mt6359.c

Lines changed: 64 additions & 139 deletions
Original file line numberDiff line numberDiff line change
@@ -236,11 +236,11 @@ static const struct sof_conn_stream g_sof_conn_streams[] = {
236236
},
237237
};
238238

239-
struct mt8188_mt6359_priv {
240-
struct snd_soc_jack dp_jack;
241-
struct snd_soc_jack hdmi_jack;
242-
struct snd_soc_jack headset_jack;
243-
void *private_data;
239+
enum mt8188_jacks {
240+
MT8188_JACK_HEADSET,
241+
MT8188_JACK_DP,
242+
MT8188_JACK_HDMI,
243+
MT8188_JACK_MAX,
244244
};
245245

246246
static struct snd_soc_jack_pin mt8188_hdmi_jack_pins[] = {
@@ -268,11 +268,6 @@ static struct snd_soc_jack_pin nau8825_jack_pins[] = {
268268
},
269269
};
270270

271-
struct mt8188_card_data {
272-
const char *name;
273-
unsigned long quirk;
274-
};
275-
276271
static const struct snd_kcontrol_new mt8188_dumb_spk_controls[] = {
277272
SOC_DAPM_PIN_SWITCH("Ext Spk"),
278273
};
@@ -590,20 +585,20 @@ static int mt8188_dptx_hw_params_fixup(struct snd_soc_pcm_runtime *rtd,
590585
static int mt8188_hdmi_codec_init(struct snd_soc_pcm_runtime *rtd)
591586
{
592587
struct mtk_soc_card_data *soc_card_data = snd_soc_card_get_drvdata(rtd->card);
593-
struct mt8188_mt6359_priv *priv = soc_card_data->mach_priv;
588+
struct snd_soc_jack *jack = &soc_card_data->card_data->jacks[MT8188_JACK_HDMI];
594589
struct snd_soc_component *component = snd_soc_rtd_to_codec(rtd, 0)->component;
595590
int ret = 0;
596591

597592
ret = snd_soc_card_jack_new_pins(rtd->card, "HDMI Jack",
598-
SND_JACK_LINEOUT, &priv->hdmi_jack,
593+
SND_JACK_LINEOUT, jack,
599594
mt8188_hdmi_jack_pins,
600595
ARRAY_SIZE(mt8188_hdmi_jack_pins));
601596
if (ret) {
602597
dev_err(rtd->dev, "%s, new jack failed: %d\n", __func__, ret);
603598
return ret;
604599
}
605600

606-
ret = snd_soc_component_set_jack(component, &priv->hdmi_jack, NULL);
601+
ret = snd_soc_component_set_jack(component, jack, NULL);
607602
if (ret) {
608603
dev_err(rtd->dev, "%s, set jack failed on %s (ret=%d)\n",
609604
__func__, component->name, ret);
@@ -616,19 +611,19 @@ static int mt8188_hdmi_codec_init(struct snd_soc_pcm_runtime *rtd)
616611
static int mt8188_dptx_codec_init(struct snd_soc_pcm_runtime *rtd)
617612
{
618613
struct mtk_soc_card_data *soc_card_data = snd_soc_card_get_drvdata(rtd->card);
619-
struct mt8188_mt6359_priv *priv = soc_card_data->mach_priv;
614+
struct snd_soc_jack *jack = &soc_card_data->card_data->jacks[MT8188_JACK_DP];
620615
struct snd_soc_component *component = snd_soc_rtd_to_codec(rtd, 0)->component;
621616
int ret = 0;
622617

623618
ret = snd_soc_card_jack_new_pins(rtd->card, "DP Jack", SND_JACK_LINEOUT,
624-
&priv->dp_jack, mt8188_dp_jack_pins,
619+
jack, mt8188_dp_jack_pins,
625620
ARRAY_SIZE(mt8188_dp_jack_pins));
626621
if (ret) {
627622
dev_err(rtd->dev, "%s, new jack failed: %d\n", __func__, ret);
628623
return ret;
629624
}
630625

631-
ret = snd_soc_component_set_jack(component, &priv->dp_jack, NULL);
626+
ret = snd_soc_component_set_jack(component, jack, NULL);
632627
if (ret) {
633628
dev_err(rtd->dev, "%s, set jack failed on %s (ret=%d)\n",
634629
__func__, component->name, ret);
@@ -736,10 +731,9 @@ static int mt8188_max98390_codec_init(struct snd_soc_pcm_runtime *rtd)
736731
static int mt8188_headset_codec_init(struct snd_soc_pcm_runtime *rtd)
737732
{
738733
struct snd_soc_card *card = rtd->card;
739-
struct mtk_soc_card_data *soc_card_data = snd_soc_card_get_drvdata(card);
740-
struct mt8188_mt6359_priv *priv = soc_card_data->mach_priv;
734+
struct mtk_soc_card_data *soc_card_data = snd_soc_card_get_drvdata(rtd->card);
735+
struct snd_soc_jack *jack = &soc_card_data->card_data->jacks[MT8188_JACK_HEADSET];
741736
struct snd_soc_component *component = snd_soc_rtd_to_codec(rtd, 0)->component;
742-
struct snd_soc_jack *jack = &priv->headset_jack;
743737
int ret;
744738

745739
ret = snd_soc_dapm_new_controls(&card->dapm, mt8188_nau8825_widgets,
@@ -1224,11 +1218,10 @@ static struct snd_soc_dai_link mt8188_mt6359_dai_links[] = {
12241218
static void mt8188_fixup_controls(struct snd_soc_card *card)
12251219
{
12261220
struct mtk_soc_card_data *soc_card_data = snd_soc_card_get_drvdata(card);
1227-
struct mt8188_mt6359_priv *priv = soc_card_data->mach_priv;
1228-
struct mt8188_card_data *card_data = (struct mt8188_card_data *)priv->private_data;
1221+
struct mtk_platform_card_data *card_data = soc_card_data->card_data;
12291222
struct snd_kcontrol *kctl;
12301223

1231-
if (card_data->quirk & (NAU8825_HS_PRESENT | RT5682S_HS_PRESENT | ES8326_HS_PRESENT)) {
1224+
if (card_data->flags & (NAU8825_HS_PRESENT | RT5682S_HS_PRESENT | ES8326_HS_PRESENT)) {
12321225
struct snd_soc_dapm_widget *w, *next_w;
12331226

12341227
for_each_card_widgets_safe(card, w, next_w) {
@@ -1259,106 +1252,23 @@ static struct snd_soc_card mt8188_mt6359_soc_card = {
12591252
.fixup_controls = mt8188_fixup_controls,
12601253
};
12611254

1262-
static int mt8188_mt6359_dev_probe(struct platform_device *pdev)
1255+
static int mt8188_mt6359_soc_card_probe(struct mtk_soc_card_data *soc_card_data, bool legacy)
12631256
{
1264-
struct snd_soc_card *card = &mt8188_mt6359_soc_card;
1265-
struct device_node *platform_node;
1266-
struct device_node *adsp_node;
1267-
struct mtk_soc_card_data *soc_card_data;
1268-
struct mt8188_mt6359_priv *priv;
1269-
struct mt8188_card_data *card_data;
1257+
struct mtk_platform_card_data *card_data = soc_card_data->card_data;
1258+
struct snd_soc_card *card = soc_card_data->card_data->card;
12701259
struct snd_soc_dai_link *dai_link;
12711260
bool init_mt6359 = false;
12721261
bool init_es8326 = false;
12731262
bool init_nau8825 = false;
12741263
bool init_rt5682s = false;
12751264
bool init_max98390 = false;
12761265
bool init_dumb = false;
1277-
int ret, i;
1278-
1279-
card_data = (struct mt8188_card_data *)of_device_get_match_data(&pdev->dev);
1280-
card->dev = &pdev->dev;
1281-
1282-
ret = snd_soc_of_parse_card_name(card, "model");
1283-
if (ret)
1284-
return dev_err_probe(&pdev->dev, ret, "%s new card name parsing error\n",
1285-
__func__);
1286-
1287-
if (!card->name)
1288-
card->name = card_data->name;
1289-
1290-
if (of_property_read_bool(pdev->dev.of_node, "audio-routing")) {
1291-
ret = snd_soc_of_parse_audio_routing(card, "audio-routing");
1292-
if (ret)
1293-
return ret;
1294-
}
1295-
1296-
priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL);
1297-
if (!priv)
1298-
return -ENOMEM;
1299-
1300-
soc_card_data = devm_kzalloc(&pdev->dev, sizeof(*card_data), GFP_KERNEL);
1301-
if (!soc_card_data)
1302-
return -ENOMEM;
1303-
1304-
soc_card_data->mach_priv = priv;
1305-
1306-
adsp_node = of_parse_phandle(pdev->dev.of_node, "mediatek,adsp", 0);
1307-
if (adsp_node) {
1308-
struct mtk_sof_priv *sof_priv;
1309-
1310-
sof_priv = devm_kzalloc(&pdev->dev, sizeof(*sof_priv), GFP_KERNEL);
1311-
if (!sof_priv) {
1312-
ret = -ENOMEM;
1313-
goto err_adsp_node;
1314-
}
1315-
sof_priv->conn_streams = g_sof_conn_streams;
1316-
sof_priv->num_streams = ARRAY_SIZE(g_sof_conn_streams);
1317-
soc_card_data->sof_priv = sof_priv;
1318-
card->probe = mtk_sof_card_probe;
1319-
card->late_probe = mtk_sof_card_late_probe;
1320-
if (!card->topology_shortname_created) {
1321-
snprintf(card->topology_shortname, 32, "sof-%s", card->name);
1322-
card->topology_shortname_created = true;
1323-
}
1324-
card->name = card->topology_shortname;
1325-
}
1326-
1327-
if (of_property_read_bool(pdev->dev.of_node, "mediatek,dai-link")) {
1328-
ret = mtk_sof_dailink_parse_of(card, pdev->dev.of_node,
1329-
"mediatek,dai-link",
1330-
mt8188_mt6359_dai_links,
1331-
ARRAY_SIZE(mt8188_mt6359_dai_links));
1332-
if (ret) {
1333-
dev_err_probe(&pdev->dev, ret, "Parse dai-link fail\n");
1334-
goto err_adsp_node;
1335-
}
1336-
} else {
1337-
if (!adsp_node)
1338-
card->num_links = DAI_LINK_REGULAR_NUM;
1339-
}
1340-
1341-
platform_node = of_parse_phandle(pdev->dev.of_node,
1342-
"mediatek,platform", 0);
1343-
if (!platform_node) {
1344-
ret = dev_err_probe(&pdev->dev, -EINVAL,
1345-
"Property 'platform' missing or invalid\n");
1346-
goto err_adsp_node;
1347-
1348-
}
1266+
int i;
13491267

1350-
ret = parse_dai_link_info(card);
1351-
if (ret)
1352-
goto err;
1268+
if (legacy)
1269+
return -EINVAL;
13531270

13541271
for_each_card_prelinks(card, i, dai_link) {
1355-
if (!dai_link->platforms->name) {
1356-
if (!strncmp(dai_link->name, "AFE_SOF", strlen("AFE_SOF")) && adsp_node)
1357-
dai_link->platforms->of_node = adsp_node;
1358-
else
1359-
dai_link->platforms->of_node = platform_node;
1360-
}
1361-
13621272
if (strcmp(dai_link->name, "DPTX_BE") == 0) {
13631273
if (strcmp(dai_link->codecs->dai_name, "snd-soc-dummy-dai"))
13641274
dai_link->init = mt8188_dptx_codec_init;
@@ -1381,7 +1291,7 @@ static int mt8188_mt6359_dev_probe(struct platform_device *pdev)
13811291
* mt8188_max98390_ops. Two amps is I2S mode,
13821292
* SOC and codec don't require TDM settings.
13831293
*/
1384-
if (!(card_data->quirk & MAX98390_TWO_AMP)) {
1294+
if (!(card_data->flags & MAX98390_TWO_AMP)) {
13851295
dai_link->ops = &mt8188_max98390_ops;
13861296
}
13871297
if (!init_max98390) {
@@ -1420,40 +1330,55 @@ static int mt8188_mt6359_dev_probe(struct platform_device *pdev)
14201330
}
14211331
}
14221332

1423-
priv->private_data = card_data;
1424-
snd_soc_card_set_drvdata(card, soc_card_data);
1425-
1426-
ret = devm_snd_soc_register_card(&pdev->dev, card);
1427-
if (ret)
1428-
dev_err_probe(&pdev->dev, ret, "%s snd_soc_register_card fail\n",
1429-
__func__);
1430-
err:
1431-
of_node_put(platform_node);
1432-
clean_card_reference(card);
1433-
1434-
err_adsp_node:
1435-
of_node_put(adsp_node);
1436-
1437-
return ret;
1333+
return 0;
14381334
}
14391335

1440-
static struct mt8188_card_data mt8188_evb_card = {
1441-
.name = "mt8188_mt6359",
1336+
static const struct mtk_sof_priv mt8188_sof_priv = {
1337+
.conn_streams = g_sof_conn_streams,
1338+
.num_streams = ARRAY_SIZE(g_sof_conn_streams),
1339+
};
1340+
1341+
static const struct mtk_soundcard_pdata mt8188_evb_card = {
1342+
.card_name = "mt8188_mt6359",
1343+
.card_data = &(struct mtk_platform_card_data) {
1344+
.card = &mt8188_mt6359_soc_card,
1345+
.num_jacks = MT8188_JACK_MAX,
1346+
},
1347+
.sof_priv = &mt8188_sof_priv,
1348+
.soc_probe = mt8188_mt6359_soc_card_probe,
14421349
};
14431350

1444-
static struct mt8188_card_data mt8188_nau8825_card = {
1445-
.name = "mt8188_nau8825",
1446-
.quirk = NAU8825_HS_PRESENT,
1351+
static const struct mtk_soundcard_pdata mt8188_nau8825_card = {
1352+
.card_name = "mt8188_nau8825",
1353+
.card_data = &(struct mtk_platform_card_data) {
1354+
.card = &mt8188_mt6359_soc_card,
1355+
.num_jacks = MT8188_JACK_MAX,
1356+
.flags = NAU8825_HS_PRESENT
1357+
},
1358+
.sof_priv = &mt8188_sof_priv,
1359+
.soc_probe = mt8188_mt6359_soc_card_probe,
14471360
};
14481361

1449-
static struct mt8188_card_data mt8188_rt5682s_card = {
1450-
.name = "mt8188_rt5682s",
1451-
.quirk = RT5682S_HS_PRESENT | MAX98390_TWO_AMP,
1362+
static const struct mtk_soundcard_pdata mt8188_rt5682s_card = {
1363+
.card_name = "mt8188_rt5682s",
1364+
.card_data = &(struct mtk_platform_card_data) {
1365+
.card = &mt8188_mt6359_soc_card,
1366+
.num_jacks = MT8188_JACK_MAX,
1367+
.flags = RT5682S_HS_PRESENT | MAX98390_TWO_AMP
1368+
},
1369+
.sof_priv = &mt8188_sof_priv,
1370+
.soc_probe = mt8188_mt6359_soc_card_probe,
14521371
};
14531372

1454-
static struct mt8188_card_data mt8188_es8326_card = {
1455-
.name = "mt8188_es8326",
1456-
.quirk = ES8326_HS_PRESENT | MAX98390_TWO_AMP,
1373+
static const struct mtk_soundcard_pdata mt8188_es8326_card = {
1374+
.card_name = "mt8188_es8326",
1375+
.card_data = &(struct mtk_platform_card_data) {
1376+
.card = &mt8188_mt6359_soc_card,
1377+
.num_jacks = MT8188_JACK_MAX,
1378+
.flags = ES8326_HS_PRESENT | MAX98390_TWO_AMP
1379+
},
1380+
.sof_priv = &mt8188_sof_priv,
1381+
.soc_probe = mt8188_mt6359_soc_card_probe,
14571382
};
14581383

14591384
static const struct of_device_id mt8188_mt6359_dt_match[] = {
@@ -1471,7 +1396,7 @@ static struct platform_driver mt8188_mt6359_driver = {
14711396
.of_match_table = mt8188_mt6359_dt_match,
14721397
.pm = &snd_soc_pm_ops,
14731398
},
1474-
.probe = mt8188_mt6359_dev_probe,
1399+
.probe = mtk_soundcard_common_probe,
14751400
};
14761401

14771402
module_platform_driver(mt8188_mt6359_driver);

0 commit comments

Comments
 (0)