26
26
#define AVS_RT5682_SSP_CODEC_MASK (GENMASK(2, 0))
27
27
#define AVS_RT5682_MCLK_EN BIT(3)
28
28
#define AVS_RT5682_MCLK_24MHZ BIT(4)
29
+ #define AVS_RT5682_CODEC_DAI_NAME "rt5682-aif1"
29
30
30
31
/* Default: MCLK on, MCLK 19.2M, SSP0 */
31
32
static 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)
119
120
return 0 ;
120
121
};
121
122
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
+
122
128
static int
123
129
avs_rt5682_hw_params (struct snd_pcm_substream * substream , struct snd_pcm_hw_params * params )
124
130
{
@@ -184,7 +190,7 @@ static int avs_create_dai_link(struct device *dev, const char *platform_name, in
184
190
185
191
dl -> cpus -> dai_name = devm_kasprintf (dev , GFP_KERNEL , "SSP%d Pin" , ssp_port );
186
192
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 );
188
194
if (!dl -> cpus -> dai_name || !dl -> codecs -> name || !dl -> codecs -> dai_name )
189
195
return - ENOMEM ;
190
196
@@ -194,6 +200,7 @@ static int avs_create_dai_link(struct device *dev, const char *platform_name, in
194
200
dl -> num_platforms = 1 ;
195
201
dl -> id = 0 ;
196
202
dl -> init = avs_rt5682_codec_init ;
203
+ dl -> exit = avs_rt5682_codec_exit ;
197
204
dl -> ops = & avs_rt5682_ops ;
198
205
dl -> nonatomic = 1 ;
199
206
dl -> no_pcm = 1 ;
@@ -237,30 +244,19 @@ static int avs_create_dapm_routes(struct device *dev, int ssp_port,
237
244
return 0 ;
238
245
}
239
246
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
-
254
247
static int avs_card_suspend_pre (struct snd_soc_card * card )
255
248
{
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 );
257
252
}
258
253
259
254
static int avs_card_resume_post (struct snd_soc_card * card )
260
255
{
256
+ struct snd_soc_dai * codec_dai = snd_soc_card_get_codec_dai (card , AVS_RT5682_CODEC_DAI_NAME );
261
257
struct snd_soc_jack * jack = snd_soc_card_get_drvdata (card );
262
258
263
- return avs_card_set_jack ( card , jack );
259
+ return snd_soc_component_set_jack ( codec_dai -> component , jack , NULL );
264
260
}
265
261
266
262
static int avs_rt5682_probe (struct platform_device * pdev )
@@ -304,7 +300,6 @@ static int avs_rt5682_probe(struct platform_device *pdev)
304
300
card -> name = "avs_rt5682" ;
305
301
card -> dev = dev ;
306
302
card -> owner = THIS_MODULE ;
307
- card -> remove = avs_card_remove ;
308
303
card -> suspend_pre = avs_card_suspend_pre ;
309
304
card -> resume_post = avs_card_resume_post ;
310
305
card -> dai_link = dai_link ;
0 commit comments