Loading sound/pci/hda/patch_realtek.c +67 −22 Original line number Diff line number Diff line Loading @@ -1332,15 +1332,20 @@ static int alc_subsystem_id(struct hda_codec *codec, * when the external headphone out jack is plugged" */ if (!spec->autocfg.hp_pins[0]) { hda_nid_t nid; tmp = (ass >> 11) & 0x3; /* HP to chassis */ if (tmp == 0) spec->autocfg.hp_pins[0] = porta; nid = porta; else if (tmp == 1) spec->autocfg.hp_pins[0] = porte; nid = porte; else if (tmp == 2) spec->autocfg.hp_pins[0] = portd; nid = portd; else return 1; for (i = 0; i < spec->autocfg.line_outs; i++) if (spec->autocfg.line_out_pins[i] == nid) return 1; spec->autocfg.hp_pins[0] = nid; } alc_init_auto_hp(codec); Loading @@ -1362,7 +1367,7 @@ static void alc_ssid_check(struct hda_codec *codec, } /* * Fix-up pin default configurations * Fix-up pin default configurations and add default verbs */ struct alc_pincfg { Loading @@ -1370,9 +1375,14 @@ struct alc_pincfg { u32 val; }; static void alc_fix_pincfg(struct hda_codec *codec, struct alc_fixup { const struct alc_pincfg *pins; const struct hda_verb *verbs; }; static void alc_pick_fixup(struct hda_codec *codec, const struct snd_pci_quirk *quirk, const struct alc_pincfg **pinfix) const struct alc_fixup *fix) { const struct alc_pincfg *cfg; Loading @@ -1380,10 +1390,15 @@ static void alc_fix_pincfg(struct hda_codec *codec, if (!quirk) return; cfg = pinfix[quirk->value]; fix += quirk->value; cfg = fix->pins; if (cfg) { for (; cfg->nid; cfg++) snd_hda_codec_set_pincfg(codec, cfg->nid, cfg->val); } if (fix->verbs) add_verb(codec->spec, fix->verbs); } /* * ALC888 Loading Loading @@ -9593,11 +9608,13 @@ static struct alc_pincfg alc882_abit_aw9d_pinfix[] = { { } }; static const struct alc_pincfg *alc882_pin_fixes[] = { [PINFIX_ABIT_AW9D_MAX] = alc882_abit_aw9d_pinfix, static const struct alc_fixup alc882_fixups[] = { [PINFIX_ABIT_AW9D_MAX] = { .pins = alc882_abit_aw9d_pinfix }, }; static struct snd_pci_quirk alc882_pinfix_tbl[] = { static struct snd_pci_quirk alc882_fixup_tbl[] = { SND_PCI_QUIRK(0x147b, 0x107a, "Abit AW9D-MAX", PINFIX_ABIT_AW9D_MAX), {} }; Loading Loading @@ -9869,7 +9886,7 @@ static int patch_alc882(struct hda_codec *codec) board_config = ALC882_AUTO; } alc_fix_pincfg(codec, alc882_pinfix_tbl, alc882_pin_fixes); alc_pick_fixup(codec, alc882_fixup_tbl, alc882_fixups); if (board_config == ALC882_AUTO) { /* automatic parse from the BIOS config */ Loading Loading @@ -12842,12 +12859,15 @@ static int patch_alc268(struct hda_codec *codec) unsigned int wcap = get_wcaps(codec, 0x07); int i; spec->capsrc_nids = alc268_capsrc_nids; /* get type */ wcap = get_wcaps_type(wcap); if (spec->auto_mic || wcap != AC_WID_AUD_IN || spec->input_mux->num_items == 1) { spec->adc_nids = alc268_adc_nids_alt; spec->num_adc_nids = ARRAY_SIZE(alc268_adc_nids_alt); if (spec->auto_mic) fixup_automic_adc(codec); if (spec->auto_mic || spec->input_mux->num_items == 1) add_mixer(spec, alc268_capture_nosrc_mixer); else Loading @@ -12857,7 +12877,6 @@ static int patch_alc268(struct hda_codec *codec) spec->num_adc_nids = ARRAY_SIZE(alc268_adc_nids); add_mixer(spec, alc268_capture_mixer); } spec->capsrc_nids = alc268_capsrc_nids; /* set default input source */ for (i = 0; i < spec->num_adc_nids; i++) snd_hda_codec_write_cache(codec, alc268_capsrc_nids[i], Loading Loading @@ -14357,15 +14376,16 @@ static void alc861_auto_init_multi_out(struct hda_codec *codec) static void alc861_auto_init_hp_out(struct hda_codec *codec) { struct alc_spec *spec = codec->spec; hda_nid_t pin; pin = spec->autocfg.hp_pins[0]; if (pin) alc861_auto_set_output_and_unmute(codec, pin, PIN_HP, if (spec->autocfg.hp_outs) alc861_auto_set_output_and_unmute(codec, spec->autocfg.hp_pins[0], PIN_HP, spec->multiout.hp_nid); pin = spec->autocfg.speaker_pins[0]; if (pin) alc861_auto_set_output_and_unmute(codec, pin, PIN_OUT, if (spec->autocfg.speaker_outs) alc861_auto_set_output_and_unmute(codec, spec->autocfg.speaker_pins[0], PIN_OUT, spec->multiout.dac_nids[0]); } Loading Loading @@ -15158,7 +15178,7 @@ static struct snd_pci_quirk alc861vd_cfg_tbl[] = { SND_PCI_QUIRK(0x1019, 0xa88d, "Realtek ALC660 demo", ALC660VD_3ST), SND_PCI_QUIRK(0x103c, 0x30bf, "HP TX1000", ALC861VD_HP), SND_PCI_QUIRK(0x1043, 0x12e2, "Asus z35m", ALC660VD_3ST), SND_PCI_QUIRK(0x1043, 0x1339, "Asus G1", ALC660VD_3ST), /*SND_PCI_QUIRK(0x1043, 0x1339, "Asus G1", ALC660VD_3ST),*/ /* auto */ SND_PCI_QUIRK(0x1043, 0x1633, "Asus V1Sn", ALC660VD_ASUS_V1S), SND_PCI_QUIRK(0x1043, 0x81e7, "ASUS", ALC660VD_3ST_DIG), SND_PCI_QUIRK(0x10de, 0x03f0, "Realtek ALC660 demo", ALC660VD_3ST), Loading Loading @@ -15551,6 +15571,29 @@ static void alc861vd_auto_init(struct hda_codec *codec) alc_inithook(codec); } enum { ALC660VD_FIX_ASUS_GPIO1 }; /* reset GPIO1 */ static const struct hda_verb alc660vd_fix_asus_gpio1_verbs[] = { {0x01, AC_VERB_SET_GPIO_MASK, 0x03}, {0x01, AC_VERB_SET_GPIO_DIRECTION, 0x01}, {0x01, AC_VERB_SET_GPIO_DATA, 0x01}, { } }; static const struct alc_fixup alc861vd_fixups[] = { [ALC660VD_FIX_ASUS_GPIO1] = { .verbs = alc660vd_fix_asus_gpio1_verbs, }, }; static struct snd_pci_quirk alc861vd_fixup_tbl[] = { SND_PCI_QUIRK(0x1043, 0x1339, "ASUS A7-K", ALC660VD_FIX_ASUS_GPIO1), {} }; static int patch_alc861vd(struct hda_codec *codec) { struct alc_spec *spec; Loading @@ -15572,6 +15615,8 @@ static int patch_alc861vd(struct hda_codec *codec) board_config = ALC861VD_AUTO; } alc_pick_fixup(codec, alc861vd_fixup_tbl, alc861vd_fixups); if (board_config == ALC861VD_AUTO) { /* automatic parse from the BIOS config */ err = alc861vd_parse_auto_config(codec); Loading Loading
sound/pci/hda/patch_realtek.c +67 −22 Original line number Diff line number Diff line Loading @@ -1332,15 +1332,20 @@ static int alc_subsystem_id(struct hda_codec *codec, * when the external headphone out jack is plugged" */ if (!spec->autocfg.hp_pins[0]) { hda_nid_t nid; tmp = (ass >> 11) & 0x3; /* HP to chassis */ if (tmp == 0) spec->autocfg.hp_pins[0] = porta; nid = porta; else if (tmp == 1) spec->autocfg.hp_pins[0] = porte; nid = porte; else if (tmp == 2) spec->autocfg.hp_pins[0] = portd; nid = portd; else return 1; for (i = 0; i < spec->autocfg.line_outs; i++) if (spec->autocfg.line_out_pins[i] == nid) return 1; spec->autocfg.hp_pins[0] = nid; } alc_init_auto_hp(codec); Loading @@ -1362,7 +1367,7 @@ static void alc_ssid_check(struct hda_codec *codec, } /* * Fix-up pin default configurations * Fix-up pin default configurations and add default verbs */ struct alc_pincfg { Loading @@ -1370,9 +1375,14 @@ struct alc_pincfg { u32 val; }; static void alc_fix_pincfg(struct hda_codec *codec, struct alc_fixup { const struct alc_pincfg *pins; const struct hda_verb *verbs; }; static void alc_pick_fixup(struct hda_codec *codec, const struct snd_pci_quirk *quirk, const struct alc_pincfg **pinfix) const struct alc_fixup *fix) { const struct alc_pincfg *cfg; Loading @@ -1380,10 +1390,15 @@ static void alc_fix_pincfg(struct hda_codec *codec, if (!quirk) return; cfg = pinfix[quirk->value]; fix += quirk->value; cfg = fix->pins; if (cfg) { for (; cfg->nid; cfg++) snd_hda_codec_set_pincfg(codec, cfg->nid, cfg->val); } if (fix->verbs) add_verb(codec->spec, fix->verbs); } /* * ALC888 Loading Loading @@ -9593,11 +9608,13 @@ static struct alc_pincfg alc882_abit_aw9d_pinfix[] = { { } }; static const struct alc_pincfg *alc882_pin_fixes[] = { [PINFIX_ABIT_AW9D_MAX] = alc882_abit_aw9d_pinfix, static const struct alc_fixup alc882_fixups[] = { [PINFIX_ABIT_AW9D_MAX] = { .pins = alc882_abit_aw9d_pinfix }, }; static struct snd_pci_quirk alc882_pinfix_tbl[] = { static struct snd_pci_quirk alc882_fixup_tbl[] = { SND_PCI_QUIRK(0x147b, 0x107a, "Abit AW9D-MAX", PINFIX_ABIT_AW9D_MAX), {} }; Loading Loading @@ -9869,7 +9886,7 @@ static int patch_alc882(struct hda_codec *codec) board_config = ALC882_AUTO; } alc_fix_pincfg(codec, alc882_pinfix_tbl, alc882_pin_fixes); alc_pick_fixup(codec, alc882_fixup_tbl, alc882_fixups); if (board_config == ALC882_AUTO) { /* automatic parse from the BIOS config */ Loading Loading @@ -12842,12 +12859,15 @@ static int patch_alc268(struct hda_codec *codec) unsigned int wcap = get_wcaps(codec, 0x07); int i; spec->capsrc_nids = alc268_capsrc_nids; /* get type */ wcap = get_wcaps_type(wcap); if (spec->auto_mic || wcap != AC_WID_AUD_IN || spec->input_mux->num_items == 1) { spec->adc_nids = alc268_adc_nids_alt; spec->num_adc_nids = ARRAY_SIZE(alc268_adc_nids_alt); if (spec->auto_mic) fixup_automic_adc(codec); if (spec->auto_mic || spec->input_mux->num_items == 1) add_mixer(spec, alc268_capture_nosrc_mixer); else Loading @@ -12857,7 +12877,6 @@ static int patch_alc268(struct hda_codec *codec) spec->num_adc_nids = ARRAY_SIZE(alc268_adc_nids); add_mixer(spec, alc268_capture_mixer); } spec->capsrc_nids = alc268_capsrc_nids; /* set default input source */ for (i = 0; i < spec->num_adc_nids; i++) snd_hda_codec_write_cache(codec, alc268_capsrc_nids[i], Loading Loading @@ -14357,15 +14376,16 @@ static void alc861_auto_init_multi_out(struct hda_codec *codec) static void alc861_auto_init_hp_out(struct hda_codec *codec) { struct alc_spec *spec = codec->spec; hda_nid_t pin; pin = spec->autocfg.hp_pins[0]; if (pin) alc861_auto_set_output_and_unmute(codec, pin, PIN_HP, if (spec->autocfg.hp_outs) alc861_auto_set_output_and_unmute(codec, spec->autocfg.hp_pins[0], PIN_HP, spec->multiout.hp_nid); pin = spec->autocfg.speaker_pins[0]; if (pin) alc861_auto_set_output_and_unmute(codec, pin, PIN_OUT, if (spec->autocfg.speaker_outs) alc861_auto_set_output_and_unmute(codec, spec->autocfg.speaker_pins[0], PIN_OUT, spec->multiout.dac_nids[0]); } Loading Loading @@ -15158,7 +15178,7 @@ static struct snd_pci_quirk alc861vd_cfg_tbl[] = { SND_PCI_QUIRK(0x1019, 0xa88d, "Realtek ALC660 demo", ALC660VD_3ST), SND_PCI_QUIRK(0x103c, 0x30bf, "HP TX1000", ALC861VD_HP), SND_PCI_QUIRK(0x1043, 0x12e2, "Asus z35m", ALC660VD_3ST), SND_PCI_QUIRK(0x1043, 0x1339, "Asus G1", ALC660VD_3ST), /*SND_PCI_QUIRK(0x1043, 0x1339, "Asus G1", ALC660VD_3ST),*/ /* auto */ SND_PCI_QUIRK(0x1043, 0x1633, "Asus V1Sn", ALC660VD_ASUS_V1S), SND_PCI_QUIRK(0x1043, 0x81e7, "ASUS", ALC660VD_3ST_DIG), SND_PCI_QUIRK(0x10de, 0x03f0, "Realtek ALC660 demo", ALC660VD_3ST), Loading Loading @@ -15551,6 +15571,29 @@ static void alc861vd_auto_init(struct hda_codec *codec) alc_inithook(codec); } enum { ALC660VD_FIX_ASUS_GPIO1 }; /* reset GPIO1 */ static const struct hda_verb alc660vd_fix_asus_gpio1_verbs[] = { {0x01, AC_VERB_SET_GPIO_MASK, 0x03}, {0x01, AC_VERB_SET_GPIO_DIRECTION, 0x01}, {0x01, AC_VERB_SET_GPIO_DATA, 0x01}, { } }; static const struct alc_fixup alc861vd_fixups[] = { [ALC660VD_FIX_ASUS_GPIO1] = { .verbs = alc660vd_fix_asus_gpio1_verbs, }, }; static struct snd_pci_quirk alc861vd_fixup_tbl[] = { SND_PCI_QUIRK(0x1043, 0x1339, "ASUS A7-K", ALC660VD_FIX_ASUS_GPIO1), {} }; static int patch_alc861vd(struct hda_codec *codec) { struct alc_spec *spec; Loading @@ -15572,6 +15615,8 @@ static int patch_alc861vd(struct hda_codec *codec) board_config = ALC861VD_AUTO; } alc_pick_fixup(codec, alc861vd_fixup_tbl, alc861vd_fixups); if (board_config == ALC861VD_AUTO) { /* automatic parse from the BIOS config */ err = alc861vd_parse_auto_config(codec); Loading