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