@@ -1347,7 +1347,7 @@ static int soc_init_pcm_runtime(struct snd_soc_card *card,
13471347 snd_soc_runtime_get_dai_fmt (rtd );
13481348 ret = snd_soc_runtime_set_dai_fmt (rtd , dai_link -> dai_fmt );
13491349 if (ret )
1350- return ret ;
1350+ goto err ;
13511351
13521352 /* add DPCM sysfs entries */
13531353 soc_dpcm_debugfs_add (rtd );
@@ -1372,17 +1372,26 @@ static int soc_init_pcm_runtime(struct snd_soc_card *card,
13721372 /* create compress_device if possible */
13731373 ret = snd_soc_dai_compress_new (cpu_dai , rtd , num );
13741374 if (ret != - ENOTSUPP )
1375- return ret ;
1375+ goto err ;
13761376
13771377 /* create the pcm */
13781378 ret = soc_new_pcm (rtd , num );
13791379 if (ret < 0 ) {
13801380 dev_err (card -> dev , "ASoC: can't create pcm %s :%d\n" ,
13811381 dai_link -> stream_name , ret );
1382- return ret ;
1382+ goto err ;
13831383 }
13841384
1385- return snd_soc_pcm_dai_new (rtd );
1385+ ret = snd_soc_pcm_dai_new (rtd );
1386+ if (ret < 0 )
1387+ goto err ;
1388+
1389+ rtd -> initialized = true;
1390+
1391+ return 0 ;
1392+ err :
1393+ snd_soc_link_exit (rtd );
1394+ return ret ;
13861395}
13871396
13881397static void soc_set_name_prefix (struct snd_soc_card * card ,
@@ -1445,8 +1454,8 @@ static int soc_probe_component(struct snd_soc_card *card,
14451454 if (component -> card ) {
14461455 if (component -> card != card ) {
14471456 dev_err (component -> dev ,
1448- "Trying to bind component to card \"%s\" but is already bound to card \"%s\"\n" ,
1449- card -> name , component -> card -> name );
1457+ "Trying to bind component \"%s\" to card \"%s\" but is already bound to card \"%s\"\n" ,
1458+ component -> name , card -> name , component -> card -> name );
14501459 return - ENODEV ;
14511460 }
14521461 return 0 ;
@@ -1980,7 +1989,8 @@ static void soc_cleanup_card_resources(struct snd_soc_card *card)
19801989
19811990 /* release machine specific resources */
19821991 for_each_card_rtds (card , rtd )
1983- snd_soc_link_exit (rtd );
1992+ if (rtd -> initialized )
1993+ snd_soc_link_exit (rtd );
19841994 /* remove and free each DAI */
19851995 soc_remove_link_dais (card );
19861996 soc_remove_link_components (card );
0 commit comments