forked from mirrors/linux
		
	ALSA: hda/realtek - Enable headset button support for new codec
This patch will enable headset button for new Chrome platform. Signed-off-by: Kailang Yang <kailang@realtek.com> Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
		
							parent
							
								
									911761c230
								
							
						
					
					
						commit
						e854747d75
					
				
					 1 changed files with 66 additions and 0 deletions
				
			
		| 
						 | 
					@ -5380,6 +5380,66 @@ static void alc285_fixup_invalidate_dacs(struct hda_codec *codec,
 | 
				
			||||||
	snd_hda_override_wcaps(codec, 0x03, 0);
 | 
						snd_hda_override_wcaps(codec, 0x03, 0);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static const struct hda_jack_keymap alc_headset_btn_keymap[] = {
 | 
				
			||||||
 | 
						{ SND_JACK_BTN_0, KEY_PLAYPAUSE },
 | 
				
			||||||
 | 
						{ SND_JACK_BTN_1, KEY_VOICECOMMAND },
 | 
				
			||||||
 | 
						{ SND_JACK_BTN_2, KEY_VOLUMEUP },
 | 
				
			||||||
 | 
						{ SND_JACK_BTN_3, KEY_VOLUMEDOWN },
 | 
				
			||||||
 | 
						{}
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void alc_headset_btn_callback(struct hda_codec *codec,
 | 
				
			||||||
 | 
									     struct hda_jack_callback *jack)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						int report = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (jack->unsol_res & (7 << 13))
 | 
				
			||||||
 | 
							report |= SND_JACK_BTN_0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (jack->unsol_res  & (1 << 16 | 3 << 8))
 | 
				
			||||||
 | 
							report |= SND_JACK_BTN_1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* Volume up key */
 | 
				
			||||||
 | 
						if (jack->unsol_res & (7 << 23))
 | 
				
			||||||
 | 
							report |= SND_JACK_BTN_2;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* Volume down key */
 | 
				
			||||||
 | 
						if (jack->unsol_res & (7 << 10))
 | 
				
			||||||
 | 
							report |= SND_JACK_BTN_3;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						jack->jack->button_state = report;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void alc_fixup_headset_jack(struct hda_codec *codec,
 | 
				
			||||||
 | 
									    const struct hda_fixup *fix, int action)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						switch (action) {
 | 
				
			||||||
 | 
						case HDA_FIXUP_ACT_PRE_PROBE:
 | 
				
			||||||
 | 
							snd_hda_jack_detect_enable_callback(codec, 0x55,
 | 
				
			||||||
 | 
											    alc_headset_btn_callback);
 | 
				
			||||||
 | 
							snd_hda_jack_add_kctl(codec, 0x55, "Headset Jack", false,
 | 
				
			||||||
 | 
									      SND_JACK_HEADSET, alc_headset_btn_keymap);
 | 
				
			||||||
 | 
							break;
 | 
				
			||||||
 | 
						case HDA_FIXUP_ACT_INIT:
 | 
				
			||||||
 | 
							switch (codec->core.vendor_id) {
 | 
				
			||||||
 | 
							case 0x10ec0225:
 | 
				
			||||||
 | 
							case 0x10ec0295:
 | 
				
			||||||
 | 
							case 0x10ec0299:
 | 
				
			||||||
 | 
								alc_write_coef_idx(codec, 0x48, 0xd011);
 | 
				
			||||||
 | 
								alc_update_coef_idx(codec, 0x49, 0x007f, 0x0045);
 | 
				
			||||||
 | 
								alc_update_coef_idx(codec, 0x44, 0x007f << 8, 0x0045 << 8);
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
							case 0x10ec0236:
 | 
				
			||||||
 | 
							case 0x10ec0256:
 | 
				
			||||||
 | 
								alc_write_coef_idx(codec, 0x48, 0xd011);
 | 
				
			||||||
 | 
								alc_update_coef_idx(codec, 0x49, 0x007f, 0x0045);
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							break;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* for hda_fixup_thinkpad_acpi() */
 | 
					/* for hda_fixup_thinkpad_acpi() */
 | 
				
			||||||
#include "thinkpad_helper.c"
 | 
					#include "thinkpad_helper.c"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -5517,6 +5577,7 @@ enum {
 | 
				
			||||||
	ALC285_FIXUP_LENOVO_HEADPHONE_NOISE,
 | 
						ALC285_FIXUP_LENOVO_HEADPHONE_NOISE,
 | 
				
			||||||
	ALC295_FIXUP_HP_AUTO_MUTE,
 | 
						ALC295_FIXUP_HP_AUTO_MUTE,
 | 
				
			||||||
	ALC286_FIXUP_ACER_AIO_MIC_NO_PRESENCE,
 | 
						ALC286_FIXUP_ACER_AIO_MIC_NO_PRESENCE,
 | 
				
			||||||
 | 
						ALC225_FIXUP_HEADSET_JACK,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static const struct hda_fixup alc269_fixups[] = {
 | 
					static const struct hda_fixup alc269_fixups[] = {
 | 
				
			||||||
| 
						 | 
					@ -6403,6 +6464,10 @@ static const struct hda_fixup alc269_fixups[] = {
 | 
				
			||||||
		.chained = true,
 | 
							.chained = true,
 | 
				
			||||||
		.chain_id = ALC269_FIXUP_HEADSET_MIC
 | 
							.chain_id = ALC269_FIXUP_HEADSET_MIC
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
 | 
						[ALC225_FIXUP_HEADSET_JACK] = {
 | 
				
			||||||
 | 
							.type = HDA_FIXUP_FUNC,
 | 
				
			||||||
 | 
							.v.func = alc_fixup_headset_jack,
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static const struct snd_pci_quirk alc269_fixup_tbl[] = {
 | 
					static const struct snd_pci_quirk alc269_fixup_tbl[] = {
 | 
				
			||||||
| 
						 | 
					@ -6805,6 +6870,7 @@ static const struct hda_model_fixup alc269_fixup_models[] = {
 | 
				
			||||||
	{.id = ALC255_FIXUP_DUMMY_LINEOUT_VERB, .name = "alc255-dummy-lineout"},
 | 
						{.id = ALC255_FIXUP_DUMMY_LINEOUT_VERB, .name = "alc255-dummy-lineout"},
 | 
				
			||||||
	{.id = ALC255_FIXUP_DELL_HEADSET_MIC, .name = "alc255-dell-headset"},
 | 
						{.id = ALC255_FIXUP_DELL_HEADSET_MIC, .name = "alc255-dell-headset"},
 | 
				
			||||||
	{.id = ALC295_FIXUP_HP_X360, .name = "alc295-hp-x360"},
 | 
						{.id = ALC295_FIXUP_HP_X360, .name = "alc295-hp-x360"},
 | 
				
			||||||
 | 
						{.id = ALC225_FIXUP_HEADSET_JACK, .name = "alc-sense-combo"},
 | 
				
			||||||
	{}
 | 
						{}
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
#define ALC225_STANDARD_PINS \
 | 
					#define ALC225_STANDARD_PINS \
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue