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