diff options
Diffstat (limited to 'sound/pci/hda/patch_realtek.c')
| -rw-r--r-- | sound/pci/hda/patch_realtek.c | 52 | 
1 files changed, 37 insertions, 15 deletions
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c index 8253b4eeb6a..ad68d223f8a 100644 --- a/sound/pci/hda/patch_realtek.c +++ b/sound/pci/hda/patch_realtek.c @@ -2598,8 +2598,10 @@ static const char *alc_get_line_out_pfx(struct alc_spec *spec, int ch,  			return "PCM";  		break;  	} -	if (snd_BUG_ON(ch >= ARRAY_SIZE(channel_name))) +	if (ch >= ARRAY_SIZE(channel_name)) { +		snd_BUG();  		return "PCM"; +	}  	return channel_name[ch];  } @@ -5405,6 +5407,7 @@ static const struct snd_pci_quirk alc882_fixup_tbl[] = {  	SND_PCI_QUIRK(0x106b, 0x4000, "MacbookPro 5,1", ALC889_FIXUP_IMAC91_VREF),  	SND_PCI_QUIRK(0x106b, 0x4100, "Macmini 3,1", ALC889_FIXUP_IMAC91_VREF),  	SND_PCI_QUIRK(0x106b, 0x4200, "Mac Pro 5,1", ALC885_FIXUP_MACPRO_GPIO), +	SND_PCI_QUIRK(0x106b, 0x4300, "iMac 9,1", ALC889_FIXUP_IMAC91_VREF),  	SND_PCI_QUIRK(0x106b, 0x4600, "MacbookPro 5,2", ALC889_FIXUP_IMAC91_VREF),  	SND_PCI_QUIRK(0x106b, 0x4900, "iMac 9,1 Aluminum", ALC889_FIXUP_IMAC91_VREF),  	SND_PCI_QUIRK(0x106b, 0x4a00, "Macbook 5,2", ALC889_FIXUP_IMAC91_VREF), @@ -5675,6 +5678,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[] = { @@ -5682,10 +5686,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),  	{}  }; @@ -5720,7 +5740,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 */ @@ -5821,7 +5841,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) @@ -5838,10 +5858,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);  	}  } @@ -5851,24 +5871,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); @@ -6186,6 +6204,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), @@ -7046,6 +7065,7 @@ static const struct hda_codec_preset snd_hda_preset_realtek[] = {  	{ .id = 0x10ec0282, .name = "ALC282", .patch = patch_alc269 },  	{ .id = 0x10ec0283, .name = "ALC283", .patch = patch_alc269 },  	{ .id = 0x10ec0290, .name = "ALC290", .patch = patch_alc269 }, +	{ .id = 0x10ec0292, .name = "ALC292", .patch = patch_alc269 },  	{ .id = 0x10ec0861, .rev = 0x100340, .name = "ALC660",  	  .patch = patch_alc861 },  	{ .id = 0x10ec0660, .name = "ALC660-VD", .patch = patch_alc861vd }, @@ -7059,6 +7079,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 }, @@ -7076,6 +7097,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 */  };  |