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