Loading sound/pci/hda/patch_realtek.c +139 −150 Original line number Diff line number Diff line Loading @@ -2479,6 +2479,49 @@ static int alc_codec_rename(struct hda_codec *codec, const char *name) return 0; } /* * Rename codecs appropriately from COEF value */ struct alc_codec_rename_table { unsigned int vendor_id; unsigned short coef_mask; unsigned short coef_bits; const char *name; }; static struct alc_codec_rename_table rename_tbl[] = { { 0x10ec0269, 0xfff0, 0x3010, "ALC277" }, { 0x10ec0269, 0xf0f0, 0x2010, "ALC259" }, { 0x10ec0269, 0xf0f0, 0x3010, "ALC258" }, { 0x10ec0269, 0x00f0, 0x0010, "ALC269VB" }, { 0x10ec0269, 0xffff, 0xa023, "ALC259" }, { 0x10ec0269, 0xffff, 0x6023, "ALC281X" }, { 0x10ec0269, 0x00f0, 0x0020, "ALC269VC" }, { 0x10ec0887, 0x00f0, 0x0030, "ALC887-VD" }, { 0x10ec0888, 0x00f0, 0x0030, "ALC888-VD" }, { 0x10ec0888, 0xf0f0, 0x3020, "ALC886" }, { 0x10ec0899, 0x2000, 0x2000, "ALC899" }, { 0x10ec0892, 0xffff, 0x8020, "ALC661" }, { 0x10ec0892, 0xffff, 0x8011, "ALC661" }, { 0x10ec0892, 0xffff, 0x4011, "ALC656" }, { } /* terminator */ }; static int alc_codec_rename_from_preset(struct hda_codec *codec) { const struct alc_codec_rename_table *p; unsigned short coef; for (p = rename_tbl; p->vendor_id; p++) { if (p->vendor_id != codec->vendor_id) continue; coef = alc_read_coef_idx(codec, 0); if ((coef & p->coef_mask) == p->coef_bits) return alc_codec_rename(codec, p->name); } return 0; } /* * Automatic parse of I/O pins from the BIOS configuration */ Loading Loading @@ -3853,10 +3896,8 @@ static int patch_alc880(struct hda_codec *codec) if (board_config == ALC_MODEL_AUTO) { /* automatic parse from the BIOS config */ err = alc880_parse_auto_config(codec); if (err < 0) { alc_free(codec); return err; } if (err < 0) goto error; #ifdef CONFIG_SND_HDA_ENABLE_REALTEK_QUIRKS else if (!err) { printk(KERN_INFO Loading @@ -3881,10 +3922,8 @@ static int patch_alc880(struct hda_codec *codec) if (!spec->no_analog) { err = snd_hda_attach_beep_device(codec, 0x1); if (err < 0) { alc_free(codec); return err; } if (err < 0) goto error; set_beep_amp(spec, 0x0b, 0x05, HDA_INPUT); } Loading @@ -3899,6 +3938,10 @@ static int patch_alc880(struct hda_codec *codec) #endif return 0; error: alc_free(codec); return err; } Loading Loading @@ -3980,10 +4023,8 @@ static int patch_alc260(struct hda_codec *codec) if (board_config == ALC_MODEL_AUTO) { /* automatic parse from the BIOS config */ err = alc260_parse_auto_config(codec); if (err < 0) { alc_free(codec); return err; } if (err < 0) goto error; #ifdef CONFIG_SND_HDA_ENABLE_REALTEK_QUIRKS else if (!err) { printk(KERN_INFO Loading @@ -4008,10 +4049,8 @@ static int patch_alc260(struct hda_codec *codec) if (!spec->no_analog) { err = snd_hda_attach_beep_device(codec, 0x1); if (err < 0) { alc_free(codec); return err; } if (err < 0) goto error; set_beep_amp(spec, 0x07, 0x05, HDA_INPUT); } Loading @@ -4029,6 +4068,10 @@ static int patch_alc260(struct hda_codec *codec) #endif return 0; error: alc_free(codec); return err; } Loading Loading @@ -4136,6 +4179,10 @@ static int patch_alc882(struct hda_codec *codec) break; } err = alc_codec_rename_from_preset(codec); if (err < 0) goto error; board_config = alc_board_config(codec, ALC882_MODEL_LAST, alc882_models, alc882_cfg_tbl); Loading @@ -4159,10 +4206,8 @@ static int patch_alc882(struct hda_codec *codec) if (board_config == ALC_MODEL_AUTO) { /* automatic parse from the BIOS config */ err = alc882_parse_auto_config(codec); if (err < 0) { alc_free(codec); return err; } if (err < 0) goto error; #ifdef CONFIG_SND_HDA_ENABLE_REALTEK_QUIRKS else if (!err) { printk(KERN_INFO Loading @@ -4187,10 +4232,8 @@ static int patch_alc882(struct hda_codec *codec) if (!spec->no_analog && has_cdefine_beep(codec)) { err = snd_hda_attach_beep_device(codec, 0x1); if (err < 0) { alc_free(codec); return err; } if (err < 0) goto error; set_beep_amp(spec, 0x0b, 0x05, HDA_INPUT); } Loading @@ -4209,6 +4252,10 @@ static int patch_alc882(struct hda_codec *codec) #endif return 0; error: alc_free(codec); return err; } Loading Loading @@ -4313,10 +4360,8 @@ static int patch_alc262(struct hda_codec *codec) if (board_config == ALC_MODEL_AUTO) { /* automatic parse from the BIOS config */ err = alc262_parse_auto_config(codec); if (err < 0) { alc_free(codec); return err; } if (err < 0) goto error; #ifdef CONFIG_SND_HDA_ENABLE_REALTEK_QUIRKS else if (!err) { printk(KERN_INFO Loading @@ -4341,10 +4386,8 @@ static int patch_alc262(struct hda_codec *codec) if (!spec->no_analog && has_cdefine_beep(codec)) { err = snd_hda_attach_beep_device(codec, 0x1); if (err < 0) { alc_free(codec); return err; } if (err < 0) goto error; set_beep_amp(spec, 0x0b, 0x05, HDA_INPUT); } Loading @@ -4364,6 +4407,10 @@ static int patch_alc262(struct hda_codec *codec) #endif return 0; error: alc_free(codec); return err; } /* Loading Loading @@ -4427,10 +4474,8 @@ static int patch_alc268(struct hda_codec *codec) /* automatic parse from the BIOS config */ err = alc268_parse_auto_config(codec); if (err < 0) { alc_free(codec); return err; } if (err < 0) goto error; has_beep = 0; for (i = 0; i < spec->num_mixers; i++) { Loading @@ -4442,10 +4487,8 @@ static int patch_alc268(struct hda_codec *codec) if (has_beep) { err = snd_hda_attach_beep_device(codec, 0x1); if (err < 0) { alc_free(codec); return err; } if (err < 0) goto error; if (!query_amp_caps(codec, 0x1d, HDA_INPUT)) /* override the amp caps for beep generator */ snd_hda_override_amp_caps(codec, 0x1d, HDA_INPUT, Loading Loading @@ -4473,6 +4516,10 @@ static int patch_alc268(struct hda_codec *codec) alc_init_jacks(codec); return 0; error: alc_free(codec); return err; } /* Loading Loading @@ -4962,41 +5009,28 @@ static int patch_alc269(struct hda_codec *codec) alc_auto_parse_customize_define(codec); err = alc_codec_rename_from_preset(codec); if (err < 0) goto error; if (codec->vendor_id == 0x10ec0269) { unsigned int coef; spec->codec_variant = ALC269_TYPE_ALC269VA; coef = alc_read_coef_idx(codec, 0); if ((coef & 0x00f0) == 0x0010) { if (codec->bus->pci->subsystem_vendor == 0x1025 && spec->cdefine.platform_type == 1) { spec->cdefine.platform_type == 1) err = alc_codec_rename(codec, "ALC271X"); } else if ((coef & 0xf000) == 0x2000) { err = alc_codec_rename(codec, "ALC259"); } else if ((coef & 0xf000) == 0x3000) { err = alc_codec_rename(codec, "ALC258"); } else if ((coef & 0xfff0) == 0x3010) { err = alc_codec_rename(codec, "ALC277"); } else { err = alc_codec_rename(codec, "ALC269VB"); } spec->codec_variant = ALC269_TYPE_ALC269VB; } else if ((coef & 0x00f0) == 0x0020) { if (coef == 0xa023) err = alc_codec_rename(codec, "ALC259"); else if (coef == 0x6023) err = alc_codec_rename(codec, "ALC281X"); else if (codec->bus->pci->subsystem_vendor == 0x17aa && if (codec->bus->pci->subsystem_vendor == 0x17aa && codec->bus->pci->subsystem_device == 0x21f3) err = alc_codec_rename(codec, "ALC3202"); else err = alc_codec_rename(codec, "ALC269VC"); spec->codec_variant = ALC269_TYPE_ALC269VC; } else alc_fix_pll_init(codec, 0x20, 0x04, 15); if (err < 0) { alc_free(codec); return err; } if (err < 0) goto error; alc269_fill_coef(codec); } Loading @@ -5006,10 +5040,8 @@ static int patch_alc269(struct hda_codec *codec) /* automatic parse from the BIOS config */ err = alc269_parse_auto_config(codec); if (err < 0) { alc_free(codec); return err; } if (err < 0) goto error; if (!spec->no_analog && !spec->adc_nids) { alc_auto_fill_adc_caps(codec); Loading @@ -5022,10 +5054,8 @@ static int patch_alc269(struct hda_codec *codec) if (!spec->no_analog && has_cdefine_beep(codec)) { err = snd_hda_attach_beep_device(codec, 0x1); if (err < 0) { alc_free(codec); return err; } if (err < 0) goto error; set_beep_amp(spec, 0x0b, 0x04, HDA_INPUT); } Loading @@ -5049,6 +5079,10 @@ static int patch_alc269(struct hda_codec *codec) #endif return 0; error: alc_free(codec); return err; } /* Loading Loading @@ -5114,10 +5148,8 @@ static int patch_alc861(struct hda_codec *codec) /* automatic parse from the BIOS config */ err = alc861_parse_auto_config(codec); if (err < 0) { alc_free(codec); return err; } if (err < 0) goto error; if (!spec->no_analog && !spec->adc_nids) { alc_auto_fill_adc_caps(codec); Loading @@ -5130,10 +5162,8 @@ static int patch_alc861(struct hda_codec *codec) if (!spec->no_analog) { err = snd_hda_attach_beep_device(codec, 0x23); if (err < 0) { alc_free(codec); return err; } if (err < 0) goto error; set_beep_amp(spec, 0x23, 0, HDA_OUTPUT); } Loading @@ -5150,6 +5180,10 @@ static int patch_alc861(struct hda_codec *codec) #endif return 0; error: alc_free(codec); return err; } /* Loading Loading @@ -5235,10 +5269,8 @@ static int patch_alc861vd(struct hda_codec *codec) /* automatic parse from the BIOS config */ err = alc861vd_parse_auto_config(codec); if (err < 0) { alc_free(codec); return err; } if (err < 0) goto error; if (codec->vendor_id == 0x10ec0660) { /* always turn on EAPD */ Loading @@ -5256,10 +5288,8 @@ static int patch_alc861vd(struct hda_codec *codec) if (!spec->no_analog) { err = snd_hda_attach_beep_device(codec, 0x23); if (err < 0) { alc_free(codec); return err; } if (err < 0) goto error; set_beep_amp(spec, 0x0b, 0x05, HDA_INPUT); } Loading @@ -5277,6 +5307,10 @@ static int patch_alc861vd(struct hda_codec *codec) #endif return 0; error: alc_free(codec); return err; } /* Loading Loading @@ -5598,18 +5632,16 @@ static int patch_alc662(struct hda_codec *codec) alc_fix_pll_init(codec, 0x20, 0x04, 15); err = alc_codec_rename_from_preset(codec); if (err < 0) goto error; coef = alc_read_coef_idx(codec, 0); if (coef == 0x8020 || coef == 0x8011) err = alc_codec_rename(codec, "ALC661"); else if (coef & (1 << 14) && if (coef & (1 << 14) && codec->bus->pci->subsystem_vendor == 0x1025 && spec->cdefine.platform_type == 1) err = alc_codec_rename(codec, "ALC272X"); else if (coef == 0x4011) err = alc_codec_rename(codec, "ALC656"); if (err < 0) { alc_free(codec); return err; spec->cdefine.platform_type == 1) { if (alc_codec_rename(codec, "ALC272X") < 0) goto error; } alc_pick_fixup(codec, alc662_fixup_models, Loading @@ -5617,10 +5649,8 @@ static int patch_alc662(struct hda_codec *codec) alc_apply_fixup(codec, ALC_FIXUP_ACT_PRE_PROBE); /* automatic parse from the BIOS config */ err = alc662_parse_auto_config(codec); if (err < 0) { alc_free(codec); return err; } if (err < 0) goto error; if (!spec->no_analog && !spec->adc_nids) { alc_auto_fill_adc_caps(codec); Loading @@ -5633,10 +5663,8 @@ static int patch_alc662(struct hda_codec *codec) if (!spec->no_analog && has_cdefine_beep(codec)) { err = snd_hda_attach_beep_device(codec, 0x1); if (err < 0) { alc_free(codec); return err; } if (err < 0) goto error; switch (codec->vendor_id) { case 0x10ec0662: set_beep_amp(spec, 0x0b, 0x05, HDA_INPUT); Loading Loading @@ -5667,49 +5695,10 @@ static int patch_alc662(struct hda_codec *codec) #endif return 0; } static int patch_alc888(struct hda_codec *codec) { int coef; coef = alc_read_coef_idx(codec, 0); /* For ALC887-VD ALC888S-VD */ if ((coef & 0x00f0) == 0x0030) { kfree(codec->chip_name); if (codec->vendor_id == 0x10ec0887) err = alc_codec_rename(codec, "ALC887-VD"); else err = alc_codec_rename(codec, "ALC888-VD"); if (err < 0) { alc_free(codec); return -ENOMEM; } return patch_alc662(codec); } /* For ALC888S-VC */ if (codec->vendor_id == 0x10ec0888) { if ((coef & 0xf0f0) == 0x3020) { err = alc_codec_rename(codec, "ALC886"); if (err < 0) { alc_free(codec); return -ENOMEM; } } } return patch_alc882(codec); } static int patch_alc899(struct hda_codec *codec) { if ((alc_read_coef_idx(codec, 0) & 0x2000) != 0x2000) { if (alc_codec_rename(codec, "ALC898") < 0) { error: alc_free(codec); return -ENOMEM; } } return patch_alc882(codec); return err; } /* Loading Loading @@ -5789,13 +5778,13 @@ static const struct hda_codec_preset snd_hda_preset_realtek[] = { { .id = 0x10ec0885, .rev = 0x100103, .name = "ALC889A", .patch = patch_alc882 }, { .id = 0x10ec0885, .name = "ALC885", .patch = patch_alc882 }, { .id = 0x10ec0887, .name = "ALC887", .patch = patch_alc888 }, { .id = 0x10ec0887, .name = "ALC887", .patch = patch_alc882 }, { .id = 0x10ec0888, .rev = 0x100101, .name = "ALC1200", .patch = patch_alc882 }, { .id = 0x10ec0888, .name = "ALC888", .patch = patch_alc888 }, { .id = 0x10ec0888, .name = "ALC888", .patch = patch_alc882 }, { .id = 0x10ec0889, .name = "ALC889", .patch = patch_alc882 }, { .id = 0x10ec0892, .name = "ALC892", .patch = patch_alc662 }, { .id = 0x10ec0899, .name = "ALC899", .patch = patch_alc899 }, { .id = 0x10ec0899, .name = "ALC898", .patch = patch_alc882 }, {} /* terminator */ }; Loading Loading
sound/pci/hda/patch_realtek.c +139 −150 Original line number Diff line number Diff line Loading @@ -2479,6 +2479,49 @@ static int alc_codec_rename(struct hda_codec *codec, const char *name) return 0; } /* * Rename codecs appropriately from COEF value */ struct alc_codec_rename_table { unsigned int vendor_id; unsigned short coef_mask; unsigned short coef_bits; const char *name; }; static struct alc_codec_rename_table rename_tbl[] = { { 0x10ec0269, 0xfff0, 0x3010, "ALC277" }, { 0x10ec0269, 0xf0f0, 0x2010, "ALC259" }, { 0x10ec0269, 0xf0f0, 0x3010, "ALC258" }, { 0x10ec0269, 0x00f0, 0x0010, "ALC269VB" }, { 0x10ec0269, 0xffff, 0xa023, "ALC259" }, { 0x10ec0269, 0xffff, 0x6023, "ALC281X" }, { 0x10ec0269, 0x00f0, 0x0020, "ALC269VC" }, { 0x10ec0887, 0x00f0, 0x0030, "ALC887-VD" }, { 0x10ec0888, 0x00f0, 0x0030, "ALC888-VD" }, { 0x10ec0888, 0xf0f0, 0x3020, "ALC886" }, { 0x10ec0899, 0x2000, 0x2000, "ALC899" }, { 0x10ec0892, 0xffff, 0x8020, "ALC661" }, { 0x10ec0892, 0xffff, 0x8011, "ALC661" }, { 0x10ec0892, 0xffff, 0x4011, "ALC656" }, { } /* terminator */ }; static int alc_codec_rename_from_preset(struct hda_codec *codec) { const struct alc_codec_rename_table *p; unsigned short coef; for (p = rename_tbl; p->vendor_id; p++) { if (p->vendor_id != codec->vendor_id) continue; coef = alc_read_coef_idx(codec, 0); if ((coef & p->coef_mask) == p->coef_bits) return alc_codec_rename(codec, p->name); } return 0; } /* * Automatic parse of I/O pins from the BIOS configuration */ Loading Loading @@ -3853,10 +3896,8 @@ static int patch_alc880(struct hda_codec *codec) if (board_config == ALC_MODEL_AUTO) { /* automatic parse from the BIOS config */ err = alc880_parse_auto_config(codec); if (err < 0) { alc_free(codec); return err; } if (err < 0) goto error; #ifdef CONFIG_SND_HDA_ENABLE_REALTEK_QUIRKS else if (!err) { printk(KERN_INFO Loading @@ -3881,10 +3922,8 @@ static int patch_alc880(struct hda_codec *codec) if (!spec->no_analog) { err = snd_hda_attach_beep_device(codec, 0x1); if (err < 0) { alc_free(codec); return err; } if (err < 0) goto error; set_beep_amp(spec, 0x0b, 0x05, HDA_INPUT); } Loading @@ -3899,6 +3938,10 @@ static int patch_alc880(struct hda_codec *codec) #endif return 0; error: alc_free(codec); return err; } Loading Loading @@ -3980,10 +4023,8 @@ static int patch_alc260(struct hda_codec *codec) if (board_config == ALC_MODEL_AUTO) { /* automatic parse from the BIOS config */ err = alc260_parse_auto_config(codec); if (err < 0) { alc_free(codec); return err; } if (err < 0) goto error; #ifdef CONFIG_SND_HDA_ENABLE_REALTEK_QUIRKS else if (!err) { printk(KERN_INFO Loading @@ -4008,10 +4049,8 @@ static int patch_alc260(struct hda_codec *codec) if (!spec->no_analog) { err = snd_hda_attach_beep_device(codec, 0x1); if (err < 0) { alc_free(codec); return err; } if (err < 0) goto error; set_beep_amp(spec, 0x07, 0x05, HDA_INPUT); } Loading @@ -4029,6 +4068,10 @@ static int patch_alc260(struct hda_codec *codec) #endif return 0; error: alc_free(codec); return err; } Loading Loading @@ -4136,6 +4179,10 @@ static int patch_alc882(struct hda_codec *codec) break; } err = alc_codec_rename_from_preset(codec); if (err < 0) goto error; board_config = alc_board_config(codec, ALC882_MODEL_LAST, alc882_models, alc882_cfg_tbl); Loading @@ -4159,10 +4206,8 @@ static int patch_alc882(struct hda_codec *codec) if (board_config == ALC_MODEL_AUTO) { /* automatic parse from the BIOS config */ err = alc882_parse_auto_config(codec); if (err < 0) { alc_free(codec); return err; } if (err < 0) goto error; #ifdef CONFIG_SND_HDA_ENABLE_REALTEK_QUIRKS else if (!err) { printk(KERN_INFO Loading @@ -4187,10 +4232,8 @@ static int patch_alc882(struct hda_codec *codec) if (!spec->no_analog && has_cdefine_beep(codec)) { err = snd_hda_attach_beep_device(codec, 0x1); if (err < 0) { alc_free(codec); return err; } if (err < 0) goto error; set_beep_amp(spec, 0x0b, 0x05, HDA_INPUT); } Loading @@ -4209,6 +4252,10 @@ static int patch_alc882(struct hda_codec *codec) #endif return 0; error: alc_free(codec); return err; } Loading Loading @@ -4313,10 +4360,8 @@ static int patch_alc262(struct hda_codec *codec) if (board_config == ALC_MODEL_AUTO) { /* automatic parse from the BIOS config */ err = alc262_parse_auto_config(codec); if (err < 0) { alc_free(codec); return err; } if (err < 0) goto error; #ifdef CONFIG_SND_HDA_ENABLE_REALTEK_QUIRKS else if (!err) { printk(KERN_INFO Loading @@ -4341,10 +4386,8 @@ static int patch_alc262(struct hda_codec *codec) if (!spec->no_analog && has_cdefine_beep(codec)) { err = snd_hda_attach_beep_device(codec, 0x1); if (err < 0) { alc_free(codec); return err; } if (err < 0) goto error; set_beep_amp(spec, 0x0b, 0x05, HDA_INPUT); } Loading @@ -4364,6 +4407,10 @@ static int patch_alc262(struct hda_codec *codec) #endif return 0; error: alc_free(codec); return err; } /* Loading Loading @@ -4427,10 +4474,8 @@ static int patch_alc268(struct hda_codec *codec) /* automatic parse from the BIOS config */ err = alc268_parse_auto_config(codec); if (err < 0) { alc_free(codec); return err; } if (err < 0) goto error; has_beep = 0; for (i = 0; i < spec->num_mixers; i++) { Loading @@ -4442,10 +4487,8 @@ static int patch_alc268(struct hda_codec *codec) if (has_beep) { err = snd_hda_attach_beep_device(codec, 0x1); if (err < 0) { alc_free(codec); return err; } if (err < 0) goto error; if (!query_amp_caps(codec, 0x1d, HDA_INPUT)) /* override the amp caps for beep generator */ snd_hda_override_amp_caps(codec, 0x1d, HDA_INPUT, Loading Loading @@ -4473,6 +4516,10 @@ static int patch_alc268(struct hda_codec *codec) alc_init_jacks(codec); return 0; error: alc_free(codec); return err; } /* Loading Loading @@ -4962,41 +5009,28 @@ static int patch_alc269(struct hda_codec *codec) alc_auto_parse_customize_define(codec); err = alc_codec_rename_from_preset(codec); if (err < 0) goto error; if (codec->vendor_id == 0x10ec0269) { unsigned int coef; spec->codec_variant = ALC269_TYPE_ALC269VA; coef = alc_read_coef_idx(codec, 0); if ((coef & 0x00f0) == 0x0010) { if (codec->bus->pci->subsystem_vendor == 0x1025 && spec->cdefine.platform_type == 1) { spec->cdefine.platform_type == 1) err = alc_codec_rename(codec, "ALC271X"); } else if ((coef & 0xf000) == 0x2000) { err = alc_codec_rename(codec, "ALC259"); } else if ((coef & 0xf000) == 0x3000) { err = alc_codec_rename(codec, "ALC258"); } else if ((coef & 0xfff0) == 0x3010) { err = alc_codec_rename(codec, "ALC277"); } else { err = alc_codec_rename(codec, "ALC269VB"); } spec->codec_variant = ALC269_TYPE_ALC269VB; } else if ((coef & 0x00f0) == 0x0020) { if (coef == 0xa023) err = alc_codec_rename(codec, "ALC259"); else if (coef == 0x6023) err = alc_codec_rename(codec, "ALC281X"); else if (codec->bus->pci->subsystem_vendor == 0x17aa && if (codec->bus->pci->subsystem_vendor == 0x17aa && codec->bus->pci->subsystem_device == 0x21f3) err = alc_codec_rename(codec, "ALC3202"); else err = alc_codec_rename(codec, "ALC269VC"); spec->codec_variant = ALC269_TYPE_ALC269VC; } else alc_fix_pll_init(codec, 0x20, 0x04, 15); if (err < 0) { alc_free(codec); return err; } if (err < 0) goto error; alc269_fill_coef(codec); } Loading @@ -5006,10 +5040,8 @@ static int patch_alc269(struct hda_codec *codec) /* automatic parse from the BIOS config */ err = alc269_parse_auto_config(codec); if (err < 0) { alc_free(codec); return err; } if (err < 0) goto error; if (!spec->no_analog && !spec->adc_nids) { alc_auto_fill_adc_caps(codec); Loading @@ -5022,10 +5054,8 @@ static int patch_alc269(struct hda_codec *codec) if (!spec->no_analog && has_cdefine_beep(codec)) { err = snd_hda_attach_beep_device(codec, 0x1); if (err < 0) { alc_free(codec); return err; } if (err < 0) goto error; set_beep_amp(spec, 0x0b, 0x04, HDA_INPUT); } Loading @@ -5049,6 +5079,10 @@ static int patch_alc269(struct hda_codec *codec) #endif return 0; error: alc_free(codec); return err; } /* Loading Loading @@ -5114,10 +5148,8 @@ static int patch_alc861(struct hda_codec *codec) /* automatic parse from the BIOS config */ err = alc861_parse_auto_config(codec); if (err < 0) { alc_free(codec); return err; } if (err < 0) goto error; if (!spec->no_analog && !spec->adc_nids) { alc_auto_fill_adc_caps(codec); Loading @@ -5130,10 +5162,8 @@ static int patch_alc861(struct hda_codec *codec) if (!spec->no_analog) { err = snd_hda_attach_beep_device(codec, 0x23); if (err < 0) { alc_free(codec); return err; } if (err < 0) goto error; set_beep_amp(spec, 0x23, 0, HDA_OUTPUT); } Loading @@ -5150,6 +5180,10 @@ static int patch_alc861(struct hda_codec *codec) #endif return 0; error: alc_free(codec); return err; } /* Loading Loading @@ -5235,10 +5269,8 @@ static int patch_alc861vd(struct hda_codec *codec) /* automatic parse from the BIOS config */ err = alc861vd_parse_auto_config(codec); if (err < 0) { alc_free(codec); return err; } if (err < 0) goto error; if (codec->vendor_id == 0x10ec0660) { /* always turn on EAPD */ Loading @@ -5256,10 +5288,8 @@ static int patch_alc861vd(struct hda_codec *codec) if (!spec->no_analog) { err = snd_hda_attach_beep_device(codec, 0x23); if (err < 0) { alc_free(codec); return err; } if (err < 0) goto error; set_beep_amp(spec, 0x0b, 0x05, HDA_INPUT); } Loading @@ -5277,6 +5307,10 @@ static int patch_alc861vd(struct hda_codec *codec) #endif return 0; error: alc_free(codec); return err; } /* Loading Loading @@ -5598,18 +5632,16 @@ static int patch_alc662(struct hda_codec *codec) alc_fix_pll_init(codec, 0x20, 0x04, 15); err = alc_codec_rename_from_preset(codec); if (err < 0) goto error; coef = alc_read_coef_idx(codec, 0); if (coef == 0x8020 || coef == 0x8011) err = alc_codec_rename(codec, "ALC661"); else if (coef & (1 << 14) && if (coef & (1 << 14) && codec->bus->pci->subsystem_vendor == 0x1025 && spec->cdefine.platform_type == 1) err = alc_codec_rename(codec, "ALC272X"); else if (coef == 0x4011) err = alc_codec_rename(codec, "ALC656"); if (err < 0) { alc_free(codec); return err; spec->cdefine.platform_type == 1) { if (alc_codec_rename(codec, "ALC272X") < 0) goto error; } alc_pick_fixup(codec, alc662_fixup_models, Loading @@ -5617,10 +5649,8 @@ static int patch_alc662(struct hda_codec *codec) alc_apply_fixup(codec, ALC_FIXUP_ACT_PRE_PROBE); /* automatic parse from the BIOS config */ err = alc662_parse_auto_config(codec); if (err < 0) { alc_free(codec); return err; } if (err < 0) goto error; if (!spec->no_analog && !spec->adc_nids) { alc_auto_fill_adc_caps(codec); Loading @@ -5633,10 +5663,8 @@ static int patch_alc662(struct hda_codec *codec) if (!spec->no_analog && has_cdefine_beep(codec)) { err = snd_hda_attach_beep_device(codec, 0x1); if (err < 0) { alc_free(codec); return err; } if (err < 0) goto error; switch (codec->vendor_id) { case 0x10ec0662: set_beep_amp(spec, 0x0b, 0x05, HDA_INPUT); Loading Loading @@ -5667,49 +5695,10 @@ static int patch_alc662(struct hda_codec *codec) #endif return 0; } static int patch_alc888(struct hda_codec *codec) { int coef; coef = alc_read_coef_idx(codec, 0); /* For ALC887-VD ALC888S-VD */ if ((coef & 0x00f0) == 0x0030) { kfree(codec->chip_name); if (codec->vendor_id == 0x10ec0887) err = alc_codec_rename(codec, "ALC887-VD"); else err = alc_codec_rename(codec, "ALC888-VD"); if (err < 0) { alc_free(codec); return -ENOMEM; } return patch_alc662(codec); } /* For ALC888S-VC */ if (codec->vendor_id == 0x10ec0888) { if ((coef & 0xf0f0) == 0x3020) { err = alc_codec_rename(codec, "ALC886"); if (err < 0) { alc_free(codec); return -ENOMEM; } } } return patch_alc882(codec); } static int patch_alc899(struct hda_codec *codec) { if ((alc_read_coef_idx(codec, 0) & 0x2000) != 0x2000) { if (alc_codec_rename(codec, "ALC898") < 0) { error: alc_free(codec); return -ENOMEM; } } return patch_alc882(codec); return err; } /* Loading Loading @@ -5789,13 +5778,13 @@ static const struct hda_codec_preset snd_hda_preset_realtek[] = { { .id = 0x10ec0885, .rev = 0x100103, .name = "ALC889A", .patch = patch_alc882 }, { .id = 0x10ec0885, .name = "ALC885", .patch = patch_alc882 }, { .id = 0x10ec0887, .name = "ALC887", .patch = patch_alc888 }, { .id = 0x10ec0887, .name = "ALC887", .patch = patch_alc882 }, { .id = 0x10ec0888, .rev = 0x100101, .name = "ALC1200", .patch = patch_alc882 }, { .id = 0x10ec0888, .name = "ALC888", .patch = patch_alc888 }, { .id = 0x10ec0888, .name = "ALC888", .patch = patch_alc882 }, { .id = 0x10ec0889, .name = "ALC889", .patch = patch_alc882 }, { .id = 0x10ec0892, .name = "ALC892", .patch = patch_alc662 }, { .id = 0x10ec0899, .name = "ALC899", .patch = patch_alc899 }, { .id = 0x10ec0899, .name = "ALC898", .patch = patch_alc882 }, {} /* terminator */ }; Loading