2626#define AVS_RT5682_SSP_CODEC_MASK (GENMASK(2, 0))
2727#define AVS_RT5682_MCLK_EN BIT(3)
2828#define AVS_RT5682_MCLK_24MHZ BIT(4)
29+ #define AVS_RT5682_CODEC_DAI_NAME "rt5682-aif1"
2930
3031/* Default: MCLK on, MCLK 19.2M, SSP0 */
3132static unsigned long avs_rt5682_quirk = AVS_RT5682_MCLK_EN | AVS_RT5682_SSP_CODEC (0 );
@@ -119,6 +120,11 @@ static int avs_rt5682_codec_init(struct snd_soc_pcm_runtime *runtime)
119120 return 0 ;
120121};
121122
123+ static void avs_rt5682_codec_exit (struct snd_soc_pcm_runtime * rtd )
124+ {
125+ snd_soc_component_set_jack (asoc_rtd_to_codec (rtd , 0 )-> component , NULL , NULL );
126+ }
127+
122128static int
123129avs_rt5682_hw_params (struct snd_pcm_substream * substream , struct snd_pcm_hw_params * params )
124130{
@@ -184,7 +190,7 @@ static int avs_create_dai_link(struct device *dev, const char *platform_name, in
184190
185191 dl -> cpus -> dai_name = devm_kasprintf (dev , GFP_KERNEL , "SSP%d Pin" , ssp_port );
186192 dl -> codecs -> name = devm_kasprintf (dev , GFP_KERNEL , "i2c-10EC5682:00" );
187- dl -> codecs -> dai_name = devm_kasprintf (dev , GFP_KERNEL , "rt5682-aif1" );
193+ dl -> codecs -> dai_name = devm_kasprintf (dev , GFP_KERNEL , AVS_RT5682_CODEC_DAI_NAME );
188194 if (!dl -> cpus -> dai_name || !dl -> codecs -> name || !dl -> codecs -> dai_name )
189195 return - ENOMEM ;
190196
@@ -194,6 +200,7 @@ static int avs_create_dai_link(struct device *dev, const char *platform_name, in
194200 dl -> num_platforms = 1 ;
195201 dl -> id = 0 ;
196202 dl -> init = avs_rt5682_codec_init ;
203+ dl -> exit = avs_rt5682_codec_exit ;
197204 dl -> ops = & avs_rt5682_ops ;
198205 dl -> nonatomic = 1 ;
199206 dl -> no_pcm = 1 ;
@@ -237,30 +244,19 @@ static int avs_create_dapm_routes(struct device *dev, int ssp_port,
237244 return 0 ;
238245}
239246
240- static int avs_card_set_jack (struct snd_soc_card * card , struct snd_soc_jack * jack )
241- {
242- struct snd_soc_component * component ;
243-
244- for_each_card_components (card , component )
245- snd_soc_component_set_jack (component , jack , NULL );
246- return 0 ;
247- }
248-
249- static int avs_card_remove (struct snd_soc_card * card )
250- {
251- return avs_card_set_jack (card , NULL );
252- }
253-
254247static int avs_card_suspend_pre (struct snd_soc_card * card )
255248{
256- return avs_card_set_jack (card , NULL );
249+ struct snd_soc_dai * codec_dai = snd_soc_card_get_codec_dai (card , AVS_RT5682_CODEC_DAI_NAME );
250+
251+ return snd_soc_component_set_jack (codec_dai -> component , NULL , NULL );
257252}
258253
259254static int avs_card_resume_post (struct snd_soc_card * card )
260255{
256+ struct snd_soc_dai * codec_dai = snd_soc_card_get_codec_dai (card , AVS_RT5682_CODEC_DAI_NAME );
261257 struct snd_soc_jack * jack = snd_soc_card_get_drvdata (card );
262258
263- return avs_card_set_jack ( card , jack );
259+ return snd_soc_component_set_jack ( codec_dai -> component , jack , NULL );
264260}
265261
266262static int avs_rt5682_probe (struct platform_device * pdev )
@@ -304,7 +300,6 @@ static int avs_rt5682_probe(struct platform_device *pdev)
304300 card -> name = "avs_rt5682" ;
305301 card -> dev = dev ;
306302 card -> owner = THIS_MODULE ;
307- card -> remove = avs_card_remove ;
308303 card -> suspend_pre = avs_card_suspend_pre ;
309304 card -> resume_post = avs_card_resume_post ;
310305 card -> dai_link = dai_link ;
0 commit comments