@@ -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
246246static 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-
276271static 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,
590585static 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)
616611static 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)
736731static 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[] = {
12241218static 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
14591384static 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
14771402module_platform_driver (mt8188_mt6359_driver );
0 commit comments