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