- --- a/sound/pci/hda/alc882_quirks.c 2012-03-19 03:15:34.000000000 +0400
- +++ b/sound/pci/hda/alc882_quirks.c 2012-04-28 22:55:16.057877617 +0400
- @@ -3,6 +3,7 @@
- * included by patch_realtek.c
- */
- +
- /* ALC882 models */
- enum {
- ALC882_AUTO,
- @@ -12,6 +13,7 @@
- ALC885_MACMINI3,
- ALC885_IMAC91,
- ALC889A_MB31,
- + ALC888_ACER_ASPIRE_6530G,
- ALC882_MODEL_LAST,
- };
- @@ -38,7 +40,9 @@
- #define alc882_adc_nids_alt alc880_adc_nids_alt
- #define alc883_adc_nids alc882_adc_nids_alt
- +static const hda_nid_t alc883_adc_nids_rev[2] = { 0x09, 0x08 };
- static const hda_nid_t alc882_capsrc_nids_alt[2] = { 0x23, 0x22 };
- +static const hda_nid_t alc883_capsrc_nids_rev[2] = { 0x22, 0x23 };
- #define alc883_capsrc_nids alc882_capsrc_nids_alt
- /* input MUX */
- @@ -102,6 +106,68 @@
- },
- };
- +static void alc888_acer_aspire_6530g_setup(struct hda_codec *codec)
- +{
- + struct alc_spec *spec = codec->spec;
- +
- + spec->autocfg.hp_pins[0] = 0x15;
- + spec->autocfg.speaker_pins[0] = 0x14;
- + spec->autocfg.speaker_pins[1] = 0x16;
- + spec->autocfg.speaker_pins[2] = 0x17;
- + alc_simple_setup_automute(spec, ALC_AUTOMUTE_AMP);
- +}
- +
- +static const struct hda_input_mux alc888_2_capture_sources[2] = {
- + /* Front mic only available on one ADC */
- + {
- + .num_items = 4,
- + .items = {
- + { "Mic", 0x0 },
- + { "Line", 0x2 },
- + { "CD", 0x4 },
- + { "Front Mic", 0xb },
- + },
- + },
- + {
- + .num_items = 3,
- + .items = {
- + { "Mic", 0x0 },
- + { "Line", 0x2 },
- + { "CD", 0x4 },
- + },
- + }
- +};
- +
- +static const struct hda_input_mux alc888_acer_aspire_6530_sources[2] = {
- + /* Interal mic only available on one ADC */
- + {
- + .num_items = 5,
- + .items = {
- + { "Mic", 0x0 },
- + { "Line In", 0x2 },
- + { "CD", 0x4 },
- + { "Input Mix", 0xa },
- + { "Internal Mic", 0xb },
- + },
- + },
- + {
- + .num_items = 4,
- + .items = {
- + { "Mic", 0x0 },
- + { "Line In", 0x2 },
- + { "CD", 0x4 },
- + { "Input Mix", 0xa },
- + },
- + }
- +};
- +
- +/*
- + * 2ch mode
- + */
- +static const struct hda_channel_mode alc883_3ST_2ch_modes[1] = {
- + { 2, NULL }
- +};
- +
- /* Macbook Air 2,1 */
- static const struct hda_channel_mode alc885_mba21_ch_modes[1] = {
- @@ -245,6 +311,19 @@
- { } /* end */
- };
- +static const struct snd_kcontrol_new alc888_acer_aspire_6530_mixer[] = {
- + HDA_CODEC_VOLUME("Front Playback Volume", 0x0c, 0x0, HDA_OUTPUT),
- + HDA_CODEC_VOLUME("LFE Playback Volume", 0x0f, 0x0, HDA_OUTPUT),
- + HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT),
- + HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT),
- + HDA_CODEC_VOLUME("CD Playback Volume", 0x0b, 0x04, HDA_INPUT),
- + HDA_CODEC_MUTE("CD Playback Switch", 0x0b, 0x04, HDA_INPUT),
- + HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT),
- + HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT),
- + HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT),
- + { } /* end */
- +};
- +
- static const struct hda_verb alc882_base_init_verbs[] = {
- /* Front mixer: unmute input/output amp left and right (volume = 0) */
- {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)},
- @@ -547,6 +626,36 @@
- { }
- };
- +/*
- + * ALC888 Acer Aspire 6530G model
- + */
- +
- +static const struct hda_verb alc888_acer_aspire_6530g_verbs[] = {
- +/* Route to built-in subwoofer as well as speakers */
- + {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)},
- + {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)},
- + {0x0f, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)},
- + {0x0f, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)},
- +/* Bias voltage on for external mic port */
- + {0x18, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN | PIN_VREF80},
- +/* Front Mic: set to PIN_IN (empty by default) */
- + {0x12, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN},
- +/* Unselect Front Mic by default in input mixer 3 */
- + {0x22, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0xb)},
- +/* Enable unsolicited event for HP jack */
- + {0x15, AC_VERB_SET_UNSOLICITED_ENABLE, ALC_HP_EVENT | AC_USRSP_EN},
- +/* Enable speaker output */
- + {0x14, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT},
- + {0x14, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE},
- + {0x14, AC_VERB_SET_EAPD_BTLENABLE, 2},
- +/* Enable headphone output */
- + {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT | PIN_HP},
- + {0x15, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE},
- + {0x15, AC_VERB_SET_CONNECT_SEL, 0x00},
- + {0x15, AC_VERB_SET_EAPD_BTLENABLE, 2},
- + { }
- +};
- +
- /* Toggle speaker-output according to the hp-jack state */
- static void alc885_imac24_setup(struct hda_codec *codec)
- {
- @@ -745,6 +854,7 @@
- [ALC885_MBP3] = "mbp3",
- [ALC885_IMAC91] = "imac91",
- [ALC889A_MB31] = "mb31",
- + [ALC888_ACER_ASPIRE_6530G] = "acer-aspire-6530g",
- [ALC882_AUTO] = "auto",
- };
- @@ -768,6 +878,8 @@
- SND_PCI_QUIRK(0x106b, 0x4000, "MacbookPro 5,1", ALC885_MB5),
- SND_PCI_QUIRK(0x106b, 0x4600, "MacbookPro 5,2", ALC885_MB5),
- SND_PCI_QUIRK(0x106b, 0x4100, "Macmini 3,1", ALC885_MACMINI3),
- + SND_PCI_QUIRK(0x1025, 0x0166, "Acer Aspire 6530G",
- + ALC888_ACER_ASPIRE_6530G),
- {} /* terminator */
- };
- @@ -861,6 +973,25 @@
- .unsol_event = alc889A_mb31_unsol_event,
- .init_hook = alc889A_mb31_automute,
- },
- + [ALC888_ACER_ASPIRE_6530G] = {
- + .mixers = { alc888_acer_aspire_6530_mixer },
- + .init_verbs = { alc883_init_verbs, alc880_gpio1_init_verbs,
- + alc888_acer_aspire_6530g_verbs },
- + .num_dacs = ARRAY_SIZE(alc883_dac_nids),
- + .dac_nids = alc883_dac_nids,
- + .num_adc_nids = ARRAY_SIZE(alc883_adc_nids_rev),
- + .adc_nids = alc883_adc_nids_rev,
- + .capsrc_nids = alc883_capsrc_nids_rev,
- + .dig_out_nid = ALC883_DIGOUT_NID,
- + .num_channel_mode = ARRAY_SIZE(alc883_3ST_2ch_modes),
- + .channel_mode = alc883_3ST_2ch_modes,
- + .num_mux_defs =
- + ARRAY_SIZE(alc888_2_capture_sources),
- + .input_mux = alc888_acer_aspire_6530_sources,
- + .unsol_event = alc_sku_unsol_event,
- + .setup = alc888_acer_aspire_6530g_setup,
- + .init_hook = alc_hp_automute,
- + },
- };