@@ -784,6 +784,8 @@ static void cs42l42_suspend(struct sub_codec *cs42l42)
784
784
cs8409_i2c_write (cs42l42 , 0x1102 , 0x9C );
785
785
cs42l42 -> suspended = 1 ;
786
786
cs42l42 -> last_page = 0 ;
787
+ cs42l42 -> hp_jack_in = 0 ;
788
+ cs42l42 -> mic_jack_in = 0 ;
787
789
788
790
/* Put CS42L42 into Reset */
789
791
gpio_data = snd_hda_codec_read (codec , CS8409_PIN_AFG , 0 , AC_VERB_GET_GPIO_DATA , 0 );
@@ -852,6 +854,8 @@ static int cs8409_cs42l42_suspend(struct hda_codec *codec)
852
854
struct cs8409_spec * spec = codec -> spec ;
853
855
int i ;
854
856
857
+ spec -> init_done = 0 ;
858
+
855
859
cs8409_enable_ur (codec , 0 );
856
860
857
861
for (i = 0 ; i < spec -> num_scodecs ; i ++ )
@@ -1025,14 +1029,21 @@ void cs8409_cs42l42_fixups(struct hda_codec *codec, const struct hda_fixup *fix,
1025
1029
break ;
1026
1030
case HDA_FIXUP_ACT_INIT :
1027
1031
cs8409_cs42l42_hw_init (codec );
1028
- fallthrough ;
1032
+ spec -> init_done = 1 ;
1033
+ if (spec -> init_done && spec -> build_ctrl_done
1034
+ && !spec -> scodecs [CS8409_CODEC0 ]-> hp_jack_in )
1035
+ cs42l42_run_jack_detect (spec -> scodecs [CS8409_CODEC0 ]);
1036
+ break ;
1029
1037
case HDA_FIXUP_ACT_BUILD :
1038
+ spec -> build_ctrl_done = 1 ;
1030
1039
/* Run jack auto detect first time on boot
1031
1040
* after controls have been added, to check if jack has
1032
1041
* been already plugged in.
1033
1042
* Run immediately after init.
1034
1043
*/
1035
- cs42l42_run_jack_detect (spec -> scodecs [CS8409_CODEC0 ]);
1044
+ if (spec -> init_done && spec -> build_ctrl_done
1045
+ && !spec -> scodecs [CS8409_CODEC0 ]-> hp_jack_in )
1046
+ cs42l42_run_jack_detect (spec -> scodecs [CS8409_CODEC0 ]);
1036
1047
break ;
1037
1048
default :
1038
1049
break ;
@@ -1223,16 +1234,27 @@ void dolphin_fixups(struct hda_codec *codec, const struct hda_fixup *fix, int ac
1223
1234
break ;
1224
1235
case HDA_FIXUP_ACT_INIT :
1225
1236
dolphin_hw_init (codec );
1226
- fallthrough ;
1237
+ spec -> init_done = 1 ;
1238
+ if (spec -> init_done && spec -> build_ctrl_done ) {
1239
+ for (i = 0 ; i < spec -> num_scodecs ; i ++ ) {
1240
+ if (!spec -> scodecs [i ]-> hp_jack_in )
1241
+ cs42l42_run_jack_detect (spec -> scodecs [i ]);
1242
+ }
1243
+ }
1244
+ break ;
1227
1245
case HDA_FIXUP_ACT_BUILD :
1246
+ spec -> build_ctrl_done = 1 ;
1228
1247
/* Run jack auto detect first time on boot
1229
1248
* after controls have been added, to check if jack has
1230
1249
* been already plugged in.
1231
1250
* Run immediately after init.
1232
1251
*/
1233
- for (i = 0 ; i < spec -> num_scodecs ; i ++ )
1234
- cs42l42_run_jack_detect (spec -> scodecs [i ]);
1235
-
1252
+ if (spec -> init_done && spec -> build_ctrl_done ) {
1253
+ for (i = 0 ; i < spec -> num_scodecs ; i ++ ) {
1254
+ if (!spec -> scodecs [i ]-> hp_jack_in )
1255
+ cs42l42_run_jack_detect (spec -> scodecs [i ]);
1256
+ }
1257
+ }
1236
1258
break ;
1237
1259
default :
1238
1260
break ;
0 commit comments