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