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