ALSA: hda - Add support of ALC665
- Add support for ALC665 - Add more ASUS model - Modify common patch for ALC272 ALC273 ALC661 ALC662 ALC663 ALC665 Signed-off-by: Kailang Yang <kailang@realtek.com> Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
Родитель
84898e87cc
Коммит
cec27c891b
|
@ -16597,13 +16597,6 @@ static struct hda_verb alc662_init_verbs[] = {
|
|||
/* ADC: mute amp left and right */
|
||||
{0x09, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)},
|
||||
{0x09, AC_VERB_SET_CONNECT_SEL, 0x00},
|
||||
/* Front mixer: unmute input/output amp left and right (volume = 0) */
|
||||
|
||||
{0x0b, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)},
|
||||
{0x0b, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(1)},
|
||||
{0x0b, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(2)},
|
||||
{0x0b, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(3)},
|
||||
{0x0b, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(4)},
|
||||
|
||||
{0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)},
|
||||
{0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)},
|
||||
|
@ -16653,6 +16646,28 @@ static struct hda_verb alc662_init_verbs[] = {
|
|||
{ }
|
||||
};
|
||||
|
||||
static struct hda_verb alc663_init_verbs[] = {
|
||||
{0x17, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT},
|
||||
{0x17, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE},
|
||||
{0x21, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT},
|
||||
{0x21, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE},
|
||||
{0x0f, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)},
|
||||
{0x0f, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)},
|
||||
{ }
|
||||
};
|
||||
|
||||
static struct hda_verb alc272_init_verbs[] = {
|
||||
{0x16, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN},
|
||||
{0x16, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE},
|
||||
{0x17, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT},
|
||||
{0x17, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE},
|
||||
{0x21, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT},
|
||||
{0x21, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE},
|
||||
{0x0f, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)},
|
||||
{0x0f, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)},
|
||||
{ }
|
||||
};
|
||||
|
||||
static struct hda_verb alc662_sue_init_verbs[] = {
|
||||
{0x14, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN|ALC880_FRONT_EVENT},
|
||||
{0x1b, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN|ALC880_HP_EVENT},
|
||||
|
@ -16672,61 +16687,6 @@ static struct hda_verb alc662_eeepc_ep20_sue_init_verbs[] = {
|
|||
{}
|
||||
};
|
||||
|
||||
/*
|
||||
* generic initialization of ADC, input mixers and output mixers
|
||||
*/
|
||||
static struct hda_verb alc662_auto_init_verbs[] = {
|
||||
/*
|
||||
* Unmute ADC and set the default input to mic-in
|
||||
*/
|
||||
{0x09, AC_VERB_SET_CONNECT_SEL, 0x00},
|
||||
{0x09, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)},
|
||||
|
||||
/* Unmute input amps (CD, Line In, Mic 1 & Mic 2) of the analog-loopback
|
||||
* mixer widget
|
||||
* Note: PASD motherboards uses the Line In 2 as the input for front
|
||||
* panel mic (mic 2)
|
||||
*/
|
||||
/* Amp Indices: Mic1 = 0, Mic2 = 1, Line1 = 2, Line2 = 3, CD = 4 */
|
||||
{0x0b, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)},
|
||||
{0x0b, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(1)},
|
||||
{0x0b, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(2)},
|
||||
{0x0b, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(3)},
|
||||
{0x0b, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(4)},
|
||||
|
||||
/*
|
||||
* Set up output mixers (0x0c - 0x0f)
|
||||
*/
|
||||
/* set vol=0 to output mixers */
|
||||
{0x02, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_ZERO},
|
||||
{0x03, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_ZERO},
|
||||
{0x04, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_ZERO},
|
||||
|
||||
/* set up input amps for analog loopback */
|
||||
/* Amp Indices: DAC = 0, mixer = 1 */
|
||||
{0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)},
|
||||
{0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)},
|
||||
{0x0d, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)},
|
||||
{0x0d, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)},
|
||||
{0x0e, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)},
|
||||
{0x0e, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)},
|
||||
|
||||
|
||||
/* FIXME: use matrix-type input source selection */
|
||||
/* Mixer elements: 0x18, 19, 1a, 1b, 1c, 1d, 14, 15, 16, 17, 0b */
|
||||
/* Input mixer */
|
||||
{0x22, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)},
|
||||
{0x23, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)},
|
||||
{ }
|
||||
};
|
||||
|
||||
/* additional verbs for ALC663 */
|
||||
static struct hda_verb alc663_auto_init_verbs[] = {
|
||||
{0x0f, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)},
|
||||
{0x0f, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)},
|
||||
{ }
|
||||
};
|
||||
|
||||
static struct hda_verb alc663_m51va_init_verbs[] = {
|
||||
{0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN},
|
||||
{0x16, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN},
|
||||
|
@ -17477,6 +17437,7 @@ static struct snd_pci_quirk alc662_cfg_tbl[] = {
|
|||
SND_PCI_QUIRK(0x1028, 0x02f4, "DELL ZM1", ALC272_DELL_ZM1),
|
||||
SND_PCI_QUIRK(0x1043, 0x1000, "ASUS N50Vm", ALC663_ASUS_MODE1),
|
||||
SND_PCI_QUIRK(0x1043, 0x1092, "ASUS NB", ALC663_ASUS_MODE3),
|
||||
SND_PCI_QUIRK(0x1043, 0x1173, "ASUS K73Jn", ALC663_ASUS_MODE1),
|
||||
SND_PCI_QUIRK(0x1043, 0x11c3, "ASUS M70V", ALC663_ASUS_MODE3),
|
||||
SND_PCI_QUIRK(0x1043, 0x11d3, "ASUS NB", ALC663_ASUS_MODE1),
|
||||
SND_PCI_QUIRK(0x1043, 0x11f3, "ASUS NB", ALC662_ASUS_MODE2),
|
||||
|
@ -17512,6 +17473,7 @@ static struct snd_pci_quirk alc662_cfg_tbl[] = {
|
|||
SND_PCI_QUIRK(0x1043, 0x1893, "ASUS M50Vm", ALC663_ASUS_MODE3),
|
||||
SND_PCI_QUIRK(0x1043, 0x1894, "ASUS X55", ALC663_ASUS_MODE3),
|
||||
SND_PCI_QUIRK(0x1043, 0x18b3, "ASUS N80Vc", ALC663_ASUS_MODE1),
|
||||
SND_PCI_QUIRK(0x1043, 0x18c3, "ASUS VX5", ALC663_ASUS_MODE1),
|
||||
SND_PCI_QUIRK(0x1043, 0x18d3, "ASUS N81Te", ALC663_ASUS_MODE1),
|
||||
SND_PCI_QUIRK(0x1043, 0x18f3, "ASUS N505Tp", ALC663_ASUS_MODE1),
|
||||
SND_PCI_QUIRK(0x1043, 0x1903, "ASUS F5GL", ALC663_ASUS_MODE1),
|
||||
|
@ -18157,9 +18119,13 @@ static int alc662_parse_auto_config(struct hda_codec *codec)
|
|||
spec->num_mux_defs = 1;
|
||||
spec->input_mux = &spec->private_imux[0];
|
||||
|
||||
add_verb(spec, alc662_auto_init_verbs);
|
||||
if (codec->vendor_id == 0x10ec0663)
|
||||
add_verb(spec, alc663_auto_init_verbs);
|
||||
add_verb(spec, alc662_init_verbs);
|
||||
if (codec->vendor_id == 0x10ec0272 || codec->vendor_id == 0x10ec0663 ||
|
||||
codec->vendor_id == 0x10ec0665)
|
||||
add_verb(spec, alc663_init_verbs);
|
||||
|
||||
if (codec->vendor_id == 0x10ec0272)
|
||||
add_verb(spec, alc272_init_verbs);
|
||||
|
||||
err = alc_auto_add_mic_boost(codec);
|
||||
if (err < 0)
|
||||
|
@ -18251,11 +18217,20 @@ static int patch_alc662(struct hda_codec *codec)
|
|||
|
||||
if (!spec->cap_mixer)
|
||||
set_capture_mixer(codec);
|
||||
if (codec->vendor_id == 0x10ec0662)
|
||||
set_beep_amp(spec, 0x0b, 0x05, HDA_INPUT);
|
||||
else
|
||||
set_beep_amp(spec, 0x0b, 0x04, HDA_INPUT);
|
||||
|
||||
switch (codec->vendor_id) {
|
||||
case 0x10ec0662:
|
||||
set_beep_amp(spec, 0x0b, 0x05, HDA_INPUT);
|
||||
break;
|
||||
case 0x10ec0272:
|
||||
case 0x10ec0663:
|
||||
case 0x10ec0665:
|
||||
set_beep_amp(spec, 0x0b, 0x04, HDA_INPUT);
|
||||
break;
|
||||
case 0x10ec0273:
|
||||
set_beep_amp(spec, 0x0b, 0x03, HDA_INPUT);
|
||||
break;
|
||||
}
|
||||
spec->vmaster_nid = 0x02;
|
||||
|
||||
codec->patch_ops = alc_patch_ops;
|
||||
|
@ -18305,6 +18280,7 @@ static struct hda_codec_preset snd_hda_preset_realtek[] = {
|
|||
{ .id = 0x10ec0662, .rev = 0x100101, .name = "ALC662 rev1",
|
||||
.patch = patch_alc662 },
|
||||
{ .id = 0x10ec0663, .name = "ALC663", .patch = patch_alc662 },
|
||||
{ .id = 0x10ec0665, .name = "ALC665", .patch = patch_alc662 },
|
||||
{ .id = 0x10ec0880, .name = "ALC880", .patch = patch_alc880 },
|
||||
{ .id = 0x10ec0882, .name = "ALC882", .patch = patch_alc882 },
|
||||
{ .id = 0x10ec0883, .name = "ALC883", .patch = patch_alc882 },
|
||||
|
|
Загрузка…
Ссылка в новой задаче