diff options
Diffstat (limited to 'sound/pci/hda/patch_realtek.c')
| -rw-r--r-- | sound/pci/hda/patch_realtek.c | 46 | 
1 files changed, 32 insertions, 14 deletions
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c index 48d9d609f89..c0ce3b1f04b 100644 --- a/sound/pci/hda/patch_realtek.c +++ b/sound/pci/hda/patch_realtek.c @@ -5677,6 +5677,7 @@ static const struct hda_verb alc268_beep_init_verbs[] = {  enum {  	ALC268_FIXUP_INV_DMIC, +	ALC268_FIXUP_HP_EAPD,  };  static const struct alc_fixup alc268_fixups[] = { @@ -5684,10 +5685,26 @@ static const struct alc_fixup alc268_fixups[] = {  		.type = ALC_FIXUP_FUNC,  		.v.func = alc_fixup_inv_dmic_0x12,  	}, +	[ALC268_FIXUP_HP_EAPD] = { +		.type = ALC_FIXUP_VERBS, +		.v.verbs = (const struct hda_verb[]) { +			{0x15, AC_VERB_SET_EAPD_BTLENABLE, 0}, +			{} +		} +	},  };  static const struct alc_model_fixup alc268_fixup_models[] = {  	{.id = ALC268_FIXUP_INV_DMIC, .name = "inv-dmic"}, +	{.id = ALC268_FIXUP_HP_EAPD, .name = "hp-eapd"}, +	{} +}; + +static const struct snd_pci_quirk alc268_fixup_tbl[] = { +	/* below is codec SSID since multiple Toshiba laptops have the +	 * same PCI SSID 1179:ff00 +	 */ +	SND_PCI_QUIRK(0x1179, 0xff06, "Toshiba P200", ALC268_FIXUP_HP_EAPD),  	{}  }; @@ -5722,7 +5739,7 @@ static int patch_alc268(struct hda_codec *codec)  	spec = codec->spec; -	alc_pick_fixup(codec, alc268_fixup_models, NULL, alc268_fixups); +	alc_pick_fixup(codec, alc268_fixup_models, alc268_fixup_tbl, alc268_fixups);  	alc_apply_fixup(codec, ALC_FIXUP_ACT_PRE_PROBE);  	/* automatic parse from the BIOS config */ @@ -5823,7 +5840,7 @@ static int alc269_parse_auto_config(struct hda_codec *codec)  	return alc_parse_auto_config(codec, alc269_ignore, ssids);  } -static void alc269_toggle_power_output(struct hda_codec *codec, int power_up) +static void alc269vb_toggle_power_output(struct hda_codec *codec, int power_up)  {  	int val = alc_read_coef_idx(codec, 0x04);  	if (power_up) @@ -5840,10 +5857,10 @@ static void alc269_shutup(struct hda_codec *codec)  	if (spec->codec_variant != ALC269_TYPE_ALC269VB)  		return; -	if ((alc_get_coef0(codec) & 0x00ff) == 0x017) -		alc269_toggle_power_output(codec, 0); -	if ((alc_get_coef0(codec) & 0x00ff) == 0x018) { -		alc269_toggle_power_output(codec, 0); +	if (spec->codec_variant == ALC269_TYPE_ALC269VB) +		alc269vb_toggle_power_output(codec, 0); +	if (spec->codec_variant == ALC269_TYPE_ALC269VB && +			(alc_get_coef0(codec) & 0x00ff) == 0x018) {  		msleep(150);  	}  } @@ -5853,24 +5870,22 @@ static int alc269_resume(struct hda_codec *codec)  {  	struct alc_spec *spec = codec->spec; -	if (spec->codec_variant == ALC269_TYPE_ALC269VB || +	if (spec->codec_variant == ALC269_TYPE_ALC269VB) +		alc269vb_toggle_power_output(codec, 0); +	if (spec->codec_variant == ALC269_TYPE_ALC269VB &&  			(alc_get_coef0(codec) & 0x00ff) == 0x018) { -		alc269_toggle_power_output(codec, 0);  		msleep(150);  	}  	codec->patch_ops.init(codec); -	if (spec->codec_variant == ALC269_TYPE_ALC269VB || +	if (spec->codec_variant == ALC269_TYPE_ALC269VB) +		alc269vb_toggle_power_output(codec, 1); +	if (spec->codec_variant == ALC269_TYPE_ALC269VB &&  			(alc_get_coef0(codec) & 0x00ff) == 0x017) { -		alc269_toggle_power_output(codec, 1);  		msleep(200);  	} -	if (spec->codec_variant == ALC269_TYPE_ALC269VB || -			(alc_get_coef0(codec) & 0x00ff) == 0x018) -		alc269_toggle_power_output(codec, 1); -  	snd_hda_codec_resume_amp(codec);  	snd_hda_codec_resume_cache(codec);  	hda_call_check_power_status(codec, 0x01); @@ -6188,6 +6203,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {  	SND_PCI_QUIRK(0x17aa, 0x21e9, "Thinkpad Edge 15", ALC269_FIXUP_SKU_IGNORE),  	SND_PCI_QUIRK(0x17aa, 0x21f6, "Thinkpad T530", ALC269_FIXUP_LENOVO_DOCK),  	SND_PCI_QUIRK(0x17aa, 0x21fa, "Thinkpad X230", ALC269_FIXUP_LENOVO_DOCK), +	SND_PCI_QUIRK(0x17aa, 0x21f3, "Thinkpad T430", ALC269_FIXUP_LENOVO_DOCK),  	SND_PCI_QUIRK(0x17aa, 0x21fb, "Thinkpad T430s", ALC269_FIXUP_LENOVO_DOCK),  	SND_PCI_QUIRK(0x17aa, 0x2203, "Thinkpad X230 Tablet", ALC269_FIXUP_LENOVO_DOCK),  	SND_PCI_QUIRK(0x17aa, 0x3bf8, "Quanta FL1", ALC269_FIXUP_PCM_44K), @@ -7061,6 +7077,7 @@ static const struct hda_codec_preset snd_hda_preset_realtek[] = {  	  .patch = patch_alc662 },  	{ .id = 0x10ec0663, .name = "ALC663", .patch = patch_alc662 },  	{ .id = 0x10ec0665, .name = "ALC665", .patch = patch_alc662 }, +	{ .id = 0x10ec0668, .name = "ALC668", .patch = patch_alc662 },  	{ .id = 0x10ec0670, .name = "ALC670", .patch = patch_alc662 },  	{ .id = 0x10ec0680, .name = "ALC680", .patch = patch_alc680 },  	{ .id = 0x10ec0880, .name = "ALC880", .patch = patch_alc880 }, @@ -7078,6 +7095,7 @@ static const struct hda_codec_preset snd_hda_preset_realtek[] = {  	{ .id = 0x10ec0889, .name = "ALC889", .patch = patch_alc882 },  	{ .id = 0x10ec0892, .name = "ALC892", .patch = patch_alc662 },  	{ .id = 0x10ec0899, .name = "ALC898", .patch = patch_alc882 }, +	{ .id = 0x10ec0900, .name = "ALC1150", .patch = patch_alc882 },  	{} /* terminator */  };  |