File Index
Files and directories
Sign in
FILE

alc269.c

File preview with syntax highlighting.

linux-6.19.14/sound/hda/codecs/realtek/alc269.c C
   1// SPDX-License-Identifier: GPL-2.0-or-later
   2//
   3// Realtek ALC269 and compatible codecs
   4//
   5
   6#include <linux/init.h>
   7#include <linux/module.h>
   8#include "realtek.h"
   9
  10/* keep halting ALC5505 DSP, for power saving */
  11#define HALT_REALTEK_ALC5505
  12
  13static const struct hda_pcm_stream alc269_44k_pcm_analog_playback = {
  14	.rates = SNDRV_PCM_RATE_44100, /* fixed rate */
  15};
  16
  17static const struct hda_pcm_stream alc269_44k_pcm_analog_capture = {
  18	.rates = SNDRV_PCM_RATE_44100, /* fixed rate */
  19};
  20
  21/* different alc269-variants */
  22enum {
  23	ALC269_TYPE_ALC269VA,
  24	ALC269_TYPE_ALC269VB,
  25	ALC269_TYPE_ALC269VC,
  26	ALC269_TYPE_ALC269VD,
  27	ALC269_TYPE_ALC280,
  28	ALC269_TYPE_ALC282,
  29	ALC269_TYPE_ALC283,
  30	ALC269_TYPE_ALC284,
  31	ALC269_TYPE_ALC293,
  32	ALC269_TYPE_ALC286,
  33	ALC269_TYPE_ALC298,
  34	ALC269_TYPE_ALC255,
  35	ALC269_TYPE_ALC256,
  36	ALC269_TYPE_ALC257,
  37	ALC269_TYPE_ALC215,
  38	ALC269_TYPE_ALC225,
  39	ALC269_TYPE_ALC245,
  40	ALC269_TYPE_ALC287,
  41	ALC269_TYPE_ALC294,
  42	ALC269_TYPE_ALC300,
  43	ALC269_TYPE_ALC623,
  44	ALC269_TYPE_ALC700,
  45};
  46
  47/*
  48 * BIOS auto configuration
  49 */
  50static int alc269_parse_auto_config(struct hda_codec *codec)
  51{
  52	static const hda_nid_t alc269_ignore[] = { 0x1d, 0 };
  53	static const hda_nid_t alc269_ssids[] = { 0, 0x1b, 0x14, 0x21 };
  54	static const hda_nid_t alc269va_ssids[] = { 0x15, 0x1b, 0x14, 0 };
  55	struct alc_spec *spec = codec->spec;
  56	const hda_nid_t *ssids;
  57
  58	switch (spec->codec_variant) {
  59	case ALC269_TYPE_ALC269VA:
  60	case ALC269_TYPE_ALC269VC:
  61	case ALC269_TYPE_ALC280:
  62	case ALC269_TYPE_ALC284:
  63	case ALC269_TYPE_ALC293:
  64		ssids = alc269va_ssids;
  65		break;
  66	case ALC269_TYPE_ALC269VB:
  67	case ALC269_TYPE_ALC269VD:
  68	case ALC269_TYPE_ALC282:
  69	case ALC269_TYPE_ALC283:
  70	case ALC269_TYPE_ALC286:
  71	case ALC269_TYPE_ALC298:
  72	case ALC269_TYPE_ALC255:
  73	case ALC269_TYPE_ALC256:
  74	case ALC269_TYPE_ALC257:
  75	case ALC269_TYPE_ALC215:
  76	case ALC269_TYPE_ALC225:
  77	case ALC269_TYPE_ALC245:
  78	case ALC269_TYPE_ALC287:
  79	case ALC269_TYPE_ALC294:
  80	case ALC269_TYPE_ALC300:
  81	case ALC269_TYPE_ALC623:
  82	case ALC269_TYPE_ALC700:
  83		ssids = alc269_ssids;
  84		break;
  85	default:
  86		ssids = alc269_ssids;
  87		break;
  88	}
  89
  90	return alc_parse_auto_config(codec, alc269_ignore, ssids);
  91}
  92
  93static const struct hda_jack_keymap alc_headset_btn_keymap[] = {
  94	{ SND_JACK_BTN_0, KEY_PLAYPAUSE },
  95	{ SND_JACK_BTN_1, KEY_VOICECOMMAND },
  96	{ SND_JACK_BTN_2, KEY_VOLUMEUP },
  97	{ SND_JACK_BTN_3, KEY_VOLUMEDOWN },
  98	{}
  99};
 100
 101static void alc_headset_btn_callback(struct hda_codec *codec,
 102				     struct hda_jack_callback *jack)
 103{
 104	int report = 0;
 105
 106	if (jack->unsol_res & (7 << 13))
 107		report |= SND_JACK_BTN_0;
 108
 109	if (jack->unsol_res  & (1 << 16 | 3 << 8))
 110		report |= SND_JACK_BTN_1;
 111
 112	/* Volume up key */
 113	if (jack->unsol_res & (7 << 23))
 114		report |= SND_JACK_BTN_2;
 115
 116	/* Volume down key */
 117	if (jack->unsol_res & (7 << 10))
 118		report |= SND_JACK_BTN_3;
 119
 120	snd_hda_jack_set_button_state(codec, jack->nid, report);
 121}
 122
 123static void alc_disable_headset_jack_key(struct hda_codec *codec)
 124{
 125	struct alc_spec *spec = codec->spec;
 126
 127	if (!spec->has_hs_key)
 128		return;
 129
 130	switch (codec->core.vendor_id) {
 131	case 0x10ec0215:
 132	case 0x10ec0225:
 133	case 0x10ec0285:
 134	case 0x10ec0287:
 135	case 0x10ec0295:
 136	case 0x10ec0289:
 137	case 0x10ec0299:
 138		alc_write_coef_idx(codec, 0x48, 0x0);
 139		alc_update_coef_idx(codec, 0x49, 0x0045, 0x0);
 140		alc_update_coef_idx(codec, 0x44, 0x0045 << 8, 0x0);
 141		break;
 142	case 0x10ec0230:
 143	case 0x10ec0236:
 144	case 0x10ec0256:
 145	case 0x10ec0257:
 146	case 0x19e58326:
 147		alc_write_coef_idx(codec, 0x48, 0x0);
 148		alc_update_coef_idx(codec, 0x49, 0x0045, 0x0);
 149		break;
 150	}
 151}
 152
 153static void alc_enable_headset_jack_key(struct hda_codec *codec)
 154{
 155	struct alc_spec *spec = codec->spec;
 156
 157	if (!spec->has_hs_key)
 158		return;
 159
 160	switch (codec->core.vendor_id) {
 161	case 0x10ec0215:
 162	case 0x10ec0225:
 163	case 0x10ec0285:
 164	case 0x10ec0287:
 165	case 0x10ec0295:
 166	case 0x10ec0289:
 167	case 0x10ec0299:
 168		alc_write_coef_idx(codec, 0x48, 0xd011);
 169		alc_update_coef_idx(codec, 0x49, 0x007f, 0x0045);
 170		alc_update_coef_idx(codec, 0x44, 0x007f << 8, 0x0045 << 8);
 171		break;
 172	case 0x10ec0230:
 173	case 0x10ec0236:
 174	case 0x10ec0256:
 175	case 0x10ec0257:
 176	case 0x19e58326:
 177		alc_write_coef_idx(codec, 0x48, 0xd011);
 178		alc_update_coef_idx(codec, 0x49, 0x007f, 0x0045);
 179		break;
 180	}
 181}
 182
 183static void alc_fixup_headset_jack(struct hda_codec *codec,
 184				    const struct hda_fixup *fix, int action)
 185{
 186	struct alc_spec *spec = codec->spec;
 187	hda_nid_t hp_pin;
 188
 189	switch (action) {
 190	case HDA_FIXUP_ACT_PRE_PROBE:
 191		spec->has_hs_key = 1;
 192		snd_hda_jack_detect_enable_callback(codec, 0x55,
 193						    alc_headset_btn_callback);
 194		break;
 195	case HDA_FIXUP_ACT_BUILD:
 196		hp_pin = alc_get_hp_pin(spec);
 197		if (!hp_pin || snd_hda_jack_bind_keymap(codec, 0x55,
 198							alc_headset_btn_keymap,
 199							hp_pin))
 200			snd_hda_jack_add_kctl(codec, 0x55, "Headset Jack",
 201					      false, SND_JACK_HEADSET,
 202					      alc_headset_btn_keymap);
 203
 204		alc_enable_headset_jack_key(codec);
 205		break;
 206	}
 207}
 208
 209static void alc269vb_toggle_power_output(struct hda_codec *codec, int power_up)
 210{
 211	alc_update_coef_idx(codec, 0x04, 1 << 11, power_up ? (1 << 11) : 0);
 212}
 213
 214static void alc269_shutup(struct hda_codec *codec)
 215{
 216	struct alc_spec *spec = codec->spec;
 217
 218	if (spec->codec_variant == ALC269_TYPE_ALC269VB)
 219		alc269vb_toggle_power_output(codec, 0);
 220	if (spec->codec_variant == ALC269_TYPE_ALC269VB &&
 221			(alc_get_coef0(codec) & 0x00ff) == 0x018) {
 222		msleep(150);
 223	}
 224	alc_shutup_pins(codec);
 225}
 226
 227static const struct coef_fw alc282_coefs[] = {
 228	WRITE_COEF(0x03, 0x0002), /* Power Down Control */
 229	UPDATE_COEF(0x05, 0xff3f, 0x0700), /* FIFO and filter clock */
 230	WRITE_COEF(0x07, 0x0200), /* DMIC control */
 231	UPDATE_COEF(0x06, 0x00f0, 0), /* Analog clock */
 232	UPDATE_COEF(0x08, 0xfffc, 0x0c2c), /* JD */
 233	WRITE_COEF(0x0a, 0xcccc), /* JD offset1 */
 234	WRITE_COEF(0x0b, 0xcccc), /* JD offset2 */
 235	WRITE_COEF(0x0e, 0x6e00), /* LDO1/2/3, DAC/ADC */
 236	UPDATE_COEF(0x0f, 0xf800, 0x1000), /* JD */
 237	UPDATE_COEF(0x10, 0xfc00, 0x0c00), /* Capless */
 238	WRITE_COEF(0x6f, 0x0), /* Class D test 4 */
 239	UPDATE_COEF(0x0c, 0xfe00, 0), /* IO power down directly */
 240	WRITE_COEF(0x34, 0xa0c0), /* ANC */
 241	UPDATE_COEF(0x16, 0x0008, 0), /* AGC MUX */
 242	UPDATE_COEF(0x1d, 0x00e0, 0), /* DAC simple content protection */
 243	UPDATE_COEF(0x1f, 0x00e0, 0), /* ADC simple content protection */
 244	WRITE_COEF(0x21, 0x8804), /* DAC ADC Zero Detection */
 245	WRITE_COEF(0x63, 0x2902), /* PLL */
 246	WRITE_COEF(0x68, 0xa080), /* capless control 2 */
 247	WRITE_COEF(0x69, 0x3400), /* capless control 3 */
 248	WRITE_COEF(0x6a, 0x2f3e), /* capless control 4 */
 249	WRITE_COEF(0x6b, 0x0), /* capless control 5 */
 250	UPDATE_COEF(0x6d, 0x0fff, 0x0900), /* class D test 2 */
 251	WRITE_COEF(0x6e, 0x110a), /* class D test 3 */
 252	UPDATE_COEF(0x70, 0x00f8, 0x00d8), /* class D test 5 */
 253	WRITE_COEF(0x71, 0x0014), /* class D test 6 */
 254	WRITE_COEF(0x72, 0xc2ba), /* classD OCP */
 255	UPDATE_COEF(0x77, 0x0f80, 0), /* classD pure DC test */
 256	WRITE_COEF(0x6c, 0xfc06), /* Class D amp control */
 257	{}
 258};
 259
 260static void alc282_restore_default_value(struct hda_codec *codec)
 261{
 262	alc_process_coef_fw(codec, alc282_coefs);
 263}
 264
 265static void alc282_init(struct hda_codec *codec)
 266{
 267	struct alc_spec *spec = codec->spec;
 268	hda_nid_t hp_pin = alc_get_hp_pin(spec);
 269	bool hp_pin_sense;
 270	int coef78;
 271
 272	alc282_restore_default_value(codec);
 273
 274	if (!hp_pin)
 275		return;
 276	hp_pin_sense = snd_hda_jack_detect(codec, hp_pin);
 277	coef78 = alc_read_coef_idx(codec, 0x78);
 278
 279	/* Index 0x78 Direct Drive HP AMP LPM Control 1 */
 280	/* Headphone capless set to high power mode */
 281	alc_write_coef_idx(codec, 0x78, 0x9004);
 282
 283	if (hp_pin_sense)
 284		msleep(2);
 285
 286	snd_hda_codec_write(codec, hp_pin, 0,
 287			    AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE);
 288
 289	if (hp_pin_sense)
 290		msleep(85);
 291
 292	snd_hda_codec_write(codec, hp_pin, 0,
 293			    AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT);
 294
 295	if (hp_pin_sense)
 296		msleep(100);
 297
 298	/* Headphone capless set to normal mode */
 299	alc_write_coef_idx(codec, 0x78, coef78);
 300}
 301
 302static void alc282_shutup(struct hda_codec *codec)
 303{
 304	struct alc_spec *spec = codec->spec;
 305	hda_nid_t hp_pin = alc_get_hp_pin(spec);
 306	bool hp_pin_sense;
 307	int coef78;
 308
 309	if (!hp_pin) {
 310		alc269_shutup(codec);
 311		return;
 312	}
 313
 314	hp_pin_sense = snd_hda_jack_detect(codec, hp_pin);
 315	coef78 = alc_read_coef_idx(codec, 0x78);
 316	alc_write_coef_idx(codec, 0x78, 0x9004);
 317
 318	if (hp_pin_sense)
 319		msleep(2);
 320
 321	snd_hda_codec_write(codec, hp_pin, 0,
 322			    AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE);
 323
 324	if (hp_pin_sense)
 325		msleep(85);
 326
 327	if (!spec->no_shutup_pins)
 328		snd_hda_codec_write(codec, hp_pin, 0,
 329				    AC_VERB_SET_PIN_WIDGET_CONTROL, 0x0);
 330
 331	if (hp_pin_sense)
 332		msleep(100);
 333
 334	alc_auto_setup_eapd(codec, false);
 335	alc_shutup_pins(codec);
 336	alc_write_coef_idx(codec, 0x78, coef78);
 337}
 338
 339static const struct coef_fw alc283_coefs[] = {
 340	WRITE_COEF(0x03, 0x0002), /* Power Down Control */
 341	UPDATE_COEF(0x05, 0xff3f, 0x0700), /* FIFO and filter clock */
 342	WRITE_COEF(0x07, 0x0200), /* DMIC control */
 343	UPDATE_COEF(0x06, 0x00f0, 0), /* Analog clock */
 344	UPDATE_COEF(0x08, 0xfffc, 0x0c2c), /* JD */
 345	WRITE_COEF(0x0a, 0xcccc), /* JD offset1 */
 346	WRITE_COEF(0x0b, 0xcccc), /* JD offset2 */
 347	WRITE_COEF(0x0e, 0x6fc0), /* LDO1/2/3, DAC/ADC */
 348	UPDATE_COEF(0x0f, 0xf800, 0x1000), /* JD */
 349	UPDATE_COEF(0x10, 0xfc00, 0x0c00), /* Capless */
 350	WRITE_COEF(0x3a, 0x0), /* Class D test 4 */
 351	UPDATE_COEF(0x0c, 0xfe00, 0x0), /* IO power down directly */
 352	WRITE_COEF(0x22, 0xa0c0), /* ANC */
 353	UPDATE_COEFEX(0x53, 0x01, 0x000f, 0x0008), /* AGC MUX */
 354	UPDATE_COEF(0x1d, 0x00e0, 0), /* DAC simple content protection */
 355	UPDATE_COEF(0x1f, 0x00e0, 0), /* ADC simple content protection */
 356	WRITE_COEF(0x21, 0x8804), /* DAC ADC Zero Detection */
 357	WRITE_COEF(0x2e, 0x2902), /* PLL */
 358	WRITE_COEF(0x33, 0xa080), /* capless control 2 */
 359	WRITE_COEF(0x34, 0x3400), /* capless control 3 */
 360	WRITE_COEF(0x35, 0x2f3e), /* capless control 4 */
 361	WRITE_COEF(0x36, 0x0), /* capless control 5 */
 362	UPDATE_COEF(0x38, 0x0fff, 0x0900), /* class D test 2 */
 363	WRITE_COEF(0x39, 0x110a), /* class D test 3 */
 364	UPDATE_COEF(0x3b, 0x00f8, 0x00d8), /* class D test 5 */
 365	WRITE_COEF(0x3c, 0x0014), /* class D test 6 */
 366	WRITE_COEF(0x3d, 0xc2ba), /* classD OCP */
 367	UPDATE_COEF(0x42, 0x0f80, 0x0), /* classD pure DC test */
 368	WRITE_COEF(0x49, 0x0), /* test mode */
 369	UPDATE_COEF(0x40, 0xf800, 0x9800), /* Class D DC enable */
 370	UPDATE_COEF(0x42, 0xf000, 0x2000), /* DC offset */
 371	WRITE_COEF(0x37, 0xfc06), /* Class D amp control */
 372	UPDATE_COEF(0x1b, 0x8000, 0), /* HP JD control */
 373	{}
 374};
 375
 376static void alc283_restore_default_value(struct hda_codec *codec)
 377{
 378	alc_process_coef_fw(codec, alc283_coefs);
 379}
 380
 381static void alc283_init(struct hda_codec *codec)
 382{
 383	struct alc_spec *spec = codec->spec;
 384	hda_nid_t hp_pin = alc_get_hp_pin(spec);
 385	bool hp_pin_sense;
 386
 387	alc283_restore_default_value(codec);
 388
 389	if (!hp_pin)
 390		return;
 391
 392	msleep(30);
 393	hp_pin_sense = snd_hda_jack_detect(codec, hp_pin);
 394
 395	/* Index 0x43 Direct Drive HP AMP LPM Control 1 */
 396	/* Headphone capless set to high power mode */
 397	alc_write_coef_idx(codec, 0x43, 0x9004);
 398
 399	snd_hda_codec_write(codec, hp_pin, 0,
 400			    AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE);
 401
 402	if (hp_pin_sense)
 403		msleep(85);
 404
 405	snd_hda_codec_write(codec, hp_pin, 0,
 406			    AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT);
 407
 408	if (hp_pin_sense)
 409		msleep(85);
 410	/* Index 0x46 Combo jack auto switch control 2 */
 411	/* 3k pull low control for Headset jack. */
 412	alc_update_coef_idx(codec, 0x46, 3 << 12, 0);
 413	/* Headphone capless set to normal mode */
 414	alc_write_coef_idx(codec, 0x43, 0x9614);
 415}
 416
 417static void alc283_shutup(struct hda_codec *codec)
 418{
 419	struct alc_spec *spec = codec->spec;
 420	hda_nid_t hp_pin = alc_get_hp_pin(spec);
 421	bool hp_pin_sense;
 422
 423	if (!hp_pin) {
 424		alc269_shutup(codec);
 425		return;
 426	}
 427
 428	hp_pin_sense = snd_hda_jack_detect(codec, hp_pin);
 429
 430	alc_write_coef_idx(codec, 0x43, 0x9004);
 431
 432	/*depop hp during suspend*/
 433	alc_write_coef_idx(codec, 0x06, 0x2100);
 434
 435	snd_hda_codec_write(codec, hp_pin, 0,
 436			    AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE);
 437
 438	if (hp_pin_sense)
 439		msleep(100);
 440
 441	if (!spec->no_shutup_pins)
 442		snd_hda_codec_write(codec, hp_pin, 0,
 443				    AC_VERB_SET_PIN_WIDGET_CONTROL, 0x0);
 444
 445	alc_update_coef_idx(codec, 0x46, 0, 3 << 12);
 446
 447	if (hp_pin_sense)
 448		msleep(100);
 449	alc_auto_setup_eapd(codec, false);
 450	alc_shutup_pins(codec);
 451	alc_write_coef_idx(codec, 0x43, 0x9614);
 452}
 453
 454static void alc256_init(struct hda_codec *codec)
 455{
 456	struct alc_spec *spec = codec->spec;
 457	hda_nid_t hp_pin = alc_get_hp_pin(spec);
 458	bool hp_pin_sense;
 459
 460	if (spec->ultra_low_power) {
 461		alc_update_coef_idx(codec, 0x03, 1<<1, 1<<1);
 462		alc_update_coef_idx(codec, 0x08, 3<<2, 3<<2);
 463		alc_update_coef_idx(codec, 0x08, 7<<4, 0);
 464		alc_update_coef_idx(codec, 0x3b, 1<<15, 0);
 465		alc_update_coef_idx(codec, 0x0e, 7<<6, 7<<6);
 466		msleep(30);
 467	}
 468
 469	if (!hp_pin)
 470		hp_pin = 0x21;
 471
 472	msleep(30);
 473
 474	hp_pin_sense = snd_hda_jack_detect(codec, hp_pin);
 475
 476	if (hp_pin_sense) {
 477		msleep(2);
 478		alc_update_coefex_idx(codec, 0x57, 0x04, 0x0007, 0x1); /* Low power */
 479
 480		snd_hda_codec_write(codec, hp_pin, 0,
 481			    AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT);
 482
 483		msleep(75);
 484
 485		snd_hda_codec_write(codec, hp_pin, 0,
 486			    AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE);
 487
 488		msleep(75);
 489		alc_update_coefex_idx(codec, 0x57, 0x04, 0x0007, 0x4); /* Hight power */
 490	}
 491	alc_update_coef_idx(codec, 0x46, 3 << 12, 0);
 492	alc_update_coefex_idx(codec, 0x53, 0x02, 0x8000, 1 << 15); /* Clear bit */
 493	alc_update_coefex_idx(codec, 0x53, 0x02, 0x8000, 0 << 15);
 494	/*
 495	 * Expose headphone mic (or possibly Line In on some machines) instead
 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
 498	 * this register.
 499	 */
 500	alc_write_coef_idx(codec, 0x36, 0x5757);
 501}
 502
 503static void alc256_shutup(struct hda_codec *codec)
 504{
 505	struct alc_spec *spec = codec->spec;
 506	hda_nid_t hp_pin = alc_get_hp_pin(spec);
 507	bool hp_pin_sense;
 508
 509	if (!hp_pin)
 510		hp_pin = 0x21;
 511
 512	alc_update_coefex_idx(codec, 0x57, 0x04, 0x0007, 0x1); /* Low power */
 513
 514	/* 3k pull low control for Headset jack. */
 515	/* NOTE: call this before clearing the pin, otherwise codec stalls */
 516	/* If disable 3k pulldown control for alc257, the Mic detection will not work correctly
 517	 * when booting with headset plugged. So skip setting it for the codec alc257
 518	 */
 519	if (spec->en_3kpull_low)
 520		alc_update_coef_idx(codec, 0x46, 0, 3 << 12);
 521
 522	hp_pin_sense = snd_hda_jack_detect(codec, hp_pin);
 523
 524	if (hp_pin_sense) {
 525		msleep(2);
 526
 527		snd_hda_codec_write(codec, hp_pin, 0,
 528			    AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE);
 529
 530		msleep(75);
 531
 532		if (!spec->no_shutup_pins)
 533			snd_hda_codec_write(codec, hp_pin, 0,
 534				    AC_VERB_SET_PIN_WIDGET_CONTROL, 0x0);
 535
 536		msleep(75);
 537	}
 538
 539	alc_auto_setup_eapd(codec, false);
 540	alc_shutup_pins(codec);
 541	if (spec->ultra_low_power) {
 542		msleep(50);
 543		alc_update_coef_idx(codec, 0x03, 1<<1, 0);
 544		alc_update_coef_idx(codec, 0x08, 7<<4, 7<<4);
 545		alc_update_coef_idx(codec, 0x08, 3<<2, 0);
 546		alc_update_coef_idx(codec, 0x3b, 1<<15, 1<<15);
 547		alc_update_coef_idx(codec, 0x0e, 7<<6, 0);
 548		msleep(30);
 549	}
 550}
 551
 552static void alc285_hp_init(struct hda_codec *codec)
 553{
 554	struct alc_spec *spec = codec->spec;
 555	hda_nid_t hp_pin = alc_get_hp_pin(spec);
 556	int i, val;
 557	int coef38, coef0d, coef36;
 558
 559	alc_write_coefex_idx(codec, 0x58, 0x00, 0x1888); /* write default value */
 560	alc_update_coef_idx(codec, 0x4a, 1<<15, 1<<15); /* Reset HP JD */
 561	coef38 = alc_read_coef_idx(codec, 0x38); /* Amp control */
 562	coef0d = alc_read_coef_idx(codec, 0x0d); /* Digital Misc control */
 563	coef36 = alc_read_coef_idx(codec, 0x36); /* Passthrough Control */
 564	alc_update_coef_idx(codec, 0x38, 1<<4, 0x0);
 565	alc_update_coef_idx(codec, 0x0d, 0x110, 0x0);
 566
 567	alc_update_coef_idx(codec, 0x67, 0xf000, 0x3000);
 568
 569	if (hp_pin)
 570		snd_hda_codec_write(codec, hp_pin, 0,
 571			    AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE);
 572
 573	msleep(130);
 574	alc_update_coef_idx(codec, 0x36, 1<<14, 1<<14);
 575	alc_update_coef_idx(codec, 0x36, 1<<13, 0x0);
 576
 577	if (hp_pin)
 578		snd_hda_codec_write(codec, hp_pin, 0,
 579			    AC_VERB_SET_PIN_WIDGET_CONTROL, 0x0);
 580	msleep(10);
 581	alc_write_coef_idx(codec, 0x67, 0x0); /* Set HP depop to manual mode */
 582	alc_write_coefex_idx(codec, 0x58, 0x00, 0x7880);
 583	alc_write_coefex_idx(codec, 0x58, 0x0f, 0xf049);
 584	alc_update_coefex_idx(codec, 0x58, 0x03, 0x00f0, 0x00c0);
 585
 586	alc_write_coefex_idx(codec, 0x58, 0x00, 0xf888); /* HP depop procedure start */
 587	val = alc_read_coefex_idx(codec, 0x58, 0x00);
 588	for (i = 0; i < 20 && val & 0x8000; i++) {
 589		msleep(50);
 590		val = alc_read_coefex_idx(codec, 0x58, 0x00);
 591	} /* Wait for depop procedure finish  */
 592
 593	alc_write_coefex_idx(codec, 0x58, 0x00, val); /* write back the result */
 594	alc_update_coef_idx(codec, 0x38, 1<<4, coef38);
 595	alc_update_coef_idx(codec, 0x0d, 0x110, coef0d);
 596	alc_update_coef_idx(codec, 0x36, 3<<13, coef36);
 597
 598	msleep(50);
 599	alc_update_coef_idx(codec, 0x4a, 1<<15, 0);
 600}
 601
 602static void alc225_init(struct hda_codec *codec)
 603{
 604	struct alc_spec *spec = codec->spec;
 605	hda_nid_t hp_pin = alc_get_hp_pin(spec);
 606	bool hp1_pin_sense, hp2_pin_sense;
 607
 608	if (spec->ultra_low_power) {
 609		alc_update_coef_idx(codec, 0x08, 0x0f << 2, 3<<2);
 610		alc_update_coef_idx(codec, 0x0e, 7<<6, 7<<6);
 611		alc_update_coef_idx(codec, 0x33, 1<<11, 0);
 612		msleep(30);
 613	}
 614
 615	if (spec->codec_variant != ALC269_TYPE_ALC287 &&
 616		spec->codec_variant != ALC269_TYPE_ALC245)
 617		/* required only at boot or S3 and S4 resume time */
 618		if (!spec->done_hp_init ||
 619			is_s3_resume(codec) ||
 620			is_s4_resume(codec)) {
 621			alc285_hp_init(codec);
 622			spec->done_hp_init = true;
 623		}
 624
 625	if (!hp_pin)
 626		hp_pin = 0x21;
 627	msleep(30);
 628
 629	hp1_pin_sense = snd_hda_jack_detect(codec, hp_pin);
 630	hp2_pin_sense = snd_hda_jack_detect(codec, 0x16);
 631
 632	if (hp1_pin_sense || hp2_pin_sense) {
 633		msleep(2);
 634		alc_update_coefex_idx(codec, 0x57, 0x04, 0x0007, 0x1); /* Low power */
 635
 636		if (hp1_pin_sense)
 637			snd_hda_codec_write(codec, hp_pin, 0,
 638				    AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT);
 639		if (hp2_pin_sense)
 640			snd_hda_codec_write(codec, 0x16, 0,
 641				    AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT);
 642		msleep(75);
 643
 644		if (hp1_pin_sense)
 645			snd_hda_codec_write(codec, hp_pin, 0,
 646				    AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE);
 647		if (hp2_pin_sense)
 648			snd_hda_codec_write(codec, 0x16, 0,
 649				    AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE);
 650
 651		msleep(75);
 652		alc_update_coef_idx(codec, 0x4a, 3 << 10, 0);
 653		alc_update_coefex_idx(codec, 0x57, 0x04, 0x0007, 0x4); /* Hight power */
 654	}
 655}
 656
 657static void alc225_shutup(struct hda_codec *codec)
 658{
 659	struct alc_spec *spec = codec->spec;
 660	hda_nid_t hp_pin = alc_get_hp_pin(spec);
 661	bool hp1_pin_sense, hp2_pin_sense;
 662
 663	if (!hp_pin)
 664		hp_pin = 0x21;
 665
 666	hp1_pin_sense = snd_hda_jack_detect(codec, hp_pin);
 667	hp2_pin_sense = snd_hda_jack_detect(codec, 0x16);
 668
 669	if (hp1_pin_sense || hp2_pin_sense) {
 670		alc_disable_headset_jack_key(codec);
 671		/* 3k pull low control for Headset jack. */
 672		alc_update_coef_idx(codec, 0x4a, 0, 3 << 10);
 673		msleep(2);
 674
 675		if (hp1_pin_sense)
 676			snd_hda_codec_write(codec, hp_pin, 0,
 677				    AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE);
 678		if (hp2_pin_sense)
 679			snd_hda_codec_write(codec, 0x16, 0,
 680				    AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE);
 681
 682		msleep(75);
 683
 684		if (hp1_pin_sense)
 685			snd_hda_codec_write(codec, hp_pin, 0,
 686				    AC_VERB_SET_PIN_WIDGET_CONTROL, 0x0);
 687		if (hp2_pin_sense)
 688			snd_hda_codec_write(codec, 0x16, 0,
 689				    AC_VERB_SET_PIN_WIDGET_CONTROL, 0x0);
 690
 691		msleep(75);
 692		alc_update_coef_idx(codec, 0x4a, 3 << 10, 0);
 693		alc_enable_headset_jack_key(codec);
 694	}
 695	alc_auto_setup_eapd(codec, false);
 696	alc_shutup_pins(codec);
 697	if (spec->ultra_low_power) {
 698		msleep(50);
 699		alc_update_coef_idx(codec, 0x08, 0x0f << 2, 0x0c << 2);
 700		alc_update_coef_idx(codec, 0x0e, 7<<6, 0);
 701		alc_update_coef_idx(codec, 0x33, 1<<11, 1<<11);
 702		alc_update_coef_idx(codec, 0x4a, 3<<4, 2<<4);
 703		msleep(30);
 704	}
 705}
 706
 707static void alc222_init(struct hda_codec *codec)
 708{
 709	struct alc_spec *spec = codec->spec;
 710	hda_nid_t hp_pin = alc_get_hp_pin(spec);
 711	bool hp1_pin_sense, hp2_pin_sense;
 712
 713	if (!hp_pin)
 714		return;
 715
 716	msleep(30);
 717
 718	hp1_pin_sense = snd_hda_jack_detect(codec, hp_pin);
 719	hp2_pin_sense = snd_hda_jack_detect(codec, 0x14);
 720
 721	if (hp1_pin_sense || hp2_pin_sense) {
 722		msleep(2);
 723
 724		if (hp1_pin_sense)
 725			snd_hda_codec_write(codec, hp_pin, 0,
 726				    AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT);
 727		if (hp2_pin_sense)
 728			snd_hda_codec_write(codec, 0x14, 0,
 729				    AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT);
 730		msleep(75);
 731
 732		if (hp1_pin_sense)
 733			snd_hda_codec_write(codec, hp_pin, 0,
 734				    AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE);
 735		if (hp2_pin_sense)
 736			snd_hda_codec_write(codec, 0x14, 0,
 737				    AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE);
 738
 739		msleep(75);
 740	}
 741}
 742
 743static void alc222_shutup(struct hda_codec *codec)
 744{
 745	struct alc_spec *spec = codec->spec;
 746	hda_nid_t hp_pin = alc_get_hp_pin(spec);
 747	bool hp1_pin_sense, hp2_pin_sense;
 748
 749	if (!hp_pin)
 750		hp_pin = 0x21;
 751
 752	hp1_pin_sense = snd_hda_jack_detect(codec, hp_pin);
 753	hp2_pin_sense = snd_hda_jack_detect(codec, 0x14);
 754
 755	if (hp1_pin_sense || hp2_pin_sense) {
 756		msleep(2);
 757
 758		if (hp1_pin_sense)
 759			snd_hda_codec_write(codec, hp_pin, 0,
 760				    AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE);
 761		if (hp2_pin_sense)
 762			snd_hda_codec_write(codec, 0x14, 0,
 763				    AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE);
 764
 765		msleep(75);
 766
 767		if (hp1_pin_sense)
 768			snd_hda_codec_write(codec, hp_pin, 0,
 769				    AC_VERB_SET_PIN_WIDGET_CONTROL, 0x0);
 770		if (hp2_pin_sense)
 771			snd_hda_codec_write(codec, 0x14, 0,
 772				    AC_VERB_SET_PIN_WIDGET_CONTROL, 0x0);
 773
 774		msleep(75);
 775	}
 776	alc_auto_setup_eapd(codec, false);
 777	alc_shutup_pins(codec);
 778}
 779
 780static void alc_default_init(struct hda_codec *codec)
 781{
 782	struct alc_spec *spec = codec->spec;
 783	hda_nid_t hp_pin = alc_get_hp_pin(spec);
 784	bool hp_pin_sense;
 785
 786	if (!hp_pin)
 787		return;
 788
 789	msleep(30);
 790
 791	hp_pin_sense = snd_hda_jack_detect(codec, hp_pin);
 792
 793	if (hp_pin_sense) {
 794		msleep(2);
 795
 796		snd_hda_codec_write(codec, hp_pin, 0,
 797				    AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT);
 798
 799		msleep(75);
 800
 801		snd_hda_codec_write(codec, hp_pin, 0,
 802				    AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE);
 803		msleep(75);
 804	}
 805}
 806
 807static void alc_default_shutup(struct hda_codec *codec)
 808{
 809	struct alc_spec *spec = codec->spec;
 810	hda_nid_t hp_pin = alc_get_hp_pin(spec);
 811	bool hp_pin_sense;
 812
 813	if (!hp_pin) {
 814		alc269_shutup(codec);
 815		return;
 816	}
 817
 818	hp_pin_sense = snd_hda_jack_detect(codec, hp_pin);
 819
 820	if (hp_pin_sense) {
 821		msleep(2);
 822
 823		snd_hda_codec_write(codec, hp_pin, 0,
 824				    AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE);
 825
 826		msleep(75);
 827
 828		if (!spec->no_shutup_pins)
 829			snd_hda_codec_write(codec, hp_pin, 0,
 830					    AC_VERB_SET_PIN_WIDGET_CONTROL, 0x0);
 831
 832		msleep(75);
 833	}
 834	alc_auto_setup_eapd(codec, false);
 835	alc_shutup_pins(codec);
 836}
 837
 838static void alc294_hp_init(struct hda_codec *codec)
 839{
 840	struct alc_spec *spec = codec->spec;
 841	hda_nid_t hp_pin = alc_get_hp_pin(spec);
 842	int i, val;
 843
 844	if (!hp_pin)
 845		return;
 846
 847	snd_hda_codec_write(codec, hp_pin, 0,
 848			    AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE);
 849
 850	msleep(100);
 851
 852	if (!spec->no_shutup_pins)
 853		snd_hda_codec_write(codec, hp_pin, 0,
 854				    AC_VERB_SET_PIN_WIDGET_CONTROL, 0x0);
 855
 856	alc_update_coef_idx(codec, 0x6f, 0x000f, 0);/* Set HP depop to manual mode */
 857	alc_update_coefex_idx(codec, 0x58, 0x00, 0x8000, 0x8000); /* HP depop procedure start */
 858
 859	/* Wait for depop procedure finish  */
 860	val = alc_read_coefex_idx(codec, 0x58, 0x01);
 861	for (i = 0; i < 20 && val & 0x0080; i++) {
 862		msleep(50);
 863		val = alc_read_coefex_idx(codec, 0x58, 0x01);
 864	}
 865	/* Set HP depop to auto mode */
 866	alc_update_coef_idx(codec, 0x6f, 0x000f, 0x000b);
 867	msleep(50);
 868}
 869
 870static void alc294_init(struct hda_codec *codec)
 871{
 872	struct alc_spec *spec = codec->spec;
 873
 874	/* required only at boot or S4 resume time */
 875	if (!spec->done_hp_init || is_s4_resume(codec)) {
 876		alc294_hp_init(codec);
 877		spec->done_hp_init = true;
 878	}
 879	alc_default_init(codec);
 880}
 881
 882static void alc5505_coef_set(struct hda_codec *codec, unsigned int index_reg,
 883			     unsigned int val)
 884{
 885	snd_hda_codec_write(codec, 0x51, 0, AC_VERB_SET_COEF_INDEX, index_reg >> 1);
 886	snd_hda_codec_write(codec, 0x51, 0, AC_VERB_SET_PROC_COEF, val & 0xffff); /* LSB */
 887	snd_hda_codec_write(codec, 0x51, 0, AC_VERB_SET_PROC_COEF, val >> 16); /* MSB */
 888}
 889
 890static int alc5505_coef_get(struct hda_codec *codec, unsigned int index_reg)
 891{
 892	unsigned int val;
 893
 894	snd_hda_codec_write(codec, 0x51, 0, AC_VERB_SET_COEF_INDEX, index_reg >> 1);
 895	val = snd_hda_codec_read(codec, 0x51, 0, AC_VERB_GET_PROC_COEF, 0)
 896		& 0xffff;
 897	val |= snd_hda_codec_read(codec, 0x51, 0, AC_VERB_GET_PROC_COEF, 0)
 898		<< 16;
 899	return val;
 900}
 901
 902static void alc5505_dsp_halt(struct hda_codec *codec)
 903{
 904	unsigned int val;
 905
 906	alc5505_coef_set(codec, 0x3000, 0x000c); /* DSP CPU stop */
 907	alc5505_coef_set(codec, 0x880c, 0x0008); /* DDR enter self refresh */
 908	alc5505_coef_set(codec, 0x61c0, 0x11110080); /* Clock control for PLL and CPU */
 909	alc5505_coef_set(codec, 0x6230, 0xfc0d4011); /* Disable Input OP */
 910	alc5505_coef_set(codec, 0x61b4, 0x040a2b03); /* Stop PLL2 */
 911	alc5505_coef_set(codec, 0x61b0, 0x00005b17); /* Stop PLL1 */
 912	alc5505_coef_set(codec, 0x61b8, 0x04133303); /* Stop PLL3 */
 913	val = alc5505_coef_get(codec, 0x6220);
 914	alc5505_coef_set(codec, 0x6220, (val | 0x3000)); /* switch Ringbuffer clock to DBUS clock */
 915}
 916
 917static void alc5505_dsp_back_from_halt(struct hda_codec *codec)
 918{
 919	alc5505_coef_set(codec, 0x61b8, 0x04133302);
 920	alc5505_coef_set(codec, 0x61b0, 0x00005b16);
 921	alc5505_coef_set(codec, 0x61b4, 0x040a2b02);
 922	alc5505_coef_set(codec, 0x6230, 0xf80d4011);
 923	alc5505_coef_set(codec, 0x6220, 0x2002010f);
 924	alc5505_coef_set(codec, 0x880c, 0x00000004);
 925}
 926
 927static void alc5505_dsp_init(struct hda_codec *codec)
 928{
 929	unsigned int val;
 930
 931	alc5505_dsp_halt(codec);
 932	alc5505_dsp_back_from_halt(codec);
 933	alc5505_coef_set(codec, 0x61b0, 0x5b14); /* PLL1 control */
 934	alc5505_coef_set(codec, 0x61b0, 0x5b16);
 935	alc5505_coef_set(codec, 0x61b4, 0x04132b00); /* PLL2 control */
 936	alc5505_coef_set(codec, 0x61b4, 0x04132b02);
 937	alc5505_coef_set(codec, 0x61b8, 0x041f3300); /* PLL3 control*/
 938	alc5505_coef_set(codec, 0x61b8, 0x041f3302);
 939	snd_hda_codec_write(codec, 0x51, 0, AC_VERB_SET_CODEC_RESET, 0); /* Function reset */
 940	alc5505_coef_set(codec, 0x61b8, 0x041b3302);
 941	alc5505_coef_set(codec, 0x61b8, 0x04173302);
 942	alc5505_coef_set(codec, 0x61b8, 0x04163302);
 943	alc5505_coef_set(codec, 0x8800, 0x348b328b); /* DRAM control */
 944	alc5505_coef_set(codec, 0x8808, 0x00020022); /* DRAM control */
 945	alc5505_coef_set(codec, 0x8818, 0x00000400); /* DRAM control */
 946
 947	val = alc5505_coef_get(codec, 0x6200) >> 16; /* Read revision ID */
 948	if (val <= 3)
 949		alc5505_coef_set(codec, 0x6220, 0x2002010f); /* I/O PAD Configuration */
 950	else
 951		alc5505_coef_set(codec, 0x6220, 0x6002018f);
 952
 953	alc5505_coef_set(codec, 0x61ac, 0x055525f0); /**/
 954	alc5505_coef_set(codec, 0x61c0, 0x12230080); /* Clock control */
 955	alc5505_coef_set(codec, 0x61b4, 0x040e2b02); /* PLL2 control */
 956	alc5505_coef_set(codec, 0x61bc, 0x010234f8); /* OSC Control */
 957	alc5505_coef_set(codec, 0x880c, 0x00000004); /* DRAM Function control */
 958	alc5505_coef_set(codec, 0x880c, 0x00000003);
 959	alc5505_coef_set(codec, 0x880c, 0x00000010);
 960
 961#ifdef HALT_REALTEK_ALC5505
 962	alc5505_dsp_halt(codec);
 963#endif
 964}
 965
 966#ifdef HALT_REALTEK_ALC5505
 967#define alc5505_dsp_suspend(codec)	do { } while (0) /* NOP */
 968#define alc5505_dsp_resume(codec)	do { } while (0) /* NOP */
 969#else
 970#define alc5505_dsp_suspend(codec)	alc5505_dsp_halt(codec)
 971#define alc5505_dsp_resume(codec)	alc5505_dsp_back_from_halt(codec)
 972#endif
 973
 974static int alc269_suspend(struct hda_codec *codec)
 975{
 976	struct alc_spec *spec = codec->spec;
 977
 978	if (spec->has_alc5505_dsp)
 979		alc5505_dsp_suspend(codec);
 980
 981	return alc_suspend(codec);
 982}
 983
 984static int alc269_resume(struct hda_codec *codec)
 985{
 986	struct alc_spec *spec = codec->spec;
 987
 988	if (spec->codec_variant == ALC269_TYPE_ALC269VB)
 989		alc269vb_toggle_power_output(codec, 0);
 990	if (spec->codec_variant == ALC269_TYPE_ALC269VB &&
 991			(alc_get_coef0(codec) & 0x00ff) == 0x018) {
 992		msleep(150);
 993	}
 994
 995	snd_hda_codec_init(codec);
 996
 997	if (spec->codec_variant == ALC269_TYPE_ALC269VB)
 998		alc269vb_toggle_power_output(codec, 1);
 999	if (spec->codec_variant == ALC269_TYPE_ALC269VB &&
1000			(alc_get_coef0(codec) & 0x00ff) == 0x017) {
1001		msleep(200);
1002	}
1003
1004	snd_hda_regmap_sync(codec);
1005	hda_call_check_power_status(codec, 0x01);
1006
1007	/* on some machine, the BIOS will clear the codec gpio data when enter
1008	 * suspend, and won't restore the data after resume, so we restore it
1009	 * in the driver.
1010	 */
1011	if (spec->gpio_data)
1012		alc_write_gpio_data(codec);
1013
1014	if (spec->has_alc5505_dsp)
1015		alc5505_dsp_resume(codec);
1016
1017	return 0;
1018}
1019
1020#define ALC233_STARFIGHTER_SPK_PIN	0x1b
1021#define ALC233_STARFIGHTER_GPIO2	0x04
1022
1023static void alc233_starfighter_update_amp(struct hda_codec *codec, bool on)
1024{
1025	snd_hda_codec_write(codec, ALC233_STARFIGHTER_SPK_PIN, 0,
1026			    AC_VERB_SET_EAPD_BTLENABLE,
1027			    on ? AC_EAPDBTL_EAPD : 0);
1028	alc_update_gpio_data(codec, ALC233_STARFIGHTER_GPIO2, on);
1029}
1030
1031static void alc233_starfighter_pcm_hook(struct hda_pcm_stream *hinfo,
1032					struct hda_codec *codec,
1033					struct snd_pcm_substream *substream,
1034					int action)
1035{
1036	switch (action) {
1037	case HDA_GEN_PCM_ACT_PREPARE:
1038		alc233_starfighter_update_amp(codec, true);
1039		break;
1040	case HDA_GEN_PCM_ACT_CLEANUP:
1041		alc233_starfighter_update_amp(codec, false);
1042		break;
1043	}
1044}
1045
1046static void alc233_fixup_starlabs_starfighter(struct hda_codec *codec,
1047					      const struct hda_fixup *fix,
1048					      int action)
1049{
1050	struct alc_spec *spec = codec->spec;
1051
1052	switch (action) {
1053	case HDA_FIXUP_ACT_PRE_PROBE:
1054		spec->gpio_mask |= ALC233_STARFIGHTER_GPIO2;
1055		spec->gpio_dir |= ALC233_STARFIGHTER_GPIO2;
1056		spec->gpio_data &= ~ALC233_STARFIGHTER_GPIO2;
1057		break;
1058	case HDA_FIXUP_ACT_PROBE:
1059		spec->gen.pcm_playback_hook = alc233_starfighter_pcm_hook;
1060		break;
1061	}
1062}
1063
1064static void alc269_fixup_pincfg_no_hp_to_lineout(struct hda_codec *codec,
1065						 const struct hda_fixup *fix, int action)
1066{
1067	struct alc_spec *spec = codec->spec;
1068
1069	if (action == HDA_FIXUP_ACT_PRE_PROBE)
1070		spec->parse_flags = HDA_PINCFG_NO_HP_FIXUP;
1071}
1072
1073static void alc269_fixup_pincfg_U7x7_headset_mic(struct hda_codec *codec,
1074						 const struct hda_fixup *fix,
1075						 int action)
1076{
1077	unsigned int cfg_headphone = snd_hda_codec_get_pincfg(codec, 0x21);
1078	unsigned int cfg_headset_mic = snd_hda_codec_get_pincfg(codec, 0x19);
1079
1080	if (cfg_headphone && cfg_headset_mic == 0x411111f0)
1081		snd_hda_codec_set_pincfg(codec, 0x19,
1082			(cfg_headphone & ~AC_DEFCFG_DEVICE) |
1083			(AC_JACK_MIC_IN << AC_DEFCFG_DEVICE_SHIFT));
1084}
1085
1086static void alc269_fixup_hweq(struct hda_codec *codec,
1087			       const struct hda_fixup *fix, int action)
1088{
1089	if (action == HDA_FIXUP_ACT_INIT)
1090		alc_update_coef_idx(codec, 0x1e, 0, 0x80);
1091}
1092
1093static void alc271_fixup_dmic(struct hda_codec *codec,
1094			      const struct hda_fixup *fix, int action)
1095{
1096	static const struct hda_verb verbs[] = {
1097		{0x20, AC_VERB_SET_COEF_INDEX, 0x0d},
1098		{0x20, AC_VERB_SET_PROC_COEF, 0x4000},
1099		{}
1100	};
1101	unsigned int cfg;
1102
1103	if (strcmp(codec->core.chip_name, "ALC271X") &&
1104	    strcmp(codec->core.chip_name, "ALC269VB"))
1105		return;
1106	cfg = snd_hda_codec_get_pincfg(codec, 0x12);
1107	if (get_defcfg_connect(cfg) == AC_JACK_PORT_FIXED)
1108		snd_hda_sequence_write(codec, verbs);
1109}
1110
1111/* Fix the speaker amp after resume, etc */
1112static void alc269vb_fixup_aspire_e1_coef(struct hda_codec *codec,
1113					  const struct hda_fixup *fix,
1114					  int action)
1115{
1116	if (action == HDA_FIXUP_ACT_INIT)
1117		alc_update_coef_idx(codec, 0x0d, 0x6000, 0x6000);
1118}
1119
1120static void alc269_fixup_pcm_44k(struct hda_codec *codec,
1121				 const struct hda_fixup *fix, int action)
1122{
1123	struct alc_spec *spec = codec->spec;
1124
1125	if (action != HDA_FIXUP_ACT_PROBE)
1126		return;
1127
1128	/* Due to a hardware problem on Lenovo Ideadpad, we need to
1129	 * fix the sample rate of analog I/O to 44.1kHz
1130	 */
1131	spec->gen.stream_analog_playback = &alc269_44k_pcm_analog_playback;
1132	spec->gen.stream_analog_capture = &alc269_44k_pcm_analog_capture;
1133}
1134
1135static void alc269_fixup_stereo_dmic(struct hda_codec *codec,
1136				     const struct hda_fixup *fix, int action)
1137{
1138	/* The digital-mic unit sends PDM (differential signal) instead of
1139	 * the standard PCM, thus you can't record a valid mono stream as is.
1140	 * Below is a workaround specific to ALC269 to control the dmic
1141	 * signal source as mono.
1142	 */
1143	if (action == HDA_FIXUP_ACT_INIT)
1144		alc_update_coef_idx(codec, 0x07, 0, 0x80);
1145}
1146
1147static void alc269_quanta_automute(struct hda_codec *codec)
1148{
1149	snd_hda_gen_update_outputs(codec);
1150
1151	alc_write_coef_idx(codec, 0x0c, 0x680);
1152	alc_write_coef_idx(codec, 0x0c, 0x480);
1153}
1154
1155static void alc269_fixup_quanta_mute(struct hda_codec *codec,
1156				     const struct hda_fixup *fix, int action)
1157{
1158	struct alc_spec *spec = codec->spec;
1159	if (action != HDA_FIXUP_ACT_PROBE)
1160		return;
1161	spec->gen.automute_hook = alc269_quanta_automute;
1162}
1163
1164static void alc269_x101_hp_automute_hook(struct hda_codec *codec,
1165					 struct hda_jack_callback *jack)
1166{
1167	struct alc_spec *spec = codec->spec;
1168	int vref;
1169	msleep(200);
1170	snd_hda_gen_hp_automute(codec, jack);
1171
1172	vref = spec->gen.hp_jack_present ? PIN_VREF80 : 0;
1173	msleep(100);
1174	snd_hda_codec_write(codec, 0x18, 0, AC_VERB_SET_PIN_WIDGET_CONTROL,
1175			    vref);
1176	msleep(500);
1177	snd_hda_codec_write(codec, 0x18, 0, AC_VERB_SET_PIN_WIDGET_CONTROL,
1178			    vref);
1179}
1180
1181/*
1182 * Magic sequence to make Huawei Matebook X right speaker working (bko#197801)
1183 */
1184struct hda_alc298_mbxinit {
1185	unsigned char value_0x23;
1186	unsigned char value_0x25;
1187};
1188
1189static void alc298_huawei_mbx_stereo_seq(struct hda_codec *codec,
1190					 const struct hda_alc298_mbxinit *initval,
1191					 bool first)
1192{
1193	snd_hda_codec_write(codec, 0x06, 0, AC_VERB_SET_DIGI_CONVERT_3, 0x0);
1194	alc_write_coef_idx(codec, 0x26, 0xb000);
1195
1196	if (first)
1197		snd_hda_codec_write(codec, 0x21, 0, AC_VERB_GET_PIN_SENSE, 0x0);
1198
1199	snd_hda_codec_write(codec, 0x6, 0, AC_VERB_SET_DIGI_CONVERT_3, 0x80);
1200	alc_write_coef_idx(codec, 0x26, 0xf000);
1201	alc_write_coef_idx(codec, 0x23, initval->value_0x23);
1202
1203	if (initval->value_0x23 != 0x1e)
1204		alc_write_coef_idx(codec, 0x25, initval->value_0x25);
1205
1206	snd_hda_codec_write(codec, 0x20, 0, AC_VERB_SET_COEF_INDEX, 0x26);
1207	snd_hda_codec_write(codec, 0x20, 0, AC_VERB_SET_PROC_COEF, 0xb010);
1208}
1209
1210static void alc298_fixup_huawei_mbx_stereo(struct hda_codec *codec,
1211					   const struct hda_fixup *fix,
1212					   int action)
1213{
1214	/* Initialization magic */
1215	static const struct hda_alc298_mbxinit dac_init[] = {
1216		{0x0c, 0x00}, {0x0d, 0x00}, {0x0e, 0x00}, {0x0f, 0x00},
1217		{0x10, 0x00}, {0x1a, 0x40}, {0x1b, 0x82}, {0x1c, 0x00},
1218		{0x1d, 0x00}, {0x1e, 0x00}, {0x1f, 0x00},
1219		{0x20, 0xc2}, {0x21, 0xc8}, {0x22, 0x26}, {0x23, 0x24},
1220		{0x27, 0xff}, {0x28, 0xff}, {0x29, 0xff}, {0x2a, 0x8f},
1221		{0x2b, 0x02}, {0x2c, 0x48}, {0x2d, 0x34}, {0x2e, 0x00},
1222		{0x2f, 0x00},
1223		{0x30, 0x00}, {0x31, 0x00}, {0x32, 0x00}, {0x33, 0x00},
1224		{0x34, 0x00}, {0x35, 0x01}, {0x36, 0x93}, {0x37, 0x0c},
1225		{0x38, 0x00}, {0x39, 0x00}, {0x3a, 0xf8}, {0x38, 0x80},
1226		{}
1227	};
1228	const struct hda_alc298_mbxinit *seq;
1229
1230	if (action != HDA_FIXUP_ACT_INIT)
1231		return;
1232
1233	/* Start */
1234	snd_hda_codec_write(codec, 0x06, 0, AC_VERB_SET_DIGI_CONVERT_3, 0x00);
1235	snd_hda_codec_write(codec, 0x06, 0, AC_VERB_SET_DIGI_CONVERT_3, 0x80);
1236	alc_write_coef_idx(codec, 0x26, 0xf000);
1237	alc_write_coef_idx(codec, 0x22, 0x31);
1238	alc_write_coef_idx(codec, 0x23, 0x0b);
1239	alc_write_coef_idx(codec, 0x25, 0x00);
1240	snd_hda_codec_write(codec, 0x20, 0, AC_VERB_SET_COEF_INDEX, 0x26);
1241	snd_hda_codec_write(codec, 0x20, 0, AC_VERB_SET_PROC_COEF, 0xb010);
1242
1243	for (seq = dac_init; seq->value_0x23; seq++)
1244		alc298_huawei_mbx_stereo_seq(codec, seq, seq == dac_init);
1245}
1246
1247static void alc269_fixup_x101_headset_mic(struct hda_codec *codec,
1248				     const struct hda_fixup *fix, int action)
1249{
1250	struct alc_spec *spec = codec->spec;
1251	if (action == HDA_FIXUP_ACT_PRE_PROBE) {
1252		spec->parse_flags |= HDA_PINCFG_HEADSET_MIC;
1253		spec->gen.hp_automute_hook = alc269_x101_hp_automute_hook;
1254	}
1255}
1256
1257static void alc_update_vref_led(struct hda_codec *codec, hda_nid_t pin,
1258				bool polarity, bool on)
1259{
1260	unsigned int pinval;
1261
1262	if (!pin)
1263		return;
1264	if (polarity)
1265		on = !on;
1266	pinval = snd_hda_codec_get_pin_target(codec, pin);
1267	pinval &= ~AC_PINCTL_VREFEN;
1268	pinval |= on ? AC_PINCTL_VREF_80 : AC_PINCTL_VREF_HIZ;
1269	/* temporarily power up/down for setting VREF */
1270	CLASS(snd_hda_power_pm, pm)(codec);
1271	snd_hda_set_pin_ctl_cache(codec, pin, pinval);
1272}
1273
1274/* update mute-LED according to the speaker mute state via mic VREF pin */
1275static int vref_mute_led_set(struct led_classdev *led_cdev,
1276			     enum led_brightness brightness)
1277{
1278	struct hda_codec *codec = dev_to_hda_codec(led_cdev->dev->parent);
1279	struct alc_spec *spec = codec->spec;
1280
1281	alc_update_vref_led(codec, spec->mute_led_nid,
1282			    spec->mute_led_polarity, brightness);
1283	return 0;
1284}
1285
1286/* Make sure the led works even in runtime suspend */
1287static unsigned int led_power_filter(struct hda_codec *codec,
1288						  hda_nid_t nid,
1289						  unsigned int power_state)
1290{
1291	struct alc_spec *spec = codec->spec;
1292
1293	if (power_state != AC_PWRST_D3 || nid == 0 ||
1294	    (nid != spec->mute_led_nid && nid != spec->cap_mute_led_nid))
1295		return power_state;
1296
1297	/* Set pin ctl again, it might have just been set to 0 */
1298	snd_hda_set_pin_ctl(codec, nid,
1299			    snd_hda_codec_get_pin_target(codec, nid));
1300
1301	return snd_hda_gen_path_power_filter(codec, nid, power_state);
1302}
1303
1304static void alc269_fixup_hp_mute_led(struct hda_codec *codec,
1305				     const struct hda_fixup *fix, int action)
1306{
1307	struct alc_spec *spec = codec->spec;
1308	const struct dmi_device *dev = NULL;
1309
1310	if (action != HDA_FIXUP_ACT_PRE_PROBE)
1311		return;
1312
1313	while ((dev = dmi_find_device(DMI_DEV_TYPE_OEM_STRING, NULL, dev))) {
1314		int pol, pin;
1315		if (sscanf(dev->name, "HP_Mute_LED_%d_%x", &pol, &pin) != 2)
1316			continue;
1317		if (pin < 0x0a || pin >= 0x10)
1318			break;
1319		spec->mute_led_polarity = pol;
1320		spec->mute_led_nid = pin - 0x0a + 0x18;
1321		snd_hda_gen_add_mute_led_cdev(codec, vref_mute_led_set);
1322		codec->power_filter = led_power_filter;
1323		codec_dbg(codec,
1324			  "Detected mute LED for %x:%d\n", spec->mute_led_nid,
1325			   spec->mute_led_polarity);
1326		break;
1327	}
1328}
1329
1330static void alc269_fixup_hp_mute_led_micx(struct hda_codec *codec,
1331					  const struct hda_fixup *fix,
1332					  int action, hda_nid_t pin)
1333{
1334	struct alc_spec *spec = codec->spec;
1335
1336	if (action == HDA_FIXUP_ACT_PRE_PROBE) {
1337		spec->mute_led_polarity = 0;
1338		spec->mute_led_nid = pin;
1339		snd_hda_gen_add_mute_led_cdev(codec, vref_mute_led_set);
1340		codec->power_filter = led_power_filter;
1341	}
1342}
1343
1344static void alc269_fixup_hp_mute_led_mic1(struct hda_codec *codec,
1345				const struct hda_fixup *fix, int action)
1346{
1347	alc269_fixup_hp_mute_led_micx(codec, fix, action, 0x18);
1348}
1349
1350static void alc269_fixup_hp_mute_led_mic2(struct hda_codec *codec,
1351				const struct hda_fixup *fix, int action)
1352{
1353	alc269_fixup_hp_mute_led_micx(codec, fix, action, 0x19);
1354}
1355
1356static void alc269_fixup_hp_mute_led_mic3(struct hda_codec *codec,
1357				const struct hda_fixup *fix, int action)
1358{
1359	alc269_fixup_hp_mute_led_micx(codec, fix, action, 0x1b);
1360}
1361
1362static void alc236_fixup_hp_gpio_led(struct hda_codec *codec,
1363				const struct hda_fixup *fix, int action)
1364{
1365	alc_fixup_hp_gpio_led(codec, action, 0x02, 0x01);
1366}
1367
1368static void alc269_fixup_hp_gpio_led(struct hda_codec *codec,
1369				const struct hda_fixup *fix, int action)
1370{
1371	alc_fixup_hp_gpio_led(codec, action, 0x08, 0x10);
1372}
1373
1374static void alc285_fixup_hp_gpio_led(struct hda_codec *codec,
1375				const struct hda_fixup *fix, int action)
1376{
1377	alc_fixup_hp_gpio_led(codec, action, 0x04, 0x01);
1378}
1379
1380static void alc286_fixup_hp_gpio_led(struct hda_codec *codec,
1381				const struct hda_fixup *fix, int action)
1382{
1383	alc_fixup_hp_gpio_led(codec, action, 0x02, 0x20);
1384}
1385
1386static void alc287_fixup_hp_gpio_led(struct hda_codec *codec,
1387				const struct hda_fixup *fix, int action)
1388{
1389	alc_fixup_hp_gpio_led(codec, action, 0x10, 0);
1390}
1391
1392static void alc245_fixup_hp_gpio_led(struct hda_codec *codec,
1393				const struct hda_fixup *fix, int action)
1394{
1395	struct alc_spec *spec = codec->spec;
1396
1397	if (action == HDA_FIXUP_ACT_PRE_PROBE)
1398		spec->micmute_led_polarity = 1;
1399	alc_fixup_hp_gpio_led(codec, action, 0, 0x04);
1400}
1401
1402/* turn on/off mic-mute LED per capture hook via VREF change */
1403static int vref_micmute_led_set(struct led_classdev *led_cdev,
1404				enum led_brightness brightness)
1405{
1406	struct hda_codec *codec = dev_to_hda_codec(led_cdev->dev->parent);
1407	struct alc_spec *spec = codec->spec;
1408
1409	alc_update_vref_led(codec, spec->cap_mute_led_nid,
1410			    spec->micmute_led_polarity, brightness);
1411	return 0;
1412}
1413
1414static void alc269_fixup_hp_gpio_mic1_led(struct hda_codec *codec,
1415				const struct hda_fixup *fix, int action)
1416{
1417	struct alc_spec *spec = codec->spec;
1418
1419	alc_fixup_hp_gpio_led(codec, action, 0x08, 0);
1420	if (action == HDA_FIXUP_ACT_PRE_PROBE) {
1421		/* Like hp_gpio_mic1_led, but also needs GPIO4 low to
1422		 * enable headphone amp
1423		 */
1424		spec->gpio_mask |= 0x10;
1425		spec->gpio_dir |= 0x10;
1426		spec->cap_mute_led_nid = 0x18;
1427		snd_hda_gen_add_micmute_led_cdev(codec, vref_micmute_led_set);
1428		codec->power_filter = led_power_filter;
1429	}
1430}
1431
1432static void alc280_fixup_hp_gpio4(struct hda_codec *codec,
1433				   const struct hda_fixup *fix, int action)
1434{
1435	struct alc_spec *spec = codec->spec;
1436
1437	alc_fixup_hp_gpio_led(codec, action, 0x08, 0);
1438	if (action == HDA_FIXUP_ACT_PRE_PROBE) {
1439		spec->cap_mute_led_nid = 0x18;
1440		snd_hda_gen_add_micmute_led_cdev(codec, vref_micmute_led_set);
1441		codec->power_filter = led_power_filter;
1442	}
1443}
1444
1445/* HP Spectre x360 14 model needs a unique workaround for enabling the amp;
1446 * it needs to toggle the GPIO0 once on and off at each time (bko#210633)
1447 */
1448static void alc245_fixup_hp_x360_amp(struct hda_codec *codec,
1449				     const struct hda_fixup *fix, int action)
1450{
1451	struct alc_spec *spec = codec->spec;
1452
1453	switch (action) {
1454	case HDA_FIXUP_ACT_PRE_PROBE:
1455		spec->gpio_mask |= 0x01;
1456		spec->gpio_dir |= 0x01;
1457		break;
1458	case HDA_FIXUP_ACT_INIT:
1459		/* need to toggle GPIO to enable the amp */
1460		alc_update_gpio_data(codec, 0x01, true);
1461		msleep(100);
1462		alc_update_gpio_data(codec, 0x01, false);
1463		break;
1464	}
1465}
1466
1467/* toggle GPIO2 at each time stream is started; we use PREPARE state instead */
1468static void alc274_hp_envy_pcm_hook(struct hda_pcm_stream *hinfo,
1469				    struct hda_codec *codec,
1470				    struct snd_pcm_substream *substream,
1471				    int action)
1472{
1473	switch (action) {
1474	case HDA_GEN_PCM_ACT_PREPARE:
1475		alc_update_gpio_data(codec, 0x04, true);
1476		break;
1477	case HDA_GEN_PCM_ACT_CLEANUP:
1478		alc_update_gpio_data(codec, 0x04, false);
1479		break;
1480	}
1481}
1482
1483static void alc274_fixup_hp_envy_gpio(struct hda_codec *codec,
1484				      const struct hda_fixup *fix,
1485				      int action)
1486{
1487	struct alc_spec *spec = codec->spec;
1488
1489	if (action == HDA_FIXUP_ACT_PROBE) {
1490		spec->gpio_mask |= 0x04;
1491		spec->gpio_dir |= 0x04;
1492		spec->gen.pcm_playback_hook = alc274_hp_envy_pcm_hook;
1493	}
1494}
1495
1496static void alc_update_coef_led(struct hda_codec *codec,
1497				struct alc_coef_led *led,
1498				bool polarity, bool on)
1499{
1500	if (polarity)
1501		on = !on;
1502	/* temporarily power up/down for setting COEF bit */
1503	alc_update_coef_idx(codec, led->idx, led->mask,
1504			    on ? led->on : led->off);
1505}
1506
1507/* update mute-LED according to the speaker mute state via COEF bit */
1508static int coef_mute_led_set(struct led_classdev *led_cdev,
1509			     enum led_brightness brightness)
1510{
1511	struct hda_codec *codec = dev_to_hda_codec(led_cdev->dev->parent);
1512	struct alc_spec *spec = codec->spec;
1513
1514	alc_update_coef_led(codec, &spec->mute_led_coef,
1515			    spec->mute_led_polarity, brightness);
1516	return 0;
1517}
1518
1519static void alc285_fixup_hp_mute_led_coefbit(struct hda_codec *codec,
1520					  const struct hda_fixup *fix,
1521					  int action)
1522{
1523	struct alc_spec *spec = codec->spec;
1524
1525	if (action == HDA_FIXUP_ACT_PRE_PROBE) {
1526		spec->mute_led_polarity = 0;
1527		spec->mute_led_coef.idx = 0x0b;
1528		spec->mute_led_coef.mask = 1 << 3;
1529		spec->mute_led_coef.on = 1 << 3;
1530		spec->mute_led_coef.off = 0;
1531		snd_hda_gen_add_mute_led_cdev(codec, coef_mute_led_set);
1532	}
1533}
1534
1535static void alc236_fixup_hp_mute_led_coefbit(struct hda_codec *codec,
1536					  const struct hda_fixup *fix,
1537					  int action)
1538{
1539	struct alc_spec *spec = codec->spec;
1540
1541	if (action == HDA_FIXUP_ACT_PRE_PROBE) {
1542		spec->mute_led_polarity = 0;
1543		spec->mute_led_coef.idx = 0x34;
1544		spec->mute_led_coef.mask = 1 << 5;
1545		spec->mute_led_coef.on = 0;
1546		spec->mute_led_coef.off = 1 << 5;
1547		snd_hda_gen_add_mute_led_cdev(codec, coef_mute_led_set);
1548	}
1549}
1550
1551static void alc236_fixup_hp_mute_led_coefbit2(struct hda_codec *codec,
1552					  const struct hda_fixup *fix, int action)
1553{
1554	struct alc_spec *spec = codec->spec;
1555
1556	if (action == HDA_FIXUP_ACT_PRE_PROBE) {
1557		spec->mute_led_polarity = 0;
1558		spec->mute_led_coef.idx = 0x07;
1559		spec->mute_led_coef.mask = 1;
1560		spec->mute_led_coef.on = 1;
1561		spec->mute_led_coef.off = 0;
1562		snd_hda_gen_add_mute_led_cdev(codec, coef_mute_led_set);
1563	}
1564}
1565
1566static void alc245_fixup_hp_mute_led_coefbit(struct hda_codec *codec,
1567					  const struct hda_fixup *fix,
1568					  int action)
1569{
1570	struct alc_spec *spec = codec->spec;
1571
1572	if (action == HDA_FIXUP_ACT_PRE_PROBE) {
1573		spec->mute_led_polarity = 0;
1574		spec->mute_led_coef.idx = 0x0b;
1575		spec->mute_led_coef.mask = 3 << 2;
1576		spec->mute_led_coef.on = 2 << 2;
1577		spec->mute_led_coef.off = 1 << 2;
1578		snd_hda_gen_add_mute_led_cdev(codec, coef_mute_led_set);
1579	}
1580}
1581
1582static void alc245_fixup_hp_mute_led_v1_coefbit(struct hda_codec *codec,
1583					  const struct hda_fixup *fix,
1584					  int action)
1585{
1586	struct alc_spec *spec = codec->spec;
1587
1588	if (action == HDA_FIXUP_ACT_PRE_PROBE) {
1589		spec->mute_led_polarity = 0;
1590		spec->mute_led_coef.idx = 0x0b;
1591		spec->mute_led_coef.mask = 3 << 2;
1592		spec->mute_led_coef.on = 1 << 3;
1593		spec->mute_led_coef.off = 0;
1594		snd_hda_gen_add_mute_led_cdev(codec, coef_mute_led_set);
1595	}
1596}
1597
1598static void alc245_fixup_hp_mute_led_v2_coefbit(struct hda_codec *codec,
1599					  const struct hda_fixup *fix,
1600					  int action)
1601{
1602	struct alc_spec *spec = codec->spec;
1603
1604	if (action == HDA_FIXUP_ACT_PRE_PROBE) {
1605		spec->mute_led_polarity = 0;
1606		spec->mute_led_coef.idx = 0x0b;
1607		spec->mute_led_coef.mask = 1 << 3;
1608		spec->mute_led_coef.on = 1 << 3;
1609		spec->mute_led_coef.off = 0;
1610		snd_hda_gen_add_mute_led_cdev(codec, coef_mute_led_set);
1611	}
1612}
1613
1614/* turn on/off mic-mute LED per capture hook by coef bit */
1615static int coef_micmute_led_set(struct led_classdev *led_cdev,
1616				enum led_brightness brightness)
1617{
1618	struct hda_codec *codec = dev_to_hda_codec(led_cdev->dev->parent);
1619	struct alc_spec *spec = codec->spec;
1620
1621	alc_update_coef_led(codec, &spec->mic_led_coef,
1622			    spec->micmute_led_polarity, brightness);
1623	return 0;
1624}
1625
1626static void alc285_fixup_hp_coef_micmute_led(struct hda_codec *codec,
1627				const struct hda_fixup *fix, int action)
1628{
1629	struct alc_spec *spec = codec->spec;
1630
1631	if (action == HDA_FIXUP_ACT_PRE_PROBE) {
1632		spec->mic_led_coef.idx = 0x19;
1633		spec->mic_led_coef.mask = 1 << 13;
1634		spec->mic_led_coef.on = 1 << 13;
1635		spec->mic_led_coef.off = 0;
1636		snd_hda_gen_add_micmute_led_cdev(codec, coef_micmute_led_set);
1637	}
1638}
1639
1640static void alc285_fixup_hp_gpio_micmute_led(struct hda_codec *codec,
1641				const struct hda_fixup *fix, int action)
1642{
1643	struct alc_spec *spec = codec->spec;
1644
1645	if (action == HDA_FIXUP_ACT_PRE_PROBE)
1646		spec->micmute_led_polarity = 1;
1647	alc_fixup_hp_gpio_led(codec, action, 0, 0x04);
1648}
1649
1650static void alc236_fixup_hp_coef_micmute_led(struct hda_codec *codec,
1651				const struct hda_fixup *fix, int action)
1652{
1653	struct alc_spec *spec = codec->spec;
1654
1655	if (action == HDA_FIXUP_ACT_PRE_PROBE) {
1656		spec->mic_led_coef.idx = 0x35;
1657		spec->mic_led_coef.mask = 3 << 2;
1658		spec->mic_led_coef.on = 2 << 2;
1659		spec->mic_led_coef.off = 1 << 2;
1660		snd_hda_gen_add_micmute_led_cdev(codec, coef_micmute_led_set);
1661	}
1662}
1663
1664static void alc295_fixup_hp_mute_led_coefbit11(struct hda_codec *codec,
1665				const struct hda_fixup *fix, int action)
1666{
1667	struct alc_spec *spec = codec->spec;
1668
1669	if (action == HDA_FIXUP_ACT_PRE_PROBE) {
1670		spec->mute_led_polarity = 0;
1671		spec->mute_led_coef.idx = 0xb;
1672		spec->mute_led_coef.mask = 3 << 3;
1673		spec->mute_led_coef.on = 1 << 3;
1674		spec->mute_led_coef.off = 1 << 4;
1675		snd_hda_gen_add_mute_led_cdev(codec, coef_mute_led_set);
1676	}
1677}
1678
1679static void alc233_fixup_lenovo_coef_micmute_led(struct hda_codec *codec,
1680				const struct hda_fixup *fix, int action)
1681{
1682	struct alc_spec *spec = codec->spec;
1683
1684	if (action == HDA_FIXUP_ACT_PRE_PROBE) {
1685		spec->mic_led_coef.idx = 0x10;
1686		spec->mic_led_coef.mask = 1 << 13;
1687		spec->mic_led_coef.on = 0;
1688		spec->mic_led_coef.off = 1 << 13;
1689		snd_hda_gen_add_micmute_led_cdev(codec, coef_micmute_led_set);
1690	}
1691}
1692
1693static void alc285_fixup_hp_mute_led(struct hda_codec *codec,
1694				const struct hda_fixup *fix, int action)
1695{
1696	alc285_fixup_hp_mute_led_coefbit(codec, fix, action);
1697	alc285_fixup_hp_coef_micmute_led(codec, fix, action);
1698}
1699
1700static void alc285_fixup_hp_spectre_x360_mute_led(struct hda_codec *codec,
1701				const struct hda_fixup *fix, int action)
1702{
1703	alc285_fixup_hp_mute_led_coefbit(codec, fix, action);
1704	alc285_fixup_hp_gpio_micmute_led(codec, fix, action);
1705}
1706
1707static void alc245_fixup_hp_envy_x360_mute_led(struct hda_codec *codec,
1708				const struct hda_fixup *fix, int action)
1709{
1710	alc245_fixup_hp_mute_led_v1_coefbit(codec, fix, action);
1711	alc245_fixup_hp_gpio_led(codec, fix, action);
1712}
1713
1714static void alc236_fixup_hp_mute_led(struct hda_codec *codec,
1715				const struct hda_fixup *fix, int action)
1716{
1717	alc236_fixup_hp_mute_led_coefbit(codec, fix, action);
1718	alc236_fixup_hp_coef_micmute_led(codec, fix, action);
1719}
1720
1721static void alc236_fixup_hp_micmute_led_vref(struct hda_codec *codec,
1722				const struct hda_fixup *fix, int action)
1723{
1724	struct alc_spec *spec = codec->spec;
1725
1726	if (action == HDA_FIXUP_ACT_PRE_PROBE) {
1727		spec->cap_mute_led_nid = 0x1a;
1728		snd_hda_gen_add_micmute_led_cdev(codec, vref_micmute_led_set);
1729		codec->power_filter = led_power_filter;
1730	}
1731}
1732
1733static void alc236_fixup_hp_mute_led_micmute_vref(struct hda_codec *codec,
1734				const struct hda_fixup *fix, int action)
1735{
1736	alc236_fixup_hp_mute_led_coefbit(codec, fix, action);
1737	alc236_fixup_hp_micmute_led_vref(codec, fix, action);
1738}
1739
1740static void alc236_fixup_hp_mute_led_micmute_gpio(struct hda_codec *codec,
1741				const struct hda_fixup *fix, int action)
1742{
1743	struct alc_spec *spec = codec->spec;
1744
1745	if (action == HDA_FIXUP_ACT_PRE_PROBE)
1746		spec->micmute_led_polarity = 1;
1747
1748	alc236_fixup_hp_mute_led_coefbit2(codec, fix, action);
1749	alc_fixup_hp_gpio_led(codec, action, 0x00, 0x01);
1750}
1751
1752static inline void alc298_samsung_write_coef_pack(struct hda_codec *codec,
1753						  const unsigned short coefs[2])
1754{
1755	alc_write_coef_idx(codec, 0x23, coefs[0]);
1756	alc_write_coef_idx(codec, 0x25, coefs[1]);
1757	alc_write_coef_idx(codec, 0x26, 0xb011);
1758}
1759
1760struct alc298_samsung_amp_desc {
1761	unsigned char nid;
1762	unsigned short init_seq[2][2];
1763};
1764
1765static void alc298_fixup_samsung_amp(struct hda_codec *codec,
1766				     const struct hda_fixup *fix, int action)
1767{
1768	int i, j;
1769	static const unsigned short init_seq[][2] = {
1770		{ 0x19, 0x00 }, { 0x20, 0xc0 }, { 0x22, 0x44 }, { 0x23, 0x08 },
1771		{ 0x24, 0x85 }, { 0x25, 0x41 }, { 0x35, 0x40 }, { 0x36, 0x01 },
1772		{ 0x38, 0x81 }, { 0x3a, 0x03 }, { 0x3b, 0x81 }, { 0x40, 0x3e },
1773		{ 0x41, 0x07 }, { 0x400, 0x1 }
1774	};
1775	static const struct alc298_samsung_amp_desc amps[] = {
1776		{ 0x3a, { { 0x18, 0x1 }, { 0x26, 0x0 } } },
1777		{ 0x39, { { 0x18, 0x2 }, { 0x26, 0x1 } } }
1778	};
1779
1780	if (action != HDA_FIXUP_ACT_INIT)
1781		return;
1782
1783	for (i = 0; i < ARRAY_SIZE(amps); i++) {
1784		alc_write_coef_idx(codec, 0x22, amps[i].nid);
1785
1786		for (j = 0; j < ARRAY_SIZE(amps[i].init_seq); j++)
1787			alc298_samsung_write_coef_pack(codec, amps[i].init_seq[j]);
1788
1789		for (j = 0; j < ARRAY_SIZE(init_seq); j++)
1790			alc298_samsung_write_coef_pack(codec, init_seq[j]);
1791	}
1792}
1793
1794struct alc298_samsung_v2_amp_desc {
1795	unsigned short nid;
1796	int init_seq_size;
1797	unsigned short init_seq[18][2];
1798};
1799
1800static const struct alc298_samsung_v2_amp_desc
1801alc298_samsung_v2_amp_desc_tbl[] = {
1802	{ 0x38, 18, {
1803		{ 0x23e1, 0x0000 }, { 0x2012, 0x006f }, { 0x2014, 0x0000 },
1804		{ 0x201b, 0x0001 }, { 0x201d, 0x0001 }, { 0x201f, 0x00fe },
1805		{ 0x2021, 0x0000 }, { 0x2022, 0x0010 }, { 0x203d, 0x0005 },
1806		{ 0x203f, 0x0003 }, { 0x2050, 0x002c }, { 0x2076, 0x000e },
1807		{ 0x207c, 0x004a }, { 0x2081, 0x0003 }, { 0x2399, 0x0003 },
1808		{ 0x23a4, 0x00b5 }, { 0x23a5, 0x0001 }, { 0x23ba, 0x0094 }
1809	}},
1810	{ 0x39, 18, {
1811		{ 0x23e1, 0x0000 }, { 0x2012, 0x006f }, { 0x2014, 0x0000 },
1812		{ 0x201b, 0x0002 }, { 0x201d, 0x0002 }, { 0x201f, 0x00fd },
1813		{ 0x2021, 0x0001 }, { 0x2022, 0x0010 }, { 0x203d, 0x0005 },
1814		{ 0x203f, 0x0003 }, { 0x2050, 0x002c }, { 0x2076, 0x000e },
1815		{ 0x207c, 0x004a }, { 0x2081, 0x0003 }, { 0x2399, 0x0003 },
1816		{ 0x23a4, 0x00b5 }, { 0x23a5, 0x0001 }, { 0x23ba, 0x0094 }
1817	}},
1818	{ 0x3c, 15, {
1819		{ 0x23e1, 0x0000 }, { 0x2012, 0x006f }, { 0x2014, 0x0000 },
1820		{ 0x201b, 0x0001 }, { 0x201d, 0x0001 }, { 0x201f, 0x00fe },
1821		{ 0x2021, 0x0000 }, { 0x2022, 0x0010 }, { 0x203d, 0x0005 },
1822		{ 0x203f, 0x0003 }, { 0x2050, 0x002c }, { 0x2076, 0x000e },
1823		{ 0x207c, 0x004a }, { 0x2081, 0x0003 }, { 0x23ba, 0x008d }
1824	}},
1825	{ 0x3d, 15, {
1826		{ 0x23e1, 0x0000 }, { 0x2012, 0x006f }, { 0x2014, 0x0000 },
1827		{ 0x201b, 0x0002 }, { 0x201d, 0x0002 }, { 0x201f, 0x00fd },
1828		{ 0x2021, 0x0001 }, { 0x2022, 0x0010 }, { 0x203d, 0x0005 },
1829		{ 0x203f, 0x0003 }, { 0x2050, 0x002c }, { 0x2076, 0x000e },
1830		{ 0x207c, 0x004a }, { 0x2081, 0x0003 }, { 0x23ba, 0x008d }
1831	}}
1832};
1833
1834static void alc298_samsung_v2_enable_amps(struct hda_codec *codec)
1835{
1836	struct alc_spec *spec = codec->spec;
1837	static const unsigned short enable_seq[][2] = {
1838		{ 0x203a, 0x0081 }, { 0x23ff, 0x0001 },
1839	};
1840	int i, j;
1841
1842	for (i = 0; i < spec->num_speaker_amps; i++) {
1843		alc_write_coef_idx(codec, 0x22, alc298_samsung_v2_amp_desc_tbl[i].nid);
1844		for (j = 0; j < ARRAY_SIZE(enable_seq); j++)
1845			alc298_samsung_write_coef_pack(codec, enable_seq[j]);
1846		codec_dbg(codec, "alc298_samsung_v2: Enabled speaker amp 0x%02x\n",
1847				alc298_samsung_v2_amp_desc_tbl[i].nid);
1848	}
1849}
1850
1851static void alc298_samsung_v2_disable_amps(struct hda_codec *codec)
1852{
1853	struct alc_spec *spec = codec->spec;
1854	static const unsigned short disable_seq[][2] = {
1855		{ 0x23ff, 0x0000 }, { 0x203a, 0x0080 },
1856	};
1857	int i, j;
1858
1859	for (i = 0; i < spec->num_speaker_amps; i++) {
1860		alc_write_coef_idx(codec, 0x22, alc298_samsung_v2_amp_desc_tbl[i].nid);
1861		for (j = 0; j < ARRAY_SIZE(disable_seq); j++)
1862			alc298_samsung_write_coef_pack(codec, disable_seq[j]);
1863		codec_dbg(codec, "alc298_samsung_v2: Disabled speaker amp 0x%02x\n",
1864				alc298_samsung_v2_amp_desc_tbl[i].nid);
1865	}
1866}
1867
1868static void alc298_samsung_v2_playback_hook(struct hda_pcm_stream *hinfo,
1869				struct hda_codec *codec,
1870				struct snd_pcm_substream *substream,
1871				int action)
1872{
1873	/* Dynamically enable/disable speaker amps before and after playback */
1874	if (action == HDA_GEN_PCM_ACT_OPEN)
1875		alc298_samsung_v2_enable_amps(codec);
1876	if (action == HDA_GEN_PCM_ACT_CLOSE)
1877		alc298_samsung_v2_disable_amps(codec);
1878}
1879
1880static void alc298_samsung_v2_init_amps(struct hda_codec *codec,
1881				int num_speaker_amps)
1882{
1883	struct alc_spec *spec = codec->spec;
1884	int i, j;
1885
1886	/* Set spec's num_speaker_amps before doing anything else */
1887	spec->num_speaker_amps = num_speaker_amps;
1888
1889	/* Disable speaker amps before init to prevent any physical damage */
1890	alc298_samsung_v2_disable_amps(codec);
1891
1892	/* Initialize the speaker amps */
1893	for (i = 0; i < spec->num_speaker_amps; i++) {
1894		alc_write_coef_idx(codec, 0x22, alc298_samsung_v2_amp_desc_tbl[i].nid);
1895		for (j = 0; j < alc298_samsung_v2_amp_desc_tbl[i].init_seq_size; j++) {
1896			alc298_samsung_write_coef_pack(codec,
1897					alc298_samsung_v2_amp_desc_tbl[i].init_seq[j]);
1898		}
1899		alc_write_coef_idx(codec, 0x89, 0x0);
1900		codec_dbg(codec, "alc298_samsung_v2: Initialized speaker amp 0x%02x\n",
1901				alc298_samsung_v2_amp_desc_tbl[i].nid);
1902	}
1903
1904	/* register hook to enable speaker amps only when they are needed */
1905	spec->gen.pcm_playback_hook = alc298_samsung_v2_playback_hook;
1906}
1907
1908/* LG Gram Style 14: program vendor coef sequence used by HDA-verb workaround */
1909struct alc298_lg_gram_style_seq {
1910	unsigned short verb;
1911	unsigned short idx;
1912	unsigned short val;
1913};
1914
1915static void alc298_lg_gram_style_coef_write(struct hda_codec *codec,
1916					    unsigned int verb,
1917					    unsigned int idx,
1918					    unsigned int val)
1919{
1920	snd_hda_codec_write(codec, 0x20, 0, AC_VERB_SET_COEF_INDEX, 0x23);
1921	snd_hda_codec_write(codec, 0x20, 0, verb, idx);
1922	snd_hda_codec_write(codec, 0x20, 0, AC_VERB_SET_PROC_COEF, 0x00);
1923	snd_hda_codec_write(codec, 0x20, 0, AC_VERB_SET_PROC_COEF, val);
1924	snd_hda_codec_write(codec, 0x20, 0, AC_VERB_SET_PROC_COEF, 0xb011);
1925}
1926
1927static void alc298_lg_gram_style_run_seq(struct hda_codec *codec,
1928					 const struct alc298_lg_gram_style_seq *seq,
1929					 int seq_size)
1930{
1931	int i;
1932
1933	for (i = 0; i < seq_size; i++)
1934		alc298_lg_gram_style_coef_write(codec, seq[i].verb,
1935						seq[i].idx, seq[i].val);
1936}
1937
1938/* Coef sequences derived from the HDA-verb workaround for this model. */
1939static const struct alc298_lg_gram_style_seq alc298_lg_gram_style_preinit_seq[] = {
1940	{ 0x420, 0x00, 0x01 },
1941};
1942
1943static const struct alc298_lg_gram_style_seq alc298_lg_gram_style_disable_seq[] = {
1944	{ 0x423, 0xff, 0x00 },
1945	{ 0x420, 0x3a, 0x80 },
1946};
1947
1948static const struct alc298_lg_gram_style_seq alc298_lg_gram_style_enable_seq[] = {
1949	{ 0x420, 0x3a, 0x81 },
1950	{ 0x423, 0xff, 0x01 },
1951};
1952
1953static const struct alc298_lg_gram_style_seq alc298_lg_gram_style_init_seq_38[] = {
1954	{ 0x423, 0xe1, 0x00 }, { 0x420, 0x12, 0x6f }, { 0x420, 0x14, 0x00 },
1955	{ 0x420, 0x1b, 0x01 }, { 0x420, 0x1d, 0x01 }, { 0x420, 0x1f, 0xfe },
1956	{ 0x420, 0x21, 0x00 }, { 0x420, 0x22, 0x10 }, { 0x420, 0x3d, 0x05 },
1957	{ 0x420, 0x3f, 0x03 }, { 0x420, 0x50, 0x2c }, { 0x420, 0x76, 0x0e },
1958	{ 0x420, 0x7c, 0x4a }, { 0x420, 0x81, 0x03 }, { 0x423, 0x99, 0x03 },
1959	{ 0x423, 0xa4, 0xb5 }, { 0x423, 0xa5, 0x01 }, { 0x423, 0xba, 0x94 },
1960};
1961
1962static const struct alc298_lg_gram_style_seq alc298_lg_gram_style_init_seq_39[] = {
1963	{ 0x423, 0xe1, 0x00 }, { 0x420, 0x12, 0x6f }, { 0x420, 0x14, 0x00 },
1964	{ 0x420, 0x1b, 0x02 }, { 0x420, 0x1d, 0x02 }, { 0x420, 0x1f, 0xfd },
1965	{ 0x420, 0x21, 0x01 }, { 0x420, 0x22, 0x10 }, { 0x420, 0x3d, 0x05 },
1966	{ 0x420, 0x3f, 0x03 }, { 0x420, 0x50, 0x2c }, { 0x420, 0x76, 0x0e },
1967	{ 0x420, 0x7c, 0x4a }, { 0x420, 0x81, 0x03 }, { 0x423, 0x99, 0x03 },
1968	{ 0x423, 0xa4, 0xb5 }, { 0x423, 0xa5, 0x01 }, { 0x423, 0xba, 0x94 },
1969};
1970
1971static const struct alc298_lg_gram_style_seq alc298_lg_gram_style_init_seq_3c[] = {
1972	{ 0x423, 0xe1, 0x00 }, { 0x420, 0x12, 0x6f }, { 0x420, 0x14, 0x00 },
1973	{ 0x420, 0x1b, 0x01 }, { 0x420, 0x1d, 0x01 }, { 0x420, 0x1f, 0xfe },
1974	{ 0x420, 0x21, 0x00 }, { 0x420, 0x22, 0x10 }, { 0x420, 0x3d, 0x05 },
1975	{ 0x420, 0x3f, 0x03 }, { 0x420, 0x50, 0x2c }, { 0x420, 0x76, 0x0e },
1976	{ 0x420, 0x7c, 0x4a }, { 0x420, 0x81, 0x03 }, { 0x423, 0xba, 0x8d },
1977};
1978
1979static const struct alc298_lg_gram_style_seq alc298_lg_gram_style_init_seq_3d[] = {
1980	{ 0x423, 0xe1, 0x00 }, { 0x420, 0x12, 0x6f }, { 0x420, 0x14, 0x00 },
1981	{ 0x420, 0x1b, 0x02 }, { 0x420, 0x1d, 0x02 }, { 0x420, 0x1f, 0xfd },
1982	{ 0x420, 0x21, 0x01 }, { 0x420, 0x22, 0x10 }, { 0x420, 0x3d, 0x05 },
1983	{ 0x420, 0x3f, 0x03 }, { 0x420, 0x50, 0x2c }, { 0x420, 0x76, 0x0e },
1984	{ 0x420, 0x7c, 0x4a }, { 0x420, 0x81, 0x03 }, { 0x423, 0xba, 0x8d },
1985};
1986
1987struct alc298_lg_gram_style_amp_desc {
1988	unsigned char nid;
1989	const struct alc298_lg_gram_style_seq *init_seq;
1990	int init_seq_size;
1991};
1992
1993static const struct alc298_lg_gram_style_amp_desc alc298_lg_gram_style_amps[] = {
1994	{ 0x38, alc298_lg_gram_style_init_seq_38,
1995		ARRAY_SIZE(alc298_lg_gram_style_init_seq_38) },
1996	{ 0x39, alc298_lg_gram_style_init_seq_39,
1997		ARRAY_SIZE(alc298_lg_gram_style_init_seq_39) },
1998	{ 0x3c, alc298_lg_gram_style_init_seq_3c,
1999		ARRAY_SIZE(alc298_lg_gram_style_init_seq_3c) },
2000	{ 0x3d, alc298_lg_gram_style_init_seq_3d,
2001		ARRAY_SIZE(alc298_lg_gram_style_init_seq_3d) },
2002};
2003
2004static void alc298_lg_gram_style_enable_amps(struct hda_codec *codec)
2005{
2006	struct alc_spec *spec = codec->spec;
2007	int i;
2008
2009	for (i = 0; i < spec->num_speaker_amps; i++) {
2010		alc_write_coef_idx(codec, 0x22, alc298_lg_gram_style_amps[i].nid);
2011		alc298_lg_gram_style_run_seq(codec,
2012					     alc298_lg_gram_style_enable_seq,
2013					     ARRAY_SIZE(alc298_lg_gram_style_enable_seq));
2014	}
2015}
2016
2017static void alc298_lg_gram_style_disable_amps(struct hda_codec *codec)
2018{
2019	struct alc_spec *spec = codec->spec;
2020	int i;
2021
2022	for (i = 0; i < spec->num_speaker_amps; i++) {
2023		alc_write_coef_idx(codec, 0x22, alc298_lg_gram_style_amps[i].nid);
2024		alc298_lg_gram_style_run_seq(codec,
2025					     alc298_lg_gram_style_disable_seq,
2026					     ARRAY_SIZE(alc298_lg_gram_style_disable_seq));
2027	}
2028}
2029
2030static void alc298_lg_gram_style_playback_hook(struct hda_pcm_stream *hinfo,
2031					       struct hda_codec *codec,
2032					       struct snd_pcm_substream *substream,
2033					       int action)
2034{
2035	if (action == HDA_GEN_PCM_ACT_OPEN)
2036		alc298_lg_gram_style_enable_amps(codec);
2037	if (action == HDA_GEN_PCM_ACT_CLOSE)
2038		alc298_lg_gram_style_disable_amps(codec);
2039}
2040
2041static void alc298_lg_gram_style_init_amps(struct hda_codec *codec)
2042{
2043	struct alc_spec *spec = codec->spec;
2044	int i;
2045
2046	spec->num_speaker_amps = ARRAY_SIZE(alc298_lg_gram_style_amps);
2047
2048	for (i = 0; i < spec->num_speaker_amps; i++) {
2049		alc_write_coef_idx(codec, 0x22, alc298_lg_gram_style_amps[i].nid);
2050		alc298_lg_gram_style_run_seq(codec,
2051					     alc298_lg_gram_style_preinit_seq,
2052					     ARRAY_SIZE(alc298_lg_gram_style_preinit_seq));
2053		alc298_lg_gram_style_run_seq(codec,
2054					     alc298_lg_gram_style_disable_seq,
2055					     ARRAY_SIZE(alc298_lg_gram_style_disable_seq));
2056		alc298_lg_gram_style_run_seq(codec,
2057					     alc298_lg_gram_style_amps[i].init_seq,
2058					     alc298_lg_gram_style_amps[i].init_seq_size);
2059		alc_write_coef_idx(codec, 0x89, 0x0);
2060	}
2061
2062	spec->gen.pcm_playback_hook = alc298_lg_gram_style_playback_hook;
2063}
2064
2065static void alc298_fixup_samsung_amp_v2_2_amps(struct hda_codec *codec,
2066				const struct hda_fixup *fix, int action)
2067{
2068	if (action == HDA_FIXUP_ACT_PROBE)
2069		alc298_samsung_v2_init_amps(codec, 2);
2070}
2071
2072static void alc298_fixup_samsung_amp_v2_4_amps(struct hda_codec *codec,
2073				const struct hda_fixup *fix, int action)
2074{
2075	if (action == HDA_FIXUP_ACT_PROBE)
2076		alc298_samsung_v2_init_amps(codec, 4);
2077}
2078
2079static void alc298_fixup_lg_gram_style_14(struct hda_codec *codec,
2080					  const struct hda_fixup *fix, int action)
2081{
2082	if (action == HDA_FIXUP_ACT_PROBE)
2083		alc298_lg_gram_style_init_amps(codec);
2084}
2085
2086static void gpio2_mic_hotkey_event(struct hda_codec *codec,
2087				   struct hda_jack_callback *event)
2088{
2089	struct alc_spec *spec = codec->spec;
2090
2091	/* GPIO2 just toggles on a keypress/keyrelease cycle. Therefore
2092	   send both key on and key off event for every interrupt. */
2093	input_report_key(spec->kb_dev, spec->alc_mute_keycode_map[ALC_KEY_MICMUTE_INDEX], 1);
2094	input_sync(spec->kb_dev);
2095	input_report_key(spec->kb_dev, spec->alc_mute_keycode_map[ALC_KEY_MICMUTE_INDEX], 0);
2096	input_sync(spec->kb_dev);
2097}
2098
2099static int alc_register_micmute_input_device(struct hda_codec *codec)
2100{
2101	struct alc_spec *spec = codec->spec;
2102	int i;
2103
2104	spec->kb_dev = input_allocate_device();
2105	if (!spec->kb_dev) {
2106		codec_err(codec, "Out of memory (input_allocate_device)\n");
2107		return -ENOMEM;
2108	}
2109
2110	spec->alc_mute_keycode_map[ALC_KEY_MICMUTE_INDEX] = KEY_MICMUTE;
2111
2112	spec->kb_dev->name = "Microphone Mute Button";
2113	spec->kb_dev->evbit[0] = BIT_MASK(EV_KEY);
2114	spec->kb_dev->keycodesize = sizeof(spec->alc_mute_keycode_map[0]);
2115	spec->kb_dev->keycodemax = ARRAY_SIZE(spec->alc_mute_keycode_map);
2116	spec->kb_dev->keycode = spec->alc_mute_keycode_map;
2117	for (i = 0; i < ARRAY_SIZE(spec->alc_mute_keycode_map); i++)
2118		set_bit(spec->alc_mute_keycode_map[i], spec->kb_dev->keybit);
2119
2120	if (input_register_device(spec->kb_dev)) {
2121		codec_err(codec, "input_register_device failed\n");
2122		input_free_device(spec->kb_dev);
2123		spec->kb_dev = NULL;
2124		return -ENOMEM;
2125	}
2126
2127	return 0;
2128}
2129
2130/* GPIO1 = set according to SKU external amp
2131 * GPIO2 = mic mute hotkey
2132 * GPIO3 = mute LED
2133 * GPIO4 = mic mute LED
2134 */
2135static void alc280_fixup_hp_gpio2_mic_hotkey(struct hda_codec *codec,
2136					     const struct hda_fixup *fix, int action)
2137{
2138	struct alc_spec *spec = codec->spec;
2139
2140	alc_fixup_hp_gpio_led(codec, action, 0x08, 0x10);
2141	if (action == HDA_FIXUP_ACT_PRE_PROBE) {
2142		spec->init_amp = ALC_INIT_DEFAULT;
2143		if (alc_register_micmute_input_device(codec) != 0)
2144			return;
2145
2146		spec->gpio_mask |= 0x06;
2147		spec->gpio_dir |= 0x02;
2148		spec->gpio_data |= 0x02;
2149		snd_hda_codec_write_cache(codec, codec->core.afg, 0,
2150					  AC_VERB_SET_GPIO_UNSOLICITED_RSP_MASK, 0x04);
2151		snd_hda_jack_detect_enable_callback(codec, codec->core.afg,
2152						    gpio2_mic_hotkey_event);
2153		return;
2154	}
2155
2156	if (!spec->kb_dev)
2157		return;
2158
2159	switch (action) {
2160	case HDA_FIXUP_ACT_FREE:
2161		input_unregister_device(spec->kb_dev);
2162		spec->kb_dev = NULL;
2163	}
2164}
2165
2166/* GPIO2 = mic mute hotkey
2167 * GPIO3 = mic mute LED
2168 */
2169static void alc233_fixup_lenovo_gpio2_mic_hotkey(struct hda_codec *codec,
2170					     const struct hda_fixup *fix, int action)
2171{
2172	struct alc_spec *spec = codec->spec;
2173
2174	alc233_fixup_lenovo_coef_micmute_led(codec, fix, action);
2175	if (action == HDA_FIXUP_ACT_PRE_PROBE) {
2176		alc_update_coef_idx(codec, 0x10, 1<<2, 1<<2);
2177		if (alc_register_micmute_input_device(codec) != 0)
2178			return;
2179
2180		spec->gpio_mask |= 0x04;
2181		spec->gpio_dir |= 0x0;
2182		snd_hda_codec_write_cache(codec, codec->core.afg, 0,
2183					  AC_VERB_SET_GPIO_UNSOLICITED_RSP_MASK, 0x04);
2184		snd_hda_jack_detect_enable_callback(codec, codec->core.afg,
2185						    gpio2_mic_hotkey_event);
2186		return;
2187	}
2188
2189	if (!spec->kb_dev)
2190		return;
2191
2192	switch (action) {
2193	case HDA_FIXUP_ACT_FREE:
2194		input_unregister_device(spec->kb_dev);
2195		spec->kb_dev = NULL;
2196	}
2197}
2198
2199/* Line2 = mic mute hotkey
2200 * GPIO2 = mic mute LED
2201 */
2202static void alc233_fixup_lenovo_line2_mic_hotkey(struct hda_codec *codec,
2203					     const struct hda_fixup *fix, int action)
2204{
2205	struct alc_spec *spec = codec->spec;
2206
2207	alc_fixup_hp_gpio_led(codec, action, 0, 0x04);
2208	if (action == HDA_FIXUP_ACT_PRE_PROBE) {
2209		spec->init_amp = ALC_INIT_DEFAULT;
2210		if (alc_register_micmute_input_device(codec) != 0)
2211			return;
2212
2213		snd_hda_jack_detect_enable_callback(codec, 0x1b,
2214						    gpio2_mic_hotkey_event);
2215		return;
2216	}
2217
2218	if (!spec->kb_dev)
2219		return;
2220
2221	switch (action) {
2222	case HDA_FIXUP_ACT_FREE:
2223		input_unregister_device(spec->kb_dev);
2224		spec->kb_dev = NULL;
2225	}
2226}
2227
2228static void alc269_fixup_hp_line1_mic1_led(struct hda_codec *codec,
2229				const struct hda_fixup *fix, int action)
2230{
2231	struct alc_spec *spec = codec->spec;
2232
2233	alc269_fixup_hp_mute_led_micx(codec, fix, action, 0x1a);
2234	if (action == HDA_FIXUP_ACT_PRE_PROBE) {
2235		spec->cap_mute_led_nid = 0x18;
2236		snd_hda_gen_add_micmute_led_cdev(codec, vref_micmute_led_set);
2237	}
2238}
2239
2240static void alc233_fixup_lenovo_low_en_micmute_led(struct hda_codec *codec,
2241				const struct hda_fixup *fix, int action)
2242{
2243	struct alc_spec *spec = codec->spec;
2244
2245	if (action == HDA_FIXUP_ACT_PRE_PROBE)
2246		spec->micmute_led_polarity = 1;
2247	alc233_fixup_lenovo_line2_mic_hotkey(codec, fix, action);
2248}
2249
2250static void alc255_set_default_jack_type(struct hda_codec *codec)
2251{
2252	/* Set to iphone type */
2253	static const struct coef_fw alc255fw[] = {
2254		WRITE_COEF(0x1b, 0x880b),
2255		WRITE_COEF(0x45, 0xd089),
2256		WRITE_COEF(0x1b, 0x080b),
2257		WRITE_COEF(0x46, 0x0004),
2258		WRITE_COEF(0x1b, 0x0c0b),
2259		{}
2260	};
2261	static const struct coef_fw alc256fw[] = {
2262		WRITE_COEF(0x1b, 0x884b),
2263		WRITE_COEF(0x45, 0xd089),
2264		WRITE_COEF(0x1b, 0x084b),
2265		WRITE_COEF(0x46, 0x0004),
2266		WRITE_COEF(0x1b, 0x0c4b),
2267		{}
2268	};
2269	switch (codec->core.vendor_id) {
2270	case 0x10ec0255:
2271		alc_process_coef_fw(codec, alc255fw);
2272		break;
2273	case 0x10ec0230:
2274	case 0x10ec0236:
2275	case 0x10ec0256:
2276	case 0x19e58326:
2277		alc_process_coef_fw(codec, alc256fw);
2278		break;
2279	}
2280	msleep(30);
2281}
2282
2283static void alc_fixup_headset_mode_alc255(struct hda_codec *codec,
2284				const struct hda_fixup *fix, int action)
2285{
2286	if (action == HDA_FIXUP_ACT_PRE_PROBE) {
2287		alc255_set_default_jack_type(codec);
2288	}
2289	alc_fixup_headset_mode(codec, fix, action);
2290}
2291
2292static void alc_fixup_headset_mode_alc255_no_hp_mic(struct hda_codec *codec,
2293				const struct hda_fixup *fix, int action)
2294{
2295	if (action == HDA_FIXUP_ACT_PRE_PROBE) {
2296		struct alc_spec *spec = codec->spec;
2297		spec->parse_flags |= HDA_PINCFG_HEADSET_MIC;
2298		alc255_set_default_jack_type(codec);
2299	}
2300	else
2301		alc_fixup_headset_mode(codec, fix, action);
2302}
2303
2304static void alc288_update_headset_jack_cb(struct hda_codec *codec,
2305				       struct hda_jack_callback *jack)
2306{
2307	struct alc_spec *spec = codec->spec;
2308
2309	alc_update_headset_jack_cb(codec, jack);
2310	/* Headset Mic enable or disable, only for Dell Dino */
2311	alc_update_gpio_data(codec, 0x40, spec->gen.hp_jack_present);
2312}
2313
2314static void alc_fixup_headset_mode_dell_alc288(struct hda_codec *codec,
2315				const struct hda_fixup *fix, int action)
2316{
2317	alc_fixup_headset_mode(codec, fix, action);
2318	if (action == HDA_FIXUP_ACT_PROBE) {
2319		struct alc_spec *spec = codec->spec;
2320		/* toggled via hp_automute_hook */
2321		spec->gpio_mask |= 0x40;
2322		spec->gpio_dir |= 0x40;
2323		spec->gen.hp_automute_hook = alc288_update_headset_jack_cb;
2324	}
2325}
2326
2327static void alc_fixup_no_shutup(struct hda_codec *codec,
2328				const struct hda_fixup *fix, int action)
2329{
2330	if (action == HDA_FIXUP_ACT_PRE_PROBE) {
2331		struct alc_spec *spec = codec->spec;
2332		spec->no_shutup_pins = 1;
2333	}
2334}
2335
2336/* fixup for Thinkpad docks: add dock pins, avoid HP parser fixup */
2337static void alc_fixup_tpt440_dock(struct hda_codec *codec,
2338				  const struct hda_fixup *fix, int action)
2339{
2340	static const struct hda_pintbl pincfgs[] = {
2341		{ 0x16, 0x21211010 }, /* dock headphone */
2342		{ 0x19, 0x21a11010 }, /* dock mic */
2343		{ }
2344	};
2345	struct alc_spec *spec = codec->spec;
2346
2347	if (action == HDA_FIXUP_ACT_PRE_PROBE) {
2348		spec->parse_flags = HDA_PINCFG_NO_HP_FIXUP;
2349		codec->power_save_node = 0; /* avoid click noises */
2350		snd_hda_apply_pincfgs(codec, pincfgs);
2351	}
2352}
2353
2354static void alc_fixup_tpt470_dock(struct hda_codec *codec,
2355				  const struct hda_fixup *fix, int action)
2356{
2357	static const struct hda_pintbl pincfgs[] = {
2358		{ 0x17, 0x21211010 }, /* dock headphone */
2359		{ 0x19, 0x21a11010 }, /* dock mic */
2360		{ }
2361	};
2362	struct alc_spec *spec = codec->spec;
2363
2364	if (action == HDA_FIXUP_ACT_PRE_PROBE) {
2365		spec->parse_flags = HDA_PINCFG_NO_HP_FIXUP;
2366		snd_hda_apply_pincfgs(codec, pincfgs);
2367	} else if (action == HDA_FIXUP_ACT_INIT) {
2368		/* Enable DOCK device */
2369		snd_hda_codec_write(codec, 0x17, 0,
2370			    AC_VERB_SET_CONFIG_DEFAULT_BYTES_3, 0);
2371		/* Enable DOCK device */
2372		snd_hda_codec_write(codec, 0x19, 0,
2373			    AC_VERB_SET_CONFIG_DEFAULT_BYTES_3, 0);
2374	}
2375}
2376
2377static void alc_fixup_tpt470_dacs(struct hda_codec *codec,
2378				  const struct hda_fixup *fix, int action)
2379{
2380	/* Assure the speaker pin to be coupled with DAC NID 0x03; otherwise
2381	 * the speaker output becomes too low by some reason on Thinkpads with
2382	 * ALC298 codec
2383	 */
2384	static const hda_nid_t preferred_pairs[] = {
2385		0x14, 0x03, 0x17, 0x02, 0x21, 0x02,
2386		0
2387	};
2388	struct alc_spec *spec = codec->spec;
2389
2390	if (action == HDA_FIXUP_ACT_PRE_PROBE)
2391		spec->gen.preferred_dacs = preferred_pairs;
2392}
2393
2394static void alc295_fixup_asus_dacs(struct hda_codec *codec,
2395				   const struct hda_fixup *fix, int action)
2396{
2397	static const hda_nid_t preferred_pairs[] = {
2398		0x17, 0x02, 0x21, 0x03, 0
2399	};
2400	struct alc_spec *spec = codec->spec;
2401
2402	if (action == HDA_FIXUP_ACT_PRE_PROBE)
2403		spec->gen.preferred_dacs = preferred_pairs;
2404}
2405
2406static void alc271_hp_gate_mic_jack(struct hda_codec *codec,
2407				    const struct hda_fixup *fix,
2408				    int action)
2409{
2410	struct alc_spec *spec = codec->spec;
2411
2412	if (action == HDA_FIXUP_ACT_PROBE) {
2413		int mic_pin = alc_find_ext_mic_pin(codec);
2414		int hp_pin = alc_get_hp_pin(spec);
2415
2416		if (snd_BUG_ON(!mic_pin || !hp_pin))
2417			return;
2418		snd_hda_jack_set_gating_jack(codec, mic_pin, hp_pin);
2419	}
2420}
2421
2422static void alc269_fixup_limit_int_mic_boost(struct hda_codec *codec,
2423					     const struct hda_fixup *fix,
2424					     int action)
2425{
2426	struct alc_spec *spec = codec->spec;
2427	struct auto_pin_cfg *cfg = &spec->gen.autocfg;
2428	int i;
2429
2430	/* The mic boosts on level 2 and 3 are too noisy
2431	   on the internal mic input.
2432	   Therefore limit the boost to 0 or 1. */
2433
2434	if (action != HDA_FIXUP_ACT_PROBE)
2435		return;
2436
2437	for (i = 0; i < cfg->num_inputs; i++) {
2438		hda_nid_t nid = cfg->inputs[i].pin;
2439		unsigned int defcfg;
2440		if (cfg->inputs[i].type != AUTO_PIN_MIC)
2441			continue;
2442		defcfg = snd_hda_codec_get_pincfg(codec, nid);
2443		if (snd_hda_get_input_pin_attr(defcfg) != INPUT_PIN_ATTR_INT)
2444			continue;
2445
2446		snd_hda_override_amp_caps(codec, nid, HDA_INPUT,
2447					  (0x00 << AC_AMPCAP_OFFSET_SHIFT) |
2448					  (0x01 << AC_AMPCAP_NUM_STEPS_SHIFT) |
2449					  (0x2f << AC_AMPCAP_STEP_SIZE_SHIFT) |
2450					  (0 << AC_AMPCAP_MUTE_SHIFT));
2451	}
2452}
2453
2454static void alc283_hp_automute_hook(struct hda_codec *codec,
2455				    struct hda_jack_callback *jack)
2456{
2457	struct alc_spec *spec = codec->spec;
2458	int vref;
2459
2460	msleep(200);
2461	snd_hda_gen_hp_automute(codec, jack);
2462
2463	vref = spec->gen.hp_jack_present ? PIN_VREF80 : 0;
2464
2465	msleep(600);
2466	snd_hda_codec_write(codec, 0x19, 0, AC_VERB_SET_PIN_WIDGET_CONTROL,
2467			    vref);
2468}
2469
2470static void alc283_fixup_chromebook(struct hda_codec *codec,
2471				    const struct hda_fixup *fix, int action)
2472{
2473	struct alc_spec *spec = codec->spec;
2474
2475	switch (action) {
2476	case HDA_FIXUP_ACT_PRE_PROBE:
2477		snd_hda_override_wcaps(codec, 0x03, 0);
2478		/* Disable AA-loopback as it causes white noise */
2479		spec->gen.mixer_nid = 0;
2480		break;
2481	case HDA_FIXUP_ACT_INIT:
2482		/* MIC2-VREF control */
2483		/* Set to manual mode */
2484		alc_update_coef_idx(codec, 0x06, 0x000c, 0);
2485		/* Enable Line1 input control by verb */
2486		alc_update_coef_idx(codec, 0x1a, 0, 1 << 4);
2487		break;
2488	}
2489}
2490
2491static void alc283_fixup_sense_combo_jack(struct hda_codec *codec,
2492				    const struct hda_fixup *fix, int action)
2493{
2494	struct alc_spec *spec = codec->spec;
2495
2496	switch (action) {
2497	case HDA_FIXUP_ACT_PRE_PROBE:
2498		spec->gen.hp_automute_hook = alc283_hp_automute_hook;
2499		break;
2500	case HDA_FIXUP_ACT_INIT:
2501		/* MIC2-VREF control */
2502		/* Set to manual mode */
2503		alc_update_coef_idx(codec, 0x06, 0x000c, 0);
2504		break;
2505	}
2506}
2507
2508/* mute tablet speaker pin (0x14) via dock plugging in addition */
2509static void asus_tx300_automute(struct hda_codec *codec)
2510{
2511	struct alc_spec *spec = codec->spec;
2512	snd_hda_gen_update_outputs(codec);
2513	if (snd_hda_jack_detect(codec, 0x1b))
2514		spec->gen.mute_bits |= (1ULL << 0x14);
2515}
2516
2517static void alc282_fixup_asus_tx300(struct hda_codec *codec,
2518				    const struct hda_fixup *fix, int action)
2519{
2520	struct alc_spec *spec = codec->spec;
2521	static const struct hda_pintbl dock_pins[] = {
2522		{ 0x1b, 0x21114000 }, /* dock speaker pin */
2523		{}
2524	};
2525
2526	switch (action) {
2527	case HDA_FIXUP_ACT_PRE_PROBE:
2528		spec->init_amp = ALC_INIT_DEFAULT;
2529		/* TX300 needs to set up GPIO2 for the speaker amp */
2530		alc_setup_gpio(codec, 0x04);
2531		snd_hda_apply_pincfgs(codec, dock_pins);
2532		spec->gen.auto_mute_via_amp = 1;
2533		spec->gen.automute_hook = asus_tx300_automute;
2534		snd_hda_jack_detect_enable_callback(codec, 0x1b,
2535						    snd_hda_gen_hp_automute);
2536		break;
2537	case HDA_FIXUP_ACT_PROBE:
2538		spec->init_amp = ALC_INIT_DEFAULT;
2539		break;
2540	case HDA_FIXUP_ACT_BUILD:
2541		/* this is a bit tricky; give more sane names for the main
2542		 * (tablet) speaker and the dock speaker, respectively
2543		 */
2544		rename_ctl(codec, "Speaker Playback Switch",
2545			   "Dock Speaker Playback Switch");
2546		rename_ctl(codec, "Bass Speaker Playback Switch",
2547			   "Speaker Playback Switch");
2548		break;
2549	}
2550}
2551
2552static void alc290_fixup_mono_speakers(struct hda_codec *codec,
2553				       const struct hda_fixup *fix, int action)
2554{
2555	if (action == HDA_FIXUP_ACT_PRE_PROBE) {
2556		/* DAC node 0x03 is giving mono output. We therefore want to
2557		   make sure 0x14 (front speaker) and 0x15 (headphones) use the
2558		   stereo DAC, while leaving 0x17 (bass speaker) for node 0x03. */
2559		static const hda_nid_t conn1[] = { 0x0c };
2560		snd_hda_override_conn_list(codec, 0x14, ARRAY_SIZE(conn1), conn1);
2561		snd_hda_override_conn_list(codec, 0x15, ARRAY_SIZE(conn1), conn1);
2562	}
2563}
2564
2565static void alc298_fixup_speaker_volume(struct hda_codec *codec,
2566					const struct hda_fixup *fix, int action)
2567{
2568	if (action == HDA_FIXUP_ACT_PRE_PROBE) {
2569		/* The speaker is routed to the Node 0x06 by a mistake, as a result
2570		   we can't adjust the speaker's volume since this node does not has
2571		   Amp-out capability. we change the speaker's route to:
2572		   Node 0x02 (Audio Output) -> Node 0x0c (Audio Mixer) -> Node 0x17 (
2573		   Pin Complex), since Node 0x02 has Amp-out caps, we can adjust
2574		   speaker's volume now. */
2575
2576		static const hda_nid_t conn1[] = { 0x0c };
2577		snd_hda_override_conn_list(codec, 0x17, ARRAY_SIZE(conn1), conn1);
2578	}
2579}
2580
2581/* disable DAC3 (0x06) selection on NID 0x17 as it has no volume amp control */
2582static void alc295_fixup_disable_dac3(struct hda_codec *codec,
2583				      const struct hda_fixup *fix, int action)
2584{
2585	if (action == HDA_FIXUP_ACT_PRE_PROBE) {
2586		static const hda_nid_t conn[] = { 0x02, 0x03 };
2587		snd_hda_override_conn_list(codec, 0x17, ARRAY_SIZE(conn), conn);
2588	}
2589}
2590
2591/* force NID 0x17 (Bass Speaker) to DAC1 to share it with the main speaker */
2592static void alc285_fixup_speaker2_to_dac1(struct hda_codec *codec,
2593					  const struct hda_fixup *fix, int action)
2594{
2595	if (action == HDA_FIXUP_ACT_PRE_PROBE) {
2596		static const hda_nid_t conn[] = { 0x02 };
2597		snd_hda_override_conn_list(codec, 0x17, ARRAY_SIZE(conn), conn);
2598	}
2599}
2600
2601/* disable DAC3 (0x06) selection on NID 0x15 - share Speaker/Bass Speaker DAC 0x03 */
2602static void alc294_fixup_bass_speaker_15(struct hda_codec *codec,
2603					 const struct hda_fixup *fix, int action)
2604{
2605	if (action == HDA_FIXUP_ACT_PRE_PROBE) {
2606		static const hda_nid_t conn[] = { 0x02, 0x03 };
2607		snd_hda_override_conn_list(codec, 0x15, ARRAY_SIZE(conn), conn);
2608		snd_hda_gen_add_micmute_led_cdev(codec, NULL);
2609	}
2610}
2611
2612/* Hook to update amp GPIO4 for automute */
2613static void alc280_hp_gpio4_automute_hook(struct hda_codec *codec,
2614					  struct hda_jack_callback *jack)
2615{
2616	struct alc_spec *spec = codec->spec;
2617
2618	snd_hda_gen_hp_automute(codec, jack);
2619	/* mute_led_polarity is set to 0, so we pass inverted value here */
2620	alc_update_gpio_led(codec, 0x10, spec->mute_led_polarity,
2621			    !spec->gen.hp_jack_present);
2622}
2623
2624/* Manage GPIOs for HP EliteBook Folio 9480m.
2625 *
2626 * GPIO4 is the headphone amplifier power control
2627 * GPIO3 is the audio output mute indicator LED
2628 */
2629
2630static void alc280_fixup_hp_9480m(struct hda_codec *codec,
2631				  const struct hda_fixup *fix,
2632				  int action)
2633{
2634	struct alc_spec *spec = codec->spec;
2635
2636	alc_fixup_hp_gpio_led(codec, action, 0x08, 0);
2637	if (action == HDA_FIXUP_ACT_PRE_PROBE) {
2638		/* amp at GPIO4; toggled via alc280_hp_gpio4_automute_hook() */
2639		spec->gpio_mask |= 0x10;
2640		spec->gpio_dir |= 0x10;
2641		spec->gen.hp_automute_hook = alc280_hp_gpio4_automute_hook;
2642	}
2643}
2644
2645static void alc275_fixup_gpio4_off(struct hda_codec *codec,
2646				   const struct hda_fixup *fix,
2647				   int action)
2648{
2649	struct alc_spec *spec = codec->spec;
2650
2651	if (action == HDA_FIXUP_ACT_PRE_PROBE) {
2652		spec->gpio_mask |= 0x04;
2653		spec->gpio_dir |= 0x04;
2654		/* set data bit low */
2655	}
2656}
2657
2658/* Quirk for Thinkpad X1 7th and 8th Gen
2659 * The following fixed routing needed
2660 * DAC1 (NID 0x02) -> Speaker (NID 0x14); some eq applied secretly
2661 * DAC2 (NID 0x03) -> Bass (NID 0x17) & Headphone (NID 0x21); sharing a DAC
2662 * DAC3 (NID 0x06) -> Unused, due to the lack of volume amp
2663 */
2664static void alc285_fixup_thinkpad_x1_gen7(struct hda_codec *codec,
2665					  const struct hda_fixup *fix, int action)
2666{
2667	static const hda_nid_t conn[] = { 0x02, 0x03 }; /* exclude 0x06 */
2668	static const hda_nid_t preferred_pairs[] = {
2669		0x14, 0x02, 0x17, 0x03, 0x21, 0x03, 0
2670	};
2671	struct alc_spec *spec = codec->spec;
2672
2673	switch (action) {
2674	case HDA_FIXUP_ACT_PRE_PROBE:
2675		snd_hda_override_conn_list(codec, 0x17, ARRAY_SIZE(conn), conn);
2676		spec->gen.preferred_dacs = preferred_pairs;
2677		break;
2678	case HDA_FIXUP_ACT_BUILD:
2679		/* The generic parser creates somewhat unintuitive volume ctls
2680		 * with the fixed routing above, and the shared DAC2 may be
2681		 * confusing for PA.
2682		 * Rename those to unique names so that PA doesn't touch them
2683		 * and use only Master volume.
2684		 */
2685		rename_ctl(codec, "Front Playback Volume", "DAC1 Playback Volume");
2686		rename_ctl(codec, "Bass Speaker Playback Volume", "DAC2 Playback Volume");
2687		break;
2688	}
2689}
2690
2691static void alc225_fixup_s3_pop_noise(struct hda_codec *codec,
2692				      const struct hda_fixup *fix, int action)
2693{
2694	if (action != HDA_FIXUP_ACT_PRE_PROBE)
2695		return;
2696
2697	codec->power_save_node = 1;
2698}
2699
2700/* Forcibly assign NID 0x03 to HP/LO while NID 0x02 to SPK for EQ */
2701static void alc274_fixup_bind_dacs(struct hda_codec *codec,
2702				    const struct hda_fixup *fix, int action)
2703{
2704	struct alc_spec *spec = codec->spec;
2705	static const hda_nid_t preferred_pairs[] = {
2706		0x21, 0x03, 0x1b, 0x03, 0x16, 0x02,
2707		0
2708	};
2709
2710	if (action != HDA_FIXUP_ACT_PRE_PROBE)
2711		return;
2712
2713	spec->gen.preferred_dacs = preferred_pairs;
2714	spec->gen.auto_mute_via_amp = 1;
2715	codec->power_save_node = 0;
2716}
2717
2718/* avoid DAC 0x06 for speaker switch 0x17; it has no volume control */
2719static void alc274_fixup_hp_aio_bind_dacs(struct hda_codec *codec,
2720				    const struct hda_fixup *fix, int action)
2721{
2722	static const hda_nid_t conn[] = { 0x02, 0x03 }; /* exclude 0x06 */
2723	/* The speaker is routed to the Node 0x06 by a mistake, thus the
2724	 * speaker's volume can't be adjusted since the node doesn't have
2725	 * Amp-out capability. Assure the speaker and lineout pin to be
2726	 * coupled with DAC NID 0x02.
2727	 */
2728	static const hda_nid_t preferred_pairs[] = {
2729		0x16, 0x02, 0x17, 0x02, 0x21, 0x03, 0
2730	};
2731	struct alc_spec *spec = codec->spec;
2732
2733	snd_hda_override_conn_list(codec, 0x17, ARRAY_SIZE(conn), conn);
2734	spec->gen.preferred_dacs = preferred_pairs;
2735}
2736
2737/* avoid DAC 0x06 for bass speaker 0x17; it has no volume control */
2738static void alc289_fixup_asus_ga401(struct hda_codec *codec,
2739				    const struct hda_fixup *fix, int action)
2740{
2741	static const hda_nid_t preferred_pairs[] = {
2742		0x14, 0x02, 0x17, 0x02, 0x21, 0x03, 0
2743	};
2744	struct alc_spec *spec = codec->spec;
2745
2746	if (action == HDA_FIXUP_ACT_PRE_PROBE)
2747		spec->gen.preferred_dacs = preferred_pairs;
2748}
2749
2750/* The DAC of NID 0x3 will introduce click/pop noise on headphones, so invalidate it */
2751static void alc285_fixup_invalidate_dacs(struct hda_codec *codec,
2752			      const struct hda_fixup *fix, int action)
2753{
2754	if (action != HDA_FIXUP_ACT_PRE_PROBE)
2755		return;
2756
2757	snd_hda_override_wcaps(codec, 0x03, 0);
2758}
2759
2760static void alc_combo_jack_hp_jd_restart(struct hda_codec *codec)
2761{
2762	switch (codec->core.vendor_id) {
2763	case 0x10ec0274:
2764	case 0x10ec0294:
2765	case 0x10ec0225:
2766	case 0x10ec0295:
2767	case 0x10ec0299:
2768		alc_update_coef_idx(codec, 0x4a, 0x8000, 1 << 15); /* Reset HP JD */
2769		alc_update_coef_idx(codec, 0x4a, 0x8000, 0 << 15);
2770		break;
2771	case 0x10ec0230:
2772	case 0x10ec0235:
2773	case 0x10ec0236:
2774	case 0x10ec0255:
2775	case 0x10ec0256:
2776	case 0x10ec0257:
2777	case 0x19e58326:
2778		alc_update_coef_idx(codec, 0x1b, 0x8000, 1 << 15); /* Reset HP JD */
2779		alc_update_coef_idx(codec, 0x1b, 0x8000, 0 << 15);
2780		break;
2781	}
2782}
2783
2784static void alc295_fixup_chromebook(struct hda_codec *codec,
2785				    const struct hda_fixup *fix, int action)
2786{
2787	struct alc_spec *spec = codec->spec;
2788
2789	switch (action) {
2790	case HDA_FIXUP_ACT_PRE_PROBE:
2791		spec->ultra_low_power = true;
2792		break;
2793	case HDA_FIXUP_ACT_INIT:
2794		alc_combo_jack_hp_jd_restart(codec);
2795		break;
2796	}
2797}
2798
2799static void alc256_fixup_chromebook(struct hda_codec *codec,
2800				    const struct hda_fixup *fix, int action)
2801{
2802	struct alc_spec *spec = codec->spec;
2803
2804	switch (action) {
2805	case HDA_FIXUP_ACT_PRE_PROBE:
2806		if (codec->core.subsystem_id == 0x10280d76)
2807			spec->gen.suppress_auto_mute = 0;
2808		else
2809			spec->gen.suppress_auto_mute = 1;
2810		spec->gen.suppress_auto_mic = 1;
2811		spec->en_3kpull_low = false;
2812		break;
2813	}
2814}
2815
2816static void alc_fixup_disable_mic_vref(struct hda_codec *codec,
2817				  const struct hda_fixup *fix, int action)
2818{
2819	if (action == HDA_FIXUP_ACT_PRE_PROBE)
2820		snd_hda_codec_set_pin_target(codec, 0x19, PIN_VREFHIZ);
2821}
2822
2823
2824static void alc294_gx502_toggle_output(struct hda_codec *codec,
2825					struct hda_jack_callback *cb)
2826{
2827	/* The Windows driver sets the codec up in a very different way where
2828	 * it appears to leave 0x10 = 0x8a20 set. For Linux we need to toggle it
2829	 */
2830	if (snd_hda_jack_detect_state(codec, 0x21) == HDA_JACK_PRESENT)
2831		alc_write_coef_idx(codec, 0x10, 0x8a20);
2832	else
2833		alc_write_coef_idx(codec, 0x10, 0x0a20);
2834}
2835
2836static void alc294_fixup_gx502_hp(struct hda_codec *codec,
2837					const struct hda_fixup *fix, int action)
2838{
2839	/* Pin 0x21: headphones/headset mic */
2840	if (!is_jack_detectable(codec, 0x21))
2841		return;
2842
2843	switch (action) {
2844	case HDA_FIXUP_ACT_PRE_PROBE:
2845		snd_hda_jack_detect_enable_callback(codec, 0x21,
2846				alc294_gx502_toggle_output);
2847		break;
2848	case HDA_FIXUP_ACT_INIT:
2849		/* Make sure to start in a correct state, i.e. if
2850		 * headphones have been plugged in before powering up the system
2851		 */
2852		alc294_gx502_toggle_output(codec, NULL);
2853		break;
2854	}
2855}
2856
2857static void alc294_gu502_toggle_output(struct hda_codec *codec,
2858				       struct hda_jack_callback *cb)
2859{
2860	/* Windows sets 0x10 to 0x8420 for Node 0x20 which is
2861	 * responsible from changes between speakers and headphones
2862	 */
2863	if (snd_hda_jack_detect_state(codec, 0x21) == HDA_JACK_PRESENT)
2864		alc_write_coef_idx(codec, 0x10, 0x8420);
2865	else
2866		alc_write_coef_idx(codec, 0x10, 0x0a20);
2867}
2868
2869static void alc294_fixup_gu502_hp(struct hda_codec *codec,
2870				  const struct hda_fixup *fix, int action)
2871{
2872	if (!is_jack_detectable(codec, 0x21))
2873		return;
2874
2875	switch (action) {
2876	case HDA_FIXUP_ACT_PRE_PROBE:
2877		snd_hda_jack_detect_enable_callback(codec, 0x21,
2878				alc294_gu502_toggle_output);
2879		break;
2880	case HDA_FIXUP_ACT_INIT:
2881		alc294_gu502_toggle_output(codec, NULL);
2882		break;
2883	}
2884}
2885
2886static void  alc285_fixup_hp_gpio_amp_init(struct hda_codec *codec,
2887			      const struct hda_fixup *fix, int action)
2888{
2889	if (action != HDA_FIXUP_ACT_INIT)
2890		return;
2891
2892	msleep(100);
2893	alc_write_coef_idx(codec, 0x65, 0x0);
2894}
2895
2896static void alc274_fixup_hp_headset_mic(struct hda_codec *codec,
2897				    const struct hda_fixup *fix, int action)
2898{
2899	switch (action) {
2900	case HDA_FIXUP_ACT_INIT:
2901		alc_combo_jack_hp_jd_restart(codec);
2902		break;
2903	}
2904}
2905
2906static void alc_fixup_no_int_mic(struct hda_codec *codec,
2907				    const struct hda_fixup *fix, int action)
2908{
2909	struct alc_spec *spec = codec->spec;
2910
2911	switch (action) {
2912	case HDA_FIXUP_ACT_PRE_PROBE:
2913		/* Mic RING SLEEVE swap for combo jack */
2914		alc_update_coef_idx(codec, 0x45, 0xf<<12 | 1<<10, 5<<12);
2915		spec->no_internal_mic_pin = true;
2916		break;
2917	case HDA_FIXUP_ACT_INIT:
2918		alc_combo_jack_hp_jd_restart(codec);
2919		break;
2920	}
2921}
2922
2923/* GPIO1 = amplifier on/off
2924 * GPIO3 = mic mute LED
2925 */
2926static void alc285_fixup_hp_spectre_x360_eb1(struct hda_codec *codec,
2927					  const struct hda_fixup *fix, int action)
2928{
2929	static const hda_nid_t conn[] = { 0x02 };
2930
2931	struct alc_spec *spec = codec->spec;
2932	static const struct hda_pintbl pincfgs[] = {
2933		{ 0x14, 0x90170110 },  /* front/high speakers */
2934		{ 0x17, 0x90170130 },  /* back/bass speakers */
2935		{ }
2936	};
2937
2938	//enable micmute led
2939	alc_fixup_hp_gpio_led(codec, action, 0x00, 0x04);
2940
2941	switch (action) {
2942	case HDA_FIXUP_ACT_PRE_PROBE:
2943		spec->micmute_led_polarity = 1;
2944		/* needed for amp of back speakers */
2945		spec->gpio_mask |= 0x01;
2946		spec->gpio_dir |= 0x01;
2947		snd_hda_apply_pincfgs(codec, pincfgs);
2948		/* share DAC to have unified volume control */
2949		snd_hda_override_conn_list(codec, 0x14, ARRAY_SIZE(conn), conn);
2950		snd_hda_override_conn_list(codec, 0x17, ARRAY_SIZE(conn), conn);
2951		break;
2952	case HDA_FIXUP_ACT_INIT:
2953		/* need to toggle GPIO to enable the amp of back speakers */
2954		alc_update_gpio_data(codec, 0x01, true);
2955		msleep(100);
2956		alc_update_gpio_data(codec, 0x01, false);
2957		break;
2958	}
2959}
2960
2961/* GPIO1 = amplifier on/off */
2962static void alc285_fixup_hp_spectre_x360_df1(struct hda_codec *codec,
2963					     const struct hda_fixup *fix,
2964					     int action)
2965{
2966	struct alc_spec *spec = codec->spec;
2967	static const hda_nid_t conn[] = { 0x02 };
2968	static const struct hda_pintbl pincfgs[] = {
2969		{ 0x14, 0x90170110 },  /* front/high speakers */
2970		{ 0x17, 0x90170130 },  /* back/bass speakers */
2971		{ }
2972	};
2973
2974	// enable mute led
2975	alc285_fixup_hp_mute_led_coefbit(codec, fix, action);
2976
2977	switch (action) {
2978	case HDA_FIXUP_ACT_PRE_PROBE:
2979		/* needed for amp of back speakers */
2980		spec->gpio_mask |= 0x01;
2981		spec->gpio_dir |= 0x01;
2982		snd_hda_apply_pincfgs(codec, pincfgs);
2983		/* share DAC to have unified volume control */
2984		snd_hda_override_conn_list(codec, 0x14, ARRAY_SIZE(conn), conn);
2985		snd_hda_override_conn_list(codec, 0x17, ARRAY_SIZE(conn), conn);
2986		break;
2987	case HDA_FIXUP_ACT_INIT:
2988		/* need to toggle GPIO to enable the amp of back speakers */
2989		alc_update_gpio_data(codec, 0x01, true);
2990		msleep(100);
2991		alc_update_gpio_data(codec, 0x01, false);
2992		break;
2993	}
2994}
2995
2996static void alc285_fixup_hp_spectre_x360(struct hda_codec *codec,
2997					  const struct hda_fixup *fix, int action)
2998{
2999	static const hda_nid_t conn[] = { 0x02 };
3000	static const struct hda_pintbl pincfgs[] = {
3001		{ 0x14, 0x90170110 },  /* rear speaker */
3002		{ }
3003	};
3004
3005	switch (action) {
3006	case HDA_FIXUP_ACT_PRE_PROBE:
3007		snd_hda_apply_pincfgs(codec, pincfgs);
3008		/* force front speaker to DAC1 */
3009		snd_hda_override_conn_list(codec, 0x17, ARRAY_SIZE(conn), conn);
3010		break;
3011	}
3012}
3013
3014static void alc285_fixup_hp_envy_x360(struct hda_codec *codec,
3015				      const struct hda_fixup *fix,
3016				      int action)
3017{
3018	static const struct coef_fw coefs[] = {
3019		WRITE_COEF(0x08, 0x6a0c), WRITE_COEF(0x0d, 0xa023),
3020		WRITE_COEF(0x10, 0x0320), WRITE_COEF(0x1a, 0x8c03),
3021		WRITE_COEF(0x25, 0x1800), WRITE_COEF(0x26, 0x003a),
3022		WRITE_COEF(0x28, 0x1dfe), WRITE_COEF(0x29, 0xb014),
3023		WRITE_COEF(0x2b, 0x1dfe), WRITE_COEF(0x37, 0xfe15),
3024		WRITE_COEF(0x38, 0x7909), WRITE_COEF(0x45, 0xd489),
3025		WRITE_COEF(0x46, 0x00f4), WRITE_COEF(0x4a, 0x21e0),
3026		WRITE_COEF(0x66, 0x03f0), WRITE_COEF(0x67, 0x1000),
3027		WRITE_COEF(0x6e, 0x1005), { }
3028	};
3029
3030	static const struct hda_pintbl pincfgs[] = {
3031		{ 0x12, 0xb7a60130 },  /* Internal microphone*/
3032		{ 0x14, 0x90170150 },  /* B&O soundbar speakers */
3033		{ 0x17, 0x90170153 },  /* Side speakers */
3034		{ 0x19, 0x03a11040 },  /* Headset microphone */
3035		{ }
3036	};
3037
3038	switch (action) {
3039	case HDA_FIXUP_ACT_PRE_PROBE:
3040		snd_hda_apply_pincfgs(codec, pincfgs);
3041
3042		/* Fixes volume control problem for side speakers */
3043		alc295_fixup_disable_dac3(codec, fix, action);
3044
3045		/* Fixes no sound from headset speaker */
3046		snd_hda_codec_amp_stereo(codec, 0x21, HDA_OUTPUT, 0, -1, 0);
3047
3048		/* Auto-enable headset mic when plugged */
3049		snd_hda_jack_set_gating_jack(codec, 0x19, 0x21);
3050
3051		/* Headset mic volume enhancement */
3052		snd_hda_codec_set_pin_target(codec, 0x19, PIN_VREF50);
3053		break;
3054	case HDA_FIXUP_ACT_INIT:
3055		alc_process_coef_fw(codec, coefs);
3056		break;
3057	case HDA_FIXUP_ACT_BUILD:
3058		rename_ctl(codec, "Bass Speaker Playback Volume",
3059			   "B&O-Tuned Playback Volume");
3060		rename_ctl(codec, "Front Playback Switch",
3061			   "B&O Soundbar Playback Switch");
3062		rename_ctl(codec, "Bass Speaker Playback Switch",
3063			   "Side Speaker Playback Switch");
3064		break;
3065	}
3066}
3067
3068static void alc285_fixup_hp_beep(struct hda_codec *codec,
3069				 const struct hda_fixup *fix, int action)
3070{
3071	if (action == HDA_FIXUP_ACT_PRE_PROBE) {
3072		codec->beep_just_power_on = true;
3073	} else  if (action == HDA_FIXUP_ACT_INIT) {
3074#ifdef CONFIG_SND_HDA_INPUT_BEEP
3075		/*
3076		 * Just enable loopback to internal speaker and headphone jack.
3077		 * Disable amplification to get about the same beep volume as
3078		 * was on pure BIOS setup before loading the driver.
3079		 */
3080		alc_update_coef_idx(codec, 0x36, 0x7070, BIT(13));
3081
3082		snd_hda_enable_beep_device(codec, 1);
3083
3084#if !IS_ENABLED(CONFIG_INPUT_PCSPKR)
3085		dev_warn_once(hda_codec_dev(codec),
3086			      "enable CONFIG_INPUT_PCSPKR to get PC beeps\n");
3087#endif
3088#endif
3089	}
3090}
3091
3092/* for hda_fixup_thinkpad_acpi() */
3093#include "../helpers/thinkpad.c"
3094
3095static void alc_fixup_thinkpad_acpi(struct hda_codec *codec,
3096				    const struct hda_fixup *fix, int action)
3097{
3098	alc_fixup_no_shutup(codec, fix, action); /* reduce click noise */
3099	hda_fixup_thinkpad_acpi(codec, fix, action);
3100}
3101
3102/* for hda_fixup_ideapad_acpi() */
3103#include "../helpers/ideapad_hotkey_led.c"
3104
3105static void alc_fixup_ideapad_acpi(struct hda_codec *codec,
3106				   const struct hda_fixup *fix, int action)
3107{
3108	hda_fixup_ideapad_acpi(codec, fix, action);
3109}
3110
3111/* Fixup for Lenovo Legion 15IMHg05 speaker output on headset removal. */
3112static void alc287_fixup_legion_15imhg05_speakers(struct hda_codec *codec,
3113						  const struct hda_fixup *fix,
3114						  int action)
3115{
3116	struct alc_spec *spec = codec->spec;
3117
3118	switch (action) {
3119	case HDA_FIXUP_ACT_PRE_PROBE:
3120		spec->gen.suppress_auto_mute = 1;
3121		break;
3122	}
3123}
3124
3125static void comp_acpi_device_notify(acpi_handle handle, u32 event, void *data)
3126{
3127	struct hda_codec *cdc = data;
3128	struct alc_spec *spec = cdc->spec;
3129
3130	codec_info(cdc, "ACPI Notification %d\n", event);
3131
3132	hda_component_acpi_device_notify(&spec->comps, handle, event, data);
3133}
3134
3135static int comp_bind(struct device *dev)
3136{
3137	struct hda_codec *cdc = dev_to_hda_codec(dev);
3138	struct alc_spec *spec = cdc->spec;
3139	int ret;
3140
3141	ret = hda_component_manager_bind(cdc, &spec->comps);
3142	if (ret)
3143		return ret;
3144
3145	return hda_component_manager_bind_acpi_notifications(cdc,
3146							     &spec->comps,
3147							     comp_acpi_device_notify, cdc);
3148}
3149
3150static void comp_unbind(struct device *dev)
3151{
3152	struct hda_codec *cdc = dev_to_hda_codec(dev);
3153	struct alc_spec *spec = cdc->spec;
3154
3155	hda_component_manager_unbind_acpi_notifications(cdc, &spec->comps, comp_acpi_device_notify);
3156	hda_component_manager_unbind(cdc, &spec->comps);
3157}
3158
3159static const struct component_master_ops comp_master_ops = {
3160	.bind = comp_bind,
3161	.unbind = comp_unbind,
3162};
3163
3164static void comp_generic_playback_hook(struct hda_pcm_stream *hinfo, struct hda_codec *cdc,
3165				       struct snd_pcm_substream *sub, int action)
3166{
3167	struct alc_spec *spec = cdc->spec;
3168
3169	hda_component_manager_playback_hook(&spec->comps, action);
3170}
3171
3172static void comp_generic_fixup(struct hda_codec *cdc, int action, const char *bus,
3173			       const char *hid, const char *match_str, int count)
3174{
3175	struct alc_spec *spec = cdc->spec;
3176	int ret;
3177
3178	switch (action) {
3179	case HDA_FIXUP_ACT_PRE_PROBE:
3180		ret = hda_component_manager_init(cdc, &spec->comps, count, bus, hid,
3181						 match_str, &comp_master_ops);
3182		if (ret)
3183			return;
3184
3185		spec->gen.pcm_playback_hook = comp_generic_playback_hook;
3186		break;
3187	case HDA_FIXUP_ACT_FREE:
3188		hda_component_manager_free(&spec->comps, &comp_master_ops);
3189		break;
3190	}
3191}
3192
3193static void find_cirrus_companion_amps(struct hda_codec *cdc)
3194{
3195	struct device *dev = hda_codec_dev(cdc);
3196	struct acpi_device *adev;
3197	const char *bus = NULL;
3198	static const struct {
3199		const char *hid;
3200		const char *name;
3201	} acpi_ids[] = {{ "CSC3554", "cs35l54-hda" },
3202			{ "CSC3556", "cs35l56-hda" },
3203			{ "CSC3557", "cs35l57-hda" }};
3204	char *match;
3205	int i, count = 0, count_devindex = 0;
3206
3207	for (i = 0; i < ARRAY_SIZE(acpi_ids); ++i) {
3208		adev = acpi_dev_get_first_match_dev(acpi_ids[i].hid, NULL, -1);
3209		if (adev)
3210			break;
3211	}
3212	if (!adev) {
3213		codec_dbg(cdc, "Did not find ACPI entry for a Cirrus Amp\n");
3214		return;
3215	}
3216
3217	count = i2c_acpi_client_count(adev);
3218	if (count > 0) {
3219		bus = "i2c";
3220	} else {
3221		count = acpi_spi_count_resources(adev);
3222		if (count > 0)
3223			bus = "spi";
3224	}
3225
3226	struct fwnode_handle *fwnode __free(fwnode_handle) =
3227		fwnode_handle_get(acpi_fwnode_handle(adev));
3228	acpi_dev_put(adev);
3229
3230	if (!bus) {
3231		codec_err(cdc, "Did not find any buses for %s\n", acpi_ids[i].hid);
3232		return;
3233	}
3234
3235	if (!fwnode) {
3236		codec_err(cdc, "Could not get fwnode for %s\n", acpi_ids[i].hid);
3237		return;
3238	}
3239
3240	/*
3241	 * When available the cirrus,dev-index property is an accurate
3242	 * count of the amps in a system and is used in preference to
3243	 * the count of bus devices that can contain additional address
3244	 * alias entries.
3245	 */
3246	count_devindex = fwnode_property_count_u32(fwnode, "cirrus,dev-index");
3247	if (count_devindex > 0)
3248		count = count_devindex;
3249
3250	match = devm_kasprintf(dev, GFP_KERNEL, "-%%s:00-%s.%%d", acpi_ids[i].name);
3251	if (!match)
3252		return;
3253	codec_info(cdc, "Found %d %s on %s (%s)\n", count, acpi_ids[i].hid, bus, match);
3254	comp_generic_fixup(cdc, HDA_FIXUP_ACT_PRE_PROBE, bus, acpi_ids[i].hid, match, count);
3255}
3256
3257static void cs35l41_fixup_i2c_two(struct hda_codec *cdc, const struct hda_fixup *fix, int action)
3258{
3259	comp_generic_fixup(cdc, action, "i2c", "CSC3551", "-%s:00-cs35l41-hda.%d", 2);
3260}
3261
3262static void cs35l41_fixup_i2c_four(struct hda_codec *cdc, const struct hda_fixup *fix, int action)
3263{
3264	comp_generic_fixup(cdc, action, "i2c", "CSC3551", "-%s:00-cs35l41-hda.%d", 4);
3265}
3266
3267static void cs35l41_fixup_spi_two(struct hda_codec *codec, const struct hda_fixup *fix, int action)
3268{
3269	comp_generic_fixup(codec, action, "spi", "CSC3551", "-%s:00-cs35l41-hda.%d", 2);
3270}
3271
3272static void cs35l41_fixup_spi_one(struct hda_codec *codec, const struct hda_fixup *fix, int action)
3273{
3274	comp_generic_fixup(codec, action, "spi", "CSC3551", "-%s:00-cs35l41-hda.%d", 1);
3275}
3276
3277static void cs35l41_fixup_spi_four(struct hda_codec *codec, const struct hda_fixup *fix, int action)
3278{
3279	comp_generic_fixup(codec, action, "spi", "CSC3551", "-%s:00-cs35l41-hda.%d", 4);
3280}
3281
3282static void alc287_fixup_legion_16achg6_speakers(struct hda_codec *cdc, const struct hda_fixup *fix,
3283						 int action)
3284{
3285	comp_generic_fixup(cdc, action, "i2c", "CLSA0100", "-%s:00-cs35l41-hda.%d", 2);
3286}
3287
3288static void alc287_fixup_legion_16ithg6_speakers(struct hda_codec *cdc, const struct hda_fixup *fix,
3289						 int action)
3290{
3291	comp_generic_fixup(cdc, action, "i2c", "CLSA0101", "-%s:00-cs35l41-hda.%d", 2);
3292}
3293
3294static void alc285_fixup_asus_ga403u(struct hda_codec *cdc, const struct hda_fixup *fix, int action)
3295{
3296	/*
3297	 * The same SSID has been re-used in different hardware, they have
3298	 * different codecs and the newer GA403U has a ALC285.
3299	 */
3300	if (cdc->core.vendor_id != 0x10ec0285)
3301		alc_fixup_inv_dmic(cdc, fix, action);
3302}
3303
3304static void tas2781_fixup_tias_i2c(struct hda_codec *cdc,
3305	const struct hda_fixup *fix, int action)
3306{
3307	comp_generic_fixup(cdc, action, "i2c", "TIAS2781", "-%s:00", 1);
3308}
3309
3310static void tas2781_fixup_spi(struct hda_codec *cdc, const struct hda_fixup *fix, int action)
3311{
3312	comp_generic_fixup(cdc, action, "spi", "TXNW2781", "-%s:00-tas2781-hda.%d", 2);
3313}
3314
3315static void tas2781_fixup_txnw_i2c(struct hda_codec *cdc,
3316	const struct hda_fixup *fix, int action)
3317{
3318	comp_generic_fixup(cdc, action, "i2c", "TXNW2781", "-%s:00-tas2781-hda.%d", 1);
3319}
3320
3321static void yoga7_14arb7_fixup_i2c(struct hda_codec *cdc,
3322	const struct hda_fixup *fix, int action)
3323{
3324	comp_generic_fixup(cdc, action, "i2c", "INT8866", "-%s:00", 1);
3325}
3326
3327static void alc256_fixup_acer_sfg16_micmute_led(struct hda_codec *codec,
3328	const struct hda_fixup *fix, int action)
3329{
3330	alc_fixup_hp_gpio_led(codec, action, 0, 0x04);
3331}
3332
3333
3334/* for alc295_fixup_hp_top_speakers */
3335#include "../helpers/hp_x360.c"
3336
3337/* for alc285_fixup_ideapad_s740_coef() */
3338#include "../helpers/ideapad_s740.c"
3339
3340static const struct coef_fw alc256_fixup_set_coef_defaults_coefs[] = {
3341	WRITE_COEF(0x10, 0x0020), WRITE_COEF(0x24, 0x0000),
3342	WRITE_COEF(0x26, 0x0000), WRITE_COEF(0x29, 0x3000),
3343	WRITE_COEF(0x37, 0xfe05), WRITE_COEF(0x45, 0x5089),
3344	{}
3345};
3346
3347static void alc256_fixup_set_coef_defaults(struct hda_codec *codec,
3348					   const struct hda_fixup *fix,
3349					   int action)
3350{
3351	/*
3352	 * A certain other OS sets these coeffs to different values. On at least
3353	 * one TongFang barebone these settings might survive even a cold
3354	 * reboot. So to restore a clean slate the values are explicitly reset
3355	 * to default here. Without this, the external microphone is always in a
3356	 * plugged-in state, while the internal microphone is always in an
3357	 * unplugged state, breaking the ability to use the internal microphone.
3358	 */
3359	alc_process_coef_fw(codec, alc256_fixup_set_coef_defaults_coefs);
3360}
3361
3362static const struct coef_fw alc233_fixup_no_audio_jack_coefs[] = {
3363	WRITE_COEF(0x1a, 0x9003), WRITE_COEF(0x1b, 0x0e2b), WRITE_COEF(0x37, 0xfe06),
3364	WRITE_COEF(0x38, 0x4981), WRITE_COEF(0x45, 0xd489), WRITE_COEF(0x46, 0x0074),
3365	WRITE_COEF(0x49, 0x0149),
3366	{}
3367};
3368
3369static void alc233_fixup_no_audio_jack(struct hda_codec *codec,
3370				       const struct hda_fixup *fix,
3371				       int action)
3372{
3373	/*
3374	 * The audio jack input and output is not detected on the ASRock NUC Box
3375	 * 1100 series when cold booting without this fix. Warm rebooting from a
3376	 * certain other OS makes the audio functional, as COEF settings are
3377	 * preserved in this case. This fix sets these altered COEF values as
3378	 * the default.
3379	 */
3380	alc_process_coef_fw(codec, alc233_fixup_no_audio_jack_coefs);
3381}
3382
3383static void alc256_fixup_mic_no_presence_and_resume(struct hda_codec *codec,
3384						    const struct hda_fixup *fix,
3385						    int action)
3386{
3387	/*
3388	 * The Clevo NJ51CU comes either with the ALC293 or the ALC256 codec,
3389	 * but uses the 0x8686 subproduct id in both cases. The ALC256 codec
3390	 * needs an additional quirk for sound working after suspend and resume.
3391	 */
3392	if (codec->core.vendor_id == 0x10ec0256) {
3393		alc_update_coef_idx(codec, 0x10, 1<<9, 0);
3394		snd_hda_codec_set_pincfg(codec, 0x19, 0x04a11120);
3395	} else {
3396		snd_hda_codec_set_pincfg(codec, 0x1a, 0x04a1113c);
3397	}
3398}
3399
3400static void alc256_decrease_headphone_amp_val(struct hda_codec *codec,
3401					      const struct hda_fixup *fix, int action)
3402{
3403	u32 caps;
3404	u8 nsteps, offs;
3405
3406	if (action != HDA_FIXUP_ACT_PRE_PROBE)
3407		return;
3408
3409	caps = query_amp_caps(codec, 0x3, HDA_OUTPUT);
3410	nsteps = ((caps & AC_AMPCAP_NUM_STEPS) >> AC_AMPCAP_NUM_STEPS_SHIFT) - 10;
3411	offs = ((caps & AC_AMPCAP_OFFSET) >> AC_AMPCAP_OFFSET_SHIFT) - 10;
3412	caps &= ~AC_AMPCAP_NUM_STEPS & ~AC_AMPCAP_OFFSET;
3413	caps |= (nsteps << AC_AMPCAP_NUM_STEPS_SHIFT) | (offs << AC_AMPCAP_OFFSET_SHIFT);
3414
3415	if (snd_hda_override_amp_caps(codec, 0x3, HDA_OUTPUT, caps))
3416		codec_warn(codec, "failed to override amp caps for NID 0x3\n");
3417}
3418
3419static void alc_fixup_dell4_mic_no_presence_quiet(struct hda_codec *codec,
3420						  const struct hda_fixup *fix,
3421						  int action)
3422{
3423	struct alc_spec *spec = codec->spec;
3424	struct hda_input_mux *imux = &spec->gen.input_mux;
3425	int i;
3426
3427	alc269_fixup_limit_int_mic_boost(codec, fix, action);
3428
3429	switch (action) {
3430	case HDA_FIXUP_ACT_PRE_PROBE:
3431		/**
3432		 * Set the vref of pin 0x19 (Headset Mic) and pin 0x1b (Headphone Mic)
3433		 * to Hi-Z to avoid pop noises at startup and when plugging and
3434		 * unplugging headphones.
3435		 */
3436		snd_hda_codec_set_pin_target(codec, 0x19, PIN_VREFHIZ);
3437		snd_hda_codec_set_pin_target(codec, 0x1b, PIN_VREFHIZ);
3438		break;
3439	case HDA_FIXUP_ACT_PROBE:
3440		/**
3441		 * Make the internal mic (0x12) the default input source to
3442		 * prevent pop noises on cold boot.
3443		 */
3444		for (i = 0; i < imux->num_items; i++) {
3445			if (spec->gen.imux_pins[i] == 0x12) {
3446				spec->gen.cur_mux[0] = i;
3447				break;
3448			}
3449		}
3450		break;
3451	}
3452}
3453
3454static void alc287_fixup_yoga9_14iap7_bass_spk_pin(struct hda_codec *codec,
3455					  const struct hda_fixup *fix, int action)
3456{
3457	/*
3458	 * The Pin Complex 0x17 for the bass speakers is wrongly reported as
3459	 * unconnected.
3460	 */
3461	static const struct hda_pintbl pincfgs[] = {
3462		{ 0x17, 0x90170121 },
3463		{ }
3464	};
3465	/*
3466	 * Avoid DAC 0x06 and 0x08, as they have no volume controls.
3467	 * DAC 0x02 and 0x03 would be fine.
3468	 */
3469	static const hda_nid_t conn[] = { 0x02, 0x03 };
3470	/*
3471	 * Prefer both speakerbar (0x14) and bass speakers (0x17) connected to DAC 0x02.
3472	 * Headphones (0x21) are connected to DAC 0x03.
3473	 */
3474	static const hda_nid_t preferred_pairs[] = {
3475		0x14, 0x02,
3476		0x17, 0x02,
3477		0x21, 0x03,
3478		0
3479	};
3480	struct alc_spec *spec = codec->spec;
3481
3482	/* Support Audio mute LED and Mic mute LED on keyboard */
3483	hda_fixup_ideapad_acpi(codec, fix, action);
3484
3485	switch (action) {
3486	case HDA_FIXUP_ACT_PRE_PROBE:
3487		snd_hda_apply_pincfgs(codec, pincfgs);
3488		snd_hda_override_conn_list(codec, 0x17, ARRAY_SIZE(conn), conn);
3489		spec->gen.preferred_dacs = preferred_pairs;
3490		break;
3491	}
3492}
3493
3494static void alc295_fixup_dell_inspiron_top_speakers(struct hda_codec *codec,
3495					  const struct hda_fixup *fix, int action)
3496{
3497	static const struct hda_pintbl pincfgs[] = {
3498		{ 0x14, 0x90170151 },
3499		{ 0x17, 0x90170150 },
3500		{ }
3501	};
3502	static const hda_nid_t conn[] = { 0x02, 0x03 };
3503	static const hda_nid_t preferred_pairs[] = {
3504		0x14, 0x02,
3505		0x17, 0x03,
3506		0x21, 0x02,
3507		0
3508	};
3509	struct alc_spec *spec = codec->spec;
3510
3511	alc_fixup_no_shutup(codec, fix, action);
3512
3513	switch (action) {
3514	case HDA_FIXUP_ACT_PRE_PROBE:
3515		snd_hda_apply_pincfgs(codec, pincfgs);
3516		snd_hda_override_conn_list(codec, 0x17, ARRAY_SIZE(conn), conn);
3517		spec->gen.preferred_dacs = preferred_pairs;
3518		break;
3519	}
3520}
3521
3522/* Forcibly assign NID 0x03 to HP while NID 0x02 to SPK */
3523static void alc287_fixup_bind_dacs(struct hda_codec *codec,
3524				    const struct hda_fixup *fix, int action)
3525{
3526	struct alc_spec *spec = codec->spec;
3527	static const hda_nid_t conn[] = { 0x02, 0x03 }; /* exclude 0x06 */
3528	static const hda_nid_t preferred_pairs[] = {
3529		0x17, 0x02, 0x21, 0x03, 0
3530	};
3531
3532	if (action != HDA_FIXUP_ACT_PRE_PROBE)
3533		return;
3534
3535	snd_hda_override_conn_list(codec, 0x17, ARRAY_SIZE(conn), conn);
3536	spec->gen.preferred_dacs = preferred_pairs;
3537	spec->gen.auto_mute_via_amp = 1;
3538	if (spec->gen.autocfg.speaker_pins[0] != 0x14) {
3539		snd_hda_codec_write_cache(codec, 0x14, 0, AC_VERB_SET_PIN_WIDGET_CONTROL,
3540					0x0); /* Make sure 0x14 was disable */
3541	}
3542}
3543
3544/* Fix none verb table of Headset Mic pin */
3545static void alc2xx_fixup_headset_mic(struct hda_codec *codec,
3546				     const struct hda_fixup *fix, int action)
3547{
3548	struct alc_spec *spec = codec->spec;
3549	static const struct hda_pintbl pincfgs[] = {
3550		{ 0x19, 0x03a1103c },
3551		{ }
3552	};
3553
3554	switch (action) {
3555	case HDA_FIXUP_ACT_PRE_PROBE:
3556		snd_hda_apply_pincfgs(codec, pincfgs);
3557		alc_update_coef_idx(codec, 0x45, 0xf<<12 | 1<<10, 5<<12);
3558		spec->parse_flags |= HDA_PINCFG_HEADSET_MIC;
3559		break;
3560	}
3561}
3562
3563static void alc245_fixup_hp_spectre_x360_eu0xxx(struct hda_codec *codec,
3564					  const struct hda_fixup *fix, int action)
3565{
3566	/*
3567	 * The Pin Complex 0x14 for the treble speakers is wrongly reported as
3568	 * unconnected.
3569	 * The Pin Complex 0x17 for the bass speakers has the lowest association
3570	 * and sequence values so shift it up a bit to squeeze 0x14 in.
3571	 */
3572	static const struct hda_pintbl pincfgs[] = {
3573		{ 0x14, 0x90170110 }, // top/treble
3574		{ 0x17, 0x90170111 }, // bottom/bass
3575		{ }
3576	};
3577
3578	/*
3579	 * Force DAC 0x02 for the bass speakers 0x17.
3580	 */
3581	static const hda_nid_t conn[] = { 0x02 };
3582
3583	switch (action) {
3584	case HDA_FIXUP_ACT_PRE_PROBE:
3585		snd_hda_apply_pincfgs(codec, pincfgs);
3586		snd_hda_override_conn_list(codec, 0x17, ARRAY_SIZE(conn), conn);
3587		break;
3588	}
3589
3590	cs35l41_fixup_i2c_two(codec, fix, action);
3591	alc245_fixup_hp_mute_led_coefbit(codec, fix, action);
3592	alc245_fixup_hp_gpio_led(codec, fix, action);
3593}
3594
3595/* some changes for Spectre x360 16, 2024 model */
3596static void alc245_fixup_hp_spectre_x360_16_aa0xxx(struct hda_codec *codec,
3597					  const struct hda_fixup *fix, int action)
3598{
3599	/*
3600	 * The Pin Complex 0x14 for the treble speakers is wrongly reported as
3601	 * unconnected.
3602	 * The Pin Complex 0x17 for the bass speakers has the lowest association
3603	 * and sequence values so shift it up a bit to squeeze 0x14 in.
3604	 */
3605	struct alc_spec *spec = codec->spec;
3606	static const struct hda_pintbl pincfgs[] = {
3607		{ 0x14, 0x90170110 }, // top/treble
3608		{ 0x17, 0x90170111 }, // bottom/bass
3609		{ }
3610	};
3611
3612	/*
3613	 * Force DAC 0x02 for the bass speakers 0x17.
3614	 */
3615	static const hda_nid_t conn[] = { 0x02 };
3616
3617	switch (action) {
3618	case HDA_FIXUP_ACT_PRE_PROBE:
3619		/* needed for amp of back speakers */
3620		spec->gpio_mask |= 0x01;
3621		spec->gpio_dir |= 0x01;
3622		snd_hda_apply_pincfgs(codec, pincfgs);
3623		snd_hda_override_conn_list(codec, 0x17, ARRAY_SIZE(conn), conn);
3624		break;
3625	case HDA_FIXUP_ACT_INIT:
3626		/* need to toggle GPIO to enable the amp of back speakers */
3627		alc_update_gpio_data(codec, 0x01, true);
3628		msleep(100);
3629		alc_update_gpio_data(codec, 0x01, false);
3630		break;
3631	}
3632
3633	cs35l41_fixup_i2c_two(codec, fix, action);
3634	alc245_fixup_hp_mute_led_coefbit(codec, fix, action);
3635	alc245_fixup_hp_gpio_led(codec, fix, action);
3636}
3637
3638static void alc245_fixup_hp_zbook_firefly_g12a(struct hda_codec *codec,
3639					  const struct hda_fixup *fix, int action)
3640{
3641	struct alc_spec *spec = codec->spec;
3642	static const hda_nid_t conn[] = { 0x02 };
3643
3644	switch (action) {
3645	case HDA_FIXUP_ACT_PRE_PROBE:
3646		spec->gen.auto_mute_via_amp = 1;
3647		snd_hda_override_conn_list(codec, 0x17, ARRAY_SIZE(conn), conn);
3648		break;
3649	}
3650
3651	cs35l41_fixup_i2c_two(codec, fix, action);
3652	alc245_fixup_hp_mute_led_coefbit(codec, fix, action);
3653	alc285_fixup_hp_coef_micmute_led(codec, fix, action);
3654}
3655
3656/*
3657 * ALC287 PCM hooks
3658 */
3659static void alc287_alc1318_playback_pcm_hook(struct hda_pcm_stream *hinfo,
3660				   struct hda_codec *codec,
3661				   struct snd_pcm_substream *substream,
3662				   int action)
3663{
3664	static const struct coef_fw dis_coefs[] = {
3665		WRITE_COEF(0x24, 0x0013), WRITE_COEF(0x25, 0x0000), WRITE_COEF(0x26, 0xC203),
3666		WRITE_COEF(0x28, 0x0004), WRITE_COEF(0x29, 0xb023),
3667	}; /* Disable AMP silence detection */
3668	static const struct coef_fw en_coefs[] = {
3669		WRITE_COEF(0x24, 0x0013), WRITE_COEF(0x25, 0x0000), WRITE_COEF(0x26, 0xC203),
3670		WRITE_COEF(0x28, 0x0084), WRITE_COEF(0x29, 0xb023),
3671	}; /* Enable AMP silence detection */
3672
3673	switch (action) {
3674	case HDA_GEN_PCM_ACT_OPEN:
3675		alc_process_coef_fw(codec, dis_coefs);
3676		alc_write_coefex_idx(codec, 0x5a, 0x00, 0x954f); /* write gpio3 to high */
3677		break;
3678	case HDA_GEN_PCM_ACT_CLOSE:
3679		alc_process_coef_fw(codec, en_coefs);
3680		alc_write_coefex_idx(codec, 0x5a, 0x00, 0x554f); /* write gpio3 as default value */
3681		break;
3682	}
3683}
3684
3685static void alc287_s4_power_gpio3_default(struct hda_codec *codec)
3686{
3687	if (is_s4_suspend(codec)) {
3688		alc_write_coefex_idx(codec, 0x5a, 0x00, 0x554f); /* write gpio3 as default value */
3689	}
3690}
3691
3692static void alc287_fixup_lenovo_thinkpad_with_alc1318(struct hda_codec *codec,
3693			       const struct hda_fixup *fix, int action)
3694{
3695	struct alc_spec *spec = codec->spec;
3696	static const struct coef_fw coefs[] = {
3697		WRITE_COEF(0x24, 0x0013), WRITE_COEF(0x25, 0x0000), WRITE_COEF(0x26, 0xC300),
3698		WRITE_COEF(0x28, 0x0001), WRITE_COEF(0x29, 0xb023),
3699		WRITE_COEF(0x24, 0x0013), WRITE_COEF(0x25, 0x0000), WRITE_COEF(0x26, 0xC301),
3700		WRITE_COEF(0x28, 0x0001), WRITE_COEF(0x29, 0xb023),
3701	};
3702
3703	if (action != HDA_FIXUP_ACT_PRE_PROBE)
3704		return;
3705	alc_update_coef_idx(codec, 0x10, 1<<11, 1<<11);
3706	alc_process_coef_fw(codec, coefs);
3707	spec->power_hook = alc287_s4_power_gpio3_default;
3708	spec->gen.pcm_playback_hook = alc287_alc1318_playback_pcm_hook;
3709}
3710/* GPIO2: mute led GPIO3: micmute led */
3711static void alc245_tas2781_spi_hp_fixup_muteled(struct hda_codec *codec,
3712					  const struct hda_fixup *fix, int action)
3713{
3714	struct alc_spec *spec = codec->spec;
3715	static const hda_nid_t conn[] = { 0x02 };
3716
3717	switch (action) {
3718	case HDA_FIXUP_ACT_PRE_PROBE:
3719		spec->gen.auto_mute_via_amp = 1;
3720		snd_hda_override_conn_list(codec, 0x17, ARRAY_SIZE(conn), conn);
3721		break;
3722	}
3723
3724	tas2781_fixup_spi(codec, fix, action);
3725	alc_fixup_hp_gpio_led(codec, action, 0x04, 0x0);
3726	alc285_fixup_hp_coef_micmute_led(codec, fix, action);
3727}
3728
3729static void alc245_hp_spk_mute_led_update(void *private_data, int enabled)
3730{
3731	struct hda_codec *codec = private_data;
3732	unsigned int val;
3733
3734	val = enabled ? 0x08 : 0x04; /* 0x08 led on, 0x04 led off */
3735	alc_update_coef_idx(codec, 0x0b, 0x0c, val);
3736}
3737
3738/* JD2: mute led GPIO3: micmute led */
3739static void alc245_tas2781_i2c_hp_fixup_muteled(struct hda_codec *codec,
3740					  const struct hda_fixup *fix, int action)
3741{
3742	struct alc_spec *spec = codec->spec;
3743	hda_nid_t hp_pin = alc_get_hp_pin(spec);
3744	static const hda_nid_t conn[] = { 0x02 };
3745
3746	switch (action) {
3747	case HDA_FIXUP_ACT_PRE_PROBE:
3748		if (!hp_pin) {
3749			spec->gen.vmaster_mute.hook = alc245_hp_spk_mute_led_update;
3750			spec->gen.vmaster_mute_led = 1;
3751		}
3752		spec->gen.auto_mute_via_amp = 1;
3753		snd_hda_override_conn_list(codec, 0x17, ARRAY_SIZE(conn), conn);
3754		break;
3755	case HDA_FIXUP_ACT_INIT:
3756		if (!hp_pin)
3757			alc245_hp_spk_mute_led_update(codec, !spec->gen.master_mute);
3758		break;
3759	}
3760
3761	tas2781_fixup_txnw_i2c(codec, fix, action);
3762	if (hp_pin)
3763		alc245_fixup_hp_mute_led_coefbit(codec, fix, action);
3764	alc285_fixup_hp_coef_micmute_led(codec, fix, action);
3765}
3766/*
3767 * Clear COEF 0x0d (PCBEEP passthrough) bit 0x40 where BIOS sets it wrongly
3768 * at PM resume
3769 */
3770static void alc283_fixup_dell_hp_resume(struct hda_codec *codec,
3771					const struct hda_fixup *fix, int action)
3772{
3773	if (action == HDA_FIXUP_ACT_INIT)
3774		alc_write_coef_idx(codec, 0xd, 0x2800);
3775}
3776
3777/* Swap DAC assignments for HP and speaker */
3778static void alc288_fixup_surface_swap_dacs(struct hda_codec *codec,
3779					   const struct hda_fixup *fix, int action)
3780{
3781	struct alc_spec *spec = codec->spec;
3782	static hda_nid_t preferred_pairs[] = {
3783		0x21, 0x03, 0x14, 0x02, 0
3784	};
3785
3786	if (action != HDA_FIXUP_ACT_PRE_PROBE)
3787		return;
3788
3789	spec->gen.preferred_dacs = preferred_pairs;
3790}
3791
3792enum {
3793	ALC269_FIXUP_GPIO2,
3794	ALC269_FIXUP_SONY_VAIO,
3795	ALC275_FIXUP_SONY_VAIO_GPIO2,
3796	ALC269_FIXUP_DELL_M101Z,
3797	ALC269_FIXUP_SKU_IGNORE,
3798	ALC269_FIXUP_ASUS_G73JW,
3799	ALC269_FIXUP_ASUS_N7601ZM_PINS,
3800	ALC269_FIXUP_ASUS_N7601ZM,
3801	ALC269_FIXUP_LENOVO_EAPD,
3802	ALC275_FIXUP_SONY_HWEQ,
3803	ALC275_FIXUP_SONY_DISABLE_AAMIX,
3804	ALC271_FIXUP_DMIC,
3805	ALC269_FIXUP_PCM_44K,
3806	ALC269_FIXUP_STEREO_DMIC,
3807	ALC269_FIXUP_HEADSET_MIC,
3808	ALC269_FIXUP_QUANTA_MUTE,
3809	ALC269_FIXUP_LIFEBOOK,
3810	ALC269_FIXUP_LIFEBOOK_EXTMIC,
3811	ALC269_FIXUP_LIFEBOOK_HP_PIN,
3812	ALC269_FIXUP_LIFEBOOK_NO_HP_TO_LINEOUT,
3813	ALC255_FIXUP_LIFEBOOK_U7x7_HEADSET_MIC,
3814	ALC269_FIXUP_AMIC,
3815	ALC269_FIXUP_DMIC,
3816	ALC269VB_FIXUP_AMIC,
3817	ALC269VB_FIXUP_DMIC,
3818	ALC269_FIXUP_HP_MUTE_LED,
3819	ALC269_FIXUP_HP_MUTE_LED_MIC1,
3820	ALC269_FIXUP_HP_MUTE_LED_MIC2,
3821	ALC269_FIXUP_HP_MUTE_LED_MIC3,
3822	ALC269_FIXUP_HP_GPIO_LED,
3823	ALC269_FIXUP_HP_GPIO_MIC1_LED,
3824	ALC269_FIXUP_HP_LINE1_MIC1_LED,
3825	ALC269_FIXUP_INV_DMIC,
3826	ALC269_FIXUP_LENOVO_DOCK,
3827	ALC269_FIXUP_LENOVO_DOCK_LIMIT_BOOST,
3828	ALC269_FIXUP_NO_SHUTUP,
3829	ALC286_FIXUP_SONY_MIC_NO_PRESENCE,
3830	ALC269_FIXUP_PINCFG_NO_HP_TO_LINEOUT,
3831	ALC269_FIXUP_DELL1_MIC_NO_PRESENCE,
3832	ALC269_FIXUP_DELL1_LIMIT_INT_MIC_BOOST,
3833	ALC269_FIXUP_DELL2_MIC_NO_PRESENCE,
3834	ALC269_FIXUP_DELL3_MIC_NO_PRESENCE,
3835	ALC269_FIXUP_DELL4_MIC_NO_PRESENCE,
3836	ALC269_FIXUP_DELL4_MIC_NO_PRESENCE_QUIET,
3837	ALC269_FIXUP_HEADSET_MODE,
3838	ALC269_FIXUP_HEADSET_MODE_NO_HP_MIC,
3839	ALC269_FIXUP_ASPIRE_HEADSET_MIC,
3840	ALC269_FIXUP_ASUS_X101_FUNC,
3841	ALC269_FIXUP_ASUS_X101_VERB,
3842	ALC269_FIXUP_ASUS_X101,
3843	ALC271_FIXUP_AMIC_MIC2,
3844	ALC271_FIXUP_HP_GATE_MIC_JACK,
3845	ALC271_FIXUP_HP_GATE_MIC_JACK_E1_572,
3846	ALC269_FIXUP_ACER_AC700,
3847	ALC269_FIXUP_LIMIT_INT_MIC_BOOST,
3848	ALC269VB_FIXUP_ASUS_ZENBOOK,
3849	ALC269VB_FIXUP_ASUS_ZENBOOK_UX31A,
3850	ALC269VB_FIXUP_ASUS_MIC_NO_PRESENCE,
3851	ALC269_FIXUP_LIMIT_INT_MIC_BOOST_MUTE_LED,
3852	ALC269VB_FIXUP_ORDISSIMO_EVE2,
3853	ALC283_FIXUP_CHROME_BOOK,
3854	ALC283_FIXUP_SENSE_COMBO_JACK,
3855	ALC282_FIXUP_ASUS_TX300,
3856	ALC283_FIXUP_INT_MIC,
3857	ALC290_FIXUP_MONO_SPEAKERS,
3858	ALC290_FIXUP_MONO_SPEAKERS_HSJACK,
3859	ALC290_FIXUP_SUBWOOFER,
3860	ALC290_FIXUP_SUBWOOFER_HSJACK,
3861	ALC295_FIXUP_HP_MUTE_LED_COEFBIT11,
3862	ALC269_FIXUP_THINKPAD_ACPI,
3863	ALC269_FIXUP_LENOVO_XPAD_ACPI,
3864	ALC269_FIXUP_DMIC_THINKPAD_ACPI,
3865	ALC269VB_FIXUP_INFINIX_ZERO_BOOK_13,
3866	ALC269VC_FIXUP_INFINIX_Y4_MAX,
3867	ALC269VB_FIXUP_CHUWI_COREBOOK_XPRO,
3868	ALC255_FIXUP_ACER_MIC_NO_PRESENCE,
3869	ALC255_FIXUP_ASUS_MIC_NO_PRESENCE,
3870	ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
3871	ALC255_FIXUP_DELL1_LIMIT_INT_MIC_BOOST,
3872	ALC255_FIXUP_DELL2_MIC_NO_PRESENCE,
3873	ALC255_FIXUP_HEADSET_MODE,
3874	ALC255_FIXUP_HEADSET_MODE_NO_HP_MIC,
3875	ALC293_FIXUP_DELL1_MIC_NO_PRESENCE,
3876	ALC292_FIXUP_TPT440_DOCK,
3877	ALC292_FIXUP_TPT440,
3878	ALC283_FIXUP_HEADSET_MIC,
3879	ALC255_FIXUP_MIC_MUTE_LED,
3880	ALC282_FIXUP_ASPIRE_V5_PINS,
3881	ALC269VB_FIXUP_ASPIRE_E1_COEF,
3882	ALC280_FIXUP_HP_GPIO4,
3883	ALC286_FIXUP_HP_GPIO_LED,
3884	ALC280_FIXUP_HP_GPIO2_MIC_HOTKEY,
3885	ALC280_FIXUP_HP_DOCK_PINS,
3886	ALC269_FIXUP_HP_DOCK_GPIO_MIC1_LED,
3887	ALC280_FIXUP_HP_9480M,
3888	ALC245_FIXUP_HP_X360_AMP,
3889	ALC285_FIXUP_HP_SPECTRE_X360_EB1,
3890	ALC285_FIXUP_HP_SPECTRE_X360_DF1,
3891	ALC285_FIXUP_HP_ENVY_X360,
3892	ALC288_FIXUP_DELL_HEADSET_MODE,
3893	ALC288_FIXUP_DELL1_MIC_NO_PRESENCE,
3894	ALC288_FIXUP_DELL_XPS_13,
3895	ALC288_FIXUP_DISABLE_AAMIX,
3896	ALC292_FIXUP_DELL_E7X_AAMIX,
3897	ALC292_FIXUP_DELL_E7X,
3898	ALC292_FIXUP_DISABLE_AAMIX,
3899	ALC293_FIXUP_DISABLE_AAMIX_MULTIJACK,
3900	ALC298_FIXUP_ALIENWARE_MIC_NO_PRESENCE,
3901	ALC298_FIXUP_DELL1_MIC_NO_PRESENCE,
3902	ALC298_FIXUP_DELL_AIO_MIC_NO_PRESENCE,
3903	ALC275_FIXUP_DELL_XPS,
3904	ALC293_FIXUP_LENOVO_SPK_NOISE,
3905	ALC233_FIXUP_LENOVO_LINE2_MIC_HOTKEY,
3906	ALC233_FIXUP_LENOVO_L2MH_LOW_ENLED,
3907	ALC255_FIXUP_DELL_SPK_NOISE,
3908	ALC225_FIXUP_DISABLE_MIC_VREF,
3909	ALC225_FIXUP_DELL1_MIC_NO_PRESENCE,
3910	ALC295_FIXUP_DISABLE_DAC3,
3911	ALC285_FIXUP_SPEAKER2_TO_DAC1,
3912	ALC285_FIXUP_ASUS_SPEAKER2_TO_DAC1,
3913	ALC285_FIXUP_ASUS_HEADSET_MIC,
3914	ALC285_FIXUP_ASUS_SPI_REAR_SPEAKERS,
3915	ALC285_FIXUP_ASUS_I2C_SPEAKER2_TO_DAC1,
3916	ALC285_FIXUP_ASUS_I2C_HEADSET_MIC,
3917	ALC280_FIXUP_HP_HEADSET_MIC,
3918	ALC221_FIXUP_HP_FRONT_MIC,
3919	ALC292_FIXUP_TPT460,
3920	ALC298_FIXUP_SPK_VOLUME,
3921	ALC298_FIXUP_LENOVO_SPK_VOLUME,
3922	ALC256_FIXUP_DELL_INSPIRON_7559_SUBWOOFER,
3923	ALC269_FIXUP_ATIV_BOOK_8,
3924	ALC221_FIXUP_HP_288PRO_MIC_NO_PRESENCE,
3925	ALC221_FIXUP_HP_MIC_NO_PRESENCE,
3926	ALC256_FIXUP_ASUS_HEADSET_MODE,
3927	ALC256_FIXUP_ASUS_MIC,
3928	ALC256_FIXUP_ASUS_AIO_GPIO2,
3929	ALC233_FIXUP_ASUS_MIC_NO_PRESENCE,
3930	ALC233_FIXUP_EAPD_COEF_AND_MIC_NO_PRESENCE,
3931	ALC233_FIXUP_LENOVO_MULTI_CODECS,
3932	ALC233_FIXUP_ACER_HEADSET_MIC,
3933	ALC294_FIXUP_LENOVO_MIC_LOCATION,
3934	ALC225_FIXUP_DELL_WYSE_MIC_NO_PRESENCE,
3935	ALC225_FIXUP_S3_POP_NOISE,
3936	ALC700_FIXUP_INTEL_REFERENCE,
3937	ALC274_FIXUP_DELL_BIND_DACS,
3938	ALC274_FIXUP_DELL_AIO_LINEOUT_VERB,
3939	ALC298_FIXUP_TPT470_DOCK_FIX,
3940	ALC298_FIXUP_TPT470_DOCK,
3941	ALC255_FIXUP_DUMMY_LINEOUT_VERB,
3942	ALC255_FIXUP_DELL_HEADSET_MIC,
3943	ALC256_FIXUP_HUAWEI_MACH_WX9_PINS,
3944	ALC298_FIXUP_HUAWEI_MBX_STEREO,
3945	ALC295_FIXUP_HP_X360,
3946	ALC221_FIXUP_HP_HEADSET_MIC,
3947	ALC285_FIXUP_LENOVO_HEADPHONE_NOISE,
3948	ALC295_FIXUP_HP_AUTO_MUTE,
3949	ALC286_FIXUP_ACER_AIO_MIC_NO_PRESENCE,
3950	ALC294_FIXUP_ASUS_MIC,
3951	ALC294_FIXUP_ASUS_HEADSET_MIC,
3952	ALC294_FIXUP_ASUS_I2C_HEADSET_MIC,
3953	ALC294_FIXUP_ASUS_SPI_HEADSET_MIC,
3954	ALC294_FIXUP_ASUS_SPK,
3955	ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE,
3956	ALC285_FIXUP_LENOVO_PC_BEEP_IN_NOISE,
3957	ALC255_FIXUP_ACER_HEADSET_MIC,
3958	ALC295_FIXUP_CHROME_BOOK,
3959	ALC225_FIXUP_HEADSET_JACK,
3960	ALC225_FIXUP_DELL_WYSE_AIO_MIC_NO_PRESENCE,
3961	ALC225_FIXUP_WYSE_AUTO_MUTE,
3962	ALC225_FIXUP_WYSE_DISABLE_MIC_VREF,
3963	ALC286_FIXUP_ACER_AIO_HEADSET_MIC,
3964	ALC256_FIXUP_ASUS_HEADSET_MIC,
3965	ALC256_FIXUP_ASUS_MIC_NO_PRESENCE,
3966	ALC255_FIXUP_PREDATOR_SUBWOOFER,
3967	ALC299_FIXUP_PREDATOR_SPK,
3968	ALC256_FIXUP_MEDION_HEADSET_NO_PRESENCE,
3969	ALC289_FIXUP_DELL_SPK1,
3970	ALC289_FIXUP_DELL_SPK2,
3971	ALC289_FIXUP_DUAL_SPK,
3972	ALC289_FIXUP_RTK_AMP_DUAL_SPK,
3973	ALC294_FIXUP_SPK2_TO_DAC1,
3974	ALC294_FIXUP_ASUS_DUAL_SPK,
3975	ALC285_FIXUP_THINKPAD_X1_GEN7,
3976	ALC285_FIXUP_THINKPAD_HEADSET_JACK,
3977	ALC294_FIXUP_ASUS_ALLY,
3978	ALC294_FIXUP_ASUS_ALLY_PINS,
3979	ALC294_FIXUP_ASUS_ALLY_VERBS,
3980	ALC294_FIXUP_ASUS_ALLY_SPEAKER,
3981	ALC294_FIXUP_ASUS_HPE,
3982	ALC294_FIXUP_ASUS_COEF_1B,
3983	ALC294_FIXUP_ASUS_GX502_HP,
3984	ALC294_FIXUP_ASUS_GX502_PINS,
3985	ALC294_FIXUP_ASUS_GX502_VERBS,
3986	ALC294_FIXUP_ASUS_GU502_HP,
3987	ALC294_FIXUP_ASUS_GU502_PINS,
3988	ALC294_FIXUP_ASUS_GU502_VERBS,
3989	ALC294_FIXUP_ASUS_G513_PINS,
3990	ALC285_FIXUP_ASUS_G533Z_PINS,
3991	ALC285_FIXUP_HP_GPIO_LED,
3992	ALC285_FIXUP_HP_MUTE_LED,
3993	ALC285_FIXUP_HP_SPECTRE_X360_MUTE_LED,
3994	ALC245_FIXUP_HP_ENVY_X360_MUTE_LED,
3995	ALC285_FIXUP_HP_BEEP_MICMUTE_LED,
3996	ALC236_FIXUP_HP_MUTE_LED_COEFBIT2,
3997	ALC236_FIXUP_HP_GPIO_LED,
3998	ALC236_FIXUP_HP_MUTE_LED,
3999	ALC236_FIXUP_HP_MUTE_LED_MICMUTE_VREF,
4000	ALC236_FIXUP_LENOVO_INV_DMIC,
4001	ALC298_FIXUP_SAMSUNG_AMP,
4002	ALC298_FIXUP_SAMSUNG_AMP_V2_2_AMPS,
4003	ALC298_FIXUP_SAMSUNG_AMP_V2_4_AMPS,
4004	ALC298_FIXUP_LG_GRAM_STYLE_14,
4005	ALC298_FIXUP_SAMSUNG_HEADPHONE_VERY_QUIET,
4006	ALC256_FIXUP_SAMSUNG_HEADPHONE_VERY_QUIET,
4007	ALC295_FIXUP_ASUS_MIC_NO_PRESENCE,
4008	ALC269VC_FIXUP_ACER_VCOPPERBOX_PINS,
4009	ALC269VC_FIXUP_ACER_HEADSET_MIC,
4010	ALC269VC_FIXUP_ACER_MIC_NO_PRESENCE,
4011	ALC289_FIXUP_ASUS_GA401,
4012	ALC289_FIXUP_ASUS_GA502,
4013	ALC256_FIXUP_ACER_MIC_NO_PRESENCE,
4014	ALC285_FIXUP_HP_GPIO_AMP_INIT,
4015	ALC269_FIXUP_CZC_B20,
4016	ALC269_FIXUP_CZC_TMI,
4017	ALC269_FIXUP_CZC_L101,
4018	ALC269_FIXUP_LEMOTE_A1802,
4019	ALC269_FIXUP_LEMOTE_A190X,
4020	ALC256_FIXUP_INTEL_NUC8_RUGGED,
4021	ALC233_FIXUP_INTEL_NUC8_DMIC,
4022	ALC233_FIXUP_INTEL_NUC8_BOOST,
4023	ALC256_FIXUP_INTEL_NUC10,
4024	ALC255_FIXUP_XIAOMI_HEADSET_MIC,
4025	ALC274_FIXUP_HP_MIC,
4026	ALC274_FIXUP_HP_HEADSET_MIC,
4027	ALC274_FIXUP_HP_ENVY_GPIO,
4028	ALC274_FIXUP_ASUS_ZEN_AIO_27,
4029	ALC256_FIXUP_ASUS_HPE,
4030	ALC285_FIXUP_THINKPAD_NO_BASS_SPK_HEADSET_JACK,
4031	ALC287_FIXUP_HP_GPIO_LED,
4032	ALC256_FIXUP_HP_HEADSET_MIC,
4033	ALC245_FIXUP_HP_GPIO_LED,
4034	ALC236_FIXUP_DELL_AIO_HEADSET_MIC,
4035	ALC282_FIXUP_ACER_DISABLE_LINEOUT,
4036	ALC255_FIXUP_ACER_LIMIT_INT_MIC_BOOST,
4037	ALC256_FIXUP_ACER_HEADSET_MIC,
4038	ALC285_FIXUP_IDEAPAD_S740_COEF,
4039	ALC285_FIXUP_HP_LIMIT_INT_MIC_BOOST,
4040	ALC295_FIXUP_ASUS_DACS,
4041	ALC295_FIXUP_HP_OMEN,
4042	ALC285_FIXUP_HP_SPECTRE_X360,
4043	ALC287_FIXUP_IDEAPAD_BASS_SPK_AMP,
4044	ALC623_FIXUP_LENOVO_THINKSTATION_P340,
4045	ALC255_FIXUP_ACER_HEADPHONE_AND_MIC,
4046	ALC236_FIXUP_HP_LIMIT_INT_MIC_BOOST,
4047	ALC287_FIXUP_LEGION_15IMHG05_SPEAKERS,
4048	ALC287_FIXUP_LEGION_15IMHG05_AUTOMUTE,
4049	ALC287_FIXUP_YOGA7_14ITL_SPEAKERS,
4050	ALC298_FIXUP_LENOVO_C940_DUET7,
4051	ALC287_FIXUP_LENOVO_YOGA_BOOK_9I,
4052	ALC287_FIXUP_13S_GEN2_SPEAKERS,
4053	ALC256_FIXUP_SET_COEF_DEFAULTS,
4054	ALC256_FIXUP_SYSTEM76_MIC_NO_PRESENCE,
4055	ALC233_FIXUP_NO_AUDIO_JACK,
4056	ALC256_FIXUP_MIC_NO_PRESENCE_AND_RESUME,
4057	ALC285_FIXUP_LEGION_Y9000X_SPEAKERS,
4058	ALC285_FIXUP_LEGION_Y9000X_AUTOMUTE,
4059	ALC287_FIXUP_LEGION_16ACHG6,
4060	ALC287_FIXUP_CS35L41_I2C_2,
4061	ALC287_FIXUP_CS35L41_I2C_2_HP_GPIO_LED,
4062	ALC287_FIXUP_CS35L41_I2C_4,
4063	ALC245_FIXUP_CS35L41_SPI_1,
4064	ALC245_FIXUP_CS35L41_SPI_2,
4065	ALC245_FIXUP_CS35L41_SPI_2_HP_GPIO_LED,
4066	ALC245_FIXUP_CS35L41_SPI_4,
4067	ALC245_FIXUP_CS35L41_SPI_4_HP_GPIO_LED,
4068	ALC285_FIXUP_HP_SPEAKERS_MICMUTE_LED,
4069	ALC295_FIXUP_FRAMEWORK_LAPTOP_MIC_NO_PRESENCE,
4070	ALC287_FIXUP_LEGION_16ITHG6,
4071	ALC287_FIXUP_YOGA9_14IAP7_BASS_SPK,
4072	ALC287_FIXUP_YOGA9_14IAP7_BASS_SPK_PIN,
4073	ALC287_FIXUP_YOGA9_14IMH9_BASS_SPK_PIN,
4074	ALC295_FIXUP_DELL_INSPIRON_TOP_SPEAKERS,
4075	ALC236_FIXUP_DELL_DUAL_CODECS,
4076	ALC287_FIXUP_CS35L41_I2C_2_THINKPAD_ACPI,
4077	ALC287_FIXUP_TAS2781_I2C,
4078	ALC295_FIXUP_DELL_TAS2781_I2C,
4079	ALC245_FIXUP_TAS2781_SPI_2,
4080	ALC287_FIXUP_TXNW2781_I2C,
4081	ALC287_FIXUP_TXNW2781_I2C_ASUS,
4082	ALC287_FIXUP_YOGA7_14ARB7_I2C,
4083	ALC245_FIXUP_HP_MUTE_LED_COEFBIT,
4084	ALC245_FIXUP_HP_MUTE_LED_V1_COEFBIT,
4085	ALC245_FIXUP_HP_MUTE_LED_V2_COEFBIT,
4086	ALC245_FIXUP_HP_X360_MUTE_LEDS,
4087	ALC287_FIXUP_THINKPAD_I2S_SPK,
4088	ALC287_FIXUP_MG_RTKC_CSAMP_CS35L41_I2C_THINKPAD,
4089	ALC2XX_FIXUP_HEADSET_MIC,
4090	ALC289_FIXUP_DELL_CS35L41_SPI_2,
4091	ALC294_FIXUP_CS35L41_I2C_2,
4092	ALC256_FIXUP_ACER_SFG16_MICMUTE_LED,
4093	ALC256_FIXUP_HEADPHONE_AMP_VOL,
4094	ALC245_FIXUP_HP_SPECTRE_X360_EU0XXX,
4095	ALC245_FIXUP_HP_SPECTRE_X360_16_AA0XXX,
4096	ALC245_FIXUP_HP_ZBOOK_FIREFLY_G12A,
4097	ALC285_FIXUP_ASUS_GA403U,
4098	ALC285_FIXUP_ASUS_GA403U_HEADSET_MIC,
4099	ALC285_FIXUP_ASUS_GA403U_I2C_SPEAKER2_TO_DAC1,
4100	ALC285_FIXUP_ASUS_GU605_SPI_2_HEADSET_MIC,
4101	ALC285_FIXUP_ASUS_GU605_SPI_SPEAKER2_TO_DAC1,
4102	ALC287_FIXUP_LENOVO_THKPAD_WH_ALC1318,
4103	ALC256_FIXUP_CHROME_BOOK,
4104	ALC245_FIXUP_CLEVO_NOISY_MIC,
4105	ALC269_FIXUP_VAIO_VJFH52_MIC_NO_PRESENCE,
4106	ALC233_FIXUP_MEDION_MTL_SPK,
4107	ALC233_FIXUP_STARLABS_STARFIGHTER,
4108	ALC294_FIXUP_BASS_SPEAKER_15,
4109	ALC283_FIXUP_DELL_HP_RESUME,
4110	ALC294_FIXUP_ASUS_CS35L41_SPI_2,
4111	ALC274_FIXUP_HP_AIO_BIND_DACS,
4112	ALC287_FIXUP_PREDATOR_SPK_CS35L41_I2C_2,
4113	ALC285_FIXUP_ASUS_GA605K_HEADSET_MIC,
4114	ALC285_FIXUP_ASUS_GA605K_I2C_SPEAKER2_TO_DAC1,
4115	ALC269_FIXUP_POSITIVO_P15X_HEADSET_MIC,
4116	ALC289_FIXUP_ASUS_ZEPHYRUS_DUAL_SPK,
4117	ALC256_FIXUP_VAIO_RPL_MIC_NO_PRESENCE,
4118	ALC245_FIXUP_HP_TAS2781_SPI_MUTE_LED,
4119	ALC245_FIXUP_HP_TAS2781_I2C_MUTE_LED,
4120	ALC288_FIXUP_SURFACE_SWAP_DACS,
4121	ALC236_FIXUP_HP_MUTE_LED_MICMUTE_GPIO,
4122	ALC233_FIXUP_LENOVO_GPIO2_MIC_HOTKEY,
4123	ALC245_FIXUP_BASS_HP_DAC,
4124	ALC245_FIXUP_ACER_MICMUTE_LED,
4125	ALC245_FIXUP_CS35L41_I2C_2_MUTE_LED,
4126};
4127
4128/* A special fixup for Lenovo C940 and Yoga Duet 7;
4129 * both have the very same PCI SSID, and we need to apply different fixups
4130 * depending on the codec ID
4131 */
4132static void alc298_fixup_lenovo_c940_duet7(struct hda_codec *codec,
4133					   const struct hda_fixup *fix,
4134					   int action)
4135{
4136	int id;
4137
4138	if (codec->core.vendor_id == 0x10ec0298)
4139		id = ALC298_FIXUP_LENOVO_SPK_VOLUME; /* C940 */
4140	else
4141		id = ALC287_FIXUP_YOGA7_14ITL_SPEAKERS; /* Duet 7 */
4142	__snd_hda_apply_fixup(codec, id, action, 0);
4143}
4144
4145/* A special fixup for Lenovo Yoga 9i and Yoga Book 9i 13IRU8
4146 * both have the very same PCI SSID and vendor ID, so we need
4147 * to apply different fixups depending on the subsystem ID
4148 */
4149static void alc287_fixup_lenovo_yoga_book_9i(struct hda_codec *codec,
4150					   const struct hda_fixup *fix,
4151					   int action)
4152{
4153	int id;
4154
4155	if (codec->core.subsystem_id == 0x17aa3881)
4156		id = ALC287_FIXUP_TAS2781_I2C; /* Yoga Book 9i 13IRU8 */
4157	else
4158		id = ALC287_FIXUP_IDEAPAD_BASS_SPK_AMP; /* Yoga 9i */
4159	__snd_hda_apply_fixup(codec, id, action, 0);
4160}
4161
4162static const struct hda_fixup alc269_fixups[] = {
4163	[ALC269_FIXUP_GPIO2] = {
4164		.type = HDA_FIXUP_FUNC,
4165		.v.func = alc_fixup_gpio2,
4166	},
4167	[ALC269_FIXUP_SONY_VAIO] = {
4168		.type = HDA_FIXUP_PINCTLS,
4169		.v.pins = (const struct hda_pintbl[]) {
4170			{0x19, PIN_VREFGRD},
4171			{}
4172		}
4173	},
4174	[ALC275_FIXUP_SONY_VAIO_GPIO2] = {
4175		.type = HDA_FIXUP_FUNC,
4176		.v.func = alc275_fixup_gpio4_off,
4177		.chained = true,
4178		.chain_id = ALC269_FIXUP_SONY_VAIO
4179	},
4180	[ALC269_FIXUP_DELL_M101Z] = {
4181		.type = HDA_FIXUP_VERBS,
4182		.v.verbs = (const struct hda_verb[]) {
4183			/* Enables internal speaker */
4184			{0x20, AC_VERB_SET_COEF_INDEX, 13},
4185			{0x20, AC_VERB_SET_PROC_COEF, 0x4040},
4186			{}
4187		}
4188	},
4189	[ALC269_FIXUP_SKU_IGNORE] = {
4190		.type = HDA_FIXUP_FUNC,
4191		.v.func = alc_fixup_sku_ignore,
4192	},
4193	[ALC269_FIXUP_ASUS_G73JW] = {
4194		.type = HDA_FIXUP_PINS,
4195		.v.pins = (const struct hda_pintbl[]) {
4196			{ 0x17, 0x99130111 }, /* subwoofer */
4197			{ }
4198		}
4199	},
4200	[ALC269_FIXUP_ASUS_N7601ZM_PINS] = {
4201		.type = HDA_FIXUP_PINS,
4202		.v.pins = (const struct hda_pintbl[]) {
4203			{ 0x19, 0x03A11050 },
4204			{ 0x1a, 0x03A11C30 },
4205			{ 0x21, 0x03211420 },
4206			{ }
4207		}
4208	},
4209	[ALC269_FIXUP_ASUS_N7601ZM] = {
4210		.type = HDA_FIXUP_VERBS,
4211		.v.verbs = (const struct hda_verb[]) {
4212			{0x20, AC_VERB_SET_COEF_INDEX, 0x62},
4213			{0x20, AC_VERB_SET_PROC_COEF, 0xa007},
4214			{0x20, AC_VERB_SET_COEF_INDEX, 0x10},
4215			{0x20, AC_VERB_SET_PROC_COEF, 0x8420},
4216			{0x20, AC_VERB_SET_COEF_INDEX, 0x0f},
4217			{0x20, AC_VERB_SET_PROC_COEF, 0x7774},
4218			{ }
4219		},
4220		.chained = true,
4221		.chain_id = ALC269_FIXUP_ASUS_N7601ZM_PINS,
4222	},
4223	[ALC269_FIXUP_LENOVO_EAPD] = {
4224		.type = HDA_FIXUP_VERBS,
4225		.v.verbs = (const struct hda_verb[]) {
4226			{0x14, AC_VERB_SET_EAPD_BTLENABLE, 0},
4227			{}
4228		}
4229	},
4230	[ALC275_FIXUP_SONY_HWEQ] = {
4231		.type = HDA_FIXUP_FUNC,
4232		.v.func = alc269_fixup_hweq,
4233		.chained = true,
4234		.chain_id = ALC275_FIXUP_SONY_VAIO_GPIO2
4235	},
4236	[ALC275_FIXUP_SONY_DISABLE_AAMIX] = {
4237		.type = HDA_FIXUP_FUNC,
4238		.v.func = alc_fixup_disable_aamix,
4239		.chained = true,
4240		.chain_id = ALC269_FIXUP_SONY_VAIO
4241	},
4242	[ALC271_FIXUP_DMIC] = {
4243		.type = HDA_FIXUP_FUNC,
4244		.v.func = alc271_fixup_dmic,
4245	},
4246	[ALC269_FIXUP_PCM_44K] = {
4247		.type = HDA_FIXUP_FUNC,
4248		.v.func = alc269_fixup_pcm_44k,
4249		.chained = true,
4250		.chain_id = ALC269_FIXUP_QUANTA_MUTE
4251	},
4252	[ALC269_FIXUP_STEREO_DMIC] = {
4253		.type = HDA_FIXUP_FUNC,
4254		.v.func = alc269_fixup_stereo_dmic,
4255	},
4256	[ALC269_FIXUP_HEADSET_MIC] = {
4257		.type = HDA_FIXUP_FUNC,
4258		.v.func = alc_fixup_headset_mic,
4259	},
4260	[ALC269_FIXUP_QUANTA_MUTE] = {
4261		.type = HDA_FIXUP_FUNC,
4262		.v.func = alc269_fixup_quanta_mute,
4263	},
4264	[ALC269_FIXUP_LIFEBOOK] = {
4265		.type = HDA_FIXUP_PINS,
4266		.v.pins = (const struct hda_pintbl[]) {
4267			{ 0x1a, 0x2101103f }, /* dock line-out */
4268			{ 0x1b, 0x23a11040 }, /* dock mic-in */
4269			{ }
4270		},
4271		.chained = true,
4272		.chain_id = ALC269_FIXUP_QUANTA_MUTE
4273	},
4274	[ALC269_FIXUP_LIFEBOOK_EXTMIC] = {
4275		.type = HDA_FIXUP_PINS,
4276		.v.pins = (const struct hda_pintbl[]) {
4277			{ 0x19, 0x01a1903c }, /* headset mic, with jack detect */
4278			{ }
4279		},
4280	},
4281	[ALC269_FIXUP_LIFEBOOK_HP_PIN] = {
4282		.type = HDA_FIXUP_PINS,
4283		.v.pins = (const struct hda_pintbl[]) {
4284			{ 0x21, 0x0221102f }, /* HP out */
4285			{ }
4286		},
4287	},
4288	[ALC269_FIXUP_LIFEBOOK_NO_HP_TO_LINEOUT] = {
4289		.type = HDA_FIXUP_FUNC,
4290		.v.func = alc269_fixup_pincfg_no_hp_to_lineout,
4291	},
4292	[ALC255_FIXUP_LIFEBOOK_U7x7_HEADSET_MIC] = {
4293		.type = HDA_FIXUP_FUNC,
4294		.v.func = alc269_fixup_pincfg_U7x7_headset_mic,
4295	},
4296	[ALC269VB_FIXUP_INFINIX_ZERO_BOOK_13] = {
4297		.type = HDA_FIXUP_PINS,
4298		.v.pins = (const struct hda_pintbl[]) {
4299			{ 0x14, 0x90170151 }, /* use as internal speaker (LFE) */
4300			{ 0x1b, 0x90170152 }, /* use as internal speaker (back) */
4301			{ }
4302		},
4303		.chained = true,
4304		.chain_id = ALC269_FIXUP_LIMIT_INT_MIC_BOOST
4305	},
4306	[ALC269VC_FIXUP_INFINIX_Y4_MAX] = {
4307		.type = HDA_FIXUP_PINS,
4308		.v.pins = (const struct hda_pintbl[]) {
4309			{ 0x1b, 0x90170150 }, /* use as internal speaker */
4310			{ }
4311		},
4312		.chained = true,
4313		.chain_id = ALC269_FIXUP_LIMIT_INT_MIC_BOOST
4314	},
4315	[ALC269VB_FIXUP_CHUWI_COREBOOK_XPRO] = {
4316		.type = HDA_FIXUP_PINS,
4317		.v.pins = (const struct hda_pintbl[]) {
4318			{ 0x18, 0x03a19020 }, /* headset mic */
4319			{ 0x1b, 0x90170150 }, /* speaker */
4320			{ }
4321		},
4322	},
4323	[ALC269_FIXUP_AMIC] = {
4324		.type = HDA_FIXUP_PINS,
4325		.v.pins = (const struct hda_pintbl[]) {
4326			{ 0x14, 0x99130110 }, /* speaker */
4327			{ 0x15, 0x0121401f }, /* HP out */
4328			{ 0x18, 0x01a19c20 }, /* mic */
4329			{ 0x19, 0x99a3092f }, /* int-mic */
4330			{ }
4331		},
4332	},
4333	[ALC269_FIXUP_DMIC] = {
4334		.type = HDA_FIXUP_PINS,
4335		.v.pins = (const struct hda_pintbl[]) {
4336			{ 0x12, 0x99a3092f }, /* int-mic */
4337			{ 0x14, 0x99130110 }, /* speaker */
4338			{ 0x15, 0x0121401f }, /* HP out */
4339			{ 0x18, 0x01a19c20 }, /* mic */
4340			{ }
4341		},
4342	},
4343	[ALC269VB_FIXUP_AMIC] = {
4344		.type = HDA_FIXUP_PINS,
4345		.v.pins = (const struct hda_pintbl[]) {
4346			{ 0x14, 0x99130110 }, /* speaker */
4347			{ 0x18, 0x01a19c20 }, /* mic */
4348			{ 0x19, 0x99a3092f }, /* int-mic */
4349			{ 0x21, 0x0121401f }, /* HP out */
4350			{ }
4351		},
4352	},
4353	[ALC269VB_FIXUP_DMIC] = {
4354		.type = HDA_FIXUP_PINS,
4355		.v.pins = (const struct hda_pintbl[]) {
4356			{ 0x12, 0x99a3092f }, /* int-mic */
4357			{ 0x14, 0x99130110 }, /* speaker */
4358			{ 0x18, 0x01a19c20 }, /* mic */
4359			{ 0x21, 0x0121401f }, /* HP out */
4360			{ }
4361		},
4362	},
4363	[ALC269_FIXUP_HP_MUTE_LED] = {
4364		.type = HDA_FIXUP_FUNC,
4365		.v.func = alc269_fixup_hp_mute_led,
4366	},
4367	[ALC269_FIXUP_HP_MUTE_LED_MIC1] = {
4368		.type = HDA_FIXUP_FUNC,
4369		.v.func = alc269_fixup_hp_mute_led_mic1,
4370	},
4371	[ALC269_FIXUP_HP_MUTE_LED_MIC2] = {
4372		.type = HDA_FIXUP_FUNC,
4373		.v.func = alc269_fixup_hp_mute_led_mic2,
4374	},
4375	[ALC269_FIXUP_HP_MUTE_LED_MIC3] = {
4376		.type = HDA_FIXUP_FUNC,
4377		.v.func = alc269_fixup_hp_mute_led_mic3,
4378		.chained = true,
4379		.chain_id = ALC295_FIXUP_HP_AUTO_MUTE
4380	},
4381	[ALC269_FIXUP_HP_GPIO_LED] = {
4382		.type = HDA_FIXUP_FUNC,
4383		.v.func = alc269_fixup_hp_gpio_led,
4384	},
4385	[ALC269_FIXUP_HP_GPIO_MIC1_LED] = {
4386		.type = HDA_FIXUP_FUNC,
4387		.v.func = alc269_fixup_hp_gpio_mic1_led,
4388	},
4389	[ALC269_FIXUP_HP_LINE1_MIC1_LED] = {
4390		.type = HDA_FIXUP_FUNC,
4391		.v.func = alc269_fixup_hp_line1_mic1_led,
4392	},
4393	[ALC269_FIXUP_INV_DMIC] = {
4394		.type = HDA_FIXUP_FUNC,
4395		.v.func = alc_fixup_inv_dmic,
4396	},
4397	[ALC269_FIXUP_NO_SHUTUP] = {
4398		.type = HDA_FIXUP_FUNC,
4399		.v.func = alc_fixup_no_shutup,
4400	},
4401	[ALC269_FIXUP_LENOVO_DOCK] = {
4402		.type = HDA_FIXUP_PINS,
4403		.v.pins = (const struct hda_pintbl[]) {
4404			{ 0x19, 0x23a11040 }, /* dock mic */
4405			{ 0x1b, 0x2121103f }, /* dock headphone */
4406			{ }
4407		},
4408		.chained = true,
4409		.chain_id = ALC269_FIXUP_PINCFG_NO_HP_TO_LINEOUT
4410	},
4411	[ALC269_FIXUP_LENOVO_DOCK_LIMIT_BOOST] = {
4412		.type = HDA_FIXUP_FUNC,
4413		.v.func = alc269_fixup_limit_int_mic_boost,
4414		.chained = true,
4415		.chain_id = ALC269_FIXUP_LENOVO_DOCK,
4416	},
4417	[ALC269_FIXUP_PINCFG_NO_HP_TO_LINEOUT] = {
4418		.type = HDA_FIXUP_FUNC,
4419		.v.func = alc269_fixup_pincfg_no_hp_to_lineout,
4420		.chained = true,
4421		.chain_id = ALC269_FIXUP_THINKPAD_ACPI,
4422	},
4423	[ALC269_FIXUP_DELL1_MIC_NO_PRESENCE] = {
4424		.type = HDA_FIXUP_PINS,
4425		.v.pins = (const struct hda_pintbl[]) {
4426			{ 0x19, 0x01a1913c }, /* use as headset mic, without its own jack detect */
4427			{ 0x1a, 0x01a1913d }, /* use as headphone mic, without its own jack detect */
4428			{ }
4429		},
4430		.chained = true,
4431		.chain_id = ALC269_FIXUP_HEADSET_MODE
4432	},
4433	[ALC269_FIXUP_DELL1_LIMIT_INT_MIC_BOOST] = {
4434		.type = HDA_FIXUP_FUNC,
4435		.v.func = alc269_fixup_limit_int_mic_boost,
4436		.chained = true,
4437		.chain_id = ALC269_FIXUP_DELL1_MIC_NO_PRESENCE
4438	},
4439	[ALC269_FIXUP_DELL2_MIC_NO_PRESENCE] = {
4440		.type = HDA_FIXUP_PINS,
4441		.v.pins = (const struct hda_pintbl[]) {
4442			{ 0x16, 0x21014020 }, /* dock line out */
4443			{ 0x19, 0x21a19030 }, /* dock mic */
4444			{ 0x1a, 0x01a1913c }, /* use as headset mic, without its own jack detect */
4445			{ }
4446		},
4447		.chained = true,
4448		.chain_id = ALC269_FIXUP_HEADSET_MODE_NO_HP_MIC
4449	},
4450	[ALC269_FIXUP_DELL3_MIC_NO_PRESENCE] = {
4451		.type = HDA_FIXUP_PINS,
4452		.v.pins = (const struct hda_pintbl[]) {
4453			{ 0x1a, 0x01a1913c }, /* use as headset mic, without its own jack detect */
4454			{ }
4455		},
4456		.chained = true,
4457		.chain_id = ALC269_FIXUP_HEADSET_MODE_NO_HP_MIC
4458	},
4459	[ALC269_FIXUP_DELL4_MIC_NO_PRESENCE] = {
4460		.type = HDA_FIXUP_PINS,
4461		.v.pins = (const struct hda_pintbl[]) {
4462			{ 0x19, 0x01a1913c }, /* use as headset mic, without its own jack detect */
4463			{ 0x1b, 0x01a1913d }, /* use as headphone mic, without its own jack detect */
4464			{ }
4465		},
4466		.chained = true,
4467		.chain_id = ALC269_FIXUP_HEADSET_MODE
4468	},
4469	[ALC269_FIXUP_HEADSET_MODE] = {
4470		.type = HDA_FIXUP_FUNC,
4471		.v.func = alc_fixup_headset_mode,
4472		.chained = true,
4473		.chain_id = ALC255_FIXUP_MIC_MUTE_LED
4474	},
4475	[ALC269_FIXUP_HEADSET_MODE_NO_HP_MIC] = {
4476		.type = HDA_FIXUP_FUNC,
4477		.v.func = alc_fixup_headset_mode_no_hp_mic,
4478	},
4479	[ALC269_FIXUP_ASPIRE_HEADSET_MIC] = {
4480		.type = HDA_FIXUP_PINS,
4481		.v.pins = (const struct hda_pintbl[]) {
4482			{ 0x19, 0x01a1913c }, /* headset mic w/o jack detect */
4483			{ }
4484		},
4485		.chained = true,
4486		.chain_id = ALC269_FIXUP_HEADSET_MODE,
4487	},
4488	[ALC286_FIXUP_SONY_MIC_NO_PRESENCE] = {
4489		.type = HDA_FIXUP_PINS,
4490		.v.pins = (const struct hda_pintbl[]) {
4491			{ 0x18, 0x01a1913c }, /* use as headset mic, without its own jack detect */
4492			{ }
4493		},
4494		.chained = true,
4495		.chain_id = ALC269_FIXUP_HEADSET_MIC
4496	},
4497	[ALC256_FIXUP_HUAWEI_MACH_WX9_PINS] = {
4498		.type = HDA_FIXUP_PINS,
4499		.v.pins = (const struct hda_pintbl[]) {
4500			{0x12, 0x90a60130},
4501			{0x13, 0x40000000},
4502			{0x14, 0x90170110},
4503			{0x18, 0x411111f0},
4504			{0x19, 0x04a11040},
4505			{0x1a, 0x411111f0},
4506			{0x1b, 0x90170112},
4507			{0x1d, 0x40759a05},
4508			{0x1e, 0x411111f0},
4509			{0x21, 0x04211020},
4510			{ }
4511		},
4512		.chained = true,
4513		.chain_id = ALC255_FIXUP_MIC_MUTE_LED
4514	},
4515	[ALC298_FIXUP_HUAWEI_MBX_STEREO] = {
4516		.type = HDA_FIXUP_FUNC,
4517		.v.func = alc298_fixup_huawei_mbx_stereo,
4518		.chained = true,
4519		.chain_id = ALC255_FIXUP_MIC_MUTE_LED
4520	},
4521	[ALC269_FIXUP_ASUS_X101_FUNC] = {
4522		.type = HDA_FIXUP_FUNC,
4523		.v.func = alc269_fixup_x101_headset_mic,
4524	},
4525	[ALC269_FIXUP_ASUS_X101_VERB] = {
4526		.type = HDA_FIXUP_VERBS,
4527		.v.verbs = (const struct hda_verb[]) {
4528			{0x18, AC_VERB_SET_PIN_WIDGET_CONTROL, 0},
4529			{0x20, AC_VERB_SET_COEF_INDEX, 0x08},
4530			{0x20, AC_VERB_SET_PROC_COEF,  0x0310},
4531			{ }
4532		},
4533		.chained = true,
4534		.chain_id = ALC269_FIXUP_ASUS_X101_FUNC
4535	},
4536	[ALC269_FIXUP_ASUS_X101] = {
4537		.type = HDA_FIXUP_PINS,
4538		.v.pins = (const struct hda_pintbl[]) {
4539			{ 0x18, 0x04a1182c }, /* Headset mic */
4540			{ }
4541		},
4542		.chained = true,
4543		.chain_id = ALC269_FIXUP_ASUS_X101_VERB
4544	},
4545	[ALC271_FIXUP_AMIC_MIC2] = {
4546		.type = HDA_FIXUP_PINS,
4547		.v.pins = (const struct hda_pintbl[]) {
4548			{ 0x14, 0x99130110 }, /* speaker */
4549			{ 0x19, 0x01a19c20 }, /* mic */
4550			{ 0x1b, 0x99a7012f }, /* int-mic */
4551			{ 0x21, 0x0121401f }, /* HP out */
4552			{ }
4553		},
4554	},
4555	[ALC271_FIXUP_HP_GATE_MIC_JACK] = {
4556		.type = HDA_FIXUP_FUNC,
4557		.v.func = alc271_hp_gate_mic_jack,
4558		.chained = true,
4559		.chain_id = ALC271_FIXUP_AMIC_MIC2,
4560	},
4561	[ALC271_FIXUP_HP_GATE_MIC_JACK_E1_572] = {
4562		.type = HDA_FIXUP_FUNC,
4563		.v.func = alc269_fixup_limit_int_mic_boost,
4564		.chained = true,
4565		.chain_id = ALC271_FIXUP_HP_GATE_MIC_JACK,
4566	},
4567	[ALC269_FIXUP_ACER_AC700] = {
4568		.type = HDA_FIXUP_PINS,
4569		.v.pins = (const struct hda_pintbl[]) {
4570			{ 0x12, 0x99a3092f }, /* int-mic */
4571			{ 0x14, 0x99130110 }, /* speaker */
4572			{ 0x18, 0x03a11c20 }, /* mic */
4573			{ 0x1e, 0x0346101e }, /* SPDIF1 */
4574			{ 0x21, 0x0321101f }, /* HP out */
4575			{ }
4576		},
4577		.chained = true,
4578		.chain_id = ALC271_FIXUP_DMIC,
4579	},
4580	[ALC269_FIXUP_LIMIT_INT_MIC_BOOST] = {
4581		.type = HDA_FIXUP_FUNC,
4582		.v.func = alc269_fixup_limit_int_mic_boost,
4583		.chained = true,
4584		.chain_id = ALC269_FIXUP_THINKPAD_ACPI,
4585	},
4586	[ALC269VB_FIXUP_ASUS_ZENBOOK] = {
4587		.type = HDA_FIXUP_FUNC,
4588		.v.func = alc269_fixup_limit_int_mic_boost,
4589		.chained = true,
4590		.chain_id = ALC269VB_FIXUP_DMIC,
4591	},
4592	[ALC269VB_FIXUP_ASUS_ZENBOOK_UX31A] = {
4593		.type = HDA_FIXUP_VERBS,
4594		.v.verbs = (const struct hda_verb[]) {
4595			/* class-D output amp +5dB */
4596			{ 0x20, AC_VERB_SET_COEF_INDEX, 0x12 },
4597			{ 0x20, AC_VERB_SET_PROC_COEF, 0x2800 },
4598			{}
4599		},
4600		.chained = true,
4601		.chain_id = ALC269VB_FIXUP_ASUS_ZENBOOK,
4602	},
4603	[ALC269VB_FIXUP_ASUS_MIC_NO_PRESENCE] = {
4604		.type = HDA_FIXUP_PINS,
4605		.v.pins = (const struct hda_pintbl[]) {
4606			{ 0x18, 0x01a110f0 },  /* use as headset mic */
4607			{ }
4608		},
4609		.chained = true,
4610		.chain_id = ALC269_FIXUP_HEADSET_MIC
4611	},
4612	[ALC269_FIXUP_LIMIT_INT_MIC_BOOST_MUTE_LED] = {
4613		.type = HDA_FIXUP_FUNC,
4614		.v.func = alc269_fixup_limit_int_mic_boost,
4615		.chained = true,
4616		.chain_id = ALC269_FIXUP_HP_MUTE_LED_MIC1,
4617	},
4618	[ALC269VB_FIXUP_ORDISSIMO_EVE2] = {
4619		.type = HDA_FIXUP_PINS,
4620		.v.pins = (const struct hda_pintbl[]) {
4621			{ 0x12, 0x99a3092f }, /* int-mic */
4622			{ 0x18, 0x03a11d20 }, /* mic */
4623			{ 0x19, 0x411111f0 }, /* Unused bogus pin */
4624			{ }
4625		},
4626	},
4627	[ALC283_FIXUP_CHROME_BOOK] = {
4628		.type = HDA_FIXUP_FUNC,
4629		.v.func = alc283_fixup_chromebook,
4630	},
4631	[ALC283_FIXUP_SENSE_COMBO_JACK] = {
4632		.type = HDA_FIXUP_FUNC,
4633		.v.func = alc283_fixup_sense_combo_jack,
4634		.chained = true,
4635		.chain_id = ALC283_FIXUP_CHROME_BOOK,
4636	},
4637	[ALC282_FIXUP_ASUS_TX300] = {
4638		.type = HDA_FIXUP_FUNC,
4639		.v.func = alc282_fixup_asus_tx300,
4640	},
4641	[ALC283_FIXUP_INT_MIC] = {
4642		.type = HDA_FIXUP_VERBS,
4643		.v.verbs = (const struct hda_verb[]) {
4644			{0x20, AC_VERB_SET_COEF_INDEX, 0x1a},
4645			{0x20, AC_VERB_SET_PROC_COEF, 0x0011},
4646			{ }
4647		},
4648		.chained = true,
4649		.chain_id = ALC269_FIXUP_LIMIT_INT_MIC_BOOST
4650	},
4651	[ALC290_FIXUP_SUBWOOFER_HSJACK] = {
4652		.type = HDA_FIXUP_PINS,
4653		.v.pins = (const struct hda_pintbl[]) {
4654			{ 0x17, 0x90170112 }, /* subwoofer */
4655			{ }
4656		},
4657		.chained = true,
4658		.chain_id = ALC290_FIXUP_MONO_SPEAKERS_HSJACK,
4659	},
4660	[ALC290_FIXUP_SUBWOOFER] = {
4661		.type = HDA_FIXUP_PINS,
4662		.v.pins = (const struct hda_pintbl[]) {
4663			{ 0x17, 0x90170112 }, /* subwoofer */
4664			{ }
4665		},
4666		.chained = true,
4667		.chain_id = ALC290_FIXUP_MONO_SPEAKERS,
4668	},
4669	[ALC290_FIXUP_MONO_SPEAKERS] = {
4670		.type = HDA_FIXUP_FUNC,
4671		.v.func = alc290_fixup_mono_speakers,
4672	},
4673	[ALC290_FIXUP_MONO_SPEAKERS_HSJACK] = {
4674		.type = HDA_FIXUP_FUNC,
4675		.v.func = alc290_fixup_mono_speakers,
4676		.chained = true,
4677		.chain_id = ALC269_FIXUP_DELL3_MIC_NO_PRESENCE,
4678	},
4679	[ALC269_FIXUP_THINKPAD_ACPI] = {
4680		.type = HDA_FIXUP_FUNC,
4681		.v.func = alc_fixup_thinkpad_acpi,
4682		.chained = true,
4683		.chain_id = ALC269_FIXUP_SKU_IGNORE,
4684	},
4685	[ALC269_FIXUP_LENOVO_XPAD_ACPI] = {
4686		.type = HDA_FIXUP_FUNC,
4687		.v.func = alc_fixup_ideapad_acpi,
4688		.chained = true,
4689		.chain_id = ALC269_FIXUP_THINKPAD_ACPI,
4690	},
4691	[ALC269_FIXUP_DMIC_THINKPAD_ACPI] = {
4692		.type = HDA_FIXUP_FUNC,
4693		.v.func = alc_fixup_inv_dmic,
4694		.chained = true,
4695		.chain_id = ALC269_FIXUP_THINKPAD_ACPI,
4696	},
4697	[ALC255_FIXUP_ACER_MIC_NO_PRESENCE] = {
4698		.type = HDA_FIXUP_PINS,
4699		.v.pins = (const struct hda_pintbl[]) {
4700			{ 0x19, 0x01a1913c }, /* use as headset mic, without its own jack detect */
4701			{ }
4702		},
4703		.chained = true,
4704		.chain_id = ALC255_FIXUP_HEADSET_MODE
4705	},
4706	[ALC255_FIXUP_ASUS_MIC_NO_PRESENCE] = {
4707		.type = HDA_FIXUP_PINS,
4708		.v.pins = (const struct hda_pintbl[]) {
4709			{ 0x19, 0x01a1913c }, /* use as headset mic, without its own jack detect */
4710			{ }
4711		},
4712		.chained = true,
4713		.chain_id = ALC255_FIXUP_HEADSET_MODE
4714	},
4715	[ALC255_FIXUP_DELL1_MIC_NO_PRESENCE] = {
4716		.type = HDA_FIXUP_PINS,
4717		.v.pins = (const struct hda_pintbl[]) {
4718			{ 0x19, 0x01a1913c }, /* use as headset mic, without its own jack detect */
4719			{ 0x1a, 0x01a1913d }, /* use as headphone mic, without its own jack detect */
4720			{ }
4721		},
4722		.chained = true,
4723		.chain_id = ALC255_FIXUP_HEADSET_MODE
4724	},
4725	[ALC255_FIXUP_DELL1_LIMIT_INT_MIC_BOOST] = {
4726		.type = HDA_FIXUP_FUNC,
4727		.v.func = alc269_fixup_limit_int_mic_boost,
4728		.chained = true,
4729		.chain_id = ALC255_FIXUP_DELL1_MIC_NO_PRESENCE
4730	},
4731	[ALC255_FIXUP_DELL2_MIC_NO_PRESENCE] = {
4732		.type = HDA_FIXUP_PINS,
4733		.v.pins = (const struct hda_pintbl[]) {
4734			{ 0x19, 0x01a1913c }, /* use as headset mic, without its own jack detect */
4735			{ }
4736		},
4737		.chained = true,
4738		.chain_id = ALC255_FIXUP_HEADSET_MODE_NO_HP_MIC
4739	},
4740	[ALC255_FIXUP_HEADSET_MODE] = {
4741		.type = HDA_FIXUP_FUNC,
4742		.v.func = alc_fixup_headset_mode_alc255,
4743		.chained = true,
4744		.chain_id = ALC255_FIXUP_MIC_MUTE_LED
4745	},
4746	[ALC255_FIXUP_HEADSET_MODE_NO_HP_MIC] = {
4747		.type = HDA_FIXUP_FUNC,
4748		.v.func = alc_fixup_headset_mode_alc255_no_hp_mic,
4749	},
4750	[ALC293_FIXUP_DELL1_MIC_NO_PRESENCE] = {
4751		.type = HDA_FIXUP_PINS,
4752		.v.pins = (const struct hda_pintbl[]) {
4753			{ 0x18, 0x01a1913d }, /* use as headphone mic, without its own jack detect */
4754			{ 0x1a, 0x01a1913c }, /* use as headset mic, without its own jack detect */
4755			{ }
4756		},
4757		.chained = true,
4758		.chain_id = ALC269_FIXUP_HEADSET_MODE
4759	},
4760	[ALC292_FIXUP_TPT440_DOCK] = {
4761		.type = HDA_FIXUP_FUNC,
4762		.v.func = alc_fixup_tpt440_dock,
4763		.chained = true,
4764		.chain_id = ALC269_FIXUP_LIMIT_INT_MIC_BOOST
4765	},
4766	[ALC292_FIXUP_TPT440] = {
4767		.type = HDA_FIXUP_FUNC,
4768		.v.func = alc_fixup_disable_aamix,
4769		.chained = true,
4770		.chain_id = ALC292_FIXUP_TPT440_DOCK,
4771	},
4772	[ALC283_FIXUP_HEADSET_MIC] = {
4773		.type = HDA_FIXUP_PINS,
4774		.v.pins = (const struct hda_pintbl[]) {
4775			{ 0x19, 0x04a110f0 },
4776			{ },
4777		},
4778	},
4779	[ALC255_FIXUP_MIC_MUTE_LED] = {
4780		.type = HDA_FIXUP_FUNC,
4781		.v.func = alc_fixup_micmute_led,
4782	},
4783	[ALC282_FIXUP_ASPIRE_V5_PINS] = {
4784		.type = HDA_FIXUP_PINS,
4785		.v.pins = (const struct hda_pintbl[]) {
4786			{ 0x12, 0x90a60130 },
4787			{ 0x14, 0x90170110 },
4788			{ 0x17, 0x40000008 },
4789			{ 0x18, 0x411111f0 },
4790			{ 0x19, 0x01a1913c },
4791			{ 0x1a, 0x411111f0 },
4792			{ 0x1b, 0x411111f0 },
4793			{ 0x1d, 0x40f89b2d },
4794			{ 0x1e, 0x411111f0 },
4795			{ 0x21, 0x0321101f },
4796			{ },
4797		},
4798	},
4799	[ALC269VB_FIXUP_ASPIRE_E1_COEF] = {
4800		.type = HDA_FIXUP_FUNC,
4801		.v.func = alc269vb_fixup_aspire_e1_coef,
4802	},
4803	[ALC280_FIXUP_HP_GPIO4] = {
4804		.type = HDA_FIXUP_FUNC,
4805		.v.func = alc280_fixup_hp_gpio4,
4806	},
4807	[ALC286_FIXUP_HP_GPIO_LED] = {
4808		.type = HDA_FIXUP_FUNC,
4809		.v.func = alc286_fixup_hp_gpio_led,
4810	},
4811	[ALC280_FIXUP_HP_GPIO2_MIC_HOTKEY] = {
4812		.type = HDA_FIXUP_FUNC,
4813		.v.func = alc280_fixup_hp_gpio2_mic_hotkey,
4814	},
4815	[ALC280_FIXUP_HP_DOCK_PINS] = {
4816		.type = HDA_FIXUP_PINS,
4817		.v.pins = (const struct hda_pintbl[]) {
4818			{ 0x1b, 0x21011020 }, /* line-out */
4819			{ 0x1a, 0x01a1903c }, /* headset mic */
4820			{ 0x18, 0x2181103f }, /* line-in */
4821			{ },
4822		},
4823		.chained = true,
4824		.chain_id = ALC280_FIXUP_HP_GPIO4
4825	},
4826	[ALC269_FIXUP_HP_DOCK_GPIO_MIC1_LED] = {
4827		.type = HDA_FIXUP_PINS,
4828		.v.pins = (const struct hda_pintbl[]) {
4829			{ 0x1b, 0x21011020 }, /* line-out */
4830			{ 0x18, 0x2181103f }, /* line-in */
4831			{ },
4832		},
4833		.chained = true,
4834		.chain_id = ALC269_FIXUP_HP_GPIO_MIC1_LED
4835	},
4836	[ALC280_FIXUP_HP_9480M] = {
4837		.type = HDA_FIXUP_FUNC,
4838		.v.func = alc280_fixup_hp_9480m,
4839	},
4840	[ALC245_FIXUP_HP_X360_AMP] = {
4841		.type = HDA_FIXUP_FUNC,
4842		.v.func = alc245_fixup_hp_x360_amp,
4843		.chained = true,
4844		.chain_id = ALC245_FIXUP_HP_GPIO_LED
4845	},
4846	[ALC288_FIXUP_DELL_HEADSET_MODE] = {
4847		.type = HDA_FIXUP_FUNC,
4848		.v.func = alc_fixup_headset_mode_dell_alc288,
4849		.chained = true,
4850		.chain_id = ALC255_FIXUP_MIC_MUTE_LED
4851	},
4852	[ALC288_FIXUP_DELL1_MIC_NO_PRESENCE] = {
4853		.type = HDA_FIXUP_PINS,
4854		.v.pins = (const struct hda_pintbl[]) {
4855			{ 0x18, 0x01a1913c }, /* use as headset mic, without its own jack detect */
4856			{ 0x1a, 0x01a1913d }, /* use as headphone mic, without its own jack detect */
4857			{ }
4858		},
4859		.chained = true,
4860		.chain_id = ALC288_FIXUP_DELL_HEADSET_MODE
4861	},
4862	[ALC288_FIXUP_DISABLE_AAMIX] = {
4863		.type = HDA_FIXUP_FUNC,
4864		.v.func = alc_fixup_disable_aamix,
4865		.chained = true,
4866		.chain_id = ALC288_FIXUP_DELL1_MIC_NO_PRESENCE
4867	},
4868	[ALC288_FIXUP_DELL_XPS_13] = {
4869		.type = HDA_FIXUP_FUNC,
4870		.v.func = alc_fixup_dell_xps13,
4871		.chained = true,
4872		.chain_id = ALC288_FIXUP_DISABLE_AAMIX
4873	},
4874	[ALC292_FIXUP_DISABLE_AAMIX] = {
4875		.type = HDA_FIXUP_FUNC,
4876		.v.func = alc_fixup_disable_aamix,
4877		.chained = true,
4878		.chain_id = ALC269_FIXUP_DELL2_MIC_NO_PRESENCE
4879	},
4880	[ALC293_FIXUP_DISABLE_AAMIX_MULTIJACK] = {
4881		.type = HDA_FIXUP_FUNC,
4882		.v.func = alc_fixup_disable_aamix,
4883		.chained = true,
4884		.chain_id = ALC293_FIXUP_DELL1_MIC_NO_PRESENCE
4885	},
4886	[ALC292_FIXUP_DELL_E7X_AAMIX] = {
4887		.type = HDA_FIXUP_FUNC,
4888		.v.func = alc_fixup_dell_xps13,
4889		.chained = true,
4890		.chain_id = ALC292_FIXUP_DISABLE_AAMIX
4891	},
4892	[ALC292_FIXUP_DELL_E7X] = {
4893		.type = HDA_FIXUP_FUNC,
4894		.v.func = alc_fixup_micmute_led,
4895		/* micmute fixup must be applied at last */
4896		.chained_before = true,
4897		.chain_id = ALC292_FIXUP_DELL_E7X_AAMIX,
4898	},
4899	[ALC298_FIXUP_ALIENWARE_MIC_NO_PRESENCE] = {
4900		.type = HDA_FIXUP_PINS,
4901		.v.pins = (const struct hda_pintbl[]) {
4902			{ 0x18, 0x01a1913c }, /* headset mic w/o jack detect */
4903			{ }
4904		},
4905		.chained_before = true,
4906		.chain_id = ALC269_FIXUP_HEADSET_MODE,
4907	},
4908	[ALC298_FIXUP_DELL1_MIC_NO_PRESENCE] = {
4909		.type = HDA_FIXUP_PINS,
4910		.v.pins = (const struct hda_pintbl[]) {
4911			{ 0x18, 0x01a1913c }, /* use as headset mic, without its own jack detect */
4912			{ 0x1a, 0x01a1913d }, /* use as headphone mic, without its own jack detect */
4913			{ }
4914		},
4915		.chained = true,
4916		.chain_id = ALC269_FIXUP_HEADSET_MODE
4917	},
4918	[ALC298_FIXUP_DELL_AIO_MIC_NO_PRESENCE] = {
4919		.type = HDA_FIXUP_PINS,
4920		.v.pins = (const struct hda_pintbl[]) {
4921			{ 0x18, 0x01a1913c }, /* use as headset mic, without its own jack detect */
4922			{ }
4923		},
4924		.chained = true,
4925		.chain_id = ALC269_FIXUP_HEADSET_MODE
4926	},
4927	[ALC275_FIXUP_DELL_XPS] = {
4928		.type = HDA_FIXUP_VERBS,
4929		.v.verbs = (const struct hda_verb[]) {
4930			/* Enables internal speaker */
4931			{0x20, AC_VERB_SET_COEF_INDEX, 0x1f},
4932			{0x20, AC_VERB_SET_PROC_COEF, 0x00c0},
4933			{0x20, AC_VERB_SET_COEF_INDEX, 0x30},
4934			{0x20, AC_VERB_SET_PROC_COEF, 0x00b1},
4935			{}
4936		}
4937	},
4938	[ALC293_FIXUP_LENOVO_SPK_NOISE] = {
4939		.type = HDA_FIXUP_FUNC,
4940		.v.func = alc_fixup_disable_aamix,
4941		.chained = true,
4942		.chain_id = ALC269_FIXUP_THINKPAD_ACPI
4943	},
4944	[ALC233_FIXUP_LENOVO_LINE2_MIC_HOTKEY] = {
4945		.type = HDA_FIXUP_FUNC,
4946		.v.func = alc233_fixup_lenovo_line2_mic_hotkey,
4947	},
4948	[ALC233_FIXUP_LENOVO_L2MH_LOW_ENLED] = {
4949		.type = HDA_FIXUP_FUNC,
4950		.v.func = alc233_fixup_lenovo_low_en_micmute_led,
4951	},
4952	[ALC233_FIXUP_INTEL_NUC8_DMIC] = {
4953		.type = HDA_FIXUP_FUNC,
4954		.v.func = alc_fixup_inv_dmic,
4955		.chained = true,
4956		.chain_id = ALC233_FIXUP_INTEL_NUC8_BOOST,
4957	},
4958	[ALC233_FIXUP_INTEL_NUC8_BOOST] = {
4959		.type = HDA_FIXUP_FUNC,
4960		.v.func = alc269_fixup_limit_int_mic_boost
4961	},
4962	[ALC255_FIXUP_DELL_SPK_NOISE] = {
4963		.type = HDA_FIXUP_FUNC,
4964		.v.func = alc_fixup_disable_aamix,
4965		.chained = true,
4966		.chain_id = ALC255_FIXUP_DELL1_MIC_NO_PRESENCE
4967	},
4968	[ALC225_FIXUP_DISABLE_MIC_VREF] = {
4969		.type = HDA_FIXUP_FUNC,
4970		.v.func = alc_fixup_disable_mic_vref,
4971		.chained = true,
4972		.chain_id = ALC269_FIXUP_DELL1_MIC_NO_PRESENCE
4973	},
4974	[ALC225_FIXUP_DELL1_MIC_NO_PRESENCE] = {
4975		.type = HDA_FIXUP_VERBS,
4976		.v.verbs = (const struct hda_verb[]) {
4977			/* Disable pass-through path for FRONT 14h */
4978			{ 0x20, AC_VERB_SET_COEF_INDEX, 0x36 },
4979			{ 0x20, AC_VERB_SET_PROC_COEF, 0x57d7 },
4980			{}
4981		},
4982		.chained = true,
4983		.chain_id = ALC225_FIXUP_DISABLE_MIC_VREF
4984	},
4985	[ALC280_FIXUP_HP_HEADSET_MIC] = {
4986		.type = HDA_FIXUP_FUNC,
4987		.v.func = alc_fixup_disable_aamix,
4988		.chained = true,
4989		.chain_id = ALC269_FIXUP_HEADSET_MIC,
4990	},
4991	[ALC221_FIXUP_HP_FRONT_MIC] = {
4992		.type = HDA_FIXUP_PINS,
4993		.v.pins = (const struct hda_pintbl[]) {
4994			{ 0x19, 0x02a19020 }, /* Front Mic */
4995			{ }
4996		},
4997	},
4998	[ALC292_FIXUP_TPT460] = {
4999		.type = HDA_FIXUP_FUNC,
5000		.v.func = alc_fixup_tpt440_dock,
5001		.chained = true,
5002		.chain_id = ALC293_FIXUP_LENOVO_SPK_NOISE,
5003	},
5004	[ALC298_FIXUP_SPK_VOLUME] = {
5005		.type = HDA_FIXUP_FUNC,
5006		.v.func = alc298_fixup_speaker_volume,
5007		.chained = true,
5008		.chain_id = ALC298_FIXUP_DELL_AIO_MIC_NO_PRESENCE,
5009	},
5010	[ALC298_FIXUP_LENOVO_SPK_VOLUME] = {
5011		.type = HDA_FIXUP_FUNC,
5012		.v.func = alc298_fixup_speaker_volume,
5013	},
5014	[ALC295_FIXUP_DISABLE_DAC3] = {
5015		.type = HDA_FIXUP_FUNC,
5016		.v.func = alc295_fixup_disable_dac3,
5017	},
5018	[ALC285_FIXUP_SPEAKER2_TO_DAC1] = {
5019		.type = HDA_FIXUP_FUNC,
5020		.v.func = alc285_fixup_speaker2_to_dac1,
5021		.chained = true,
5022		.chain_id = ALC269_FIXUP_THINKPAD_ACPI
5023	},
5024	[ALC285_FIXUP_ASUS_SPEAKER2_TO_DAC1] = {
5025		.type = HDA_FIXUP_FUNC,
5026		.v.func = alc285_fixup_speaker2_to_dac1,
5027		.chained = true,
5028		.chain_id = ALC245_FIXUP_CS35L41_SPI_2
5029	},
5030	[ALC285_FIXUP_ASUS_HEADSET_MIC] = {
5031		.type = HDA_FIXUP_PINS,
5032		.v.pins = (const struct hda_pintbl[]) {
5033			{ 0x19, 0x03a11050 },
5034			{ 0x1b, 0x03a11c30 },
5035			{ }
5036		},
5037		.chained = true,
5038		.chain_id = ALC285_FIXUP_ASUS_SPEAKER2_TO_DAC1
5039	},
5040	[ALC285_FIXUP_ASUS_SPI_REAR_SPEAKERS] = {
5041		.type = HDA_FIXUP_PINS,
5042		.v.pins = (const struct hda_pintbl[]) {
5043			{ 0x14, 0x90170120 },
5044			{ }
5045		},
5046		.chained = true,
5047		.chain_id = ALC285_FIXUP_ASUS_HEADSET_MIC
5048	},
5049	[ALC285_FIXUP_ASUS_I2C_SPEAKER2_TO_DAC1] = {
5050		.type = HDA_FIXUP_FUNC,
5051		.v.func = alc285_fixup_speaker2_to_dac1,
5052		.chained = true,
5053		.chain_id = ALC287_FIXUP_CS35L41_I2C_2
5054	},
5055	[ALC285_FIXUP_ASUS_I2C_HEADSET_MIC] = {
5056		.type = HDA_FIXUP_PINS,
5057		.v.pins = (const struct hda_pintbl[]) {
5058			{ 0x19, 0x03a11050 },
5059			{ 0x1b, 0x03a11c30 },
5060			{ }
5061		},
5062		.chained = true,
5063		.chain_id = ALC285_FIXUP_ASUS_I2C_SPEAKER2_TO_DAC1
5064	},
5065	[ALC256_FIXUP_DELL_INSPIRON_7559_SUBWOOFER] = {
5066		.type = HDA_FIXUP_PINS,
5067		.v.pins = (const struct hda_pintbl[]) {
5068			{ 0x1b, 0x90170151 },
5069			{ }
5070		},
5071		.chained = true,
5072		.chain_id = ALC255_FIXUP_DELL1_MIC_NO_PRESENCE
5073	},
5074	[ALC269_FIXUP_ATIV_BOOK_8] = {
5075		.type = HDA_FIXUP_FUNC,
5076		.v.func = alc_fixup_auto_mute_via_amp,
5077		.chained = true,
5078		.chain_id = ALC269_FIXUP_NO_SHUTUP
5079	},
5080	[ALC221_FIXUP_HP_288PRO_MIC_NO_PRESENCE] = {
5081		.type = HDA_FIXUP_PINS,
5082		.v.pins = (const struct hda_pintbl[]) {
5083			{ 0x19, 0x01a1913c }, /* use as headset mic, without its own jack detect */
5084			{ 0x1a, 0x01813030 }, /* use as headphone mic, without its own jack detect */
5085			{ }
5086		},
5087		.chained = true,
5088		.chain_id = ALC269_FIXUP_HEADSET_MODE
5089	},
5090	[ALC221_FIXUP_HP_MIC_NO_PRESENCE] = {
5091		.type = HDA_FIXUP_PINS,
5092		.v.pins = (const struct hda_pintbl[]) {
5093			{ 0x18, 0x01a1913c }, /* use as headset mic, without its own jack detect */
5094			{ 0x1a, 0x01a1913d }, /* use as headphone mic, without its own jack detect */
5095			{ }
5096		},
5097		.chained = true,
5098		.chain_id = ALC269_FIXUP_HEADSET_MODE
5099	},
5100	[ALC256_FIXUP_ASUS_HEADSET_MODE] = {
5101		.type = HDA_FIXUP_FUNC,
5102		.v.func = alc_fixup_headset_mode,
5103	},
5104	[ALC256_FIXUP_ASUS_MIC] = {
5105		.type = HDA_FIXUP_PINS,
5106		.v.pins = (const struct hda_pintbl[]) {
5107			{ 0x13, 0x90a60160 }, /* use as internal mic */
5108			{ 0x19, 0x04a11120 }, /* use as headset mic, without its own jack detect */
5109			{ }
5110		},
5111		.chained = true,
5112		.chain_id = ALC256_FIXUP_ASUS_HEADSET_MODE
5113	},
5114	[ALC256_FIXUP_ASUS_AIO_GPIO2] = {
5115		.type = HDA_FIXUP_FUNC,
5116		/* Set up GPIO2 for the speaker amp */
5117		.v.func = alc_fixup_gpio4,
5118	},
5119	[ALC233_FIXUP_ASUS_MIC_NO_PRESENCE] = {
5120		.type = HDA_FIXUP_PINS,
5121		.v.pins = (const struct hda_pintbl[]) {
5122			{ 0x19, 0x01a1913c }, /* use as headset mic, without its own jack detect */
5123			{ }
5124		},
5125		.chained = true,
5126		.chain_id = ALC269_FIXUP_HEADSET_MIC
5127	},
5128	[ALC233_FIXUP_EAPD_COEF_AND_MIC_NO_PRESENCE] = {
5129		.type = HDA_FIXUP_VERBS,
5130		.v.verbs = (const struct hda_verb[]) {
5131			/* Enables internal speaker */
5132			{0x20, AC_VERB_SET_COEF_INDEX, 0x40},
5133			{0x20, AC_VERB_SET_PROC_COEF, 0x8800},
5134			{}
5135		},
5136		.chained = true,
5137		.chain_id = ALC233_FIXUP_ASUS_MIC_NO_PRESENCE
5138	},
5139	[ALC233_FIXUP_LENOVO_MULTI_CODECS] = {
5140		.type = HDA_FIXUP_FUNC,
5141		.v.func = alc233_alc662_fixup_lenovo_dual_codecs,
5142		.chained = true,
5143		.chain_id = ALC269_FIXUP_GPIO2
5144	},
5145	[ALC233_FIXUP_ACER_HEADSET_MIC] = {
5146		.type = HDA_FIXUP_VERBS,
5147		.v.verbs = (const struct hda_verb[]) {
5148			{ 0x20, AC_VERB_SET_COEF_INDEX, 0x45 },
5149			{ 0x20, AC_VERB_SET_PROC_COEF, 0x5089 },
5150			{ }
5151		},
5152		.chained = true,
5153		.chain_id = ALC233_FIXUP_ASUS_MIC_NO_PRESENCE
5154	},
5155	[ALC294_FIXUP_LENOVO_MIC_LOCATION] = {
5156		.type = HDA_FIXUP_PINS,
5157		.v.pins = (const struct hda_pintbl[]) {
5158			/* Change the mic location from front to right, otherwise there are
5159			   two front mics with the same name, pulseaudio can't handle them.
5160			   This is just a temporary workaround, after applying this fixup,
5161			   there will be one "Front Mic" and one "Mic" in this machine.
5162			 */
5163			{ 0x1a, 0x04a19040 },
5164			{ }
5165		},
5166	},
5167	[ALC225_FIXUP_DELL_WYSE_MIC_NO_PRESENCE] = {
5168		.type = HDA_FIXUP_PINS,
5169		.v.pins = (const struct hda_pintbl[]) {
5170			{ 0x16, 0x0101102f }, /* Rear Headset HP */
5171			{ 0x19, 0x02a1913c }, /* use as Front headset mic, without its own jack detect */
5172			{ 0x1a, 0x01a19030 }, /* Rear Headset MIC */
5173			{ 0x1b, 0x02011020 },
5174			{ }
5175		},
5176		.chained = true,
5177		.chain_id = ALC225_FIXUP_S3_POP_NOISE
5178	},
5179	[ALC225_FIXUP_S3_POP_NOISE] = {
5180		.type = HDA_FIXUP_FUNC,
5181		.v.func = alc225_fixup_s3_pop_noise,
5182		.chained = true,
5183		.chain_id = ALC269_FIXUP_HEADSET_MODE_NO_HP_MIC
5184	},
5185	[ALC700_FIXUP_INTEL_REFERENCE] = {
5186		.type = HDA_FIXUP_VERBS,
5187		.v.verbs = (const struct hda_verb[]) {
5188			/* Enables internal speaker */
5189			{0x20, AC_VERB_SET_COEF_INDEX, 0x45},
5190			{0x20, AC_VERB_SET_PROC_COEF, 0x5289},
5191			{0x20, AC_VERB_SET_COEF_INDEX, 0x4A},
5192			{0x20, AC_VERB_SET_PROC_COEF, 0x001b},
5193			{0x58, AC_VERB_SET_COEF_INDEX, 0x00},
5194			{0x58, AC_VERB_SET_PROC_COEF, 0x3888},
5195			{0x20, AC_VERB_SET_COEF_INDEX, 0x6f},
5196			{0x20, AC_VERB_SET_PROC_COEF, 0x2c0b},
5197			{}
5198		}
5199	},
5200	[ALC274_FIXUP_DELL_BIND_DACS] = {
5201		.type = HDA_FIXUP_FUNC,
5202		.v.func = alc274_fixup_bind_dacs,
5203		.chained = true,
5204		.chain_id = ALC269_FIXUP_DELL1_MIC_NO_PRESENCE
5205	},
5206	[ALC274_FIXUP_DELL_AIO_LINEOUT_VERB] = {
5207		.type = HDA_FIXUP_PINS,
5208		.v.pins = (const struct hda_pintbl[]) {
5209			{ 0x1b, 0x0401102f },
5210			{ }
5211		},
5212		.chained = true,
5213		.chain_id = ALC274_FIXUP_DELL_BIND_DACS
5214	},
5215	[ALC298_FIXUP_TPT470_DOCK_FIX] = {
5216		.type = HDA_FIXUP_FUNC,
5217		.v.func = alc_fixup_tpt470_dock,
5218		.chained = true,
5219		.chain_id = ALC293_FIXUP_LENOVO_SPK_NOISE
5220	},
5221	[ALC298_FIXUP_TPT470_DOCK] = {
5222		.type = HDA_FIXUP_FUNC,
5223		.v.func = alc_fixup_tpt470_dacs,
5224		.chained = true,
5225		.chain_id = ALC298_FIXUP_TPT470_DOCK_FIX
5226	},
5227	[ALC255_FIXUP_DUMMY_LINEOUT_VERB] = {
5228		.type = HDA_FIXUP_PINS,
5229		.v.pins = (const struct hda_pintbl[]) {
5230			{ 0x14, 0x0201101f },
5231			{ }
5232		},
5233		.chained = true,
5234		.chain_id = ALC255_FIXUP_DELL1_MIC_NO_PRESENCE
5235	},
5236	[ALC255_FIXUP_DELL_HEADSET_MIC] = {
5237		.type = HDA_FIXUP_PINS,
5238		.v.pins = (const struct hda_pintbl[]) {
5239			{ 0x19, 0x01a1913c }, /* use as headset mic, without its own jack detect */
5240			{ }
5241		},
5242		.chained = true,
5243		.chain_id = ALC269_FIXUP_HEADSET_MIC
5244	},
5245	[ALC295_FIXUP_HP_X360] = {
5246		.type = HDA_FIXUP_FUNC,
5247		.v.func = alc295_fixup_hp_top_speakers,
5248		.chained = true,
5249		.chain_id = ALC269_FIXUP_HP_MUTE_LED_MIC3
5250	},
5251	[ALC221_FIXUP_HP_HEADSET_MIC] = {
5252		.type = HDA_FIXUP_PINS,
5253		.v.pins = (const struct hda_pintbl[]) {
5254			{ 0x19, 0x0181313f},
5255			{ }
5256		},
5257		.chained = true,
5258		.chain_id = ALC269_FIXUP_HEADSET_MIC
5259	},
5260	[ALC285_FIXUP_LENOVO_HEADPHONE_NOISE] = {
5261		.type = HDA_FIXUP_FUNC,
5262		.v.func = alc285_fixup_invalidate_dacs,
5263		.chained = true,
5264		.chain_id = ALC269_FIXUP_THINKPAD_ACPI
5265	},
5266	[ALC295_FIXUP_HP_AUTO_MUTE] = {
5267		.type = HDA_FIXUP_FUNC,
5268		.v.func = alc_fixup_auto_mute_via_amp,
5269	},
5270	[ALC286_FIXUP_ACER_AIO_MIC_NO_PRESENCE] = {
5271		.type = HDA_FIXUP_PINS,
5272		.v.pins = (const struct hda_pintbl[]) {
5273			{ 0x18, 0x01a1913c }, /* use as headset mic, without its own jack detect */
5274			{ }
5275		},
5276		.chained = true,
5277		.chain_id = ALC269_FIXUP_HEADSET_MIC
5278	},
5279	[ALC294_FIXUP_ASUS_MIC] = {
5280		.type = HDA_FIXUP_PINS,
5281		.v.pins = (const struct hda_pintbl[]) {
5282			{ 0x13, 0x90a60160 }, /* use as internal mic */
5283			{ 0x19, 0x04a11120 }, /* use as headset mic, without its own jack detect */
5284			{ }
5285		},
5286		.chained = true,
5287		.chain_id = ALC269_FIXUP_HEADSET_MIC
5288	},
5289	[ALC294_FIXUP_ASUS_HEADSET_MIC] = {
5290		.type = HDA_FIXUP_PINS,
5291		.v.pins = (const struct hda_pintbl[]) {
5292			{ 0x19, 0x01a1103c }, /* use as headset mic */
5293			{ }
5294		},
5295		.chained = true,
5296		.chain_id = ALC269_FIXUP_HEADSET_MIC
5297	},
5298	[ALC294_FIXUP_ASUS_I2C_HEADSET_MIC] = {
5299		.type = HDA_FIXUP_PINS,
5300		.v.pins = (const struct hda_pintbl[]) {
5301			{ 0x19, 0x03a19020 }, /* use as headset mic */
5302			{ }
5303		},
5304		.chained = true,
5305		.chain_id = ALC287_FIXUP_CS35L41_I2C_2
5306	},
5307	[ALC294_FIXUP_ASUS_SPI_HEADSET_MIC] = {
5308		.type = HDA_FIXUP_PINS,
5309		.v.pins = (const struct hda_pintbl[]) {
5310			{ 0x19, 0x04a11020 }, /* use as headset mic */
5311			{ }
5312		},
5313		.chained = true,
5314		.chain_id = ALC245_FIXUP_CS35L41_SPI_2
5315	},
5316	[ALC294_FIXUP_ASUS_SPK] = {
5317		.type = HDA_FIXUP_VERBS,
5318		.v.verbs = (const struct hda_verb[]) {
5319			/* Set EAPD high */
5320			{ 0x20, AC_VERB_SET_COEF_INDEX, 0x40 },
5321			{ 0x20, AC_VERB_SET_PROC_COEF, 0x8800 },
5322			{ 0x20, AC_VERB_SET_COEF_INDEX, 0x0f },
5323			{ 0x20, AC_VERB_SET_PROC_COEF, 0x7774 },
5324			{ }
5325		},
5326		.chained = true,
5327		.chain_id = ALC294_FIXUP_ASUS_HEADSET_MIC
5328	},
5329	[ALC295_FIXUP_CHROME_BOOK] = {
5330		.type = HDA_FIXUP_FUNC,
5331		.v.func = alc295_fixup_chromebook,
5332		.chained = true,
5333		.chain_id = ALC225_FIXUP_HEADSET_JACK
5334	},
5335	[ALC225_FIXUP_HEADSET_JACK] = {
5336		.type = HDA_FIXUP_FUNC,
5337		.v.func = alc_fixup_headset_jack,
5338	},
5339	[ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE] = {
5340		.type = HDA_FIXUP_PINS,
5341		.v.pins = (const struct hda_pintbl[]) {
5342			{ 0x1a, 0x01a1913c }, /* use as headset mic, without its own jack detect */
5343			{ }
5344		},
5345		.chained = true,
5346		.chain_id = ALC269_FIXUP_HEADSET_MODE_NO_HP_MIC
5347	},
5348	[ALC285_FIXUP_LENOVO_PC_BEEP_IN_NOISE] = {
5349		.type = HDA_FIXUP_VERBS,
5350		.v.verbs = (const struct hda_verb[]) {
5351			/* Disable PCBEEP-IN passthrough */
5352			{ 0x20, AC_VERB_SET_COEF_INDEX, 0x36 },
5353			{ 0x20, AC_VERB_SET_PROC_COEF, 0x57d7 },
5354			{ }
5355		},
5356		.chained = true,
5357		.chain_id = ALC285_FIXUP_LENOVO_HEADPHONE_NOISE
5358	},
5359	[ALC255_FIXUP_ACER_HEADSET_MIC] = {
5360		.type = HDA_FIXUP_PINS,
5361		.v.pins = (const struct hda_pintbl[]) {
5362			{ 0x19, 0x03a11130 },
5363			{ 0x1a, 0x90a60140 }, /* use as internal mic */
5364			{ }
5365		},
5366		.chained = true,
5367		.chain_id = ALC255_FIXUP_HEADSET_MODE_NO_HP_MIC
5368	},
5369	[ALC225_FIXUP_DELL_WYSE_AIO_MIC_NO_PRESENCE] = {
5370		.type = HDA_FIXUP_PINS,
5371		.v.pins = (const struct hda_pintbl[]) {
5372			{ 0x16, 0x01011020 }, /* Rear Line out */
5373			{ 0x19, 0x01a1913c }, /* use as Front headset mic, without its own jack detect */
5374			{ }
5375		},
5376		.chained = true,
5377		.chain_id = ALC225_FIXUP_WYSE_AUTO_MUTE
5378	},
5379	[ALC225_FIXUP_WYSE_AUTO_MUTE] = {
5380		.type = HDA_FIXUP_FUNC,
5381		.v.func = alc_fixup_auto_mute_via_amp,
5382		.chained = true,
5383		.chain_id = ALC225_FIXUP_WYSE_DISABLE_MIC_VREF
5384	},
5385	[ALC225_FIXUP_WYSE_DISABLE_MIC_VREF] = {
5386		.type = HDA_FIXUP_FUNC,
5387		.v.func = alc_fixup_disable_mic_vref,
5388		.chained = true,
5389		.chain_id = ALC269_FIXUP_HEADSET_MODE_NO_HP_MIC
5390	},
5391	[ALC286_FIXUP_ACER_AIO_HEADSET_MIC] = {
5392		.type = HDA_FIXUP_VERBS,
5393		.v.verbs = (const struct hda_verb[]) {
5394			{ 0x20, AC_VERB_SET_COEF_INDEX, 0x4f },
5395			{ 0x20, AC_VERB_SET_PROC_COEF, 0x5029 },
5396			{ }
5397		},
5398		.chained = true,
5399		.chain_id = ALC286_FIXUP_ACER_AIO_MIC_NO_PRESENCE
5400	},
5401	[ALC256_FIXUP_ASUS_HEADSET_MIC] = {
5402		.type = HDA_FIXUP_PINS,
5403		.v.pins = (const struct hda_pintbl[]) {
5404			{ 0x19, 0x03a11020 }, /* headset mic with jack detect */
5405			{ }
5406		},
5407		.chained = true,
5408		.chain_id = ALC256_FIXUP_ASUS_HEADSET_MODE
5409	},
5410	[ALC256_FIXUP_ASUS_MIC_NO_PRESENCE] = {
5411		.type = HDA_FIXUP_PINS,
5412		.v.pins = (const struct hda_pintbl[]) {
5413			{ 0x19, 0x04a11120 }, /* use as headset mic, without its own jack detect */
5414			{ }
5415		},
5416		.chained = true,
5417		.chain_id = ALC256_FIXUP_ASUS_HEADSET_MODE
5418	},
5419	[ALC255_FIXUP_PREDATOR_SUBWOOFER] = {
5420		.type = HDA_FIXUP_PINS,
5421		.v.pins = (const struct hda_pintbl[]) {
5422			{ 0x17, 0x90170151 }, /* use as internal speaker (LFE) */
5423			{ 0x1b, 0x90170152 } /* use as internal speaker (back) */
5424		}
5425	},
5426	[ALC299_FIXUP_PREDATOR_SPK] = {
5427		.type = HDA_FIXUP_PINS,
5428		.v.pins = (const struct hda_pintbl[]) {
5429			{ 0x21, 0x90170150 }, /* use as headset mic, without its own jack detect */
5430			{ }
5431		}
5432	},
5433	[ALC287_FIXUP_PREDATOR_SPK_CS35L41_I2C_2] = {
5434		.type = HDA_FIXUP_FUNC,
5435		.v.func = cs35l41_fixup_i2c_two,
5436		.chained = true,
5437		.chain_id = ALC255_FIXUP_PREDATOR_SUBWOOFER
5438	},
5439	[ALC256_FIXUP_MEDION_HEADSET_NO_PRESENCE] = {
5440		.type = HDA_FIXUP_PINS,
5441		.v.pins = (const struct hda_pintbl[]) {
5442			{ 0x19, 0x04a11040 },
5443			{ 0x21, 0x04211020 },
5444			{ }
5445		},
5446		.chained = true,
5447		.chain_id = ALC256_FIXUP_ASUS_HEADSET_MODE
5448	},
5449	[ALC289_FIXUP_DELL_SPK1] = {
5450		.type = HDA_FIXUP_PINS,
5451		.v.pins = (const struct hda_pintbl[]) {
5452			{ 0x14, 0x90170140 },
5453			{ }
5454		},
5455		.chained = true,
5456		.chain_id = ALC269_FIXUP_DELL4_MIC_NO_PRESENCE
5457	},
5458	[ALC289_FIXUP_DELL_SPK2] = {
5459		.type = HDA_FIXUP_PINS,
5460		.v.pins = (const struct hda_pintbl[]) {
5461			{ 0x17, 0x90170130 }, /* bass spk */
5462			{ }
5463		},
5464		.chained = true,
5465		.chain_id = ALC269_FIXUP_DELL4_MIC_NO_PRESENCE
5466	},
5467	[ALC289_FIXUP_DUAL_SPK] = {
5468		.type = HDA_FIXUP_FUNC,
5469		.v.func = alc285_fixup_speaker2_to_dac1,
5470		.chained = true,
5471		.chain_id = ALC289_FIXUP_DELL_SPK2
5472	},
5473	[ALC289_FIXUP_RTK_AMP_DUAL_SPK] = {
5474		.type = HDA_FIXUP_FUNC,
5475		.v.func = alc285_fixup_speaker2_to_dac1,
5476		.chained = true,
5477		.chain_id = ALC289_FIXUP_DELL_SPK1
5478	},
5479	[ALC294_FIXUP_SPK2_TO_DAC1] = {
5480		.type = HDA_FIXUP_FUNC,
5481		.v.func = alc285_fixup_speaker2_to_dac1,
5482		.chained = true,
5483		.chain_id = ALC294_FIXUP_ASUS_HEADSET_MIC
5484	},
5485	[ALC294_FIXUP_ASUS_DUAL_SPK] = {
5486		.type = HDA_FIXUP_FUNC,
5487		/* The GPIO must be pulled to initialize the AMP */
5488		.v.func = alc_fixup_gpio4,
5489		.chained = true,
5490		.chain_id = ALC294_FIXUP_SPK2_TO_DAC1
5491	},
5492	[ALC294_FIXUP_ASUS_ALLY] = {
5493		.type = HDA_FIXUP_FUNC,
5494		.v.func = cs35l41_fixup_i2c_two,
5495		.chained = true,
5496		.chain_id = ALC294_FIXUP_ASUS_ALLY_PINS
5497	},
5498	[ALC294_FIXUP_ASUS_ALLY_PINS] = {
5499		.type = HDA_FIXUP_PINS,
5500		.v.pins = (const struct hda_pintbl[]) {
5501			{ 0x19, 0x03a11050 },
5502			{ 0x1a, 0x03a11c30 },
5503			{ 0x21, 0x03211420 },
5504			{ }
5505		},
5506		.chained = true,
5507		.chain_id = ALC294_FIXUP_ASUS_ALLY_VERBS
5508	},
5509	[ALC294_FIXUP_ASUS_ALLY_VERBS] = {
5510		.type = HDA_FIXUP_VERBS,
5511		.v.verbs = (const struct hda_verb[]) {
5512			{ 0x20, AC_VERB_SET_COEF_INDEX, 0x45 },
5513			{ 0x20, AC_VERB_SET_PROC_COEF, 0x5089 },
5514			{ 0x20, AC_VERB_SET_COEF_INDEX, 0x46 },
5515			{ 0x20, AC_VERB_SET_PROC_COEF, 0x0004 },
5516			{ 0x20, AC_VERB_SET_COEF_INDEX, 0x47 },
5517			{ 0x20, AC_VERB_SET_PROC_COEF, 0xa47a },
5518			{ 0x20, AC_VERB_SET_COEF_INDEX, 0x49 },
5519			{ 0x20, AC_VERB_SET_PROC_COEF, 0x0049},
5520			{ 0x20, AC_VERB_SET_COEF_INDEX, 0x4a },
5521			{ 0x20, AC_VERB_SET_PROC_COEF, 0x201b },
5522			{ 0x20, AC_VERB_SET_COEF_INDEX, 0x6b },
5523			{ 0x20, AC_VERB_SET_PROC_COEF, 0x4278},
5524			{ }
5525		},
5526		.chained = true,
5527		.chain_id = ALC294_FIXUP_ASUS_ALLY_SPEAKER
5528	},
5529	[ALC294_FIXUP_ASUS_ALLY_SPEAKER] = {
5530		.type = HDA_FIXUP_FUNC,
5531		.v.func = alc285_fixup_speaker2_to_dac1,
5532	},
5533	[ALC285_FIXUP_THINKPAD_X1_GEN7] = {
5534		.type = HDA_FIXUP_FUNC,
5535		.v.func = alc285_fixup_thinkpad_x1_gen7,
5536		.chained = true,
5537		.chain_id = ALC269_FIXUP_THINKPAD_ACPI
5538	},
5539	[ALC285_FIXUP_THINKPAD_HEADSET_JACK] = {
5540		.type = HDA_FIXUP_FUNC,
5541		.v.func = alc_fixup_headset_jack,
5542		.chained = true,
5543		.chain_id = ALC285_FIXUP_THINKPAD_X1_GEN7
5544	},
5545	[ALC294_FIXUP_ASUS_HPE] = {
5546		.type = HDA_FIXUP_VERBS,
5547		.v.verbs = (const struct hda_verb[]) {
5548			/* Set EAPD high */
5549			{ 0x20, AC_VERB_SET_COEF_INDEX, 0x0f },
5550			{ 0x20, AC_VERB_SET_PROC_COEF, 0x7774 },
5551			{ }
5552		},
5553		.chained = true,
5554		.chain_id = ALC294_FIXUP_ASUS_HEADSET_MIC
5555	},
5556	[ALC294_FIXUP_ASUS_GX502_PINS] = {
5557		.type = HDA_FIXUP_PINS,
5558		.v.pins = (const struct hda_pintbl[]) {
5559			{ 0x19, 0x03a11050 }, /* front HP mic */
5560			{ 0x1a, 0x01a11830 }, /* rear external mic */
5561			{ 0x21, 0x03211020 }, /* front HP out */
5562			{ }
5563		},
5564		.chained = true,
5565		.chain_id = ALC294_FIXUP_ASUS_GX502_VERBS
5566	},
5567	[ALC294_FIXUP_ASUS_GX502_VERBS] = {
5568		.type = HDA_FIXUP_VERBS,
5569		.v.verbs = (const struct hda_verb[]) {
5570			/* set 0x15 to HP-OUT ctrl */
5571			{ 0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, 0xc0 },
5572			/* unmute the 0x15 amp */
5573			{ 0x15, AC_VERB_SET_AMP_GAIN_MUTE, 0xb000 },
5574			{ }
5575		},
5576		.chained = true,
5577		.chain_id = ALC294_FIXUP_ASUS_GX502_HP
5578	},
5579	[ALC294_FIXUP_ASUS_GX502_HP] = {
5580		.type = HDA_FIXUP_FUNC,
5581		.v.func = alc294_fixup_gx502_hp,
5582	},
5583	[ALC295_FIXUP_DELL_TAS2781_I2C] = {
5584		.type = HDA_FIXUP_FUNC,
5585		.v.func = tas2781_fixup_tias_i2c,
5586		.chained = true,
5587		.chain_id = ALC289_FIXUP_DUAL_SPK
5588	},
5589	[ALC294_FIXUP_ASUS_GU502_PINS] = {
5590		.type = HDA_FIXUP_PINS,
5591		.v.pins = (const struct hda_pintbl[]) {
5592			{ 0x19, 0x01a11050 }, /* rear HP mic */
5593			{ 0x1a, 0x01a11830 }, /* rear external mic */
5594			{ 0x21, 0x012110f0 }, /* rear HP out */
5595			{ }
5596		},
5597		.chained = true,
5598		.chain_id = ALC294_FIXUP_ASUS_GU502_VERBS
5599	},
5600	[ALC294_FIXUP_ASUS_GU502_VERBS] = {
5601		.type = HDA_FIXUP_VERBS,
5602		.v.verbs = (const struct hda_verb[]) {
5603			/* set 0x15 to HP-OUT ctrl */
5604			{ 0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, 0xc0 },
5605			/* unmute the 0x15 amp */
5606			{ 0x15, AC_VERB_SET_AMP_GAIN_MUTE, 0xb000 },
5607			/* set 0x1b to HP-OUT */
5608			{ 0x1b, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x24 },
5609			{ }
5610		},
5611		.chained = true,
5612		.chain_id = ALC294_FIXUP_ASUS_GU502_HP
5613	},
5614	[ALC294_FIXUP_ASUS_GU502_HP] = {
5615		.type = HDA_FIXUP_FUNC,
5616		.v.func = alc294_fixup_gu502_hp,
5617	},
5618	 [ALC294_FIXUP_ASUS_G513_PINS] = {
5619		.type = HDA_FIXUP_PINS,
5620		.v.pins = (const struct hda_pintbl[]) {
5621				{ 0x19, 0x03a11050 }, /* front HP mic */
5622				{ 0x1a, 0x03a11c30 }, /* rear external mic */
5623				{ 0x21, 0x03211420 }, /* front HP out */
5624				{ }
5625		},
5626	},
5627	[ALC285_FIXUP_ASUS_G533Z_PINS] = {
5628		.type = HDA_FIXUP_PINS,
5629		.v.pins = (const struct hda_pintbl[]) {
5630			{ 0x14, 0x90170152 }, /* Speaker Surround Playback Switch */
5631			{ 0x19, 0x03a19020 }, /* Mic Boost Volume */
5632			{ 0x1a, 0x03a11c30 }, /* Mic Boost Volume */
5633			{ 0x1e, 0x90170151 }, /* Rear jack, IN OUT EAPD Detect */
5634			{ 0x21, 0x03211420 },
5635			{ }
5636		},
5637	},
5638	[ALC294_FIXUP_ASUS_COEF_1B] = {
5639		.type = HDA_FIXUP_VERBS,
5640		.v.verbs = (const struct hda_verb[]) {
5641			/* Set bit 10 to correct noisy output after reboot from
5642			 * Windows 10 (due to pop noise reduction?)
5643			 */
5644			{ 0x20, AC_VERB_SET_COEF_INDEX, 0x1b },
5645			{ 0x20, AC_VERB_SET_PROC_COEF, 0x4e4b },
5646			{ }
5647		},
5648		.chained = true,
5649		.chain_id = ALC289_FIXUP_ASUS_GA401,
5650	},
5651	[ALC285_FIXUP_HP_GPIO_LED] = {
5652		.type = HDA_FIXUP_FUNC,
5653		.v.func = alc285_fixup_hp_gpio_led,
5654	},
5655	[ALC285_FIXUP_HP_MUTE_LED] = {
5656		.type = HDA_FIXUP_FUNC,
5657		.v.func = alc285_fixup_hp_mute_led,
5658	},
5659	[ALC285_FIXUP_HP_SPECTRE_X360_MUTE_LED] = {
5660		.type = HDA_FIXUP_FUNC,
5661		.v.func = alc285_fixup_hp_spectre_x360_mute_led,
5662	},
5663	[ALC245_FIXUP_HP_ENVY_X360_MUTE_LED] = {
5664		.type = HDA_FIXUP_FUNC,
5665		.v.func = alc245_fixup_hp_envy_x360_mute_led,
5666	},
5667	[ALC285_FIXUP_HP_BEEP_MICMUTE_LED] = {
5668		.type = HDA_FIXUP_FUNC,
5669		.v.func = alc285_fixup_hp_beep,
5670		.chained = true,
5671		.chain_id = ALC285_FIXUP_HP_MUTE_LED,
5672	},
5673	[ALC236_FIXUP_HP_MUTE_LED_COEFBIT2] = {
5674	    .type = HDA_FIXUP_FUNC,
5675	    .v.func = alc236_fixup_hp_mute_led_coefbit2,
5676	},
5677	[ALC236_FIXUP_HP_GPIO_LED] = {
5678		.type = HDA_FIXUP_FUNC,
5679		.v.func = alc236_fixup_hp_gpio_led,
5680	},
5681	[ALC236_FIXUP_HP_MUTE_LED] = {
5682		.type = HDA_FIXUP_FUNC,
5683		.v.func = alc236_fixup_hp_mute_led,
5684	},
5685	[ALC236_FIXUP_HP_MUTE_LED_MICMUTE_VREF] = {
5686		.type = HDA_FIXUP_FUNC,
5687		.v.func = alc236_fixup_hp_mute_led_micmute_vref,
5688	},
5689	[ALC236_FIXUP_HP_MUTE_LED_MICMUTE_GPIO] = {
5690		.type = HDA_FIXUP_FUNC,
5691		.v.func = alc236_fixup_hp_mute_led_micmute_gpio,
5692	},
5693	[ALC236_FIXUP_LENOVO_INV_DMIC] = {
5694		.type = HDA_FIXUP_FUNC,
5695		.v.func = alc_fixup_inv_dmic,
5696		.chained = true,
5697		.chain_id = ALC283_FIXUP_INT_MIC,
5698	},
5699	[ALC295_FIXUP_HP_MUTE_LED_COEFBIT11] = {
5700		.type = HDA_FIXUP_FUNC,
5701		.v.func = alc295_fixup_hp_mute_led_coefbit11,
5702	},
5703	[ALC298_FIXUP_SAMSUNG_AMP] = {
5704		.type = HDA_FIXUP_FUNC,
5705		.v.func = alc298_fixup_samsung_amp,
5706		.chained = true,
5707		.chain_id = ALC298_FIXUP_SAMSUNG_HEADPHONE_VERY_QUIET
5708	},
5709	[ALC298_FIXUP_SAMSUNG_AMP_V2_2_AMPS] = {
5710		.type = HDA_FIXUP_FUNC,
5711		.v.func = alc298_fixup_samsung_amp_v2_2_amps
5712	},
5713	[ALC298_FIXUP_SAMSUNG_AMP_V2_4_AMPS] = {
5714		.type = HDA_FIXUP_FUNC,
5715		.v.func = alc298_fixup_samsung_amp_v2_4_amps
5716	},
5717	[ALC298_FIXUP_LG_GRAM_STYLE_14] = {
5718		.type = HDA_FIXUP_FUNC,
5719		.v.func = alc298_fixup_lg_gram_style_14
5720	},
5721	[ALC298_FIXUP_SAMSUNG_HEADPHONE_VERY_QUIET] = {
5722		.type = HDA_FIXUP_VERBS,
5723		.v.verbs = (const struct hda_verb[]) {
5724			{ 0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL, 0xc5 },
5725			{ }
5726		},
5727	},
5728	[ALC256_FIXUP_SAMSUNG_HEADPHONE_VERY_QUIET] = {
5729		.type = HDA_FIXUP_VERBS,
5730		.v.verbs = (const struct hda_verb[]) {
5731			{ 0x20, AC_VERB_SET_COEF_INDEX, 0x08},
5732			{ 0x20, AC_VERB_SET_PROC_COEF, 0x2fcf},
5733			{ }
5734		},
5735	},
5736	[ALC295_FIXUP_ASUS_MIC_NO_PRESENCE] = {
5737		.type = HDA_FIXUP_PINS,
5738		.v.pins = (const struct hda_pintbl[]) {
5739			{ 0x19, 0x01a1913c }, /* use as headset mic, without its own jack detect */
5740			{ }
5741		},
5742		.chained = true,
5743		.chain_id = ALC269_FIXUP_HEADSET_MODE
5744	},
5745	[ALC269VC_FIXUP_ACER_VCOPPERBOX_PINS] = {
5746		.type = HDA_FIXUP_PINS,
5747		.v.pins = (const struct hda_pintbl[]) {
5748			{ 0x14, 0x90100120 }, /* use as internal speaker */
5749			{ 0x18, 0x02a111f0 }, /* use as headset mic, without its own jack detect */
5750			{ 0x1a, 0x01011020 }, /* use as line out */
5751			{ },
5752		},
5753		.chained = true,
5754		.chain_id = ALC269_FIXUP_HEADSET_MIC
5755	},
5756	[ALC269VC_FIXUP_ACER_HEADSET_MIC] = {
5757		.type = HDA_FIXUP_PINS,
5758		.v.pins = (const struct hda_pintbl[]) {
5759			{ 0x18, 0x02a11030 }, /* use as headset mic */
5760			{ }
5761		},
5762		.chained = true,
5763		.chain_id = ALC269_FIXUP_HEADSET_MIC
5764	},
5765	[ALC269VC_FIXUP_ACER_MIC_NO_PRESENCE] = {
5766		.type = HDA_FIXUP_PINS,
5767		.v.pins = (const struct hda_pintbl[]) {
5768			{ 0x18, 0x01a11130 }, /* use as headset mic, without its own jack detect */
5769			{ }
5770		},
5771		.chained = true,
5772		.chain_id = ALC269_FIXUP_HEADSET_MIC
5773	},
5774	[ALC289_FIXUP_ASUS_GA401] = {
5775		.type = HDA_FIXUP_FUNC,
5776		.v.func = alc289_fixup_asus_ga401,
5777		.chained = true,
5778		.chain_id = ALC289_FIXUP_ASUS_GA502,
5779	},
5780	[ALC289_FIXUP_ASUS_GA502] = {
5781		.type = HDA_FIXUP_PINS,
5782		.v.pins = (const struct hda_pintbl[]) {
5783			{ 0x19, 0x03a11020 }, /* headset mic with jack detect */
5784			{ }
5785		},
5786	},
5787	[ALC256_FIXUP_ACER_MIC_NO_PRESENCE] = {
5788		.type = HDA_FIXUP_PINS,
5789		.v.pins = (const struct hda_pintbl[]) {
5790			{ 0x19, 0x02a11120 }, /* use as headset mic, without its own jack detect */
5791			{ }
5792		},
5793		.chained = true,
5794		.chain_id = ALC256_FIXUP_ASUS_HEADSET_MODE
5795	},
5796	[ALC285_FIXUP_HP_GPIO_AMP_INIT] = {
5797		.type = HDA_FIXUP_FUNC,
5798		.v.func = alc285_fixup_hp_gpio_amp_init,
5799		.chained = true,
5800		.chain_id = ALC285_FIXUP_HP_GPIO_LED
5801	},
5802	[ALC269_FIXUP_CZC_B20] = {
5803		.type = HDA_FIXUP_PINS,
5804		.v.pins = (const struct hda_pintbl[]) {
5805			{ 0x12, 0x411111f0 },
5806			{ 0x14, 0x90170110 }, /* speaker */
5807			{ 0x15, 0x032f1020 }, /* HP out */
5808			{ 0x17, 0x411111f0 },
5809			{ 0x18, 0x03ab1040 }, /* mic */
5810			{ 0x19, 0xb7a7013f },
5811			{ 0x1a, 0x0181305f },
5812			{ 0x1b, 0x411111f0 },
5813			{ 0x1d, 0x411111f0 },
5814			{ 0x1e, 0x411111f0 },
5815			{ }
5816		},
5817		.chain_id = ALC269_FIXUP_DMIC,
5818	},
5819	[ALC269_FIXUP_CZC_TMI] = {
5820		.type = HDA_FIXUP_PINS,
5821		.v.pins = (const struct hda_pintbl[]) {
5822			{ 0x12, 0x4000c000 },
5823			{ 0x14, 0x90170110 }, /* speaker */
5824			{ 0x15, 0x0421401f }, /* HP out */
5825			{ 0x17, 0x411111f0 },
5826			{ 0x18, 0x04a19020 }, /* mic */
5827			{ 0x19, 0x411111f0 },
5828			{ 0x1a, 0x411111f0 },
5829			{ 0x1b, 0x411111f0 },
5830			{ 0x1d, 0x40448505 },
5831			{ 0x1e, 0x411111f0 },
5832			{ 0x20, 0x8000ffff },
5833			{ }
5834		},
5835		.chain_id = ALC269_FIXUP_DMIC,
5836	},
5837	[ALC269_FIXUP_CZC_L101] = {
5838		.type = HDA_FIXUP_PINS,
5839		.v.pins = (const struct hda_pintbl[]) {
5840			{ 0x12, 0x40000000 },
5841			{ 0x14, 0x01014010 }, /* speaker */
5842			{ 0x15, 0x411111f0 }, /* HP out */
5843			{ 0x16, 0x411111f0 },
5844			{ 0x18, 0x01a19020 }, /* mic */
5845			{ 0x19, 0x02a19021 },
5846			{ 0x1a, 0x0181302f },
5847			{ 0x1b, 0x0221401f },
5848			{ 0x1c, 0x411111f0 },
5849			{ 0x1d, 0x4044c601 },
5850			{ 0x1e, 0x411111f0 },
5851			{ }
5852		},
5853		.chain_id = ALC269_FIXUP_DMIC,
5854	},
5855	[ALC269_FIXUP_LEMOTE_A1802] = {
5856		.type = HDA_FIXUP_PINS,
5857		.v.pins = (const struct hda_pintbl[]) {
5858			{ 0x12, 0x40000000 },
5859			{ 0x14, 0x90170110 }, /* speaker */
5860			{ 0x17, 0x411111f0 },
5861			{ 0x18, 0x03a19040 }, /* mic1 */
5862			{ 0x19, 0x90a70130 }, /* mic2 */
5863			{ 0x1a, 0x411111f0 },
5864			{ 0x1b, 0x411111f0 },
5865			{ 0x1d, 0x40489d2d },
5866			{ 0x1e, 0x411111f0 },
5867			{ 0x20, 0x0003ffff },
5868			{ 0x21, 0x03214020 },
5869			{ }
5870		},
5871		.chain_id = ALC269_FIXUP_DMIC,
5872	},
5873	[ALC269_FIXUP_LEMOTE_A190X] = {
5874		.type = HDA_FIXUP_PINS,
5875		.v.pins = (const struct hda_pintbl[]) {
5876			{ 0x14, 0x99130110 }, /* speaker */
5877			{ 0x15, 0x0121401f }, /* HP out */
5878			{ 0x18, 0x01a19c20 }, /* rear  mic */
5879			{ 0x19, 0x99a3092f }, /* front mic */
5880			{ 0x1b, 0x0201401f }, /* front lineout */
5881			{ }
5882		},
5883		.chain_id = ALC269_FIXUP_DMIC,
5884	},
5885	[ALC256_FIXUP_INTEL_NUC8_RUGGED] = {
5886		.type = HDA_FIXUP_PINS,
5887		.v.pins = (const struct hda_pintbl[]) {
5888			{ 0x1b, 0x01a1913c }, /* use as headset mic, without its own jack detect */
5889			{ }
5890		},
5891		.chained = true,
5892		.chain_id = ALC269_FIXUP_HEADSET_MODE
5893	},
5894	[ALC256_FIXUP_INTEL_NUC10] = {
5895		.type = HDA_FIXUP_PINS,
5896		.v.pins = (const struct hda_pintbl[]) {
5897			{ 0x19, 0x01a1913c }, /* use as headset mic, without its own jack detect */
5898			{ }
5899		},
5900		.chained = true,
5901		.chain_id = ALC269_FIXUP_HEADSET_MODE
5902	},
5903	[ALC255_FIXUP_XIAOMI_HEADSET_MIC] = {
5904		.type = HDA_FIXUP_VERBS,
5905		.v.verbs = (const struct hda_verb[]) {
5906			{ 0x20, AC_VERB_SET_COEF_INDEX, 0x45 },
5907			{ 0x20, AC_VERB_SET_PROC_COEF, 0x5089 },
5908			{ }
5909		},
5910		.chained = true,
5911		.chain_id = ALC289_FIXUP_ASUS_GA502
5912	},
5913	[ALC274_FIXUP_HP_MIC] = {
5914		.type = HDA_FIXUP_VERBS,
5915		.v.verbs = (const struct hda_verb[]) {
5916			{ 0x20, AC_VERB_SET_COEF_INDEX, 0x45 },
5917			{ 0x20, AC_VERB_SET_PROC_COEF, 0x5089 },
5918			{ }
5919		},
5920	},
5921	[ALC274_FIXUP_HP_HEADSET_MIC] = {
5922		.type = HDA_FIXUP_FUNC,
5923		.v.func = alc274_fixup_hp_headset_mic,
5924		.chained = true,
5925		.chain_id = ALC274_FIXUP_HP_MIC
5926	},
5927	[ALC274_FIXUP_HP_ENVY_GPIO] = {
5928		.type = HDA_FIXUP_FUNC,
5929		.v.func = alc274_fixup_hp_envy_gpio,
5930	},
5931	[ALC274_FIXUP_ASUS_ZEN_AIO_27] = {
5932		.type = HDA_FIXUP_VERBS,
5933		.v.verbs = (const struct hda_verb[]) {
5934			{ 0x20, AC_VERB_SET_COEF_INDEX, 0x10 },
5935			{ 0x20, AC_VERB_SET_PROC_COEF, 0xc420 },
5936			{ 0x20, AC_VERB_SET_COEF_INDEX, 0x40 },
5937			{ 0x20, AC_VERB_SET_PROC_COEF, 0x8800 },
5938			{ 0x20, AC_VERB_SET_COEF_INDEX, 0x49 },
5939			{ 0x20, AC_VERB_SET_PROC_COEF, 0x0249 },
5940			{ 0x20, AC_VERB_SET_COEF_INDEX, 0x4a },
5941			{ 0x20, AC_VERB_SET_PROC_COEF, 0x202b },
5942			{ 0x20, AC_VERB_SET_COEF_INDEX, 0x62 },
5943			{ 0x20, AC_VERB_SET_PROC_COEF, 0xa007 },
5944			{ 0x20, AC_VERB_SET_COEF_INDEX, 0x6b },
5945			{ 0x20, AC_VERB_SET_PROC_COEF, 0x5060 },
5946			{}
5947		},
5948		.chained = true,
5949		.chain_id = ALC2XX_FIXUP_HEADSET_MIC,
5950	},
5951	[ALC256_FIXUP_ASUS_HPE] = {
5952		.type = HDA_FIXUP_VERBS,
5953		.v.verbs = (const struct hda_verb[]) {
5954			/* Set EAPD high */
5955			{ 0x20, AC_VERB_SET_COEF_INDEX, 0x0f },
5956			{ 0x20, AC_VERB_SET_PROC_COEF, 0x7778 },
5957			{ }
5958		},
5959		.chained = true,
5960		.chain_id = ALC294_FIXUP_ASUS_HEADSET_MIC
5961	},
5962	[ALC285_FIXUP_THINKPAD_NO_BASS_SPK_HEADSET_JACK] = {
5963		.type = HDA_FIXUP_FUNC,
5964		.v.func = alc_fixup_headset_jack,
5965		.chained = true,
5966		.chain_id = ALC269_FIXUP_THINKPAD_ACPI
5967	},
5968	[ALC287_FIXUP_HP_GPIO_LED] = {
5969		.type = HDA_FIXUP_FUNC,
5970		.v.func = alc287_fixup_hp_gpio_led,
5971	},
5972	[ALC256_FIXUP_HP_HEADSET_MIC] = {
5973		.type = HDA_FIXUP_FUNC,
5974		.v.func = alc274_fixup_hp_headset_mic,
5975	},
5976	[ALC236_FIXUP_DELL_AIO_HEADSET_MIC] = {
5977		.type = HDA_FIXUP_FUNC,
5978		.v.func = alc_fixup_no_int_mic,
5979		.chained = true,
5980		.chain_id = ALC255_FIXUP_DELL1_MIC_NO_PRESENCE
5981	},
5982	[ALC282_FIXUP_ACER_DISABLE_LINEOUT] = {
5983		.type = HDA_FIXUP_PINS,
5984		.v.pins = (const struct hda_pintbl[]) {
5985			{ 0x1b, 0x411111f0 },
5986			{ 0x18, 0x01a1913c }, /* use as headset mic, without its own jack detect */
5987			{ },
5988		},
5989		.chained = true,
5990		.chain_id = ALC269_FIXUP_HEADSET_MODE
5991	},
5992	[ALC255_FIXUP_ACER_LIMIT_INT_MIC_BOOST] = {
5993		.type = HDA_FIXUP_FUNC,
5994		.v.func = alc269_fixup_limit_int_mic_boost,
5995		.chained = true,
5996		.chain_id = ALC255_FIXUP_ACER_MIC_NO_PRESENCE,
5997	},
5998	[ALC256_FIXUP_ACER_HEADSET_MIC] = {
5999		.type = HDA_FIXUP_PINS,
6000		.v.pins = (const struct hda_pintbl[]) {
6001			{ 0x19, 0x02a1113c }, /* use as headset mic, without its own jack detect */
6002			{ 0x1a, 0x90a1092f }, /* use as internal mic */
6003			{ }
6004		},
6005		.chained = true,
6006		.chain_id = ALC269_FIXUP_HEADSET_MODE_NO_HP_MIC
6007	},
6008	[ALC285_FIXUP_IDEAPAD_S740_COEF] = {
6009		.type = HDA_FIXUP_FUNC,
6010		.v.func = alc285_fixup_ideapad_s740_coef,
6011		.chained = true,
6012		.chain_id = ALC269_FIXUP_THINKPAD_ACPI,
6013	},
6014	[ALC285_FIXUP_HP_LIMIT_INT_MIC_BOOST] = {
6015		.type = HDA_FIXUP_FUNC,
6016		.v.func = alc269_fixup_limit_int_mic_boost,
6017		.chained = true,
6018		.chain_id = ALC285_FIXUP_HP_MUTE_LED,
6019	},
6020	[ALC295_FIXUP_ASUS_DACS] = {
6021		.type = HDA_FIXUP_FUNC,
6022		.v.func = alc295_fixup_asus_dacs,
6023	},
6024	[ALC295_FIXUP_HP_OMEN] = {
6025		.type = HDA_FIXUP_PINS,
6026		.v.pins = (const struct hda_pintbl[]) {
6027			{ 0x12, 0xb7a60130 },
6028			{ 0x13, 0x40000000 },
6029			{ 0x14, 0x411111f0 },
6030			{ 0x16, 0x411111f0 },
6031			{ 0x17, 0x90170110 },
6032			{ 0x18, 0x411111f0 },
6033			{ 0x19, 0x02a11030 },
6034			{ 0x1a, 0x411111f0 },
6035			{ 0x1b, 0x04a19030 },
6036			{ 0x1d, 0x40600001 },
6037			{ 0x1e, 0x411111f0 },
6038			{ 0x21, 0x03211020 },
6039			{}
6040		},
6041		.chained = true,
6042		.chain_id = ALC269_FIXUP_HP_LINE1_MIC1_LED,
6043	},
6044	[ALC285_FIXUP_HP_SPECTRE_X360] = {
6045		.type = HDA_FIXUP_FUNC,
6046		.v.func = alc285_fixup_hp_spectre_x360,
6047	},
6048	[ALC285_FIXUP_HP_SPECTRE_X360_EB1] = {
6049		.type = HDA_FIXUP_FUNC,
6050		.v.func = alc285_fixup_hp_spectre_x360_eb1
6051	},
6052	[ALC285_FIXUP_HP_SPECTRE_X360_DF1] = {
6053		.type = HDA_FIXUP_FUNC,
6054		.v.func = alc285_fixup_hp_spectre_x360_df1
6055	},
6056	[ALC285_FIXUP_HP_ENVY_X360] = {
6057		.type = HDA_FIXUP_FUNC,
6058		.v.func = alc285_fixup_hp_envy_x360,
6059		.chained = true,
6060		.chain_id = ALC285_FIXUP_HP_GPIO_AMP_INIT,
6061	},
6062	[ALC287_FIXUP_IDEAPAD_BASS_SPK_AMP] = {
6063		.type = HDA_FIXUP_FUNC,
6064		.v.func = alc285_fixup_ideapad_s740_coef,
6065		.chained = true,
6066		.chain_id = ALC285_FIXUP_THINKPAD_HEADSET_JACK,
6067	},
6068	[ALC623_FIXUP_LENOVO_THINKSTATION_P340] = {
6069		.type = HDA_FIXUP_FUNC,
6070		.v.func = alc_fixup_no_shutup,
6071		.chained = true,
6072		.chain_id = ALC283_FIXUP_HEADSET_MIC,
6073	},
6074	[ALC255_FIXUP_ACER_HEADPHONE_AND_MIC] = {
6075		.type = HDA_FIXUP_PINS,
6076		.v.pins = (const struct hda_pintbl[]) {
6077			{ 0x21, 0x03211030 }, /* Change the Headphone location to Left */
6078			{ }
6079		},
6080		.chained = true,
6081		.chain_id = ALC255_FIXUP_XIAOMI_HEADSET_MIC
6082	},
6083	[ALC236_FIXUP_HP_LIMIT_INT_MIC_BOOST] = {
6084		.type = HDA_FIXUP_FUNC,
6085		.v.func = alc269_fixup_limit_int_mic_boost,
6086		.chained = true,
6087		.chain_id = ALC236_FIXUP_HP_MUTE_LED_MICMUTE_VREF,
6088	},
6089	[ALC285_FIXUP_LEGION_Y9000X_SPEAKERS] = {
6090		.type = HDA_FIXUP_FUNC,
6091		.v.func = alc285_fixup_ideapad_s740_coef,
6092		.chained = true,
6093		.chain_id = ALC285_FIXUP_LEGION_Y9000X_AUTOMUTE,
6094	},
6095	[ALC285_FIXUP_LEGION_Y9000X_AUTOMUTE] = {
6096		.type = HDA_FIXUP_FUNC,
6097		.v.func = alc287_fixup_legion_15imhg05_speakers,
6098		.chained = true,
6099		.chain_id = ALC269_FIXUP_THINKPAD_ACPI,
6100	},
6101	[ALC287_FIXUP_LEGION_15IMHG05_SPEAKERS] = {
6102		.type = HDA_FIXUP_VERBS,
6103		//.v.verbs = legion_15imhg05_coefs,
6104		.v.verbs = (const struct hda_verb[]) {
6105			 // set left speaker Legion 7i.
6106			 { 0x20, AC_VERB_SET_COEF_INDEX, 0x24 },
6107			 { 0x20, AC_VERB_SET_PROC_COEF, 0x41 },
6108
6109			 { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
6110			 { 0x20, AC_VERB_SET_PROC_COEF, 0xc },
6111			 { 0x20, AC_VERB_SET_PROC_COEF, 0x0 },
6112			 { 0x20, AC_VERB_SET_PROC_COEF, 0x1a },
6113			 { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
6114
6115			 { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
6116			 { 0x20, AC_VERB_SET_PROC_COEF, 0x2 },
6117			 { 0x20, AC_VERB_SET_PROC_COEF, 0x0 },
6118			 { 0x20, AC_VERB_SET_PROC_COEF, 0x0 },
6119			 { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
6120
6121			 // set right speaker Legion 7i.
6122			 { 0x20, AC_VERB_SET_COEF_INDEX, 0x24 },
6123			 { 0x20, AC_VERB_SET_PROC_COEF, 0x42 },
6124
6125			 { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
6126			 { 0x20, AC_VERB_SET_PROC_COEF, 0xc },
6127			 { 0x20, AC_VERB_SET_PROC_COEF, 0x0 },
6128			 { 0x20, AC_VERB_SET_PROC_COEF, 0x2a },
6129			 { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
6130
6131			 { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
6132			 { 0x20, AC_VERB_SET_PROC_COEF, 0x2 },
6133			 { 0x20, AC_VERB_SET_PROC_COEF, 0x0 },
6134			 { 0x20, AC_VERB_SET_PROC_COEF, 0x0 },
6135			 { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
6136			 {}
6137		},
6138		.chained = true,
6139		.chain_id = ALC287_FIXUP_LEGION_15IMHG05_AUTOMUTE,
6140	},
6141	[ALC287_FIXUP_LEGION_15IMHG05_AUTOMUTE] = {
6142		.type = HDA_FIXUP_FUNC,
6143		.v.func = alc287_fixup_legion_15imhg05_speakers,
6144		.chained = true,
6145		.chain_id = ALC269_FIXUP_HEADSET_MODE,
6146	},
6147	[ALC287_FIXUP_YOGA7_14ITL_SPEAKERS] = {
6148		.type = HDA_FIXUP_VERBS,
6149		.v.verbs = (const struct hda_verb[]) {
6150			 // set left speaker Yoga 7i.
6151			 { 0x20, AC_VERB_SET_COEF_INDEX, 0x24 },
6152			 { 0x20, AC_VERB_SET_PROC_COEF, 0x41 },
6153
6154			 { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
6155			 { 0x20, AC_VERB_SET_PROC_COEF, 0xc },
6156			 { 0x20, AC_VERB_SET_PROC_COEF, 0x0 },
6157			 { 0x20, AC_VERB_SET_PROC_COEF, 0x1a },
6158			 { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
6159
6160			 { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
6161			 { 0x20, AC_VERB_SET_PROC_COEF, 0x2 },
6162			 { 0x20, AC_VERB_SET_PROC_COEF, 0x0 },
6163			 { 0x20, AC_VERB_SET_PROC_COEF, 0x0 },
6164			 { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
6165
6166			 // set right speaker Yoga 7i.
6167			 { 0x20, AC_VERB_SET_COEF_INDEX, 0x24 },
6168			 { 0x20, AC_VERB_SET_PROC_COEF, 0x46 },
6169
6170			 { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
6171			 { 0x20, AC_VERB_SET_PROC_COEF, 0xc },
6172			 { 0x20, AC_VERB_SET_PROC_COEF, 0x0 },
6173			 { 0x20, AC_VERB_SET_PROC_COEF, 0x2a },
6174			 { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
6175
6176			 { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
6177			 { 0x20, AC_VERB_SET_PROC_COEF, 0x2 },
6178			 { 0x20, AC_VERB_SET_PROC_COEF, 0x0 },
6179			 { 0x20, AC_VERB_SET_PROC_COEF, 0x0 },
6180			 { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
6181			 {}
6182		},
6183		.chained = true,
6184		.chain_id = ALC269_FIXUP_HEADSET_MODE,
6185	},
6186	[ALC298_FIXUP_LENOVO_C940_DUET7] = {
6187		.type = HDA_FIXUP_FUNC,
6188		.v.func = alc298_fixup_lenovo_c940_duet7,
6189	},
6190	[ALC287_FIXUP_LENOVO_YOGA_BOOK_9I] = {
6191		.type = HDA_FIXUP_FUNC,
6192		.v.func = alc287_fixup_lenovo_yoga_book_9i,
6193	},
6194	[ALC287_FIXUP_13S_GEN2_SPEAKERS] = {
6195		.type = HDA_FIXUP_VERBS,
6196		.v.verbs = (const struct hda_verb[]) {
6197			{ 0x20, AC_VERB_SET_COEF_INDEX, 0x24 },
6198			{ 0x20, AC_VERB_SET_PROC_COEF, 0x41 },
6199			{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
6200			{ 0x20, AC_VERB_SET_PROC_COEF, 0x2 },
6201			{ 0x20, AC_VERB_SET_PROC_COEF, 0x0 },
6202			{ 0x20, AC_VERB_SET_PROC_COEF, 0x0 },
6203			{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
6204			{ 0x20, AC_VERB_SET_COEF_INDEX, 0x24 },
6205			{ 0x20, AC_VERB_SET_PROC_COEF, 0x42 },
6206			{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
6207			{ 0x20, AC_VERB_SET_PROC_COEF, 0x2 },
6208			{ 0x20, AC_VERB_SET_PROC_COEF, 0x0 },
6209			{ 0x20, AC_VERB_SET_PROC_COEF, 0x0 },
6210			{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
6211			{}
6212		},
6213		.chained = true,
6214		.chain_id = ALC269_FIXUP_HEADSET_MODE,
6215	},
6216	[ALC256_FIXUP_SET_COEF_DEFAULTS] = {
6217		.type = HDA_FIXUP_FUNC,
6218		.v.func = alc256_fixup_set_coef_defaults,
6219	},
6220	[ALC245_FIXUP_HP_GPIO_LED] = {
6221		.type = HDA_FIXUP_FUNC,
6222		.v.func = alc245_fixup_hp_gpio_led,
6223	},
6224	[ALC256_FIXUP_SYSTEM76_MIC_NO_PRESENCE] = {
6225		.type = HDA_FIXUP_PINS,
6226		.v.pins = (const struct hda_pintbl[]) {
6227			{ 0x19, 0x03a11120 }, /* use as headset mic, without its own jack detect */
6228			{ }
6229		},
6230		.chained = true,
6231		.chain_id = ALC269_FIXUP_HEADSET_MODE_NO_HP_MIC,
6232	},
6233	[ALC233_FIXUP_NO_AUDIO_JACK] = {
6234		.type = HDA_FIXUP_FUNC,
6235		.v.func = alc233_fixup_no_audio_jack,
6236	},
6237	[ALC256_FIXUP_MIC_NO_PRESENCE_AND_RESUME] = {
6238		.type = HDA_FIXUP_FUNC,
6239		.v.func = alc256_fixup_mic_no_presence_and_resume,
6240		.chained = true,
6241		.chain_id = ALC269_FIXUP_HEADSET_MODE_NO_HP_MIC
6242	},
6243	[ALC287_FIXUP_LEGION_16ACHG6] = {
6244		.type = HDA_FIXUP_FUNC,
6245		.v.func = alc287_fixup_legion_16achg6_speakers,
6246	},
6247	[ALC287_FIXUP_CS35L41_I2C_2] = {
6248		.type = HDA_FIXUP_FUNC,
6249		.v.func = cs35l41_fixup_i2c_two,
6250	},
6251	[ALC287_FIXUP_CS35L41_I2C_2_HP_GPIO_LED] = {
6252		.type = HDA_FIXUP_FUNC,
6253		.v.func = cs35l41_fixup_i2c_two,
6254		.chained = true,
6255		.chain_id = ALC285_FIXUP_HP_MUTE_LED,
6256	},
6257	[ALC287_FIXUP_CS35L41_I2C_4] = {
6258		.type = HDA_FIXUP_FUNC,
6259		.v.func = cs35l41_fixup_i2c_four,
6260	},
6261	[ALC245_FIXUP_CS35L41_SPI_2] = {
6262		.type = HDA_FIXUP_FUNC,
6263		.v.func = cs35l41_fixup_spi_two,
6264	},
6265	[ALC245_FIXUP_CS35L41_SPI_1] = {
6266		.type = HDA_FIXUP_FUNC,
6267		.v.func = cs35l41_fixup_spi_one,
6268	},
6269	[ALC245_FIXUP_CS35L41_SPI_2_HP_GPIO_LED] = {
6270		.type = HDA_FIXUP_FUNC,
6271		.v.func = cs35l41_fixup_spi_two,
6272		.chained = true,
6273		.chain_id = ALC285_FIXUP_HP_GPIO_LED,
6274	},
6275	[ALC245_FIXUP_CS35L41_SPI_4] = {
6276		.type = HDA_FIXUP_FUNC,
6277		.v.func = cs35l41_fixup_spi_four,
6278	},
6279	[ALC245_FIXUP_CS35L41_SPI_4_HP_GPIO_LED] = {
6280		.type = HDA_FIXUP_FUNC,
6281		.v.func = cs35l41_fixup_spi_four,
6282		.chained = true,
6283		.chain_id = ALC285_FIXUP_HP_GPIO_LED,
6284	},
6285	[ALC285_FIXUP_HP_SPEAKERS_MICMUTE_LED] = {
6286		.type = HDA_FIXUP_VERBS,
6287		.v.verbs = (const struct hda_verb[]) {
6288			 { 0x20, AC_VERB_SET_COEF_INDEX, 0x19 },
6289			 { 0x20, AC_VERB_SET_PROC_COEF, 0x8e11 },
6290			 { }
6291		},
6292		.chained = true,
6293		.chain_id = ALC285_FIXUP_HP_MUTE_LED,
6294	},
6295	[ALC269_FIXUP_DELL4_MIC_NO_PRESENCE_QUIET] = {
6296		.type = HDA_FIXUP_FUNC,
6297		.v.func = alc_fixup_dell4_mic_no_presence_quiet,
6298		.chained = true,
6299		.chain_id = ALC269_FIXUP_DELL4_MIC_NO_PRESENCE,
6300	},
6301	[ALC295_FIXUP_FRAMEWORK_LAPTOP_MIC_NO_PRESENCE] = {
6302		.type = HDA_FIXUP_PINS,
6303		.v.pins = (const struct hda_pintbl[]) {
6304			{ 0x19, 0x02a1112c }, /* use as headset mic, without its own jack detect */
6305			{ }
6306		},
6307		.chained = true,
6308		.chain_id = ALC269_FIXUP_HEADSET_MODE_NO_HP_MIC
6309	},
6310	[ALC287_FIXUP_LEGION_16ITHG6] = {
6311		.type = HDA_FIXUP_FUNC,
6312		.v.func = alc287_fixup_legion_16ithg6_speakers,
6313	},
6314	[ALC287_FIXUP_YOGA9_14IAP7_BASS_SPK] = {
6315		.type = HDA_FIXUP_VERBS,
6316		.v.verbs = (const struct hda_verb[]) {
6317			// enable left speaker
6318			{ 0x20, AC_VERB_SET_COEF_INDEX, 0x24 },
6319			{ 0x20, AC_VERB_SET_PROC_COEF, 0x41 },
6320
6321			{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
6322			{ 0x20, AC_VERB_SET_PROC_COEF, 0xc },
6323			{ 0x20, AC_VERB_SET_PROC_COEF, 0x0 },
6324			{ 0x20, AC_VERB_SET_PROC_COEF, 0x1a },
6325			{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
6326
6327			{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
6328			{ 0x20, AC_VERB_SET_PROC_COEF, 0xf },
6329			{ 0x20, AC_VERB_SET_PROC_COEF, 0x0 },
6330			{ 0x20, AC_VERB_SET_PROC_COEF, 0x42 },
6331			{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
6332
6333			{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
6334			{ 0x20, AC_VERB_SET_PROC_COEF, 0x10 },
6335			{ 0x20, AC_VERB_SET_PROC_COEF, 0x0 },
6336			{ 0x20, AC_VERB_SET_PROC_COEF, 0x40 },
6337			{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
6338
6339			{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
6340			{ 0x20, AC_VERB_SET_PROC_COEF, 0x2 },
6341			{ 0x20, AC_VERB_SET_PROC_COEF, 0x0 },
6342			{ 0x20, AC_VERB_SET_PROC_COEF, 0x0 },
6343			{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
6344
6345			// enable right speaker
6346			{ 0x20, AC_VERB_SET_COEF_INDEX, 0x24 },
6347			{ 0x20, AC_VERB_SET_PROC_COEF, 0x46 },
6348
6349			{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
6350			{ 0x20, AC_VERB_SET_PROC_COEF, 0xc },
6351			{ 0x20, AC_VERB_SET_PROC_COEF, 0x0 },
6352			{ 0x20, AC_VERB_SET_PROC_COEF, 0x2a },
6353			{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
6354
6355			{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
6356			{ 0x20, AC_VERB_SET_PROC_COEF, 0xf },
6357			{ 0x20, AC_VERB_SET_PROC_COEF, 0x0 },
6358			{ 0x20, AC_VERB_SET_PROC_COEF, 0x46 },
6359			{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
6360
6361			{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
6362			{ 0x20, AC_VERB_SET_PROC_COEF, 0x10 },
6363			{ 0x20, AC_VERB_SET_PROC_COEF, 0x0 },
6364			{ 0x20, AC_VERB_SET_PROC_COEF, 0x44 },
6365			{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
6366
6367			{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
6368			{ 0x20, AC_VERB_SET_PROC_COEF, 0x2 },
6369			{ 0x20, AC_VERB_SET_PROC_COEF, 0x0 },
6370			{ 0x20, AC_VERB_SET_PROC_COEF, 0x0 },
6371			{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
6372
6373			{ },
6374		},
6375	},
6376	[ALC287_FIXUP_YOGA9_14IAP7_BASS_SPK_PIN] = {
6377		.type = HDA_FIXUP_FUNC,
6378		.v.func = alc287_fixup_yoga9_14iap7_bass_spk_pin,
6379		.chained = true,
6380		.chain_id = ALC287_FIXUP_YOGA9_14IAP7_BASS_SPK,
6381	},
6382	[ALC287_FIXUP_YOGA9_14IMH9_BASS_SPK_PIN] = {
6383		.type = HDA_FIXUP_FUNC,
6384		.v.func = alc287_fixup_yoga9_14iap7_bass_spk_pin,
6385		.chained = true,
6386		.chain_id = ALC287_FIXUP_CS35L41_I2C_2,
6387	},
6388	[ALC295_FIXUP_DELL_INSPIRON_TOP_SPEAKERS] = {
6389		.type = HDA_FIXUP_FUNC,
6390		.v.func = alc295_fixup_dell_inspiron_top_speakers,
6391		.chained = true,
6392		.chain_id = ALC269_FIXUP_DELL4_MIC_NO_PRESENCE,
6393	},
6394	[ALC236_FIXUP_DELL_DUAL_CODECS] = {
6395		.type = HDA_FIXUP_PINS,
6396		.v.func = alc1220_fixup_gb_dual_codecs,
6397		.chained = true,
6398		.chain_id = ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
6399	},
6400	[ALC287_FIXUP_CS35L41_I2C_2_THINKPAD_ACPI] = {
6401		.type = HDA_FIXUP_FUNC,
6402		.v.func = cs35l41_fixup_i2c_two,
6403		.chained = true,
6404		.chain_id = ALC285_FIXUP_THINKPAD_NO_BASS_SPK_HEADSET_JACK,
6405	},
6406	[ALC287_FIXUP_TAS2781_I2C] = {
6407		.type = HDA_FIXUP_FUNC,
6408		.v.func = tas2781_fixup_tias_i2c,
6409		.chained = true,
6410		.chain_id = ALC285_FIXUP_THINKPAD_HEADSET_JACK,
6411	},
6412	[ALC245_FIXUP_TAS2781_SPI_2] = {
6413		.type = HDA_FIXUP_FUNC,
6414		.v.func = tas2781_fixup_spi,
6415		.chained = true,
6416		.chain_id = ALC285_FIXUP_HP_GPIO_LED,
6417	},
6418	[ALC287_FIXUP_TXNW2781_I2C] = {
6419		.type = HDA_FIXUP_FUNC,
6420		.v.func = tas2781_fixup_txnw_i2c,
6421		.chained = true,
6422		.chain_id = ALC285_FIXUP_THINKPAD_HEADSET_JACK,
6423	},
6424	[ALC287_FIXUP_TXNW2781_I2C_ASUS] = {
6425		.type = HDA_FIXUP_FUNC,
6426		.v.func = tas2781_fixup_txnw_i2c,
6427		.chained = true,
6428		.chain_id = ALC294_FIXUP_ASUS_SPK,
6429	},
6430	[ALC287_FIXUP_YOGA7_14ARB7_I2C] = {
6431		.type = HDA_FIXUP_FUNC,
6432		.v.func = yoga7_14arb7_fixup_i2c,
6433		.chained = true,
6434		.chain_id = ALC285_FIXUP_THINKPAD_HEADSET_JACK,
6435	},
6436	[ALC245_FIXUP_HP_MUTE_LED_COEFBIT] = {
6437		.type = HDA_FIXUP_FUNC,
6438		.v.func = alc245_fixup_hp_mute_led_coefbit,
6439	},
6440	[ALC245_FIXUP_HP_MUTE_LED_V1_COEFBIT] = {
6441		.type = HDA_FIXUP_FUNC,
6442		.v.func = alc245_fixup_hp_mute_led_v1_coefbit,
6443	},
6444	[ALC245_FIXUP_HP_MUTE_LED_V2_COEFBIT] = {
6445		.type = HDA_FIXUP_FUNC,
6446		.v.func = alc245_fixup_hp_mute_led_v2_coefbit,
6447	},
6448	[ALC245_FIXUP_HP_X360_MUTE_LEDS] = {
6449		.type = HDA_FIXUP_FUNC,
6450		.v.func = alc245_fixup_hp_mute_led_coefbit,
6451		.chained = true,
6452		.chain_id = ALC245_FIXUP_HP_GPIO_LED
6453	},
6454	[ALC287_FIXUP_THINKPAD_I2S_SPK] = {
6455		.type = HDA_FIXUP_FUNC,
6456		.v.func = alc287_fixup_bind_dacs,
6457		.chained = true,
6458		.chain_id = ALC285_FIXUP_THINKPAD_NO_BASS_SPK_HEADSET_JACK,
6459	},
6460	[ALC287_FIXUP_MG_RTKC_CSAMP_CS35L41_I2C_THINKPAD] = {
6461		.type = HDA_FIXUP_FUNC,
6462		.v.func = alc287_fixup_bind_dacs,
6463		.chained = true,
6464		.chain_id = ALC287_FIXUP_CS35L41_I2C_2_THINKPAD_ACPI,
6465	},
6466	[ALC2XX_FIXUP_HEADSET_MIC] = {
6467		.type = HDA_FIXUP_FUNC,
6468		.v.func = alc2xx_fixup_headset_mic,
6469	},
6470	[ALC289_FIXUP_DELL_CS35L41_SPI_2] = {
6471		.type = HDA_FIXUP_FUNC,
6472		.v.func = cs35l41_fixup_spi_two,
6473		.chained = true,
6474		.chain_id = ALC289_FIXUP_DUAL_SPK
6475	},
6476	[ALC294_FIXUP_CS35L41_I2C_2] = {
6477		.type = HDA_FIXUP_FUNC,
6478		.v.func = cs35l41_fixup_i2c_two,
6479	},
6480	[ALC256_FIXUP_ACER_SFG16_MICMUTE_LED] = {
6481		.type = HDA_FIXUP_FUNC,
6482		.v.func = alc256_fixup_acer_sfg16_micmute_led,
6483	},
6484	[ALC256_FIXUP_HEADPHONE_AMP_VOL] = {
6485		.type = HDA_FIXUP_FUNC,
6486		.v.func = alc256_decrease_headphone_amp_val,
6487	},
6488	[ALC245_FIXUP_HP_SPECTRE_X360_EU0XXX] = {
6489		.type = HDA_FIXUP_FUNC,
6490		.v.func = alc245_fixup_hp_spectre_x360_eu0xxx,
6491	},
6492	[ALC245_FIXUP_HP_SPECTRE_X360_16_AA0XXX] = {
6493		.type = HDA_FIXUP_FUNC,
6494		.v.func = alc245_fixup_hp_spectre_x360_16_aa0xxx,
6495	},
6496	[ALC245_FIXUP_HP_ZBOOK_FIREFLY_G12A] = {
6497		.type = HDA_FIXUP_FUNC,
6498		.v.func = alc245_fixup_hp_zbook_firefly_g12a,
6499	},
6500	[ALC285_FIXUP_ASUS_GA403U] = {
6501		.type = HDA_FIXUP_FUNC,
6502		.v.func = alc285_fixup_asus_ga403u,
6503	},
6504	[ALC285_FIXUP_ASUS_GA403U_HEADSET_MIC] = {
6505		.type = HDA_FIXUP_PINS,
6506		.v.pins = (const struct hda_pintbl[]) {
6507			{ 0x19, 0x03a11050 },
6508			{ 0x1b, 0x03a11c30 },
6509			{ }
6510		},
6511		.chained = true,
6512		.chain_id = ALC285_FIXUP_ASUS_GA403U_I2C_SPEAKER2_TO_DAC1
6513	},
6514	[ALC285_FIXUP_ASUS_GU605_SPI_SPEAKER2_TO_DAC1] = {
6515		.type = HDA_FIXUP_FUNC,
6516		.v.func = alc285_fixup_speaker2_to_dac1,
6517		.chained = true,
6518		.chain_id = ALC285_FIXUP_ASUS_GU605_SPI_2_HEADSET_MIC,
6519	},
6520	[ALC285_FIXUP_ASUS_GU605_SPI_2_HEADSET_MIC] = {
6521		.type = HDA_FIXUP_PINS,
6522		.v.pins = (const struct hda_pintbl[]) {
6523			{ 0x19, 0x03a11050 },
6524			{ 0x1b, 0x03a11c30 },
6525			{ }
6526		},
6527	},
6528	[ALC285_FIXUP_ASUS_GA403U_I2C_SPEAKER2_TO_DAC1] = {
6529		.type = HDA_FIXUP_FUNC,
6530		.v.func = alc285_fixup_speaker2_to_dac1,
6531		.chained = true,
6532		.chain_id = ALC285_FIXUP_ASUS_GA403U,
6533	},
6534	[ALC287_FIXUP_LENOVO_THKPAD_WH_ALC1318] = {
6535		.type = HDA_FIXUP_FUNC,
6536		.v.func = alc287_fixup_lenovo_thinkpad_with_alc1318,
6537		.chained = true,
6538		.chain_id = ALC269_FIXUP_THINKPAD_ACPI
6539	},
6540	[ALC256_FIXUP_CHROME_BOOK] = {
6541		.type = HDA_FIXUP_FUNC,
6542		.v.func = alc256_fixup_chromebook,
6543		.chained = true,
6544		.chain_id = ALC225_FIXUP_HEADSET_JACK
6545	},
6546	[ALC245_FIXUP_CLEVO_NOISY_MIC] = {
6547		.type = HDA_FIXUP_FUNC,
6548		.v.func = alc269_fixup_limit_int_mic_boost,
6549		.chained = true,
6550		.chain_id = ALC256_FIXUP_SYSTEM76_MIC_NO_PRESENCE,
6551	},
6552	[ALC269_FIXUP_VAIO_VJFH52_MIC_NO_PRESENCE] = {
6553		.type = HDA_FIXUP_PINS,
6554		.v.pins = (const struct hda_pintbl[]) {
6555			{ 0x19, 0x03a1113c }, /* use as headset mic, without its own jack detect */
6556			{ 0x1b, 0x20a11040 }, /* dock mic */
6557			{ }
6558		},
6559		.chained = true,
6560		.chain_id = ALC269_FIXUP_LIMIT_INT_MIC_BOOST
6561	},
6562	[ALC233_FIXUP_MEDION_MTL_SPK] = {
6563		.type = HDA_FIXUP_PINS,
6564		.v.pins = (const struct hda_pintbl[]) {
6565			{ 0x1b, 0x90170110 },
6566			{ }
6567		},
6568	},
6569	[ALC233_FIXUP_STARLABS_STARFIGHTER] = {
6570		.type = HDA_FIXUP_FUNC,
6571		.v.func = alc233_fixup_starlabs_starfighter,
6572	},
6573	[ALC294_FIXUP_BASS_SPEAKER_15] = {
6574		.type = HDA_FIXUP_FUNC,
6575		.v.func = alc294_fixup_bass_speaker_15,
6576	},
6577	[ALC283_FIXUP_DELL_HP_RESUME] = {
6578		.type = HDA_FIXUP_FUNC,
6579		.v.func = alc283_fixup_dell_hp_resume,
6580	},
6581	[ALC294_FIXUP_ASUS_CS35L41_SPI_2] = {
6582		.type = HDA_FIXUP_FUNC,
6583		.v.func = cs35l41_fixup_spi_two,
6584		.chained = true,
6585		.chain_id = ALC294_FIXUP_ASUS_HEADSET_MIC,
6586	},
6587	[ALC274_FIXUP_HP_AIO_BIND_DACS] = {
6588		.type = HDA_FIXUP_FUNC,
6589		.v.func = alc274_fixup_hp_aio_bind_dacs,
6590	},
6591	[ALC285_FIXUP_ASUS_GA605K_HEADSET_MIC] = {
6592		.type = HDA_FIXUP_PINS,
6593		.v.pins = (const struct hda_pintbl[]) {
6594			{ 0x19, 0x03a11050 },
6595			{ 0x1b, 0x03a11c30 },
6596			{ }
6597		},
6598		.chained = true,
6599		.chain_id = ALC285_FIXUP_ASUS_GA605K_I2C_SPEAKER2_TO_DAC1
6600	},
6601	[ALC285_FIXUP_ASUS_GA605K_I2C_SPEAKER2_TO_DAC1] = {
6602		.type = HDA_FIXUP_FUNC,
6603		.v.func = alc285_fixup_speaker2_to_dac1,
6604	},
6605	[ALC269_FIXUP_POSITIVO_P15X_HEADSET_MIC] = {
6606		.type = HDA_FIXUP_FUNC,
6607		.v.func = alc269_fixup_limit_int_mic_boost,
6608		.chained = true,
6609		.chain_id = ALC269VC_FIXUP_ACER_MIC_NO_PRESENCE,
6610	},
6611	[ALC289_FIXUP_ASUS_ZEPHYRUS_DUAL_SPK] = {
6612		.type = HDA_FIXUP_PINS,
6613		.v.pins = (const struct hda_pintbl[]) {
6614			{ 0x17, 0x90170151 }, /* Internal Speaker LFE */
6615			{ 0x1e, 0x90170150 }, /* Internal Speaker */
6616			{ }
6617		},
6618	},
6619	[ALC256_FIXUP_VAIO_RPL_MIC_NO_PRESENCE] = {
6620		.type = HDA_FIXUP_PINS,
6621		.v.pins = (const struct hda_pintbl[]) {
6622			{ 0x19, 0x03a1113c }, /* use as headset mic, without its own jack detect */
6623			{ 0x1a, 0x22a190a0 }, /* dock mic */
6624			{ }
6625		},
6626		.chained = true,
6627		.chain_id = ALC269_FIXUP_LIMIT_INT_MIC_BOOST
6628	},
6629	[ALC245_FIXUP_HP_TAS2781_SPI_MUTE_LED] = {
6630		.type = HDA_FIXUP_FUNC,
6631		.v.func = alc245_tas2781_spi_hp_fixup_muteled,
6632	},
6633	[ALC245_FIXUP_HP_TAS2781_I2C_MUTE_LED] = {
6634		.type = HDA_FIXUP_FUNC,
6635		.v.func = alc245_tas2781_i2c_hp_fixup_muteled,
6636	},
6637	[ALC288_FIXUP_SURFACE_SWAP_DACS] = {
6638		.type = HDA_FIXUP_FUNC,
6639		.v.func = alc288_fixup_surface_swap_dacs,
6640	},
6641        [ALC233_FIXUP_LENOVO_GPIO2_MIC_HOTKEY] = {
6642                .type = HDA_FIXUP_FUNC,
6643                .v.func = alc233_fixup_lenovo_gpio2_mic_hotkey,
6644        },
6645	[ALC245_FIXUP_BASS_HP_DAC] = {
6646		.type = HDA_FIXUP_FUNC,
6647		/* Borrow the DAC routing selected for those Thinkpads */
6648		.v.func = alc285_fixup_thinkpad_x1_gen7,
6649	},
6650	[ALC245_FIXUP_ACER_MICMUTE_LED] = {
6651		.type = HDA_FIXUP_FUNC,
6652		.v.func = alc285_fixup_hp_coef_micmute_led,
6653		.chained = true,
6654		.chain_id = ALC2XX_FIXUP_HEADSET_MIC,
6655	},
6656	[ALC245_FIXUP_CS35L41_I2C_2_MUTE_LED] = {
6657		.type = HDA_FIXUP_FUNC,
6658		.v.func = alc245_fixup_hp_mute_led_coefbit,
6659		.chained = true,
6660		.chain_id = ALC287_FIXUP_CS35L41_I2C_2,
6661	}
6662};
6663
6664static const struct hda_quirk alc269_fixup_tbl[] = {
6665	SND_PCI_QUIRK(0x1025, 0x0283, "Acer TravelMate 8371", ALC269_FIXUP_INV_DMIC),
6666	SND_PCI_QUIRK(0x1025, 0x029b, "Acer 1810TZ", ALC269_FIXUP_INV_DMIC),
6667	SND_PCI_QUIRK(0x1025, 0x0349, "Acer AOD260", ALC269_FIXUP_INV_DMIC),
6668	SND_PCI_QUIRK(0x1025, 0x047c, "Acer AC700", ALC269_FIXUP_ACER_AC700),
6669	SND_PCI_QUIRK(0x1025, 0x072d, "Acer Aspire V5-571G", ALC269_FIXUP_ASPIRE_HEADSET_MIC),
6670	SND_PCI_QUIRK(0x1025, 0x0740, "Acer AO725", ALC271_FIXUP_HP_GATE_MIC_JACK),
6671	SND_PCI_QUIRK(0x1025, 0x0742, "Acer AO756", ALC271_FIXUP_HP_GATE_MIC_JACK),
6672	SND_PCI_QUIRK(0x1025, 0x0762, "Acer Aspire E1-472", ALC271_FIXUP_HP_GATE_MIC_JACK_E1_572),
6673	SND_PCI_QUIRK(0x1025, 0x0775, "Acer Aspire E1-572", ALC271_FIXUP_HP_GATE_MIC_JACK_E1_572),
6674	SND_PCI_QUIRK(0x1025, 0x079b, "Acer Aspire V5-573G", ALC282_FIXUP_ASPIRE_V5_PINS),
6675	SND_PCI_QUIRK(0x1025, 0x080d, "Acer Aspire V5-122P", ALC269_FIXUP_ASPIRE_HEADSET_MIC),
6676	SND_PCI_QUIRK(0x1025, 0x0840, "Acer Aspire E1", ALC269VB_FIXUP_ASPIRE_E1_COEF),
6677	SND_PCI_QUIRK(0x1025, 0x0943, "Acer Aspire V3-572G", ALC269_FIXUP_ASPIRE_HEADSET_MIC),
6678	SND_PCI_QUIRK(0x1025, 0x100c, "Acer Aspire E5-574G", ALC255_FIXUP_ACER_LIMIT_INT_MIC_BOOST),
6679	SND_PCI_QUIRK(0x1025, 0x101c, "Acer Veriton N2510G", ALC269_FIXUP_LIFEBOOK),
6680	SND_PCI_QUIRK(0x1025, 0x102b, "Acer Aspire C24-860", ALC286_FIXUP_ACER_AIO_MIC_NO_PRESENCE),
6681	SND_PCI_QUIRK(0x1025, 0x1065, "Acer Aspire C20-820", ALC269VC_FIXUP_ACER_HEADSET_MIC),
6682	SND_PCI_QUIRK(0x1025, 0x106d, "Acer Cloudbook 14", ALC283_FIXUP_CHROME_BOOK),
6683	SND_PCI_QUIRK(0x1025, 0x1094, "Acer Aspire E5-575T", ALC255_FIXUP_ACER_LIMIT_INT_MIC_BOOST),
6684	SND_PCI_QUIRK(0x1025, 0x1099, "Acer Aspire E5-523G", ALC255_FIXUP_ACER_MIC_NO_PRESENCE),
6685	SND_PCI_QUIRK(0x1025, 0x110e, "Acer Aspire ES1-432", ALC255_FIXUP_ACER_MIC_NO_PRESENCE),
6686	SND_PCI_QUIRK(0x1025, 0x1166, "Acer Veriton N4640G", ALC269_FIXUP_LIFEBOOK),
6687	SND_PCI_QUIRK(0x1025, 0x1167, "Acer Veriton N6640G", ALC269_FIXUP_LIFEBOOK),
6688	SND_PCI_QUIRK(0x1025, 0x1177, "Acer Predator G9-593", ALC255_FIXUP_PREDATOR_SUBWOOFER),
6689	SND_PCI_QUIRK(0x1025, 0x1178, "Acer Predator G9-593", ALC255_FIXUP_PREDATOR_SUBWOOFER),
6690	SND_PCI_QUIRK(0x1025, 0x1246, "Acer Predator Helios 500", ALC299_FIXUP_PREDATOR_SPK),
6691	SND_PCI_QUIRK(0x1025, 0x1247, "Acer vCopperbox", ALC269VC_FIXUP_ACER_VCOPPERBOX_PINS),
6692	SND_PCI_QUIRK(0x1025, 0x1248, "Acer Veriton N4660G", ALC269VC_FIXUP_ACER_MIC_NO_PRESENCE),
6693	SND_PCI_QUIRK(0x1025, 0x1269, "Acer SWIFT SF314-54", ALC256_FIXUP_ACER_HEADSET_MIC),
6694	SND_PCI_QUIRK(0x1025, 0x126a, "Acer Swift SF114-32", ALC256_FIXUP_ACER_MIC_NO_PRESENCE),
6695	SND_PCI_QUIRK(0x1025, 0x128f, "Acer Veriton Z6860G", ALC286_FIXUP_ACER_AIO_HEADSET_MIC),
6696	SND_PCI_QUIRK(0x1025, 0x1290, "Acer Veriton Z4860G", ALC286_FIXUP_ACER_AIO_HEADSET_MIC),
6697	SND_PCI_QUIRK(0x1025, 0x1291, "Acer Veriton Z4660G", ALC286_FIXUP_ACER_AIO_HEADSET_MIC),
6698	SND_PCI_QUIRK(0x1025, 0x129c, "Acer SWIFT SF314-55", ALC256_FIXUP_ACER_HEADSET_MIC),
6699	SND_PCI_QUIRK(0x1025, 0x129d, "Acer SWIFT SF313-51", ALC256_FIXUP_ACER_MIC_NO_PRESENCE),
6700	SND_PCI_QUIRK(0x1025, 0x1300, "Acer SWIFT SF314-56", ALC256_FIXUP_ACER_MIC_NO_PRESENCE),
6701	SND_PCI_QUIRK(0x1025, 0x1308, "Acer Aspire Z24-890", ALC286_FIXUP_ACER_AIO_HEADSET_MIC),
6702	SND_PCI_QUIRK(0x1025, 0x132a, "Acer TravelMate B114-21", ALC233_FIXUP_ACER_HEADSET_MIC),
6703	SND_PCI_QUIRK(0x1025, 0x1330, "Acer TravelMate X514-51T", ALC255_FIXUP_ACER_HEADSET_MIC),
6704	SND_PCI_QUIRK(0x1025, 0x1360, "Acer Aspire A115", ALC255_FIXUP_ACER_MIC_NO_PRESENCE),
6705	SND_PCI_QUIRK(0x1025, 0x141f, "Acer Spin SP513-54N", ALC255_FIXUP_ACER_MIC_NO_PRESENCE),
6706	SND_PCI_QUIRK(0x1025, 0x142b, "Acer Swift SF314-42", ALC255_FIXUP_ACER_MIC_NO_PRESENCE),
6707	SND_PCI_QUIRK(0x1025, 0x1430, "Acer TravelMate B311R-31", ALC256_FIXUP_ACER_MIC_NO_PRESENCE),
6708	SND_PCI_QUIRK(0x1025, 0x1466, "Acer Aspire A515-56", ALC255_FIXUP_ACER_HEADPHONE_AND_MIC),
6709	SND_PCI_QUIRK(0x1025, 0x1534, "Acer Predator PH315-54", ALC255_FIXUP_ACER_MIC_NO_PRESENCE),
6710	SND_PCI_QUIRK(0x1025, 0x1539, "Acer Nitro 5 AN515-57", ALC2XX_FIXUP_HEADSET_MIC),
6711	SND_PCI_QUIRK(0x1025, 0x159c, "Acer Nitro 5 AN515-58", ALC2XX_FIXUP_HEADSET_MIC),
6712	SND_PCI_QUIRK(0x1025, 0x1597, "Acer Nitro 5 AN517-55", ALC2XX_FIXUP_HEADSET_MIC),
6713	SND_PCI_QUIRK(0x1025, 0x169a, "Acer Swift SFG16", ALC256_FIXUP_ACER_SFG16_MICMUTE_LED),
6714	SND_PCI_QUIRK(0x1025, 0x171e, "Acer Nitro ANV15-51", ALC245_FIXUP_ACER_MICMUTE_LED),
6715	SND_PCI_QUIRK(0x1025, 0x173a, "Acer Swift SFG14-73", ALC245_FIXUP_ACER_MICMUTE_LED),
6716	SND_PCI_QUIRK(0x1025, 0x1826, "Acer Helios ZPC", ALC287_FIXUP_PREDATOR_SPK_CS35L41_I2C_2),
6717	SND_PCI_QUIRK(0x1025, 0x182c, "Acer Helios ZPD", ALC287_FIXUP_PREDATOR_SPK_CS35L41_I2C_2),
6718	SND_PCI_QUIRK(0x1025, 0x1844, "Acer Helios ZPS", ALC287_FIXUP_PREDATOR_SPK_CS35L41_I2C_2),
6719	SND_PCI_QUIRK(0x1028, 0x0470, "Dell M101z", ALC269_FIXUP_DELL_M101Z),
6720	SND_PCI_QUIRK(0x1028, 0x053c, "Dell Latitude E5430", ALC292_FIXUP_DELL_E7X),
6721	SND_PCI_QUIRK(0x1028, 0x054b, "Dell XPS one 2710", ALC275_FIXUP_DELL_XPS),
6722	SND_PCI_QUIRK(0x1028, 0x05bd, "Dell Latitude E6440", ALC292_FIXUP_DELL_E7X),
6723	SND_PCI_QUIRK(0x1028, 0x05be, "Dell Latitude E6540", ALC292_FIXUP_DELL_E7X),
6724	SND_PCI_QUIRK(0x1028, 0x05ca, "Dell Latitude E7240", ALC292_FIXUP_DELL_E7X),
6725	SND_PCI_QUIRK(0x1028, 0x05cb, "Dell Latitude E7440", ALC292_FIXUP_DELL_E7X),
6726	SND_PCI_QUIRK(0x1028, 0x05da, "Dell Vostro 5460", ALC290_FIXUP_SUBWOOFER),
6727	SND_PCI_QUIRK(0x1028, 0x05f4, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE),
6728	SND_PCI_QUIRK(0x1028, 0x05f5, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE),
6729	SND_PCI_QUIRK(0x1028, 0x05f6, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE),
6730	SND_PCI_QUIRK(0x1028, 0x0604, "Dell Venue 11 Pro 7130", ALC283_FIXUP_DELL_HP_RESUME),
6731	SND_PCI_QUIRK(0x1028, 0x0615, "Dell Vostro 5470", ALC290_FIXUP_SUBWOOFER_HSJACK),
6732	SND_PCI_QUIRK(0x1028, 0x0616, "Dell Vostro 5470", ALC290_FIXUP_SUBWOOFER_HSJACK),
6733	SND_PCI_QUIRK(0x1028, 0x062c, "Dell Latitude E5550", ALC292_FIXUP_DELL_E7X),
6734	SND_PCI_QUIRK(0x1028, 0x062e, "Dell Latitude E7450", ALC292_FIXUP_DELL_E7X),
6735	SND_PCI_QUIRK(0x1028, 0x0638, "Dell Inspiron 5439", ALC290_FIXUP_MONO_SPEAKERS_HSJACK),
6736	SND_PCI_QUIRK(0x1028, 0x064a, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE),
6737	SND_PCI_QUIRK(0x1028, 0x064b, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE),
6738	SND_PCI_QUIRK(0x1028, 0x0665, "Dell XPS 13", ALC288_FIXUP_DELL_XPS_13),
6739	SND_PCI_QUIRK(0x1028, 0x0669, "Dell Optiplex 9020m", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE),
6740	SND_PCI_QUIRK(0x1028, 0x069a, "Dell Vostro 5480", ALC290_FIXUP_SUBWOOFER_HSJACK),
6741	SND_PCI_QUIRK(0x1028, 0x06c7, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE),
6742	SND_PCI_QUIRK(0x1028, 0x06d9, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE),
6743	SND_PCI_QUIRK(0x1028, 0x06da, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE),
6744	SND_PCI_QUIRK(0x1028, 0x06db, "Dell", ALC293_FIXUP_DISABLE_AAMIX_MULTIJACK),
6745	SND_PCI_QUIRK(0x1028, 0x06dd, "Dell", ALC293_FIXUP_DISABLE_AAMIX_MULTIJACK),
6746	SND_PCI_QUIRK(0x1028, 0x06de, "Dell", ALC293_FIXUP_DISABLE_AAMIX_MULTIJACK),
6747	SND_PCI_QUIRK(0x1028, 0x06df, "Dell", ALC293_FIXUP_DISABLE_AAMIX_MULTIJACK),
6748	SND_PCI_QUIRK(0x1028, 0x06e0, "Dell", ALC293_FIXUP_DISABLE_AAMIX_MULTIJACK),
6749	SND_PCI_QUIRK(0x1028, 0x0706, "Dell Inspiron 7559", ALC256_FIXUP_DELL_INSPIRON_7559_SUBWOOFER),
6750	SND_PCI_QUIRK(0x1028, 0x0725, "Dell Inspiron 3162", ALC255_FIXUP_DELL_SPK_NOISE),
6751	SND_PCI_QUIRK(0x1028, 0x0738, "Dell Precision 5820", ALC269_FIXUP_NO_SHUTUP),
6752	SND_PCI_QUIRK(0x1028, 0x075c, "Dell XPS 27 7760", ALC298_FIXUP_SPK_VOLUME),
6753	SND_PCI_QUIRK(0x1028, 0x075d, "Dell AIO", ALC298_FIXUP_SPK_VOLUME),
6754	SND_PCI_QUIRK(0x1028, 0x0798, "Dell Inspiron 17 7000 Gaming", ALC256_FIXUP_DELL_INSPIRON_7559_SUBWOOFER),
6755	SND_PCI_QUIRK(0x1028, 0x07b0, "Dell Precision 7520", ALC295_FIXUP_DISABLE_DAC3),
6756	SND_PCI_QUIRK(0x1028, 0x080c, "Dell WYSE", ALC225_FIXUP_DELL_WYSE_MIC_NO_PRESENCE),
6757	SND_PCI_QUIRK(0x1028, 0x084b, "Dell", ALC274_FIXUP_DELL_AIO_LINEOUT_VERB),
6758	SND_PCI_QUIRK(0x1028, 0x084e, "Dell", ALC274_FIXUP_DELL_AIO_LINEOUT_VERB),
6759	SND_PCI_QUIRK(0x1028, 0x0871, "Dell Precision 3630", ALC255_FIXUP_DELL_HEADSET_MIC),
6760	SND_PCI_QUIRK(0x1028, 0x0872, "Dell Precision 3630", ALC255_FIXUP_DELL_HEADSET_MIC),
6761	SND_PCI_QUIRK(0x1028, 0x0873, "Dell Precision 3930", ALC255_FIXUP_DUMMY_LINEOUT_VERB),
6762	SND_PCI_QUIRK(0x1028, 0x0879, "Dell Latitude 5420 Rugged", ALC269_FIXUP_DELL4_MIC_NO_PRESENCE),
6763	SND_PCI_QUIRK(0x1028, 0x08ad, "Dell WYSE AIO", ALC225_FIXUP_DELL_WYSE_AIO_MIC_NO_PRESENCE),
6764	SND_PCI_QUIRK(0x1028, 0x08ae, "Dell WYSE NB", ALC225_FIXUP_DELL1_MIC_NO_PRESENCE),
6765	SND_PCI_QUIRK(0x1028, 0x0935, "Dell", ALC274_FIXUP_DELL_AIO_LINEOUT_VERB),
6766	SND_PCI_QUIRK(0x1028, 0x097d, "Dell Precision", ALC289_FIXUP_DUAL_SPK),
6767	SND_PCI_QUIRK(0x1028, 0x097e, "Dell Precision", ALC289_FIXUP_DUAL_SPK),
6768	SND_PCI_QUIRK(0x1028, 0x098d, "Dell Precision", ALC233_FIXUP_ASUS_MIC_NO_PRESENCE),
6769	SND_PCI_QUIRK(0x1028, 0x09bf, "Dell Precision", ALC233_FIXUP_ASUS_MIC_NO_PRESENCE),
6770	SND_PCI_QUIRK(0x1028, 0x0a2e, "Dell", ALC236_FIXUP_DELL_AIO_HEADSET_MIC),
6771	SND_PCI_QUIRK(0x1028, 0x0a30, "Dell", ALC236_FIXUP_DELL_AIO_HEADSET_MIC),
6772	SND_PCI_QUIRK(0x1028, 0x0a38, "Dell Latitude 7520", ALC269_FIXUP_DELL4_MIC_NO_PRESENCE_QUIET),
6773	SND_PCI_QUIRK(0x1028, 0x0a58, "Dell", ALC255_FIXUP_DELL_HEADSET_MIC),
6774	SND_PCI_QUIRK(0x1028, 0x0a61, "Dell XPS 15 9510", ALC289_FIXUP_DUAL_SPK),
6775	SND_PCI_QUIRK(0x1028, 0x0a62, "Dell Precision 5560", ALC289_FIXUP_DUAL_SPK),
6776	SND_PCI_QUIRK(0x1028, 0x0a9d, "Dell Latitude 5430", ALC269_FIXUP_DELL4_MIC_NO_PRESENCE),
6777	SND_PCI_QUIRK(0x1028, 0x0a9e, "Dell Latitude 5430", ALC269_FIXUP_DELL4_MIC_NO_PRESENCE),
6778	SND_PCI_QUIRK(0x1028, 0x0b19, "Dell XPS 15 9520", ALC289_FIXUP_DUAL_SPK),
6779	SND_PCI_QUIRK(0x1028, 0x0b1a, "Dell Precision 5570", ALC289_FIXUP_DUAL_SPK),
6780	SND_PCI_QUIRK(0x1028, 0x0b27, "Dell", ALC245_FIXUP_CS35L41_SPI_2),
6781	SND_PCI_QUIRK(0x1028, 0x0b28, "Dell", ALC245_FIXUP_CS35L41_SPI_2),
6782	SND_PCI_QUIRK(0x1028, 0x0b37, "Dell Inspiron 16 Plus 7620 2-in-1", ALC295_FIXUP_DELL_INSPIRON_TOP_SPEAKERS),
6783	SND_PCI_QUIRK(0x1028, 0x0b71, "Dell Inspiron 16 Plus 7620", ALC295_FIXUP_DELL_INSPIRON_TOP_SPEAKERS),
6784	SND_PCI_QUIRK(0x1028, 0x0beb, "Dell XPS 15 9530 (2023)", ALC289_FIXUP_DELL_CS35L41_SPI_2),
6785	SND_PCI_QUIRK(0x1028, 0x0c03, "Dell Precision 5340", ALC269_FIXUP_DELL4_MIC_NO_PRESENCE),
6786	SND_PCI_QUIRK(0x1028, 0x0c0b, "Dell Oasis 14 RPL-P", ALC289_FIXUP_RTK_AMP_DUAL_SPK),
6787	SND_PCI_QUIRK(0x1028, 0x0c0d, "Dell Oasis", ALC289_FIXUP_RTK_AMP_DUAL_SPK),
6788	SND_PCI_QUIRK(0x1028, 0x0c0e, "Dell Oasis 16", ALC289_FIXUP_RTK_AMP_DUAL_SPK),
6789	SND_PCI_QUIRK(0x1028, 0x0c19, "Dell Precision 3340", ALC236_FIXUP_DELL_DUAL_CODECS),
6790	SND_PCI_QUIRK(0x1028, 0x0c1a, "Dell Precision 3340", ALC236_FIXUP_DELL_DUAL_CODECS),
6791	SND_PCI_QUIRK(0x1028, 0x0c1b, "Dell Precision 3440", ALC236_FIXUP_DELL_DUAL_CODECS),
6792	SND_PCI_QUIRK(0x1028, 0x0c1c, "Dell Precision 3540", ALC236_FIXUP_DELL_DUAL_CODECS),
6793	SND_PCI_QUIRK(0x1028, 0x0c1d, "Dell Precision 3440", ALC236_FIXUP_DELL_DUAL_CODECS),
6794	SND_PCI_QUIRK(0x1028, 0x0c1e, "Dell Precision 3540", ALC236_FIXUP_DELL_DUAL_CODECS),
6795	SND_PCI_QUIRK(0x1028, 0x0c28, "Dell Inspiron 16 Plus 7630", ALC295_FIXUP_DELL_INSPIRON_TOP_SPEAKERS),
6796	SND_PCI_QUIRK(0x1028, 0x0c4d, "Dell", ALC287_FIXUP_CS35L41_I2C_4),
6797	SND_PCI_QUIRK(0x1028, 0x0c94, "Dell Polaris 3 metal", ALC295_FIXUP_DELL_TAS2781_I2C),
6798	SND_PCI_QUIRK(0x1028, 0x0c96, "Dell Polaris 2in1", ALC295_FIXUP_DELL_TAS2781_I2C),
6799	SND_PCI_QUIRK(0x1028, 0x0cbd, "Dell Oasis 13 CS MTL-U", ALC289_FIXUP_DELL_CS35L41_SPI_2),
6800	SND_PCI_QUIRK(0x1028, 0x0cbe, "Dell Oasis 13 2-IN-1 MTL-U", ALC289_FIXUP_DELL_CS35L41_SPI_2),
6801	SND_PCI_QUIRK(0x1028, 0x0cbf, "Dell Oasis 13 Low Weight MTU-L", ALC289_FIXUP_DELL_CS35L41_SPI_2),
6802	SND_PCI_QUIRK(0x1028, 0x0cc0, "Dell Oasis 13", ALC289_FIXUP_RTK_AMP_DUAL_SPK),
6803	SND_PCI_QUIRK(0x1028, 0x0cc1, "Dell Oasis 14 MTL-H/U", ALC289_FIXUP_DELL_CS35L41_SPI_2),
6804	SND_PCI_QUIRK(0x1028, 0x0cc2, "Dell Oasis 14 2-in-1 MTL-H/U", ALC289_FIXUP_DELL_CS35L41_SPI_2),
6805	SND_PCI_QUIRK(0x1028, 0x0cc3, "Dell Oasis 14 Low Weight MTL-U", ALC289_FIXUP_DELL_CS35L41_SPI_2),
6806	SND_PCI_QUIRK(0x1028, 0x0cc4, "Dell Oasis 16 MTL-H/U", ALC289_FIXUP_DELL_CS35L41_SPI_2),
6807	SND_PCI_QUIRK(0x1028, 0x0cc5, "Dell Oasis 14", ALC289_FIXUP_RTK_AMP_DUAL_SPK),
6808	SND_PCI_QUIRK(0x1028, 0x164a, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE),
6809	SND_PCI_QUIRK(0x1028, 0x164b, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE),
6810	SND_PCI_QUIRK(0x103c, 0x1586, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC2),
6811	SND_PCI_QUIRK(0x103c, 0x18e6, "HP", ALC269_FIXUP_HP_GPIO_LED),
6812	SND_PCI_QUIRK(0x103c, 0x218b, "HP", ALC269_FIXUP_LIMIT_INT_MIC_BOOST_MUTE_LED),
6813	SND_PCI_QUIRK(0x103c, 0x21f9, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
6814	SND_PCI_QUIRK(0x103c, 0x2210, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
6815	SND_PCI_QUIRK(0x103c, 0x2214, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
6816	SND_PCI_QUIRK(0x103c, 0x221b, "HP", ALC269_FIXUP_HP_GPIO_MIC1_LED),
6817	SND_PCI_QUIRK(0x103c, 0x221c, "HP EliteBook 755 G2", ALC280_FIXUP_HP_HEADSET_MIC),
6818	SND_PCI_QUIRK(0x103c, 0x2221, "HP", ALC269_FIXUP_HP_GPIO_MIC1_LED),
6819	SND_PCI_QUIRK(0x103c, 0x2225, "HP", ALC269_FIXUP_HP_GPIO_MIC1_LED),
6820	SND_PCI_QUIRK(0x103c, 0x2236, "HP", ALC269_FIXUP_HP_LINE1_MIC1_LED),
6821	SND_PCI_QUIRK(0x103c, 0x2237, "HP", ALC269_FIXUP_HP_LINE1_MIC1_LED),
6822	SND_PCI_QUIRK(0x103c, 0x2238, "HP", ALC269_FIXUP_HP_LINE1_MIC1_LED),
6823	SND_PCI_QUIRK(0x103c, 0x2239, "HP", ALC269_FIXUP_HP_LINE1_MIC1_LED),
6824	SND_PCI_QUIRK(0x103c, 0x224b, "HP", ALC269_FIXUP_HP_LINE1_MIC1_LED),
6825	SND_PCI_QUIRK(0x103c, 0x2253, "HP", ALC269_FIXUP_HP_GPIO_MIC1_LED),
6826	SND_PCI_QUIRK(0x103c, 0x2254, "HP", ALC269_FIXUP_HP_GPIO_MIC1_LED),
6827	SND_PCI_QUIRK(0x103c, 0x2255, "HP", ALC269_FIXUP_HP_GPIO_MIC1_LED),
6828	SND_PCI_QUIRK(0x103c, 0x2256, "HP", ALC269_FIXUP_HP_GPIO_MIC1_LED),
6829	SND_PCI_QUIRK(0x103c, 0x2257, "HP", ALC269_FIXUP_HP_GPIO_MIC1_LED),
6830	SND_PCI_QUIRK(0x103c, 0x2259, "HP", ALC269_FIXUP_HP_GPIO_MIC1_LED),
6831	SND_PCI_QUIRK(0x103c, 0x225a, "HP", ALC269_FIXUP_HP_DOCK_GPIO_MIC1_LED),
6832	SND_PCI_QUIRK(0x103c, 0x225f, "HP", ALC280_FIXUP_HP_GPIO2_MIC_HOTKEY),
6833	SND_PCI_QUIRK(0x103c, 0x2260, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
6834	SND_PCI_QUIRK(0x103c, 0x2263, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
6835	SND_PCI_QUIRK(0x103c, 0x2264, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
6836	SND_PCI_QUIRK(0x103c, 0x2265, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
6837	SND_PCI_QUIRK(0x103c, 0x2268, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
6838	SND_PCI_QUIRK(0x103c, 0x226a, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
6839	SND_PCI_QUIRK(0x103c, 0x226b, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
6840	SND_PCI_QUIRK(0x103c, 0x226e, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
6841	SND_PCI_QUIRK(0x103c, 0x2271, "HP", ALC286_FIXUP_HP_GPIO_LED),
6842	SND_PCI_QUIRK(0x103c, 0x2272, "HP", ALC269_FIXUP_HP_GPIO_MIC1_LED),
6843	SND_PCI_QUIRK(0x103c, 0x2272, "HP", ALC280_FIXUP_HP_DOCK_PINS),
6844	SND_PCI_QUIRK(0x103c, 0x2273, "HP", ALC269_FIXUP_HP_GPIO_MIC1_LED),
6845	SND_PCI_QUIRK(0x103c, 0x2273, "HP", ALC280_FIXUP_HP_DOCK_PINS),
6846	SND_PCI_QUIRK(0x103c, 0x2278, "HP", ALC269_FIXUP_HP_GPIO_MIC1_LED),
6847	SND_PCI_QUIRK(0x103c, 0x227f, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
6848	SND_PCI_QUIRK(0x103c, 0x2282, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
6849	SND_PCI_QUIRK(0x103c, 0x228b, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
6850	SND_PCI_QUIRK(0x103c, 0x228e, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
6851	SND_PCI_QUIRK(0x103c, 0x229e, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
6852	SND_PCI_QUIRK(0x103c, 0x22b2, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
6853	SND_PCI_QUIRK(0x103c, 0x22b7, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
6854	SND_PCI_QUIRK(0x103c, 0x22bf, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
6855	SND_PCI_QUIRK(0x103c, 0x22c4, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
6856	SND_PCI_QUIRK(0x103c, 0x22c5, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
6857	SND_PCI_QUIRK(0x103c, 0x22c7, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
6858	SND_PCI_QUIRK(0x103c, 0x22c8, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
6859	SND_PCI_QUIRK(0x103c, 0x22cf, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
6860	SND_PCI_QUIRK(0x103c, 0x22db, "HP", ALC280_FIXUP_HP_9480M),
6861	SND_PCI_QUIRK(0x103c, 0x22dc, "HP", ALC269_FIXUP_HP_GPIO_MIC1_LED),
6862	SND_PCI_QUIRK(0x103c, 0x22fb, "HP", ALC269_FIXUP_HP_GPIO_MIC1_LED),
6863	SND_PCI_QUIRK(0x103c, 0x2334, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
6864	SND_PCI_QUIRK(0x103c, 0x2335, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
6865	SND_PCI_QUIRK(0x103c, 0x2336, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
6866	SND_PCI_QUIRK(0x103c, 0x2337, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
6867	SND_PCI_QUIRK(0x103c, 0x2b5e, "HP 288 Pro G2 MT", ALC221_FIXUP_HP_288PRO_MIC_NO_PRESENCE),
6868	SND_PCI_QUIRK(0x103c, 0x802e, "HP Z240 SFF", ALC221_FIXUP_HP_MIC_NO_PRESENCE),
6869	SND_PCI_QUIRK(0x103c, 0x802f, "HP Z240", ALC221_FIXUP_HP_MIC_NO_PRESENCE),
6870	SND_PCI_QUIRK(0x103c, 0x8077, "HP", ALC256_FIXUP_HP_HEADSET_MIC),
6871	SND_PCI_QUIRK(0x103c, 0x8158, "HP", ALC256_FIXUP_HP_HEADSET_MIC),
6872	SND_PCI_QUIRK(0x103c, 0x820d, "HP Pavilion 15", ALC295_FIXUP_HP_X360),
6873	SND_PCI_QUIRK(0x103c, 0x8256, "HP", ALC221_FIXUP_HP_FRONT_MIC),
6874	SND_PCI_QUIRK(0x103c, 0x827e, "HP x360", ALC295_FIXUP_HP_X360),
6875	SND_PCI_QUIRK(0x103c, 0x827f, "HP x360", ALC269_FIXUP_HP_MUTE_LED_MIC3),
6876	SND_PCI_QUIRK(0x103c, 0x82bf, "HP G3 mini", ALC221_FIXUP_HP_MIC_NO_PRESENCE),
6877	SND_PCI_QUIRK(0x103c, 0x82c0, "HP G3 mini premium", ALC221_FIXUP_HP_MIC_NO_PRESENCE),
6878	SND_PCI_QUIRK(0x103c, 0x83b9, "HP Spectre x360", ALC269_FIXUP_HP_MUTE_LED_MIC3),
6879	SND_PCI_QUIRK(0x103c, 0x841c, "HP Pavilion 15-CK0xx", ALC269_FIXUP_HP_MUTE_LED_MIC3),
6880	SND_PCI_QUIRK(0x103c, 0x8497, "HP Envy x360", ALC269_FIXUP_HP_MUTE_LED_MIC3),
6881	SND_PCI_QUIRK(0x103c, 0x84a6, "HP 250 G7 Notebook PC", ALC269_FIXUP_HP_LINE1_MIC1_LED),
6882	SND_PCI_QUIRK(0x103c, 0x84ae, "HP 15-db0403ng", ALC236_FIXUP_HP_MUTE_LED_COEFBIT2),
6883	SND_PCI_QUIRK(0x103c, 0x84da, "HP OMEN dc0019-ur", ALC295_FIXUP_HP_OMEN),
6884	SND_PCI_QUIRK(0x103c, 0x84e7, "HP Pavilion 15", ALC269_FIXUP_HP_MUTE_LED_MIC3),
6885	SND_PCI_QUIRK(0x103c, 0x8519, "HP Spectre x360 15-df0xxx", ALC285_FIXUP_HP_SPECTRE_X360),
6886	SND_PCI_QUIRK(0x103c, 0x8537, "HP ProBook 440 G6", ALC236_FIXUP_HP_MUTE_LED_MICMUTE_VREF),
6887	SND_PCI_QUIRK(0x103c, 0x8548, "HP EliteBook x360 830 G6", ALC285_FIXUP_HP_GPIO_LED),
6888	SND_PCI_QUIRK(0x103c, 0x854a, "HP EliteBook 830 G6", ALC285_FIXUP_HP_GPIO_LED),
6889	SND_PCI_QUIRK(0x103c, 0x85c6, "HP Pavilion x360 Convertible 14-dy1xxx", ALC295_FIXUP_HP_MUTE_LED_COEFBIT11),
6890	SND_PCI_QUIRK(0x103c, 0x85de, "HP Envy x360 13-ar0xxx", ALC285_FIXUP_HP_ENVY_X360),
6891	SND_PCI_QUIRK(0x103c, 0x8603, "HP Omen 17-cb0xxx", ALC285_FIXUP_HP_MUTE_LED),
6892	SND_PCI_QUIRK(0x103c, 0x860c, "HP ZBook 17 G6", ALC285_FIXUP_HP_GPIO_AMP_INIT),
6893	SND_PCI_QUIRK(0x103c, 0x860f, "HP ZBook 15 G6", ALC285_FIXUP_HP_GPIO_AMP_INIT),
6894	SND_PCI_QUIRK(0x103c, 0x861f, "HP Elite Dragonfly G1", ALC285_FIXUP_HP_GPIO_AMP_INIT),
6895	SND_PCI_QUIRK(0x103c, 0x869d, "HP", ALC236_FIXUP_HP_MUTE_LED),
6896	SND_PCI_QUIRK(0x103c, 0x86c1, "HP Laptop 15-da3001TU", ALC236_FIXUP_HP_MUTE_LED_COEFBIT2),
6897	SND_PCI_QUIRK(0x103c, 0x86c7, "HP Envy AiO 32", ALC274_FIXUP_HP_ENVY_GPIO),
6898	SND_PCI_QUIRK(0x103c, 0x86e7, "HP Spectre x360 15-eb0xxx", ALC285_FIXUP_HP_SPECTRE_X360_EB1),
6899	SND_PCI_QUIRK(0x103c, 0x863e, "HP Spectre x360 15-df1xxx", ALC285_FIXUP_HP_SPECTRE_X360_DF1),
6900	SND_PCI_QUIRK(0x103c, 0x86e8, "HP Spectre x360 15-eb0xxx", ALC285_FIXUP_HP_SPECTRE_X360_EB1),
6901	SND_PCI_QUIRK(0x103c, 0x86f9, "HP Spectre x360 13-aw0xxx", ALC285_FIXUP_HP_SPECTRE_X360_MUTE_LED),
6902	SND_PCI_QUIRK(0x103c, 0x8706, "HP Laptop 15s-eq1xxx", ALC236_FIXUP_HP_MUTE_LED_COEFBIT2),
6903	SND_PCI_QUIRK(0x103c, 0x8716, "HP Elite Dragonfly G2 Notebook PC", ALC285_FIXUP_HP_GPIO_AMP_INIT),
6904	SND_PCI_QUIRK(0x103c, 0x8720, "HP EliteBook x360 1040 G8 Notebook PC", ALC285_FIXUP_HP_GPIO_AMP_INIT),
6905	SND_PCI_QUIRK(0x103c, 0x8724, "HP EliteBook 850 G7", ALC285_FIXUP_HP_GPIO_LED),
6906	SND_PCI_QUIRK(0x103c, 0x8728, "HP EliteBook 840 G7", ALC285_FIXUP_HP_GPIO_LED),
6907	SND_PCI_QUIRK(0x103c, 0x8729, "HP", ALC285_FIXUP_HP_GPIO_LED),
6908	SND_PCI_QUIRK(0x103c, 0x8730, "HP ProBook 445 G7", ALC236_FIXUP_HP_MUTE_LED_MICMUTE_VREF),
6909	SND_PCI_QUIRK(0x103c, 0x8735, "HP ProBook 435 G7", ALC236_FIXUP_HP_MUTE_LED_MICMUTE_VREF),
6910	SND_PCI_QUIRK(0x103c, 0x8736, "HP", ALC285_FIXUP_HP_GPIO_AMP_INIT),
6911	SND_PCI_QUIRK(0x103c, 0x8756, "HP ENVY Laptop 13-ba0xxx", ALC245_FIXUP_HP_X360_MUTE_LEDS),
6912	SND_PCI_QUIRK(0x103c, 0x8760, "HP EliteBook 8{4,5}5 G7", ALC285_FIXUP_HP_BEEP_MICMUTE_LED),
6913	SND_PCI_QUIRK(0x103c, 0x876e, "HP ENVY x360 Convertible 13-ay0xxx", ALC245_FIXUP_HP_X360_MUTE_LEDS),
6914	SND_PCI_QUIRK(0x103c, 0x877a, "HP", ALC285_FIXUP_HP_MUTE_LED),
6915	SND_PCI_QUIRK(0x103c, 0x877d, "HP", ALC236_FIXUP_HP_MUTE_LED),
6916	SND_PCI_QUIRK(0x103c, 0x8780, "HP ZBook Fury 17 G7 Mobile Workstation",
6917		      ALC285_FIXUP_HP_GPIO_AMP_INIT),
6918	SND_PCI_QUIRK(0x103c, 0x8783, "HP ZBook Fury 15 G7 Mobile Workstation",
6919		      ALC285_FIXUP_HP_GPIO_AMP_INIT),
6920	SND_PCI_QUIRK(0x103c, 0x8786, "HP OMEN 15", ALC285_FIXUP_HP_MUTE_LED),
6921	SND_PCI_QUIRK(0x103c, 0x8787, "HP OMEN 15", ALC285_FIXUP_HP_MUTE_LED),
6922	SND_PCI_QUIRK(0x103c, 0x8788, "HP OMEN 15", ALC285_FIXUP_HP_MUTE_LED),
6923	SND_PCI_QUIRK(0x103c, 0x87b7, "HP Laptop 14-fq0xxx", ALC236_FIXUP_HP_MUTE_LED_COEFBIT2),
6924	SND_PCI_QUIRK(0x103c, 0x87c8, "HP", ALC287_FIXUP_HP_GPIO_LED),
6925	SND_PCI_QUIRK(0x103c, 0x87cb, "HP Pavilion 15-eg0xxx", ALC287_FIXUP_HP_GPIO_LED),
6926	SND_PCI_QUIRK(0x103c, 0x87cc, "HP Pavilion 15-eg0xxx", ALC287_FIXUP_HP_GPIO_LED),
6927	SND_PCI_QUIRK(0x103c, 0x87d3, "HP Laptop 15-gw0xxx", ALC236_FIXUP_HP_MUTE_LED_COEFBIT2),
6928	SND_PCI_QUIRK(0x103c, 0x87df, "HP ProBook 430 G8 Notebook PC", ALC236_FIXUP_HP_GPIO_LED),
6929	SND_PCI_QUIRK(0x103c, 0x87e5, "HP ProBook 440 G8 Notebook PC", ALC236_FIXUP_HP_GPIO_LED),
6930	SND_PCI_QUIRK(0x103c, 0x87e7, "HP ProBook 450 G8 Notebook PC", ALC236_FIXUP_HP_GPIO_LED),
6931	SND_PCI_QUIRK(0x103c, 0x87f1, "HP ProBook 630 G8 Notebook PC", ALC236_FIXUP_HP_GPIO_LED),
6932	SND_PCI_QUIRK(0x103c, 0x87f2, "HP ProBook 640 G8 Notebook PC", ALC236_FIXUP_HP_GPIO_LED),
6933	SND_PCI_QUIRK(0x103c, 0x87f4, "HP", ALC287_FIXUP_HP_GPIO_LED),
6934	SND_PCI_QUIRK(0x103c, 0x87f5, "HP", ALC287_FIXUP_HP_GPIO_LED),
6935	SND_PCI_QUIRK(0x103c, 0x87f6, "HP Spectre x360 14", ALC245_FIXUP_HP_X360_AMP),
6936	SND_PCI_QUIRK(0x103c, 0x87f7, "HP Spectre x360 14", ALC245_FIXUP_HP_X360_AMP),
6937	SND_PCI_QUIRK(0x103c, 0x87fd, "HP Laptop 14-dq2xxx", ALC236_FIXUP_HP_MUTE_LED_COEFBIT2),
6938	SND_PCI_QUIRK(0x103c, 0x87fe, "HP Laptop 15s-fq2xxx", ALC236_FIXUP_HP_MUTE_LED_COEFBIT2),
6939	SND_PCI_QUIRK(0x103c, 0x8805, "HP ProBook 650 G8 Notebook PC", ALC236_FIXUP_HP_GPIO_LED),
6940	SND_PCI_QUIRK(0x103c, 0x880d, "HP EliteBook 830 G8 Notebook PC", ALC285_FIXUP_HP_GPIO_LED),
6941	SND_PCI_QUIRK(0x103c, 0x8811, "HP Spectre x360 15-eb1xxx", ALC285_FIXUP_HP_SPECTRE_X360_EB1),
6942	SND_PCI_QUIRK(0x103c, 0x8812, "HP Spectre x360 15-eb1xxx", ALC285_FIXUP_HP_SPECTRE_X360_EB1),
6943	SND_PCI_QUIRK(0x103c, 0x881d, "HP 250 G8 Notebook PC", ALC236_FIXUP_HP_MUTE_LED_COEFBIT2),
6944	SND_PCI_QUIRK(0x103c, 0x881e, "HP Laptop 15s-du3xxx", ALC236_FIXUP_HP_MUTE_LED_COEFBIT2),
6945	SND_PCI_QUIRK(0x103c, 0x8846, "HP EliteBook 850 G8 Notebook PC", ALC285_FIXUP_HP_GPIO_LED),
6946	SND_PCI_QUIRK(0x103c, 0x8847, "HP EliteBook x360 830 G8 Notebook PC", ALC285_FIXUP_HP_GPIO_LED),
6947	SND_PCI_QUIRK(0x103c, 0x884b, "HP EliteBook 840 Aero G8 Notebook PC", ALC285_FIXUP_HP_GPIO_LED),
6948	SND_PCI_QUIRK(0x103c, 0x884c, "HP EliteBook 840 G8 Notebook PC", ALC285_FIXUP_HP_GPIO_LED),
6949	SND_PCI_QUIRK(0x103c, 0x8862, "HP ProBook 445 G8 Notebook PC", ALC236_FIXUP_HP_LIMIT_INT_MIC_BOOST),
6950	SND_PCI_QUIRK(0x103c, 0x8863, "HP ProBook 445 G8 Notebook PC", ALC236_FIXUP_HP_LIMIT_INT_MIC_BOOST),
6951	SND_PCI_QUIRK(0x103c, 0x886d, "HP ZBook Fury 17.3 Inch G8 Mobile Workstation PC", ALC285_FIXUP_HP_GPIO_AMP_INIT),
6952	SND_PCI_QUIRK(0x103c, 0x8870, "HP ZBook Fury 15.6 Inch G8 Mobile Workstation PC", ALC285_FIXUP_HP_GPIO_AMP_INIT),
6953	SND_PCI_QUIRK(0x103c, 0x8873, "HP ZBook Studio 15.6 Inch G8 Mobile Workstation PC", ALC285_FIXUP_HP_GPIO_AMP_INIT),
6954	SND_PCI_QUIRK(0x103c, 0x887a, "HP Laptop 15s-eq2xxx", ALC236_FIXUP_HP_MUTE_LED_COEFBIT2),
6955	SND_PCI_QUIRK(0x103c, 0x887c, "HP Laptop 14s-fq1xxx", ALC236_FIXUP_HP_MUTE_LED_COEFBIT2),
6956	SND_PCI_QUIRK(0x103c, 0x888a, "HP ENVY x360 Convertible 15-eu0xxx", ALC245_FIXUP_HP_X360_MUTE_LEDS),
6957	SND_PCI_QUIRK(0x103c, 0x888d, "HP ZBook Power 15.6 inch G8 Mobile Workstation PC", ALC236_FIXUP_HP_GPIO_LED),
6958	SND_PCI_QUIRK(0x103c, 0x8895, "HP EliteBook 855 G8 Notebook PC", ALC285_FIXUP_HP_SPEAKERS_MICMUTE_LED),
6959	SND_PCI_QUIRK(0x103c, 0x8896, "HP EliteBook 855 G8 Notebook PC", ALC285_FIXUP_HP_MUTE_LED),
6960	SND_PCI_QUIRK(0x103c, 0x8898, "HP EliteBook 845 G8 Notebook PC", ALC285_FIXUP_HP_LIMIT_INT_MIC_BOOST),
6961	SND_PCI_QUIRK(0x103c, 0x88b3, "HP ENVY x360 Convertible 15-es0xxx", ALC245_FIXUP_HP_ENVY_X360_MUTE_LED),
6962	SND_PCI_QUIRK(0x103c, 0x88d0, "HP Pavilion 15-eh1xxx (mainboard 88D0)", ALC287_FIXUP_HP_GPIO_LED),
6963	SND_PCI_QUIRK(0x103c, 0x88d1, "HP Pavilion 15-eh1xxx (mainboard 88D1)", ALC245_FIXUP_HP_MUTE_LED_V1_COEFBIT),
6964	SND_PCI_QUIRK(0x103c, 0x88dd, "HP Pavilion 15z-ec200", ALC285_FIXUP_HP_MUTE_LED),
6965	SND_PCI_QUIRK(0x103c, 0x88eb, "HP Victus 16-e0xxx", ALC245_FIXUP_HP_MUTE_LED_V2_COEFBIT),
6966	SND_PCI_QUIRK(0x103c, 0x8902, "HP OMEN 16", ALC285_FIXUP_HP_MUTE_LED),
6967	SND_PCI_QUIRK(0x103c, 0x890e, "HP 255 G8 Notebook PC", ALC236_FIXUP_HP_MUTE_LED_COEFBIT2),
6968	SND_PCI_QUIRK(0x103c, 0x8919, "HP Pavilion Aero Laptop 13-be0xxx", ALC287_FIXUP_HP_GPIO_LED),
6969	SND_PCI_QUIRK(0x103c, 0x896d, "HP ZBook Firefly 16 G9", ALC245_FIXUP_CS35L41_SPI_2_HP_GPIO_LED),
6970	SND_PCI_QUIRK(0x103c, 0x896e, "HP EliteBook x360 830 G9", ALC245_FIXUP_CS35L41_SPI_2_HP_GPIO_LED),
6971	SND_PCI_QUIRK(0x103c, 0x8971, "HP EliteBook 830 G9", ALC245_FIXUP_CS35L41_SPI_2_HP_GPIO_LED),
6972	SND_PCI_QUIRK(0x103c, 0x8972, "HP EliteBook 840 G9", ALC245_FIXUP_CS35L41_SPI_2_HP_GPIO_LED),
6973	SND_PCI_QUIRK(0x103c, 0x8973, "HP EliteBook 860 G9", ALC245_FIXUP_CS35L41_SPI_2_HP_GPIO_LED),
6974	SND_PCI_QUIRK(0x103c, 0x8974, "HP EliteBook 840 Aero G9", ALC245_FIXUP_CS35L41_SPI_2_HP_GPIO_LED),
6975	SND_PCI_QUIRK(0x103c, 0x8975, "HP EliteBook x360 840 Aero G9", ALC245_FIXUP_CS35L41_SPI_2_HP_GPIO_LED),
6976	SND_PCI_QUIRK(0x103c, 0x897d, "HP mt440 Mobile Thin Client U74", ALC236_FIXUP_HP_GPIO_LED),
6977	SND_PCI_QUIRK(0x103c, 0x8981, "HP Elite Dragonfly G3", ALC245_FIXUP_CS35L41_SPI_4),
6978	SND_PCI_QUIRK(0x103c, 0x898a, "HP Pavilion 15-eg100", ALC287_FIXUP_HP_GPIO_LED),
6979	SND_PCI_QUIRK(0x103c, 0x898e, "HP EliteBook 835 G9", ALC287_FIXUP_CS35L41_I2C_2),
6980	SND_PCI_QUIRK(0x103c, 0x898f, "HP EliteBook 835 G9", ALC287_FIXUP_CS35L41_I2C_2),
6981	SND_PCI_QUIRK(0x103c, 0x8991, "HP EliteBook 845 G9", ALC287_FIXUP_CS35L41_I2C_2_HP_GPIO_LED),
6982	SND_PCI_QUIRK(0x103c, 0x8992, "HP EliteBook 845 G9", ALC287_FIXUP_CS35L41_I2C_2),
6983	SND_PCI_QUIRK(0x103c, 0x8994, "HP EliteBook 855 G9", ALC287_FIXUP_CS35L41_I2C_2_HP_GPIO_LED),
6984	SND_PCI_QUIRK(0x103c, 0x8995, "HP EliteBook 855 G9", ALC287_FIXUP_CS35L41_I2C_2),
6985	SND_PCI_QUIRK(0x103c, 0x89a0, "HP Laptop 15-dw4xxx", ALC236_FIXUP_HP_MUTE_LED_COEFBIT2),
6986	SND_PCI_QUIRK(0x103c, 0x89a4, "HP ProBook 440 G9", ALC236_FIXUP_HP_GPIO_LED),
6987	SND_PCI_QUIRK(0x103c, 0x89a6, "HP ProBook 450 G9", ALC236_FIXUP_HP_GPIO_LED),
6988	SND_PCI_QUIRK(0x103c, 0x89aa, "HP EliteBook 630 G9", ALC236_FIXUP_HP_GPIO_LED),
6989	SND_PCI_QUIRK(0x103c, 0x89ac, "HP EliteBook 640 G9", ALC236_FIXUP_HP_GPIO_LED),
6990	SND_PCI_QUIRK(0x103c, 0x89ae, "HP EliteBook 650 G9", ALC236_FIXUP_HP_GPIO_LED),
6991	SND_PCI_QUIRK(0x103c, 0x89c0, "HP ZBook Power 15.6 G9", ALC245_FIXUP_CS35L41_SPI_2_HP_GPIO_LED),
6992	SND_PCI_QUIRK(0x103c, 0x89c3, "Zbook Studio G9", ALC245_FIXUP_CS35L41_SPI_4_HP_GPIO_LED),
6993	SND_PCI_QUIRK(0x103c, 0x89c6, "Zbook Fury 17 G9", ALC245_FIXUP_CS35L41_SPI_2_HP_GPIO_LED),
6994	SND_PCI_QUIRK(0x103c, 0x89ca, "HP", ALC236_FIXUP_HP_MUTE_LED_MICMUTE_VREF),
6995	SND_PCI_QUIRK(0x103c, 0x89d3, "HP EliteBook 645 G9 (MB 89D2)", ALC236_FIXUP_HP_MUTE_LED_MICMUTE_VREF),
6996	SND_PCI_QUIRK(0x103c, 0x89da, "HP Spectre x360 14t-ea100", ALC245_FIXUP_HP_SPECTRE_X360_EU0XXX),
6997	SND_PCI_QUIRK(0x103c, 0x89e7, "HP Elite x2 G9", ALC245_FIXUP_CS35L41_SPI_2_HP_GPIO_LED),
6998	SND_PCI_QUIRK(0x103c, 0x8a0f, "HP Pavilion 14-ec1xxx", ALC287_FIXUP_HP_GPIO_LED),
6999	SND_PCI_QUIRK(0x103c, 0x8a1f, "HP Laptop 14s-dr5xxx", ALC236_FIXUP_HP_MUTE_LED_COEFBIT2),
7000	SND_PCI_QUIRK(0x103c, 0x8a20, "HP Laptop 15s-fq5xxx", ALC236_FIXUP_HP_MUTE_LED_COEFBIT2),
7001	SND_PCI_QUIRK(0x103c, 0x8a25, "HP Victus 16-d1xxx (MB 8A25)", ALC245_FIXUP_HP_MUTE_LED_COEFBIT),
7002	SND_PCI_QUIRK(0x103c, 0x8a26, "HP Victus 16-d1xxx (MB 8A26)", ALC245_FIXUP_HP_MUTE_LED_COEFBIT),
7003	SND_PCI_QUIRK(0x103c, 0x8a28, "HP Envy 13", ALC287_FIXUP_CS35L41_I2C_2),
7004	SND_PCI_QUIRK(0x103c, 0x8a29, "HP Envy 15", ALC287_FIXUP_CS35L41_I2C_2),
7005	SND_PCI_QUIRK(0x103c, 0x8a2a, "HP Envy 15", ALC287_FIXUP_CS35L41_I2C_2),
7006	SND_PCI_QUIRK(0x103c, 0x8a2b, "HP Envy 15", ALC287_FIXUP_CS35L41_I2C_2),
7007	SND_PCI_QUIRK(0x103c, 0x8a2c, "HP Envy 16", ALC287_FIXUP_CS35L41_I2C_2),
7008	SND_PCI_QUIRK(0x103c, 0x8a2d, "HP Envy 16", ALC287_FIXUP_CS35L41_I2C_2),
7009	SND_PCI_QUIRK(0x103c, 0x8a2e, "HP Envy 16", ALC287_FIXUP_CS35L41_I2C_2),
7010	SND_PCI_QUIRK(0x103c, 0x8a30, "HP Envy 17", ALC287_FIXUP_CS35L41_I2C_2),
7011	SND_PCI_QUIRK(0x103c, 0x8a31, "HP Envy 15", ALC287_FIXUP_CS35L41_I2C_2),
7012	SND_PCI_QUIRK(0x103c, 0x8a34, "HP Pavilion x360 2-in-1 Laptop 14-ek0xxx", ALC245_FIXUP_HP_MUTE_LED_COEFBIT),
7013	SND_PCI_QUIRK(0x103c, 0x8a3d, "HP Victus 15-fb0xxx (MB 8A3D)", ALC245_FIXUP_HP_MUTE_LED_V2_COEFBIT),
7014	SND_PCI_QUIRK(0x103c, 0x8a4f, "HP Victus 15-fa0xxx (MB 8A4F)", ALC245_FIXUP_HP_MUTE_LED_COEFBIT),
7015	SND_PCI_QUIRK(0x103c, 0x8a6e, "HP EDNA 360", ALC287_FIXUP_CS35L41_I2C_4),
7016	SND_PCI_QUIRK(0x103c, 0x8a74, "HP ProBook 440 G8 Notebook PC", ALC236_FIXUP_HP_GPIO_LED),
7017	SND_PCI_QUIRK(0x103c, 0x8a75, "HP ProBook 450 G8 Notebook PC", ALC236_FIXUP_HP_GPIO_LED),
7018	SND_PCI_QUIRK(0x103c, 0x8a76, "HP ProBook 440 G8 Notebook PC", ALC236_FIXUP_HP_GPIO_LED),
7019	SND_PCI_QUIRK(0x103c, 0x8a77, "HP ProBook 450 G8 Notebook PC", ALC236_FIXUP_HP_GPIO_LED),
7020	SND_PCI_QUIRK(0x103c, 0x8a78, "HP Dev One", ALC285_FIXUP_HP_LIMIT_INT_MIC_BOOST),
7021	SND_PCI_QUIRK(0x103c, 0x8aa0, "HP ProBook 440 G9 (MB 8A9E)", ALC236_FIXUP_HP_GPIO_LED),
7022	SND_PCI_QUIRK(0x103c, 0x8aa3, "HP ProBook 450 G9 (MB 8AA1)", ALC236_FIXUP_HP_GPIO_LED),
7023	SND_PCI_QUIRK(0x103c, 0x8aa8, "HP EliteBook 640 G9 (MB 8AA6)", ALC236_FIXUP_HP_GPIO_LED),
7024	SND_PCI_QUIRK(0x103c, 0x8aab, "HP EliteBook 650 G9 (MB 8AA9)", ALC236_FIXUP_HP_GPIO_LED),
7025	SND_PCI_QUIRK(0x103c, 0x8ab9, "HP EliteBook 840 G8 (MB 8AB8)", ALC285_FIXUP_HP_GPIO_LED),
7026	SND_PCI_QUIRK(0x103c, 0x8abb, "HP ZBook Firefly 14 G9", ALC245_FIXUP_CS35L41_SPI_2_HP_GPIO_LED),
7027	SND_PCI_QUIRK(0x103c, 0x8ad1, "HP EliteBook 840 14 inch G9 Notebook PC", ALC245_FIXUP_CS35L41_SPI_2_HP_GPIO_LED),
7028	SND_PCI_QUIRK(0x103c, 0x8ad2, "HP EliteBook 860 16 inch G9 Notebook PC", ALC245_FIXUP_CS35L41_SPI_2_HP_GPIO_LED),
7029	SND_PCI_QUIRK(0x103c, 0x8ad8, "HP 800 G9", ALC245_FIXUP_CS35L41_SPI_2_HP_GPIO_LED),
7030	SND_PCI_QUIRK(0x103c, 0x8b0f, "HP Elite mt645 G7 Mobile Thin Client U81", ALC236_FIXUP_HP_MUTE_LED_MICMUTE_VREF),
7031	SND_PCI_QUIRK(0x103c, 0x8b2f, "HP 255 15.6 inch G10 Notebook PC", ALC236_FIXUP_HP_MUTE_LED_COEFBIT2),
7032	SND_PCI_QUIRK(0x103c, 0x8b3a, "HP Envy 15", ALC287_FIXUP_CS35L41_I2C_2),
7033	SND_PCI_QUIRK(0x103c, 0x8b3f, "HP mt440 Mobile Thin Client U91", ALC236_FIXUP_HP_GPIO_LED),
7034	SND_PCI_QUIRK(0x103c, 0x8b42, "HP", ALC245_FIXUP_CS35L41_SPI_2_HP_GPIO_LED),
7035	SND_PCI_QUIRK(0x103c, 0x8b43, "HP", ALC245_FIXUP_CS35L41_SPI_2_HP_GPIO_LED),
7036	SND_PCI_QUIRK(0x103c, 0x8b44, "HP", ALC245_FIXUP_CS35L41_SPI_2_HP_GPIO_LED),
7037	SND_PCI_QUIRK(0x103c, 0x8b45, "HP", ALC245_FIXUP_CS35L41_SPI_2_HP_GPIO_LED),
7038	SND_PCI_QUIRK(0x103c, 0x8b46, "HP", ALC245_FIXUP_CS35L41_SPI_2_HP_GPIO_LED),
7039	SND_PCI_QUIRK(0x103c, 0x8b47, "HP", ALC245_FIXUP_CS35L41_SPI_2_HP_GPIO_LED),
7040	SND_PCI_QUIRK(0x103c, 0x8b59, "HP Elite mt645 G7 Mobile Thin Client U89", ALC236_FIXUP_HP_MUTE_LED_MICMUTE_VREF),
7041	SND_PCI_QUIRK(0x103c, 0x8b5d, "HP", ALC236_FIXUP_HP_MUTE_LED_MICMUTE_VREF),
7042	SND_PCI_QUIRK(0x103c, 0x8b5e, "HP", ALC236_FIXUP_HP_MUTE_LED_MICMUTE_VREF),
7043	SND_PCI_QUIRK(0x103c, 0x8b5f, "HP", ALC236_FIXUP_HP_MUTE_LED_MICMUTE_VREF),
7044	SND_PCI_QUIRK(0x103c, 0x8b63, "HP Elite Dragonfly 13.5 inch G4", ALC245_FIXUP_CS35L41_SPI_4_HP_GPIO_LED),
7045	SND_PCI_QUIRK(0x103c, 0x8b65, "HP ProBook 455 15.6 inch G10 Notebook PC", ALC236_FIXUP_HP_MUTE_LED_MICMUTE_VREF),
7046	SND_PCI_QUIRK(0x103c, 0x8b66, "HP", ALC236_FIXUP_HP_MUTE_LED_MICMUTE_VREF),
7047	SND_PCI_QUIRK(0x103c, 0x8b70, "HP EliteBook 835 G10", ALC287_FIXUP_CS35L41_I2C_2_HP_GPIO_LED),
7048	SND_PCI_QUIRK(0x103c, 0x8b72, "HP EliteBook 845 G10", ALC287_FIXUP_CS35L41_I2C_2_HP_GPIO_LED),
7049	SND_PCI_QUIRK(0x103c, 0x8b74, "HP EliteBook 845W G10", ALC287_FIXUP_CS35L41_I2C_2_HP_GPIO_LED),
7050	SND_PCI_QUIRK(0x103c, 0x8b77, "HP ElieBook 865 G10", ALC287_FIXUP_CS35L41_I2C_2),
7051	SND_PCI_QUIRK(0x103c, 0x8b7a, "HP", ALC236_FIXUP_HP_GPIO_LED),
7052	SND_PCI_QUIRK(0x103c, 0x8b7d, "HP", ALC236_FIXUP_HP_GPIO_LED),
7053	SND_PCI_QUIRK(0x103c, 0x8b87, "HP", ALC236_FIXUP_HP_GPIO_LED),
7054	SND_PCI_QUIRK(0x103c, 0x8b8a, "HP", ALC236_FIXUP_HP_GPIO_LED),
7055	SND_PCI_QUIRK(0x103c, 0x8b8b, "HP", ALC236_FIXUP_HP_GPIO_LED),
7056	SND_PCI_QUIRK(0x103c, 0x8b8d, "HP", ALC236_FIXUP_HP_GPIO_LED),
7057	SND_PCI_QUIRK(0x103c, 0x8b8f, "HP", ALC245_FIXUP_CS35L41_SPI_4_HP_GPIO_LED),
7058	SND_PCI_QUIRK(0x103c, 0x8b92, "HP", ALC245_FIXUP_CS35L41_SPI_2_HP_GPIO_LED),
7059	SND_PCI_QUIRK(0x103c, 0x8b96, "HP", ALC236_FIXUP_HP_MUTE_LED_MICMUTE_VREF),
7060	SND_PCI_QUIRK(0x103c, 0x8b97, "HP", ALC236_FIXUP_HP_MUTE_LED_MICMUTE_VREF),
7061	SND_PCI_QUIRK(0x103c, 0x8bb3, "HP Slim OMEN", ALC287_FIXUP_CS35L41_I2C_2),
7062	SND_PCI_QUIRK(0x103c, 0x8bb4, "HP Slim OMEN", ALC287_FIXUP_CS35L41_I2C_2),
7063	SND_PCI_QUIRK(0x103c, 0x8bbe, "HP Victus 16-r0xxx (MB 8BBE)", ALC245_FIXUP_HP_MUTE_LED_COEFBIT),
7064	SND_PCI_QUIRK(0x103c, 0x8bc8, "HP Victus 15-fa1xxx", ALC245_FIXUP_HP_MUTE_LED_COEFBIT),
7065	SND_PCI_QUIRK(0x103c, 0x8bcd, "HP Omen 16-xd0xxx", ALC245_FIXUP_HP_MUTE_LED_V1_COEFBIT),
7066	SND_PCI_QUIRK(0x103c, 0x8bd4, "HP Victus 16-s0xxx (MB 8BD4)", ALC245_FIXUP_HP_MUTE_LED_COEFBIT),
7067	SND_PCI_QUIRK(0x103c, 0x8bd6, "HP Pavilion Aero Laptop 13z-be200", ALC287_FIXUP_HP_GPIO_LED),
7068	SND_PCI_QUIRK(0x103c, 0x8bdd, "HP Envy 17", ALC287_FIXUP_CS35L41_I2C_2),
7069	SND_PCI_QUIRK(0x103c, 0x8bde, "HP Envy 17", ALC287_FIXUP_CS35L41_I2C_2),
7070	SND_PCI_QUIRK(0x103c, 0x8bdf, "HP Envy 15", ALC287_FIXUP_CS35L41_I2C_2),
7071	SND_PCI_QUIRK(0x103c, 0x8be0, "HP Envy 15", ALC287_FIXUP_CS35L41_I2C_2),
7072	SND_PCI_QUIRK(0x103c, 0x8be1, "HP Envy 15", ALC287_FIXUP_CS35L41_I2C_2),
7073	SND_PCI_QUIRK(0x103c, 0x8be2, "HP Envy 15", ALC287_FIXUP_CS35L41_I2C_2),
7074	SND_PCI_QUIRK(0x103c, 0x8be3, "HP Envy 15", ALC287_FIXUP_CS35L41_I2C_2),
7075	SND_PCI_QUIRK(0x103c, 0x8be5, "HP Envy 16", ALC287_FIXUP_CS35L41_I2C_2),
7076	SND_PCI_QUIRK(0x103c, 0x8be6, "HP Envy 16", ALC287_FIXUP_CS35L41_I2C_2),
7077	SND_PCI_QUIRK(0x103c, 0x8be7, "HP Envy 17", ALC287_FIXUP_CS35L41_I2C_2),
7078	SND_PCI_QUIRK(0x103c, 0x8be8, "HP Envy 17", ALC287_FIXUP_CS35L41_I2C_2),
7079	SND_PCI_QUIRK(0x103c, 0x8be9, "HP Envy 15", ALC287_FIXUP_CS35L41_I2C_2),
7080	SND_PCI_QUIRK(0x103c, 0x8bf0, "HP", ALC236_FIXUP_HP_GPIO_LED),
7081	SND_PCI_QUIRK(0x103c, 0x8c15, "HP Spectre x360 2-in-1 Laptop 14-eu0xxx", ALC245_FIXUP_HP_SPECTRE_X360_EU0XXX),
7082	SND_PCI_QUIRK(0x103c, 0x8c16, "HP Spectre x360 2-in-1 Laptop 16-aa0xxx", ALC245_FIXUP_HP_SPECTRE_X360_16_AA0XXX),
7083	SND_PCI_QUIRK(0x103c, 0x8c17, "HP Spectre 16", ALC287_FIXUP_CS35L41_I2C_2),
7084	SND_PCI_QUIRK(0x103c, 0x8c21, "HP Pavilion Plus Laptop 14-ey0XXX", ALC245_FIXUP_HP_X360_MUTE_LEDS),
7085	SND_PCI_QUIRK(0x103c, 0x8c2d, "HP Victus 15-fa1xxx (MB 8C2D)", ALC245_FIXUP_HP_MUTE_LED_COEFBIT),
7086	SND_PCI_QUIRK(0x103c, 0x8c30, "HP Victus 15-fb1xxx", ALC245_FIXUP_HP_MUTE_LED_COEFBIT),
7087	SND_PCI_QUIRK(0x103c, 0x8c46, "HP EliteBook 830 G11", ALC245_FIXUP_CS35L41_SPI_2_HP_GPIO_LED),
7088	SND_PCI_QUIRK(0x103c, 0x8c47, "HP EliteBook 840 G11", ALC245_FIXUP_CS35L41_SPI_2_HP_GPIO_LED),
7089	SND_PCI_QUIRK(0x103c, 0x8c48, "HP EliteBook 860 G11", ALC245_FIXUP_CS35L41_SPI_2_HP_GPIO_LED),
7090	SND_PCI_QUIRK(0x103c, 0x8c49, "HP Elite x360 830 2-in-1 G11", ALC245_FIXUP_CS35L41_SPI_2_HP_GPIO_LED),
7091	SND_PCI_QUIRK(0x103c, 0x8c4d, "HP Omen", ALC287_FIXUP_CS35L41_I2C_2),
7092	SND_PCI_QUIRK(0x103c, 0x8c4e, "HP Omen", ALC287_FIXUP_CS35L41_I2C_2),
7093	SND_PCI_QUIRK(0x103c, 0x8c4f, "HP Envy 15", ALC287_FIXUP_CS35L41_I2C_2),
7094	SND_PCI_QUIRK(0x103c, 0x8c50, "HP Envy 17", ALC287_FIXUP_CS35L41_I2C_2),
7095	SND_PCI_QUIRK(0x103c, 0x8c51, "HP Envy 17", ALC287_FIXUP_CS35L41_I2C_2),
7096	SND_PCI_QUIRK(0x103c, 0x8c52, "HP EliteBook 1040 G11", ALC285_FIXUP_HP_GPIO_LED),
7097	SND_PCI_QUIRK(0x103c, 0x8c53, "HP Elite x360 1040 2-in-1 G11", ALC285_FIXUP_HP_GPIO_LED),
7098	SND_PCI_QUIRK(0x103c, 0x8c66, "HP Envy 16", ALC287_FIXUP_CS35L41_I2C_2),
7099	SND_PCI_QUIRK(0x103c, 0x8c67, "HP Envy 17", ALC287_FIXUP_CS35L41_I2C_2),
7100	SND_PCI_QUIRK(0x103c, 0x8c68, "HP Envy 17", ALC287_FIXUP_CS35L41_I2C_2),
7101	SND_PCI_QUIRK(0x103c, 0x8c6a, "HP Envy 16", ALC287_FIXUP_CS35L41_I2C_2),
7102	SND_PCI_QUIRK(0x103c, 0x8c70, "HP EliteBook 835 G11", ALC287_FIXUP_CS35L41_I2C_2_HP_GPIO_LED),
7103	SND_PCI_QUIRK(0x103c, 0x8c71, "HP EliteBook 845 G11", ALC287_FIXUP_CS35L41_I2C_2_HP_GPIO_LED),
7104	SND_PCI_QUIRK(0x103c, 0x8c72, "HP EliteBook 865 G11", ALC287_FIXUP_CS35L41_I2C_2_HP_GPIO_LED),
7105	SND_PCI_QUIRK(0x103c, 0x8c7b, "HP ProBook 445 G11", ALC236_FIXUP_HP_MUTE_LED_MICMUTE_VREF),
7106	SND_PCI_QUIRK(0x103c, 0x8c7c, "HP ProBook 445 G11", ALC236_FIXUP_HP_MUTE_LED_MICMUTE_VREF),
7107	SND_PCI_QUIRK(0x103c, 0x8c7d, "HP ProBook 465 G11", ALC236_FIXUP_HP_MUTE_LED_MICMUTE_VREF),
7108	SND_PCI_QUIRK(0x103c, 0x8c7e, "HP ProBook 465 G11", ALC236_FIXUP_HP_MUTE_LED_MICMUTE_VREF),
7109	SND_PCI_QUIRK(0x103c, 0x8c7f, "HP EliteBook 645 G11", ALC236_FIXUP_HP_MUTE_LED_MICMUTE_VREF),
7110	SND_PCI_QUIRK(0x103c, 0x8c80, "HP EliteBook 645 G11", ALC236_FIXUP_HP_MUTE_LED_MICMUTE_VREF),
7111	SND_PCI_QUIRK(0x103c, 0x8c81, "HP EliteBook 665 G11", ALC236_FIXUP_HP_MUTE_LED_MICMUTE_VREF),
7112	SND_PCI_QUIRK(0x103c, 0x8c89, "HP ProBook 460 G11", ALC236_FIXUP_HP_GPIO_LED),
7113	SND_PCI_QUIRK(0x103c, 0x8c8a, "HP EliteBook 630", ALC236_FIXUP_HP_GPIO_LED),
7114	SND_PCI_QUIRK(0x103c, 0x8c8c, "HP EliteBook 660", ALC236_FIXUP_HP_GPIO_LED),
7115	SND_PCI_QUIRK(0x103c, 0x8c8d, "HP ProBook 440 G11", ALC236_FIXUP_HP_GPIO_LED),
7116	SND_PCI_QUIRK(0x103c, 0x8c8e, "HP ProBook 460 G11", ALC236_FIXUP_HP_GPIO_LED),
7117	SND_PCI_QUIRK(0x103c, 0x8c8f, "HP EliteBook 630 G11", ALC236_FIXUP_HP_GPIO_LED),
7118	SND_PCI_QUIRK(0x103c, 0x8c90, "HP EliteBook 640", ALC236_FIXUP_HP_GPIO_LED),
7119	SND_PCI_QUIRK(0x103c, 0x8c91, "HP EliteBook 660", ALC236_FIXUP_HP_GPIO_LED),
7120	SND_PCI_QUIRK(0x103c, 0x8c96, "HP", ALC236_FIXUP_HP_MUTE_LED_MICMUTE_VREF),
7121	SND_PCI_QUIRK(0x103c, 0x8c97, "HP ZBook", ALC236_FIXUP_HP_MUTE_LED_MICMUTE_VREF),
7122	SND_PCI_QUIRK(0x103c, 0x8c99, "HP Victus 16-r1xxx (MB 8C99)", ALC245_FIXUP_HP_MUTE_LED_COEFBIT),
7123	SND_PCI_QUIRK(0x103c, 0x8c9c, "HP Victus 16-s1xxx (MB 8C9C)", ALC245_FIXUP_HP_MUTE_LED_COEFBIT),
7124	SND_PCI_QUIRK(0x103c, 0x8ca1, "HP ZBook Power", ALC236_FIXUP_HP_GPIO_LED),
7125	SND_PCI_QUIRK(0x103c, 0x8ca2, "HP ZBook Power", ALC236_FIXUP_HP_GPIO_LED),
7126	SND_PCI_QUIRK(0x103c, 0x8ca4, "HP ZBook Fury", ALC245_FIXUP_CS35L41_SPI_2_HP_GPIO_LED),
7127	SND_PCI_QUIRK(0x103c, 0x8ca7, "HP ZBook Fury", ALC245_FIXUP_CS35L41_SPI_2_HP_GPIO_LED),
7128	SND_PCI_QUIRK(0x103c, 0x8caf, "HP Elite mt645 G8 Mobile Thin Client", ALC236_FIXUP_HP_MUTE_LED_MICMUTE_VREF),
7129	SND_PCI_QUIRK(0x103c, 0x8cbd, "HP Pavilion Aero Laptop 13-bg0xxx", ALC245_FIXUP_HP_X360_MUTE_LEDS),
7130	SND_PCI_QUIRK(0x103c, 0x8cdd, "HP Spectre", ALC245_FIXUP_HP_SPECTRE_X360_EU0XXX),
7131	SND_PCI_QUIRK(0x103c, 0x8cde, "HP OmniBook Ultra Flip Laptop 14t", ALC245_FIXUP_HP_SPECTRE_X360_EU0XXX),
7132	SND_PCI_QUIRK(0x103c, 0x8cdf, "HP SnowWhite", ALC287_FIXUP_CS35L41_I2C_2_HP_GPIO_LED),
7133	SND_PCI_QUIRK(0x103c, 0x8ce0, "HP SnowWhite", ALC287_FIXUP_CS35L41_I2C_2_HP_GPIO_LED),
7134	SND_PCI_QUIRK(0x103c, 0x8cf5, "HP ZBook Studio 16", ALC245_FIXUP_CS35L41_SPI_4_HP_GPIO_LED),
7135	SND_PCI_QUIRK(0x103c, 0x8d01, "HP ZBook Power 14 G12", ALC285_FIXUP_HP_GPIO_LED),
7136	SND_PCI_QUIRK(0x103c, 0x8d07, "HP Victus 15-fb2xxx (MB 8D07)", ALC245_FIXUP_HP_MUTE_LED_COEFBIT),
7137	SND_PCI_QUIRK(0x103c, 0x8d18, "HP EliteStudio 8 AIO", ALC274_FIXUP_HP_AIO_BIND_DACS),
7138	SND_PCI_QUIRK(0x103c, 0x8d84, "HP EliteBook X G1i", ALC285_FIXUP_HP_GPIO_LED),
7139	SND_PCI_QUIRK(0x103c, 0x8d85, "HP EliteBook 14 G12", ALC285_FIXUP_HP_GPIO_LED),
7140	SND_PCI_QUIRK(0x103c, 0x8d86, "HP Elite X360 14 G12", ALC285_FIXUP_HP_GPIO_LED),
7141	SND_PCI_QUIRK(0x103c, 0x8d8c, "HP EliteBook 13 G12", ALC285_FIXUP_HP_GPIO_LED),
7142	SND_PCI_QUIRK(0x103c, 0x8d8d, "HP Elite X360 13 G12", ALC285_FIXUP_HP_GPIO_LED),
7143	SND_PCI_QUIRK(0x103c, 0x8d8e, "HP EliteBook 14 G12", ALC285_FIXUP_HP_GPIO_LED),
7144	SND_PCI_QUIRK(0x103c, 0x8d8f, "HP EliteBook 14 G12", ALC285_FIXUP_HP_GPIO_LED),
7145	SND_PCI_QUIRK(0x103c, 0x8d90, "HP EliteBook 16 G12", ALC285_FIXUP_HP_GPIO_LED),
7146	SND_PCI_QUIRK(0x103c, 0x8d91, "HP ZBook Firefly 14 G12", ALC285_FIXUP_HP_GPIO_LED),
7147	SND_PCI_QUIRK(0x103c, 0x8d92, "HP ZBook Firefly 16 G12", ALC285_FIXUP_HP_GPIO_LED),
7148	SND_PCI_QUIRK(0x103c, 0x8d9b, "HP 17 Turbine OmniBook 7 UMA", ALC287_FIXUP_CS35L41_I2C_2),
7149	SND_PCI_QUIRK(0x103c, 0x8d9c, "HP 17 Turbine OmniBook 7 DIS", ALC287_FIXUP_CS35L41_I2C_2),
7150	SND_PCI_QUIRK(0x103c, 0x8d9d, "HP 17 Turbine OmniBook X UMA", ALC287_FIXUP_CS35L41_I2C_2),
7151	SND_PCI_QUIRK(0x103c, 0x8d9e, "HP 17 Turbine OmniBook X DIS", ALC287_FIXUP_CS35L41_I2C_2),
7152	SND_PCI_QUIRK(0x103c, 0x8d9f, "HP 14 Cadet (x360)", ALC287_FIXUP_CS35L41_I2C_2),
7153	SND_PCI_QUIRK(0x103c, 0x8da0, "HP 16 Clipper OmniBook 7(X360)", ALC287_FIXUP_CS35L41_I2C_2),
7154	SND_PCI_QUIRK(0x103c, 0x8da1, "HP 16 Clipper OmniBook X", ALC287_FIXUP_CS35L41_I2C_2),
7155	SND_PCI_QUIRK(0x103c, 0x8da7, "HP 14 Enstrom OmniBook X", ALC287_FIXUP_CS35L41_I2C_2),
7156	SND_PCI_QUIRK(0x103c, 0x8da8, "HP 16 Piston OmniBook X", ALC287_FIXUP_CS35L41_I2C_2),
7157	SND_PCI_QUIRK(0x103c, 0x8dd4, "HP EliteStudio 8 AIO", ALC274_FIXUP_HP_AIO_BIND_DACS),
7158	SND_PCI_QUIRK(0x103c, 0x8dd7, "HP Laptop 15-fd0xxx", ALC236_FIXUP_HP_MUTE_LED_COEFBIT2),
7159	SND_PCI_QUIRK(0x103c, 0x8de8, "HP Gemtree", ALC245_FIXUP_TAS2781_SPI_2),
7160	SND_PCI_QUIRK(0x103c, 0x8de9, "HP Gemtree", ALC245_FIXUP_TAS2781_SPI_2),
7161	SND_PCI_QUIRK(0x103c, 0x8dec, "HP EliteBook 640 G12", ALC236_FIXUP_HP_GPIO_LED),
7162	SND_PCI_QUIRK(0x103c, 0x8ded, "HP EliteBook 640 G12", ALC236_FIXUP_HP_GPIO_LED),
7163	SND_PCI_QUIRK(0x103c, 0x8dee, "HP EliteBook 660 G12", ALC236_FIXUP_HP_GPIO_LED),
7164	SND_PCI_QUIRK(0x103c, 0x8def, "HP EliteBook 660 G12", ALC236_FIXUP_HP_GPIO_LED),
7165	SND_PCI_QUIRK(0x103c, 0x8df0, "HP EliteBook 630 G12", ALC236_FIXUP_HP_GPIO_LED),
7166	SND_PCI_QUIRK(0x103c, 0x8df1, "HP EliteBook 630 G12", ALC236_FIXUP_HP_GPIO_LED),
7167	SND_PCI_QUIRK(0x103c, 0x8dfb, "HP EliteBook 6 G1a 14", ALC236_FIXUP_HP_MUTE_LED_MICMUTE_VREF),
7168	SND_PCI_QUIRK(0x103c, 0x8dfc, "HP EliteBook 645 G12", ALC236_FIXUP_HP_GPIO_LED),
7169	SND_PCI_QUIRK(0x103c, 0x8dfd, "HP EliteBook 6 G1a 16", ALC236_FIXUP_HP_MUTE_LED_MICMUTE_VREF),
7170	SND_PCI_QUIRK(0x103c, 0x8dfe, "HP EliteBook 665 G12", ALC236_FIXUP_HP_GPIO_LED),
7171	SND_PCI_QUIRK(0x103c, 0x8e11, "HP Trekker", ALC287_FIXUP_CS35L41_I2C_2),
7172	SND_PCI_QUIRK(0x103c, 0x8e12, "HP Trekker", ALC287_FIXUP_CS35L41_I2C_2),
7173	SND_PCI_QUIRK(0x103c, 0x8e13, "HP Trekker", ALC287_FIXUP_CS35L41_I2C_2),
7174	SND_PCI_QUIRK(0x103c, 0x8e14, "HP ZBook Firefly 14 G12", ALC245_FIXUP_HP_ZBOOK_FIREFLY_G12A),
7175	SND_PCI_QUIRK(0x103c, 0x8e15, "HP ZBook Firefly 14 G12", ALC245_FIXUP_HP_ZBOOK_FIREFLY_G12A),
7176	SND_PCI_QUIRK(0x103c, 0x8e16, "HP ZBook Firefly 14 G12", ALC245_FIXUP_HP_ZBOOK_FIREFLY_G12A),
7177	SND_PCI_QUIRK(0x103c, 0x8e17, "HP ZBook Firefly 14 G12", ALC245_FIXUP_HP_ZBOOK_FIREFLY_G12A),
7178	SND_PCI_QUIRK(0x103c, 0x8e18, "HP ZBook Firefly 14 G12A", ALC245_FIXUP_HP_ZBOOK_FIREFLY_G12A),
7179	SND_PCI_QUIRK(0x103c, 0x8e19, "HP ZBook Firefly 14 G12A", ALC245_FIXUP_HP_ZBOOK_FIREFLY_G12A),
7180	SND_PCI_QUIRK(0x103c, 0x8e1a, "HP ZBook Firefly 14 G12A", ALC245_FIXUP_HP_ZBOOK_FIREFLY_G12A),
7181	SND_PCI_QUIRK(0x103c, 0x8e1b, "HP EliteBook G12", ALC245_FIXUP_HP_ZBOOK_FIREFLY_G12A),
7182	SND_PCI_QUIRK(0x103c, 0x8e1c, "HP EliteBook G12", ALC245_FIXUP_HP_ZBOOK_FIREFLY_G12A),
7183	SND_PCI_QUIRK(0x103c, 0x8e1d, "HP ZBook X Gli 16 G12", ALC236_FIXUP_HP_GPIO_LED),
7184	SND_PCI_QUIRK(0x103c, 0x8e2c, "HP EliteBook 16 G12", ALC285_FIXUP_HP_GPIO_LED),
7185	SND_PCI_QUIRK(0x103c, 0x8e36, "HP 14 Enstrom OmniBook X", ALC287_FIXUP_CS35L41_I2C_2),
7186	SND_PCI_QUIRK(0x103c, 0x8e37, "HP 16 Piston OmniBook X", ALC287_FIXUP_CS35L41_I2C_2),
7187	SND_PCI_QUIRK(0x103c, 0x8e3a, "HP Agusta", ALC287_FIXUP_CS35L41_I2C_2),
7188	SND_PCI_QUIRK(0x103c, 0x8e3b, "HP Agusta", ALC287_FIXUP_CS35L41_I2C_2),
7189	SND_PCI_QUIRK(0x103c, 0x8e60, "HP OmniBook 7 Laptop 16-bh0xxx", ALC245_FIXUP_CS35L41_I2C_2_MUTE_LED),
7190	SND_PCI_QUIRK(0x103c, 0x8e61, "HP Trekker ", ALC287_FIXUP_CS35L41_I2C_2),
7191	SND_PCI_QUIRK(0x103c, 0x8e62, "HP Trekker ", ALC287_FIXUP_CS35L41_I2C_2),
7192	SND_PCI_QUIRK(0x103c, 0x8e8a, "HP NexusX", ALC245_FIXUP_HP_TAS2781_I2C_MUTE_LED),
7193	SND_PCI_QUIRK(0x103c, 0x8e9c, "HP 16 Clipper OmniBook X X360", ALC287_FIXUP_CS35L41_I2C_2),
7194	SND_PCI_QUIRK(0x103c, 0x8e9d, "HP 17 Turbine OmniBook X UMA", ALC287_FIXUP_CS35L41_I2C_2),
7195	SND_PCI_QUIRK(0x103c, 0x8e9e, "HP 17 Turbine OmniBook X UMA", ALC287_FIXUP_CS35L41_I2C_2),
7196	SND_PCI_QUIRK(0x103c, 0x8eb6, "HP Abe A6U", ALC236_FIXUP_HP_MUTE_LED_MICMUTE_GPIO),
7197	SND_PCI_QUIRK(0x103c, 0x8eb8, "HP Abe A6U", ALC236_FIXUP_HP_MUTE_LED_MICMUTE_GPIO),
7198	SND_PCI_QUIRK(0x103c, 0x8ec1, "HP 200 G2i", ALC236_FIXUP_HP_MUTE_LED_MICMUTE_GPIO),
7199	SND_PCI_QUIRK(0x103c, 0x8ec4, "HP Bantie I6U", ALC236_FIXUP_HP_MUTE_LED_MICMUTE_GPIO),
7200	SND_PCI_QUIRK(0x103c, 0x8ec5, "HP Bantie I6U", ALC236_FIXUP_HP_MUTE_LED_MICMUTE_GPIO),
7201	SND_PCI_QUIRK(0x103c, 0x8ece, "HP Abe I6U", ALC236_FIXUP_HP_MUTE_LED_MICMUTE_GPIO),
7202	SND_PCI_QUIRK(0x103c, 0x8ecf, "HP Abe I6U", ALC236_FIXUP_HP_MUTE_LED_MICMUTE_GPIO),
7203	SND_PCI_QUIRK(0x103c, 0x8ed2, "HP Abe I6U", ALC236_FIXUP_HP_MUTE_LED_MICMUTE_GPIO),
7204	SND_PCI_QUIRK(0x103c, 0x8ed5, "HP EliteBook 8 Flip G2i 13", ALC245_FIXUP_HP_TAS2781_SPI_MUTE_LED),
7205	SND_PCI_QUIRK(0x103c, 0x8ed6, "HP EliteBook 8 G2i 13", ALC245_FIXUP_HP_TAS2781_SPI_MUTE_LED),
7206	SND_PCI_QUIRK(0x103c, 0x8ed7, "HP EliteBook 8 G2i 14", ALC245_FIXUP_HP_TAS2781_SPI_MUTE_LED),
7207	SND_PCI_QUIRK(0x103c, 0x8ed8, "HP EliteBook 8 G2i 16", ALC245_FIXUP_HP_TAS2781_SPI_MUTE_LED),
7208	SND_PCI_QUIRK(0x103c, 0x8ed9, "HP ZBook Firefly 14W", ALC245_FIXUP_HP_TAS2781_SPI_MUTE_LED),
7209	SND_PCI_QUIRK(0x103c, 0x8eda, "HP ZBook Firefly 16W", ALC245_FIXUP_HP_TAS2781_SPI_MUTE_LED),
7210	SND_PCI_QUIRK(0x103c, 0x8ee4, "HP Bantie A6U", ALC236_FIXUP_HP_MUTE_LED_MICMUTE_GPIO),
7211	SND_PCI_QUIRK(0x103c, 0x8ee5, "HP Bantie A6U", ALC236_FIXUP_HP_MUTE_LED_MICMUTE_GPIO),
7212	SND_PCI_QUIRK(0x103c, 0x8ee7, "HP Abe A6U", ALC236_FIXUP_HP_MUTE_LED_MICMUTE_GPIO),
7213	SND_PCI_QUIRK(0x103c, 0x8f0c, "HP ZBook X G2i 16W", ALC236_FIXUP_HP_GPIO_LED),
7214	SND_PCI_QUIRK(0x103c, 0x8f0e, "HP ZBook X G2i 16W", ALC236_FIXUP_HP_GPIO_LED),
7215	SND_PCI_QUIRK(0x103c, 0x8f40, "HP ZBook 8 G2a 14", ALC245_FIXUP_HP_TAS2781_I2C_MUTE_LED),
7216	SND_PCI_QUIRK(0x103c, 0x8f41, "HP ZBook 8 G2a 16", ALC245_FIXUP_HP_TAS2781_I2C_MUTE_LED),
7217	SND_PCI_QUIRK(0x103c, 0x8f42, "HP ZBook 8 G2a 14W", ALC245_FIXUP_HP_TAS2781_I2C_MUTE_LED),
7218	SND_PCI_QUIRK(0x103c, 0x8f57, "HP Trekker G7JC", ALC287_FIXUP_CS35L41_I2C_2),
7219	SND_PCI_QUIRK(0x103c, 0x8f62, "HP ZBook 8 G2a 16W", ALC245_FIXUP_HP_TAS2781_I2C_MUTE_LED),
7220	SND_PCI_QUIRK(0x1043, 0x1024, "ASUS Zephyrus G14 2025", ALC285_FIXUP_ASUS_GA403U_HEADSET_MIC),
7221	SND_PCI_QUIRK(0x1043, 0x1032, "ASUS VivoBook X513EA", ALC256_FIXUP_ASUS_MIC_NO_PRESENCE),
7222	SND_PCI_QUIRK(0x1043, 0x1034, "ASUS GU605C", ALC285_FIXUP_ASUS_GU605_SPI_SPEAKER2_TO_DAC1),
7223	SND_PCI_QUIRK(0x1043, 0x103e, "ASUS X540SA", ALC256_FIXUP_ASUS_MIC),
7224	SND_PCI_QUIRK(0x1043, 0x103f, "ASUS TX300", ALC282_FIXUP_ASUS_TX300),
7225	SND_PCI_QUIRK(0x1043, 0x1054, "ASUS G614FH/FM/FP", ALC287_FIXUP_CS35L41_I2C_2),
7226	SND_PCI_QUIRK(0x1043, 0x106d, "Asus K53BE", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
7227	SND_PCI_QUIRK(0x1043, 0x106f, "ASUS VivoBook X515UA", ALC256_FIXUP_ASUS_MIC_NO_PRESENCE),
7228	SND_PCI_QUIRK(0x1043, 0x1074, "ASUS G614PH/PM/PP", ALC287_FIXUP_CS35L41_I2C_2),
7229	SND_PCI_QUIRK(0x1043, 0x10a1, "ASUS UX391UA", ALC294_FIXUP_ASUS_SPK),
7230	SND_PCI_QUIRK(0x1043, 0x10a4, "ASUS TP3407SA", ALC287_FIXUP_TAS2781_I2C),
7231	SND_PCI_QUIRK(0x1043, 0x10c0, "ASUS X540SA", ALC256_FIXUP_ASUS_MIC),
7232	SND_PCI_QUIRK(0x1043, 0x10d0, "ASUS X540LA/X540LJ", ALC255_FIXUP_ASUS_MIC_NO_PRESENCE),
7233	SND_PCI_QUIRK(0x1043, 0x10d3, "ASUS K6500ZC", ALC294_FIXUP_ASUS_SPK),
7234	SND_PCI_QUIRK(0x1043, 0x1154, "ASUS TP3607SH", ALC287_FIXUP_TAS2781_I2C),
7235	SND_PCI_QUIRK(0x1043, 0x115d, "Asus 1015E", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
7236	SND_PCI_QUIRK(0x1043, 0x1194, "ASUS UM3406KA", ALC287_FIXUP_CS35L41_I2C_2),
7237	SND_PCI_QUIRK(0x1043, 0x11c0, "ASUS X556UR", ALC255_FIXUP_ASUS_MIC_NO_PRESENCE),
7238	HDA_CODEC_QUIRK(0x1043, 0x1204, "ASUS Strix G16 G615JMR", ALC287_FIXUP_TXNW2781_I2C_ASUS),
7239	SND_PCI_QUIRK(0x1043, 0x1204, "ASUS Strix G615JHR_JMR_JPR", ALC287_FIXUP_TAS2781_I2C),
7240	SND_PCI_QUIRK(0x1043, 0x1214, "ASUS Strix G615LH_LM_LP", ALC287_FIXUP_TAS2781_I2C),
7241	SND_PCI_QUIRK(0x1043, 0x125e, "ASUS Q524UQK", ALC255_FIXUP_ASUS_MIC_NO_PRESENCE),
7242	SND_PCI_QUIRK(0x1043, 0x1271, "ASUS X430UN", ALC256_FIXUP_ASUS_MIC_NO_PRESENCE),
7243	SND_PCI_QUIRK(0x1043, 0x1290, "ASUS X441SA", ALC233_FIXUP_EAPD_COEF_AND_MIC_NO_PRESENCE),
7244	SND_PCI_QUIRK(0x1043, 0x1294, "ASUS B3405CVA", ALC245_FIXUP_CS35L41_SPI_2),
7245	SND_PCI_QUIRK(0x1043, 0x12a0, "ASUS X441UV", ALC233_FIXUP_EAPD_COEF_AND_MIC_NO_PRESENCE),
7246	SND_PCI_QUIRK(0x1043, 0x12a3, "Asus N7691ZM", ALC269_FIXUP_ASUS_N7601ZM),
7247	SND_PCI_QUIRK(0x1043, 0x12af, "ASUS UX582ZS", ALC245_FIXUP_CS35L41_SPI_2),
7248	SND_PCI_QUIRK(0x1043, 0x12b4, "ASUS B3405CCA / P3405CCA", ALC294_FIXUP_ASUS_CS35L41_SPI_2),
7249	SND_PCI_QUIRK(0x1043, 0x12e0, "ASUS X541SA", ALC256_FIXUP_ASUS_MIC_NO_PRESENCE),
7250	SND_PCI_QUIRK(0x1043, 0x12f0, "ASUS X541UV", ALC256_FIXUP_ASUS_MIC_NO_PRESENCE),
7251	SND_PCI_QUIRK(0x1043, 0x1313, "Asus K42JZ", ALC269VB_FIXUP_ASUS_MIC_NO_PRESENCE),
7252	SND_PCI_QUIRK(0x1043, 0x1314, "ASUS GA605K", ALC285_FIXUP_ASUS_GA605K_HEADSET_MIC),
7253	SND_PCI_QUIRK(0x1043, 0x1384, "ASUS RC73XA", ALC287_FIXUP_TXNW2781_I2C_ASUS),
7254	SND_PCI_QUIRK(0x1043, 0x1394, "ASUS RC73YA", ALC287_FIXUP_TXNW2781_I2C_ASUS),
7255	SND_PCI_QUIRK(0x1043, 0x13b0, "ASUS Z550SA", ALC256_FIXUP_ASUS_MIC_NO_PRESENCE),
7256	SND_PCI_QUIRK(0x1043, 0x1427, "Asus Zenbook UX31E", ALC269VB_FIXUP_ASUS_ZENBOOK),
7257	SND_PCI_QUIRK(0x1043, 0x1433, "ASUS GX650PY/PZ/PV/PU/PYV/PZV/PIV/PVV", ALC285_FIXUP_ASUS_I2C_HEADSET_MIC),
7258	SND_PCI_QUIRK(0x1043, 0x1454, "ASUS PM3406CKA", ALC287_FIXUP_CS35L41_I2C_2),
7259	SND_PCI_QUIRK(0x1043, 0x1460, "Asus VivoBook 15", ALC256_FIXUP_ASUS_MIC_NO_PRESENCE),
7260	SND_PCI_QUIRK(0x1043, 0x1463, "Asus GA402X/GA402N", ALC285_FIXUP_ASUS_I2C_HEADSET_MIC),
7261	SND_PCI_QUIRK(0x1043, 0x1473, "ASUS GU604VI/VC/VE/VG/VJ/VQ/VU/VV/VY/VZ", ALC285_FIXUP_ASUS_HEADSET_MIC),
7262	SND_PCI_QUIRK(0x1043, 0x1483, "ASUS GU603VQ/VU/VV/VJ/VI", ALC285_FIXUP_ASUS_HEADSET_MIC),
7263	SND_PCI_QUIRK(0x1043, 0x1493, "ASUS GV601VV/VU/VJ/VQ/VI", ALC285_FIXUP_ASUS_HEADSET_MIC),
7264	SND_PCI_QUIRK(0x1043, 0x14d3, "ASUS G614JY/JZ/JG", ALC245_FIXUP_CS35L41_SPI_2),
7265	SND_PCI_QUIRK(0x1043, 0x14e3, "ASUS G513PI/PU/PV", ALC287_FIXUP_CS35L41_I2C_2),
7266	SND_PCI_QUIRK(0x1043, 0x14f2, "ASUS VivoBook X515JA", ALC256_FIXUP_ASUS_MIC_NO_PRESENCE),
7267	SND_PCI_QUIRK(0x1043, 0x1503, "ASUS G733PY/PZ/PZV/PYV", ALC287_FIXUP_CS35L41_I2C_2),
7268	SND_PCI_QUIRK(0x1043, 0x1514, "ASUS ROG Flow Z13 GZ302EAC", ALC287_FIXUP_CS35L41_I2C_2),
7269	SND_PCI_QUIRK(0x1043, 0x1517, "Asus Zenbook UX31A", ALC269VB_FIXUP_ASUS_ZENBOOK_UX31A),
7270	SND_PCI_QUIRK(0x1043, 0x1533, "ASUS GV302XA/XJ/XQ/XU/XV/XI", ALC287_FIXUP_CS35L41_I2C_2),
7271	SND_PCI_QUIRK(0x1043, 0x1573, "ASUS GZ301VV/VQ/VU/VJ/VA/VC/VE/VVC/VQC/VUC/VJC/VEC/VCC", ALC285_FIXUP_ASUS_HEADSET_MIC),
7272	SND_PCI_QUIRK(0x1043, 0x1584, "ASUS UM3406GA ", ALC287_FIXUP_CS35L41_I2C_2),
7273	SND_PCI_QUIRK(0x1043, 0x1602, "ASUS ROG Strix SCAR 15", ALC285_FIXUP_ASUS_G533Z_PINS),
7274	SND_PCI_QUIRK(0x1043, 0x1652, "ASUS ROG Zephyrus Do 15 SE", ALC289_FIXUP_ASUS_ZEPHYRUS_DUAL_SPK),
7275	SND_PCI_QUIRK(0x1043, 0x1662, "ASUS GV301QH", ALC294_FIXUP_ASUS_DUAL_SPK),
7276	SND_PCI_QUIRK(0x1043, 0x1663, "ASUS GU603ZI/ZJ/ZQ/ZU/ZV", ALC285_FIXUP_ASUS_HEADSET_MIC),
7277	SND_PCI_QUIRK(0x1043, 0x1683, "ASUS UM3402YAR", ALC287_FIXUP_CS35L41_I2C_2),
7278	SND_PCI_QUIRK(0x1043, 0x16a3, "ASUS UX3402VA", ALC245_FIXUP_CS35L41_SPI_2),
7279	SND_PCI_QUIRK(0x1043, 0x16b2, "ASUS GU603", ALC289_FIXUP_ASUS_GA401),
7280	SND_PCI_QUIRK(0x1043, 0x16d3, "ASUS UX5304VA", ALC245_FIXUP_CS35L41_SPI_2),
7281	SND_PCI_QUIRK(0x1043, 0x16e3, "ASUS UX50", ALC269_FIXUP_STEREO_DMIC),
7282	SND_PCI_QUIRK(0x1043, 0x16f3, "ASUS UX7602VI/BZ", ALC245_FIXUP_CS35L41_SPI_2),
7283	SND_PCI_QUIRK(0x1043, 0x1740, "ASUS UX430UA", ALC295_FIXUP_ASUS_DACS),
7284	SND_PCI_QUIRK(0x1043, 0x17d1, "ASUS UX431FL", ALC294_FIXUP_ASUS_DUAL_SPK),
7285	SND_PCI_QUIRK(0x1043, 0x17f3, "ROG Ally NR2301L/X", ALC294_FIXUP_ASUS_ALLY),
7286	SND_PCI_QUIRK(0x1043, 0x1863, "ASUS UX6404VI/VV", ALC245_FIXUP_CS35L41_SPI_2),
7287	SND_PCI_QUIRK(0x1043, 0x1881, "ASUS Zephyrus S/M", ALC294_FIXUP_ASUS_GX502_PINS),
7288	SND_PCI_QUIRK(0x1043, 0x18b1, "Asus MJ401TA", ALC256_FIXUP_ASUS_HEADSET_MIC),
7289	SND_PCI_QUIRK(0x1043, 0x18d3, "ASUS UM3504DA", ALC294_FIXUP_CS35L41_I2C_2),
7290	SND_PCI_QUIRK(0x1043, 0x18f1, "Asus FX505DT", ALC256_FIXUP_ASUS_HEADSET_MIC),
7291	SND_PCI_QUIRK(0x1043, 0x194e, "ASUS UX563FD", ALC294_FIXUP_ASUS_HPE),
7292	SND_PCI_QUIRK(0x1043, 0x1970, "ASUS UX550VE", ALC289_FIXUP_ASUS_GA401),
7293	SND_PCI_QUIRK(0x1043, 0x1982, "ASUS B1400CEPE", ALC256_FIXUP_ASUS_HPE),
7294	SND_PCI_QUIRK(0x1043, 0x19ce, "ASUS B9450FA", ALC294_FIXUP_ASUS_HPE),
7295	SND_PCI_QUIRK(0x1043, 0x19e1, "ASUS UX581LV", ALC295_FIXUP_ASUS_MIC_NO_PRESENCE),
7296	SND_PCI_QUIRK(0x1043, 0x1a13, "Asus G73Jw", ALC269_FIXUP_ASUS_G73JW),
7297	SND_PCI_QUIRK(0x1043, 0x1a63, "ASUS UX3405MA", ALC294_FIXUP_ASUS_SPI_HEADSET_MIC),
7298	SND_PCI_QUIRK(0x1043, 0x1a83, "ASUS UM5302LA", ALC294_FIXUP_CS35L41_I2C_2),
7299	SND_PCI_QUIRK(0x1043, 0x1a8e, "ASUS G712LWS", ALC294_FIXUP_LENOVO_MIC_LOCATION),
7300	SND_PCI_QUIRK(0x1043, 0x1a8f, "ASUS UX582ZS", ALC245_FIXUP_CS35L41_SPI_2),
7301	SND_PCI_QUIRK(0x1043, 0x1b11, "ASUS UX431DA", ALC294_FIXUP_ASUS_COEF_1B),
7302	SND_PCI_QUIRK(0x1043, 0x1b13, "ASUS U41SV/GA403U", ALC285_FIXUP_ASUS_GA403U_HEADSET_MIC),
7303	SND_PCI_QUIRK(0x1043, 0x1b93, "ASUS G614JVR/JIR", ALC245_FIXUP_CS35L41_SPI_2),
7304	SND_PCI_QUIRK(0x1043, 0x1bbd, "ASUS Z550MA", ALC255_FIXUP_ASUS_MIC_NO_PRESENCE),
7305	SND_PCI_QUIRK(0x1043, 0x1c03, "ASUS UM3406HA", ALC294_FIXUP_ASUS_I2C_HEADSET_MIC),
7306	SND_PCI_QUIRK(0x1043, 0x1c23, "Asus X55U", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
7307	SND_PCI_QUIRK(0x1043, 0x1c33, "ASUS UX5304MA", ALC245_FIXUP_CS35L41_SPI_2),
7308	SND_PCI_QUIRK(0x1043, 0x1c43, "ASUS UX8406MA", ALC245_FIXUP_CS35L41_SPI_2),
7309	SND_PCI_QUIRK(0x1043, 0x1c62, "ASUS GU603", ALC289_FIXUP_ASUS_GA401),
7310	SND_PCI_QUIRK(0x1043, 0x1c63, "ASUS GU605M", ALC285_FIXUP_ASUS_GU605_SPI_SPEAKER2_TO_DAC1),
7311	SND_PCI_QUIRK(0x1043, 0x1c80, "ASUS VivoBook TP401", ALC256_FIXUP_ASUS_MIC_NO_PRESENCE),
7312	SND_PCI_QUIRK(0x1043, 0x1c92, "ASUS ROG Strix G15", ALC285_FIXUP_ASUS_G533Z_PINS),
7313	SND_PCI_QUIRK(0x1043, 0x1c9f, "ASUS G614JU/JV/JI", ALC285_FIXUP_ASUS_HEADSET_MIC),
7314	SND_PCI_QUIRK(0x1043, 0x1caf, "ASUS G634JY/JZ/JI/JG", ALC285_FIXUP_ASUS_SPI_REAR_SPEAKERS),
7315	SND_PCI_QUIRK(0x1043, 0x1ccd, "ASUS X555UB", ALC256_FIXUP_ASUS_MIC_NO_PRESENCE),
7316	SND_PCI_QUIRK(0x1043, 0x1ccf, "ASUS G814JU/JV/JI", ALC245_FIXUP_CS35L41_SPI_2),
7317	SND_PCI_QUIRK(0x1043, 0x1cdf, "ASUS G814JY/JZ/JG", ALC245_FIXUP_CS35L41_SPI_2),
7318	SND_PCI_QUIRK(0x1043, 0x1cef, "ASUS G834JY/JZ/JI/JG", ALC285_FIXUP_ASUS_HEADSET_MIC),
7319	SND_PCI_QUIRK(0x1043, 0x1d1f, "ASUS G713PI/PU/PV/PVN", ALC287_FIXUP_CS35L41_I2C_2),
7320	SND_PCI_QUIRK(0x1043, 0x1d42, "ASUS Zephyrus G14 2022", ALC289_FIXUP_ASUS_GA401),
7321	SND_PCI_QUIRK(0x1043, 0x1d4e, "ASUS TM420", ALC256_FIXUP_ASUS_HPE),
7322	SND_PCI_QUIRK(0x1043, 0x1da2, "ASUS UP6502ZA/ZD", ALC245_FIXUP_CS35L41_SPI_2),
7323	SND_PCI_QUIRK(0x1043, 0x1df3, "ASUS UM5606WA", ALC294_FIXUP_BASS_SPEAKER_15),
7324	SND_PCI_QUIRK(0x1043, 0x1264, "ASUS UM5606KA", ALC294_FIXUP_BASS_SPEAKER_15),
7325	SND_PCI_QUIRK(0x1043, 0x1e02, "ASUS UX3402ZA", ALC245_FIXUP_CS35L41_SPI_2),
7326	SND_PCI_QUIRK(0x1043, 0x1e10, "ASUS VivoBook X507UAR", ALC256_FIXUP_ASUS_MIC_NO_PRESENCE),
7327	SND_PCI_QUIRK(0x1043, 0x1e11, "ASUS Zephyrus G15", ALC289_FIXUP_ASUS_GA502),
7328	SND_PCI_QUIRK(0x1043, 0x1e12, "ASUS UM3402", ALC287_FIXUP_CS35L41_I2C_2),
7329	SND_PCI_QUIRK(0x1043, 0x1e1f, "ASUS Vivobook 15 X1504VAP", ALC2XX_FIXUP_HEADSET_MIC),
7330	SND_PCI_QUIRK(0x1043, 0x1e51, "ASUS Zephyrus M15", ALC294_FIXUP_ASUS_GU502_PINS),
7331	SND_PCI_QUIRK(0x1043, 0x1e5e, "ASUS ROG Strix G513", ALC294_FIXUP_ASUS_G513_PINS),
7332	SND_PCI_QUIRK(0x1043, 0x1e63, "ASUS H7606W", ALC285_FIXUP_ASUS_GU605_SPI_SPEAKER2_TO_DAC1),
7333	SND_PCI_QUIRK(0x1043, 0x1e83, "ASUS GA605W", ALC285_FIXUP_ASUS_GU605_SPI_SPEAKER2_TO_DAC1),
7334	SND_PCI_QUIRK(0x1043, 0x1e8e, "ASUS Zephyrus G15", ALC289_FIXUP_ASUS_GA401),
7335	SND_PCI_QUIRK(0x1043, 0x1e93, "ASUS ExpertBook B9403CVAR", ALC294_FIXUP_ASUS_HPE),
7336	SND_PCI_QUIRK(0x1043, 0x1eb3, "ASUS Ally RCLA72", ALC287_FIXUP_TAS2781_I2C),
7337	SND_PCI_QUIRK(0x1043, 0x1ed3, "ASUS HN7306W", ALC287_FIXUP_CS35L41_I2C_2),
7338	HDA_CODEC_QUIRK(0x1043, 0x1ee2, "ASUS UM6702RA/RC", ALC285_FIXUP_ASUS_I2C_SPEAKER2_TO_DAC1),
7339	SND_PCI_QUIRK(0x1043, 0x1ee2, "ASUS UM6702RA/RC", ALC287_FIXUP_CS35L41_I2C_2),
7340	SND_PCI_QUIRK(0x1043, 0x1c52, "ASUS Zephyrus G15 2022", ALC289_FIXUP_ASUS_GA401),
7341	SND_PCI_QUIRK(0x1043, 0x1f11, "ASUS Zephyrus G14", ALC289_FIXUP_ASUS_GA401),
7342	SND_PCI_QUIRK(0x1043, 0x1f12, "ASUS UM5302", ALC287_FIXUP_CS35L41_I2C_2),
7343	SND_PCI_QUIRK(0x1043, 0x1f1f, "ASUS H7604JI/JV/J3D", ALC245_FIXUP_CS35L41_SPI_2),
7344	SND_PCI_QUIRK(0x1043, 0x1f62, "ASUS UX7602ZM", ALC245_FIXUP_CS35L41_SPI_2),
7345	SND_PCI_QUIRK(0x1043, 0x1f63, "ASUS P5405CSA", ALC245_FIXUP_CS35L41_SPI_2),
7346	SND_PCI_QUIRK(0x1043, 0x1f92, "ASUS ROG Flow X16", ALC289_FIXUP_ASUS_GA401),
7347	SND_PCI_QUIRK(0x1043, 0x1fb3, "ASUS ROG Flow Z13 GZ302EA", ALC287_FIXUP_CS35L41_I2C_2),
7348	SND_PCI_QUIRK(0x1043, 0x3011, "ASUS B5605CVA", ALC245_FIXUP_CS35L41_SPI_2),
7349	SND_PCI_QUIRK(0x1043, 0x3030, "ASUS ZN270IE", ALC256_FIXUP_ASUS_AIO_GPIO2),
7350	SND_PCI_QUIRK(0x1043, 0x3061, "ASUS B3405CCA", ALC294_FIXUP_ASUS_CS35L41_SPI_2),
7351	SND_PCI_QUIRK(0x1043, 0x3071, "ASUS B5405CCA", ALC294_FIXUP_ASUS_CS35L41_SPI_2),
7352	SND_PCI_QUIRK(0x1043, 0x30c1, "ASUS B3605CCA / P3605CCA", ALC294_FIXUP_ASUS_CS35L41_SPI_2),
7353	SND_PCI_QUIRK(0x1043, 0x30d1, "ASUS B5405CCA", ALC294_FIXUP_ASUS_CS35L41_SPI_2),
7354	SND_PCI_QUIRK(0x1043, 0x30e1, "ASUS B5605CCA", ALC294_FIXUP_ASUS_CS35L41_SPI_2),
7355	SND_PCI_QUIRK(0x1043, 0x31d0, "ASUS Zen AIO 27 Z272SD_A272SD", ALC274_FIXUP_ASUS_ZEN_AIO_27),
7356	SND_PCI_QUIRK(0x1043, 0x31e1, "ASUS B5605CCA", ALC294_FIXUP_ASUS_CS35L41_SPI_2),
7357	SND_PCI_QUIRK(0x1043, 0x31f1, "ASUS B3605CCA", ALC294_FIXUP_ASUS_CS35L41_SPI_2),
7358	SND_PCI_QUIRK(0x1043, 0x3391, "ASUS PM3606CKA", ALC287_FIXUP_CS35L41_I2C_2),
7359	SND_PCI_QUIRK(0x1043, 0x3a20, "ASUS G614JZR", ALC285_FIXUP_ASUS_SPI_REAR_SPEAKERS),
7360	SND_PCI_QUIRK(0x1043, 0x3a30, "ASUS G814JVR/JIR", ALC285_FIXUP_ASUS_SPI_REAR_SPEAKERS),
7361	SND_PCI_QUIRK(0x1043, 0x3a40, "ASUS G814JZR", ALC285_FIXUP_ASUS_SPI_REAR_SPEAKERS),
7362	SND_PCI_QUIRK(0x1043, 0x3a50, "ASUS G834JYR/JZR", ALC285_FIXUP_ASUS_SPI_REAR_SPEAKERS),
7363	SND_PCI_QUIRK(0x1043, 0x3a60, "ASUS G634JYR/JZR", ALC285_FIXUP_ASUS_SPI_REAR_SPEAKERS),
7364	SND_PCI_QUIRK(0x1043, 0x3d78, "ASUS GA603KH", ALC287_FIXUP_CS35L41_I2C_2),
7365	SND_PCI_QUIRK(0x1043, 0x3d88, "ASUS GA603KM", ALC287_FIXUP_CS35L41_I2C_2),
7366	SND_PCI_QUIRK(0x1043, 0x3e00, "ASUS G814FH/FM/FP", ALC287_FIXUP_CS35L41_I2C_2),
7367	SND_PCI_QUIRK(0x1043, 0x3e20, "ASUS G814PH/PM/PP", ALC287_FIXUP_CS35L41_I2C_2),
7368	SND_PCI_QUIRK(0x1043, 0x3e30, "ASUS TP3607SA", ALC287_FIXUP_TAS2781_I2C),
7369	SND_PCI_QUIRK(0x1043, 0x3ee0, "ASUS Strix G815_JHR_JMR_JPR", ALC287_FIXUP_TAS2781_I2C),
7370	SND_PCI_QUIRK(0x1043, 0x3ef0, "ASUS Strix G635LR_LW_LX", ALC287_FIXUP_TAS2781_I2C),
7371	SND_PCI_QUIRK(0x1043, 0x3f00, "ASUS Strix G815LH_LM_LP", ALC287_FIXUP_TAS2781_I2C),
7372	SND_PCI_QUIRK(0x1043, 0x3f10, "ASUS Strix G835LR_LW_LX", ALC287_FIXUP_TAS2781_I2C),
7373	SND_PCI_QUIRK(0x1043, 0x3f20, "ASUS Strix G615LR_LW", ALC287_FIXUP_TAS2781_I2C),
7374	SND_PCI_QUIRK(0x1043, 0x3f30, "ASUS Strix G815LR_LW", ALC287_FIXUP_TAS2781_I2C),
7375	SND_PCI_QUIRK(0x1043, 0x3fd0, "ASUS B3605CVA", ALC245_FIXUP_CS35L41_SPI_2),
7376	SND_PCI_QUIRK(0x1043, 0x3ff0, "ASUS B5405CVA", ALC245_FIXUP_CS35L41_SPI_2),
7377	SND_PCI_QUIRK(0x1043, 0x831a, "ASUS P901", ALC269_FIXUP_STEREO_DMIC),
7378	SND_PCI_QUIRK(0x1043, 0x834a, "ASUS S101", ALC269_FIXUP_STEREO_DMIC),
7379	SND_PCI_QUIRK(0x1043, 0x8398, "ASUS P1005", ALC269_FIXUP_STEREO_DMIC),
7380	SND_PCI_QUIRK(0x1043, 0x83ce, "ASUS P1005", ALC269_FIXUP_STEREO_DMIC),
7381	SND_PCI_QUIRK(0x1043, 0x8516, "ASUS X101CH", ALC269_FIXUP_ASUS_X101),
7382	SND_PCI_QUIRK(0x1043, 0x88f4, "ASUS NUC14LNS", ALC245_FIXUP_CS35L41_SPI_1),
7383	SND_PCI_QUIRK(0x104d, 0x9073, "Sony VAIO", ALC275_FIXUP_SONY_VAIO_GPIO2),
7384	SND_PCI_QUIRK(0x104d, 0x907b, "Sony VAIO", ALC275_FIXUP_SONY_HWEQ),
7385	SND_PCI_QUIRK(0x104d, 0x9084, "Sony VAIO", ALC275_FIXUP_SONY_HWEQ),
7386	SND_PCI_QUIRK(0x104d, 0x9099, "Sony VAIO S13", ALC275_FIXUP_SONY_DISABLE_AAMIX),
7387	SND_PCI_QUIRK(0x104d, 0x90b5, "Sony VAIO Pro 11", ALC286_FIXUP_SONY_MIC_NO_PRESENCE),
7388	SND_PCI_QUIRK(0x104d, 0x90b6, "Sony VAIO Pro 13", ALC286_FIXUP_SONY_MIC_NO_PRESENCE),
7389	SND_PCI_QUIRK(0x10cf, 0x1475, "Lifebook", ALC269_FIXUP_LIFEBOOK),
7390	SND_PCI_QUIRK(0x10cf, 0x159f, "Lifebook E780", ALC269_FIXUP_LIFEBOOK_NO_HP_TO_LINEOUT),
7391	SND_PCI_QUIRK(0x10cf, 0x15dc, "Lifebook T731", ALC269_FIXUP_LIFEBOOK_HP_PIN),
7392	SND_PCI_QUIRK(0x10cf, 0x1629, "Lifebook U7x7", ALC255_FIXUP_LIFEBOOK_U7x7_HEADSET_MIC),
7393	SND_PCI_QUIRK(0x10cf, 0x1757, "Lifebook E752", ALC269_FIXUP_LIFEBOOK_HP_PIN),
7394	SND_PCI_QUIRK(0x10cf, 0x1845, "Lifebook U904", ALC269_FIXUP_LIFEBOOK_EXTMIC),
7395	SND_PCI_QUIRK(0x10ec, 0x10f2, "Intel Reference board", ALC700_FIXUP_INTEL_REFERENCE),
7396	SND_PCI_QUIRK(0x10ec, 0x118c, "Medion EE4254 MD62100", ALC256_FIXUP_MEDION_HEADSET_NO_PRESENCE),
7397	SND_PCI_QUIRK(0x10ec, 0x119e, "Positivo SU C1400", ALC269_FIXUP_ASPIRE_HEADSET_MIC),
7398	SND_PCI_QUIRK(0x10ec, 0x11bc, "VAIO VJFE-IL", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
7399	SND_PCI_QUIRK(0x10ec, 0x1230, "Intel Reference board", ALC295_FIXUP_CHROME_BOOK),
7400	SND_PCI_QUIRK(0x10ec, 0x124c, "Intel Reference board", ALC295_FIXUP_CHROME_BOOK),
7401	SND_PCI_QUIRK(0x10ec, 0x1252, "Intel Reference board", ALC295_FIXUP_CHROME_BOOK),
7402	SND_PCI_QUIRK(0x10ec, 0x1254, "Intel Reference board", ALC295_FIXUP_CHROME_BOOK),
7403	SND_PCI_QUIRK(0x10ec, 0x12cc, "Intel Reference board", ALC295_FIXUP_CHROME_BOOK),
7404	SND_PCI_QUIRK(0x10ec, 0x12f6, "Intel Reference board", ALC295_FIXUP_CHROME_BOOK),
7405	SND_PCI_QUIRK(0x10f7, 0x8338, "Panasonic CF-SZ6", ALC269_FIXUP_ASPIRE_HEADSET_MIC),
7406	SND_PCI_QUIRK(0x1414, 0x9c20, "Microsoft Surface Pro 2/3", ALC288_FIXUP_SURFACE_SWAP_DACS),
7407	SND_PCI_QUIRK(0x144d, 0xc109, "Samsung Ativ book 9 (NP900X3G)", ALC269_FIXUP_INV_DMIC),
7408	SND_PCI_QUIRK(0x144d, 0xc169, "Samsung Notebook 9 Pen (NP930SBE-K01US)", ALC298_FIXUP_SAMSUNG_AMP),
7409	SND_PCI_QUIRK(0x144d, 0xc176, "Samsung Notebook 9 Pro (NP930MBE-K04US)", ALC298_FIXUP_SAMSUNG_AMP),
7410	SND_PCI_QUIRK(0x144d, 0xc188, "Samsung Galaxy Book Flex (NT950QCT-A38A)", ALC298_FIXUP_SAMSUNG_AMP),
7411	SND_PCI_QUIRK(0x144d, 0xc189, "Samsung Galaxy Book Flex (NT950QCG-X716)", ALC298_FIXUP_SAMSUNG_AMP),
7412	SND_PCI_QUIRK(0x144d, 0xc18a, "Samsung Galaxy Book Ion (NP930XCJ-K01US)", ALC298_FIXUP_SAMSUNG_AMP),
7413	SND_PCI_QUIRK(0x144d, 0xc1ac, "Samsung Galaxy Book2 Pro 360 (NP950QED)", ALC298_FIXUP_SAMSUNG_AMP_V2_2_AMPS),
7414	SND_PCI_QUIRK(0x144d, 0xc1a3, "Samsung Galaxy Book Pro (NP935XDB-KC1SE)", ALC298_FIXUP_SAMSUNG_AMP),
7415	SND_PCI_QUIRK(0x144d, 0xc1a4, "Samsung Galaxy Book Pro 360 (NT935QBD)", ALC298_FIXUP_SAMSUNG_AMP),
7416	SND_PCI_QUIRK(0x144d, 0xc1a6, "Samsung Galaxy Book Pro 360 (NP930QBD)", ALC298_FIXUP_SAMSUNG_AMP),
7417	SND_PCI_QUIRK(0x144d, 0xc740, "Samsung Ativ book 8 (NP870Z5G)", ALC269_FIXUP_ATIV_BOOK_8),
7418	SND_PCI_QUIRK(0x144d, 0xc812, "Samsung Notebook Pen S (NT950SBE-X58)", ALC298_FIXUP_SAMSUNG_AMP),
7419	SND_PCI_QUIRK(0x144d, 0xc830, "Samsung Galaxy Book Ion (NT950XCJ-X716A)", ALC298_FIXUP_SAMSUNG_AMP),
7420	SND_PCI_QUIRK(0x144d, 0xc832, "Samsung Galaxy Book Flex Alpha (NP730QCJ)", ALC256_FIXUP_SAMSUNG_HEADPHONE_VERY_QUIET),
7421	SND_PCI_QUIRK(0x144d, 0xc876, "Samsung 730QED (NP730QED-KA2US)", ALC256_FIXUP_SAMSUNG_HEADPHONE_VERY_QUIET),
7422	SND_PCI_QUIRK(0x144d, 0xca03, "Samsung Galaxy Book2 Pro 360 (NP930QED)", ALC298_FIXUP_SAMSUNG_AMP),
7423	SND_PCI_QUIRK(0x144d, 0xca06, "Samsung Galaxy Book3 360 (NP730QFG)", ALC298_FIXUP_SAMSUNG_HEADPHONE_VERY_QUIET),
7424	SND_PCI_QUIRK(0x144d, 0xc868, "Samsung Galaxy Book2 Pro (NP930XED)", ALC298_FIXUP_SAMSUNG_AMP),
7425	SND_PCI_QUIRK(0x144d, 0xc870, "Samsung Galaxy Book2 Pro (NP950XED)", ALC298_FIXUP_SAMSUNG_AMP_V2_2_AMPS),
7426	SND_PCI_QUIRK(0x144d, 0xc872, "Samsung Galaxy Book2 Pro (NP950XEE)", ALC298_FIXUP_SAMSUNG_AMP_V2_2_AMPS),
7427	SND_PCI_QUIRK(0x144d, 0xc886, "Samsung Galaxy Book3 Pro (NP964XFG)", ALC298_FIXUP_SAMSUNG_AMP_V2_4_AMPS),
7428	SND_PCI_QUIRK(0x144d, 0xc1ca, "Samsung Galaxy Book3 Pro 360 (NP960QFG)", ALC298_FIXUP_SAMSUNG_AMP_V2_4_AMPS),
7429	SND_PCI_QUIRK(0x144d, 0xc1cb, "Samsung Galaxy Book3 Pro 360 (NP965QFG)", ALC298_FIXUP_SAMSUNG_AMP_V2_4_AMPS),
7430	SND_PCI_QUIRK(0x144d, 0xc1cc, "Samsung Galaxy Book3 Ultra (NT960XFH)", ALC298_FIXUP_SAMSUNG_AMP_V2_4_AMPS),
7431	SND_PCI_QUIRK(0x1458, 0x900e, "Gigabyte G5 KF5 (2023)", ALC2XX_FIXUP_HEADSET_MIC),
7432	SND_PCI_QUIRK(0x1458, 0xfa53, "Gigabyte BXBT-2807", ALC283_FIXUP_HEADSET_MIC),
7433	SND_PCI_QUIRK(0x1462, 0xb120, "MSI Cubi MS-B120", ALC283_FIXUP_HEADSET_MIC),
7434	SND_PCI_QUIRK(0x1462, 0xb171, "Cubi N 8GL (MS-B171)", ALC283_FIXUP_HEADSET_MIC),
7435	SND_PCI_QUIRK(0x152d, 0x1082, "Quanta NL3", ALC269_FIXUP_LIFEBOOK),
7436	SND_PCI_QUIRK(0x152d, 0x1262, "Huawei NBLB-WAX9N", ALC2XX_FIXUP_HEADSET_MIC),
7437	SND_PCI_QUIRK(0x1558, 0x0353, "Clevo V35[05]SN[CDE]Q", ALC256_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
7438	SND_PCI_QUIRK(0x1558, 0x1323, "Clevo N130ZU", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
7439	SND_PCI_QUIRK(0x1558, 0x1325, "Clevo N15[01][CW]U", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
7440	SND_PCI_QUIRK(0x1558, 0x1401, "Clevo L140[CZ]U", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
7441	SND_PCI_QUIRK(0x1558, 0x1403, "Clevo N140CU", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
7442	SND_PCI_QUIRK(0x1558, 0x1404, "Clevo N150CU", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
7443	SND_PCI_QUIRK(0x1558, 0x14a1, "Clevo L141MU", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
7444	SND_PCI_QUIRK(0x1558, 0x2624, "Clevo L240TU", ALC256_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
7445	SND_PCI_QUIRK(0x1558, 0x28c1, "Clevo V370VND", ALC2XX_FIXUP_HEADSET_MIC),
7446	SND_PCI_QUIRK(0x1558, 0x35a1, "Clevo V3[56]0EN[CDE]", ALC256_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
7447	SND_PCI_QUIRK(0x1558, 0x35b1, "Clevo V3[57]0WN[MNP]Q", ALC256_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
7448	SND_PCI_QUIRK(0x1558, 0x4018, "Clevo NV40M[BE]", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
7449	SND_PCI_QUIRK(0x1558, 0x4019, "Clevo NV40MZ", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
7450	SND_PCI_QUIRK(0x1558, 0x4020, "Clevo NV40MB", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
7451	SND_PCI_QUIRK(0x1558, 0x4041, "Clevo NV4[15]PZ", ALC256_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
7452	SND_PCI_QUIRK(0x1558, 0x40a1, "Clevo NL40GU", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
7453	SND_PCI_QUIRK(0x1558, 0x40c1, "Clevo NL40[CZ]U", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
7454	SND_PCI_QUIRK(0x1558, 0x40d1, "Clevo NL41DU", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
7455	SND_PCI_QUIRK(0x1558, 0x5015, "Clevo NH5[58]H[HJK]Q", ALC256_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
7456	SND_PCI_QUIRK(0x1558, 0x5017, "Clevo NH7[79]H[HJK]Q", ALC256_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
7457	SND_PCI_QUIRK(0x1558, 0x50a3, "Clevo NJ51GU", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
7458	SND_PCI_QUIRK(0x1558, 0x50b3, "Clevo NK50S[BEZ]", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
7459	SND_PCI_QUIRK(0x1558, 0x50b6, "Clevo NK50S5", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
7460	SND_PCI_QUIRK(0x1558, 0x50b8, "Clevo NK50SZ", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
7461	SND_PCI_QUIRK(0x1558, 0x50d5, "Clevo NP50D5", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
7462	SND_PCI_QUIRK(0x1558, 0x50e1, "Clevo NH5[58]HPQ", ALC256_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
7463	SND_PCI_QUIRK(0x1558, 0x50e2, "Clevo NH7[79]HPQ", ALC256_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
7464	SND_PCI_QUIRK(0x1558, 0x50f0, "Clevo NH50A[CDF]", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
7465	SND_PCI_QUIRK(0x1558, 0x50f2, "Clevo NH50E[PR]", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
7466	SND_PCI_QUIRK(0x1558, 0x50f3, "Clevo NH58DPQ", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
7467	SND_PCI_QUIRK(0x1558, 0x50f5, "Clevo NH55EPY", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
7468	SND_PCI_QUIRK(0x1558, 0x50f6, "Clevo NH55DPQ", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
7469	SND_PCI_QUIRK(0x1558, 0x5101, "Clevo S510WU", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
7470	SND_PCI_QUIRK(0x1558, 0x5157, "Clevo W517GU1", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
7471	SND_PCI_QUIRK(0x1558, 0x51a1, "Clevo NS50MU", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
7472	SND_PCI_QUIRK(0x1558, 0x51b1, "Clevo NS50AU", ALC256_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
7473	SND_PCI_QUIRK(0x1558, 0x51b3, "Clevo NS70AU", ALC256_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
7474	SND_PCI_QUIRK(0x1558, 0x5630, "Clevo NP50RNJS", ALC256_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
7475	SND_PCI_QUIRK(0x1558, 0x5700, "Clevo X560WN[RST]", ALC256_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
7476	SND_PCI_QUIRK(0x1558, 0x70a1, "Clevo NB70T[HJK]", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
7477	SND_PCI_QUIRK(0x1558, 0x70b3, "Clevo NK70SB", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
7478	SND_PCI_QUIRK(0x1558, 0x70f2, "Clevo NH79EPY", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
7479	SND_PCI_QUIRK(0x1558, 0x70f3, "Clevo NH77DPQ", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
7480	SND_PCI_QUIRK(0x1558, 0x70f4, "Clevo NH77EPY", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
7481	SND_PCI_QUIRK(0x1558, 0x70f6, "Clevo NH77DPQ-Y", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
7482	SND_PCI_QUIRK(0x1558, 0x7716, "Clevo NS50PU", ALC256_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
7483	SND_PCI_QUIRK(0x1558, 0x7717, "Clevo NS70PU", ALC256_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
7484	SND_PCI_QUIRK(0x1558, 0x7718, "Clevo L140PU", ALC256_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
7485	SND_PCI_QUIRK(0x1558, 0x7724, "Clevo L140AU", ALC256_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
7486	SND_PCI_QUIRK(0x1558, 0x8228, "Clevo NR40BU", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
7487	SND_PCI_QUIRK(0x1558, 0x8520, "Clevo NH50D[CD]", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
7488	SND_PCI_QUIRK(0x1558, 0x8521, "Clevo NH77D[CD]", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
7489	SND_PCI_QUIRK(0x1558, 0x8535, "Clevo NH50D[BE]", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
7490	SND_PCI_QUIRK(0x1558, 0x8536, "Clevo NH79D[BE]", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
7491	SND_PCI_QUIRK(0x1558, 0x8550, "Clevo NH[57][0-9][ER][ACDH]Q", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
7492	SND_PCI_QUIRK(0x1558, 0x8551, "Clevo NH[57][0-9][ER][ACDH]Q", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
7493	SND_PCI_QUIRK(0x1558, 0x8560, "Clevo NH[57][0-9][ER][ACDH]Q", ALC269_FIXUP_HEADSET_MIC),
7494	SND_PCI_QUIRK(0x1558, 0x8561, "Clevo NH[57][0-9][ER][ACDH]Q", ALC269_FIXUP_HEADSET_MIC),
7495	SND_PCI_QUIRK(0x1558, 0x8562, "Clevo NH[57][0-9]RZ[Q]", ALC269_FIXUP_DMIC),
7496	SND_PCI_QUIRK(0x1558, 0x8668, "Clevo NP50B[BE]", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
7497	SND_PCI_QUIRK(0x1558, 0x866d, "Clevo NP5[05]PN[HJK]", ALC256_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
7498	SND_PCI_QUIRK(0x1558, 0x867c, "Clevo NP7[01]PNP", ALC256_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
7499	SND_PCI_QUIRK(0x1558, 0x867d, "Clevo NP7[01]PN[HJK]", ALC256_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
7500	SND_PCI_QUIRK(0x1558, 0x8680, "Clevo NJ50LU", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
7501	SND_PCI_QUIRK(0x1558, 0x8686, "Clevo NH50[CZ]U", ALC256_FIXUP_MIC_NO_PRESENCE_AND_RESUME),
7502	SND_PCI_QUIRK(0x1558, 0x8a20, "Clevo NH55DCQ-Y", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
7503	SND_PCI_QUIRK(0x1558, 0x8a51, "Clevo NH70RCQ-Y", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
7504	SND_PCI_QUIRK(0x1558, 0x8d50, "Clevo NH55RCQ-M", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
7505	SND_PCI_QUIRK(0x1558, 0x951d, "Clevo N950T[CDF]", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
7506	SND_PCI_QUIRK(0x1558, 0x9600, "Clevo N960K[PR]", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
7507	SND_PCI_QUIRK(0x1558, 0x961d, "Clevo N960S[CDF]", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
7508	SND_PCI_QUIRK(0x1558, 0x971d, "Clevo N970T[CDF]", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
7509	SND_PCI_QUIRK(0x1558, 0xa500, "Clevo NL5[03]RU", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
7510	SND_PCI_QUIRK(0x1558, 0xa554, "VAIO VJFH52", ALC269_FIXUP_VAIO_VJFH52_MIC_NO_PRESENCE),
7511	SND_PCI_QUIRK(0x1558, 0xa559, "VAIO RPL", ALC256_FIXUP_VAIO_RPL_MIC_NO_PRESENCE),
7512	SND_PCI_QUIRK(0x1558, 0xa600, "Clevo NL50NU", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
7513	SND_PCI_QUIRK(0x1558, 0xa650, "Clevo NP[567]0SN[CD]", ALC256_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
7514	SND_PCI_QUIRK(0x1558, 0xa671, "Clevo NP70SN[CDE]", ALC256_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
7515	SND_PCI_QUIRK(0x1558, 0xa741, "Clevo V54x_6x_TNE", ALC245_FIXUP_CLEVO_NOISY_MIC),
7516	SND_PCI_QUIRK(0x1558, 0xa743, "Clevo V54x_6x_TU", ALC245_FIXUP_CLEVO_NOISY_MIC),
7517	SND_PCI_QUIRK(0x1558, 0xa763, "Clevo V54x_6x_TU", ALC245_FIXUP_CLEVO_NOISY_MIC),
7518	SND_PCI_QUIRK(0x1558, 0xb018, "Clevo NP50D[BE]", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
7519	SND_PCI_QUIRK(0x1558, 0xb019, "Clevo NH77D[BE]Q", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
7520	SND_PCI_QUIRK(0x1558, 0xb022, "Clevo NH77D[DC][QW]", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
7521	SND_PCI_QUIRK(0x1558, 0xc018, "Clevo NP50D[BE]", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
7522	SND_PCI_QUIRK(0x1558, 0xc019, "Clevo NH77D[BE]Q", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
7523	SND_PCI_QUIRK(0x1558, 0xc022, "Clevo NH77[DC][QW]", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
7524	SND_PCI_QUIRK(0x17aa, 0x1036, "Lenovo P520", ALC233_FIXUP_LENOVO_MULTI_CODECS),
7525	SND_PCI_QUIRK(0x17aa, 0x1048, "ThinkCentre Station", ALC623_FIXUP_LENOVO_THINKSTATION_P340),
7526	SND_PCI_QUIRK(0x17aa, 0x20f2, "Thinkpad SL410/510", ALC269_FIXUP_SKU_IGNORE),
7527	SND_PCI_QUIRK(0x17aa, 0x215e, "Thinkpad L512", ALC269_FIXUP_SKU_IGNORE),
7528	SND_PCI_QUIRK(0x17aa, 0x21b8, "Thinkpad Edge 14", ALC269_FIXUP_SKU_IGNORE),
7529	SND_PCI_QUIRK(0x17aa, 0x21ca, "Thinkpad L412", ALC269_FIXUP_SKU_IGNORE),
7530	SND_PCI_QUIRK(0x17aa, 0x21e9, "Thinkpad Edge 15", ALC269_FIXUP_SKU_IGNORE),
7531	SND_PCI_QUIRK(0x17aa, 0x21f3, "Thinkpad T430", ALC269_FIXUP_LENOVO_DOCK),
7532	SND_PCI_QUIRK(0x17aa, 0x21f6, "Thinkpad T530", ALC269_FIXUP_LENOVO_DOCK_LIMIT_BOOST),
7533	SND_PCI_QUIRK(0x17aa, 0x21fa, "Thinkpad X230", ALC269_FIXUP_LENOVO_DOCK),
7534	SND_PCI_QUIRK(0x17aa, 0x21fb, "Thinkpad T430s", ALC269_FIXUP_LENOVO_DOCK),
7535	SND_PCI_QUIRK(0x17aa, 0x2203, "Thinkpad X230 Tablet", ALC269_FIXUP_LENOVO_DOCK),
7536	SND_PCI_QUIRK(0x17aa, 0x2208, "Thinkpad T431s", ALC269_FIXUP_LENOVO_DOCK),
7537	SND_PCI_QUIRK(0x17aa, 0x220c, "Thinkpad T440s", ALC292_FIXUP_TPT440),
7538	SND_PCI_QUIRK(0x17aa, 0x220e, "Thinkpad T440p", ALC292_FIXUP_TPT440_DOCK),
7539	SND_PCI_QUIRK(0x17aa, 0x2210, "Thinkpad T540p", ALC292_FIXUP_TPT440_DOCK),
7540	SND_PCI_QUIRK(0x17aa, 0x2211, "Thinkpad W541", ALC292_FIXUP_TPT440_DOCK),
7541	SND_PCI_QUIRK(0x17aa, 0x2212, "Thinkpad T440", ALC292_FIXUP_TPT440_DOCK),
7542	SND_PCI_QUIRK(0x17aa, 0x2214, "Thinkpad X240", ALC292_FIXUP_TPT440_DOCK),
7543	SND_PCI_QUIRK(0x17aa, 0x2215, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
7544	SND_PCI_QUIRK(0x17aa, 0x2218, "Thinkpad X1 Carbon 2nd", ALC292_FIXUP_TPT440_DOCK),
7545	SND_PCI_QUIRK(0x17aa, 0x2223, "ThinkPad T550", ALC292_FIXUP_TPT440_DOCK),
7546	SND_PCI_QUIRK(0x17aa, 0x2226, "ThinkPad X250", ALC292_FIXUP_TPT440_DOCK),
7547	SND_PCI_QUIRK(0x17aa, 0x222d, "Thinkpad", ALC298_FIXUP_TPT470_DOCK),
7548	SND_PCI_QUIRK(0x17aa, 0x222e, "Thinkpad", ALC298_FIXUP_TPT470_DOCK),
7549	SND_PCI_QUIRK(0x17aa, 0x2231, "Thinkpad T560", ALC292_FIXUP_TPT460),
7550	SND_PCI_QUIRK(0x17aa, 0x2233, "Thinkpad", ALC292_FIXUP_TPT460),
7551	SND_PCI_QUIRK(0x17aa, 0x2234, "Thinkpad ICE-1", ALC287_FIXUP_TAS2781_I2C),
7552	SND_PCI_QUIRK(0x17aa, 0x2245, "Thinkpad T470", ALC298_FIXUP_TPT470_DOCK),
7553	SND_PCI_QUIRK(0x17aa, 0x2246, "Thinkpad", ALC298_FIXUP_TPT470_DOCK),
7554	SND_PCI_QUIRK(0x17aa, 0x2247, "Thinkpad", ALC298_FIXUP_TPT470_DOCK),
7555	SND_PCI_QUIRK(0x17aa, 0x2249, "Thinkpad", ALC292_FIXUP_TPT460),
7556	SND_PCI_QUIRK(0x17aa, 0x224b, "Thinkpad", ALC298_FIXUP_TPT470_DOCK),
7557	SND_PCI_QUIRK(0x17aa, 0x224c, "Thinkpad", ALC298_FIXUP_TPT470_DOCK),
7558	SND_PCI_QUIRK(0x17aa, 0x224d, "Thinkpad", ALC298_FIXUP_TPT470_DOCK),
7559	SND_PCI_QUIRK(0x17aa, 0x225d, "Thinkpad T480", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
7560	SND_PCI_QUIRK(0x17aa, 0x2288, "Thinkpad X390", ALC285_FIXUP_THINKPAD_NO_BASS_SPK_HEADSET_JACK),
7561	SND_PCI_QUIRK(0x17aa, 0x2292, "Thinkpad X1 Carbon 7th", ALC285_FIXUP_THINKPAD_HEADSET_JACK),
7562	SND_PCI_QUIRK(0x17aa, 0x22be, "Thinkpad X1 Carbon 8th", ALC285_FIXUP_THINKPAD_HEADSET_JACK),
7563	SND_PCI_QUIRK(0x17aa, 0x22c1, "Thinkpad P1 Gen 3", ALC285_FIXUP_THINKPAD_NO_BASS_SPK_HEADSET_JACK),
7564	SND_PCI_QUIRK(0x17aa, 0x22c2, "Thinkpad X1 Extreme Gen 3", ALC285_FIXUP_THINKPAD_NO_BASS_SPK_HEADSET_JACK),
7565	SND_PCI_QUIRK(0x17aa, 0x22f1, "Thinkpad", ALC287_FIXUP_MG_RTKC_CSAMP_CS35L41_I2C_THINKPAD),
7566	SND_PCI_QUIRK(0x17aa, 0x22f2, "Thinkpad", ALC287_FIXUP_MG_RTKC_CSAMP_CS35L41_I2C_THINKPAD),
7567	SND_PCI_QUIRK(0x17aa, 0x22f3, "Thinkpad", ALC287_FIXUP_MG_RTKC_CSAMP_CS35L41_I2C_THINKPAD),
7568	SND_PCI_QUIRK(0x17aa, 0x2316, "Thinkpad P1 Gen 6", ALC287_FIXUP_MG_RTKC_CSAMP_CS35L41_I2C_THINKPAD),
7569	SND_PCI_QUIRK(0x17aa, 0x2317, "Thinkpad P1 Gen 6", ALC287_FIXUP_MG_RTKC_CSAMP_CS35L41_I2C_THINKPAD),
7570	SND_PCI_QUIRK(0x17aa, 0x2318, "Thinkpad Z13 Gen2", ALC287_FIXUP_MG_RTKC_CSAMP_CS35L41_I2C_THINKPAD),
7571	SND_PCI_QUIRK(0x17aa, 0x2319, "Thinkpad Z16 Gen2", ALC287_FIXUP_MG_RTKC_CSAMP_CS35L41_I2C_THINKPAD),
7572	SND_PCI_QUIRK(0x17aa, 0x231a, "Thinkpad Z16 Gen2", ALC287_FIXUP_MG_RTKC_CSAMP_CS35L41_I2C_THINKPAD),
7573	SND_PCI_QUIRK(0x17aa, 0x231e, "Thinkpad", ALC287_FIXUP_LENOVO_THKPAD_WH_ALC1318),
7574	SND_PCI_QUIRK(0x17aa, 0x231f, "Thinkpad", ALC287_FIXUP_LENOVO_THKPAD_WH_ALC1318),
7575	SND_PCI_QUIRK(0x17aa, 0x2326, "Hera2", ALC287_FIXUP_TAS2781_I2C),
7576	SND_PCI_QUIRK(0x17aa, 0x30bb, "ThinkCentre AIO", ALC233_FIXUP_LENOVO_LINE2_MIC_HOTKEY),
7577	SND_PCI_QUIRK(0x17aa, 0x30e2, "ThinkCentre AIO", ALC233_FIXUP_LENOVO_LINE2_MIC_HOTKEY),
7578	SND_PCI_QUIRK(0x17aa, 0x310c, "ThinkCentre Station", ALC294_FIXUP_LENOVO_MIC_LOCATION),
7579	SND_PCI_QUIRK(0x17aa, 0x3111, "ThinkCentre Station", ALC294_FIXUP_LENOVO_MIC_LOCATION),
7580	SND_PCI_QUIRK(0x17aa, 0x312a, "ThinkCentre Station", ALC294_FIXUP_LENOVO_MIC_LOCATION),
7581	SND_PCI_QUIRK(0x17aa, 0x312f, "ThinkCentre Station", ALC294_FIXUP_LENOVO_MIC_LOCATION),
7582	SND_PCI_QUIRK(0x17aa, 0x313c, "ThinkCentre Station", ALC294_FIXUP_LENOVO_MIC_LOCATION),
7583	SND_PCI_QUIRK(0x17aa, 0x3151, "ThinkCentre Station", ALC283_FIXUP_HEADSET_MIC),
7584	SND_PCI_QUIRK(0x17aa, 0x3176, "ThinkCentre Station", ALC283_FIXUP_HEADSET_MIC),
7585	SND_PCI_QUIRK(0x17aa, 0x3178, "ThinkCentre Station", ALC283_FIXUP_HEADSET_MIC),
7586	SND_PCI_QUIRK(0x17aa, 0x31af, "ThinkCentre Station", ALC623_FIXUP_LENOVO_THINKSTATION_P340),
7587	SND_PCI_QUIRK(0x17aa, 0x3341, "Lenovo ThinkCentre M90 Gen4", ALC233_FIXUP_LENOVO_GPIO2_MIC_HOTKEY),
7588	SND_PCI_QUIRK(0x17aa, 0x3342, "Lenovo ThinkCentre M90 Gen4", ALC233_FIXUP_LENOVO_GPIO2_MIC_HOTKEY),
7589	SND_PCI_QUIRK(0x17aa, 0x3343, "Lenovo ThinkCentre M70 Gen4", ALC233_FIXUP_LENOVO_GPIO2_MIC_HOTKEY),
7590	SND_PCI_QUIRK(0x17aa, 0x3344, "Lenovo ThinkCentre M70 Gen4", ALC233_FIXUP_LENOVO_GPIO2_MIC_HOTKEY),
7591	SND_PCI_QUIRK(0x17aa, 0x334b, "Lenovo ThinkCentre M70 Gen5", ALC283_FIXUP_HEADSET_MIC),
7592	SND_PCI_QUIRK(0x17aa, 0x334f, "Lenovo ThinkCentre M90a Gen5", ALC233_FIXUP_LENOVO_GPIO2_MIC_HOTKEY),
7593	SND_PCI_QUIRK(0x17aa, 0x3384, "ThinkCentre M90a PRO", ALC233_FIXUP_LENOVO_L2MH_LOW_ENLED),
7594	SND_PCI_QUIRK(0x17aa, 0x3386, "ThinkCentre M90a Gen6", ALC233_FIXUP_LENOVO_L2MH_LOW_ENLED),
7595	SND_PCI_QUIRK(0x17aa, 0x3387, "ThinkCentre M70a Gen6", ALC233_FIXUP_LENOVO_L2MH_LOW_ENLED),
7596	SND_PCI_QUIRK(0x17aa, 0x3801, "Lenovo Yoga9 14IAP7", ALC287_FIXUP_YOGA9_14IAP7_BASS_SPK_PIN),
7597	HDA_CODEC_QUIRK(0x17aa, 0x3802, "DuetITL 2021", ALC287_FIXUP_YOGA7_14ITL_SPEAKERS),
7598	SND_PCI_QUIRK(0x17aa, 0x3802, "Lenovo Yoga Pro 9 14IRP8", ALC287_FIXUP_TAS2781_I2C),
7599	SND_PCI_QUIRK(0x17aa, 0x3813, "Legion 7i 15IMHG05", ALC287_FIXUP_LEGION_15IMHG05_SPEAKERS),
7600	SND_PCI_QUIRK(0x17aa, 0x3818, "Lenovo C940 / Yoga Duet 7", ALC298_FIXUP_LENOVO_C940_DUET7),
7601	SND_PCI_QUIRK(0x17aa, 0x3819, "Lenovo 13s Gen2 ITL", ALC287_FIXUP_13S_GEN2_SPEAKERS),
7602	HDA_CODEC_QUIRK(0x17aa, 0x3820, "IdeaPad 330-17IKB 81DM", ALC269_FIXUP_ASPIRE_HEADSET_MIC),
7603	SND_PCI_QUIRK(0x17aa, 0x3820, "Yoga Duet 7 13ITL6", ALC287_FIXUP_YOGA7_14ITL_SPEAKERS),
7604	SND_PCI_QUIRK(0x17aa, 0x3824, "Legion Y9000X 2020", ALC285_FIXUP_LEGION_Y9000X_SPEAKERS),
7605	SND_PCI_QUIRK(0x17aa, 0x3827, "Ideapad S740", ALC285_FIXUP_IDEAPAD_S740_COEF),
7606	SND_PCI_QUIRK(0x17aa, 0x3834, "Lenovo IdeaPad Slim 9i 14ITL5", ALC287_FIXUP_YOGA7_14ITL_SPEAKERS),
7607	SND_PCI_QUIRK(0x17aa, 0x383d, "Legion Y9000X 2019", ALC285_FIXUP_LEGION_Y9000X_SPEAKERS),
7608	SND_PCI_QUIRK(0x17aa, 0x3843, "Lenovo Yoga 9i / Yoga Book 9i", ALC287_FIXUP_LENOVO_YOGA_BOOK_9I),
7609	/* Yoga Pro 7 14IMH9 shares PCI SSID 17aa:3847 with Legion 7 16ACHG6;
7610	 * use codec SSID to distinguish them
7611	 */
7612	HDA_CODEC_QUIRK(0x17aa, 0x38cf, "Lenovo Yoga Pro 7 14IMH9", ALC287_FIXUP_YOGA9_14IMH9_BASS_SPK_PIN),
7613	SND_PCI_QUIRK(0x17aa, 0x3847, "Legion 7 16ACHG6", ALC287_FIXUP_LEGION_16ACHG6),
7614	SND_PCI_QUIRK(0x17aa, 0x384a, "Lenovo Yoga 7 15ITL5", ALC287_FIXUP_YOGA7_14ITL_SPEAKERS),
7615	SND_PCI_QUIRK(0x17aa, 0x3852, "Lenovo Yoga 7 14ITL5", ALC287_FIXUP_YOGA7_14ITL_SPEAKERS),
7616	SND_PCI_QUIRK(0x17aa, 0x3853, "Lenovo Yoga 7 15ITL5", ALC287_FIXUP_YOGA7_14ITL_SPEAKERS),
7617	SND_PCI_QUIRK(0x17aa, 0x3855, "Legion 7 16ITHG6", ALC287_FIXUP_LEGION_16ITHG6),
7618	SND_PCI_QUIRK(0x17aa, 0x3865, "Lenovo 13X", ALC287_FIXUP_CS35L41_I2C_2),
7619	SND_PCI_QUIRK(0x17aa, 0x3866, "Lenovo 13X", ALC287_FIXUP_CS35L41_I2C_2),
7620	SND_PCI_QUIRK(0x17aa, 0x3869, "Lenovo Yoga7 14IAL7", ALC287_FIXUP_YOGA9_14IAP7_BASS_SPK_PIN),
7621	HDA_CODEC_QUIRK(0x17aa, 0x386e, "Legion Y9000X 2022 IAH7", ALC287_FIXUP_CS35L41_I2C_2),
7622	SND_PCI_QUIRK(0x17aa, 0x386e, "Yoga Pro 7 14ARP8", ALC285_FIXUP_SPEAKER2_TO_DAC1),
7623	HDA_CODEC_QUIRK(0x17aa, 0x38a8, "Legion Pro 7 16ARX8H", ALC287_FIXUP_TAS2781_I2C), /* this must match before PCI SSID 17aa:386f below */
7624	SND_PCI_QUIRK(0x17aa, 0x386f, "Legion Pro 7i 16IAX7", ALC287_FIXUP_CS35L41_I2C_2),
7625	SND_PCI_QUIRK(0x17aa, 0x3870, "Lenovo Yoga 7 14ARB7", ALC287_FIXUP_YOGA7_14ARB7_I2C),
7626	SND_PCI_QUIRK(0x17aa, 0x3877, "Lenovo Legion 7 Slim 16ARHA7", ALC287_FIXUP_CS35L41_I2C_2),
7627	SND_PCI_QUIRK(0x17aa, 0x3878, "Lenovo Legion 7 Slim 16ARHA7", ALC287_FIXUP_CS35L41_I2C_2),
7628	SND_PCI_QUIRK(0x17aa, 0x387d, "Yoga S780-16 pro Quad AAC", ALC287_FIXUP_TAS2781_I2C),
7629	SND_PCI_QUIRK(0x17aa, 0x387e, "Yoga S780-16 pro Quad YC", ALC287_FIXUP_TAS2781_I2C),
7630	SND_PCI_QUIRK(0x17aa, 0x387f, "Yoga S780-16 pro dual LX", ALC287_FIXUP_TAS2781_I2C),
7631	SND_PCI_QUIRK(0x17aa, 0x3880, "Yoga S780-16 pro dual YC", ALC287_FIXUP_TAS2781_I2C),
7632	SND_PCI_QUIRK(0x17aa, 0x3881, "YB9 dual power mode2 YC", ALC287_FIXUP_TAS2781_I2C),
7633	SND_PCI_QUIRK(0x17aa, 0x3882, "Lenovo Yoga Pro 7 14APH8", ALC287_FIXUP_YOGA9_14IAP7_BASS_SPK_PIN),
7634	SND_PCI_QUIRK(0x17aa, 0x3884, "Y780 YG DUAL", ALC287_FIXUP_TAS2781_I2C),
7635	SND_PCI_QUIRK(0x17aa, 0x3886, "Y780 VECO DUAL", ALC287_FIXUP_TAS2781_I2C),
7636	SND_PCI_QUIRK(0x17aa, 0x3891, "Lenovo Yoga Pro 7 14AHP9", ALC287_FIXUP_YOGA9_14IAP7_BASS_SPK_PIN),
7637	SND_PCI_QUIRK(0x17aa, 0x38a5, "Y580P AMD dual", ALC287_FIXUP_TAS2781_I2C),
7638	SND_PCI_QUIRK(0x17aa, 0x38a7, "Y780P AMD YG dual", ALC287_FIXUP_TAS2781_I2C),
7639	SND_PCI_QUIRK(0x17aa, 0x38a8, "Y780P AMD VECO dual", ALC287_FIXUP_TAS2781_I2C),
7640	SND_PCI_QUIRK(0x17aa, 0x38a9, "Thinkbook 16P", ALC287_FIXUP_MG_RTKC_CSAMP_CS35L41_I2C_THINKPAD),
7641	SND_PCI_QUIRK(0x17aa, 0x38ab, "Thinkbook 16P", ALC287_FIXUP_MG_RTKC_CSAMP_CS35L41_I2C_THINKPAD),
7642	SND_PCI_QUIRK(0x17aa, 0x38b4, "Legion Slim 7 16IRH8", ALC287_FIXUP_CS35L41_I2C_2),
7643	HDA_CODEC_QUIRK(0x17aa, 0x391c, "Lenovo Yoga 7 2-in-1 14AKP10", ALC287_FIXUP_YOGA9_14IAP7_BASS_SPK_PIN),
7644	HDA_CODEC_QUIRK(0x17aa, 0x391d, "Lenovo Yoga 7 2-in-1 16AKP10", ALC287_FIXUP_YOGA9_14IAP7_BASS_SPK_PIN),
7645	SND_PCI_QUIRK(0x17aa, 0x38b5, "Legion Slim 7 16IRH8", ALC287_FIXUP_CS35L41_I2C_2),
7646	SND_PCI_QUIRK(0x17aa, 0x38b6, "Legion Slim 7 16APH8", ALC287_FIXUP_CS35L41_I2C_2),
7647	SND_PCI_QUIRK(0x17aa, 0x38b7, "Legion Slim 7 16APH8", ALC287_FIXUP_CS35L41_I2C_2),
7648	SND_PCI_QUIRK(0x17aa, 0x38b8, "Yoga S780-14.5 proX AMD YC Dual", ALC287_FIXUP_TAS2781_I2C),
7649	SND_PCI_QUIRK(0x17aa, 0x38b9, "Yoga S780-14.5 proX AMD LX Dual", ALC287_FIXUP_TAS2781_I2C),
7650	SND_PCI_QUIRK(0x17aa, 0x38ba, "Yoga S780-14.5 Air AMD quad YC", ALC287_FIXUP_TAS2781_I2C),
7651	SND_PCI_QUIRK(0x17aa, 0x38bb, "Yoga S780-14.5 Air AMD quad AAC", ALC287_FIXUP_TAS2781_I2C),
7652	SND_PCI_QUIRK(0x17aa, 0x38be, "Yoga S980-14.5 proX YC Dual", ALC287_FIXUP_TAS2781_I2C),
7653	SND_PCI_QUIRK(0x17aa, 0x38bf, "Yoga S980-14.5 proX LX Dual", ALC287_FIXUP_TAS2781_I2C),
7654	SND_PCI_QUIRK(0x17aa, 0x38c3, "Y980 DUAL", ALC287_FIXUP_TAS2781_I2C),
7655	SND_PCI_QUIRK(0x17aa, 0x38c7, "Thinkbook 13x Gen 4", ALC287_FIXUP_MG_RTKC_CSAMP_CS35L41_I2C_THINKPAD),
7656	SND_PCI_QUIRK(0x17aa, 0x38c8, "Thinkbook 13x Gen 4", ALC287_FIXUP_MG_RTKC_CSAMP_CS35L41_I2C_THINKPAD),
7657	SND_PCI_QUIRK(0x17aa, 0x38cb, "Y790 YG DUAL", ALC287_FIXUP_TAS2781_I2C),
7658	SND_PCI_QUIRK(0x17aa, 0x38cd, "Y790 VECO DUAL", ALC287_FIXUP_TAS2781_I2C),
7659	SND_PCI_QUIRK(0x17aa, 0x38d2, "Lenovo Yoga 9 14IMH9", ALC287_FIXUP_YOGA9_14IMH9_BASS_SPK_PIN),
7660	SND_PCI_QUIRK(0x17aa, 0x38d3, "Yoga S990-16 Pro IMH YC Dual", ALC287_FIXUP_TAS2781_I2C),
7661	SND_PCI_QUIRK(0x17aa, 0x38d4, "Yoga S990-16 Pro IMH VECO Dual", ALC287_FIXUP_TAS2781_I2C),
7662	SND_PCI_QUIRK(0x17aa, 0x38d5, "Yoga S990-16 Pro IMH YC Quad", ALC287_FIXUP_TAS2781_I2C),
7663	SND_PCI_QUIRK(0x17aa, 0x38d6, "Yoga S990-16 Pro IMH VECO Quad", ALC287_FIXUP_TAS2781_I2C),
7664	SND_PCI_QUIRK(0x17aa, 0x38d7, "Lenovo Yoga 9 14IMH9", ALC287_FIXUP_YOGA9_14IMH9_BASS_SPK_PIN),
7665	SND_PCI_QUIRK(0x17aa, 0x38df, "Yoga Y990 Intel YC Dual", ALC287_FIXUP_TAS2781_I2C),
7666	SND_PCI_QUIRK(0x17aa, 0x38e0, "Yoga Y990 Intel VECO Dual", ALC287_FIXUP_TAS2781_I2C),
7667	SND_PCI_QUIRK(0x17aa, 0x38f8, "Yoga Book 9i", ALC287_FIXUP_TAS2781_I2C),
7668	SND_PCI_QUIRK(0x17aa, 0x38df, "Y990 YG DUAL", ALC287_FIXUP_TAS2781_I2C),
7669	SND_PCI_QUIRK(0x17aa, 0x38f9, "Thinkbook 16P Gen5", ALC287_FIXUP_MG_RTKC_CSAMP_CS35L41_I2C_THINKPAD),
7670	SND_PCI_QUIRK(0x17aa, 0x38fa, "Thinkbook 16P Gen5", ALC287_FIXUP_MG_RTKC_CSAMP_CS35L41_I2C_THINKPAD),
7671	SND_PCI_QUIRK(0x17aa, 0x38fd, "ThinkBook plus Gen5 Hybrid", ALC287_FIXUP_TAS2781_I2C),
7672	SND_PCI_QUIRK(0x17aa, 0x3902, "Lenovo E50-80", ALC269_FIXUP_DMIC_THINKPAD_ACPI),
7673	SND_PCI_QUIRK(0x17aa, 0x390d, "Lenovo Yoga Pro 7 14ASP10", ALC287_FIXUP_YOGA9_14IAP7_BASS_SPK_PIN),
7674	SND_PCI_QUIRK(0x17aa, 0x3911, "Lenovo Yoga Pro 7 14IAH10", ALC287_FIXUP_YOGA9_14IAP7_BASS_SPK_PIN),
7675	SND_PCI_QUIRK(0x17aa, 0x3913, "Lenovo 145", ALC236_FIXUP_LENOVO_INV_DMIC),
7676	SND_PCI_QUIRK(0x17aa, 0x391a, "Lenovo Yoga Slim 7 14AKP10", ALC287_FIXUP_YOGA9_14IAP7_BASS_SPK_PIN),
7677	SND_PCI_QUIRK(0x17aa, 0x391f, "Yoga S990-16 pro Quad YC Quad", ALC287_FIXUP_TXNW2781_I2C),
7678	SND_PCI_QUIRK(0x17aa, 0x3920, "Yoga S990-16 pro Quad VECO Quad", ALC287_FIXUP_TXNW2781_I2C),
7679	SND_PCI_QUIRK(0x17aa, 0x3929, "Thinkbook 13x Gen 5", ALC287_FIXUP_MG_RTKC_CSAMP_CS35L41_I2C_THINKPAD),
7680	SND_PCI_QUIRK(0x17aa, 0x392b, "Thinkbook 13x Gen 5", ALC287_FIXUP_MG_RTKC_CSAMP_CS35L41_I2C_THINKPAD),
7681	SND_PCI_QUIRK(0x17aa, 0x3977, "IdeaPad S210", ALC283_FIXUP_INT_MIC),
7682	SND_PCI_QUIRK(0x17aa, 0x3978, "Lenovo B50-70", ALC269_FIXUP_DMIC_THINKPAD_ACPI),
7683	SND_PCI_QUIRK(0x17aa, 0x3bf8, "Quanta FL1", ALC269_FIXUP_PCM_44K),
7684	SND_PCI_QUIRK(0x17aa, 0x5013, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
7685	SND_PCI_QUIRK(0x17aa, 0x501a, "Thinkpad", ALC283_FIXUP_INT_MIC),
7686	SND_PCI_QUIRK(0x17aa, 0x501e, "Thinkpad L440", ALC292_FIXUP_TPT440_DOCK),
7687	SND_PCI_QUIRK(0x17aa, 0x5026, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
7688	SND_PCI_QUIRK(0x17aa, 0x5034, "Thinkpad T450", ALC292_FIXUP_TPT440_DOCK),
7689	SND_PCI_QUIRK(0x17aa, 0x5036, "Thinkpad T450s", ALC292_FIXUP_TPT440_DOCK),
7690	SND_PCI_QUIRK(0x17aa, 0x503c, "Thinkpad L450", ALC292_FIXUP_TPT440_DOCK),
7691	SND_PCI_QUIRK(0x17aa, 0x504a, "ThinkPad X260", ALC292_FIXUP_TPT440_DOCK),
7692	SND_PCI_QUIRK(0x17aa, 0x504b, "Thinkpad", ALC293_FIXUP_LENOVO_SPK_NOISE),
7693	SND_PCI_QUIRK(0x17aa, 0x5050, "Thinkpad T560p", ALC292_FIXUP_TPT460),
7694	SND_PCI_QUIRK(0x17aa, 0x5051, "Thinkpad L460", ALC292_FIXUP_TPT460),
7695	SND_PCI_QUIRK(0x17aa, 0x5053, "Thinkpad T460", ALC292_FIXUP_TPT460),
7696	SND_PCI_QUIRK(0x17aa, 0x505d, "Thinkpad", ALC298_FIXUP_TPT470_DOCK),
7697	SND_PCI_QUIRK(0x17aa, 0x505f, "Thinkpad", ALC298_FIXUP_TPT470_DOCK),
7698	SND_PCI_QUIRK(0x17aa, 0x5062, "Thinkpad", ALC298_FIXUP_TPT470_DOCK),
7699	SND_PCI_QUIRK(0x17aa, 0x508b, "Thinkpad X12 Gen 1", ALC287_FIXUP_LEGION_15IMHG05_SPEAKERS),
7700	SND_PCI_QUIRK(0x17aa, 0x5109, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
7701	SND_PCI_QUIRK(0x17aa, 0x511e, "Thinkpad", ALC298_FIXUP_TPT470_DOCK),
7702	SND_PCI_QUIRK(0x17aa, 0x511f, "Thinkpad", ALC298_FIXUP_TPT470_DOCK),
7703	SND_PCI_QUIRK(0x17aa, 0x9e54, "LENOVO NB", ALC269_FIXUP_LENOVO_EAPD),
7704	SND_PCI_QUIRK(0x17aa, 0x9e56, "Lenovo ZhaoYang CF4620Z", ALC286_FIXUP_SONY_MIC_NO_PRESENCE),
7705	SND_PCI_QUIRK(0x1849, 0x0269, "Positivo Master C6400", ALC269VB_FIXUP_ASUS_ZENBOOK),
7706	SND_PCI_QUIRK(0x1849, 0x1233, "ASRock NUC Box 1100", ALC233_FIXUP_NO_AUDIO_JACK),
7707	SND_PCI_QUIRK(0x1849, 0xa233, "Positivo Master C6300", ALC269_FIXUP_HEADSET_MIC),
7708	SND_PCI_QUIRK(0x1854, 0x0440, "LG CQ6", ALC256_FIXUP_HEADPHONE_AMP_VOL),
7709	SND_PCI_QUIRK(0x1854, 0x0441, "LG CQ6 AIO", ALC256_FIXUP_HEADPHONE_AMP_VOL),
7710	SND_PCI_QUIRK(0x1854, 0x0488, "LG gram 16 (16Z90R)", ALC298_FIXUP_SAMSUNG_AMP_V2_4_AMPS),
7711	SND_PCI_QUIRK(0x1854, 0x0489, "LG gram 16 (16Z90R-A)", ALC298_FIXUP_SAMSUNG_AMP_V2_4_AMPS),
7712	SND_PCI_QUIRK(0x1854, 0x048a, "LG gram 17 (17ZD90R)", ALC298_FIXUP_SAMSUNG_AMP_V2_4_AMPS),
7713	SND_PCI_QUIRK(0x1854, 0x0490, "LG Gram Style 14 (14Z90RS)", ALC298_FIXUP_LG_GRAM_STYLE_14),
7714	SND_PCI_QUIRK(0x19e5, 0x3204, "Huawei MACH-WX9", ALC256_FIXUP_HUAWEI_MACH_WX9_PINS),
7715	SND_PCI_QUIRK(0x19e5, 0x320f, "Huawei WRT-WX9 ", ALC256_FIXUP_ASUS_MIC_NO_PRESENCE),
7716	SND_PCI_QUIRK(0x19e5, 0x3212, "Huawei KLV-WX9 ", ALC256_FIXUP_ACER_HEADSET_MIC),
7717	SND_PCI_QUIRK(0x1b35, 0x1235, "CZC B20", ALC269_FIXUP_CZC_B20),
7718	SND_PCI_QUIRK(0x1b35, 0x1236, "CZC TMI", ALC269_FIXUP_CZC_TMI),
7719	SND_PCI_QUIRK(0x1b35, 0x1237, "CZC L101", ALC269_FIXUP_CZC_L101),
7720	SND_PCI_QUIRK(0x1b7d, 0xa831, "Ordissimo EVE2 ", ALC269VB_FIXUP_ORDISSIMO_EVE2), /* Also known as Malata PC-B1303 */
7721	SND_PCI_QUIRK(0x1c06, 0x2013, "Lemote A1802", ALC269_FIXUP_LEMOTE_A1802),
7722	SND_PCI_QUIRK(0x1c06, 0x2015, "Lemote A190X", ALC269_FIXUP_LEMOTE_A190X),
7723	SND_PCI_QUIRK(0x1c6c, 0x122a, "Positivo N14AP7", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
7724	SND_PCI_QUIRK(0x1c6c, 0x1251, "Positivo N14KP6-TG", ALC288_FIXUP_DELL1_MIC_NO_PRESENCE),
7725	SND_PCI_QUIRK(0x1d05, 0x1132, "TongFang PHxTxX1", ALC256_FIXUP_SET_COEF_DEFAULTS),
7726	SND_PCI_QUIRK(0x1d05, 0x1096, "TongFang GMxMRxx", ALC269_FIXUP_NO_SHUTUP),
7727	SND_PCI_QUIRK(0x1d05, 0x1100, "TongFang GKxNRxx", ALC269_FIXUP_NO_SHUTUP),
7728	SND_PCI_QUIRK(0x1d05, 0x1111, "TongFang GMxZGxx", ALC269_FIXUP_NO_SHUTUP),
7729	SND_PCI_QUIRK(0x1d05, 0x1119, "TongFang GMxZGxx", ALC269_FIXUP_NO_SHUTUP),
7730	SND_PCI_QUIRK(0x1d05, 0x1129, "TongFang GMxZGxx", ALC269_FIXUP_NO_SHUTUP),
7731	SND_PCI_QUIRK(0x1d05, 0x1147, "TongFang GMxTGxx", ALC269_FIXUP_NO_SHUTUP),
7732	SND_PCI_QUIRK(0x1d05, 0x115c, "TongFang GMxTGxx", ALC269_FIXUP_NO_SHUTUP),
7733	SND_PCI_QUIRK(0x1d05, 0x121b, "TongFang GMxAGxx", ALC269_FIXUP_NO_SHUTUP),
7734	SND_PCI_QUIRK(0x1d05, 0x1387, "TongFang GMxIXxx", ALC2XX_FIXUP_HEADSET_MIC),
7735	SND_PCI_QUIRK(0x1d05, 0x1409, "TongFang GMxIXxx", ALC2XX_FIXUP_HEADSET_MIC),
7736	SND_PCI_QUIRK(0x1d05, 0x300f, "TongFang X6AR5xxY", ALC2XX_FIXUP_HEADSET_MIC),
7737	SND_PCI_QUIRK(0x1d05, 0x3019, "TongFang X6FR5xxY", ALC2XX_FIXUP_HEADSET_MIC),
7738	SND_PCI_QUIRK(0x1d05, 0x3031, "TongFang X6AR55xU", ALC2XX_FIXUP_HEADSET_MIC),
7739	SND_PCI_QUIRK(0x1d17, 0x3288, "Haier Boyue G42", ALC269VC_FIXUP_ACER_VCOPPERBOX_PINS),
7740	SND_PCI_QUIRK(0x1d72, 0x1602, "RedmiBook", ALC255_FIXUP_XIAOMI_HEADSET_MIC),
7741	SND_PCI_QUIRK(0x1d72, 0x1701, "XiaomiNotebook Pro", ALC298_FIXUP_DELL1_MIC_NO_PRESENCE),
7742	SND_PCI_QUIRK(0x1d72, 0x1901, "RedmiBook 14", ALC256_FIXUP_ASUS_HEADSET_MIC),
7743	SND_PCI_QUIRK(0x1d72, 0x1945, "Redmi G", ALC256_FIXUP_ASUS_HEADSET_MIC),
7744	SND_PCI_QUIRK(0x1d72, 0x1947, "RedmiBook Air", ALC255_FIXUP_XIAOMI_HEADSET_MIC),
7745	SND_PCI_QUIRK(0x1e39, 0xca14, "MEDION NM14LNL", ALC233_FIXUP_MEDION_MTL_SPK),
7746	SND_PCI_QUIRK(0x1ee7, 0x2078, "HONOR BRB-X M1010", ALC2XX_FIXUP_HEADSET_MIC),
7747	SND_PCI_QUIRK(0x1f4c, 0xe001, "Minisforum V3 (SE)", ALC245_FIXUP_BASS_HP_DAC),
7748	SND_PCI_QUIRK(0x1f66, 0x0105, "Ayaneo Portable Game Player", ALC287_FIXUP_CS35L41_I2C_2),
7749	SND_PCI_QUIRK(0x2014, 0x800a, "Positivo ARN50", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
7750	SND_PCI_QUIRK(0x2039, 0x0001, "Inspur S14-G1", ALC295_FIXUP_CHROME_BOOK),
7751	SND_PCI_QUIRK(0x2782, 0x0214, "VAIO VJFE-CL", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
7752	SND_PCI_QUIRK(0x2782, 0x0228, "Infinix ZERO BOOK 13", ALC269VB_FIXUP_INFINIX_ZERO_BOOK_13),
7753	SND_PCI_QUIRK(0x2782, 0x0232, "CHUWI CoreBook XPro", ALC269VB_FIXUP_CHUWI_COREBOOK_XPRO),
7754	SND_PCI_QUIRK(0x2782, 0x1407, "Positivo P15X", ALC269_FIXUP_POSITIVO_P15X_HEADSET_MIC),
7755	SND_PCI_QUIRK(0x2782, 0x1409, "Positivo K116J", ALC269_FIXUP_POSITIVO_P15X_HEADSET_MIC),
7756	SND_PCI_QUIRK(0x2782, 0x1701, "Infinix Y4 Max", ALC269VC_FIXUP_INFINIX_Y4_MAX),
7757	SND_PCI_QUIRK(0x2782, 0x1705, "MEDION E15433", ALC269VC_FIXUP_INFINIX_Y4_MAX),
7758	SND_PCI_QUIRK(0x2782, 0x1707, "Vaio VJFE-ADL", ALC298_FIXUP_SPK_VOLUME),
7759	SND_PCI_QUIRK(0x2782, 0x4900, "MEDION E15443", ALC233_FIXUP_MEDION_MTL_SPK),
7760	SND_PCI_QUIRK(0x7017, 0x2014, "Star Labs StarFighter", ALC233_FIXUP_STARLABS_STARFIGHTER),
7761	SND_PCI_QUIRK(0x8086, 0x2074, "Intel NUC 8", ALC233_FIXUP_INTEL_NUC8_DMIC),
7762	SND_PCI_QUIRK(0x8086, 0x2080, "Intel NUC 8 Rugged", ALC256_FIXUP_INTEL_NUC8_RUGGED),
7763	SND_PCI_QUIRK(0x8086, 0x2081, "Intel NUC 10", ALC256_FIXUP_INTEL_NUC10),
7764	SND_PCI_QUIRK(0x8086, 0x3038, "Intel NUC 13", ALC295_FIXUP_CHROME_BOOK),
7765	SND_PCI_QUIRK(0xf111, 0x0001, "Framework Laptop", ALC295_FIXUP_FRAMEWORK_LAPTOP_MIC_NO_PRESENCE),
7766	SND_PCI_QUIRK(0xf111, 0x0006, "Framework Laptop", ALC295_FIXUP_FRAMEWORK_LAPTOP_MIC_NO_PRESENCE),
7767	SND_PCI_QUIRK(0xf111, 0x0009, "Framework Laptop", ALC295_FIXUP_FRAMEWORK_LAPTOP_MIC_NO_PRESENCE),
7768	SND_PCI_QUIRK(0xf111, 0x000b, "Framework Laptop", ALC295_FIXUP_FRAMEWORK_LAPTOP_MIC_NO_PRESENCE),
7769	SND_PCI_QUIRK(0xf111, 0x000c, "Framework Laptop", ALC295_FIXUP_FRAMEWORK_LAPTOP_MIC_NO_PRESENCE),
7770	SND_PCI_QUIRK(0xf111, 0x000f, "Framework Laptop", ALC295_FIXUP_FRAMEWORK_LAPTOP_MIC_NO_PRESENCE),
7771
7772#if 0
7773	/* Below is a quirk table taken from the old code.
7774	 * Basically the device should work as is without the fixup table.
7775	 * If BIOS doesn't give a proper info, enable the corresponding
7776	 * fixup entry.
7777	 */
7778	SND_PCI_QUIRK(0x1043, 0x8330, "ASUS Eeepc P703 P900A",
7779		      ALC269_FIXUP_AMIC),
7780	SND_PCI_QUIRK(0x1043, 0x1013, "ASUS N61Da", ALC269_FIXUP_AMIC),
7781	SND_PCI_QUIRK(0x1043, 0x1143, "ASUS B53f", ALC269_FIXUP_AMIC),
7782	SND_PCI_QUIRK(0x1043, 0x1133, "ASUS UJ20ft", ALC269_FIXUP_AMIC),
7783	SND_PCI_QUIRK(0x1043, 0x1183, "ASUS K72DR", ALC269_FIXUP_AMIC),
7784	SND_PCI_QUIRK(0x1043, 0x11b3, "ASUS K52DR", ALC269_FIXUP_AMIC),
7785	SND_PCI_QUIRK(0x1043, 0x11e3, "ASUS U33Jc", ALC269_FIXUP_AMIC),
7786	SND_PCI_QUIRK(0x1043, 0x1273, "ASUS UL80Jt", ALC269_FIXUP_AMIC),
7787	SND_PCI_QUIRK(0x1043, 0x1283, "ASUS U53Jc", ALC269_FIXUP_AMIC),
7788	SND_PCI_QUIRK(0x1043, 0x12b3, "ASUS N82JV", ALC269_FIXUP_AMIC),
7789	SND_PCI_QUIRK(0x1043, 0x12d3, "ASUS N61Jv", ALC269_FIXUP_AMIC),
7790	SND_PCI_QUIRK(0x1043, 0x13a3, "ASUS UL30Vt", ALC269_FIXUP_AMIC),
7791	SND_PCI_QUIRK(0x1043, 0x1373, "ASUS G73JX", ALC269_FIXUP_AMIC),
7792	SND_PCI_QUIRK(0x1043, 0x1383, "ASUS UJ30Jc", ALC269_FIXUP_AMIC),
7793	SND_PCI_QUIRK(0x1043, 0x13d3, "ASUS N61JA", ALC269_FIXUP_AMIC),
7794	SND_PCI_QUIRK(0x1043, 0x1413, "ASUS UL50", ALC269_FIXUP_AMIC),
7795	SND_PCI_QUIRK(0x1043, 0x1443, "ASUS UL30", ALC269_FIXUP_AMIC),
7796	SND_PCI_QUIRK(0x1043, 0x1453, "ASUS M60Jv", ALC269_FIXUP_AMIC),
7797	SND_PCI_QUIRK(0x1043, 0x1483, "ASUS UL80", ALC269_FIXUP_AMIC),
7798	SND_PCI_QUIRK(0x1043, 0x14f3, "ASUS F83Vf", ALC269_FIXUP_AMIC),
7799	SND_PCI_QUIRK(0x1043, 0x14e3, "ASUS UL20", ALC269_FIXUP_AMIC),
7800	SND_PCI_QUIRK(0x1043, 0x1513, "ASUS UX30", ALC269_FIXUP_AMIC),
7801	SND_PCI_QUIRK(0x1043, 0x1593, "ASUS N51Vn", ALC269_FIXUP_AMIC),
7802	SND_PCI_QUIRK(0x1043, 0x15a3, "ASUS N60Jv", ALC269_FIXUP_AMIC),
7803	SND_PCI_QUIRK(0x1043, 0x15b3, "ASUS N60Dp", ALC269_FIXUP_AMIC),
7804	SND_PCI_QUIRK(0x1043, 0x15c3, "ASUS N70De", ALC269_FIXUP_AMIC),
7805	SND_PCI_QUIRK(0x1043, 0x15e3, "ASUS F83T", ALC269_FIXUP_AMIC),
7806	SND_PCI_QUIRK(0x1043, 0x1643, "ASUS M60J", ALC269_FIXUP_AMIC),
7807	SND_PCI_QUIRK(0x1043, 0x1653, "ASUS U50", ALC269_FIXUP_AMIC),
7808	SND_PCI_QUIRK(0x1043, 0x1693, "ASUS F50N", ALC269_FIXUP_AMIC),
7809	SND_PCI_QUIRK(0x1043, 0x16a3, "ASUS F5Q", ALC269_FIXUP_AMIC),
7810	SND_PCI_QUIRK(0x1043, 0x1723, "ASUS P80", ALC269_FIXUP_AMIC),
7811	SND_PCI_QUIRK(0x1043, 0x1743, "ASUS U80", ALC269_FIXUP_AMIC),
7812	SND_PCI_QUIRK(0x1043, 0x1773, "ASUS U20A", ALC269_FIXUP_AMIC),
7813	SND_PCI_QUIRK(0x1043, 0x1883, "ASUS F81Se", ALC269_FIXUP_AMIC),
7814	SND_PCI_QUIRK(0x152d, 0x1778, "Quanta ON1", ALC269_FIXUP_DMIC),
7815	SND_PCI_QUIRK(0x17aa, 0x3be9, "Quanta Wistron", ALC269_FIXUP_AMIC),
7816	SND_PCI_QUIRK(0x17aa, 0x3bf8, "Quanta FL1", ALC269_FIXUP_AMIC),
7817	SND_PCI_QUIRK(0x17ff, 0x059a, "Quanta EL3", ALC269_FIXUP_DMIC),
7818	SND_PCI_QUIRK(0x17ff, 0x059b, "Quanta JR1", ALC269_FIXUP_DMIC),
7819#endif
7820	{}
7821};
7822
7823static const struct hda_quirk alc269_fixup_vendor_tbl[] = {
7824	SND_PCI_QUIRK_VENDOR(0x1025, "Acer Aspire", ALC271_FIXUP_DMIC),
7825	SND_PCI_QUIRK_VENDOR(0x103c, "HP", ALC269_FIXUP_HP_MUTE_LED),
7826	SND_PCI_QUIRK_VENDOR(0x104d, "Sony VAIO", ALC269_FIXUP_SONY_VAIO),
7827	SND_PCI_QUIRK_VENDOR(0x17aa, "Lenovo XPAD", ALC269_FIXUP_LENOVO_XPAD_ACPI),
7828	SND_PCI_QUIRK_VENDOR(0x19e5, "Huawei Matebook", ALC255_FIXUP_MIC_MUTE_LED),
7829	{}
7830};
7831
7832static const struct hda_model_fixup alc269_fixup_models[] = {
7833	{.id = ALC269_FIXUP_AMIC, .name = "laptop-amic"},
7834	{.id = ALC269_FIXUP_DMIC, .name = "laptop-dmic"},
7835	{.id = ALC269_FIXUP_STEREO_DMIC, .name = "alc269-dmic"},
7836	{.id = ALC271_FIXUP_DMIC, .name = "alc271-dmic"},
7837	{.id = ALC269_FIXUP_INV_DMIC, .name = "inv-dmic"},
7838	{.id = ALC269_FIXUP_HEADSET_MIC, .name = "headset-mic"},
7839	{.id = ALC269_FIXUP_HEADSET_MODE, .name = "headset-mode"},
7840	{.id = ALC269_FIXUP_HEADSET_MODE_NO_HP_MIC, .name = "headset-mode-no-hp-mic"},
7841	{.id = ALC269_FIXUP_LENOVO_DOCK, .name = "lenovo-dock"},
7842	{.id = ALC269_FIXUP_LENOVO_DOCK_LIMIT_BOOST, .name = "lenovo-dock-limit-boost"},
7843	{.id = ALC269_FIXUP_HP_GPIO_LED, .name = "hp-gpio-led"},
7844	{.id = ALC269_FIXUP_HP_DOCK_GPIO_MIC1_LED, .name = "hp-dock-gpio-mic1-led"},
7845	{.id = ALC269_FIXUP_DELL1_MIC_NO_PRESENCE, .name = "dell-headset-multi"},
7846	{.id = ALC269_FIXUP_DELL2_MIC_NO_PRESENCE, .name = "dell-headset-dock"},
7847	{.id = ALC269_FIXUP_DELL3_MIC_NO_PRESENCE, .name = "dell-headset3"},
7848	{.id = ALC269_FIXUP_DELL4_MIC_NO_PRESENCE, .name = "dell-headset4"},
7849	{.id = ALC269_FIXUP_DELL4_MIC_NO_PRESENCE_QUIET, .name = "dell-headset4-quiet"},
7850	{.id = ALC283_FIXUP_CHROME_BOOK, .name = "alc283-dac-wcaps"},
7851	{.id = ALC283_FIXUP_SENSE_COMBO_JACK, .name = "alc283-sense-combo"},
7852	{.id = ALC292_FIXUP_TPT440_DOCK, .name = "tpt440-dock"},
7853	{.id = ALC292_FIXUP_TPT440, .name = "tpt440"},
7854	{.id = ALC292_FIXUP_TPT460, .name = "tpt460"},
7855	{.id = ALC298_FIXUP_TPT470_DOCK_FIX, .name = "tpt470-dock-fix"},
7856	{.id = ALC298_FIXUP_TPT470_DOCK, .name = "tpt470-dock"},
7857	{.id = ALC233_FIXUP_LENOVO_MULTI_CODECS, .name = "dual-codecs"},
7858	{.id = ALC233_FIXUP_STARLABS_STARFIGHTER, .name = "starlabs-starfighter"},
7859	{.id = ALC700_FIXUP_INTEL_REFERENCE, .name = "alc700-ref"},
7860	{.id = ALC269_FIXUP_SONY_VAIO, .name = "vaio"},
7861	{.id = ALC269_FIXUP_DELL_M101Z, .name = "dell-m101z"},
7862	{.id = ALC269_FIXUP_ASUS_G73JW, .name = "asus-g73jw"},
7863	{.id = ALC269_FIXUP_LENOVO_EAPD, .name = "lenovo-eapd"},
7864	{.id = ALC275_FIXUP_SONY_HWEQ, .name = "sony-hweq"},
7865	{.id = ALC269_FIXUP_PCM_44K, .name = "pcm44k"},
7866	{.id = ALC269_FIXUP_LIFEBOOK, .name = "lifebook"},
7867	{.id = ALC269_FIXUP_LIFEBOOK_EXTMIC, .name = "lifebook-extmic"},
7868	{.id = ALC269_FIXUP_LIFEBOOK_HP_PIN, .name = "lifebook-hp-pin"},
7869	{.id = ALC255_FIXUP_LIFEBOOK_U7x7_HEADSET_MIC, .name = "lifebook-u7x7"},
7870	{.id = ALC269VB_FIXUP_AMIC, .name = "alc269vb-amic"},
7871	{.id = ALC269VB_FIXUP_DMIC, .name = "alc269vb-dmic"},
7872	{.id = ALC269_FIXUP_HP_MUTE_LED_MIC1, .name = "hp-mute-led-mic1"},
7873	{.id = ALC269_FIXUP_HP_MUTE_LED_MIC2, .name = "hp-mute-led-mic2"},
7874	{.id = ALC269_FIXUP_HP_MUTE_LED_MIC3, .name = "hp-mute-led-mic3"},
7875	{.id = ALC269_FIXUP_HP_GPIO_MIC1_LED, .name = "hp-gpio-mic1"},
7876	{.id = ALC269_FIXUP_HP_LINE1_MIC1_LED, .name = "hp-line1-mic1"},
7877	{.id = ALC269_FIXUP_NO_SHUTUP, .name = "noshutup"},
7878	{.id = ALC286_FIXUP_SONY_MIC_NO_PRESENCE, .name = "sony-nomic"},
7879	{.id = ALC269_FIXUP_ASPIRE_HEADSET_MIC, .name = "aspire-headset-mic"},
7880	{.id = ALC269_FIXUP_ASUS_X101, .name = "asus-x101"},
7881	{.id = ALC271_FIXUP_HP_GATE_MIC_JACK, .name = "acer-ao7xx"},
7882	{.id = ALC271_FIXUP_HP_GATE_MIC_JACK_E1_572, .name = "acer-aspire-e1"},
7883	{.id = ALC269_FIXUP_ACER_AC700, .name = "acer-ac700"},
7884	{.id = ALC269_FIXUP_LIMIT_INT_MIC_BOOST, .name = "limit-mic-boost"},
7885	{.id = ALC269VB_FIXUP_ASUS_ZENBOOK, .name = "asus-zenbook"},
7886	{.id = ALC269VB_FIXUP_ASUS_ZENBOOK_UX31A, .name = "asus-zenbook-ux31a"},
7887	{.id = ALC269VB_FIXUP_ORDISSIMO_EVE2, .name = "ordissimo"},
7888	{.id = ALC282_FIXUP_ASUS_TX300, .name = "asus-tx300"},
7889	{.id = ALC283_FIXUP_INT_MIC, .name = "alc283-int-mic"},
7890	{.id = ALC290_FIXUP_MONO_SPEAKERS_HSJACK, .name = "mono-speakers"},
7891	{.id = ALC290_FIXUP_SUBWOOFER_HSJACK, .name = "alc290-subwoofer"},
7892	{.id = ALC269_FIXUP_THINKPAD_ACPI, .name = "thinkpad"},
7893	{.id = ALC269_FIXUP_LENOVO_XPAD_ACPI, .name = "lenovo-xpad-led"},
7894	{.id = ALC269_FIXUP_DMIC_THINKPAD_ACPI, .name = "dmic-thinkpad"},
7895	{.id = ALC255_FIXUP_ACER_MIC_NO_PRESENCE, .name = "alc255-acer"},
7896	{.id = ALC255_FIXUP_ASUS_MIC_NO_PRESENCE, .name = "alc255-asus"},
7897	{.id = ALC255_FIXUP_DELL1_MIC_NO_PRESENCE, .name = "alc255-dell1"},
7898	{.id = ALC255_FIXUP_DELL2_MIC_NO_PRESENCE, .name = "alc255-dell2"},
7899	{.id = ALC293_FIXUP_DELL1_MIC_NO_PRESENCE, .name = "alc293-dell1"},
7900	{.id = ALC283_FIXUP_HEADSET_MIC, .name = "alc283-headset"},
7901	{.id = ALC255_FIXUP_MIC_MUTE_LED, .name = "alc255-dell-mute"},
7902	{.id = ALC282_FIXUP_ASPIRE_V5_PINS, .name = "aspire-v5"},
7903	{.id = ALC269VB_FIXUP_ASPIRE_E1_COEF, .name = "aspire-e1-coef"},
7904	{.id = ALC280_FIXUP_HP_GPIO4, .name = "hp-gpio4"},
7905	{.id = ALC286_FIXUP_HP_GPIO_LED, .name = "hp-gpio-led"},
7906	{.id = ALC280_FIXUP_HP_GPIO2_MIC_HOTKEY, .name = "hp-gpio2-hotkey"},
7907	{.id = ALC280_FIXUP_HP_DOCK_PINS, .name = "hp-dock-pins"},
7908	{.id = ALC269_FIXUP_HP_DOCK_GPIO_MIC1_LED, .name = "hp-dock-gpio-mic"},
7909	{.id = ALC280_FIXUP_HP_9480M, .name = "hp-9480m"},
7910	{.id = ALC288_FIXUP_DELL_HEADSET_MODE, .name = "alc288-dell-headset"},
7911	{.id = ALC288_FIXUP_DELL1_MIC_NO_PRESENCE, .name = "alc288-dell1"},
7912	{.id = ALC288_FIXUP_DELL_XPS_13, .name = "alc288-dell-xps13"},
7913	{.id = ALC292_FIXUP_DELL_E7X, .name = "dell-e7x"},
7914	{.id = ALC293_FIXUP_DISABLE_AAMIX_MULTIJACK, .name = "alc293-dell"},
7915	{.id = ALC298_FIXUP_DELL1_MIC_NO_PRESENCE, .name = "alc298-dell1"},
7916	{.id = ALC298_FIXUP_DELL_AIO_MIC_NO_PRESENCE, .name = "alc298-dell-aio"},
7917	{.id = ALC275_FIXUP_DELL_XPS, .name = "alc275-dell-xps"},
7918	{.id = ALC293_FIXUP_LENOVO_SPK_NOISE, .name = "lenovo-spk-noise"},
7919	{.id = ALC233_FIXUP_LENOVO_LINE2_MIC_HOTKEY, .name = "lenovo-hotkey"},
7920	{.id = ALC255_FIXUP_DELL_SPK_NOISE, .name = "dell-spk-noise"},
7921	{.id = ALC225_FIXUP_DELL1_MIC_NO_PRESENCE, .name = "alc225-dell1"},
7922	{.id = ALC295_FIXUP_DISABLE_DAC3, .name = "alc295-disable-dac3"},
7923	{.id = ALC285_FIXUP_SPEAKER2_TO_DAC1, .name = "alc285-speaker2-to-dac1"},
7924	{.id = ALC280_FIXUP_HP_HEADSET_MIC, .name = "alc280-hp-headset"},
7925	{.id = ALC221_FIXUP_HP_FRONT_MIC, .name = "alc221-hp-mic"},
7926	{.id = ALC298_FIXUP_SPK_VOLUME, .name = "alc298-spk-volume"},
7927	{.id = ALC256_FIXUP_DELL_INSPIRON_7559_SUBWOOFER, .name = "dell-inspiron-7559"},
7928	{.id = ALC269_FIXUP_ATIV_BOOK_8, .name = "ativ-book"},
7929	{.id = ALC221_FIXUP_HP_MIC_NO_PRESENCE, .name = "alc221-hp-mic"},
7930	{.id = ALC256_FIXUP_ASUS_HEADSET_MODE, .name = "alc256-asus-headset"},
7931	{.id = ALC256_FIXUP_ASUS_MIC, .name = "alc256-asus-mic"},
7932	{.id = ALC256_FIXUP_ASUS_AIO_GPIO2, .name = "alc256-asus-aio"},
7933	{.id = ALC233_FIXUP_ASUS_MIC_NO_PRESENCE, .name = "alc233-asus"},
7934	{.id = ALC233_FIXUP_EAPD_COEF_AND_MIC_NO_PRESENCE, .name = "alc233-eapd"},
7935	{.id = ALC294_FIXUP_LENOVO_MIC_LOCATION, .name = "alc294-lenovo-mic"},
7936	{.id = ALC225_FIXUP_DELL_WYSE_MIC_NO_PRESENCE, .name = "alc225-wyse"},
7937	{.id = ALC274_FIXUP_DELL_AIO_LINEOUT_VERB, .name = "alc274-dell-aio"},
7938	{.id = ALC255_FIXUP_DUMMY_LINEOUT_VERB, .name = "alc255-dummy-lineout"},
7939	{.id = ALC255_FIXUP_DELL_HEADSET_MIC, .name = "alc255-dell-headset"},
7940	{.id = ALC295_FIXUP_HP_X360, .name = "alc295-hp-x360"},
7941	{.id = ALC225_FIXUP_HEADSET_JACK, .name = "alc-headset-jack"},
7942	{.id = ALC295_FIXUP_CHROME_BOOK, .name = "alc-chrome-book"},
7943	{.id = ALC256_FIXUP_CHROME_BOOK, .name = "alc-2024y-chromebook"},
7944	{.id = ALC299_FIXUP_PREDATOR_SPK, .name = "predator-spk"},
7945	{.id = ALC298_FIXUP_HUAWEI_MBX_STEREO, .name = "huawei-mbx-stereo"},
7946	{.id = ALC256_FIXUP_MEDION_HEADSET_NO_PRESENCE, .name = "alc256-medion-headset"},
7947	{.id = ALC298_FIXUP_SAMSUNG_AMP, .name = "alc298-samsung-amp"},
7948	{.id = ALC298_FIXUP_SAMSUNG_AMP_V2_2_AMPS, .name = "alc298-samsung-amp-v2-2-amps"},
7949	{.id = ALC298_FIXUP_SAMSUNG_AMP_V2_4_AMPS, .name = "alc298-samsung-amp-v2-4-amps"},
7950	{.id = ALC256_FIXUP_SAMSUNG_HEADPHONE_VERY_QUIET, .name = "alc256-samsung-headphone"},
7951	{.id = ALC255_FIXUP_XIAOMI_HEADSET_MIC, .name = "alc255-xiaomi-headset"},
7952	{.id = ALC274_FIXUP_HP_MIC, .name = "alc274-hp-mic-detect"},
7953	{.id = ALC245_FIXUP_HP_X360_AMP, .name = "alc245-hp-x360-amp"},
7954	{.id = ALC295_FIXUP_HP_OMEN, .name = "alc295-hp-omen"},
7955	{.id = ALC285_FIXUP_HP_SPECTRE_X360, .name = "alc285-hp-spectre-x360"},
7956	{.id = ALC285_FIXUP_HP_SPECTRE_X360_EB1, .name = "alc285-hp-spectre-x360-eb1"},
7957	{.id = ALC285_FIXUP_HP_SPECTRE_X360_DF1, .name = "alc285-hp-spectre-x360-df1"},
7958	{.id = ALC285_FIXUP_HP_ENVY_X360, .name = "alc285-hp-envy-x360"},
7959	{.id = ALC287_FIXUP_IDEAPAD_BASS_SPK_AMP, .name = "alc287-ideapad-bass-spk-amp"},
7960	{.id = ALC287_FIXUP_YOGA9_14IAP7_BASS_SPK_PIN, .name = "alc287-yoga9-bass-spk-pin"},
7961	{.id = ALC623_FIXUP_LENOVO_THINKSTATION_P340, .name = "alc623-lenovo-thinkstation-p340"},
7962	{.id = ALC255_FIXUP_ACER_HEADPHONE_AND_MIC, .name = "alc255-acer-headphone-and-mic"},
7963	{.id = ALC285_FIXUP_HP_GPIO_AMP_INIT, .name = "alc285-hp-amp-init"},
7964	{.id = ALC236_FIXUP_LENOVO_INV_DMIC, .name = "alc236-fixup-lenovo-inv-mic"},
7965	{.id = ALC2XX_FIXUP_HEADSET_MIC, .name = "alc2xx-fixup-headset-mic"},
7966	{.id = ALC245_FIXUP_BASS_HP_DAC, .name = "alc245-fixup-bass-hp-dac"},
7967	{}
7968};
7969#define ALC225_STANDARD_PINS \
7970	{0x21, 0x04211020}
7971
7972#define ALC256_STANDARD_PINS \
7973	{0x12, 0x90a60140}, \
7974	{0x14, 0x90170110}, \
7975	{0x21, 0x02211020}
7976
7977#define ALC282_STANDARD_PINS \
7978	{0x14, 0x90170110}
7979
7980#define ALC290_STANDARD_PINS \
7981	{0x12, 0x99a30130}
7982
7983#define ALC292_STANDARD_PINS \
7984	{0x14, 0x90170110}, \
7985	{0x15, 0x0221401f}
7986
7987#define ALC295_STANDARD_PINS \
7988	{0x12, 0xb7a60130}, \
7989	{0x14, 0x90170110}, \
7990	{0x21, 0x04211020}
7991
7992#define ALC298_STANDARD_PINS \
7993	{0x12, 0x90a60130}, \
7994	{0x21, 0x03211020}
7995
7996static const struct snd_hda_pin_quirk alc269_pin_fixup_tbl[] = {
7997	SND_HDA_PIN_QUIRK(0x10ec0221, 0x103c, "HP Workstation", ALC221_FIXUP_HP_HEADSET_MIC,
7998		{0x14, 0x01014020},
7999		{0x17, 0x90170110},
8000		{0x18, 0x02a11030},
8001		{0x19, 0x0181303F},
8002		{0x21, 0x0221102f}),
8003	SND_HDA_PIN_QUIRK(0x10ec0255, 0x1025, "Acer", ALC255_FIXUP_ACER_MIC_NO_PRESENCE,
8004		{0x12, 0x90a601c0},
8005		{0x14, 0x90171120},
8006		{0x21, 0x02211030}),
8007	SND_HDA_PIN_QUIRK(0x10ec0255, 0x1043, "ASUS", ALC255_FIXUP_ASUS_MIC_NO_PRESENCE,
8008		{0x14, 0x90170110},
8009		{0x1b, 0x90a70130},
8010		{0x21, 0x03211020}),
8011	SND_HDA_PIN_QUIRK(0x10ec0255, 0x1043, "ASUS", ALC255_FIXUP_ASUS_MIC_NO_PRESENCE,
8012		{0x1a, 0x90a70130},
8013		{0x1b, 0x90170110},
8014		{0x21, 0x03211020}),
8015	SND_HDA_PIN_QUIRK(0x10ec0225, 0x1028, "Dell", ALC225_FIXUP_DELL1_MIC_NO_PRESENCE,
8016		ALC225_STANDARD_PINS,
8017		{0x12, 0xb7a60130},
8018		{0x14, 0x901701a0}),
8019	SND_HDA_PIN_QUIRK(0x10ec0225, 0x1028, "Dell", ALC225_FIXUP_DELL1_MIC_NO_PRESENCE,
8020		ALC225_STANDARD_PINS,
8021		{0x12, 0xb7a60130},
8022		{0x14, 0x901701b0}),
8023	SND_HDA_PIN_QUIRK(0x10ec0225, 0x1028, "Dell", ALC225_FIXUP_DELL1_MIC_NO_PRESENCE,
8024		ALC225_STANDARD_PINS,
8025		{0x12, 0xb7a60150},
8026		{0x14, 0x901701a0}),
8027	SND_HDA_PIN_QUIRK(0x10ec0225, 0x1028, "Dell", ALC225_FIXUP_DELL1_MIC_NO_PRESENCE,
8028		ALC225_STANDARD_PINS,
8029		{0x12, 0xb7a60150},
8030		{0x14, 0x901701b0}),
8031	SND_HDA_PIN_QUIRK(0x10ec0225, 0x1028, "Dell", ALC225_FIXUP_DELL1_MIC_NO_PRESENCE,
8032		ALC225_STANDARD_PINS,
8033		{0x12, 0xb7a60130},
8034		{0x1b, 0x90170110}),
8035	SND_HDA_PIN_QUIRK(0x10ec0233, 0x8086, "Intel NUC Skull Canyon", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE,
8036		{0x1b, 0x01111010},
8037		{0x1e, 0x01451130},
8038		{0x21, 0x02211020}),
8039	SND_HDA_PIN_QUIRK(0x10ec0235, 0x17aa, "Lenovo", ALC233_FIXUP_LENOVO_LINE2_MIC_HOTKEY,
8040		{0x12, 0x90a60140},
8041		{0x14, 0x90170110},
8042		{0x19, 0x02a11030},
8043		{0x21, 0x02211020}),
8044	SND_HDA_PIN_QUIRK(0x10ec0235, 0x17aa, "Lenovo", ALC294_FIXUP_LENOVO_MIC_LOCATION,
8045		{0x14, 0x90170110},
8046		{0x19, 0x02a11030},
8047		{0x1a, 0x02a11040},
8048		{0x1b, 0x01014020},
8049		{0x21, 0x0221101f}),
8050	SND_HDA_PIN_QUIRK(0x10ec0235, 0x17aa, "Lenovo", ALC294_FIXUP_LENOVO_MIC_LOCATION,
8051		{0x14, 0x90170110},
8052		{0x19, 0x02a11030},
8053		{0x1a, 0x02a11040},
8054		{0x1b, 0x01011020},
8055		{0x21, 0x0221101f}),
8056	SND_HDA_PIN_QUIRK(0x10ec0235, 0x17aa, "Lenovo", ALC294_FIXUP_LENOVO_MIC_LOCATION,
8057		{0x14, 0x90170110},
8058		{0x19, 0x02a11020},
8059		{0x1a, 0x02a11030},
8060		{0x21, 0x0221101f}),
8061	SND_HDA_PIN_QUIRK(0x10ec0236, 0x1028, "Dell", ALC236_FIXUP_DELL_AIO_HEADSET_MIC,
8062		{0x21, 0x02211010}),
8063	SND_HDA_PIN_QUIRK(0x10ec0236, 0x103c, "HP", ALC256_FIXUP_HP_HEADSET_MIC,
8064		{0x14, 0x90170110},
8065		{0x19, 0x02a11020},
8066		{0x21, 0x02211030}),
8067	SND_HDA_PIN_QUIRK(0x10ec0255, 0x1028, "Dell", ALC255_FIXUP_DELL2_MIC_NO_PRESENCE,
8068		{0x14, 0x90170110},
8069		{0x21, 0x02211020}),
8070	SND_HDA_PIN_QUIRK(0x10ec0255, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
8071		{0x14, 0x90170130},
8072		{0x21, 0x02211040}),
8073	SND_HDA_PIN_QUIRK(0x10ec0255, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
8074		{0x12, 0x90a60140},
8075		{0x14, 0x90170110},
8076		{0x21, 0x02211020}),
8077	SND_HDA_PIN_QUIRK(0x10ec0255, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
8078		{0x12, 0x90a60160},
8079		{0x14, 0x90170120},
8080		{0x21, 0x02211030}),
8081	SND_HDA_PIN_QUIRK(0x10ec0255, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
8082		{0x14, 0x90170110},
8083		{0x1b, 0x02011020},
8084		{0x21, 0x0221101f}),
8085	SND_HDA_PIN_QUIRK(0x10ec0255, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
8086		{0x14, 0x90170110},
8087		{0x1b, 0x01011020},
8088		{0x21, 0x0221101f}),
8089	SND_HDA_PIN_QUIRK(0x10ec0255, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
8090		{0x14, 0x90170130},
8091		{0x1b, 0x01014020},
8092		{0x21, 0x0221103f}),
8093	SND_HDA_PIN_QUIRK(0x10ec0255, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
8094		{0x14, 0x90170130},
8095		{0x1b, 0x01011020},
8096		{0x21, 0x0221103f}),
8097	SND_HDA_PIN_QUIRK(0x10ec0255, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
8098		{0x14, 0x90170130},
8099		{0x1b, 0x02011020},
8100		{0x21, 0x0221103f}),
8101	SND_HDA_PIN_QUIRK(0x10ec0255, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
8102		{0x14, 0x90170150},
8103		{0x1b, 0x02011020},
8104		{0x21, 0x0221105f}),
8105	SND_HDA_PIN_QUIRK(0x10ec0255, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
8106		{0x14, 0x90170110},
8107		{0x1b, 0x01014020},
8108		{0x21, 0x0221101f}),
8109	SND_HDA_PIN_QUIRK(0x10ec0255, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
8110		{0x12, 0x90a60160},
8111		{0x14, 0x90170120},
8112		{0x17, 0x90170140},
8113		{0x21, 0x0321102f}),
8114	SND_HDA_PIN_QUIRK(0x10ec0255, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
8115		{0x12, 0x90a60160},
8116		{0x14, 0x90170130},
8117		{0x21, 0x02211040}),
8118	SND_HDA_PIN_QUIRK(0x10ec0255, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
8119		{0x12, 0x90a60160},
8120		{0x14, 0x90170140},
8121		{0x21, 0x02211050}),
8122	SND_HDA_PIN_QUIRK(0x10ec0255, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
8123		{0x12, 0x90a60170},
8124		{0x14, 0x90170120},
8125		{0x21, 0x02211030}),
8126	SND_HDA_PIN_QUIRK(0x10ec0255, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
8127		{0x12, 0x90a60170},
8128		{0x14, 0x90170130},
8129		{0x21, 0x02211040}),
8130	SND_HDA_PIN_QUIRK(0x10ec0255, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
8131		{0x12, 0x90a60170},
8132		{0x14, 0x90171130},
8133		{0x21, 0x02211040}),
8134	SND_HDA_PIN_QUIRK(0x10ec0255, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
8135		{0x12, 0x90a60170},
8136		{0x14, 0x90170140},
8137		{0x21, 0x02211050}),
8138	SND_HDA_PIN_QUIRK(0x10ec0255, 0x1028, "Dell Inspiron 5548", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
8139		{0x12, 0x90a60180},
8140		{0x14, 0x90170130},
8141		{0x21, 0x02211040}),
8142	SND_HDA_PIN_QUIRK(0x10ec0255, 0x1028, "Dell Inspiron 5565", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
8143		{0x12, 0x90a60180},
8144		{0x14, 0x90170120},
8145		{0x21, 0x02211030}),
8146	SND_HDA_PIN_QUIRK(0x10ec0255, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
8147		{0x1b, 0x01011020},
8148		{0x21, 0x02211010}),
8149	SND_HDA_PIN_QUIRK(0x10ec0256, 0x1043, "ASUS", ALC256_FIXUP_ASUS_MIC,
8150		{0x14, 0x90170110},
8151		{0x1b, 0x90a70130},
8152		{0x21, 0x04211020}),
8153	SND_HDA_PIN_QUIRK(0x10ec0256, 0x1043, "ASUS", ALC256_FIXUP_ASUS_MIC,
8154		{0x14, 0x90170110},
8155		{0x1b, 0x90a70130},
8156		{0x21, 0x03211020}),
8157	SND_HDA_PIN_QUIRK(0x10ec0256, 0x1043, "ASUS", ALC256_FIXUP_ASUS_MIC_NO_PRESENCE,
8158		{0x12, 0x90a60130},
8159		{0x14, 0x90170110},
8160		{0x21, 0x03211020}),
8161	SND_HDA_PIN_QUIRK(0x10ec0256, 0x1043, "ASUS", ALC256_FIXUP_ASUS_MIC_NO_PRESENCE,
8162		{0x12, 0x90a60130},
8163		{0x14, 0x90170110},
8164		{0x21, 0x04211020}),
8165	SND_HDA_PIN_QUIRK(0x10ec0256, 0x1043, "ASUS", ALC256_FIXUP_ASUS_MIC_NO_PRESENCE,
8166		{0x1a, 0x90a70130},
8167		{0x1b, 0x90170110},
8168		{0x21, 0x03211020}),
8169       SND_HDA_PIN_QUIRK(0x10ec0256, 0x103c, "HP", ALC256_FIXUP_HP_HEADSET_MIC,
8170		{0x14, 0x90170110},
8171		{0x19, 0x02a11020},
8172		{0x21, 0x0221101f}),
8173       SND_HDA_PIN_QUIRK(0x10ec0274, 0x103c, "HP", ALC274_FIXUP_HP_HEADSET_MIC,
8174		{0x17, 0x90170110},
8175		{0x19, 0x03a11030},
8176		{0x21, 0x03211020}),
8177	SND_HDA_PIN_QUIRK(0x10ec0280, 0x103c, "HP", ALC280_FIXUP_HP_GPIO4,
8178		{0x12, 0x90a60130},
8179		{0x14, 0x90170110},
8180		{0x15, 0x0421101f},
8181		{0x1a, 0x04a11020}),
8182	SND_HDA_PIN_QUIRK(0x10ec0280, 0x103c, "HP", ALC269_FIXUP_HP_GPIO_MIC1_LED,
8183		{0x12, 0x90a60140},
8184		{0x14, 0x90170110},
8185		{0x15, 0x0421101f},
8186		{0x18, 0x02811030},
8187		{0x1a, 0x04a1103f},
8188		{0x1b, 0x02011020}),
8189	SND_HDA_PIN_QUIRK(0x10ec0282, 0x103c, "HP 15 Touchsmart", ALC269_FIXUP_HP_MUTE_LED_MIC1,
8190		ALC282_STANDARD_PINS,
8191		{0x12, 0x99a30130},
8192		{0x19, 0x03a11020},
8193		{0x21, 0x0321101f}),
8194	SND_HDA_PIN_QUIRK(0x10ec0282, 0x103c, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1,
8195		ALC282_STANDARD_PINS,
8196		{0x12, 0x99a30130},
8197		{0x19, 0x03a11020},
8198		{0x21, 0x03211040}),
8199	SND_HDA_PIN_QUIRK(0x10ec0282, 0x103c, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1,
8200		ALC282_STANDARD_PINS,
8201		{0x12, 0x99a30130},
8202		{0x19, 0x03a11030},
8203		{0x21, 0x03211020}),
8204	SND_HDA_PIN_QUIRK(0x10ec0282, 0x103c, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1,
8205		ALC282_STANDARD_PINS,
8206		{0x12, 0x99a30130},
8207		{0x19, 0x04a11020},
8208		{0x21, 0x0421101f}),
8209	SND_HDA_PIN_QUIRK(0x10ec0282, 0x103c, "HP", ALC269_FIXUP_HP_LINE1_MIC1_LED,
8210		ALC282_STANDARD_PINS,
8211		{0x12, 0x90a60140},
8212		{0x19, 0x04a11030},
8213		{0x21, 0x04211020}),
8214	SND_HDA_PIN_QUIRK(0x10ec0282, 0x1025, "Acer", ALC282_FIXUP_ACER_DISABLE_LINEOUT,
8215		ALC282_STANDARD_PINS,
8216		{0x12, 0x90a609c0},
8217		{0x18, 0x03a11830},
8218		{0x19, 0x04a19831},
8219		{0x1a, 0x0481303f},
8220		{0x1b, 0x04211020},
8221		{0x21, 0x0321101f}),
8222	SND_HDA_PIN_QUIRK(0x10ec0282, 0x1025, "Acer", ALC282_FIXUP_ACER_DISABLE_LINEOUT,
8223		ALC282_STANDARD_PINS,
8224		{0x12, 0x90a60940},
8225		{0x18, 0x03a11830},
8226		{0x19, 0x04a19831},
8227		{0x1a, 0x0481303f},
8228		{0x1b, 0x04211020},
8229		{0x21, 0x0321101f}),
8230	SND_HDA_PIN_QUIRK(0x10ec0283, 0x1028, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE,
8231		ALC282_STANDARD_PINS,
8232		{0x12, 0x90a60130},
8233		{0x21, 0x0321101f}),
8234	SND_HDA_PIN_QUIRK(0x10ec0283, 0x1028, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE,
8235		{0x12, 0x90a60160},
8236		{0x14, 0x90170120},
8237		{0x21, 0x02211030}),
8238	SND_HDA_PIN_QUIRK(0x10ec0283, 0x1028, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE,
8239		ALC282_STANDARD_PINS,
8240		{0x12, 0x90a60130},
8241		{0x19, 0x03a11020},
8242		{0x21, 0x0321101f}),
8243	SND_HDA_PIN_QUIRK(0x10ec0285, 0x17aa, "Lenovo", ALC285_FIXUP_LENOVO_PC_BEEP_IN_NOISE,
8244		{0x12, 0x90a60130},
8245		{0x14, 0x90170110},
8246		{0x19, 0x04a11040},
8247		{0x21, 0x04211020}),
8248	SND_HDA_PIN_QUIRK(0x10ec0285, 0x17aa, "Lenovo", ALC285_FIXUP_LENOVO_PC_BEEP_IN_NOISE,
8249		{0x14, 0x90170110},
8250		{0x19, 0x04a11040},
8251		{0x1d, 0x40600001},
8252		{0x21, 0x04211020}),
8253	SND_HDA_PIN_QUIRK(0x10ec0285, 0x17aa, "Lenovo", ALC285_FIXUP_THINKPAD_NO_BASS_SPK_HEADSET_JACK,
8254		{0x14, 0x90170110},
8255		{0x19, 0x04a11040},
8256		{0x21, 0x04211020}),
8257	SND_HDA_PIN_QUIRK(0x10ec0287, 0x17aa, "Lenovo", ALC285_FIXUP_THINKPAD_HEADSET_JACK,
8258		{0x14, 0x90170110},
8259		{0x17, 0x90170111},
8260		{0x19, 0x03a11030},
8261		{0x21, 0x03211020}),
8262	SND_HDA_PIN_QUIRK(0x10ec0287, 0x17aa, "Lenovo", ALC287_FIXUP_THINKPAD_I2S_SPK,
8263		{0x17, 0x90170110},
8264		{0x19, 0x03a11030},
8265		{0x21, 0x03211020}),
8266	SND_HDA_PIN_QUIRK(0x10ec0287, 0x17aa, "Lenovo", ALC287_FIXUP_THINKPAD_I2S_SPK,
8267		{0x17, 0x90170110}, /* 0x231f with RTK I2S AMP */
8268		{0x19, 0x04a11040},
8269		{0x21, 0x04211020}),
8270	SND_HDA_PIN_QUIRK(0x10ec0286, 0x1025, "Acer", ALC286_FIXUP_ACER_AIO_MIC_NO_PRESENCE,
8271		{0x12, 0x90a60130},
8272		{0x17, 0x90170110},
8273		{0x21, 0x02211020}),
8274	SND_HDA_PIN_QUIRK(0x10ec0288, 0x1028, "Dell", ALC288_FIXUP_DELL1_MIC_NO_PRESENCE,
8275		{0x12, 0x90a60120},
8276		{0x14, 0x90170110},
8277		{0x21, 0x0321101f}),
8278	SND_HDA_PIN_QUIRK(0x10ec0290, 0x103c, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1,
8279		ALC290_STANDARD_PINS,
8280		{0x15, 0x04211040},
8281		{0x18, 0x90170112},
8282		{0x1a, 0x04a11020}),
8283	SND_HDA_PIN_QUIRK(0x10ec0290, 0x103c, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1,
8284		ALC290_STANDARD_PINS,
8285		{0x15, 0x04211040},
8286		{0x18, 0x90170110},
8287		{0x1a, 0x04a11020}),
8288	SND_HDA_PIN_QUIRK(0x10ec0290, 0x103c, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1,
8289		ALC290_STANDARD_PINS,
8290		{0x15, 0x0421101f},
8291		{0x1a, 0x04a11020}),
8292	SND_HDA_PIN_QUIRK(0x10ec0290, 0x103c, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1,
8293		ALC290_STANDARD_PINS,
8294		{0x15, 0x04211020},
8295		{0x1a, 0x04a11040}),
8296	SND_HDA_PIN_QUIRK(0x10ec0290, 0x103c, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1,
8297		ALC290_STANDARD_PINS,
8298		{0x14, 0x90170110},
8299		{0x15, 0x04211020},
8300		{0x1a, 0x04a11040}),
8301	SND_HDA_PIN_QUIRK(0x10ec0290, 0x103c, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1,
8302		ALC290_STANDARD_PINS,
8303		{0x14, 0x90170110},
8304		{0x15, 0x04211020},
8305		{0x1a, 0x04a11020}),
8306	SND_HDA_PIN_QUIRK(0x10ec0290, 0x103c, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1,
8307		ALC290_STANDARD_PINS,
8308		{0x14, 0x90170110},
8309		{0x15, 0x0421101f},
8310		{0x1a, 0x04a11020}),
8311	SND_HDA_PIN_QUIRK(0x10ec0292, 0x1028, "Dell", ALC269_FIXUP_DELL2_MIC_NO_PRESENCE,
8312		ALC292_STANDARD_PINS,
8313		{0x12, 0x90a60140},
8314		{0x16, 0x01014020},
8315		{0x19, 0x01a19030}),
8316	SND_HDA_PIN_QUIRK(0x10ec0292, 0x1028, "Dell", ALC269_FIXUP_DELL2_MIC_NO_PRESENCE,
8317		ALC292_STANDARD_PINS,
8318		{0x12, 0x90a60140},
8319		{0x16, 0x01014020},
8320		{0x18, 0x02a19031},
8321		{0x19, 0x01a1903e}),
8322	SND_HDA_PIN_QUIRK(0x10ec0292, 0x1028, "Dell", ALC269_FIXUP_DELL3_MIC_NO_PRESENCE,
8323		ALC292_STANDARD_PINS,
8324		{0x12, 0x90a60140}),
8325	SND_HDA_PIN_QUIRK(0x10ec0293, 0x1028, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE,
8326		ALC292_STANDARD_PINS,
8327		{0x13, 0x90a60140},
8328		{0x16, 0x21014020},
8329		{0x19, 0x21a19030}),
8330	SND_HDA_PIN_QUIRK(0x10ec0293, 0x1028, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE,
8331		ALC292_STANDARD_PINS,
8332		{0x13, 0x90a60140}),
8333	SND_HDA_PIN_QUIRK(0x10ec0294, 0x1043, "ASUS", ALC294_FIXUP_ASUS_HPE,
8334		{0x17, 0x90170110},
8335		{0x21, 0x04211020}),
8336	SND_HDA_PIN_QUIRK(0x10ec0294, 0x1043, "ASUS", ALC294_FIXUP_ASUS_MIC,
8337		{0x14, 0x90170110},
8338		{0x1b, 0x90a70130},
8339		{0x21, 0x04211020}),
8340	SND_HDA_PIN_QUIRK(0x10ec0294, 0x1043, "ASUS", ALC294_FIXUP_ASUS_SPK,
8341		{0x12, 0x90a60130},
8342		{0x17, 0x90170110},
8343		{0x21, 0x03211020}),
8344	SND_HDA_PIN_QUIRK(0x10ec0294, 0x1043, "ASUS", ALC294_FIXUP_ASUS_SPK,
8345		{0x12, 0x90a60130},
8346		{0x17, 0x90170110},
8347		{0x21, 0x04211020}),
8348	SND_HDA_PIN_QUIRK(0x10ec0295, 0x1043, "ASUS", ALC294_FIXUP_ASUS_SPK,
8349		{0x12, 0x90a60130},
8350		{0x17, 0x90170110},
8351		{0x21, 0x03211020}),
8352	SND_HDA_PIN_QUIRK(0x10ec0295, 0x1043, "ASUS", ALC295_FIXUP_ASUS_MIC_NO_PRESENCE,
8353		{0x12, 0x90a60120},
8354		{0x17, 0x90170110},
8355		{0x21, 0x04211030}),
8356	SND_HDA_PIN_QUIRK(0x10ec0295, 0x1043, "ASUS", ALC295_FIXUP_ASUS_MIC_NO_PRESENCE,
8357		{0x12, 0x90a60130},
8358		{0x17, 0x90170110},
8359		{0x21, 0x03211020}),
8360	SND_HDA_PIN_QUIRK(0x10ec0295, 0x1043, "ASUS", ALC295_FIXUP_ASUS_MIC_NO_PRESENCE,
8361		{0x12, 0x90a60130},
8362		{0x17, 0x90170110},
8363		{0x21, 0x03211020}),
8364	SND_HDA_PIN_QUIRK(0x10ec0298, 0x1028, "Dell", ALC298_FIXUP_DELL1_MIC_NO_PRESENCE,
8365		ALC298_STANDARD_PINS,
8366		{0x17, 0x90170110}),
8367	SND_HDA_PIN_QUIRK(0x10ec0298, 0x1028, "Dell", ALC298_FIXUP_DELL1_MIC_NO_PRESENCE,
8368		ALC298_STANDARD_PINS,
8369		{0x17, 0x90170140}),
8370	SND_HDA_PIN_QUIRK(0x10ec0298, 0x1028, "Dell", ALC298_FIXUP_DELL1_MIC_NO_PRESENCE,
8371		ALC298_STANDARD_PINS,
8372		{0x17, 0x90170150}),
8373	SND_HDA_PIN_QUIRK(0x10ec0298, 0x1028, "Dell", ALC298_FIXUP_SPK_VOLUME,
8374		{0x12, 0xb7a60140},
8375		{0x13, 0xb7a60150},
8376		{0x17, 0x90170110},
8377		{0x1a, 0x03011020},
8378		{0x21, 0x03211030}),
8379	SND_HDA_PIN_QUIRK(0x10ec0298, 0x1028, "Dell", ALC298_FIXUP_ALIENWARE_MIC_NO_PRESENCE,
8380		{0x12, 0xb7a60140},
8381		{0x17, 0x90170110},
8382		{0x1a, 0x03a11030},
8383		{0x21, 0x03211020}),
8384	SND_HDA_PIN_QUIRK(0x10ec0299, 0x1028, "Dell", ALC269_FIXUP_DELL4_MIC_NO_PRESENCE,
8385		ALC225_STANDARD_PINS,
8386		{0x12, 0xb7a60130},
8387		{0x17, 0x90170110}),
8388	SND_HDA_PIN_QUIRK(0x10ec0623, 0x17aa, "Lenovo", ALC283_FIXUP_HEADSET_MIC,
8389		{0x14, 0x01014010},
8390		{0x17, 0x90170120},
8391		{0x18, 0x02a11030},
8392		{0x19, 0x02a1103f},
8393		{0x21, 0x0221101f}),
8394	{}
8395};
8396
8397/* This is the fallback pin_fixup_tbl for alc269 family, to make the tbl match
8398 * more machines, don't need to match all valid pins, just need to match
8399 * all the pins defined in the tbl. Just because of this reason, it is possible
8400 * that a single machine matches multiple tbls, so there is one limitation:
8401 *   at most one tbl is allowed to define for the same vendor and same codec
8402 */
8403static const struct snd_hda_pin_quirk alc269_fallback_pin_fixup_tbl[] = {
8404	SND_HDA_PIN_QUIRK(0x10ec0256, 0x1025, "Acer", ALC2XX_FIXUP_HEADSET_MIC,
8405		{0x19, 0x40000000}),
8406	SND_HDA_PIN_QUIRK(0x10ec0289, 0x1028, "Dell", ALC269_FIXUP_DELL4_MIC_NO_PRESENCE,
8407		{0x19, 0x40000000},
8408		{0x1b, 0x40000000}),
8409	SND_HDA_PIN_QUIRK(0x10ec0295, 0x1028, "Dell", ALC269_FIXUP_DELL4_MIC_NO_PRESENCE_QUIET,
8410		{0x19, 0x40000000},
8411		{0x1b, 0x40000000}),
8412	SND_HDA_PIN_QUIRK(0x10ec0256, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
8413		{0x19, 0x40000000},
8414		{0x1a, 0x40000000}),
8415	SND_HDA_PIN_QUIRK(0x10ec0236, 0x1028, "Dell", ALC255_FIXUP_DELL1_LIMIT_INT_MIC_BOOST,
8416		{0x19, 0x40000000},
8417		{0x1a, 0x40000000}),
8418	SND_HDA_PIN_QUIRK(0x10ec0274, 0x1028, "Dell", ALC269_FIXUP_DELL1_LIMIT_INT_MIC_BOOST,
8419		{0x19, 0x40000000},
8420		{0x1a, 0x40000000}),
8421	SND_HDA_PIN_QUIRK(0x10ec0256, 0x1043, "ASUS", ALC2XX_FIXUP_HEADSET_MIC,
8422		{0x19, 0x40000000}),
8423	SND_HDA_PIN_QUIRK(0x10ec0255, 0x1558, "Clevo", ALC2XX_FIXUP_HEADSET_MIC,
8424		{0x19, 0x40000000}),
8425	{}
8426};
8427
8428static void alc269_fill_coef(struct hda_codec *codec)
8429{
8430	struct alc_spec *spec = codec->spec;
8431	int val;
8432
8433	if (spec->codec_variant != ALC269_TYPE_ALC269VB)
8434		return;
8435
8436	if ((alc_get_coef0(codec) & 0x00ff) < 0x015) {
8437		alc_write_coef_idx(codec, 0xf, 0x960b);
8438		alc_write_coef_idx(codec, 0xe, 0x8817);
8439	}
8440
8441	if ((alc_get_coef0(codec) & 0x00ff) == 0x016) {
8442		alc_write_coef_idx(codec, 0xf, 0x960b);
8443		alc_write_coef_idx(codec, 0xe, 0x8814);
8444	}
8445
8446	if ((alc_get_coef0(codec) & 0x00ff) == 0x017) {
8447		/* Power up output pin */
8448		alc_update_coef_idx(codec, 0x04, 0, 1<<11);
8449	}
8450
8451	if ((alc_get_coef0(codec) & 0x00ff) == 0x018) {
8452		val = alc_read_coef_idx(codec, 0xd);
8453		if (val != -1 && (val & 0x0c00) >> 10 != 0x1) {
8454			/* Capless ramp up clock control */
8455			alc_write_coef_idx(codec, 0xd, val | (1<<10));
8456		}
8457		val = alc_read_coef_idx(codec, 0x17);
8458		if (val != -1 && (val & 0x01c0) >> 6 != 0x4) {
8459			/* Class D power on reset */
8460			alc_write_coef_idx(codec, 0x17, val | (1<<7));
8461		}
8462	}
8463
8464	/* HP */
8465	alc_update_coef_idx(codec, 0x4, 0, 1<<11);
8466}
8467
8468static void alc269_remove(struct hda_codec *codec)
8469{
8470	struct alc_spec *spec = codec->spec;
8471
8472	if (spec)
8473		hda_component_manager_free(&spec->comps, &comp_master_ops);
8474
8475	snd_hda_gen_remove(codec);
8476}
8477
8478/*
8479 */
8480static int alc269_probe(struct hda_codec *codec, const struct hda_device_id *id)
8481{
8482	struct alc_spec *spec;
8483	int err;
8484
8485	err = alc_alloc_spec(codec, 0x0b);
8486	if (err < 0)
8487		return err;
8488
8489	spec = codec->spec;
8490	spec->gen.shared_mic_vref_pin = 0x18;
8491	codec->power_save_node = 0;
8492	spec->en_3kpull_low = true;
8493
8494	spec->shutup = alc_default_shutup;
8495	spec->init_hook = alc_default_init;
8496
8497	switch (codec->core.vendor_id) {
8498	case 0x10ec0269:
8499		spec->codec_variant = ALC269_TYPE_ALC269VA;
8500		switch (alc_get_coef0(codec) & 0x00f0) {
8501		case 0x0010:
8502			if (codec->bus->pci &&
8503			    codec->bus->pci->subsystem_vendor == 0x1025 &&
8504			    spec->cdefine.platform_type == 1)
8505				err = alc_codec_rename(codec, "ALC271X");
8506			spec->codec_variant = ALC269_TYPE_ALC269VB;
8507			break;
8508		case 0x0020:
8509			if (codec->bus->pci &&
8510			    codec->bus->pci->subsystem_vendor == 0x17aa &&
8511			    codec->bus->pci->subsystem_device == 0x21f3)
8512				err = alc_codec_rename(codec, "ALC3202");
8513			spec->codec_variant = ALC269_TYPE_ALC269VC;
8514			break;
8515		case 0x0030:
8516			spec->codec_variant = ALC269_TYPE_ALC269VD;
8517			break;
8518		default:
8519			alc_fix_pll_init(codec, 0x20, 0x04, 15);
8520		}
8521		if (err < 0)
8522			goto error;
8523		spec->shutup = alc269_shutup;
8524		spec->init_hook = alc269_fill_coef;
8525		alc269_fill_coef(codec);
8526		break;
8527
8528	case 0x10ec0280:
8529	case 0x10ec0290:
8530		spec->codec_variant = ALC269_TYPE_ALC280;
8531		break;
8532	case 0x10ec0282:
8533		spec->codec_variant = ALC269_TYPE_ALC282;
8534		spec->shutup = alc282_shutup;
8535		spec->init_hook = alc282_init;
8536		break;
8537	case 0x10ec0233:
8538	case 0x10ec0283:
8539		spec->codec_variant = ALC269_TYPE_ALC283;
8540		spec->shutup = alc283_shutup;
8541		spec->init_hook = alc283_init;
8542		break;
8543	case 0x10ec0284:
8544	case 0x10ec0292:
8545		spec->codec_variant = ALC269_TYPE_ALC284;
8546		break;
8547	case 0x10ec0293:
8548		spec->codec_variant = ALC269_TYPE_ALC293;
8549		break;
8550	case 0x10ec0286:
8551	case 0x10ec0288:
8552		spec->codec_variant = ALC269_TYPE_ALC286;
8553		break;
8554	case 0x10ec0298:
8555		spec->codec_variant = ALC269_TYPE_ALC298;
8556		break;
8557	case 0x10ec0235:
8558	case 0x10ec0255:
8559		spec->codec_variant = ALC269_TYPE_ALC255;
8560		spec->shutup = alc256_shutup;
8561		spec->init_hook = alc256_init;
8562		break;
8563	case 0x10ec0230:
8564	case 0x10ec0236:
8565	case 0x10ec0256:
8566	case 0x19e58326:
8567		spec->codec_variant = ALC269_TYPE_ALC256;
8568		spec->shutup = alc256_shutup;
8569		spec->init_hook = alc256_init;
8570		spec->gen.mixer_nid = 0; /* ALC256 does not have any loopback mixer path */
8571		if (codec->core.vendor_id == 0x10ec0236 &&
8572		    codec->bus->pci->vendor != PCI_VENDOR_ID_AMD)
8573			spec->en_3kpull_low = false;
8574		break;
8575	case 0x10ec0257:
8576		spec->codec_variant = ALC269_TYPE_ALC257;
8577		spec->shutup = alc256_shutup;
8578		spec->init_hook = alc256_init;
8579		spec->gen.mixer_nid = 0;
8580		spec->en_3kpull_low = false;
8581		break;
8582	case 0x10ec0215:
8583	case 0x10ec0245:
8584	case 0x10ec0285:
8585	case 0x10ec0289:
8586		if (alc_get_coef0(codec) & 0x0010)
8587			spec->codec_variant = ALC269_TYPE_ALC245;
8588		else
8589			spec->codec_variant = ALC269_TYPE_ALC215;
8590		spec->shutup = alc225_shutup;
8591		spec->init_hook = alc225_init;
8592		spec->gen.mixer_nid = 0;
8593		break;
8594	case 0x10ec0225:
8595	case 0x10ec0295:
8596	case 0x10ec0299:
8597		spec->codec_variant = ALC269_TYPE_ALC225;
8598		spec->shutup = alc225_shutup;
8599		spec->init_hook = alc225_init;
8600		spec->gen.mixer_nid = 0; /* no loopback on ALC225, ALC295 and ALC299 */
8601		break;
8602	case 0x10ec0287:
8603		spec->codec_variant = ALC269_TYPE_ALC287;
8604		spec->shutup = alc225_shutup;
8605		spec->init_hook = alc225_init;
8606		spec->gen.mixer_nid = 0; /* no loopback on ALC287 */
8607		break;
8608	case 0x10ec0234:
8609	case 0x10ec0274:
8610	case 0x10ec0294:
8611		spec->codec_variant = ALC269_TYPE_ALC294;
8612		spec->gen.mixer_nid = 0; /* ALC2x4 does not have any loopback mixer path */
8613		alc_update_coef_idx(codec, 0x6b, 0x0018, (1<<4) | (1<<3)); /* UAJ MIC Vref control by verb */
8614		spec->init_hook = alc294_init;
8615		break;
8616	case 0x10ec0300:
8617		spec->codec_variant = ALC269_TYPE_ALC300;
8618		spec->gen.mixer_nid = 0; /* no loopback on ALC300 */
8619		break;
8620	case 0x10ec0222:
8621	case 0x10ec0623:
8622		spec->codec_variant = ALC269_TYPE_ALC623;
8623		spec->shutup = alc222_shutup;
8624		spec->init_hook = alc222_init;
8625		break;
8626	case 0x10ec0700:
8627	case 0x10ec0701:
8628	case 0x10ec0703:
8629	case 0x10ec0711:
8630		spec->codec_variant = ALC269_TYPE_ALC700;
8631		spec->gen.mixer_nid = 0; /* ALC700 does not have any loopback mixer path */
8632		alc_update_coef_idx(codec, 0x4a, 1 << 15, 0); /* Combo jack auto trigger control */
8633		spec->init_hook = alc294_init;
8634		break;
8635
8636	}
8637
8638	if (snd_hda_codec_read(codec, 0x51, 0, AC_VERB_PARAMETERS, 0) == 0x10ec5505) {
8639		spec->has_alc5505_dsp = 1;
8640		spec->init_hook = alc5505_dsp_init;
8641	}
8642
8643	alc_pre_init(codec);
8644
8645	snd_hda_pick_fixup(codec, alc269_fixup_models,
8646		       alc269_fixup_tbl, alc269_fixups);
8647	/* FIXME: both TX300 and ROG Strix G17 have the same SSID, and
8648	 * the quirk breaks the latter (bko#214101).
8649	 * Clear the wrong entry.
8650	 */
8651	if (codec->fixup_id == ALC282_FIXUP_ASUS_TX300 &&
8652	    codec->core.vendor_id == 0x10ec0294) {
8653		codec_dbg(codec, "Clear wrong fixup for ASUS ROG Strix G17\n");
8654		codec->fixup_id = HDA_FIXUP_ID_NOT_SET;
8655	}
8656
8657	snd_hda_pick_pin_fixup(codec, alc269_pin_fixup_tbl, alc269_fixups, true);
8658	snd_hda_pick_pin_fixup(codec, alc269_fallback_pin_fixup_tbl, alc269_fixups, false);
8659	snd_hda_pick_fixup(codec, NULL,	alc269_fixup_vendor_tbl,
8660			   alc269_fixups);
8661
8662	/*
8663	 * Check whether ACPI describes companion amplifiers that require
8664	 * component binding
8665	 */
8666	find_cirrus_companion_amps(codec);
8667
8668	snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_PRE_PROBE);
8669
8670	alc_auto_parse_customize_define(codec);
8671
8672	if (has_cdefine_beep(codec))
8673		spec->gen.beep_nid = 0x01;
8674
8675	/* automatic parse from the BIOS config */
8676	err = alc269_parse_auto_config(codec);
8677	if (err < 0)
8678		goto error;
8679
8680	if (!spec->gen.no_analog && spec->gen.beep_nid && spec->gen.mixer_nid) {
8681		err = set_beep_amp(spec, spec->gen.mixer_nid, 0x04, HDA_INPUT);
8682		if (err < 0)
8683			goto error;
8684	}
8685
8686	snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_PROBE);
8687
8688	return 0;
8689
8690 error:
8691	alc269_remove(codec);
8692	return err;
8693}
8694
8695static const struct hda_codec_ops alc269_codec_ops = {
8696	.probe = alc269_probe,
8697	.remove = alc269_remove,
8698	.build_controls = alc_build_controls,
8699	.build_pcms = snd_hda_gen_build_pcms,
8700	.init = alc_init,
8701	.unsol_event = snd_hda_jack_unsol_event,
8702	.suspend = alc269_suspend,
8703	.resume = alc269_resume,
8704	.check_power_status = snd_hda_gen_check_power_status,
8705	.stream_pm = snd_hda_gen_stream_pm,
8706};
8707
8708/*
8709 * driver entries
8710 */
8711static const struct hda_device_id snd_hda_id_alc269[] = {
8712	HDA_CODEC_ID(0x10ec0215, "ALC215"),
8713	HDA_CODEC_ID(0x10ec0221, "ALC221"),
8714	HDA_CODEC_ID(0x10ec0222, "ALC222"),
8715	HDA_CODEC_ID(0x10ec0225, "ALC225"),
8716	HDA_CODEC_ID(0x10ec0230, "ALC236"),
8717	HDA_CODEC_ID(0x10ec0231, "ALC231"),
8718	HDA_CODEC_ID(0x10ec0233, "ALC233"),
8719	HDA_CODEC_ID(0x10ec0234, "ALC234"),
8720	HDA_CODEC_ID(0x10ec0235, "ALC233"),
8721	HDA_CODEC_ID(0x10ec0236, "ALC236"),
8722	HDA_CODEC_ID(0x10ec0245, "ALC245"),
8723	HDA_CODEC_ID(0x10ec0255, "ALC255"),
8724	HDA_CODEC_ID(0x10ec0256, "ALC256"),
8725	HDA_CODEC_ID(0x10ec0257, "ALC257"),
8726	HDA_CODEC_ID(0x10ec0269, "ALC269"),
8727	HDA_CODEC_ID(0x10ec0270, "ALC270"),
8728	HDA_CODEC_ID(0x10ec0274, "ALC274"),
8729	HDA_CODEC_ID(0x10ec0275, "ALC275"),
8730	HDA_CODEC_ID(0x10ec0276, "ALC276"),
8731	HDA_CODEC_ID(0x10ec0280, "ALC280"),
8732	HDA_CODEC_ID(0x10ec0282, "ALC282"),
8733	HDA_CODEC_ID(0x10ec0283, "ALC283"),
8734	HDA_CODEC_ID(0x10ec0284, "ALC284"),
8735	HDA_CODEC_ID(0x10ec0285, "ALC285"),
8736	HDA_CODEC_ID(0x10ec0286, "ALC286"),
8737	HDA_CODEC_ID(0x10ec0287, "ALC287"),
8738	HDA_CODEC_ID(0x10ec0288, "ALC288"),
8739	HDA_CODEC_ID(0x10ec0289, "ALC289"),
8740	HDA_CODEC_ID(0x10ec0290, "ALC290"),
8741	HDA_CODEC_ID(0x10ec0292, "ALC292"),
8742	HDA_CODEC_ID(0x10ec0293, "ALC293"),
8743	HDA_CODEC_ID(0x10ec0294, "ALC294"),
8744	HDA_CODEC_ID(0x10ec0295, "ALC295"),
8745	HDA_CODEC_ID(0x10ec0298, "ALC298"),
8746	HDA_CODEC_ID(0x10ec0299, "ALC299"),
8747	HDA_CODEC_ID(0x10ec0300, "ALC300"),
8748	HDA_CODEC_ID(0x10ec0623, "ALC623"),
8749	HDA_CODEC_ID(0x10ec0700, "ALC700"),
8750	HDA_CODEC_ID(0x10ec0701, "ALC701"),
8751	HDA_CODEC_ID(0x10ec0703, "ALC703"),
8752	HDA_CODEC_ID(0x10ec0711, "ALC711"),
8753	HDA_CODEC_ID(0x19e58326, "HW8326"),
8754	{} /* terminator */
8755};
8756MODULE_DEVICE_TABLE(hdaudio, snd_hda_id_alc269);
8757
8758MODULE_LICENSE("GPL");
8759MODULE_DESCRIPTION("Realtek ALC269 and compatible HD-audio codecs");
8760MODULE_IMPORT_NS("SND_HDA_CODEC_REALTEK");
8761MODULE_IMPORT_NS("SND_HDA_SCODEC_COMPONENT");
8762
8763static struct hda_codec_driver alc269_driver = {
8764	.id = snd_hda_id_alc269,
8765	.ops = &alc269_codec_ops,
8766};
8767
8768module_hda_codec_driver(alc269_driver);
~/ Read-only file preview.