@@ -72,10 +72,10 @@ static const struct snd_soc_dapm_route card_base_routes[] = {
7272
7373static int avs_da7219_codec_init (struct snd_soc_pcm_runtime * runtime )
7474{
75- struct snd_soc_component * component = asoc_rtd_to_codec (runtime , 0 )-> component ;
75+ struct snd_soc_dai * codec_dai = asoc_rtd_to_codec (runtime , 0 );
76+ struct snd_soc_component * component = codec_dai -> component ;
7677 struct snd_soc_card * card = runtime -> card ;
7778 struct snd_soc_jack * jack ;
78- struct snd_soc_dai * codec_dai = asoc_rtd_to_codec (runtime , 0 );
7979 int clk_freq ;
8080 int ret ;
8181
@@ -109,9 +109,12 @@ static int avs_da7219_codec_init(struct snd_soc_pcm_runtime *runtime)
109109 snd_jack_set_key (jack -> jack , SND_JACK_BTN_2 , KEY_VOLUMEDOWN );
110110 snd_jack_set_key (jack -> jack , SND_JACK_BTN_3 , KEY_VOICECOMMAND );
111111
112- snd_soc_component_set_jack (component , jack , NULL );
112+ return snd_soc_component_set_jack (component , jack , NULL );
113+ }
113114
114- return 0 ;
115+ static void avs_da7219_codec_exit (struct snd_soc_pcm_runtime * rtd )
116+ {
117+ snd_soc_component_set_jack (asoc_rtd_to_codec (rtd , 0 )-> component , NULL , NULL );
115118}
116119
117120static int avs_create_dai_link (struct device * dev , const char * platform_name , int ssp_port ,
@@ -146,6 +149,7 @@ static int avs_create_dai_link(struct device *dev, const char *platform_name, in
146149 dl -> id = 0 ;
147150 dl -> dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_CBS_CFS ;
148151 dl -> init = avs_da7219_codec_init ;
152+ dl -> exit = avs_da7219_codec_exit ;
149153 dl -> nonatomic = 1 ;
150154 dl -> no_pcm = 1 ;
151155 dl -> dpcm_capture = 1 ;
@@ -188,30 +192,19 @@ static int avs_create_dapm_routes(struct device *dev, int ssp_port,
188192 return 0 ;
189193}
190194
191- static int avs_card_set_jack (struct snd_soc_card * card , struct snd_soc_jack * jack )
192- {
193- struct snd_soc_component * component ;
194-
195- for_each_card_components (card , component )
196- snd_soc_component_set_jack (component , jack , NULL );
197- return 0 ;
198- }
199-
200- static int avs_card_remove (struct snd_soc_card * card )
201- {
202- return avs_card_set_jack (card , NULL );
203- }
204-
205195static int avs_card_suspend_pre (struct snd_soc_card * card )
206196{
207- return avs_card_set_jack (card , NULL );
197+ struct snd_soc_dai * codec_dai = snd_soc_card_get_codec_dai (card , DA7219_DAI_NAME );
198+
199+ return snd_soc_component_set_jack (codec_dai -> component , NULL , NULL );
208200}
209201
210202static int avs_card_resume_post (struct snd_soc_card * card )
211203{
204+ struct snd_soc_dai * codec_dai = snd_soc_card_get_codec_dai (card , DA7219_DAI_NAME );
212205 struct snd_soc_jack * jack = snd_soc_card_get_drvdata (card );
213206
214- return avs_card_set_jack ( card , jack );
207+ return snd_soc_component_set_jack ( codec_dai -> component , jack , NULL );
215208}
216209
217210static int avs_da7219_probe (struct platform_device * pdev )
@@ -249,7 +242,6 @@ static int avs_da7219_probe(struct platform_device *pdev)
249242 card -> name = "avs_da7219" ;
250243 card -> dev = dev ;
251244 card -> owner = THIS_MODULE ;
252- card -> remove = avs_card_remove ;
253245 card -> suspend_pre = avs_card_suspend_pre ;
254246 card -> resume_post = avs_card_resume_post ;
255247 card -> dai_link = dai_link ;
0 commit comments