aboutsummaryrefslogtreecommitdiffstats
path: root/sound/pci/hda/patch_realtek.c
diff options
context:
space:
mode:
authorKailang Yang <kailang@realtek.com>2008-08-26 07:13:00 -0400
committerJaroslav Kysela <perex@perex.cz>2008-08-29 04:05:57 -0400
commit60db6b53fb43421beb2ff3fe3e63412bf81620aa (patch)
tree8f5e4f9518f51b49d47eec610c83727b17aba6de /sound/pci/hda/patch_realtek.c
parent8ef355da64ff087b6f26c4c28a14753861e83e4b (diff)
ALSA: hda - Add support of Quanta FL1
Added the support of Quanta FL1 with ALC269 code chip. Also a bit space clean-ups. Signed-off-by: Kailang Yang <kailang@realtek.com> Signed-off-by: Takashi Iwai <tiwai@suse.de> Signed-off-by: Jaroslav Kysela <perex@perex.cz>
Diffstat (limited to 'sound/pci/hda/patch_realtek.c')
-rw-r--r--sound/pci/hda/patch_realtek.c250
1 files changed, 175 insertions, 75 deletions
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
index 99c1de639e97..538d85440a30 100644
--- a/sound/pci/hda/patch_realtek.c
+++ b/sound/pci/hda/patch_realtek.c
@@ -126,6 +126,7 @@ enum {
126/* ALC269 models */ 126/* ALC269 models */
127enum { 127enum {
128 ALC269_BASIC, 128 ALC269_BASIC,
129 ALC269_QUANTA_FL1,
129 ALC269_ASUS_EEEPC_P703, 130 ALC269_ASUS_EEEPC_P703,
130 ALC269_ASUS_EEEPC_P901, 131 ALC269_ASUS_EEEPC_P901,
131 ALC269_AUTO, 132 ALC269_AUTO,
@@ -11378,6 +11379,28 @@ static struct snd_kcontrol_new alc269_base_mixer[] = {
11378 { } /* end */ 11379 { } /* end */
11379}; 11380};
11380 11381
11382static struct snd_kcontrol_new alc269_quanta_fl1_mixer[] = {
11383 /* output mixer control */
11384 HDA_BIND_VOL("Master Playback Volume", &alc268_acer_bind_master_vol),
11385 {
11386 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
11387 .name = "Master Playback Switch",
11388 .info = snd_hda_mixer_amp_switch_info,
11389 .get = snd_hda_mixer_amp_switch_get,
11390 .put = alc268_acer_master_sw_put,
11391 .private_value = HDA_COMPOSE_AMP_VAL(0x14, 3, 0, HDA_OUTPUT),
11392 },
11393 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT),
11394 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT),
11395 HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT),
11396 HDA_CODEC_VOLUME("Internal Mic Playback Volume", 0x0b, 0x01, HDA_INPUT),
11397 HDA_CODEC_MUTE("Internal Mic Playback Switch", 0x0b, 0x01, HDA_INPUT),
11398 HDA_CODEC_VOLUME("Internal Mic Boost", 0x19, 0, HDA_INPUT),
11399 HDA_CODEC_VOLUME("PC Speaker Playback Volume", 0x0b, 0x04, HDA_INPUT),
11400 HDA_CODEC_MUTE("PC Speaker Playback Switch", 0x0b, 0x04, HDA_INPUT),
11401 { }
11402};
11403
11381/* bind volumes of both NID 0x0c and 0x0d */ 11404/* bind volumes of both NID 0x0c and 0x0d */
11382static struct hda_bind_ctls alc269_epc_bind_vol = { 11405static struct hda_bind_ctls alc269_epc_bind_vol = {
11383 .ops = &snd_hda_bind_vol, 11406 .ops = &snd_hda_bind_vol,
@@ -11428,75 +11451,65 @@ static struct snd_kcontrol_new alc269_beep_mixer[] = {
11428 { } /* end */ 11451 { } /* end */
11429}; 11452};
11430 11453
11431/* 11454static struct hda_verb alc269_quanta_fl1_verbs[] = {
11432 * generic initialization of ADC, input mixers and output mixers 11455 {0x15, AC_VERB_SET_CONNECT_SEL, 0x01},
11433 */ 11456 {0x12, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN},
11434static struct hda_verb alc269_init_verbs[] = { 11457 {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP},
11435 /* 11458 {0x15, AC_VERB_SET_UNSOLICITED_ENABLE, ALC880_HP_EVENT | AC_USRSP_EN},
11436 * Unmute ADC0 and set the default input to mic-in 11459 {0x18, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN | ALC880_MIC_EVENT},
11437 */ 11460 {0x1d, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN},
11438 {0x08, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)}, 11461 { }
11462};
11439 11463
11440 /* Mute input amps (PCBeep, Line In, Mic 1 & Mic 2) of the 11464/* toggle speaker-output according to the hp-jack state */
11441 * analog-loopback mixer widget 11465static void alc269_quanta_fl1_speaker_automute(struct hda_codec *codec)
11442 * Note: PASD motherboards uses the Line In 2 as the input for 11466{
11443 * front panel mic (mic 2) 11467 unsigned int present;
11444 */ 11468 unsigned char bits;
11445 /* Amp Indices: Mic1 = 0, Mic2 = 1, Line1 = 2, Line2 = 3, CD = 4 */
11446 {0x0b, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)},
11447 {0x0b, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(1)},
11448 {0x0b, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(2)},
11449 {0x0b, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(3)},
11450 {0x0b, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(4)},
11451 11469
11452 /* 11470 present = snd_hda_codec_read(codec, 0x15, 0,
11453 * Set up output mixers (0x0c - 0x0e) 11471 AC_VERB_GET_PIN_SENSE, 0) & 0x80000000;
11454 */ 11472 bits = present ? AMP_IN_MUTE(0) : 0;
11455 /* set vol=0 to output mixers */ 11473 snd_hda_codec_amp_stereo(codec, 0x0c, HDA_INPUT, 0,
11456 {0x02, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_ZERO}, 11474 AMP_IN_MUTE(0), bits);
11457 {0x03, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_ZERO}, 11475 snd_hda_codec_amp_stereo(codec, 0x0c, HDA_INPUT, 1,
11476 AMP_IN_MUTE(0), bits);
11458 11477
11459 /* set up input amps for analog loopback */ 11478 snd_hda_codec_write(codec, 0x20, 0,
11460 /* Amp Indices: DAC = 0, mixer = 1 */ 11479 AC_VERB_SET_COEF_INDEX, 0x0c);
11461 {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)}, 11480 snd_hda_codec_write(codec, 0x20, 0,
11462 {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)}, 11481 AC_VERB_SET_PROC_COEF, 0x680);
11463 {0x0d, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)},
11464 {0x0d, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)},
11465 {0x0e, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)},
11466 {0x0e, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)},
11467 11482
11468 {0x14, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT}, 11483 snd_hda_codec_write(codec, 0x20, 0,
11469 {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP}, 11484 AC_VERB_SET_COEF_INDEX, 0x0c);
11470 {0x16, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT}, 11485 snd_hda_codec_write(codec, 0x20, 0,
11471 {0x18, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREF80}, 11486 AC_VERB_SET_PROC_COEF, 0x480);
11472 {0x19, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREF80}, 11487}
11473 {0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN},
11474 {0x1b, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN},
11475 11488
11476 {0x14, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE}, 11489static void alc269_quanta_fl1_mic_automute(struct hda_codec *codec)
11477 {0x15, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE}, 11490{
11478 {0x16, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE}, 11491 unsigned int present;
11479 {0x18, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE},
11480 {0x19, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE},
11481 {0x1a, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE},
11482 {0x1b, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE},
11483 11492
11484 {0x14, AC_VERB_SET_CONNECT_SEL, 0x00}, 11493 present = snd_hda_codec_read(codec, 0x18, 0,
11485 {0x15, AC_VERB_SET_CONNECT_SEL, 0x00}, 11494 AC_VERB_GET_PIN_SENSE, 0) & 0x80000000;
11495 snd_hda_codec_write(codec, 0x23, 0,
11496 AC_VERB_SET_CONNECT_SEL, present ? 0x0 : 0x1);
11497}
11486 11498
11487 /* FIXME: use matrix-type input source selection */ 11499static void alc269_quanta_fl1_unsol_event(struct hda_codec *codec,
11488 /* Mixer elements: 0x18, 19, 1a, 1b, 1d, 0b */ 11500 unsigned int res)
11489 /* Input mixer1: unmute Mic, F-Mic, Line, CD inputs */ 11501{
11490 {0x24, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)}, 11502 if ((res >> 26) == ALC880_HP_EVENT)
11491 {0x24, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(1)}, 11503 alc269_quanta_fl1_speaker_automute(codec);
11492 {0x24, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(2)}, 11504 if ((res >> 26) == ALC880_MIC_EVENT)
11493 {0x24, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(3)}, 11505 alc269_quanta_fl1_mic_automute(codec);
11506}
11494 11507
11495 /* set EAPD */ 11508static void alc269_quanta_fl1_init_hook(struct hda_codec *codec)
11496 {0x14, AC_VERB_SET_EAPD_BTLENABLE, 2}, 11509{
11497 {0x15, AC_VERB_SET_EAPD_BTLENABLE, 2}, 11510 alc269_quanta_fl1_speaker_automute(codec);
11498 { } 11511 alc269_quanta_fl1_mic_automute(codec);
11499}; 11512}
11500 11513
11501static struct hda_verb alc269_eeepc_dmic_init_verbs[] = { 11514static struct hda_verb alc269_eeepc_dmic_init_verbs[] = {
11502 {0x15, AC_VERB_SET_CONNECT_SEL, 0x01}, 11515 {0x15, AC_VERB_SET_CONNECT_SEL, 0x01},
@@ -11523,42 +11536,42 @@ static struct hda_verb alc269_eeepc_amic_init_verbs[] = {
11523static void alc269_speaker_automute(struct hda_codec *codec) 11536static void alc269_speaker_automute(struct hda_codec *codec)
11524{ 11537{
11525 unsigned int present; 11538 unsigned int present;
11526 unsigned int bits; 11539 unsigned char bits;
11527 11540
11528 present = snd_hda_codec_read(codec, 0x15, 0, 11541 present = snd_hda_codec_read(codec, 0x15, 0,
11529 AC_VERB_GET_PIN_SENSE, 0) & 0x80000000; 11542 AC_VERB_GET_PIN_SENSE, 0) & 0x80000000;
11530 bits = present ? AMP_IN_MUTE(0) : 0; 11543 bits = present ? AMP_IN_MUTE(0) : 0;
11531 snd_hda_codec_amp_stereo(codec, 0x0c, HDA_INPUT, 0, 11544 snd_hda_codec_amp_stereo(codec, 0x0c, HDA_INPUT, 0,
11532 AMP_IN_MUTE(0), bits); 11545 AMP_IN_MUTE(0), bits);
11533 snd_hda_codec_amp_stereo(codec, 0x0c, HDA_INPUT, 1, 11546 snd_hda_codec_amp_stereo(codec, 0x0c, HDA_INPUT, 1,
11534 AMP_IN_MUTE(0), bits); 11547 AMP_IN_MUTE(0), bits);
11535} 11548}
11536 11549
11537static void alc269_eeepc_dmic_automute(struct hda_codec *codec) 11550static void alc269_eeepc_dmic_automute(struct hda_codec *codec)
11538{ 11551{
11539 unsigned int present; 11552 unsigned int present;
11540 11553
11541 present = snd_hda_codec_read(codec, 0x18, 0, AC_VERB_GET_PIN_SENSE, 0) 11554 present = snd_hda_codec_read(codec, 0x18, 0,
11542 & AC_PINSENSE_PRESENCE; 11555 AC_VERB_GET_PIN_SENSE, 0) & 0x80000000;
11543 snd_hda_codec_write(codec, 0x23, 0, AC_VERB_SET_CONNECT_SEL, 11556 snd_hda_codec_write(codec, 0x23, 0,
11544 present ? 0 : 5); 11557 AC_VERB_SET_CONNECT_SEL, (present ? 0 : 5));
11545} 11558}
11546 11559
11547static void alc269_eeepc_amic_automute(struct hda_codec *codec) 11560static void alc269_eeepc_amic_automute(struct hda_codec *codec)
11548{ 11561{
11549 unsigned int present; 11562 unsigned int present;
11550 11563
11551 present = snd_hda_codec_read(codec, 0x18, 0, AC_VERB_GET_PIN_SENSE, 0) 11564 present = snd_hda_codec_read(codec, 0x18, 0,
11552 & AC_PINSENSE_PRESENCE; 11565 AC_VERB_GET_PIN_SENSE, 0) & 0x80000000;
11553 snd_hda_codec_write(codec, 0x24, 0, AC_VERB_SET_AMP_GAIN_MUTE, 11566 snd_hda_codec_write(codec, 0x24, 0, AC_VERB_SET_AMP_GAIN_MUTE,
11554 present ? AMP_IN_UNMUTE(0) : AMP_IN_MUTE(0)); 11567 0x7000 | (0x00 << 8) | (present ? 0 : 0x80));
11555 snd_hda_codec_write(codec, 0x24, 0, AC_VERB_SET_AMP_GAIN_MUTE, 11568 snd_hda_codec_write(codec, 0x24, 0, AC_VERB_SET_AMP_GAIN_MUTE,
11556 present ? AMP_IN_MUTE(1) : AMP_IN_UNMUTE(1)); 11569 0x7000 | (0x01 << 8) | (present ? 0x80 : 0));
11557} 11570}
11558 11571
11559/* unsolicited event for HP jack sensing */ 11572/* unsolicited event for HP jack sensing */
11560static void alc269_eeepc_dmic_unsol_event(struct hda_codec *codec, 11573static void alc269_eeepc_dmic_unsol_event(struct hda_codec *codec,
11561 unsigned int res) 11574 unsigned int res)
11562{ 11575{
11563 if ((res >> 26) == ALC880_HP_EVENT) 11576 if ((res >> 26) == ALC880_HP_EVENT)
11564 alc269_speaker_automute(codec); 11577 alc269_speaker_automute(codec);
@@ -11590,6 +11603,76 @@ static void alc269_eeepc_amic_inithook(struct hda_codec *codec)
11590 alc269_eeepc_amic_automute(codec); 11603 alc269_eeepc_amic_automute(codec);
11591} 11604}
11592 11605
11606/*
11607 * generic initialization of ADC, input mixers and output mixers
11608 */
11609static struct hda_verb alc269_init_verbs[] = {
11610 /*
11611 * Unmute ADC0 and set the default input to mic-in
11612 */
11613 {0x07, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)},
11614
11615 /* Mute input amps (PCBeep, Line In, Mic 1 & Mic 2) of the
11616 * analog-loopback mixer widget
11617 * Note: PASD motherboards uses the Line In 2 as the input for
11618 * front panel mic (mic 2)
11619 */
11620 /* Amp Indices: Mic1 = 0, Mic2 = 1, Line1 = 2, Line2 = 3, CD = 4 */
11621 {0x0b, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)},
11622 {0x0b, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(1)},
11623 {0x0b, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(2)},
11624 {0x0b, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(3)},
11625 {0x0b, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(4)},
11626
11627 /*
11628 * Set up output mixers (0x0c - 0x0e)
11629 */
11630 /* set vol=0 to output mixers */
11631 {0x02, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_ZERO},
11632 {0x03, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_ZERO},
11633
11634 /* set up input amps for analog loopback */
11635 /* Amp Indices: DAC = 0, mixer = 1 */
11636 {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)},
11637 {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)},
11638 {0x0d, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)},
11639 {0x0d, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)},
11640 {0x0e, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)},
11641 {0x0e, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)},
11642
11643 {0x14, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT},
11644 {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP},
11645 {0x16, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT},
11646 {0x18, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREF80},
11647 {0x19, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREF80},
11648 {0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN},
11649 {0x1b, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN},
11650
11651 {0x14, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE},
11652 {0x15, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE},
11653 {0x16, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE},
11654 {0x18, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE},
11655 {0x19, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE},
11656 {0x1a, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE},
11657 {0x1b, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE},
11658
11659 {0x14, AC_VERB_SET_CONNECT_SEL, 0x00},
11660 {0x15, AC_VERB_SET_CONNECT_SEL, 0x00},
11661
11662 /* FIXME: use matrix-type input source selection */
11663 /* Mixer elements: 0x18, 19, 1a, 1b, 1d, 0b */
11664 /* Input mixer1: unmute Mic, F-Mic, Line, CD inputs */
11665 {0x24, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)},
11666 {0x24, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)},
11667 {0x24, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(2)},
11668 {0x24, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(3)},
11669
11670 /* set EAPD */
11671 {0x14, AC_VERB_SET_EAPD_BTLENABLE, 2},
11672 {0x15, AC_VERB_SET_EAPD_BTLENABLE, 2},
11673 { }
11674};
11675
11593/* add playback controls from the parsed DAC table */ 11676/* add playback controls from the parsed DAC table */
11594static int alc269_auto_create_multi_out_ctls(struct alc_spec *spec, 11677static int alc269_auto_create_multi_out_ctls(struct alc_spec *spec,
11595 const struct auto_pin_cfg *cfg) 11678 const struct auto_pin_cfg *cfg)
@@ -11758,14 +11841,19 @@ static void alc269_auto_init(struct hda_codec *codec)
11758 * configuration and preset 11841 * configuration and preset
11759 */ 11842 */
11760static const char *alc269_models[ALC269_MODEL_LAST] = { 11843static const char *alc269_models[ALC269_MODEL_LAST] = {
11761 [ALC269_BASIC] = "basic", 11844 [ALC269_BASIC] = "basic",
11845 [ALC269_QUANTA_FL1] = "Quanta",
11846 [ALC269_ASUS_EEEPC_P901] = "Asus_Epc_Dmic"
11762}; 11847};
11763 11848
11764static struct snd_pci_quirk alc269_cfg_tbl[] = { 11849static struct snd_pci_quirk alc269_cfg_tbl[] = {
11850 SND_PCI_QUIRK(0x17aa, 0x3bf8, "Quanta FL1", ALC269_QUANTA_FL1),
11765 SND_PCI_QUIRK(0x1043, 0x8330, "ASUS Eeepc P703 P900A", 11851 SND_PCI_QUIRK(0x1043, 0x8330, "ASUS Eeepc P703 P900A",
11766 ALC269_ASUS_EEEPC_P703), 11852 ALC269_ASUS_EEEPC_P703),
11767 SND_PCI_QUIRK(0x1043, 0x831a, "ASUS Eeepc P901", 11853 SND_PCI_QUIRK(0x1043, 0x831a, "ASUS Eeepc P901",
11768 ALC269_ASUS_EEEPC_P901), 11854 ALC269_ASUS_EEEPC_P901),
11855 SND_PCI_QUIRK(0x1043, 0x834a, "ASUS Eeepc S101",
11856 ALC269_ASUS_EEEPC_P901),
11769 {} 11857 {}
11770}; 11858};
11771 11859
@@ -11780,6 +11868,18 @@ static struct alc_config_preset alc269_presets[] = {
11780 .channel_mode = alc269_modes, 11868 .channel_mode = alc269_modes,
11781 .input_mux = &alc269_capture_source, 11869 .input_mux = &alc269_capture_source,
11782 }, 11870 },
11871 [ALC269_QUANTA_FL1] = {
11872 .mixers = { alc269_quanta_fl1_mixer },
11873 .init_verbs = { alc269_init_verbs, alc269_quanta_fl1_verbs },
11874 .num_dacs = ARRAY_SIZE(alc269_dac_nids),
11875 .dac_nids = alc269_dac_nids,
11876 .hp_nid = 0x03,
11877 .num_channel_mode = ARRAY_SIZE(alc269_modes),
11878 .channel_mode = alc269_modes,
11879 .input_mux = &alc269_capture_source,
11880 .unsol_event = alc269_quanta_fl1_unsol_event,
11881 .init_hook = alc269_quanta_fl1_init_hook,
11882 },
11783 [ALC269_ASUS_EEEPC_P703] = { 11883 [ALC269_ASUS_EEEPC_P703] = {
11784 .mixers = { alc269_eeepc_mixer, alc269_epc_capture_mixer }, 11884 .mixers = { alc269_eeepc_mixer, alc269_epc_capture_mixer },
11785 .init_verbs = { alc269_init_verbs, 11885 .init_verbs = { alc269_init_verbs,