Lines Matching +full:xps +full:- +full:gpio +full:- +full:1
1 // SPDX-License-Identifier: GPL-2.0-or-later
21 /* different alc269-variants */
55 struct alc_spec *spec = codec->spec;
58 switch (spec->codec_variant) {
106 if (jack->unsol_res & (7 << 13))
109 if (jack->unsol_res & (1 << 16 | 3 << 8))
113 if (jack->unsol_res & (7 << 23))
117 if (jack->unsol_res & (7 << 10))
120 snd_hda_jack_set_button_state(codec, jack->nid, report);
125 struct alc_spec *spec = codec->spec;
127 if (!spec->has_hs_key)
130 switch (codec->core.vendor_id) {
155 struct alc_spec *spec = codec->spec;
157 if (!spec->has_hs_key)
160 switch (codec->core.vendor_id) {
186 struct alc_spec *spec = codec->spec;
191 spec->has_hs_key = 1;
211 alc_update_coef_idx(codec, 0x04, 1 << 11, power_up ? (1 << 11) : 0);
216 struct alc_spec *spec = codec->spec;
218 if (spec->codec_variant == ALC269_TYPE_ALC269VB)
220 if (spec->codec_variant == ALC269_TYPE_ALC269VB &&
267 struct alc_spec *spec = codec->spec;
279 /* Index 0x78 Direct Drive HP AMP LPM Control 1 */
304 struct alc_spec *spec = codec->spec;
327 if (!spec->no_shutup_pins)
383 struct alc_spec *spec = codec->spec;
395 /* Index 0x43 Direct Drive HP AMP LPM Control 1 */
419 struct alc_spec *spec = codec->spec;
441 if (!spec->no_shutup_pins)
456 struct alc_spec *spec = codec->spec;
460 if (spec->ultra_low_power) {
461 alc_update_coef_idx(codec, 0x03, 1<<1, 1<<1);
464 alc_update_coef_idx(codec, 0x3b, 1<<15, 0);
492 alc_update_coefex_idx(codec, 0x53, 0x02, 0x8000, 1 << 15); /* Clear bit */
496 * of PC Beep on 1Ah, and disable 1Ah loopback for all outputs. See
497 * Documentation/sound/hd-audio/realtek-pc-beep.rst for details of
505 struct alc_spec *spec = codec->spec;
519 if (spec->en_3kpull_low)
532 if (!spec->no_shutup_pins)
541 if (spec->ultra_low_power) {
543 alc_update_coef_idx(codec, 0x03, 1<<1, 0);
546 alc_update_coef_idx(codec, 0x3b, 1<<15, 1<<15);
554 struct alc_spec *spec = codec->spec;
560 alc_update_coef_idx(codec, 0x4a, 1<<15, 1<<15); /* Reset HP JD */
564 alc_update_coef_idx(codec, 0x38, 1<<4, 0x0);
574 alc_update_coef_idx(codec, 0x36, 1<<14, 1<<14);
575 alc_update_coef_idx(codec, 0x36, 1<<13, 0x0);
594 alc_update_coef_idx(codec, 0x38, 1<<4, coef38);
599 alc_update_coef_idx(codec, 0x4a, 1<<15, 0);
604 struct alc_spec *spec = codec->spec;
608 if (spec->ultra_low_power) {
611 alc_update_coef_idx(codec, 0x33, 1<<11, 0);
615 if (spec->codec_variant != ALC269_TYPE_ALC287 &&
616 spec->codec_variant != ALC269_TYPE_ALC245)
618 if (!spec->done_hp_init ||
622 spec->done_hp_init = true;
659 struct alc_spec *spec = codec->spec;
697 if (spec->ultra_low_power) {
701 alc_update_coef_idx(codec, 0x33, 1<<11, 1<<11);
709 struct alc_spec *spec = codec->spec;
745 struct alc_spec *spec = codec->spec;
782 struct alc_spec *spec = codec->spec;
809 struct alc_spec *spec = codec->spec;
828 if (!spec->no_shutup_pins)
840 struct alc_spec *spec = codec->spec;
852 if (!spec->no_shutup_pins)
872 struct alc_spec *spec = codec->spec;
875 if (!spec->done_hp_init || is_s4_resume(codec)) {
877 spec->done_hp_init = true;
885 snd_hda_codec_write(codec, 0x51, 0, AC_VERB_SET_COEF_INDEX, index_reg >> 1);
894 snd_hda_codec_write(codec, 0x51, 0, AC_VERB_SET_COEF_INDEX, index_reg >> 1);
976 struct alc_spec *spec = codec->spec;
978 if (spec->has_alc5505_dsp)
986 struct alc_spec *spec = codec->spec;
988 if (spec->codec_variant == ALC269_TYPE_ALC269VB)
990 if (spec->codec_variant == ALC269_TYPE_ALC269VB &&
997 if (spec->codec_variant == ALC269_TYPE_ALC269VB)
998 alc269vb_toggle_power_output(codec, 1);
999 if (spec->codec_variant == ALC269_TYPE_ALC269VB &&
1007 /* on some machine, the BIOS will clear the codec gpio data when enter
1011 if (spec->gpio_data)
1014 if (spec->has_alc5505_dsp)
1023 struct alc_spec *spec = codec->spec;
1026 spec->parse_flags = HDA_PINCFG_NO_HP_FIXUP;
1059 if (strcmp(codec->core.chip_name, "ALC271X") &&
1060 strcmp(codec->core.chip_name, "ALC269VB"))
1079 struct alc_spec *spec = codec->spec;
1087 spec->gen.stream_analog_playback = &alc269_44k_pcm_analog_playback;
1088 spec->gen.stream_analog_capture = &alc269_44k_pcm_analog_capture;
1094 /* The digital-mic unit sends PDM (differential signal) instead of
1114 struct alc_spec *spec = codec->spec;
1117 spec->gen.automute_hook = alc269_quanta_automute;
1123 struct alc_spec *spec = codec->spec;
1128 vref = spec->gen.hp_jack_present ? PIN_VREF80 : 0;
1157 alc_write_coef_idx(codec, 0x23, initval->value_0x23);
1159 if (initval->value_0x23 != 0x1e)
1160 alc_write_coef_idx(codec, 0x25, initval->value_0x25);
1199 for (seq = dac_init; seq->value_0x23; seq++)
1206 struct alc_spec *spec = codec->spec;
1208 spec->parse_flags |= HDA_PINCFG_HEADSET_MIC;
1209 spec->gen.hp_automute_hook = alc269_x101_hp_automute_hook;
1230 /* update mute-LED according to the speaker mute state via mic VREF pin */
1234 struct hda_codec *codec = dev_to_hda_codec(led_cdev->dev->parent);
1235 struct alc_spec *spec = codec->spec;
1237 alc_update_vref_led(codec, spec->mute_led_nid,
1238 spec->mute_led_polarity, brightness);
1247 struct alc_spec *spec = codec->spec;
1250 (nid != spec->mute_led_nid && nid != spec->cap_mute_led_nid))
1263 struct alc_spec *spec = codec->spec;
1271 if (sscanf(dev->name, "HP_Mute_LED_%d_%x", &pol, &pin) != 2)
1275 spec->mute_led_polarity = pol;
1276 spec->mute_led_nid = pin - 0x0a + 0x18;
1278 codec->power_filter = led_power_filter;
1280 "Detected mute LED for %x:%d\n", spec->mute_led_nid,
1281 spec->mute_led_polarity);
1290 struct alc_spec *spec = codec->spec;
1293 spec->mute_led_polarity = 0;
1294 spec->mute_led_nid = pin;
1296 codec->power_filter = led_power_filter;
1351 struct alc_spec *spec = codec->spec;
1354 spec->micmute_led_polarity = 1;
1358 /* turn on/off mic-mute LED per capture hook via VREF change */
1362 struct hda_codec *codec = dev_to_hda_codec(led_cdev->dev->parent);
1363 struct alc_spec *spec = codec->spec;
1365 alc_update_vref_led(codec, spec->cap_mute_led_nid,
1366 spec->micmute_led_polarity, brightness);
1373 struct alc_spec *spec = codec->spec;
1380 spec->gpio_mask |= 0x10;
1381 spec->gpio_dir |= 0x10;
1382 spec->cap_mute_led_nid = 0x18;
1384 codec->power_filter = led_power_filter;
1391 struct alc_spec *spec = codec->spec;
1395 spec->cap_mute_led_nid = 0x18;
1397 codec->power_filter = led_power_filter;
1407 struct alc_spec *spec = codec->spec;
1411 spec->gpio_mask |= 0x01;
1412 spec->gpio_dir |= 0x01;
1415 /* need to toggle GPIO to enable the amp */
1443 struct alc_spec *spec = codec->spec;
1446 spec->gpio_mask |= 0x04;
1447 spec->gpio_dir |= 0x04;
1448 spec->gen.pcm_playback_hook = alc274_hp_envy_pcm_hook;
1459 alc_update_coef_idx(codec, led->idx, led->mask,
1460 on ? led->on : led->off);
1463 /* update mute-LED according to the speaker mute state via COEF bit */
1467 struct hda_codec *codec = dev_to_hda_codec(led_cdev->dev->parent);
1468 struct alc_spec *spec = codec->spec;
1470 alc_update_coef_led(codec, &spec->mute_led_coef,
1471 spec->mute_led_polarity, brightness);
1479 struct alc_spec *spec = codec->spec;
1482 spec->mute_led_polarity = 0;
1483 spec->mute_led_coef.idx = 0x0b;
1484 spec->mute_led_coef.mask = 1 << 3;
1485 spec->mute_led_coef.on = 1 << 3;
1486 spec->mute_led_coef.off = 0;
1495 struct alc_spec *spec = codec->spec;
1498 spec->mute_led_polarity = 0;
1499 spec->mute_led_coef.idx = 0x34;
1500 spec->mute_led_coef.mask = 1 << 5;
1501 spec->mute_led_coef.on = 0;
1502 spec->mute_led_coef.off = 1 << 5;
1510 struct alc_spec *spec = codec->spec;
1513 spec->mute_led_polarity = 0;
1514 spec->mute_led_coef.idx = 0x07;
1515 spec->mute_led_coef.mask = 1;
1516 spec->mute_led_coef.on = 1;
1517 spec->mute_led_coef.off = 0;
1526 struct alc_spec *spec = codec->spec;
1529 spec->mute_led_polarity = 0;
1530 spec->mute_led_coef.idx = 0x0b;
1531 spec->mute_led_coef.mask = 3 << 2;
1532 spec->mute_led_coef.on = 2 << 2;
1533 spec->mute_led_coef.off = 1 << 2;
1542 struct alc_spec *spec = codec->spec;
1545 spec->mute_led_polarity = 0;
1546 spec->mute_led_coef.idx = 0x0b;
1547 spec->mute_led_coef.mask = 3 << 2;
1548 spec->mute_led_coef.on = 1 << 3;
1549 spec->mute_led_coef.off = 0;
1554 /* turn on/off mic-mute LED per capture hook by coef bit */
1558 struct hda_codec *codec = dev_to_hda_codec(led_cdev->dev->parent);
1559 struct alc_spec *spec = codec->spec;
1561 alc_update_coef_led(codec, &spec->mic_led_coef,
1562 spec->micmute_led_polarity, brightness);
1569 struct alc_spec *spec = codec->spec;
1572 spec->mic_led_coef.idx = 0x19;
1573 spec->mic_led_coef.mask = 1 << 13;
1574 spec->mic_led_coef.on = 1 << 13;
1575 spec->mic_led_coef.off = 0;
1583 struct alc_spec *spec = codec->spec;
1586 spec->micmute_led_polarity = 1;
1593 struct alc_spec *spec = codec->spec;
1596 spec->mic_led_coef.idx = 0x35;
1597 spec->mic_led_coef.mask = 3 << 2;
1598 spec->mic_led_coef.on = 2 << 2;
1599 spec->mic_led_coef.off = 1 << 2;
1607 struct alc_spec *spec = codec->spec;
1610 spec->mute_led_polarity = 0;
1611 spec->mute_led_coef.idx = 0xb;
1612 spec->mute_led_coef.mask = 3 << 3;
1613 spec->mute_led_coef.on = 1 << 3;
1614 spec->mute_led_coef.off = 1 << 4;
1643 struct alc_spec *spec = codec->spec;
1646 spec->cap_mute_led_nid = 0x1a;
1648 codec->power_filter = led_power_filter;
1663 alc_write_coef_idx(codec, 0x25, coefs[1]);
1743 struct alc_spec *spec = codec->spec;
1749 for (i = 0; i < spec->num_speaker_amps; i++) {
1760 struct alc_spec *spec = codec->spec;
1766 for (i = 0; i < spec->num_speaker_amps; i++) {
1790 struct alc_spec *spec = codec->spec;
1794 spec->num_speaker_amps = num_speaker_amps;
1800 for (i = 0; i < spec->num_speaker_amps; i++) {
1812 spec->gen.pcm_playback_hook = alc298_samsung_v2_playback_hook;
1832 struct alc_spec *spec = codec->spec;
1836 input_report_key(spec->kb_dev, spec->alc_mute_keycode_map[ALC_KEY_MICMUTE_INDEX], 1);
1837 input_sync(spec->kb_dev);
1838 input_report_key(spec->kb_dev, spec->alc_mute_keycode_map[ALC_KEY_MICMUTE_INDEX], 0);
1839 input_sync(spec->kb_dev);
1844 struct alc_spec *spec = codec->spec;
1847 spec->kb_dev = input_allocate_device();
1848 if (!spec->kb_dev) {
1850 return -ENOMEM;
1853 spec->alc_mute_keycode_map[ALC_KEY_MICMUTE_INDEX] = KEY_MICMUTE;
1855 spec->kb_dev->name = "Microphone Mute Button";
1856 spec->kb_dev->evbit[0] = BIT_MASK(EV_KEY);
1857 spec->kb_dev->keycodesize = sizeof(spec->alc_mute_keycode_map[0]);
1858 spec->kb_dev->keycodemax = ARRAY_SIZE(spec->alc_mute_keycode_map);
1859 spec->kb_dev->keycode = spec->alc_mute_keycode_map;
1860 for (i = 0; i < ARRAY_SIZE(spec->alc_mute_keycode_map); i++)
1861 set_bit(spec->alc_mute_keycode_map[i], spec->kb_dev->keybit);
1863 if (input_register_device(spec->kb_dev)) {
1865 input_free_device(spec->kb_dev);
1866 spec->kb_dev = NULL;
1867 return -ENOMEM;
1881 struct alc_spec *spec = codec->spec;
1885 spec->init_amp = ALC_INIT_DEFAULT;
1889 spec->gpio_mask |= 0x06;
1890 spec->gpio_dir |= 0x02;
1891 spec->gpio_data |= 0x02;
1892 snd_hda_codec_write_cache(codec, codec->core.afg, 0,
1894 snd_hda_jack_detect_enable_callback(codec, codec->core.afg,
1899 if (!spec->kb_dev)
1904 input_unregister_device(spec->kb_dev);
1905 spec->kb_dev = NULL;
1915 struct alc_spec *spec = codec->spec;
1919 spec->init_amp = ALC_INIT_DEFAULT;
1928 if (!spec->kb_dev)
1933 input_unregister_device(spec->kb_dev);
1934 spec->kb_dev = NULL;
1941 struct alc_spec *spec = codec->spec;
1945 spec->cap_mute_led_nid = 0x18;
1953 struct alc_spec *spec = codec->spec;
1956 spec->micmute_led_polarity = 1;
1979 switch (codec->core.vendor_id) {
2006 struct alc_spec *spec = codec->spec;
2007 spec->parse_flags |= HDA_PINCFG_HEADSET_MIC;
2017 struct alc_spec *spec = codec->spec;
2021 alc_update_gpio_data(codec, 0x40, spec->gen.hp_jack_present);
2029 struct alc_spec *spec = codec->spec;
2031 spec->gpio_mask |= 0x40;
2032 spec->gpio_dir |= 0x40;
2033 spec->gen.hp_automute_hook = alc288_update_headset_jack_cb;
2041 struct alc_spec *spec = codec->spec;
2042 spec->no_shutup_pins = 1;
2055 struct alc_spec *spec = codec->spec;
2058 spec->parse_flags = HDA_PINCFG_NO_HP_FIXUP;
2059 codec->power_save_node = 0; /* avoid click noises */
2072 struct alc_spec *spec = codec->spec;
2075 spec->parse_flags = HDA_PINCFG_NO_HP_FIXUP;
2098 struct alc_spec *spec = codec->spec;
2101 spec->gen.preferred_dacs = preferred_pairs;
2110 struct alc_spec *spec = codec->spec;
2113 spec->gen.preferred_dacs = preferred_pairs;
2120 struct alc_spec *spec = codec->spec;
2136 struct alc_spec *spec = codec->spec;
2137 struct auto_pin_cfg *cfg = &spec->gen.autocfg;
2142 Therefore limit the boost to 0 or 1. */
2147 for (i = 0; i < cfg->num_inputs; i++) {
2148 hda_nid_t nid = cfg->inputs[i].pin;
2150 if (cfg->inputs[i].type != AUTO_PIN_MIC)
2167 struct alc_spec *spec = codec->spec;
2173 vref = spec->gen.hp_jack_present ? PIN_VREF80 : 0;
2183 struct alc_spec *spec = codec->spec;
2188 /* Disable AA-loopback as it causes white noise */
2189 spec->gen.mixer_nid = 0;
2192 /* MIC2-VREF control */
2196 alc_update_coef_idx(codec, 0x1a, 0, 1 << 4);
2204 struct alc_spec *spec = codec->spec;
2208 spec->gen.hp_automute_hook = alc283_hp_automute_hook;
2211 /* MIC2-VREF control */
2221 struct alc_spec *spec = codec->spec;
2224 spec->gen.mute_bits |= (1ULL << 0x14);
2230 struct alc_spec *spec = codec->spec;
2238 spec->init_amp = ALC_INIT_DEFAULT;
2242 spec->gen.auto_mute_via_amp = 1;
2243 spec->gen.automute_hook = asus_tx300_automute;
2248 spec->init_amp = ALC_INIT_DEFAULT;
2281 Amp-out capability. we change the speaker's route to:
2282 Node 0x02 (Audio Output) -> Node 0x0c (Audio Mixer) -> Node 0x17 (
2283 Pin Complex), since Node 0x02 has Amp-out caps, we can adjust
2311 /* disable DAC3 (0x06) selection on NID 0x15 - share Speaker/Bass Speaker DAC 0x03 */
2326 struct alc_spec *spec = codec->spec;
2330 alc_update_gpio_led(codec, 0x10, spec->mute_led_polarity,
2331 !spec->gen.hp_jack_present);
2344 struct alc_spec *spec = codec->spec;
2349 spec->gpio_mask |= 0x10;
2350 spec->gpio_dir |= 0x10;
2351 spec->gen.hp_automute_hook = alc280_hp_gpio4_automute_hook;
2359 struct alc_spec *spec = codec->spec;
2362 spec->gpio_mask |= 0x04;
2363 spec->gpio_dir |= 0x04;
2370 * DAC1 (NID 0x02) -> Speaker (NID 0x14); some eq applied secretly
2371 * DAC2 (NID 0x03) -> Bass (NID 0x17) & Headphone (NID 0x21); sharing a DAC
2372 * DAC3 (NID 0x06) -> Unused, due to the lack of volume amp
2381 struct alc_spec *spec = codec->spec;
2386 spec->gen.preferred_dacs = preferred_pairs;
2407 codec->power_save_node = 1;
2414 struct alc_spec *spec = codec->spec;
2423 spec->gen.preferred_dacs = preferred_pairs;
2424 spec->gen.auto_mute_via_amp = 1;
2425 codec->power_save_node = 0;
2435 * Amp-out capability. Assure the speaker and lineout pin to be
2441 struct alc_spec *spec = codec->spec;
2444 spec->gen.preferred_dacs = preferred_pairs;
2454 struct alc_spec *spec = codec->spec;
2457 spec->gen.preferred_dacs = preferred_pairs;
2472 switch (codec->core.vendor_id) {
2478 alc_update_coef_idx(codec, 0x4a, 0x8000, 1 << 15); /* Reset HP JD */
2488 alc_update_coef_idx(codec, 0x1b, 0x8000, 1 << 15); /* Reset HP JD */
2497 struct alc_spec *spec = codec->spec;
2501 spec->ultra_low_power = true;
2512 struct alc_spec *spec = codec->spec;
2516 if (codec->core.subsystem_id == 0x10280d76)
2517 spec->gen.suppress_auto_mute = 0;
2519 spec->gen.suppress_auto_mute = 1;
2520 spec->gen.suppress_auto_mic = 1;
2521 spec->en_3kpull_low = false;
2619 struct alc_spec *spec = codec->spec;
2624 alc_update_coef_idx(codec, 0x45, 0xf<<12 | 1<<10, 5<<12);
2625 spec->no_internal_mic_pin = true;
2641 struct alc_spec *spec = codec->spec;
2653 spec->micmute_led_polarity = 1;
2655 spec->gpio_mask |= 0x01;
2656 spec->gpio_dir |= 0x01;
2663 /* need to toggle GPIO to enable the amp of back speakers */
2676 struct alc_spec *spec = codec->spec;
2690 spec->gpio_mask |= 0x01;
2691 spec->gpio_dir |= 0x01;
2698 /* need to toggle GPIO to enable the amp of back speakers */
2756 snd_hda_codec_amp_stereo(codec, 0x21, HDA_OUTPUT, 0, -1, 0);
2758 /* Auto-enable headset mic when plugged */
2769 "B&O-Tuned Playback Volume");
2782 codec->beep_just_power_on = true;
2792 snd_hda_enable_beep_device(codec, 1);
2826 struct alc_spec *spec = codec->spec;
2830 spec->gen.suppress_auto_mute = 1;
2838 struct alc_spec *spec = cdc->spec;
2842 hda_component_acpi_device_notify(&spec->comps, handle, event, data);
2848 struct alc_spec *spec = cdc->spec;
2851 ret = hda_component_manager_bind(cdc, &spec->comps);
2856 &spec->comps,
2863 struct alc_spec *spec = cdc->spec;
2865 hda_component_manager_unbind_acpi_notifications(cdc, &spec->comps, comp_acpi_device_notify);
2866 hda_component_manager_unbind(cdc, &spec->comps);
2877 struct alc_spec *spec = cdc->spec;
2879 hda_component_manager_playback_hook(&spec->comps, action);
2885 struct alc_spec *spec = cdc->spec;
2890 ret = hda_component_manager_init(cdc, &spec->comps, count, bus, hid,
2895 spec->gen.pcm_playback_hook = comp_generic_playback_hook;
2898 hda_component_manager_free(&spec->comps, &comp_master_ops);
2912 } acpi_ids[] = {{ "CSC3554", "cs35l54-hda" },
2913 { "CSC3556", "cs35l56-hda" },
2914 { "CSC3557", "cs35l57-hda" }};
2919 adev = acpi_dev_get_first_match_dev(acpi_ids[i].hid, NULL, -1);
2951 * When available the cirrus,dev-index property is an accurate
2956 count_devindex = fwnode_property_count_u32(fwnode, "cirrus,dev-index");
2960 match = devm_kasprintf(dev, GFP_KERNEL, "-%%s:00-%s.%%d", acpi_ids[i].name);
2969 comp_generic_fixup(cdc, action, "i2c", "CSC3551", "-%s:00-cs35l41-hda.%d", 2);
2974 comp_generic_fixup(cdc, action, "i2c", "CSC3551", "-%s:00-cs35l41-hda.%d", 4);
2979 comp_generic_fixup(codec, action, "spi", "CSC3551", "-%s:00-cs35l41-hda.%d", 2);
2984 comp_generic_fixup(codec, action, "spi", "CSC3551", "-%s:00-cs35l41-hda.%d", 1);
2989 comp_generic_fixup(codec, action, "spi", "CSC3551", "-%s:00-cs35l41-hda.%d", 4);
2995 comp_generic_fixup(cdc, action, "i2c", "CLSA0100", "-%s:00-cs35l41-hda.%d", 2);
3001 comp_generic_fixup(cdc, action, "i2c", "CLSA0101", "-%s:00-cs35l41-hda.%d", 2);
3007 * The same SSID has been re-used in different hardware, they have
3010 if (cdc->core.vendor_id != 0x10ec0285)
3017 comp_generic_fixup(cdc, action, "i2c", "TIAS2781", "-%s:00", 1);
3022 comp_generic_fixup(cdc, action, "spi", "TXNW2781", "-%s:00-tas2781-hda.%d", 2);
3028 comp_generic_fixup(cdc, action, "i2c", "TXNW2781", "-%s:00-tas2781-hda.%d", 1);
3034 comp_generic_fixup(cdc, action, "i2c", "INT8866", "-%s:00", 1);
3066 * plugged-in state, while the internal microphone is always in an
3102 if (codec->core.vendor_id == 0x10ec0256) {
3103 alc_update_coef_idx(codec, 0x10, 1<<9, 0);
3120 nsteps = ((caps & AC_AMPCAP_NUM_STEPS) >> AC_AMPCAP_NUM_STEPS_SHIFT) - 10;
3121 offs = ((caps & AC_AMPCAP_OFFSET) >> AC_AMPCAP_OFFSET_SHIFT) - 10;
3133 struct alc_spec *spec = codec->spec;
3134 struct hda_input_mux *imux = &spec->gen.input_mux;
3143 * to Hi-Z to avoid pop noises at startup and when plugging and
3154 for (i = 0; i < imux->num_items; i++) {
3155 if (spec->gen.imux_pins[i] == 0x12) {
3156 spec->gen.cur_mux[0] = i;
3190 struct alc_spec *spec = codec->spec;
3199 spec->gen.preferred_dacs = preferred_pairs;
3219 struct alc_spec *spec = codec->spec;
3227 spec->gen.preferred_dacs = preferred_pairs;
3236 struct alc_spec *spec = codec->spec;
3246 spec->gen.preferred_dacs = preferred_pairs;
3247 spec->gen.auto_mute_via_amp = 1;
3248 if (spec->gen.autocfg.speaker_pins[0] != 0x14) {
3258 struct alc_spec *spec = codec->spec;
3267 alc_update_coef_idx(codec, 0x45, 0xf<<12 | 1<<10, 5<<12);
3268 spec->parse_flags |= HDA_PINCFG_HEADSET_MIC;
3315 struct alc_spec *spec = codec->spec;
3330 spec->gpio_mask |= 0x01;
3331 spec->gpio_dir |= 0x01;
3336 /* need to toggle GPIO to enable the amp of back speakers */
3351 struct alc_spec *spec = codec->spec;
3356 spec->gen.auto_mute_via_amp = 1;
3394 struct alc_spec *spec = codec->spec;
3404 alc_update_coef_idx(codec, 0x10, 1<<11, 1<<11);
3406 spec->power_hook = alc287_s4_power_gpio3_default;
3407 spec->gen.pcm_playback_hook = alc287_alc1318_playback_pcm_hook;
3750 if (codec->core.vendor_id == 0x10ec0298)
3862 { 0x1a, 0x2101103f }, /* dock line-out */
3863 { 0x1b, 0x23a11040 }, /* dock mic-in */
3924 { 0x19, 0x99a3092f }, /* int-mic */
3931 { 0x12, 0x99a3092f }, /* int-mic */
3943 { 0x19, 0x99a3092f }, /* int-mic */
3951 { 0x12, 0x99a3092f }, /* int-mic */
4145 { 0x1b, 0x99a7012f }, /* int-mic */
4165 { 0x12, 0x99a3092f }, /* int-mic */
4190 /* class-D output amp +5dB */
4216 { 0x12, 0x99a3092f }, /* int-mic */
4413 { 0x1b, 0x21011020 }, /* line-out */
4415 { 0x18, 0x2181103f }, /* line-in */
4424 { 0x1b, 0x21011020 }, /* line-out */
4425 { 0x18, 0x2181103f }, /* line-in */
4572 /* Disable pass-through path for FRONT 14h */
4937 /* Disable PCBEEP-IN passthrough */
5073 /* The GPIO must be pulled to initialize the AMP */
5156 /* set 0x15 to HP-OUT ctrl */
5189 /* set 0x15 to HP-OUT ctrl */
5193 /* set 0x1b to HP-OUT */
6174 SND_PCI_QUIRK(0x1025, 0x072d, "Acer Aspire V5-571G", ALC269_FIXUP_ASPIRE_HEADSET_MIC),
6177 SND_PCI_QUIRK(0x1025, 0x0762, "Acer Aspire E1-472", ALC271_FIXUP_HP_GATE_MIC_JACK_E1_572),
6178 SND_PCI_QUIRK(0x1025, 0x0775, "Acer Aspire E1-572", ALC271_FIXUP_HP_GATE_MIC_JACK_E1_572),
6179 SND_PCI_QUIRK(0x1025, 0x079b, "Acer Aspire V5-573G", ALC282_FIXUP_ASPIRE_V5_PINS),
6180 SND_PCI_QUIRK(0x1025, 0x080d, "Acer Aspire V5-122P", ALC269_FIXUP_ASPIRE_HEADSET_MIC),
6182 SND_PCI_QUIRK(0x1025, 0x100c, "Acer Aspire E5-574G", ALC255_FIXUP_ACER_LIMIT_INT_MIC_BOOST),
6184 SND_PCI_QUIRK(0x1025, 0x102b, "Acer Aspire C24-860", ALC286_FIXUP_ACER_AIO_MIC_NO_PRESENCE),
6185 SND_PCI_QUIRK(0x1025, 0x1065, "Acer Aspire C20-820", ALC269VC_FIXUP_ACER_HEADSET_MIC),
6187 SND_PCI_QUIRK(0x1025, 0x1094, "Acer Aspire E5-575T", ALC255_FIXUP_ACER_LIMIT_INT_MIC_BOOST),
6188 SND_PCI_QUIRK(0x1025, 0x1099, "Acer Aspire E5-523G", ALC255_FIXUP_ACER_MIC_NO_PRESENCE),
6189 SND_PCI_QUIRK(0x1025, 0x110e, "Acer Aspire ES1-432", ALC255_FIXUP_ACER_MIC_NO_PRESENCE),
6192 SND_PCI_QUIRK(0x1025, 0x1177, "Acer Predator G9-593", ALC255_FIXUP_PREDATOR_SUBWOOFER),
6193 SND_PCI_QUIRK(0x1025, 0x1178, "Acer Predator G9-593", ALC255_FIXUP_PREDATOR_SUBWOOFER),
6197 SND_PCI_QUIRK(0x1025, 0x1269, "Acer SWIFT SF314-54", ALC256_FIXUP_ACER_HEADSET_MIC),
6198 SND_PCI_QUIRK(0x1025, 0x126a, "Acer Swift SF114-32", ALC256_FIXUP_ACER_MIC_NO_PRESENCE),
6202 SND_PCI_QUIRK(0x1025, 0x129c, "Acer SWIFT SF314-55", ALC256_FIXUP_ACER_HEADSET_MIC),
6203 SND_PCI_QUIRK(0x1025, 0x129d, "Acer SWIFT SF313-51", ALC256_FIXUP_ACER_MIC_NO_PRESENCE),
6204 SND_PCI_QUIRK(0x1025, 0x1300, "Acer SWIFT SF314-56", ALC256_FIXUP_ACER_MIC_NO_PRESENCE),
6205 SND_PCI_QUIRK(0x1025, 0x1308, "Acer Aspire Z24-890", ALC286_FIXUP_ACER_AIO_HEADSET_MIC),
6206 SND_PCI_QUIRK(0x1025, 0x132a, "Acer TravelMate B114-21", ALC233_FIXUP_ACER_HEADSET_MIC),
6207 SND_PCI_QUIRK(0x1025, 0x1330, "Acer TravelMate X514-51T", ALC255_FIXUP_ACER_HEADSET_MIC),
6209 SND_PCI_QUIRK(0x1025, 0x141f, "Acer Spin SP513-54N", ALC255_FIXUP_ACER_MIC_NO_PRESENCE),
6210 SND_PCI_QUIRK(0x1025, 0x142b, "Acer Swift SF314-42", ALC255_FIXUP_ACER_MIC_NO_PRESENCE),
6211 SND_PCI_QUIRK(0x1025, 0x1430, "Acer TravelMate B311R-31", ALC256_FIXUP_ACER_MIC_NO_PRESENCE),
6212 SND_PCI_QUIRK(0x1025, 0x1466, "Acer Aspire A515-56", ALC255_FIXUP_ACER_HEADPHONE_AND_MIC),
6213 SND_PCI_QUIRK(0x1025, 0x1534, "Acer Predator PH315-54", ALC255_FIXUP_ACER_MIC_NO_PRESENCE),
6214 SND_PCI_QUIRK(0x1025, 0x159c, "Acer Nitro 5 AN515-58", ALC2XX_FIXUP_HEADSET_MIC),
6221 SND_PCI_QUIRK(0x1028, 0x054b, "Dell XPS one 2710", ALC275_FIXUP_DELL_XPS),
6238 SND_PCI_QUIRK(0x1028, 0x0665, "Dell XPS 13", ALC288_FIXUP_DELL_XPS_13),
6252 SND_PCI_QUIRK(0x1028, 0x075c, "Dell XPS 27 7760", ALC298_FIXUP_SPK_VOLUME),
6274 SND_PCI_QUIRK(0x1028, 0x0a61, "Dell XPS 15 9510", ALC289_FIXUP_DUAL_SPK),
6278 SND_PCI_QUIRK(0x1028, 0x0b19, "Dell XPS 15 9520", ALC289_FIXUP_DUAL_SPK),
6282 SND_PCI_QUIRK(0x1028, 0x0b37, "Dell Inspiron 16 Plus 7620 2-in-1", ALC295_FIXUP_DELL_INSPIRON_TOP_SPEAKERS),
6284 SND_PCI_QUIRK(0x1028, 0x0beb, "Dell XPS 15 9530 (2023)", ALC289_FIXUP_DELL_CS35L41_SPI_2),
6286 SND_PCI_QUIRK(0x1028, 0x0c0b, "Dell Oasis 14 RPL-P", ALC289_FIXUP_RTK_AMP_DUAL_SPK),
6299 SND_PCI_QUIRK(0x1028, 0x0cbd, "Dell Oasis 13 CS MTL-U", ALC289_FIXUP_DELL_CS35L41_SPI_2),
6300 SND_PCI_QUIRK(0x1028, 0x0cbe, "Dell Oasis 13 2-IN-1 MTL-U", ALC289_FIXUP_DELL_CS35L41_SPI_2),
6301 SND_PCI_QUIRK(0x1028, 0x0cbf, "Dell Oasis 13 Low Weight MTU-L", ALC289_FIXUP_DELL_CS35L41_SPI_2),
6303 SND_PCI_QUIRK(0x1028, 0x0cc1, "Dell Oasis 14 MTL-H/U", ALC289_FIXUP_DELL_CS35L41_SPI_2),
6304 SND_PCI_QUIRK(0x1028, 0x0cc2, "Dell Oasis 14 2-in-1 MTL-H/U", ALC289_FIXUP_DELL_CS35L41_SPI_2),
6305 SND_PCI_QUIRK(0x1028, 0x0cc3, "Dell Oasis 14 Low Weight MTL-U", ALC289_FIXUP_DELL_CS35L41_SPI_2),
6306 SND_PCI_QUIRK(0x1028, 0x0cc4, "Dell Oasis 16 MTL-H/U", ALC289_FIXUP_DELL_CS35L41_SPI_2),
6379 SND_PCI_QUIRK(0x103c, 0x841c, "HP Pavilion 15-CK0xx", ALC269_FIXUP_HP_MUTE_LED_MIC3),
6382 SND_PCI_QUIRK(0x103c, 0x84ae, "HP 15-db0403ng", ALC236_FIXUP_HP_MUTE_LED_COEFBIT2),
6383 SND_PCI_QUIRK(0x103c, 0x84da, "HP OMEN dc0019-ur", ALC295_FIXUP_HP_OMEN),
6385 SND_PCI_QUIRK(0x103c, 0x8519, "HP Spectre x360 15-df0xxx", ALC285_FIXUP_HP_SPECTRE_X360),
6389 SND_PCI_QUIRK(0x103c, 0x85c6, "HP Pavilion x360 Convertible 14-dy1xxx", ALC295_FIXUP_HP_MUTE_LED_COEFBIT11),
6390 SND_PCI_QUIRK(0x103c, 0x85de, "HP Envy x360 13-ar0xxx", ALC285_FIXUP_HP_ENVY_X360),
6394 SND_PCI_QUIRK(0x103c, 0x86c1, "HP Laptop 15-da3001TU", ALC236_FIXUP_HP_MUTE_LED_COEFBIT2),
6396 SND_PCI_QUIRK(0x103c, 0x86e7, "HP Spectre x360 15-eb0xxx", ALC285_FIXUP_HP_SPECTRE_X360_EB1),
6397 SND_PCI_QUIRK(0x103c, 0x863e, "HP Spectre x360 15-df1xxx", ALC285_FIXUP_HP_SPECTRE_X360_DF1),
6398 SND_PCI_QUIRK(0x103c, 0x86e8, "HP Spectre x360 15-eb0xxx", ALC285_FIXUP_HP_SPECTRE_X360_EB1),
6399 SND_PCI_QUIRK(0x103c, 0x86f9, "HP Spectre x360 13-aw0xxx", ALC285_FIXUP_HP_SPECTRE_X360_MUTE_LED),
6409 SND_PCI_QUIRK(0x103c, 0x876e, "HP ENVY x360 Convertible 13-ay0xxx", ALC245_FIXUP_HP_X360_MUTE_LEDS),
6419 SND_PCI_QUIRK(0x103c, 0x87b7, "HP Laptop 14-fq0xxx", ALC236_FIXUP_HP_MUTE_LED_COEFBIT2),
6421 SND_PCI_QUIRK(0x103c, 0x87cc, "HP Pavilion 15-eg0xxx", ALC287_FIXUP_HP_GPIO_LED),
6422 SND_PCI_QUIRK(0x103c, 0x87d3, "HP Laptop 15-gw0xxx", ALC236_FIXUP_HP_MUTE_LED_COEFBIT2),
6432 SND_PCI_QUIRK(0x103c, 0x87fd, "HP Laptop 14-dq2xxx", ALC236_FIXUP_HP_MUTE_LED_COEFBIT2),
6433 SND_PCI_QUIRK(0x103c, 0x87fe, "HP Laptop 15s-fq2xxx", ALC236_FIXUP_HP_MUTE_LED_COEFBIT2),
6436 SND_PCI_QUIRK(0x103c, 0x8811, "HP Spectre x360 15-eb1xxx", ALC285_FIXUP_HP_SPECTRE_X360_EB1),
6437 SND_PCI_QUIRK(0x103c, 0x8812, "HP Spectre x360 15-eb1xxx", ALC285_FIXUP_HP_SPECTRE_X360_EB1),
6439 SND_PCI_QUIRK(0x103c, 0x881e, "HP Laptop 15s-du3xxx", ALC236_FIXUP_HP_MUTE_LED_COEFBIT2),
6449 SND_PCI_QUIRK(0x103c, 0x887a, "HP Laptop 15s-eq2xxx", ALC236_FIXUP_HP_MUTE_LED_COEFBIT2),
6450 SND_PCI_QUIRK(0x103c, 0x887c, "HP Laptop 14s-fq1xxx", ALC236_FIXUP_HP_MUTE_LED_COEFBIT2),
6451 SND_PCI_QUIRK(0x103c, 0x888a, "HP ENVY x360 Convertible 15-eu0xxx", ALC245_FIXUP_HP_X360_MUTE_LEDS),
6456 SND_PCI_QUIRK(0x103c, 0x88d0, "HP Pavilion 15-eh1xxx (mainboard 88D0)", ALC287_FIXUP_HP_GPIO_LED),
6457 SND_PCI_QUIRK(0x103c, 0x88dd, "HP Pavilion 15z-ec200", ALC285_FIXUP_HP_MUTE_LED),
6460 SND_PCI_QUIRK(0x103c, 0x8919, "HP Pavilion Aero Laptop 13-be0xxx", ALC287_FIXUP_HP_GPIO_LED),
6470 SND_PCI_QUIRK(0x103c, 0x898a, "HP Pavilion 15-eg100", ALC287_FIXUP_HP_GPIO_LED),
6477 SND_PCI_QUIRK(0x103c, 0x89a0, "HP Laptop 15-dw4xxx", ALC236_FIXUP_HP_MUTE_LED_COEFBIT2),
6488 SND_PCI_QUIRK(0x103c, 0x89da, "HP Spectre x360 14t-ea100", ALC245_FIXUP_HP_SPECTRE_X360_EU0XXX),
6490 SND_PCI_QUIRK(0x103c, 0x8a0f, "HP Pavilion 14-ec1xxx", ALC287_FIXUP_HP_GPIO_LED),
6491 SND_PCI_QUIRK(0x103c, 0x8a20, "HP Laptop 15s-fq5xxx", ALC236_FIXUP_HP_MUTE_LED_COEFBIT2),
6492 SND_PCI_QUIRK(0x103c, 0x8a25, "HP Victus 16-d1xxx (MB 8A25)", ALC245_FIXUP_HP_MUTE_LED_COEFBIT),
6493 SND_PCI_QUIRK(0x103c, 0x8a26, "HP Victus 16-d1xxx (MB 8A26)", ALC245_FIXUP_HP_MUTE_LED_COEFBIT),
6503 SND_PCI_QUIRK(0x103c, 0x8a4f, "HP Victus 15-fa0xxx (MB 8A4F)", ALC245_FIXUP_HP_MUTE_LED_COEFBIT),
6549 SND_PCI_QUIRK(0x103c, 0x8bbe, "HP Victus 16-r0xxx (MB 8BBE)", ALC245_FIXUP_HP_MUTE_LED_COEFBIT),
6550 SND_PCI_QUIRK(0x103c, 0x8bc8, "HP Victus 15-fa1xxx", ALC245_FIXUP_HP_MUTE_LED_COEFBIT),
6551 SND_PCI_QUIRK(0x103c, 0x8bcd, "HP Omen 16-xd0xxx", ALC245_FIXUP_HP_MUTE_LED_V1_COEFBIT),
6552 SND_PCI_QUIRK(0x103c, 0x8bd4, "HP Victus 16-s0xxx (MB 8BD4)", ALC245_FIXUP_HP_MUTE_LED_COEFBIT),
6566 SND_PCI_QUIRK(0x103c, 0x8c15, "HP Spectre x360 2-in-1 Laptop 14-eu0xxx", ALC245_FIXUP_HP_SPECTRE_X360_EU0XXX),
6567 SND_PCI_QUIRK(0x103c, 0x8c16, "HP Spectre x360 2-in-1 Laptop 16-aa0xxx", ALC245_FIXUP_HP_SPECTRE_X360_16_AA0XXX),
6569 SND_PCI_QUIRK(0x103c, 0x8c21, "HP Pavilion Plus Laptop 14-ey0XXX", ALC245_FIXUP_HP_X360_MUTE_LEDS),
6570 SND_PCI_QUIRK(0x103c, 0x8c30, "HP Victus 15-fb1xxx", ALC245_FIXUP_HP_MUTE_LED_COEFBIT),
6574 SND_PCI_QUIRK(0x103c, 0x8c49, "HP Elite x360 830 2-in-1 G11", ALC245_FIXUP_CS35L41_SPI_2_HP_GPIO_LED),
6581 SND_PCI_QUIRK(0x103c, 0x8c53, "HP Elite x360 1040 2-in-1 G11", ALC285_FIXUP_HP_GPIO_LED),
6605 SND_PCI_QUIRK(0x103c, 0x8c99, "HP Victus 16-r1xxx (MB 8C99)", ALC245_FIXUP_HP_MUTE_LED_COEFBIT),
6606 SND_PCI_QUIRK(0x103c, 0x8c9c, "HP Victus 16-s1xxx (MB 8C9C)", ALC245_FIXUP_HP_MUTE_LED_COEFBIT),
6612 SND_PCI_QUIRK(0x103c, 0x8cbd, "HP Pavilion Aero Laptop 13-bg0xxx", ALC245_FIXUP_HP_X360_MUTE_LEDS),
6619 SND_PCI_QUIRK(0x103c, 0x8d07, "HP Victus 15-fb2xxx (MB 8D07)", ALC245_FIXUP_HP_MUTE_LED_COEFBIT),
6843 SND_PCI_QUIRK(0x10ec, 0x11bc, "VAIO VJFE-IL", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
6850 SND_PCI_QUIRK(0x10f7, 0x8338, "Panasonic CF-SZ6", ALC269_FIXUP_ASPIRE_HEADSET_MIC),
6852 SND_PCI_QUIRK(0x144d, 0xc169, "Samsung Notebook 9 Pen (NP930SBE-K01US)", ALC298_FIXUP_SAMSUNG_AMP),
6853 SND_PCI_QUIRK(0x144d, 0xc176, "Samsung Notebook 9 Pro (NP930MBE-K04US)", ALC298_FIXUP_SAMSUNG_AMP),
6854 SND_PCI_QUIRK(0x144d, 0xc189, "Samsung Galaxy Flex Book (NT950QCG-X716)", ALC298_FIXUP_SAMSUNG_AMP),
6855 SND_PCI_QUIRK(0x144d, 0xc18a, "Samsung Galaxy Book Ion (NP930XCJ-K01US)", ALC298_FIXUP_SAMSUNG_AMP),
6856 SND_PCI_QUIRK(0x144d, 0xc1a3, "Samsung Galaxy Book Pro (NP935XDB-KC1SE)", ALC298_FIXUP_SAMSUNG_AMP),
6860 SND_PCI_QUIRK(0x144d, 0xc812, "Samsung Notebook Pen S (NT950SBE-X58)", ALC298_FIXUP_SAMSUNG_AMP),
6861 SND_PCI_QUIRK(0x144d, 0xc830, "Samsung Galaxy Book Ion (NT950XCJ-X716A)", ALC298_FIXUP_SAMSUNG_AMP),
6871 SND_PCI_QUIRK(0x1458, 0xfa53, "Gigabyte BXBT-2807", ALC283_FIXUP_HEADSET_MIC),
6872 SND_PCI_QUIRK(0x1462, 0xb120, "MSI Cubi MS-B120", ALC283_FIXUP_HEADSET_MIC),
6873 SND_PCI_QUIRK(0x1462, 0xb171, "Cubi N 8GL (MS-B171)", ALC283_FIXUP_HEADSET_MIC),
6875 SND_PCI_QUIRK(0x152d, 0x1262, "Huawei NBLB-WAX9N", ALC2XX_FIXUP_HEADSET_MIC),
6920 SND_PCI_QUIRK(0x1558, 0x70f6, "Clevo NH77DPQ-Y", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
6930 SND_PCI_QUIRK(0x1558, 0x8550, "Clevo NH[57][0-9][ER][ACDH]Q", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
6931 SND_PCI_QUIRK(0x1558, 0x8551, "Clevo NH[57][0-9][ER][ACDH]Q", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
6932 SND_PCI_QUIRK(0x1558, 0x8560, "Clevo NH[57][0-9][ER][ACDH]Q", ALC269_FIXUP_HEADSET_MIC),
6933 SND_PCI_QUIRK(0x1558, 0x8561, "Clevo NH[57][0-9][ER][ACDH]Q", ALC269_FIXUP_HEADSET_MIC),
6934 SND_PCI_QUIRK(0x1558, 0x8562, "Clevo NH[57][0-9]RZ[Q]", ALC269_FIXUP_DMIC),
6941 SND_PCI_QUIRK(0x1558, 0x8a20, "Clevo NH55DCQ-Y", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
6942 SND_PCI_QUIRK(0x1558, 0x8a51, "Clevo NH70RCQ-Y", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
6943 SND_PCI_QUIRK(0x1558, 0x8d50, "Clevo NH55RCQ-M", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
6989 SND_PCI_QUIRK(0x17aa, 0x2234, "Thinkpad ICE-1", ALC287_FIXUP_TAS2781_I2C),
7034 HDA_CODEC_QUIRK(0x17aa, 0x3820, "IdeaPad 330-17IKB 81DM", ALC269_FIXUP_ASPIRE_HEADSET_MIC),
7056 SND_PCI_QUIRK(0x17aa, 0x387d, "Yoga S780-16 pro Quad AAC", ALC287_FIXUP_TAS2781_I2C),
7057 SND_PCI_QUIRK(0x17aa, 0x387e, "Yoga S780-16 pro Quad YC", ALC287_FIXUP_TAS2781_I2C),
7058 SND_PCI_QUIRK(0x17aa, 0x387f, "Yoga S780-16 pro dual LX", ALC287_FIXUP_TAS2781_I2C),
7059 SND_PCI_QUIRK(0x17aa, 0x3880, "Yoga S780-16 pro dual YC", ALC287_FIXUP_TAS2781_I2C),
7074 SND_PCI_QUIRK(0x17aa, 0x38b8, "Yoga S780-14.5 proX AMD YC Dual", ALC287_FIXUP_TAS2781_I2C),
7075 SND_PCI_QUIRK(0x17aa, 0x38b9, "Yoga S780-14.5 proX AMD LX Dual", ALC287_FIXUP_TAS2781_I2C),
7076 SND_PCI_QUIRK(0x17aa, 0x38ba, "Yoga S780-14.5 Air AMD quad YC", ALC287_FIXUP_TAS2781_I2C),
7077 SND_PCI_QUIRK(0x17aa, 0x38bb, "Yoga S780-14.5 Air AMD quad AAC", ALC287_FIXUP_TAS2781_I2C),
7078 SND_PCI_QUIRK(0x17aa, 0x38be, "Yoga S980-14.5 proX YC Dual", ALC287_FIXUP_TAS2781_I2C),
7079 SND_PCI_QUIRK(0x17aa, 0x38bf, "Yoga S980-14.5 proX LX Dual", ALC287_FIXUP_TAS2781_I2C),
7086 SND_PCI_QUIRK(0x17aa, 0x38d3, "Yoga S990-16 Pro IMH YC Dual", ALC287_FIXUP_TAS2781_I2C),
7087 SND_PCI_QUIRK(0x17aa, 0x38d4, "Yoga S990-16 Pro IMH VECO Dual", ALC287_FIXUP_TAS2781_I2C),
7088 SND_PCI_QUIRK(0x17aa, 0x38d5, "Yoga S990-16 Pro IMH YC Quad", ALC287_FIXUP_TAS2781_I2C),
7089 SND_PCI_QUIRK(0x17aa, 0x38d6, "Yoga S990-16 Pro IMH VECO Quad", ALC287_FIXUP_TAS2781_I2C),
7098 SND_PCI_QUIRK(0x17aa, 0x3902, "Lenovo E50-80", ALC269_FIXUP_DMIC_THINKPAD_ACPI),
7101 SND_PCI_QUIRK(0x17aa, 0x391f, "Yoga S990-16 pro Quad YC Quad", ALC287_FIXUP_TXNW2781_I2C),
7102 SND_PCI_QUIRK(0x17aa, 0x3920, "Yoga S990-16 pro Quad VECO Quad", ALC287_FIXUP_TXNW2781_I2C),
7106 SND_PCI_QUIRK(0x17aa, 0x3978, "Lenovo B50-70", ALC269_FIXUP_DMIC_THINKPAD_ACPI),
7123 SND_PCI_QUIRK(0x17aa, 0x508b, "Thinkpad X12 Gen 1", ALC287_FIXUP_LEGION_15IMHG05_SPEAKERS),
7135 SND_PCI_QUIRK(0x1854, 0x0489, "LG gram 16 (16Z90R-A)", ALC298_FIXUP_SAMSUNG_AMP_V2_4_AMPS),
7137 SND_PCI_QUIRK(0x19e5, 0x3204, "Huawei MACH-WX9", ALC256_FIXUP_HUAWEI_MACH_WX9_PINS),
7138 SND_PCI_QUIRK(0x19e5, 0x320f, "Huawei WRT-WX9 ", ALC256_FIXUP_ASUS_MIC_NO_PRESENCE),
7139 SND_PCI_QUIRK(0x19e5, 0x3212, "Huawei KLV-WX9 ", ALC256_FIXUP_ACER_HEADSET_MIC),
7143 SND_PCI_QUIRK(0x1b7d, 0xa831, "Ordissimo EVE2 ", ALC269VB_FIXUP_ORDISSIMO_EVE2), /* Also known as Malata PC-B1303 */
7147 SND_PCI_QUIRK(0x1c6c, 0x1251, "Positivo N14KP6-TG", ALC288_FIXUP_DELL1_MIC_NO_PRESENCE),
7167 SND_PCI_QUIRK(0x1ee7, 0x2078, "HONOR BRB-X M1010", ALC2XX_FIXUP_HEADSET_MIC),
7170 SND_PCI_QUIRK(0x2782, 0x0214, "VAIO VJFE-CL", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
7177 SND_PCI_QUIRK(0x2782, 0x1707, "Vaio VJFE-ADL", ALC298_FIXUP_SPK_VOLUME),
7250 {.id = ALC269_FIXUP_AMIC, .name = "laptop-amic"},
7251 {.id = ALC269_FIXUP_DMIC, .name = "laptop-dmic"},
7252 {.id = ALC269_FIXUP_STEREO_DMIC, .name = "alc269-dmic"},
7253 {.id = ALC271_FIXUP_DMIC, .name = "alc271-dmic"},
7254 {.id = ALC269_FIXUP_INV_DMIC, .name = "inv-dmic"},
7255 {.id = ALC269_FIXUP_HEADSET_MIC, .name = "headset-mic"},
7256 {.id = ALC269_FIXUP_HEADSET_MODE, .name = "headset-mode"},
7257 {.id = ALC269_FIXUP_HEADSET_MODE_NO_HP_MIC, .name = "headset-mode-no-hp-mic"},
7258 {.id = ALC269_FIXUP_LENOVO_DOCK, .name = "lenovo-dock"},
7259 {.id = ALC269_FIXUP_LENOVO_DOCK_LIMIT_BOOST, .name = "lenovo-dock-limit-boost"},
7260 {.id = ALC269_FIXUP_HP_GPIO_LED, .name = "hp-gpio-led"},
7261 {.id = ALC269_FIXUP_HP_DOCK_GPIO_MIC1_LED, .name = "hp-dock-gpio-mic1-led"},
7262 {.id = ALC269_FIXUP_DELL1_MIC_NO_PRESENCE, .name = "dell-headset-multi"},
7263 {.id = ALC269_FIXUP_DELL2_MIC_NO_PRESENCE, .name = "dell-headset-dock"},
7264 {.id = ALC269_FIXUP_DELL3_MIC_NO_PRESENCE, .name = "dell-headset3"},
7265 {.id = ALC269_FIXUP_DELL4_MIC_NO_PRESENCE, .name = "dell-headset4"},
7266 {.id = ALC269_FIXUP_DELL4_MIC_NO_PRESENCE_QUIET, .name = "dell-headset4-quiet"},
7267 {.id = ALC283_FIXUP_CHROME_BOOK, .name = "alc283-dac-wcaps"},
7268 {.id = ALC283_FIXUP_SENSE_COMBO_JACK, .name = "alc283-sense-combo"},
7269 {.id = ALC292_FIXUP_TPT440_DOCK, .name = "tpt440-dock"},
7272 {.id = ALC298_FIXUP_TPT470_DOCK_FIX, .name = "tpt470-dock-fix"},
7273 {.id = ALC298_FIXUP_TPT470_DOCK, .name = "tpt470-dock"},
7274 {.id = ALC233_FIXUP_LENOVO_MULTI_CODECS, .name = "dual-codecs"},
7275 {.id = ALC700_FIXUP_INTEL_REFERENCE, .name = "alc700-ref"},
7277 {.id = ALC269_FIXUP_DELL_M101Z, .name = "dell-m101z"},
7278 {.id = ALC269_FIXUP_ASUS_G73JW, .name = "asus-g73jw"},
7279 {.id = ALC269_FIXUP_LENOVO_EAPD, .name = "lenovo-eapd"},
7280 {.id = ALC275_FIXUP_SONY_HWEQ, .name = "sony-hweq"},
7283 {.id = ALC269_FIXUP_LIFEBOOK_EXTMIC, .name = "lifebook-extmic"},
7284 {.id = ALC269_FIXUP_LIFEBOOK_HP_PIN, .name = "lifebook-hp-pin"},
7285 {.id = ALC255_FIXUP_LIFEBOOK_U7x7_HEADSET_MIC, .name = "lifebook-u7x7"},
7286 {.id = ALC269VB_FIXUP_AMIC, .name = "alc269vb-amic"},
7287 {.id = ALC269VB_FIXUP_DMIC, .name = "alc269vb-dmic"},
7288 {.id = ALC269_FIXUP_HP_MUTE_LED_MIC1, .name = "hp-mute-led-mic1"},
7289 {.id = ALC269_FIXUP_HP_MUTE_LED_MIC2, .name = "hp-mute-led-mic2"},
7290 {.id = ALC269_FIXUP_HP_MUTE_LED_MIC3, .name = "hp-mute-led-mic3"},
7291 {.id = ALC269_FIXUP_HP_GPIO_MIC1_LED, .name = "hp-gpio-mic1"},
7292 {.id = ALC269_FIXUP_HP_LINE1_MIC1_LED, .name = "hp-line1-mic1"},
7294 {.id = ALC286_FIXUP_SONY_MIC_NO_PRESENCE, .name = "sony-nomic"},
7295 {.id = ALC269_FIXUP_ASPIRE_HEADSET_MIC, .name = "aspire-headset-mic"},
7296 {.id = ALC269_FIXUP_ASUS_X101, .name = "asus-x101"},
7297 {.id = ALC271_FIXUP_HP_GATE_MIC_JACK, .name = "acer-ao7xx"},
7298 {.id = ALC271_FIXUP_HP_GATE_MIC_JACK_E1_572, .name = "acer-aspire-e1"},
7299 {.id = ALC269_FIXUP_ACER_AC700, .name = "acer-ac700"},
7300 {.id = ALC269_FIXUP_LIMIT_INT_MIC_BOOST, .name = "limit-mic-boost"},
7301 {.id = ALC269VB_FIXUP_ASUS_ZENBOOK, .name = "asus-zenbook"},
7302 {.id = ALC269VB_FIXUP_ASUS_ZENBOOK_UX31A, .name = "asus-zenbook-ux31a"},
7304 {.id = ALC282_FIXUP_ASUS_TX300, .name = "asus-tx300"},
7305 {.id = ALC283_FIXUP_INT_MIC, .name = "alc283-int-mic"},
7306 {.id = ALC290_FIXUP_MONO_SPEAKERS_HSJACK, .name = "mono-speakers"},
7307 {.id = ALC290_FIXUP_SUBWOOFER_HSJACK, .name = "alc290-subwoofer"},
7309 {.id = ALC269_FIXUP_LENOVO_XPAD_ACPI, .name = "lenovo-xpad-led"},
7310 {.id = ALC269_FIXUP_DMIC_THINKPAD_ACPI, .name = "dmic-thinkpad"},
7311 {.id = ALC255_FIXUP_ACER_MIC_NO_PRESENCE, .name = "alc255-acer"},
7312 {.id = ALC255_FIXUP_ASUS_MIC_NO_PRESENCE, .name = "alc255-asus"},
7313 {.id = ALC255_FIXUP_DELL1_MIC_NO_PRESENCE, .name = "alc255-dell1"},
7314 {.id = ALC255_FIXUP_DELL2_MIC_NO_PRESENCE, .name = "alc255-dell2"},
7315 {.id = ALC293_FIXUP_DELL1_MIC_NO_PRESENCE, .name = "alc293-dell1"},
7316 {.id = ALC283_FIXUP_HEADSET_MIC, .name = "alc283-headset"},
7317 {.id = ALC255_FIXUP_MIC_MUTE_LED, .name = "alc255-dell-mute"},
7318 {.id = ALC282_FIXUP_ASPIRE_V5_PINS, .name = "aspire-v5"},
7319 {.id = ALC269VB_FIXUP_ASPIRE_E1_COEF, .name = "aspire-e1-coef"},
7320 {.id = ALC280_FIXUP_HP_GPIO4, .name = "hp-gpio4"},
7321 {.id = ALC286_FIXUP_HP_GPIO_LED, .name = "hp-gpio-led"},
7322 {.id = ALC280_FIXUP_HP_GPIO2_MIC_HOTKEY, .name = "hp-gpio2-hotkey"},
7323 {.id = ALC280_FIXUP_HP_DOCK_PINS, .name = "hp-dock-pins"},
7324 {.id = ALC269_FIXUP_HP_DOCK_GPIO_MIC1_LED, .name = "hp-dock-gpio-mic"},
7325 {.id = ALC280_FIXUP_HP_9480M, .name = "hp-9480m"},
7326 {.id = ALC288_FIXUP_DELL_HEADSET_MODE, .name = "alc288-dell-headset"},
7327 {.id = ALC288_FIXUP_DELL1_MIC_NO_PRESENCE, .name = "alc288-dell1"},
7328 {.id = ALC288_FIXUP_DELL_XPS_13, .name = "alc288-dell-xps13"},
7329 {.id = ALC292_FIXUP_DELL_E7X, .name = "dell-e7x"},
7330 {.id = ALC293_FIXUP_DISABLE_AAMIX_MULTIJACK, .name = "alc293-dell"},
7331 {.id = ALC298_FIXUP_DELL1_MIC_NO_PRESENCE, .name = "alc298-dell1"},
7332 {.id = ALC298_FIXUP_DELL_AIO_MIC_NO_PRESENCE, .name = "alc298-dell-aio"},
7333 {.id = ALC275_FIXUP_DELL_XPS, .name = "alc275-dell-xps"},
7334 {.id = ALC293_FIXUP_LENOVO_SPK_NOISE, .name = "lenovo-spk-noise"},
7335 {.id = ALC233_FIXUP_LENOVO_LINE2_MIC_HOTKEY, .name = "lenovo-hotkey"},
7336 {.id = ALC255_FIXUP_DELL_SPK_NOISE, .name = "dell-spk-noise"},
7337 {.id = ALC225_FIXUP_DELL1_MIC_NO_PRESENCE, .name = "alc225-dell1"},
7338 {.id = ALC295_FIXUP_DISABLE_DAC3, .name = "alc295-disable-dac3"},
7339 {.id = ALC285_FIXUP_SPEAKER2_TO_DAC1, .name = "alc285-speaker2-to-dac1"},
7340 {.id = ALC280_FIXUP_HP_HEADSET_MIC, .name = "alc280-hp-headset"},
7341 {.id = ALC221_FIXUP_HP_FRONT_MIC, .name = "alc221-hp-mic"},
7342 {.id = ALC298_FIXUP_SPK_VOLUME, .name = "alc298-spk-volume"},
7343 {.id = ALC256_FIXUP_DELL_INSPIRON_7559_SUBWOOFER, .name = "dell-inspiron-7559"},
7344 {.id = ALC269_FIXUP_ATIV_BOOK_8, .name = "ativ-book"},
7345 {.id = ALC221_FIXUP_HP_MIC_NO_PRESENCE, .name = "alc221-hp-mic"},
7346 {.id = ALC256_FIXUP_ASUS_HEADSET_MODE, .name = "alc256-asus-headset"},
7347 {.id = ALC256_FIXUP_ASUS_MIC, .name = "alc256-asus-mic"},
7348 {.id = ALC256_FIXUP_ASUS_AIO_GPIO2, .name = "alc256-asus-aio"},
7349 {.id = ALC233_FIXUP_ASUS_MIC_NO_PRESENCE, .name = "alc233-asus"},
7350 {.id = ALC233_FIXUP_EAPD_COEF_AND_MIC_NO_PRESENCE, .name = "alc233-eapd"},
7351 {.id = ALC294_FIXUP_LENOVO_MIC_LOCATION, .name = "alc294-lenovo-mic"},
7352 {.id = ALC225_FIXUP_DELL_WYSE_MIC_NO_PRESENCE, .name = "alc225-wyse"},
7353 {.id = ALC274_FIXUP_DELL_AIO_LINEOUT_VERB, .name = "alc274-dell-aio"},
7354 {.id = ALC255_FIXUP_DUMMY_LINEOUT_VERB, .name = "alc255-dummy-lineout"},
7355 {.id = ALC255_FIXUP_DELL_HEADSET_MIC, .name = "alc255-dell-headset"},
7356 {.id = ALC295_FIXUP_HP_X360, .name = "alc295-hp-x360"},
7357 {.id = ALC225_FIXUP_HEADSET_JACK, .name = "alc-headset-jack"},
7358 {.id = ALC295_FIXUP_CHROME_BOOK, .name = "alc-chrome-book"},
7359 {.id = ALC256_FIXUP_CHROME_BOOK, .name = "alc-2024y-chromebook"},
7360 {.id = ALC299_FIXUP_PREDATOR_SPK, .name = "predator-spk"},
7361 {.id = ALC298_FIXUP_HUAWEI_MBX_STEREO, .name = "huawei-mbx-stereo"},
7362 {.id = ALC256_FIXUP_MEDION_HEADSET_NO_PRESENCE, .name = "alc256-medion-headset"},
7363 {.id = ALC298_FIXUP_SAMSUNG_AMP, .name = "alc298-samsung-amp"},
7364 {.id = ALC298_FIXUP_SAMSUNG_AMP_V2_2_AMPS, .name = "alc298-samsung-amp-v2-2-amps"},
7365 {.id = ALC298_FIXUP_SAMSUNG_AMP_V2_4_AMPS, .name = "alc298-samsung-amp-v2-4-amps"},
7366 {.id = ALC256_FIXUP_SAMSUNG_HEADPHONE_VERY_QUIET, .name = "alc256-samsung-headphone"},
7367 {.id = ALC255_FIXUP_XIAOMI_HEADSET_MIC, .name = "alc255-xiaomi-headset"},
7368 {.id = ALC274_FIXUP_HP_MIC, .name = "alc274-hp-mic-detect"},
7369 {.id = ALC245_FIXUP_HP_X360_AMP, .name = "alc245-hp-x360-amp"},
7370 {.id = ALC295_FIXUP_HP_OMEN, .name = "alc295-hp-omen"},
7371 {.id = ALC285_FIXUP_HP_SPECTRE_X360, .name = "alc285-hp-spectre-x360"},
7372 {.id = ALC285_FIXUP_HP_SPECTRE_X360_EB1, .name = "alc285-hp-spectre-x360-eb1"},
7373 {.id = ALC285_FIXUP_HP_SPECTRE_X360_DF1, .name = "alc285-hp-spectre-x360-df1"},
7374 {.id = ALC285_FIXUP_HP_ENVY_X360, .name = "alc285-hp-envy-x360"},
7375 {.id = ALC287_FIXUP_IDEAPAD_BASS_SPK_AMP, .name = "alc287-ideapad-bass-spk-amp"},
7376 {.id = ALC287_FIXUP_YOGA9_14IAP7_BASS_SPK_PIN, .name = "alc287-yoga9-bass-spk-pin"},
7377 {.id = ALC623_FIXUP_LENOVO_THINKSTATION_P340, .name = "alc623-lenovo-thinkstation-p340"},
7378 {.id = ALC255_FIXUP_ACER_HEADPHONE_AND_MIC, .name = "alc255-acer-headphone-and-mic"},
7379 {.id = ALC285_FIXUP_HP_GPIO_AMP_INIT, .name = "alc285-hp-amp-init"},
7380 {.id = ALC236_FIXUP_LENOVO_INV_DMIC, .name = "alc236-fixup-lenovo-inv-mic"},
7381 {.id = ALC2XX_FIXUP_HEADSET_MIC, .name = "alc2xx-fixup-headset-mic"},
7845 struct alc_spec *spec = codec->spec;
7848 if (spec->codec_variant != ALC269_TYPE_ALC269VB)
7863 alc_update_coef_idx(codec, 0x04, 0, 1<<11);
7868 if (val != -1 && (val & 0x0c00) >> 10 != 0x1) {
7870 alc_write_coef_idx(codec, 0xd, val | (1<<10));
7873 if (val != -1 && (val & 0x01c0) >> 6 != 0x4) {
7875 alc_write_coef_idx(codec, 0x17, val | (1<<7));
7880 alc_update_coef_idx(codec, 0x4, 0, 1<<11);
7885 struct alc_spec *spec = codec->spec;
7888 hda_component_manager_free(&spec->comps, &comp_master_ops);
7904 spec = codec->spec;
7905 spec->gen.shared_mic_vref_pin = 0x18;
7906 codec->power_save_node = 0;
7907 spec->en_3kpull_low = true;
7909 spec->shutup = alc_default_shutup;
7910 spec->init_hook = alc_default_init;
7912 switch (codec->core.vendor_id) {
7914 spec->codec_variant = ALC269_TYPE_ALC269VA;
7917 if (codec->bus->pci &&
7918 codec->bus->pci->subsystem_vendor == 0x1025 &&
7919 spec->cdefine.platform_type == 1)
7921 spec->codec_variant = ALC269_TYPE_ALC269VB;
7924 if (codec->bus->pci &&
7925 codec->bus->pci->subsystem_vendor == 0x17aa &&
7926 codec->bus->pci->subsystem_device == 0x21f3)
7928 spec->codec_variant = ALC269_TYPE_ALC269VC;
7931 spec->codec_variant = ALC269_TYPE_ALC269VD;
7938 spec->shutup = alc269_shutup;
7939 spec->init_hook = alc269_fill_coef;
7945 spec->codec_variant = ALC269_TYPE_ALC280;
7948 spec->codec_variant = ALC269_TYPE_ALC282;
7949 spec->shutup = alc282_shutup;
7950 spec->init_hook = alc282_init;
7954 spec->codec_variant = ALC269_TYPE_ALC283;
7955 spec->shutup = alc283_shutup;
7956 spec->init_hook = alc283_init;
7960 spec->codec_variant = ALC269_TYPE_ALC284;
7963 spec->codec_variant = ALC269_TYPE_ALC293;
7967 spec->codec_variant = ALC269_TYPE_ALC286;
7970 spec->codec_variant = ALC269_TYPE_ALC298;
7974 spec->codec_variant = ALC269_TYPE_ALC255;
7975 spec->shutup = alc256_shutup;
7976 spec->init_hook = alc256_init;
7982 spec->codec_variant = ALC269_TYPE_ALC256;
7983 spec->shutup = alc256_shutup;
7984 spec->init_hook = alc256_init;
7985 spec->gen.mixer_nid = 0; /* ALC256 does not have any loopback mixer path */
7986 if (codec->core.vendor_id == 0x10ec0236 &&
7987 codec->bus->pci->vendor != PCI_VENDOR_ID_AMD)
7988 spec->en_3kpull_low = false;
7991 spec->codec_variant = ALC269_TYPE_ALC257;
7992 spec->shutup = alc256_shutup;
7993 spec->init_hook = alc256_init;
7994 spec->gen.mixer_nid = 0;
7995 spec->en_3kpull_low = false;
8002 spec->codec_variant = ALC269_TYPE_ALC245;
8004 spec->codec_variant = ALC269_TYPE_ALC215;
8005 spec->shutup = alc225_shutup;
8006 spec->init_hook = alc225_init;
8007 spec->gen.mixer_nid = 0;
8012 spec->codec_variant = ALC269_TYPE_ALC225;
8013 spec->shutup = alc225_shutup;
8014 spec->init_hook = alc225_init;
8015 spec->gen.mixer_nid = 0; /* no loopback on ALC225, ALC295 and ALC299 */
8018 spec->codec_variant = ALC269_TYPE_ALC287;
8019 spec->shutup = alc225_shutup;
8020 spec->init_hook = alc225_init;
8021 spec->gen.mixer_nid = 0; /* no loopback on ALC287 */
8026 spec->codec_variant = ALC269_TYPE_ALC294;
8027 spec->gen.mixer_nid = 0; /* ALC2x4 does not have any loopback mixer path */
8028 alc_update_coef_idx(codec, 0x6b, 0x0018, (1<<4) | (1<<3)); /* UAJ MIC Vref control by verb */
8029 spec->init_hook = alc294_init;
8032 spec->codec_variant = ALC269_TYPE_ALC300;
8033 spec->gen.mixer_nid = 0; /* no loopback on ALC300 */
8037 spec->codec_variant = ALC269_TYPE_ALC623;
8038 spec->shutup = alc222_shutup;
8039 spec->init_hook = alc222_init;
8045 spec->codec_variant = ALC269_TYPE_ALC700;
8046 spec->gen.mixer_nid = 0; /* ALC700 does not have any loopback mixer path */
8047 alc_update_coef_idx(codec, 0x4a, 1 << 15, 0); /* Combo jack auto trigger control */
8048 spec->init_hook = alc294_init;
8054 spec->has_alc5505_dsp = 1;
8055 spec->init_hook = alc5505_dsp_init;
8066 if (codec->fixup_id == ALC282_FIXUP_ASUS_TX300 &&
8067 codec->core.vendor_id == 0x10ec0294) {
8069 codec->fixup_id = HDA_FIXUP_ID_NOT_SET;
8088 spec->gen.beep_nid = 0x01;
8095 if (!spec->gen.no_analog && spec->gen.beep_nid && spec->gen.mixer_nid) {
8096 err = set_beep_amp(spec, spec->gen.mixer_nid, 0x04, HDA_INPUT);
8174 MODULE_DESCRIPTION("Realtek ALC269 and compatible HD-audio codecs");