2 * ALC267/ALC268 quirk models
3 * included by patch_realtek.c
14 ALC268_ACER_ASPIRE_ONE
,
17 #ifdef CONFIG_SND_DEBUG
20 ALC268_MODEL_LAST
/* last tag */
24 * ALC268 channel source setting (2 channel)
26 #define ALC268_DIGOUT_NID ALC880_DIGOUT_NID
27 #define alc268_modes alc260_modes
29 static const hda_nid_t alc268_dac_nids
[2] = {
34 static const hda_nid_t alc268_adc_nids
[2] = {
39 static const hda_nid_t alc268_adc_nids_alt
[1] = {
44 static const hda_nid_t alc268_capsrc_nids
[2] = { 0x23, 0x24 };
46 static const struct snd_kcontrol_new alc268_base_mixer
[] = {
47 /* output mixer control */
48 HDA_CODEC_VOLUME("Front Playback Volume", 0x2, 0x0, HDA_OUTPUT
),
49 HDA_CODEC_MUTE("Front Playback Switch", 0x14, 0x0, HDA_OUTPUT
),
50 HDA_CODEC_VOLUME("Headphone Playback Volume", 0x3, 0x0, HDA_OUTPUT
),
51 HDA_CODEC_MUTE("Headphone Playback Switch", 0x15, 0x0, HDA_OUTPUT
),
52 HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT
),
53 HDA_CODEC_VOLUME("Front Mic Boost Volume", 0x19, 0, HDA_INPUT
),
54 HDA_CODEC_VOLUME("Line In Boost Volume", 0x1a, 0, HDA_INPUT
),
58 static const struct snd_kcontrol_new alc268_toshiba_mixer
[] = {
59 /* output mixer control */
60 HDA_CODEC_VOLUME("Front Playback Volume", 0x2, 0x0, HDA_OUTPUT
),
61 HDA_CODEC_VOLUME("Headphone Playback Volume", 0x3, 0x0, HDA_OUTPUT
),
62 ALC262_HIPPO_MASTER_SWITCH
,
63 HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT
),
64 HDA_CODEC_VOLUME("Front Mic Boost Volume", 0x19, 0, HDA_INPUT
),
65 HDA_CODEC_VOLUME("Line In Boost Volume", 0x1a, 0, HDA_INPUT
),
69 static const struct hda_verb alc268_eapd_verbs
[] = {
70 {0x14, AC_VERB_SET_EAPD_BTLENABLE
, 2},
71 {0x15, AC_VERB_SET_EAPD_BTLENABLE
, 2},
75 /* Toshiba specific */
76 static const struct hda_verb alc268_toshiba_verbs
[] = {
77 {0x15, AC_VERB_SET_UNSOLICITED_ENABLE
, ALC_HP_EVENT
| AC_USRSP_EN
},
82 /* bind volumes of both NID 0x02 and 0x03 */
83 static const struct hda_bind_ctls alc268_acer_bind_master_vol
= {
84 .ops
= &snd_hda_bind_vol
,
86 HDA_COMPOSE_AMP_VAL(0x02, 3, 0, HDA_OUTPUT
),
87 HDA_COMPOSE_AMP_VAL(0x03, 3, 0, HDA_OUTPUT
),
92 static void alc268_acer_setup(struct hda_codec
*codec
)
94 struct alc_spec
*spec
= codec
->spec
;
96 spec
->autocfg
.hp_pins
[0] = 0x14;
97 spec
->autocfg
.speaker_pins
[0] = 0x15;
99 spec
->automute_mode
= ALC_AUTOMUTE_AMP
;
102 #define alc268_acer_master_sw_get alc262_hp_master_sw_get
103 #define alc268_acer_master_sw_put alc262_hp_master_sw_put
105 static const struct snd_kcontrol_new alc268_acer_aspire_one_mixer
[] = {
106 /* output mixer control */
107 HDA_BIND_VOL("Master Playback Volume", &alc268_acer_bind_master_vol
),
109 .iface
= SNDRV_CTL_ELEM_IFACE_MIXER
,
110 .name
= "Master Playback Switch",
111 .subdevice
= HDA_SUBDEV_NID_FLAG
| 0x15,
112 .info
= snd_ctl_boolean_mono_info
,
113 .get
= alc268_acer_master_sw_get
,
114 .put
= alc268_acer_master_sw_put
,
116 HDA_CODEC_VOLUME("Mic Boost Capture Volume", 0x18, 0, HDA_INPUT
),
120 static const struct snd_kcontrol_new alc268_acer_mixer
[] = {
121 /* output mixer control */
122 HDA_BIND_VOL("Master Playback Volume", &alc268_acer_bind_master_vol
),
124 .iface
= SNDRV_CTL_ELEM_IFACE_MIXER
,
125 .name
= "Master Playback Switch",
126 .subdevice
= HDA_SUBDEV_NID_FLAG
| 0x14,
127 .info
= snd_ctl_boolean_mono_info
,
128 .get
= alc268_acer_master_sw_get
,
129 .put
= alc268_acer_master_sw_put
,
131 HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT
),
132 HDA_CODEC_VOLUME("Internal Mic Boost Volume", 0x19, 0, HDA_INPUT
),
133 HDA_CODEC_VOLUME("Line In Boost Volume", 0x1a, 0, HDA_INPUT
),
137 static const struct snd_kcontrol_new alc268_acer_dmic_mixer
[] = {
138 /* output mixer control */
139 HDA_BIND_VOL("Master Playback Volume", &alc268_acer_bind_master_vol
),
141 .iface
= SNDRV_CTL_ELEM_IFACE_MIXER
,
142 .name
= "Master Playback Switch",
143 .subdevice
= HDA_SUBDEV_NID_FLAG
| 0x14,
144 .info
= snd_ctl_boolean_mono_info
,
145 .get
= alc268_acer_master_sw_get
,
146 .put
= alc268_acer_master_sw_put
,
148 HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT
),
149 HDA_CODEC_VOLUME("Line In Boost Volume", 0x1a, 0, HDA_INPUT
),
153 static const struct hda_verb alc268_acer_aspire_one_verbs
[] = {
154 {0x12, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_IN
},
155 {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_HP
},
156 {0x15, AC_VERB_SET_UNSOLICITED_ENABLE
, ALC_HP_EVENT
| AC_USRSP_EN
},
157 {0x18, AC_VERB_SET_UNSOLICITED_ENABLE
, AC_USRSP_EN
| ALC_MIC_EVENT
},
158 {0x23, AC_VERB_SET_CONNECT_SEL
, 0x06},
159 {0x23, AC_VERB_SET_AMP_GAIN_MUTE
, 0xa017},
163 static const struct hda_verb alc268_acer_verbs
[] = {
164 {0x12, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_IN
}, /* internal dmic? */
165 {0x13, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_IN
},
166 {0x14, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_HP
},
167 {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_OUT
},
168 {0x18, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_VREF80
},
169 {0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_VREF80
},
170 {0x14, AC_VERB_SET_UNSOLICITED_ENABLE
, ALC_HP_EVENT
| AC_USRSP_EN
},
174 /* unsolicited event for HP jack sensing */
175 #define alc268_toshiba_setup alc262_hippo_setup
177 static void alc268_acer_lc_setup(struct hda_codec
*codec
)
179 struct alc_spec
*spec
= codec
->spec
;
180 spec
->autocfg
.hp_pins
[0] = 0x15;
181 spec
->autocfg
.speaker_pins
[0] = 0x14;
183 spec
->automute_mode
= ALC_AUTOMUTE_AMP
;
184 spec
->ext_mic_pin
= 0x18;
185 spec
->int_mic_pin
= 0x12;
189 static const struct snd_kcontrol_new alc268_dell_mixer
[] = {
190 /* output mixer control */
191 HDA_CODEC_VOLUME("Speaker Playback Volume", 0x02, 0x0, HDA_OUTPUT
),
192 HDA_CODEC_MUTE("Speaker Playback Switch", 0x14, 0x0, HDA_OUTPUT
),
193 HDA_CODEC_VOLUME("Headphone Playback Volume", 0x03, 0x0, HDA_OUTPUT
),
194 HDA_CODEC_MUTE("Headphone Playback Switch", 0x15, 0x0, HDA_OUTPUT
),
195 HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT
),
196 HDA_CODEC_VOLUME("Internal Mic Boost Volume", 0x19, 0, HDA_INPUT
),
200 static const struct hda_verb alc268_dell_verbs
[] = {
201 {0x14, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_HP
},
202 {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_HP
},
203 {0x15, AC_VERB_SET_UNSOLICITED_ENABLE
, ALC_HP_EVENT
| AC_USRSP_EN
},
204 {0x18, AC_VERB_SET_UNSOLICITED_ENABLE
, ALC_MIC_EVENT
| AC_USRSP_EN
},
208 /* mute/unmute internal speaker according to the hp jack and mute state */
209 static void alc268_dell_setup(struct hda_codec
*codec
)
211 struct alc_spec
*spec
= codec
->spec
;
213 spec
->autocfg
.hp_pins
[0] = 0x15;
214 spec
->autocfg
.speaker_pins
[0] = 0x14;
215 spec
->ext_mic_pin
= 0x18;
216 spec
->int_mic_pin
= 0x19;
219 spec
->automute_mode
= ALC_AUTOMUTE_PIN
;
222 static const struct snd_kcontrol_new alc267_quanta_il1_mixer
[] = {
223 HDA_CODEC_VOLUME("Speaker Playback Volume", 0x2, 0x0, HDA_OUTPUT
),
224 HDA_CODEC_MUTE("Speaker Playback Switch", 0x14, 0x0, HDA_OUTPUT
),
225 HDA_CODEC_VOLUME("Headphone Playback Volume", 0x3, 0x0, HDA_OUTPUT
),
226 HDA_CODEC_MUTE("Headphone Playback Switch", 0x15, 0x0, HDA_OUTPUT
),
227 HDA_CODEC_VOLUME("Mic Capture Volume", 0x23, 0x0, HDA_OUTPUT
),
228 HDA_BIND_MUTE("Mic Capture Switch", 0x23, 2, HDA_OUTPUT
),
229 HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT
),
230 HDA_CODEC_VOLUME("Internal Mic Boost Volume", 0x19, 0, HDA_INPUT
),
234 static const struct hda_verb alc267_quanta_il1_verbs
[] = {
235 {0x15, AC_VERB_SET_UNSOLICITED_ENABLE
, ALC_HP_EVENT
| AC_USRSP_EN
},
236 {0x18, AC_VERB_SET_UNSOLICITED_ENABLE
, ALC_MIC_EVENT
| AC_USRSP_EN
},
240 static void alc267_quanta_il1_setup(struct hda_codec
*codec
)
242 struct alc_spec
*spec
= codec
->spec
;
243 spec
->autocfg
.hp_pins
[0] = 0x15;
244 spec
->autocfg
.speaker_pins
[0] = 0x14;
245 spec
->ext_mic_pin
= 0x18;
246 spec
->int_mic_pin
= 0x19;
249 spec
->automute_mode
= ALC_AUTOMUTE_PIN
;
253 * generic initialization of ADC, input mixers and output mixers
255 static const struct hda_verb alc268_base_init_verbs
[] = {
256 /* Unmute DAC0-1 and set vol = 0 */
257 {0x02, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_ZERO
},
258 {0x03, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_ZERO
},
261 * Set up output mixers (0x0c - 0x0e)
263 /* set vol=0 to output mixers */
264 {0x0e, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(0)},
265 {0x0e, AC_VERB_SET_CONNECT_SEL
, 0x00},
267 {0x0f, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(0)},
268 {0x10, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(0)},
270 {0x14, AC_VERB_SET_PIN_WIDGET_CONTROL
, 0x40},
271 {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL
, 0xc0},
272 {0x16, AC_VERB_SET_PIN_WIDGET_CONTROL
, 0x40},
273 {0x18, AC_VERB_SET_PIN_WIDGET_CONTROL
, 0x24},
274 {0x19, AC_VERB_SET_PIN_WIDGET_CONTROL
, 0x24},
275 {0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL
, 0x20},
276 {0x1c, AC_VERB_SET_PIN_WIDGET_CONTROL
, 0x20},
277 {0x1d, AC_VERB_SET_PIN_WIDGET_CONTROL
, 0x20},
279 {0x14, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_MUTE
},
280 {0x15, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_MUTE
},
281 {0x16, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_MUTE
},
282 {0x18, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_MUTE
},
283 {0x1a, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_MUTE
},
285 /* set PCBEEP vol = 0, mute connections */
286 {0x1d, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(0)},
287 {0x0f, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(1)},
288 {0x10, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(1)},
290 /* Unmute Selector 23h,24h and set the default input to mic-in */
292 {0x23, AC_VERB_SET_CONNECT_SEL
, 0x00},
293 {0x23, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
},
294 {0x24, AC_VERB_SET_CONNECT_SEL
, 0x00},
295 {0x24, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
},
300 /* only for model=test */
301 #ifdef CONFIG_SND_DEBUG
303 * generic initialization of ADC, input mixers and output mixers
305 static const struct hda_verb alc268_volume_init_verbs
[] = {
307 {0x02, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_ZERO
},
308 {0x03, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_ZERO
},
310 {0x18, AC_VERB_SET_PIN_WIDGET_CONTROL
, 0x24},
311 {0x19, AC_VERB_SET_PIN_WIDGET_CONTROL
, 0x24},
312 {0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL
, 0x20},
313 {0x1c, AC_VERB_SET_PIN_WIDGET_CONTROL
, 0x20},
314 {0x1d, AC_VERB_SET_PIN_WIDGET_CONTROL
, 0x20},
316 {0x0e, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(0)},
317 {0x0f, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(0)},
318 {0x10, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(0)},
320 {0x18, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_MUTE
},
321 {0x1a, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_MUTE
},
324 #endif /* CONFIG_SND_DEBUG */
326 static const struct snd_kcontrol_new alc268_capture_nosrc_mixer
[] = {
327 HDA_CODEC_VOLUME("Capture Volume", 0x23, 0x0, HDA_OUTPUT
),
328 HDA_CODEC_MUTE("Capture Switch", 0x23, 0x0, HDA_OUTPUT
),
332 static const struct snd_kcontrol_new alc268_capture_alt_mixer
[] = {
333 HDA_CODEC_VOLUME("Capture Volume", 0x23, 0x0, HDA_OUTPUT
),
334 HDA_CODEC_MUTE("Capture Switch", 0x23, 0x0, HDA_OUTPUT
),
339 static const struct snd_kcontrol_new alc268_capture_mixer
[] = {
340 HDA_CODEC_VOLUME("Capture Volume", 0x23, 0x0, HDA_OUTPUT
),
341 HDA_CODEC_MUTE("Capture Switch", 0x23, 0x0, HDA_OUTPUT
),
342 HDA_CODEC_VOLUME_IDX("Capture Volume", 1, 0x24, 0x0, HDA_OUTPUT
),
343 HDA_CODEC_MUTE_IDX("Capture Switch", 1, 0x24, 0x0, HDA_OUTPUT
),
348 static const struct hda_input_mux alc268_capture_source
= {
352 { "Front Mic", 0x1 },
358 static const struct hda_input_mux alc268_acer_capture_source
= {
362 { "Internal Mic", 0x1 },
367 static const struct hda_input_mux alc268_acer_dmic_capture_source
= {
371 { "Internal Mic", 0x6 },
376 #ifdef CONFIG_SND_DEBUG
377 static const struct snd_kcontrol_new alc268_test_mixer
[] = {
379 HDA_CODEC_VOLUME("LOUT1 Playback Volume", 0x02, 0x0, HDA_OUTPUT
),
380 HDA_CODEC_VOLUME("LOUT2 Playback Volume", 0x03, 0x0, HDA_OUTPUT
),
381 HDA_BIND_MUTE_MONO("Mono sum Playback Switch", 0x0e, 1, 2, HDA_INPUT
),
382 HDA_BIND_MUTE("LINE-OUT sum Playback Switch", 0x0f, 2, HDA_INPUT
),
383 HDA_BIND_MUTE("HP-OUT sum Playback Switch", 0x10, 2, HDA_INPUT
),
384 HDA_BIND_MUTE("LINE-OUT Playback Switch", 0x14, 2, HDA_OUTPUT
),
385 HDA_BIND_MUTE("HP-OUT Playback Switch", 0x15, 2, HDA_OUTPUT
),
386 HDA_BIND_MUTE("Mono Playback Switch", 0x16, 2, HDA_OUTPUT
),
387 HDA_CODEC_VOLUME("MIC1 Capture Volume", 0x18, 0x0, HDA_INPUT
),
388 HDA_BIND_MUTE("MIC1 Capture Switch", 0x18, 2, HDA_OUTPUT
),
389 HDA_CODEC_VOLUME("MIC2 Capture Volume", 0x19, 0x0, HDA_INPUT
),
390 HDA_CODEC_VOLUME("LINE1 Capture Volume", 0x1a, 0x0, HDA_INPUT
),
391 HDA_BIND_MUTE("LINE1 Capture Switch", 0x1a, 2, HDA_OUTPUT
),
392 /* The below appears problematic on some hardwares */
393 /*HDA_CODEC_VOLUME("PCBEEP Playback Volume", 0x1d, 0x0, HDA_INPUT),*/
394 HDA_CODEC_VOLUME("PCM-IN1 Capture Volume", 0x23, 0x0, HDA_OUTPUT
),
395 HDA_BIND_MUTE("PCM-IN1 Capture Switch", 0x23, 2, HDA_OUTPUT
),
396 HDA_CODEC_VOLUME("PCM-IN2 Capture Volume", 0x24, 0x0, HDA_OUTPUT
),
397 HDA_BIND_MUTE("PCM-IN2 Capture Switch", 0x24, 2, HDA_OUTPUT
),
399 /* Modes for retasking pin widgets */
400 ALC_PIN_MODE("LINE-OUT pin mode", 0x14, ALC_PIN_DIR_INOUT
),
401 ALC_PIN_MODE("HP-OUT pin mode", 0x15, ALC_PIN_DIR_INOUT
),
402 ALC_PIN_MODE("MIC1 pin mode", 0x18, ALC_PIN_DIR_INOUT
),
403 ALC_PIN_MODE("LINE1 pin mode", 0x1a, ALC_PIN_DIR_INOUT
),
405 /* Controls for GPIO pins, assuming they are configured as outputs */
406 ALC_GPIO_DATA_SWITCH("GPIO pin 0", 0x01, 0x01),
407 ALC_GPIO_DATA_SWITCH("GPIO pin 1", 0x01, 0x02),
408 ALC_GPIO_DATA_SWITCH("GPIO pin 2", 0x01, 0x04),
409 ALC_GPIO_DATA_SWITCH("GPIO pin 3", 0x01, 0x08),
411 /* Switches to allow the digital SPDIF output pin to be enabled.
412 * The ALC268 does not have an SPDIF input.
414 ALC_SPDIF_CTRL_SWITCH("SPDIF Playback Switch", 0x06, 0x01),
416 /* A switch allowing EAPD to be enabled. Some laptops seem to use
417 * this output to turn on an external amplifier.
419 ALC_EAPD_CTRL_SWITCH("LINE-OUT EAPD Enable Switch", 0x0f, 0x02),
420 ALC_EAPD_CTRL_SWITCH("HP-OUT EAPD Enable Switch", 0x10, 0x02),
427 * configuration and preset
429 static const char * const alc268_models
[ALC268_MODEL_LAST
] = {
430 [ALC267_QUANTA_IL1
] = "quanta-il1",
431 [ALC268_3ST
] = "3stack",
432 [ALC268_TOSHIBA
] = "toshiba",
433 [ALC268_ACER
] = "acer",
434 [ALC268_ACER_DMIC
] = "acer-dmic",
435 [ALC268_ACER_ASPIRE_ONE
] = "acer-aspire",
436 [ALC268_DELL
] = "dell",
437 [ALC268_ZEPTO
] = "zepto",
438 #ifdef CONFIG_SND_DEBUG
439 [ALC268_TEST
] = "test",
441 [ALC268_AUTO
] = "auto",
444 static const struct snd_pci_quirk alc268_cfg_tbl
[] = {
445 SND_PCI_QUIRK(0x1025, 0x011e, "Acer Aspire 5720z", ALC268_ACER
),
446 SND_PCI_QUIRK(0x1025, 0x0126, "Acer", ALC268_ACER
),
447 SND_PCI_QUIRK(0x1025, 0x012e, "Acer Aspire 5310", ALC268_ACER
),
448 SND_PCI_QUIRK(0x1025, 0x0130, "Acer Extensa 5210", ALC268_ACER
),
449 SND_PCI_QUIRK(0x1025, 0x0136, "Acer Aspire 5315", ALC268_ACER
),
450 SND_PCI_QUIRK(0x1025, 0x015b, "Acer Aspire One",
451 ALC268_ACER_ASPIRE_ONE
),
452 SND_PCI_QUIRK(0x1028, 0x0253, "Dell OEM", ALC268_DELL
),
453 SND_PCI_QUIRK(0x1028, 0x02b0, "Dell Inspiron 910", ALC268_AUTO
),
454 SND_PCI_QUIRK_MASK(0x1028, 0xfff0, 0x02b0,
455 "Dell Inspiron Mini9/Vostro A90", ALC268_DELL
),
456 /* almost compatible with toshiba but with optional digital outs;
457 * auto-probing seems working fine
459 SND_PCI_QUIRK_MASK(0x103c, 0xff00, 0x3000, "HP TX25xx series",
461 SND_PCI_QUIRK(0x1043, 0x1205, "ASUS W7J", ALC268_3ST
),
462 SND_PCI_QUIRK(0x1170, 0x0040, "ZEPTO", ALC268_ZEPTO
),
463 SND_PCI_QUIRK(0x14c0, 0x0025, "COMPAL IFL90/JFL-92", ALC268_TOSHIBA
),
464 SND_PCI_QUIRK(0x152d, 0x0771, "Quanta IL1", ALC267_QUANTA_IL1
),
468 /* Toshiba laptops have no unique PCI SSID but only codec SSID */
469 static const struct snd_pci_quirk alc268_ssid_cfg_tbl
[] = {
470 SND_PCI_QUIRK(0x1179, 0xff0a, "TOSHIBA X-200", ALC268_AUTO
),
471 SND_PCI_QUIRK(0x1179, 0xff0e, "TOSHIBA X-200 HDMI", ALC268_AUTO
),
472 SND_PCI_QUIRK_MASK(0x1179, 0xff00, 0xff00, "TOSHIBA A/Lx05",
477 static const struct alc_config_preset alc268_presets
[] = {
478 [ALC267_QUANTA_IL1
] = {
479 .mixers
= { alc267_quanta_il1_mixer
, alc268_beep_mixer
,
480 alc268_capture_nosrc_mixer
},
481 .init_verbs
= { alc268_base_init_verbs
, alc268_eapd_verbs
,
482 alc267_quanta_il1_verbs
},
483 .num_dacs
= ARRAY_SIZE(alc268_dac_nids
),
484 .dac_nids
= alc268_dac_nids
,
485 .num_adc_nids
= ARRAY_SIZE(alc268_adc_nids_alt
),
486 .adc_nids
= alc268_adc_nids_alt
,
488 .num_channel_mode
= ARRAY_SIZE(alc268_modes
),
489 .channel_mode
= alc268_modes
,
490 .unsol_event
= alc_sku_unsol_event
,
491 .setup
= alc267_quanta_il1_setup
,
492 .init_hook
= alc_inithook
,
495 .mixers
= { alc268_base_mixer
, alc268_capture_alt_mixer
,
497 .init_verbs
= { alc268_base_init_verbs
},
498 .num_dacs
= ARRAY_SIZE(alc268_dac_nids
),
499 .dac_nids
= alc268_dac_nids
,
500 .num_adc_nids
= ARRAY_SIZE(alc268_adc_nids_alt
),
501 .adc_nids
= alc268_adc_nids_alt
,
502 .capsrc_nids
= alc268_capsrc_nids
,
504 .dig_out_nid
= ALC268_DIGOUT_NID
,
505 .num_channel_mode
= ARRAY_SIZE(alc268_modes
),
506 .channel_mode
= alc268_modes
,
507 .input_mux
= &alc268_capture_source
,
510 .mixers
= { alc268_toshiba_mixer
, alc268_capture_alt_mixer
,
512 .init_verbs
= { alc268_base_init_verbs
, alc268_eapd_verbs
,
513 alc268_toshiba_verbs
},
514 .num_dacs
= ARRAY_SIZE(alc268_dac_nids
),
515 .dac_nids
= alc268_dac_nids
,
516 .num_adc_nids
= ARRAY_SIZE(alc268_adc_nids_alt
),
517 .adc_nids
= alc268_adc_nids_alt
,
518 .capsrc_nids
= alc268_capsrc_nids
,
520 .num_channel_mode
= ARRAY_SIZE(alc268_modes
),
521 .channel_mode
= alc268_modes
,
522 .input_mux
= &alc268_capture_source
,
523 .unsol_event
= alc_sku_unsol_event
,
524 .setup
= alc268_toshiba_setup
,
525 .init_hook
= alc_inithook
,
528 .mixers
= { alc268_acer_mixer
, alc268_capture_alt_mixer
,
530 .init_verbs
= { alc268_base_init_verbs
, alc268_eapd_verbs
,
532 .num_dacs
= ARRAY_SIZE(alc268_dac_nids
),
533 .dac_nids
= alc268_dac_nids
,
534 .num_adc_nids
= ARRAY_SIZE(alc268_adc_nids_alt
),
535 .adc_nids
= alc268_adc_nids_alt
,
536 .capsrc_nids
= alc268_capsrc_nids
,
538 .num_channel_mode
= ARRAY_SIZE(alc268_modes
),
539 .channel_mode
= alc268_modes
,
540 .input_mux
= &alc268_acer_capture_source
,
541 .unsol_event
= alc_sku_unsol_event
,
542 .setup
= alc268_acer_setup
,
543 .init_hook
= alc_inithook
,
545 [ALC268_ACER_DMIC
] = {
546 .mixers
= { alc268_acer_dmic_mixer
, alc268_capture_alt_mixer
,
548 .init_verbs
= { alc268_base_init_verbs
, alc268_eapd_verbs
,
550 .num_dacs
= ARRAY_SIZE(alc268_dac_nids
),
551 .dac_nids
= alc268_dac_nids
,
552 .num_adc_nids
= ARRAY_SIZE(alc268_adc_nids_alt
),
553 .adc_nids
= alc268_adc_nids_alt
,
554 .capsrc_nids
= alc268_capsrc_nids
,
556 .num_channel_mode
= ARRAY_SIZE(alc268_modes
),
557 .channel_mode
= alc268_modes
,
558 .input_mux
= &alc268_acer_dmic_capture_source
,
559 .unsol_event
= alc_sku_unsol_event
,
560 .setup
= alc268_acer_setup
,
561 .init_hook
= alc_inithook
,
563 [ALC268_ACER_ASPIRE_ONE
] = {
564 .mixers
= { alc268_acer_aspire_one_mixer
,
566 alc268_capture_nosrc_mixer
},
567 .init_verbs
= { alc268_base_init_verbs
, alc268_eapd_verbs
,
568 alc268_acer_aspire_one_verbs
},
569 .num_dacs
= ARRAY_SIZE(alc268_dac_nids
),
570 .dac_nids
= alc268_dac_nids
,
571 .num_adc_nids
= ARRAY_SIZE(alc268_adc_nids_alt
),
572 .adc_nids
= alc268_adc_nids_alt
,
573 .capsrc_nids
= alc268_capsrc_nids
,
575 .num_channel_mode
= ARRAY_SIZE(alc268_modes
),
576 .channel_mode
= alc268_modes
,
577 .unsol_event
= alc_sku_unsol_event
,
578 .setup
= alc268_acer_lc_setup
,
579 .init_hook
= alc_inithook
,
582 .mixers
= { alc268_dell_mixer
, alc268_beep_mixer
,
583 alc268_capture_nosrc_mixer
},
584 .init_verbs
= { alc268_base_init_verbs
, alc268_eapd_verbs
,
586 .num_dacs
= ARRAY_SIZE(alc268_dac_nids
),
587 .dac_nids
= alc268_dac_nids
,
588 .num_adc_nids
= ARRAY_SIZE(alc268_adc_nids_alt
),
589 .adc_nids
= alc268_adc_nids_alt
,
590 .capsrc_nids
= alc268_capsrc_nids
,
592 .num_channel_mode
= ARRAY_SIZE(alc268_modes
),
593 .channel_mode
= alc268_modes
,
594 .unsol_event
= alc_sku_unsol_event
,
595 .setup
= alc268_dell_setup
,
596 .init_hook
= alc_inithook
,
599 .mixers
= { alc268_base_mixer
, alc268_capture_alt_mixer
,
601 .init_verbs
= { alc268_base_init_verbs
, alc268_eapd_verbs
,
602 alc268_toshiba_verbs
},
603 .num_dacs
= ARRAY_SIZE(alc268_dac_nids
),
604 .dac_nids
= alc268_dac_nids
,
605 .num_adc_nids
= ARRAY_SIZE(alc268_adc_nids_alt
),
606 .adc_nids
= alc268_adc_nids_alt
,
607 .capsrc_nids
= alc268_capsrc_nids
,
609 .dig_out_nid
= ALC268_DIGOUT_NID
,
610 .num_channel_mode
= ARRAY_SIZE(alc268_modes
),
611 .channel_mode
= alc268_modes
,
612 .input_mux
= &alc268_capture_source
,
613 .unsol_event
= alc_sku_unsol_event
,
614 .setup
= alc268_toshiba_setup
,
615 .init_hook
= alc_inithook
,
617 #ifdef CONFIG_SND_DEBUG
619 .mixers
= { alc268_test_mixer
, alc268_capture_mixer
},
620 .init_verbs
= { alc268_base_init_verbs
, alc268_eapd_verbs
,
621 alc268_volume_init_verbs
,
622 alc268_beep_init_verbs
},
623 .num_dacs
= ARRAY_SIZE(alc268_dac_nids
),
624 .dac_nids
= alc268_dac_nids
,
625 .num_adc_nids
= ARRAY_SIZE(alc268_adc_nids_alt
),
626 .adc_nids
= alc268_adc_nids_alt
,
627 .capsrc_nids
= alc268_capsrc_nids
,
629 .dig_out_nid
= ALC268_DIGOUT_NID
,
630 .num_channel_mode
= ARRAY_SIZE(alc268_modes
),
631 .channel_mode
= alc268_modes
,
632 .input_mux
= &alc268_capture_source
,