@@ -5090,6 +5090,7 @@ static void alc_headset_mode_unplugged(struct hda_codec *codec)
5090
5090
case 0x10ec0295 :
5091
5091
case 0x10ec0289 :
5092
5092
case 0x10ec0299 :
5093
+ alc_hp_mute_disable (codec , 75 );
5093
5094
alc_process_coef_fw (codec , alc225_pre_hsmode );
5094
5095
alc_process_coef_fw (codec , coef0225 );
5095
5096
break ;
@@ -5315,6 +5316,7 @@ static void alc_headset_mode_default(struct hda_codec *codec)
5315
5316
case 0x10ec0299 :
5316
5317
alc_process_coef_fw (codec , alc225_pre_hsmode );
5317
5318
alc_process_coef_fw (codec , coef0225 );
5319
+ alc_hp_enable_unmute (codec , 75 );
5318
5320
break ;
5319
5321
case 0x10ec0255 :
5320
5322
alc_process_coef_fw (codec , coef0255 );
@@ -5474,6 +5476,7 @@ static void alc_headset_mode_ctia(struct hda_codec *codec)
5474
5476
alc_process_coef_fw (codec , coef0225_2 );
5475
5477
else
5476
5478
alc_process_coef_fw (codec , coef0225_1 );
5479
+ alc_hp_enable_unmute (codec , 75 );
5477
5480
break ;
5478
5481
case 0x10ec0867 :
5479
5482
alc_update_coefex_idx (codec , 0x57 , 0x5 , 1 <<14 , 0 );
@@ -5579,6 +5582,7 @@ static void alc_headset_mode_omtp(struct hda_codec *codec)
5579
5582
case 0x10ec0289 :
5580
5583
case 0x10ec0299 :
5581
5584
alc_process_coef_fw (codec , coef0225 );
5585
+ alc_hp_enable_unmute (codec , 75 );
5582
5586
break ;
5583
5587
}
5584
5588
codec_dbg (codec , "Headset jack set to Nokia-style headset mode.\n" );
@@ -5738,12 +5742,6 @@ static void alc_determine_headset_type(struct hda_codec *codec)
5738
5742
case 0x10ec0295 :
5739
5743
case 0x10ec0289 :
5740
5744
case 0x10ec0299 :
5741
- snd_hda_codec_write (codec , 0x21 , 0 ,
5742
- AC_VERB_SET_AMP_GAIN_MUTE , AMP_OUT_MUTE );
5743
- msleep (80 );
5744
- snd_hda_codec_write (codec , 0x21 , 0 ,
5745
- AC_VERB_SET_PIN_WIDGET_CONTROL , 0x0 );
5746
-
5747
5745
alc_process_coef_fw (codec , alc225_pre_hsmode );
5748
5746
alc_update_coef_idx (codec , 0x67 , 0xf000 , 0x1000 );
5749
5747
val = alc_read_coef_idx (codec , 0x45 );
@@ -5760,15 +5758,19 @@ static void alc_determine_headset_type(struct hda_codec *codec)
5760
5758
val = alc_read_coef_idx (codec , 0x46 );
5761
5759
is_ctia = (val & 0x00f0 ) == 0x00f0 ;
5762
5760
}
5761
+ if (!is_ctia ) {
5762
+ alc_update_coef_idx (codec , 0x45 , 0x3f <<10 , 0x38 <<10 );
5763
+ alc_update_coef_idx (codec , 0x49 , 3 <<8 , 1 <<8 );
5764
+ msleep (100 );
5765
+ val = alc_read_coef_idx (codec , 0x46 );
5766
+ if ((val & 0x00f0 ) == 0x00f0 )
5767
+ is_ctia = false;
5768
+ else
5769
+ is_ctia = true;
5770
+ }
5763
5771
alc_update_coef_idx (codec , 0x4a , 7 <<6 , 7 <<6 );
5764
5772
alc_update_coef_idx (codec , 0x4a , 3 <<4 , 3 <<4 );
5765
5773
alc_update_coef_idx (codec , 0x67 , 0xf000 , 0x3000 );
5766
-
5767
- snd_hda_codec_write (codec , 0x21 , 0 ,
5768
- AC_VERB_SET_PIN_WIDGET_CONTROL , PIN_OUT );
5769
- msleep (80 );
5770
- snd_hda_codec_write (codec , 0x21 , 0 ,
5771
- AC_VERB_SET_AMP_GAIN_MUTE , AMP_OUT_UNMUTE );
5772
5774
break ;
5773
5775
case 0x10ec0867 :
5774
5776
is_ctia = true;
0 commit comments