3 * included by patch_realtek.c
14 ALC262_HP_BPC_D7000_WL
,
15 ALC262_HP_BPC_D7000_WF
,
27 ALC262_MODEL_LAST
/* last tag */
30 #define ALC262_DIGOUT_NID ALC880_DIGOUT_NID
31 #define ALC262_DIGIN_NID ALC880_DIGIN_NID
33 #define alc262_dac_nids alc260_dac_nids
34 #define alc262_adc_nids alc882_adc_nids
35 #define alc262_adc_nids_alt alc882_adc_nids_alt
36 #define alc262_capsrc_nids alc882_capsrc_nids
37 #define alc262_capsrc_nids_alt alc882_capsrc_nids_alt
39 #define alc262_modes alc260_modes
40 #define alc262_capture_source alc882_capture_source
42 static const hda_nid_t alc262_dmic_adc_nids
[1] = {
47 static const hda_nid_t alc262_dmic_capsrc_nids
[1] = { 0x22 };
49 static const struct snd_kcontrol_new alc262_base_mixer
[] = {
50 HDA_CODEC_VOLUME("Front Playback Volume", 0x0c, 0x0, HDA_OUTPUT
),
51 HDA_CODEC_MUTE("Front Playback Switch", 0x14, 0x0, HDA_OUTPUT
),
52 HDA_CODEC_VOLUME("CD Playback Volume", 0x0b, 0x04, HDA_INPUT
),
53 HDA_CODEC_MUTE("CD Playback Switch", 0x0b, 0x04, HDA_INPUT
),
54 HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT
),
55 HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT
),
56 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT
),
57 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT
),
58 HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT
),
59 HDA_CODEC_VOLUME("Front Mic Playback Volume", 0x0b, 0x01, HDA_INPUT
),
60 HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x01, HDA_INPUT
),
61 HDA_CODEC_VOLUME("Front Mic Boost Volume", 0x19, 0, HDA_INPUT
),
62 HDA_CODEC_VOLUME("Headphone Playback Volume", 0x0D, 0x0, HDA_OUTPUT
),
63 HDA_CODEC_MUTE("Headphone Playback Switch", 0x15, 0x0, HDA_OUTPUT
),
64 HDA_CODEC_VOLUME_MONO("Mono Playback Volume", 0x0e, 2, 0x0, HDA_OUTPUT
),
65 HDA_CODEC_MUTE_MONO("Mono Playback Switch", 0x16, 2, 0x0, HDA_OUTPUT
),
69 /* update HP, line and mono-out pins according to the master switch */
70 #define alc262_hp_master_update alc260_hp_master_update
72 static void alc262_hp_bpc_setup(struct hda_codec
*codec
)
74 struct alc_spec
*spec
= codec
->spec
;
76 spec
->autocfg
.hp_pins
[0] = 0x1b;
77 spec
->autocfg
.speaker_pins
[0] = 0x16;
79 spec
->automute_mode
= ALC_AUTOMUTE_PIN
;
82 static void alc262_hp_wildwest_setup(struct hda_codec
*codec
)
84 struct alc_spec
*spec
= codec
->spec
;
86 spec
->autocfg
.hp_pins
[0] = 0x15;
87 spec
->autocfg
.speaker_pins
[0] = 0x16;
89 spec
->automute_mode
= ALC_AUTOMUTE_PIN
;
92 #define alc262_hp_master_sw_get alc260_hp_master_sw_get
93 #define alc262_hp_master_sw_put alc260_hp_master_sw_put
95 #define ALC262_HP_MASTER_SWITCH \
97 .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \
98 .name = "Master Playback Switch", \
99 .info = snd_ctl_boolean_mono_info, \
100 .get = alc262_hp_master_sw_get, \
101 .put = alc262_hp_master_sw_put, \
104 .iface = NID_MAPPING, \
105 .name = "Master Playback Switch", \
106 .private_value = 0x15 | (0x16 << 8) | (0x1b << 16), \
110 static const struct snd_kcontrol_new alc262_HP_BPC_mixer
[] = {
111 ALC262_HP_MASTER_SWITCH
,
112 HDA_CODEC_VOLUME("Front Playback Volume", 0x0c, 0x0, HDA_OUTPUT
),
113 HDA_CODEC_MUTE("Front Playback Switch", 0x15, 0x0, HDA_OUTPUT
),
114 HDA_CODEC_MUTE("Headphone Playback Switch", 0x1b, 0x0, HDA_OUTPUT
),
115 HDA_CODEC_VOLUME_MONO("Speaker Playback Volume", 0x0e, 2, 0x0,
117 HDA_CODEC_MUTE_MONO("Speaker Playback Switch", 0x16, 2, 0x0,
119 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT
),
120 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT
),
121 HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT
),
122 HDA_CODEC_VOLUME("Front Mic Playback Volume", 0x0b, 0x01, HDA_INPUT
),
123 HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x01, HDA_INPUT
),
124 HDA_CODEC_VOLUME("Front Mic Boost Volume", 0x19, 0, HDA_INPUT
),
125 HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT
),
126 HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT
),
127 HDA_CODEC_VOLUME("CD Playback Volume", 0x0b, 0x04, HDA_INPUT
),
128 HDA_CODEC_MUTE("CD Playback Switch", 0x0b, 0x04, HDA_INPUT
),
129 HDA_CODEC_VOLUME("AUX IN Playback Volume", 0x0b, 0x06, HDA_INPUT
),
130 HDA_CODEC_MUTE("AUX IN Playback Switch", 0x0b, 0x06, HDA_INPUT
),
134 static const struct snd_kcontrol_new alc262_HP_BPC_WildWest_mixer
[] = {
135 ALC262_HP_MASTER_SWITCH
,
136 HDA_CODEC_VOLUME("Front Playback Volume", 0x0c, 0x0, HDA_OUTPUT
),
137 HDA_CODEC_MUTE("Front Playback Switch", 0x1b, 0x0, HDA_OUTPUT
),
138 HDA_CODEC_VOLUME("Headphone Playback Volume", 0x0d, 0x0, HDA_OUTPUT
),
139 HDA_CODEC_MUTE("Headphone Playback Switch", 0x15, 0x0, HDA_OUTPUT
),
140 HDA_CODEC_VOLUME_MONO("Speaker Playback Volume", 0x0e, 2, 0x0,
142 HDA_CODEC_MUTE_MONO("Speaker Playback Switch", 0x16, 2, 0x0,
144 HDA_CODEC_VOLUME("Front Mic Playback Volume", 0x0b, 0x02, HDA_INPUT
),
145 HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x02, HDA_INPUT
),
146 HDA_CODEC_VOLUME("Front Mic Boost Volume", 0x1a, 0, HDA_INPUT
),
147 HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x01, HDA_INPUT
),
148 HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x01, HDA_INPUT
),
149 HDA_CODEC_VOLUME("CD Playback Volume", 0x0b, 0x04, HDA_INPUT
),
150 HDA_CODEC_MUTE("CD Playback Switch", 0x0b, 0x04, HDA_INPUT
),
154 static const struct snd_kcontrol_new alc262_HP_BPC_WildWest_option_mixer
[] = {
155 HDA_CODEC_VOLUME("Rear Mic Playback Volume", 0x0b, 0x0, HDA_INPUT
),
156 HDA_CODEC_MUTE("Rear Mic Playback Switch", 0x0b, 0x0, HDA_INPUT
),
157 HDA_CODEC_VOLUME("Rear Mic Boost Volume", 0x18, 0, HDA_INPUT
),
161 /* mute/unmute internal speaker according to the hp jack and mute state */
162 static void alc262_hp_t5735_setup(struct hda_codec
*codec
)
164 struct alc_spec
*spec
= codec
->spec
;
166 spec
->autocfg
.hp_pins
[0] = 0x15;
167 spec
->autocfg
.speaker_pins
[0] = 0x14;
169 spec
->automute_mode
= ALC_AUTOMUTE_PIN
;
172 static const struct snd_kcontrol_new alc262_hp_t5735_mixer
[] = {
173 HDA_CODEC_VOLUME("Speaker Playback Volume", 0x0c, 0x0, HDA_OUTPUT
),
174 HDA_CODEC_MUTE("Speaker Playback Switch", 0x14, 0x0, HDA_OUTPUT
),
175 HDA_CODEC_VOLUME("Headphone Playback Volume", 0x0d, 0x0, HDA_OUTPUT
),
176 HDA_CODEC_MUTE("Headphone Playback Switch", 0x15, 0x0, HDA_OUTPUT
),
177 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT
),
178 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT
),
179 HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT
),
183 static const struct hda_verb alc262_hp_t5735_verbs
[] = {
184 {0x14, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_OUT
},
185 {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_HP
},
187 {0x15, AC_VERB_SET_UNSOLICITED_ENABLE
, ALC_HP_EVENT
| AC_USRSP_EN
},
191 static const struct snd_kcontrol_new alc262_hp_rp5700_mixer
[] = {
192 HDA_CODEC_VOLUME("Headphone Playback Volume", 0x0c, 0x0, HDA_OUTPUT
),
193 HDA_CODEC_MUTE("Headphone Playback Switch", 0x1b, 0x0, HDA_OUTPUT
),
194 HDA_CODEC_VOLUME("Speaker Playback Volume", 0x0e, 0x0, HDA_OUTPUT
),
195 HDA_CODEC_MUTE("Speaker Playback Switch", 0x16, 0x0, HDA_OUTPUT
),
196 HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x01, HDA_INPUT
),
197 HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x01, HDA_INPUT
),
201 static const struct hda_verb alc262_hp_rp5700_verbs
[] = {
202 {0x1b, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
},
203 {0x16, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
},
204 {0x16, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_OUT
},
205 {0x1b, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_OUT
},
206 {0x19, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_IN
},
207 {0x1b, AC_VERB_SET_CONNECT_SEL
, 0x00},
208 {0x23, AC_VERB_SET_AMP_GAIN_MUTE
, (0x7000 | (0x01 << 8))},
209 {0x24, AC_VERB_SET_AMP_GAIN_MUTE
, (0x7000 | (0x01 << 8))},
210 {0x23, AC_VERB_SET_AMP_GAIN_MUTE
, (0x7080 | (0x00 << 8))},
211 {0x24, AC_VERB_SET_AMP_GAIN_MUTE
, (0x7080 | (0x00 << 8))},
215 static const struct hda_input_mux alc262_hp_rp5700_capture_source
= {
222 /* bind hp and internal speaker mute (with plug check) as master switch */
223 #define alc262_hippo_master_update alc262_hp_master_update
224 #define alc262_hippo_master_sw_get alc262_hp_master_sw_get
225 #define alc262_hippo_master_sw_put alc262_hp_master_sw_put
227 #define ALC262_HIPPO_MASTER_SWITCH \
229 .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \
230 .name = "Master Playback Switch", \
231 .info = snd_ctl_boolean_mono_info, \
232 .get = alc262_hippo_master_sw_get, \
233 .put = alc262_hippo_master_sw_put, \
236 .iface = NID_MAPPING, \
237 .name = "Master Playback Switch", \
238 .subdevice = SUBDEV_HP(0) | (SUBDEV_LINE(0) << 8) | \
239 (SUBDEV_SPEAKER(0) << 16), \
242 static const struct snd_kcontrol_new alc262_hippo_mixer
[] = {
243 ALC262_HIPPO_MASTER_SWITCH
,
244 HDA_CODEC_VOLUME("Speaker Playback Volume", 0x0c, 0x0, HDA_OUTPUT
),
245 HDA_CODEC_VOLUME("CD Playback Volume", 0x0b, 0x04, HDA_INPUT
),
246 HDA_CODEC_MUTE("CD Playback Switch", 0x0b, 0x04, HDA_INPUT
),
247 HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT
),
248 HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT
),
249 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT
),
250 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT
),
251 HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT
),
252 HDA_CODEC_VOLUME("Front Mic Playback Volume", 0x0b, 0x01, HDA_INPUT
),
253 HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x01, HDA_INPUT
),
254 HDA_CODEC_VOLUME("Front Mic Boost Volume", 0x19, 0, HDA_INPUT
),
255 HDA_CODEC_VOLUME("Headphone Playback Volume", 0x0d, 0x0, HDA_OUTPUT
),
259 static const struct snd_kcontrol_new alc262_hippo1_mixer
[] = {
260 HDA_CODEC_VOLUME("Master Playback Volume", 0x0c, 0x0, HDA_OUTPUT
),
261 ALC262_HIPPO_MASTER_SWITCH
,
262 HDA_CODEC_VOLUME("CD Playback Volume", 0x0b, 0x04, HDA_INPUT
),
263 HDA_CODEC_MUTE("CD Playback Switch", 0x0b, 0x04, HDA_INPUT
),
264 HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT
),
265 HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT
),
266 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT
),
267 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT
),
268 HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT
),
269 HDA_CODEC_VOLUME("Front Mic Playback Volume", 0x0b, 0x01, HDA_INPUT
),
270 HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x01, HDA_INPUT
),
271 HDA_CODEC_VOLUME("Front Mic Boost Volume", 0x19, 0, HDA_INPUT
),
275 /* mute/unmute internal speaker according to the hp jack and mute state */
276 static void alc262_hippo_setup(struct hda_codec
*codec
)
278 struct alc_spec
*spec
= codec
->spec
;
280 spec
->autocfg
.hp_pins
[0] = 0x15;
281 spec
->autocfg
.speaker_pins
[0] = 0x14;
283 spec
->automute_mode
= ALC_AUTOMUTE_AMP
;
286 static void alc262_hippo1_setup(struct hda_codec
*codec
)
288 struct alc_spec
*spec
= codec
->spec
;
290 spec
->autocfg
.hp_pins
[0] = 0x1b;
291 spec
->autocfg
.speaker_pins
[0] = 0x14;
293 spec
->automute_mode
= ALC_AUTOMUTE_AMP
;
297 static const struct snd_kcontrol_new alc262_sony_mixer
[] = {
298 HDA_CODEC_VOLUME("Master Playback Volume", 0x0c, 0x0, HDA_OUTPUT
),
299 ALC262_HIPPO_MASTER_SWITCH
,
300 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT
),
301 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT
),
302 HDA_CODEC_VOLUME("ATAPI Mic Playback Volume", 0x0b, 0x01, HDA_INPUT
),
303 HDA_CODEC_MUTE("ATAPI Mic Playback Switch", 0x0b, 0x01, HDA_INPUT
),
307 static const struct snd_kcontrol_new alc262_benq_t31_mixer
[] = {
308 HDA_CODEC_VOLUME("Master Playback Volume", 0x0c, 0x0, HDA_OUTPUT
),
309 ALC262_HIPPO_MASTER_SWITCH
,
310 HDA_CODEC_MUTE("Headphone Playback Switch", 0x15, 0x0, HDA_OUTPUT
),
311 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT
),
312 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT
),
313 HDA_CODEC_VOLUME("ATAPI Mic Playback Volume", 0x0b, 0x01, HDA_INPUT
),
314 HDA_CODEC_MUTE("ATAPI Mic Playback Switch", 0x0b, 0x01, HDA_INPUT
),
318 static const struct snd_kcontrol_new alc262_tyan_mixer
[] = {
319 HDA_CODEC_VOLUME("Master Playback Volume", 0x0c, 0x0, HDA_OUTPUT
),
320 HDA_BIND_MUTE("Master Playback Switch", 0x0c, 2, HDA_INPUT
),
321 HDA_CODEC_VOLUME("Aux Playback Volume", 0x0b, 0x06, HDA_INPUT
),
322 HDA_CODEC_MUTE("Aux Playback Switch", 0x0b, 0x06, HDA_INPUT
),
323 HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT
),
324 HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT
),
325 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT
),
326 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT
),
327 HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT
),
328 HDA_CODEC_VOLUME("Front Mic Playback Volume", 0x0b, 0x01, HDA_INPUT
),
329 HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x01, HDA_INPUT
),
330 HDA_CODEC_VOLUME("Front Mic Boost Volume", 0x19, 0, HDA_INPUT
),
334 static const struct hda_verb alc262_tyan_verbs
[] = {
335 /* Headphone automute */
336 {0x1b, AC_VERB_SET_UNSOLICITED_ENABLE
, AC_USRSP_EN
| ALC_HP_EVENT
},
337 {0x1b, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_HP
},
338 {0x15, AC_VERB_SET_CONNECT_SEL
, 0x00},
340 /* P11 AUX_IN, white 4-pin connector */
341 {0x14, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_IN
},
342 {0x14, AC_VERB_SET_CONFIG_DEFAULT_BYTES_1
, 0xe1},
343 {0x14, AC_VERB_SET_CONFIG_DEFAULT_BYTES_2
, 0x93},
344 {0x14, AC_VERB_SET_CONFIG_DEFAULT_BYTES_3
, 0x19},
349 /* unsolicited event for HP jack sensing */
350 static void alc262_tyan_setup(struct hda_codec
*codec
)
352 struct alc_spec
*spec
= codec
->spec
;
354 spec
->autocfg
.hp_pins
[0] = 0x1b;
355 spec
->autocfg
.speaker_pins
[0] = 0x15;
357 spec
->automute_mode
= ALC_AUTOMUTE_AMP
;
361 #define alc262_capture_mixer alc882_capture_mixer
362 #define alc262_capture_alt_mixer alc882_capture_alt_mixer
365 * generic initialization of ADC, input mixers and output mixers
367 static const struct hda_verb alc262_init_verbs
[] = {
369 * Unmute ADC0-2 and set the default input to mic-in
371 {0x07, AC_VERB_SET_CONNECT_SEL
, 0x00},
372 {0x07, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(0)},
373 {0x08, AC_VERB_SET_CONNECT_SEL
, 0x00},
374 {0x08, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(0)},
375 {0x09, AC_VERB_SET_CONNECT_SEL
, 0x00},
376 {0x09, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(0)},
378 /* Mute input amps (CD, Line In, Mic 1 & Mic 2) of the analog-loopback
380 * Note: PASD motherboards uses the Line In 2 as the input for
381 * front panel mic (mic 2)
383 /* Amp Indices: Mic1 = 0, Mic2 = 1, Line1 = 2, Line2 = 3, CD = 4 */
384 {0x0b, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(0)},
385 {0x0b, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(1)},
386 {0x0b, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(2)},
387 {0x0b, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(3)},
388 {0x0b, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(4)},
391 * Set up output mixers (0x0c - 0x0e)
393 /* set vol=0 to output mixers */
394 {0x0c, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_ZERO
},
395 {0x0d, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_ZERO
},
396 {0x0e, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_ZERO
},
397 /* set up input amps for analog loopback */
398 /* Amp Indices: DAC = 0, mixer = 1 */
399 {0x0c, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(0)},
400 {0x0c, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(1)},
401 {0x0d, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(0)},
402 {0x0d, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(1)},
403 {0x0e, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(0)},
404 {0x0e, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(1)},
406 {0x14, AC_VERB_SET_PIN_WIDGET_CONTROL
, 0x40},
407 {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL
, 0xc0},
408 {0x16, AC_VERB_SET_PIN_WIDGET_CONTROL
, 0x40},
409 {0x18, AC_VERB_SET_PIN_WIDGET_CONTROL
, 0x24},
410 {0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL
, 0x20},
411 {0x1c, AC_VERB_SET_PIN_WIDGET_CONTROL
, 0x20},
413 {0x14, AC_VERB_SET_AMP_GAIN_MUTE
, 0x0000},
414 {0x15, AC_VERB_SET_AMP_GAIN_MUTE
, 0x0000},
415 {0x16, AC_VERB_SET_AMP_GAIN_MUTE
, 0x0000},
416 {0x18, AC_VERB_SET_AMP_GAIN_MUTE
, 0x0000},
417 {0x1a, AC_VERB_SET_AMP_GAIN_MUTE
, 0x0000},
419 {0x14, AC_VERB_SET_CONNECT_SEL
, 0x00},
420 {0x15, AC_VERB_SET_CONNECT_SEL
, 0x01},
422 /* FIXME: use matrix-type input source selection */
423 /* Mixer elements: 0x18, 19, 1a, 1b, 1c, 1d, 14, 15, 16, 17, 0b */
424 /* Input mixer1: unmute Mic, F-Mic, Line, CD inputs */
425 {0x24, AC_VERB_SET_AMP_GAIN_MUTE
, (0x7000 | (0x00 << 8))},
426 {0x24, AC_VERB_SET_AMP_GAIN_MUTE
, (0x7080 | (0x03 << 8))},
427 {0x24, AC_VERB_SET_AMP_GAIN_MUTE
, (0x7080 | (0x02 << 8))},
428 {0x24, AC_VERB_SET_AMP_GAIN_MUTE
, (0x7080 | (0x04 << 8))},
430 {0x23, AC_VERB_SET_AMP_GAIN_MUTE
, (0x7000 | (0x00 << 8))},
431 {0x23, AC_VERB_SET_AMP_GAIN_MUTE
, (0x7080 | (0x03 << 8))},
432 {0x23, AC_VERB_SET_AMP_GAIN_MUTE
, (0x7080 | (0x02 << 8))},
433 {0x23, AC_VERB_SET_AMP_GAIN_MUTE
, (0x7080 | (0x04 << 8))},
435 {0x22, AC_VERB_SET_AMP_GAIN_MUTE
, (0x7000 | (0x00 << 8))},
436 {0x22, AC_VERB_SET_AMP_GAIN_MUTE
, (0x7080 | (0x03 << 8))},
437 {0x22, AC_VERB_SET_AMP_GAIN_MUTE
, (0x7080 | (0x02 << 8))},
438 {0x22, AC_VERB_SET_AMP_GAIN_MUTE
, (0x7080 | (0x04 << 8))},
443 static const struct hda_verb alc262_eapd_verbs
[] = {
444 {0x14, AC_VERB_SET_EAPD_BTLENABLE
, 2},
445 {0x15, AC_VERB_SET_EAPD_BTLENABLE
, 2},
449 static const struct hda_verb alc262_hippo1_unsol_verbs
[] = {
450 {0x1b, AC_VERB_SET_PIN_WIDGET_CONTROL
, 0xc0},
451 {0x1b, AC_VERB_SET_CONNECT_SEL
, 0x00},
452 {0x1b, AC_VERB_SET_AMP_GAIN_MUTE
, 0x0000},
454 {0x1b, AC_VERB_SET_UNSOLICITED_ENABLE
, AC_USRSP_EN
| ALC_HP_EVENT
},
455 {0x1b, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_HP
},
459 static const struct hda_verb alc262_sony_unsol_verbs
[] = {
460 {0x14, AC_VERB_SET_PIN_WIDGET_CONTROL
, 0xc0},
461 {0x15, AC_VERB_SET_CONNECT_SEL
, 0x00},
462 {0x19, AC_VERB_SET_PIN_WIDGET_CONTROL
, 0x24}, // Front Mic
464 {0x15, AC_VERB_SET_UNSOLICITED_ENABLE
, AC_USRSP_EN
| ALC_HP_EVENT
},
465 {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_HP
},
469 static const struct snd_kcontrol_new alc262_toshiba_s06_mixer
[] = {
470 HDA_CODEC_VOLUME("Speaker Playback Volume", 0x0c, 0x0, HDA_OUTPUT
),
471 HDA_CODEC_MUTE("Speaker Playback Switch", 0x14, 0x0, HDA_OUTPUT
),
472 HDA_CODEC_MUTE("Headphone Playback Switch", 0x15, 0x0, HDA_OUTPUT
),
473 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT
),
474 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT
),
478 static const struct hda_verb alc262_toshiba_s06_verbs
[] = {
479 {0x12, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_IN
},
480 {0x14, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_OUT
},
481 {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_HP
},
482 {0x15, AC_VERB_SET_CONNECT_SEL
, 0x00},
483 {0x22, AC_VERB_SET_CONNECT_SEL
, 0x09},
484 {0x18, AC_VERB_SET_PIN_WIDGET_CONTROL
, 0x24},
485 {0x18, AC_VERB_SET_UNSOLICITED_ENABLE
, AC_USRSP_EN
| ALC_MIC_EVENT
},
486 {0x15, AC_VERB_SET_UNSOLICITED_ENABLE
, AC_USRSP_EN
| ALC_HP_EVENT
},
490 static void alc262_toshiba_s06_setup(struct hda_codec
*codec
)
492 struct alc_spec
*spec
= codec
->spec
;
494 spec
->autocfg
.hp_pins
[0] = 0x15;
495 spec
->autocfg
.speaker_pins
[0] = 0x14;
496 spec
->ext_mic_pin
= 0x18;
497 spec
->int_mic_pin
= 0x12;
500 spec
->automute_mode
= ALC_AUTOMUTE_PIN
;
506 * 0x16 = internal speaker
507 * 0x18 = external mic
510 static const struct snd_kcontrol_new alc262_nec_mixer
[] = {
511 HDA_CODEC_VOLUME_MONO("Speaker Playback Volume", 0x0e, 1, 0x0, HDA_OUTPUT
),
512 HDA_CODEC_MUTE_MONO("Speaker Playback Switch", 0x16, 0, 0x0, HDA_OUTPUT
),
514 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT
),
515 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT
),
516 HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT
),
518 HDA_CODEC_VOLUME("Headphone Playback Volume", 0x0d, 0x0, HDA_OUTPUT
),
519 HDA_CODEC_MUTE("Headphone Playback Switch", 0x15, 0x0, HDA_OUTPUT
),
523 static const struct hda_verb alc262_nec_verbs
[] = {
525 {0x16, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
},
528 {0x15, AC_VERB_SET_UNSOLICITED_ENABLE
, AC_USRSP_EN
| ALC_HP_EVENT
},
529 {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_OUT
},
531 /* External mic to headphone */
532 {0x0d, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(1)},
533 /* External mic to speaker */
534 {0x0e, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(1)},
540 * 0x14 = headphone/spdif-out, 0x15 = internal speaker,
541 * 0x1b = port replicator headphone out
544 static const struct hda_verb alc262_fujitsu_unsol_verbs
[] = {
545 {0x14, AC_VERB_SET_UNSOLICITED_ENABLE
, AC_USRSP_EN
| ALC_HP_EVENT
},
546 {0x14, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_HP
},
547 {0x1b, AC_VERB_SET_UNSOLICITED_ENABLE
, AC_USRSP_EN
| ALC_HP_EVENT
},
548 {0x1b, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_HP
},
552 static const struct hda_verb alc262_lenovo_3000_unsol_verbs
[] = {
553 {0x1b, AC_VERB_SET_UNSOLICITED_ENABLE
, AC_USRSP_EN
| ALC_HP_EVENT
},
554 {0x1b, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_HP
},
558 static const struct hda_verb alc262_lenovo_3000_init_verbs
[] = {
559 /* Front Mic pin: input vref at 50% */
560 {0x19, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_VREF50
},
561 {0x19, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_MUTE
},
565 static const struct hda_input_mux alc262_fujitsu_capture_source
= {
569 { "Internal Mic", 0x1 },
574 static const struct hda_input_mux alc262_HP_capture_source
= {
578 { "Front Mic", 0x1 },
585 static const struct hda_input_mux alc262_HP_D7000_capture_source
= {
589 { "Front Mic", 0x2 },
595 static void alc262_fujitsu_setup(struct hda_codec
*codec
)
597 struct alc_spec
*spec
= codec
->spec
;
599 spec
->autocfg
.hp_pins
[0] = 0x14;
600 spec
->autocfg
.hp_pins
[1] = 0x1b;
601 spec
->autocfg
.speaker_pins
[0] = 0x15;
603 spec
->automute_mode
= ALC_AUTOMUTE_AMP
;
606 /* bind volumes of both NID 0x0c and 0x0d */
607 static const struct hda_bind_ctls alc262_fujitsu_bind_master_vol
= {
608 .ops
= &snd_hda_bind_vol
,
610 HDA_COMPOSE_AMP_VAL(0x0c, 3, 0, HDA_OUTPUT
),
611 HDA_COMPOSE_AMP_VAL(0x0d, 3, 0, HDA_OUTPUT
),
616 static const struct snd_kcontrol_new alc262_fujitsu_mixer
[] = {
617 HDA_BIND_VOL("Master Playback Volume", &alc262_fujitsu_bind_master_vol
),
619 .iface
= SNDRV_CTL_ELEM_IFACE_MIXER
,
620 .name
= "Master Playback Switch",
621 .subdevice
= HDA_SUBDEV_NID_FLAG
| 0x14,
622 .info
= snd_ctl_boolean_mono_info
,
623 .get
= alc262_hp_master_sw_get
,
624 .put
= alc262_hp_master_sw_put
,
627 .iface
= NID_MAPPING
,
628 .name
= "Master Playback Switch",
629 .private_value
= 0x1b,
631 HDA_CODEC_VOLUME("CD Playback Volume", 0x0b, 0x04, HDA_INPUT
),
632 HDA_CODEC_MUTE("CD Playback Switch", 0x0b, 0x04, HDA_INPUT
),
633 HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT
),
634 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT
),
635 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT
),
636 HDA_CODEC_VOLUME("Internal Mic Boost Volume", 0x19, 0, HDA_INPUT
),
637 HDA_CODEC_VOLUME("Internal Mic Playback Volume", 0x0b, 0x1, HDA_INPUT
),
638 HDA_CODEC_MUTE("Internal Mic Playback Switch", 0x0b, 0x1, HDA_INPUT
),
642 static void alc262_lenovo_3000_setup(struct hda_codec
*codec
)
644 struct alc_spec
*spec
= codec
->spec
;
646 spec
->autocfg
.hp_pins
[0] = 0x1b;
647 spec
->autocfg
.speaker_pins
[0] = 0x14;
648 spec
->autocfg
.speaker_pins
[1] = 0x16;
650 spec
->automute_mode
= ALC_AUTOMUTE_AMP
;
653 static const struct snd_kcontrol_new alc262_lenovo_3000_mixer
[] = {
654 HDA_BIND_VOL("Master Playback Volume", &alc262_fujitsu_bind_master_vol
),
656 .iface
= SNDRV_CTL_ELEM_IFACE_MIXER
,
657 .name
= "Master Playback Switch",
658 .subdevice
= HDA_SUBDEV_NID_FLAG
| 0x1b,
659 .info
= snd_ctl_boolean_mono_info
,
660 .get
= alc262_hp_master_sw_get
,
661 .put
= alc262_hp_master_sw_put
,
663 HDA_CODEC_VOLUME("CD Playback Volume", 0x0b, 0x04, HDA_INPUT
),
664 HDA_CODEC_MUTE("CD Playback Switch", 0x0b, 0x04, HDA_INPUT
),
665 HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT
),
666 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT
),
667 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT
),
668 HDA_CODEC_VOLUME("Internal Mic Boost Volume", 0x19, 0, HDA_INPUT
),
669 HDA_CODEC_VOLUME("Internal Mic Playback Volume", 0x0b, 0x1, HDA_INPUT
),
670 HDA_CODEC_MUTE("Internal Mic Playback Switch", 0x0b, 0x1, HDA_INPUT
),
674 static const struct snd_kcontrol_new alc262_toshiba_rx1_mixer
[] = {
675 HDA_BIND_VOL("Master Playback Volume", &alc262_fujitsu_bind_master_vol
),
676 ALC262_HIPPO_MASTER_SWITCH
,
677 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT
),
678 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT
),
679 HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT
),
680 HDA_CODEC_VOLUME("Front Mic Playback Volume", 0x0b, 0x01, HDA_INPUT
),
681 HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x01, HDA_INPUT
),
682 HDA_CODEC_VOLUME("Front Mic Boost Volume", 0x19, 0, HDA_INPUT
),
686 /* additional init verbs for Benq laptops */
687 static const struct hda_verb alc262_EAPD_verbs
[] = {
688 {0x20, AC_VERB_SET_COEF_INDEX
, 0x07},
689 {0x20, AC_VERB_SET_PROC_COEF
, 0x3070},
693 static const struct hda_verb alc262_benq_t31_EAPD_verbs
[] = {
694 {0x15, AC_VERB_SET_CONNECT_SEL
, 0x00},
695 {0x19, AC_VERB_SET_PIN_WIDGET_CONTROL
, 0x24},
697 {0x20, AC_VERB_SET_COEF_INDEX
, 0x07},
698 {0x20, AC_VERB_SET_PROC_COEF
, 0x3050},
702 /* Samsung Q1 Ultra Vista model setup */
703 static const struct snd_kcontrol_new alc262_ultra_mixer
[] = {
704 HDA_CODEC_VOLUME("Master Playback Volume", 0x0c, 0x0, HDA_OUTPUT
),
705 HDA_BIND_MUTE("Master Playback Switch", 0x0c, 2, HDA_INPUT
),
706 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x01, HDA_INPUT
),
707 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x01, HDA_INPUT
),
708 HDA_CODEC_VOLUME("Mic Boost Volume", 0x19, 0, HDA_INPUT
),
709 HDA_CODEC_VOLUME("Headphone Mic Boost Volume", 0x15, 0, HDA_INPUT
),
713 static const struct hda_verb alc262_ultra_verbs
[] = {
715 {0x0c, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(0)},
716 {0x0c, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(1)},
717 {0x0c, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_ZERO
},
719 {0x14, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_OUT
},
720 {0x14, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_MUTE
},
721 {0x14, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(0)},
722 {0x14, AC_VERB_SET_CONNECT_SEL
, 0x00},
724 {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_HP
},
725 {0x15, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_MUTE
},
726 {0x15, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(0)},
727 {0x15, AC_VERB_SET_CONNECT_SEL
, 0x00},
728 {0x15, AC_VERB_SET_UNSOLICITED_ENABLE
, AC_USRSP_EN
| ALC_HP_EVENT
},
730 {0x19, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_VREF80
},
731 {0x0b, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(1)},
732 /* ADC, choose mic */
733 {0x07, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(0)},
734 {0x24, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(0)},
735 {0x24, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(1)},
736 {0x24, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(2)},
737 {0x24, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(3)},
738 {0x24, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(4)},
739 {0x24, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(5)},
740 {0x24, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(6)},
741 {0x24, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(7)},
742 {0x24, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(8)},
746 /* mute/unmute internal speaker according to the hp jack and mute state */
747 static void alc262_ultra_automute(struct hda_codec
*codec
)
749 struct alc_spec
*spec
= codec
->spec
;
753 /* auto-mute only when HP is used as HP */
754 if (!spec
->cur_mux
[0]) {
755 spec
->jack_present
= snd_hda_jack_detect(codec
, 0x15);
756 if (spec
->jack_present
)
759 /* mute/unmute internal speaker */
760 snd_hda_codec_amp_stereo(codec
, 0x14, HDA_OUTPUT
, 0,
763 snd_hda_codec_amp_stereo(codec
, 0x15, HDA_OUTPUT
, 0,
764 HDA_AMP_MUTE
, mute
? 0 : HDA_AMP_MUTE
);
767 /* unsolicited event for HP jack sensing */
768 static void alc262_ultra_unsol_event(struct hda_codec
*codec
,
771 if ((res
>> 26) != ALC_HP_EVENT
)
773 alc262_ultra_automute(codec
);
776 static const struct hda_input_mux alc262_ultra_capture_source
= {
780 { "Headphone", 0x7 },
784 static int alc262_ultra_mux_enum_put(struct snd_kcontrol
*kcontrol
,
785 struct snd_ctl_elem_value
*ucontrol
)
787 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
788 struct alc_spec
*spec
= codec
->spec
;
791 ret
= alc_mux_enum_put(kcontrol
, ucontrol
);
794 /* reprogram the HP pin as mic or HP according to the input source */
795 snd_hda_codec_write_cache(codec
, 0x15, 0,
796 AC_VERB_SET_PIN_WIDGET_CONTROL
,
797 spec
->cur_mux
[0] ? PIN_VREF80
: PIN_HP
);
798 alc262_ultra_automute(codec
); /* mute/unmute HP */
802 static const struct snd_kcontrol_new alc262_ultra_capture_mixer
[] = {
803 HDA_CODEC_VOLUME("Capture Volume", 0x07, 0x0, HDA_INPUT
),
804 HDA_CODEC_MUTE("Capture Switch", 0x07, 0x0, HDA_INPUT
),
806 .iface
= SNDRV_CTL_ELEM_IFACE_MIXER
,
807 .name
= "Capture Source",
808 .info
= alc_mux_enum_info
,
809 .get
= alc_mux_enum_get
,
810 .put
= alc262_ultra_mux_enum_put
,
813 .iface
= NID_MAPPING
,
814 .name
= "Capture Source",
815 .private_value
= 0x15,
820 static const struct hda_verb alc262_HP_BPC_init_verbs
[] = {
822 * Unmute ADC0-2 and set the default input to mic-in
824 {0x07, AC_VERB_SET_CONNECT_SEL
, 0x00},
825 {0x07, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(0)},
826 {0x08, AC_VERB_SET_CONNECT_SEL
, 0x00},
827 {0x08, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(0)},
828 {0x09, AC_VERB_SET_CONNECT_SEL
, 0x00},
829 {0x09, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(0)},
831 /* Mute input amps (CD, Line In, Mic 1 & Mic 2) of the analog-loopback
833 * Note: PASD motherboards uses the Line In 2 as the input for
834 * front panel mic (mic 2)
836 /* Amp Indices: Mic1 = 0, Mic2 = 1, Line1 = 2, Line2 = 3, CD = 4 */
837 {0x0b, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(0)},
838 {0x0b, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(1)},
839 {0x0b, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(2)},
840 {0x0b, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(3)},
841 {0x0b, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(4)},
842 {0x0b, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(5)},
843 {0x0b, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(6)},
846 * Set up output mixers (0x0c - 0x0e)
848 /* set vol=0 to output mixers */
849 {0x0c, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_ZERO
},
850 {0x0d, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_ZERO
},
851 {0x0e, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_ZERO
},
853 /* set up input amps for analog loopback */
854 /* Amp Indices: DAC = 0, mixer = 1 */
855 {0x0c, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(0)},
856 {0x0c, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(1)},
857 {0x0d, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(0)},
858 {0x0d, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(1)},
859 {0x0e, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(0)},
860 {0x0e, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(1)},
862 {0x1b, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_HP
},
863 {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_OUT
},
864 {0x16, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_OUT
},
866 {0x1b, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
},
867 {0x15, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
},
869 {0x1b, AC_VERB_SET_CONNECT_SEL
, 0x00},
870 {0x15, AC_VERB_SET_CONNECT_SEL
, 0x00},
872 {0x14, AC_VERB_SET_PIN_WIDGET_CONTROL
, 0x20},
873 {0x18, AC_VERB_SET_PIN_WIDGET_CONTROL
, 0x24},
874 {0x19, AC_VERB_SET_PIN_WIDGET_CONTROL
, 0x24},
875 {0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL
, 0x20},
876 {0x1c, AC_VERB_SET_PIN_WIDGET_CONTROL
, 0x20},
878 {0x14, AC_VERB_SET_AMP_GAIN_MUTE
, 0x7000 },
879 {0x18, AC_VERB_SET_AMP_GAIN_MUTE
, 0x7000 },
880 {0x19, AC_VERB_SET_AMP_GAIN_MUTE
, 0x7000 },
881 {0x1a, AC_VERB_SET_AMP_GAIN_MUTE
, 0x7000 },
882 {0x1c, AC_VERB_SET_AMP_GAIN_MUTE
, 0x7000 },
883 {0x1d, AC_VERB_SET_AMP_GAIN_MUTE
, 0x7000 },
886 /* FIXME: use matrix-type input source selection */
887 /* Mixer elements: 0x18, 19, 1a, 1b, 1c, 1d, 14, 15, 0b, 12 */
888 /* Input mixer1: only unmute Mic */
889 {0x24, AC_VERB_SET_AMP_GAIN_MUTE
, (0x7000 | (0x00 << 8))},
890 {0x24, AC_VERB_SET_AMP_GAIN_MUTE
, (0x7080 | (0x01 << 8))},
891 {0x24, AC_VERB_SET_AMP_GAIN_MUTE
, (0x7080 | (0x02 << 8))},
892 {0x24, AC_VERB_SET_AMP_GAIN_MUTE
, (0x7080 | (0x03 << 8))},
893 {0x24, AC_VERB_SET_AMP_GAIN_MUTE
, (0x7080 | (0x04 << 8))},
894 {0x24, AC_VERB_SET_AMP_GAIN_MUTE
, (0x7080 | (0x05 << 8))},
895 {0x24, AC_VERB_SET_AMP_GAIN_MUTE
, (0x7080 | (0x06 << 8))},
896 {0x24, AC_VERB_SET_AMP_GAIN_MUTE
, (0x7080 | (0x07 << 8))},
897 {0x24, AC_VERB_SET_AMP_GAIN_MUTE
, (0x7080 | (0x08 << 8))},
899 {0x23, AC_VERB_SET_AMP_GAIN_MUTE
, (0x7000 | (0x00 << 8))},
900 {0x23, AC_VERB_SET_AMP_GAIN_MUTE
, (0x7080 | (0x01 << 8))},
901 {0x23, AC_VERB_SET_AMP_GAIN_MUTE
, (0x7080 | (0x02 << 8))},
902 {0x23, AC_VERB_SET_AMP_GAIN_MUTE
, (0x7080 | (0x03 << 8))},
903 {0x23, AC_VERB_SET_AMP_GAIN_MUTE
, (0x7080 | (0x04 << 8))},
904 {0x23, AC_VERB_SET_AMP_GAIN_MUTE
, (0x7080 | (0x05 << 8))},
905 {0x23, AC_VERB_SET_AMP_GAIN_MUTE
, (0x7080 | (0x06 << 8))},
906 {0x23, AC_VERB_SET_AMP_GAIN_MUTE
, (0x7080 | (0x07 << 8))},
907 {0x23, AC_VERB_SET_AMP_GAIN_MUTE
, (0x7080 | (0x08 << 8))},
909 {0x22, AC_VERB_SET_AMP_GAIN_MUTE
, (0x7000 | (0x00 << 8))},
910 {0x22, AC_VERB_SET_AMP_GAIN_MUTE
, (0x7080 | (0x01 << 8))},
911 {0x22, AC_VERB_SET_AMP_GAIN_MUTE
, (0x7080 | (0x02 << 8))},
912 {0x22, AC_VERB_SET_AMP_GAIN_MUTE
, (0x7080 | (0x03 << 8))},
913 {0x22, AC_VERB_SET_AMP_GAIN_MUTE
, (0x7080 | (0x04 << 8))},
914 {0x22, AC_VERB_SET_AMP_GAIN_MUTE
, (0x7080 | (0x05 << 8))},
915 {0x22, AC_VERB_SET_AMP_GAIN_MUTE
, (0x7080 | (0x06 << 8))},
916 {0x22, AC_VERB_SET_AMP_GAIN_MUTE
, (0x7080 | (0x07 << 8))},
917 {0x22, AC_VERB_SET_AMP_GAIN_MUTE
, (0x7080 | (0x08 << 8))},
919 {0x1b, AC_VERB_SET_UNSOLICITED_ENABLE
, ALC_HP_EVENT
| AC_USRSP_EN
},
924 static const struct hda_verb alc262_HP_BPC_WildWest_init_verbs
[] = {
926 * Unmute ADC0-2 and set the default input to mic-in
928 {0x07, AC_VERB_SET_CONNECT_SEL
, 0x00},
929 {0x07, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(0)},
930 {0x08, AC_VERB_SET_CONNECT_SEL
, 0x00},
931 {0x08, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(0)},
932 {0x09, AC_VERB_SET_CONNECT_SEL
, 0x00},
933 {0x09, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(0)},
935 /* Mute input amps (CD, Line In, Mic 1 & Mic 2) of the analog-loopback
937 * Note: PASD motherboards uses the Line In 2 as the input for front
940 /* Amp Indices: Mic1 = 0, Mic2 = 1, Line1 = 2, Line2 = 3, CD = 4 */
941 {0x0b, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(0)},
942 {0x0b, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(1)},
943 {0x0b, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(2)},
944 {0x0b, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(3)},
945 {0x0b, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(4)},
946 {0x0b, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(5)},
947 {0x0b, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(6)},
948 {0x0b, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(7)},
950 * Set up output mixers (0x0c - 0x0e)
952 /* set vol=0 to output mixers */
953 {0x0c, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_ZERO
},
954 {0x0d, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_ZERO
},
955 {0x0e, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_ZERO
},
957 /* set up input amps for analog loopback */
958 /* Amp Indices: DAC = 0, mixer = 1 */
959 {0x0c, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(0)},
960 {0x0c, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(1)},
961 {0x0d, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(0)},
962 {0x0d, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(1)},
963 {0x0e, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(0)},
964 {0x0e, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(1)},
967 {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_HP
}, /* HP */
968 {0x16, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_OUT
}, /* Mono */
969 {0x18, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_VREF80
}, /* rear MIC */
970 {0x19, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_IN
}, /* Line in */
971 {0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_VREF80
}, /* Front MIC */
972 {0x1b, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_OUT
}, /* Line out */
973 {0x1c, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_IN
}, /* CD in */
975 {0x1b, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
},
976 {0x15, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
},
978 {0x1b, AC_VERB_SET_CONNECT_SEL
, 0x00},
979 {0x15, AC_VERB_SET_CONNECT_SEL
, 0x01},
981 /* {0x14, AC_VERB_SET_AMP_GAIN_MUTE, 0x7023 }, */
982 {0x18, AC_VERB_SET_AMP_GAIN_MUTE
, 0x7000 },
983 {0x19, AC_VERB_SET_AMP_GAIN_MUTE
, 0x7000 },
984 {0x1a, AC_VERB_SET_AMP_GAIN_MUTE
, 0x7023 },
985 {0x1c, AC_VERB_SET_AMP_GAIN_MUTE
, 0x7000 },
986 {0x1d, AC_VERB_SET_AMP_GAIN_MUTE
, 0x7000 },
988 /* FIXME: use matrix-type input source selection */
989 /* Mixer elements: 0x18, 19, 1a, 1b, 1c, 1d, 14, 15, 16, 17, 0b */
990 /* Input mixer1: unmute Mic, F-Mic, Line, CD inputs */
991 {0x24, AC_VERB_SET_AMP_GAIN_MUTE
, (0x7000 | (0x00 << 8))}, /*rear MIC*/
992 {0x24, AC_VERB_SET_AMP_GAIN_MUTE
, (0x7000 | (0x01 << 8))}, /*Line in*/
993 {0x24, AC_VERB_SET_AMP_GAIN_MUTE
, (0x7000 | (0x02 << 8))}, /*F MIC*/
994 {0x24, AC_VERB_SET_AMP_GAIN_MUTE
, (0x7000 | (0x03 << 8))}, /*Front*/
995 {0x24, AC_VERB_SET_AMP_GAIN_MUTE
, (0x7000 | (0x04 << 8))}, /*CD*/
996 /* {0x24, AC_VERB_SET_AMP_GAIN_MUTE, (0x7000 | (0x06 << 8))}, */
997 {0x24, AC_VERB_SET_AMP_GAIN_MUTE
, (0x7000 | (0x07 << 8))}, /*HP*/
999 {0x23, AC_VERB_SET_AMP_GAIN_MUTE
, (0x7000 | (0x00 << 8))},
1000 {0x23, AC_VERB_SET_AMP_GAIN_MUTE
, (0x7000 | (0x01 << 8))},
1001 {0x23, AC_VERB_SET_AMP_GAIN_MUTE
, (0x7000 | (0x02 << 8))},
1002 {0x23, AC_VERB_SET_AMP_GAIN_MUTE
, (0x7000 | (0x03 << 8))},
1003 {0x23, AC_VERB_SET_AMP_GAIN_MUTE
, (0x7000 | (0x04 << 8))},
1004 /* {0x23, AC_VERB_SET_AMP_GAIN_MUTE, (0x7000 | (0x06 << 8))}, */
1005 {0x23, AC_VERB_SET_AMP_GAIN_MUTE
, (0x7000 | (0x07 << 8))},
1007 {0x22, AC_VERB_SET_AMP_GAIN_MUTE
, (0x7000 | (0x00 << 8))},
1008 {0x22, AC_VERB_SET_AMP_GAIN_MUTE
, (0x7000 | (0x01 << 8))},
1009 {0x22, AC_VERB_SET_AMP_GAIN_MUTE
, (0x7000 | (0x02 << 8))},
1010 {0x22, AC_VERB_SET_AMP_GAIN_MUTE
, (0x7000 | (0x03 << 8))},
1011 {0x22, AC_VERB_SET_AMP_GAIN_MUTE
, (0x7000 | (0x04 << 8))},
1012 /* {0x22, AC_VERB_SET_AMP_GAIN_MUTE, (0x7000 | (0x06 << 8))}, */
1013 {0x22, AC_VERB_SET_AMP_GAIN_MUTE
, (0x7000 | (0x07 << 8))},
1015 {0x15, AC_VERB_SET_UNSOLICITED_ENABLE
, ALC_HP_EVENT
| AC_USRSP_EN
},
1020 static const struct hda_verb alc262_toshiba_rx1_unsol_verbs
[] = {
1022 {0x14, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_OUT
}, /* Front Speaker */
1023 {0x14, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
},
1024 {0x14, AC_VERB_SET_CONNECT_SEL
, 0x01},
1026 {0x18, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_VREF80
}, /* MIC jack */
1027 {0x19, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_VREF80
}, /* Front MIC */
1028 {0x18, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(0) },
1029 {0x19, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(0) },
1031 {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_HP
}, /* HP jack */
1032 {0x15, AC_VERB_SET_CONNECT_SEL
, 0x00},
1033 {0x15, AC_VERB_SET_UNSOLICITED_ENABLE
, AC_USRSP_EN
| ALC_HP_EVENT
},
1038 * configuration and preset
1040 static const char * const alc262_models
[ALC262_MODEL_LAST
] = {
1041 [ALC262_BASIC
] = "basic",
1042 [ALC262_HIPPO
] = "hippo",
1043 [ALC262_HIPPO_1
] = "hippo_1",
1044 [ALC262_FUJITSU
] = "fujitsu",
1045 [ALC262_HP_BPC
] = "hp-bpc",
1046 [ALC262_HP_BPC_D7000_WL
]= "hp-bpc-d7000",
1047 [ALC262_HP_TC_T5735
] = "hp-tc-t5735",
1048 [ALC262_HP_RP5700
] = "hp-rp5700",
1049 [ALC262_BENQ_ED8
] = "benq",
1050 [ALC262_BENQ_T31
] = "benq-t31",
1051 [ALC262_SONY_ASSAMD
] = "sony-assamd",
1052 [ALC262_TOSHIBA_S06
] = "toshiba-s06",
1053 [ALC262_TOSHIBA_RX1
] = "toshiba-rx1",
1054 [ALC262_ULTRA
] = "ultra",
1055 [ALC262_LENOVO_3000
] = "lenovo-3000",
1056 [ALC262_NEC
] = "nec",
1057 [ALC262_TYAN
] = "tyan",
1058 [ALC262_AUTO
] = "auto",
1061 static const struct snd_pci_quirk alc262_cfg_tbl
[] = {
1062 SND_PCI_QUIRK(0x1002, 0x437b, "Hippo", ALC262_HIPPO
),
1063 SND_PCI_QUIRK(0x1033, 0x8895, "NEC Versa S9100", ALC262_NEC
),
1064 SND_PCI_QUIRK_MASK(0x103c, 0xff00, 0x1200, "HP xw series",
1066 SND_PCI_QUIRK_MASK(0x103c, 0xff00, 0x1300, "HP xw series",
1068 SND_PCI_QUIRK_MASK(0x103c, 0xff00, 0x1500, "HP z series",
1070 SND_PCI_QUIRK(0x103c, 0x170b, "HP Z200",
1072 SND_PCI_QUIRK_MASK(0x103c, 0xff00, 0x1700, "HP xw series",
1074 SND_PCI_QUIRK(0x103c, 0x2800, "HP D7000", ALC262_HP_BPC_D7000_WL
),
1075 SND_PCI_QUIRK(0x103c, 0x2801, "HP D7000", ALC262_HP_BPC_D7000_WF
),
1076 SND_PCI_QUIRK(0x103c, 0x2802, "HP D7000", ALC262_HP_BPC_D7000_WL
),
1077 SND_PCI_QUIRK(0x103c, 0x2803, "HP D7000", ALC262_HP_BPC_D7000_WF
),
1078 SND_PCI_QUIRK(0x103c, 0x2804, "HP D7000", ALC262_HP_BPC_D7000_WL
),
1079 SND_PCI_QUIRK(0x103c, 0x2805, "HP D7000", ALC262_HP_BPC_D7000_WF
),
1080 SND_PCI_QUIRK(0x103c, 0x2806, "HP D7000", ALC262_HP_BPC_D7000_WL
),
1081 SND_PCI_QUIRK(0x103c, 0x2807, "HP D7000", ALC262_HP_BPC_D7000_WF
),
1082 SND_PCI_QUIRK(0x103c, 0x280c, "HP xw4400", ALC262_HP_BPC
),
1083 SND_PCI_QUIRK(0x103c, 0x3014, "HP xw6400", ALC262_HP_BPC
),
1084 SND_PCI_QUIRK(0x103c, 0x3015, "HP xw8400", ALC262_HP_BPC
),
1085 SND_PCI_QUIRK(0x103c, 0x302f, "HP Thin Client T5735",
1086 ALC262_HP_TC_T5735
),
1087 SND_PCI_QUIRK(0x103c, 0x2817, "HP RP5700", ALC262_HP_RP5700
),
1088 SND_PCI_QUIRK(0x104d, 0x1f00, "Sony ASSAMD", ALC262_SONY_ASSAMD
),
1089 SND_PCI_QUIRK(0x104d, 0x8203, "Sony UX-90", ALC262_HIPPO
),
1090 SND_PCI_QUIRK(0x104d, 0x820f, "Sony ASSAMD", ALC262_SONY_ASSAMD
),
1091 SND_PCI_QUIRK(0x104d, 0x9016, "Sony VAIO", ALC262_AUTO
), /* dig-only */
1092 SND_PCI_QUIRK(0x104d, 0x9025, "Sony VAIO Z21MN", ALC262_TOSHIBA_S06
),
1093 SND_PCI_QUIRK(0x104d, 0x9035, "Sony VAIO VGN-FW170J", ALC262_AUTO
),
1094 SND_PCI_QUIRK(0x104d, 0x9047, "Sony VAIO Type G", ALC262_AUTO
),
1095 #if 0 /* disable the quirk since model=auto works better in recent versions */
1096 SND_PCI_QUIRK_MASK(0x104d, 0xff00, 0x9000, "Sony VAIO",
1097 ALC262_SONY_ASSAMD
),
1099 SND_PCI_QUIRK(0x1179, 0x0001, "Toshiba dynabook SS RX1",
1100 ALC262_TOSHIBA_RX1
),
1101 SND_PCI_QUIRK(0x1179, 0xff7b, "Toshiba S06", ALC262_TOSHIBA_S06
),
1102 SND_PCI_QUIRK(0x10cf, 0x1397, "Fujitsu", ALC262_FUJITSU
),
1103 SND_PCI_QUIRK(0x10cf, 0x142d, "Fujitsu Lifebook E8410", ALC262_FUJITSU
),
1104 SND_PCI_QUIRK(0x10f1, 0x2915, "Tyan Thunder n6650W", ALC262_TYAN
),
1105 SND_PCI_QUIRK_MASK(0x144d, 0xff00, 0xc032, "Samsung Q1",
1107 SND_PCI_QUIRK(0x144d, 0xc510, "Samsung Q45", ALC262_HIPPO
),
1108 SND_PCI_QUIRK(0x17aa, 0x384e, "Lenovo 3000 y410", ALC262_LENOVO_3000
),
1109 SND_PCI_QUIRK(0x17ff, 0x0560, "Benq ED8", ALC262_BENQ_ED8
),
1110 SND_PCI_QUIRK(0x17ff, 0x058d, "Benq T31-16", ALC262_BENQ_T31
),
1111 SND_PCI_QUIRK(0x17ff, 0x058f, "Benq Hippo", ALC262_HIPPO_1
),
1115 static const struct alc_config_preset alc262_presets
[] = {
1117 .mixers
= { alc262_base_mixer
},
1118 .init_verbs
= { alc262_init_verbs
},
1119 .num_dacs
= ARRAY_SIZE(alc262_dac_nids
),
1120 .dac_nids
= alc262_dac_nids
,
1122 .num_channel_mode
= ARRAY_SIZE(alc262_modes
),
1123 .channel_mode
= alc262_modes
,
1124 .input_mux
= &alc262_capture_source
,
1127 .mixers
= { alc262_hippo_mixer
},
1128 .init_verbs
= { alc262_init_verbs
, alc_hp15_unsol_verbs
},
1129 .num_dacs
= ARRAY_SIZE(alc262_dac_nids
),
1130 .dac_nids
= alc262_dac_nids
,
1132 .dig_out_nid
= ALC262_DIGOUT_NID
,
1133 .num_channel_mode
= ARRAY_SIZE(alc262_modes
),
1134 .channel_mode
= alc262_modes
,
1135 .input_mux
= &alc262_capture_source
,
1136 .unsol_event
= alc_sku_unsol_event
,
1137 .setup
= alc262_hippo_setup
,
1138 .init_hook
= alc_inithook
,
1140 [ALC262_HIPPO_1
] = {
1141 .mixers
= { alc262_hippo1_mixer
},
1142 .init_verbs
= { alc262_init_verbs
, alc262_hippo1_unsol_verbs
},
1143 .num_dacs
= ARRAY_SIZE(alc262_dac_nids
),
1144 .dac_nids
= alc262_dac_nids
,
1146 .dig_out_nid
= ALC262_DIGOUT_NID
,
1147 .num_channel_mode
= ARRAY_SIZE(alc262_modes
),
1148 .channel_mode
= alc262_modes
,
1149 .input_mux
= &alc262_capture_source
,
1150 .unsol_event
= alc_sku_unsol_event
,
1151 .setup
= alc262_hippo1_setup
,
1152 .init_hook
= alc_inithook
,
1154 [ALC262_FUJITSU
] = {
1155 .mixers
= { alc262_fujitsu_mixer
},
1156 .init_verbs
= { alc262_init_verbs
, alc262_EAPD_verbs
,
1157 alc262_fujitsu_unsol_verbs
},
1158 .num_dacs
= ARRAY_SIZE(alc262_dac_nids
),
1159 .dac_nids
= alc262_dac_nids
,
1161 .dig_out_nid
= ALC262_DIGOUT_NID
,
1162 .num_channel_mode
= ARRAY_SIZE(alc262_modes
),
1163 .channel_mode
= alc262_modes
,
1164 .input_mux
= &alc262_fujitsu_capture_source
,
1165 .unsol_event
= alc_sku_unsol_event
,
1166 .setup
= alc262_fujitsu_setup
,
1167 .init_hook
= alc_inithook
,
1170 .mixers
= { alc262_HP_BPC_mixer
},
1171 .init_verbs
= { alc262_HP_BPC_init_verbs
},
1172 .num_dacs
= ARRAY_SIZE(alc262_dac_nids
),
1173 .dac_nids
= alc262_dac_nids
,
1175 .num_channel_mode
= ARRAY_SIZE(alc262_modes
),
1176 .channel_mode
= alc262_modes
,
1177 .input_mux
= &alc262_HP_capture_source
,
1178 .unsol_event
= alc_sku_unsol_event
,
1179 .setup
= alc262_hp_bpc_setup
,
1180 .init_hook
= alc_inithook
,
1182 [ALC262_HP_BPC_D7000_WF
] = {
1183 .mixers
= { alc262_HP_BPC_WildWest_mixer
},
1184 .init_verbs
= { alc262_HP_BPC_WildWest_init_verbs
},
1185 .num_dacs
= ARRAY_SIZE(alc262_dac_nids
),
1186 .dac_nids
= alc262_dac_nids
,
1188 .num_channel_mode
= ARRAY_SIZE(alc262_modes
),
1189 .channel_mode
= alc262_modes
,
1190 .input_mux
= &alc262_HP_D7000_capture_source
,
1191 .unsol_event
= alc_sku_unsol_event
,
1192 .setup
= alc262_hp_wildwest_setup
,
1193 .init_hook
= alc_inithook
,
1195 [ALC262_HP_BPC_D7000_WL
] = {
1196 .mixers
= { alc262_HP_BPC_WildWest_mixer
,
1197 alc262_HP_BPC_WildWest_option_mixer
},
1198 .init_verbs
= { alc262_HP_BPC_WildWest_init_verbs
},
1199 .num_dacs
= ARRAY_SIZE(alc262_dac_nids
),
1200 .dac_nids
= alc262_dac_nids
,
1202 .num_channel_mode
= ARRAY_SIZE(alc262_modes
),
1203 .channel_mode
= alc262_modes
,
1204 .input_mux
= &alc262_HP_D7000_capture_source
,
1205 .unsol_event
= alc_sku_unsol_event
,
1206 .setup
= alc262_hp_wildwest_setup
,
1207 .init_hook
= alc_inithook
,
1209 [ALC262_HP_TC_T5735
] = {
1210 .mixers
= { alc262_hp_t5735_mixer
},
1211 .init_verbs
= { alc262_init_verbs
, alc262_hp_t5735_verbs
},
1212 .num_dacs
= ARRAY_SIZE(alc262_dac_nids
),
1213 .dac_nids
= alc262_dac_nids
,
1215 .num_channel_mode
= ARRAY_SIZE(alc262_modes
),
1216 .channel_mode
= alc262_modes
,
1217 .input_mux
= &alc262_capture_source
,
1218 .unsol_event
= alc_sku_unsol_event
,
1219 .setup
= alc262_hp_t5735_setup
,
1220 .init_hook
= alc_inithook
,
1222 [ALC262_HP_RP5700
] = {
1223 .mixers
= { alc262_hp_rp5700_mixer
},
1224 .init_verbs
= { alc262_init_verbs
, alc262_hp_rp5700_verbs
},
1225 .num_dacs
= ARRAY_SIZE(alc262_dac_nids
),
1226 .dac_nids
= alc262_dac_nids
,
1227 .num_channel_mode
= ARRAY_SIZE(alc262_modes
),
1228 .channel_mode
= alc262_modes
,
1229 .input_mux
= &alc262_hp_rp5700_capture_source
,
1231 [ALC262_BENQ_ED8
] = {
1232 .mixers
= { alc262_base_mixer
},
1233 .init_verbs
= { alc262_init_verbs
, alc262_EAPD_verbs
},
1234 .num_dacs
= ARRAY_SIZE(alc262_dac_nids
),
1235 .dac_nids
= alc262_dac_nids
,
1237 .num_channel_mode
= ARRAY_SIZE(alc262_modes
),
1238 .channel_mode
= alc262_modes
,
1239 .input_mux
= &alc262_capture_source
,
1241 [ALC262_SONY_ASSAMD
] = {
1242 .mixers
= { alc262_sony_mixer
},
1243 .init_verbs
= { alc262_init_verbs
, alc262_sony_unsol_verbs
},
1244 .num_dacs
= ARRAY_SIZE(alc262_dac_nids
),
1245 .dac_nids
= alc262_dac_nids
,
1247 .num_channel_mode
= ARRAY_SIZE(alc262_modes
),
1248 .channel_mode
= alc262_modes
,
1249 .input_mux
= &alc262_capture_source
,
1250 .unsol_event
= alc_sku_unsol_event
,
1251 .setup
= alc262_hippo_setup
,
1252 .init_hook
= alc_inithook
,
1254 [ALC262_BENQ_T31
] = {
1255 .mixers
= { alc262_benq_t31_mixer
},
1256 .init_verbs
= { alc262_init_verbs
, alc262_benq_t31_EAPD_verbs
,
1257 alc_hp15_unsol_verbs
},
1258 .num_dacs
= ARRAY_SIZE(alc262_dac_nids
),
1259 .dac_nids
= alc262_dac_nids
,
1261 .num_channel_mode
= ARRAY_SIZE(alc262_modes
),
1262 .channel_mode
= alc262_modes
,
1263 .input_mux
= &alc262_capture_source
,
1264 .unsol_event
= alc_sku_unsol_event
,
1265 .setup
= alc262_hippo_setup
,
1266 .init_hook
= alc_inithook
,
1269 .mixers
= { alc262_ultra_mixer
},
1270 .cap_mixer
= alc262_ultra_capture_mixer
,
1271 .init_verbs
= { alc262_ultra_verbs
},
1272 .num_dacs
= ARRAY_SIZE(alc262_dac_nids
),
1273 .dac_nids
= alc262_dac_nids
,
1274 .num_channel_mode
= ARRAY_SIZE(alc262_modes
),
1275 .channel_mode
= alc262_modes
,
1276 .input_mux
= &alc262_ultra_capture_source
,
1277 .adc_nids
= alc262_adc_nids
, /* ADC0 */
1278 .capsrc_nids
= alc262_capsrc_nids
,
1279 .num_adc_nids
= 1, /* single ADC */
1280 .unsol_event
= alc262_ultra_unsol_event
,
1281 .init_hook
= alc262_ultra_automute
,
1283 [ALC262_LENOVO_3000
] = {
1284 .mixers
= { alc262_lenovo_3000_mixer
},
1285 .init_verbs
= { alc262_init_verbs
, alc262_EAPD_verbs
,
1286 alc262_lenovo_3000_unsol_verbs
,
1287 alc262_lenovo_3000_init_verbs
},
1288 .num_dacs
= ARRAY_SIZE(alc262_dac_nids
),
1289 .dac_nids
= alc262_dac_nids
,
1291 .dig_out_nid
= ALC262_DIGOUT_NID
,
1292 .num_channel_mode
= ARRAY_SIZE(alc262_modes
),
1293 .channel_mode
= alc262_modes
,
1294 .input_mux
= &alc262_fujitsu_capture_source
,
1295 .unsol_event
= alc_sku_unsol_event
,
1296 .setup
= alc262_lenovo_3000_setup
,
1297 .init_hook
= alc_inithook
,
1300 .mixers
= { alc262_nec_mixer
},
1301 .init_verbs
= { alc262_nec_verbs
},
1302 .num_dacs
= ARRAY_SIZE(alc262_dac_nids
),
1303 .dac_nids
= alc262_dac_nids
,
1305 .num_channel_mode
= ARRAY_SIZE(alc262_modes
),
1306 .channel_mode
= alc262_modes
,
1307 .input_mux
= &alc262_capture_source
,
1309 [ALC262_TOSHIBA_S06
] = {
1310 .mixers
= { alc262_toshiba_s06_mixer
},
1311 .init_verbs
= { alc262_init_verbs
, alc262_toshiba_s06_verbs
,
1312 alc262_eapd_verbs
},
1313 .num_dacs
= ARRAY_SIZE(alc262_dac_nids
),
1314 .capsrc_nids
= alc262_dmic_capsrc_nids
,
1315 .dac_nids
= alc262_dac_nids
,
1316 .adc_nids
= alc262_dmic_adc_nids
, /* ADC0 */
1317 .num_adc_nids
= 1, /* single ADC */
1318 .dig_out_nid
= ALC262_DIGOUT_NID
,
1319 .num_channel_mode
= ARRAY_SIZE(alc262_modes
),
1320 .channel_mode
= alc262_modes
,
1321 .unsol_event
= alc_sku_unsol_event
,
1322 .setup
= alc262_toshiba_s06_setup
,
1323 .init_hook
= alc_inithook
,
1325 [ALC262_TOSHIBA_RX1
] = {
1326 .mixers
= { alc262_toshiba_rx1_mixer
},
1327 .init_verbs
= { alc262_init_verbs
, alc262_toshiba_rx1_unsol_verbs
},
1328 .num_dacs
= ARRAY_SIZE(alc262_dac_nids
),
1329 .dac_nids
= alc262_dac_nids
,
1331 .num_channel_mode
= ARRAY_SIZE(alc262_modes
),
1332 .channel_mode
= alc262_modes
,
1333 .input_mux
= &alc262_capture_source
,
1334 .unsol_event
= alc_sku_unsol_event
,
1335 .setup
= alc262_hippo_setup
,
1336 .init_hook
= alc_inithook
,
1339 .mixers
= { alc262_tyan_mixer
},
1340 .init_verbs
= { alc262_init_verbs
, alc262_tyan_verbs
},
1341 .num_dacs
= ARRAY_SIZE(alc262_dac_nids
),
1342 .dac_nids
= alc262_dac_nids
,
1344 .dig_out_nid
= ALC262_DIGOUT_NID
,
1345 .num_channel_mode
= ARRAY_SIZE(alc262_modes
),
1346 .channel_mode
= alc262_modes
,
1347 .input_mux
= &alc262_capture_source
,
1348 .unsol_event
= alc_sku_unsol_event
,
1349 .setup
= alc262_tyan_setup
,
1350 .init_hook
= alc_hp_automute
,