1 /* 2 * Universal Interface for Intel High Definition Audio Codec 3 * 4 * HD audio interface patch for Realtek ALC codecs 5 * 6 * Copyright (c) 2004 Kailang Yang <kailang@realtek.com.tw> 7 * PeiSen Hou <pshou@realtek.com.tw> 8 * Takashi Iwai <tiwai@suse.de> 9 * Jonathan Woithe <jwoithe@physics.adelaide.edu.au> 10 * 11 * This driver is free software; you can redistribute it and/or modify 12 * it under the terms of the GNU General Public License as published by 13 * the Free Software Foundation; either version 2 of the License, or 14 * (at your option) any later version. 15 * 16 * This driver is distributed in the hope that it will be useful, 17 * but WITHOUT ANY WARRANTY; without even the implied warranty of 18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 19 * GNU General Public License for more details. 20 * 21 * You should have received a copy of the GNU General Public License 22 * along with this program; if not, write to the Free Software 23 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 24 */ 25 26 #include <linux/init.h> 27 #include <linux/delay.h> 28 #include <linux/slab.h> 29 #include <linux/pci.h> 30 #include <sound/core.h> 31 #include <sound/jack.h> 32 #include "hda_codec.h" 33 #include "hda_local.h" 34 #include "hda_beep.h" 35 36 /* unsol event tags */ 37 #define ALC_FRONT_EVENT 0x01 38 #define ALC_DCVOL_EVENT 0x02 39 #define ALC_HP_EVENT 0x04 40 #define ALC_MIC_EVENT 0x08 41 42 /* for GPIO Poll */ 43 #define GPIO_MASK 0x03 44 45 /* extra amp-initialization sequence types */ 46 enum { 47 ALC_INIT_NONE, 48 ALC_INIT_DEFAULT, 49 ALC_INIT_GPIO1, 50 ALC_INIT_GPIO2, 51 ALC_INIT_GPIO3, 52 }; 53 54 struct alc_customize_define { 55 unsigned int sku_cfg; 56 unsigned char port_connectivity; 57 unsigned char check_sum; 58 unsigned char customization; 59 unsigned char external_amp; 60 unsigned int enable_pcbeep:1; 61 unsigned int platform_type:1; 62 unsigned int swap:1; 63 unsigned int override:1; 64 unsigned int fixup:1; /* Means that this sku is set by driver, not read from hw */ 65 }; 66 67 struct alc_fixup; 68 69 struct alc_multi_io { 70 hda_nid_t pin; /* multi-io widget pin NID */ 71 hda_nid_t dac; /* DAC to be connected */ 72 unsigned int ctl_in; /* cached input-pin control value */ 73 }; 74 75 enum { 76 ALC_AUTOMUTE_PIN, /* change the pin control */ 77 ALC_AUTOMUTE_AMP, /* mute/unmute the pin AMP */ 78 ALC_AUTOMUTE_MIXER, /* mute/unmute mixer widget AMP */ 79 }; 80 81 struct alc_spec { 82 /* codec parameterization */ 83 const struct snd_kcontrol_new *mixers[5]; /* mixer arrays */ 84 unsigned int num_mixers; 85 const struct snd_kcontrol_new *cap_mixer; /* capture mixer */ 86 unsigned int beep_amp; /* beep amp value, set via set_beep_amp() */ 87 88 const struct hda_verb *init_verbs[10]; /* initialization verbs 89 * don't forget NULL 90 * termination! 91 */ 92 unsigned int num_init_verbs; 93 94 char stream_name_analog[32]; /* analog PCM stream */ 95 const struct hda_pcm_stream *stream_analog_playback; 96 const struct hda_pcm_stream *stream_analog_capture; 97 const struct hda_pcm_stream *stream_analog_alt_playback; 98 const struct hda_pcm_stream *stream_analog_alt_capture; 99 100 char stream_name_digital[32]; /* digital PCM stream */ 101 const struct hda_pcm_stream *stream_digital_playback; 102 const struct hda_pcm_stream *stream_digital_capture; 103 104 /* playback */ 105 struct hda_multi_out multiout; /* playback set-up 106 * max_channels, dacs must be set 107 * dig_out_nid and hp_nid are optional 108 */ 109 hda_nid_t alt_dac_nid; 110 hda_nid_t slave_dig_outs[3]; /* optional - for auto-parsing */ 111 int dig_out_type; 112 113 /* capture */ 114 unsigned int num_adc_nids; 115 const hda_nid_t *adc_nids; 116 const hda_nid_t *capsrc_nids; 117 hda_nid_t dig_in_nid; /* digital-in NID; optional */ 118 hda_nid_t mixer_nid; /* analog-mixer NID */ 119 120 /* capture setup for dynamic dual-adc switch */ 121 hda_nid_t cur_adc; 122 unsigned int cur_adc_stream_tag; 123 unsigned int cur_adc_format; 124 125 /* capture source */ 126 unsigned int num_mux_defs; 127 const struct hda_input_mux *input_mux; 128 unsigned int cur_mux[3]; 129 hda_nid_t ext_mic_pin; 130 hda_nid_t dock_mic_pin; 131 hda_nid_t int_mic_pin; 132 133 /* channel model */ 134 const struct hda_channel_mode *channel_mode; 135 int num_channel_mode; 136 int need_dac_fix; 137 int const_channel_count; 138 int ext_channel_count; 139 140 /* PCM information */ 141 struct hda_pcm pcm_rec[3]; /* used in alc_build_pcms() */ 142 143 /* dynamic controls, init_verbs and input_mux */ 144 struct auto_pin_cfg autocfg; 145 struct alc_customize_define cdefine; 146 struct snd_array kctls; 147 struct hda_input_mux private_imux[3]; 148 hda_nid_t private_dac_nids[AUTO_CFG_MAX_OUTS]; 149 hda_nid_t private_adc_nids[AUTO_CFG_MAX_OUTS]; 150 hda_nid_t private_capsrc_nids[AUTO_CFG_MAX_OUTS]; 151 hda_nid_t imux_pins[HDA_MAX_NUM_INPUTS]; 152 unsigned int dyn_adc_idx[HDA_MAX_NUM_INPUTS]; 153 int int_mic_idx, ext_mic_idx, dock_mic_idx; /* for auto-mic */ 154 155 /* hooks */ 156 void (*init_hook)(struct hda_codec *codec); 157 void (*unsol_event)(struct hda_codec *codec, unsigned int res); 158 #ifdef CONFIG_SND_HDA_POWER_SAVE 159 void (*power_hook)(struct hda_codec *codec); 160 #endif 161 void (*shutup)(struct hda_codec *codec); 162 163 /* for pin sensing */ 164 unsigned int jack_present: 1; 165 unsigned int line_jack_present:1; 166 unsigned int master_mute:1; 167 unsigned int auto_mic:1; 168 unsigned int auto_mic_valid_imux:1; /* valid imux for auto-mic */ 169 unsigned int automute:1; /* HP automute enabled */ 170 unsigned int detect_line:1; /* Line-out detection enabled */ 171 unsigned int automute_lines:1; /* automute line-out as well; NOP when automute_hp_lo isn't set */ 172 unsigned int automute_hp_lo:1; /* both HP and LO available */ 173 174 /* other flags */ 175 unsigned int no_analog :1; /* digital I/O only */ 176 unsigned int dyn_adc_switch:1; /* switch ADCs (for ALC275) */ 177 unsigned int single_input_src:1; 178 unsigned int vol_in_capsrc:1; /* use capsrc volume (ADC has no vol) */ 179 180 /* auto-mute control */ 181 int automute_mode; 182 hda_nid_t automute_mixer_nid[AUTO_CFG_MAX_OUTS]; 183 184 int init_amp; 185 int codec_variant; /* flag for other variants */ 186 187 /* for virtual master */ 188 hda_nid_t vmaster_nid; 189 #ifdef CONFIG_SND_HDA_POWER_SAVE 190 struct hda_loopback_check loopback; 191 #endif 192 193 /* for PLL fix */ 194 hda_nid_t pll_nid; 195 unsigned int pll_coef_idx, pll_coef_bit; 196 197 /* fix-up list */ 198 int fixup_id; 199 const struct alc_fixup *fixup_list; 200 const char *fixup_name; 201 202 /* multi-io */ 203 int multi_ios; 204 struct alc_multi_io multi_io[4]; 205 }; 206 207 #define ALC_MODEL_AUTO 0 /* common for all chips */ 208 209 static bool check_amp_caps(struct hda_codec *codec, hda_nid_t nid, 210 int dir, unsigned int bits) 211 { 212 if (!nid) 213 return false; 214 if (get_wcaps(codec, nid) & (1 << (dir + 1))) 215 if (query_amp_caps(codec, nid, dir) & bits) 216 return true; 217 return false; 218 } 219 220 #define nid_has_mute(codec, nid, dir) \ 221 check_amp_caps(codec, nid, dir, AC_AMPCAP_MUTE) 222 #define nid_has_volume(codec, nid, dir) \ 223 check_amp_caps(codec, nid, dir, AC_AMPCAP_NUM_STEPS) 224 225 /* 226 * input MUX handling 227 */ 228 static int alc_mux_enum_info(struct snd_kcontrol *kcontrol, 229 struct snd_ctl_elem_info *uinfo) 230 { 231 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 232 struct alc_spec *spec = codec->spec; 233 unsigned int mux_idx = snd_ctl_get_ioffidx(kcontrol, &uinfo->id); 234 if (mux_idx >= spec->num_mux_defs) 235 mux_idx = 0; 236 if (!spec->input_mux[mux_idx].num_items && mux_idx > 0) 237 mux_idx = 0; 238 return snd_hda_input_mux_info(&spec->input_mux[mux_idx], uinfo); 239 } 240 241 static int alc_mux_enum_get(struct snd_kcontrol *kcontrol, 242 struct snd_ctl_elem_value *ucontrol) 243 { 244 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 245 struct alc_spec *spec = codec->spec; 246 unsigned int adc_idx = snd_ctl_get_ioffidx(kcontrol, &ucontrol->id); 247 248 ucontrol->value.enumerated.item[0] = spec->cur_mux[adc_idx]; 249 return 0; 250 } 251 252 static bool alc_dyn_adc_pcm_resetup(struct hda_codec *codec, int cur) 253 { 254 struct alc_spec *spec = codec->spec; 255 hda_nid_t new_adc = spec->adc_nids[spec->dyn_adc_idx[cur]]; 256 257 if (spec->cur_adc && spec->cur_adc != new_adc) { 258 /* stream is running, let's swap the current ADC */ 259 __snd_hda_codec_cleanup_stream(codec, spec->cur_adc, 1); 260 spec->cur_adc = new_adc; 261 snd_hda_codec_setup_stream(codec, new_adc, 262 spec->cur_adc_stream_tag, 0, 263 spec->cur_adc_format); 264 return true; 265 } 266 return false; 267 } 268 269 /* select the given imux item; either unmute exclusively or select the route */ 270 static int alc_mux_select(struct hda_codec *codec, unsigned int adc_idx, 271 unsigned int idx, bool force) 272 { 273 struct alc_spec *spec = codec->spec; 274 const struct hda_input_mux *imux; 275 unsigned int mux_idx; 276 int i, type; 277 hda_nid_t nid; 278 279 mux_idx = adc_idx >= spec->num_mux_defs ? 0 : adc_idx; 280 imux = &spec->input_mux[mux_idx]; 281 if (!imux->num_items && mux_idx > 0) 282 imux = &spec->input_mux[0]; 283 284 if (idx >= imux->num_items) 285 idx = imux->num_items - 1; 286 if (spec->cur_mux[adc_idx] == idx && !force) 287 return 0; 288 spec->cur_mux[adc_idx] = idx; 289 290 if (spec->dyn_adc_switch) { 291 alc_dyn_adc_pcm_resetup(codec, idx); 292 adc_idx = spec->dyn_adc_idx[idx]; 293 } 294 295 nid = spec->capsrc_nids ? 296 spec->capsrc_nids[adc_idx] : spec->adc_nids[adc_idx]; 297 298 /* no selection? */ 299 if (snd_hda_get_conn_list(codec, nid, NULL) <= 1) 300 return 1; 301 302 type = get_wcaps_type(get_wcaps(codec, nid)); 303 if (type == AC_WID_AUD_MIX) { 304 /* Matrix-mixer style (e.g. ALC882) */ 305 for (i = 0; i < imux->num_items; i++) { 306 unsigned int v = (i == idx) ? 0 : HDA_AMP_MUTE; 307 snd_hda_codec_amp_stereo(codec, nid, HDA_INPUT, 308 imux->items[i].index, 309 HDA_AMP_MUTE, v); 310 } 311 } else { 312 /* MUX style (e.g. ALC880) */ 313 snd_hda_codec_write_cache(codec, nid, 0, 314 AC_VERB_SET_CONNECT_SEL, 315 imux->items[idx].index); 316 } 317 return 1; 318 } 319 320 static int alc_mux_enum_put(struct snd_kcontrol *kcontrol, 321 struct snd_ctl_elem_value *ucontrol) 322 { 323 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 324 unsigned int adc_idx = snd_ctl_get_ioffidx(kcontrol, &ucontrol->id); 325 return alc_mux_select(codec, adc_idx, 326 ucontrol->value.enumerated.item[0], false); 327 } 328 329 /* 330 * set up the input pin config (depending on the given auto-pin type) 331 */ 332 static void alc_set_input_pin(struct hda_codec *codec, hda_nid_t nid, 333 int auto_pin_type) 334 { 335 unsigned int val = PIN_IN; 336 337 if (auto_pin_type == AUTO_PIN_MIC) { 338 unsigned int pincap; 339 unsigned int oldval; 340 oldval = snd_hda_codec_read(codec, nid, 0, 341 AC_VERB_GET_PIN_WIDGET_CONTROL, 0); 342 pincap = snd_hda_query_pin_caps(codec, nid); 343 pincap = (pincap & AC_PINCAP_VREF) >> AC_PINCAP_VREF_SHIFT; 344 /* if the default pin setup is vref50, we give it priority */ 345 if ((pincap & AC_PINCAP_VREF_80) && oldval != PIN_VREF50) 346 val = PIN_VREF80; 347 else if (pincap & AC_PINCAP_VREF_50) 348 val = PIN_VREF50; 349 else if (pincap & AC_PINCAP_VREF_100) 350 val = PIN_VREF100; 351 else if (pincap & AC_PINCAP_VREF_GRD) 352 val = PIN_VREFGRD; 353 } 354 snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_PIN_WIDGET_CONTROL, val); 355 } 356 357 /* 358 * Append the given mixer and verb elements for the later use 359 * The mixer array is referred in build_controls(), and init_verbs are 360 * called in init(). 361 */ 362 static void add_mixer(struct alc_spec *spec, const struct snd_kcontrol_new *mix) 363 { 364 if (snd_BUG_ON(spec->num_mixers >= ARRAY_SIZE(spec->mixers))) 365 return; 366 spec->mixers[spec->num_mixers++] = mix; 367 } 368 369 static void add_verb(struct alc_spec *spec, const struct hda_verb *verb) 370 { 371 if (snd_BUG_ON(spec->num_init_verbs >= ARRAY_SIZE(spec->init_verbs))) 372 return; 373 spec->init_verbs[spec->num_init_verbs++] = verb; 374 } 375 376 /* 377 * GPIO setup tables, used in initialization 378 */ 379 /* Enable GPIO mask and set output */ 380 static const struct hda_verb alc_gpio1_init_verbs[] = { 381 {0x01, AC_VERB_SET_GPIO_MASK, 0x01}, 382 {0x01, AC_VERB_SET_GPIO_DIRECTION, 0x01}, 383 {0x01, AC_VERB_SET_GPIO_DATA, 0x01}, 384 { } 385 }; 386 387 static const struct hda_verb alc_gpio2_init_verbs[] = { 388 {0x01, AC_VERB_SET_GPIO_MASK, 0x02}, 389 {0x01, AC_VERB_SET_GPIO_DIRECTION, 0x02}, 390 {0x01, AC_VERB_SET_GPIO_DATA, 0x02}, 391 { } 392 }; 393 394 static const struct hda_verb alc_gpio3_init_verbs[] = { 395 {0x01, AC_VERB_SET_GPIO_MASK, 0x03}, 396 {0x01, AC_VERB_SET_GPIO_DIRECTION, 0x03}, 397 {0x01, AC_VERB_SET_GPIO_DATA, 0x03}, 398 { } 399 }; 400 401 /* 402 * Fix hardware PLL issue 403 * On some codecs, the analog PLL gating control must be off while 404 * the default value is 1. 405 */ 406 static void alc_fix_pll(struct hda_codec *codec) 407 { 408 struct alc_spec *spec = codec->spec; 409 unsigned int val; 410 411 if (!spec->pll_nid) 412 return; 413 snd_hda_codec_write(codec, spec->pll_nid, 0, AC_VERB_SET_COEF_INDEX, 414 spec->pll_coef_idx); 415 val = snd_hda_codec_read(codec, spec->pll_nid, 0, 416 AC_VERB_GET_PROC_COEF, 0); 417 snd_hda_codec_write(codec, spec->pll_nid, 0, AC_VERB_SET_COEF_INDEX, 418 spec->pll_coef_idx); 419 snd_hda_codec_write(codec, spec->pll_nid, 0, AC_VERB_SET_PROC_COEF, 420 val & ~(1 << spec->pll_coef_bit)); 421 } 422 423 static void alc_fix_pll_init(struct hda_codec *codec, hda_nid_t nid, 424 unsigned int coef_idx, unsigned int coef_bit) 425 { 426 struct alc_spec *spec = codec->spec; 427 spec->pll_nid = nid; 428 spec->pll_coef_idx = coef_idx; 429 spec->pll_coef_bit = coef_bit; 430 alc_fix_pll(codec); 431 } 432 433 /* 434 * Jack-reporting via input-jack layer 435 */ 436 437 /* initialization of jacks; currently checks only a few known pins */ 438 static int alc_init_jacks(struct hda_codec *codec) 439 { 440 #ifdef CONFIG_SND_HDA_INPUT_JACK 441 struct alc_spec *spec = codec->spec; 442 int err; 443 unsigned int hp_nid = spec->autocfg.hp_pins[0]; 444 unsigned int mic_nid = spec->ext_mic_pin; 445 unsigned int dock_nid = spec->dock_mic_pin; 446 447 if (hp_nid) { 448 err = snd_hda_input_jack_add(codec, hp_nid, 449 SND_JACK_HEADPHONE, NULL); 450 if (err < 0) 451 return err; 452 snd_hda_input_jack_report(codec, hp_nid); 453 } 454 455 if (mic_nid) { 456 err = snd_hda_input_jack_add(codec, mic_nid, 457 SND_JACK_MICROPHONE, NULL); 458 if (err < 0) 459 return err; 460 snd_hda_input_jack_report(codec, mic_nid); 461 } 462 if (dock_nid) { 463 err = snd_hda_input_jack_add(codec, dock_nid, 464 SND_JACK_MICROPHONE, NULL); 465 if (err < 0) 466 return err; 467 snd_hda_input_jack_report(codec, dock_nid); 468 } 469 #endif /* CONFIG_SND_HDA_INPUT_JACK */ 470 return 0; 471 } 472 473 /* 474 * Jack detections for HP auto-mute and mic-switch 475 */ 476 477 /* check each pin in the given array; returns true if any of them is plugged */ 478 static bool detect_jacks(struct hda_codec *codec, int num_pins, hda_nid_t *pins) 479 { 480 int i, present = 0; 481 482 for (i = 0; i < num_pins; i++) { 483 hda_nid_t nid = pins[i]; 484 if (!nid) 485 break; 486 snd_hda_input_jack_report(codec, nid); 487 present |= snd_hda_jack_detect(codec, nid); 488 } 489 return present; 490 } 491 492 /* standard HP/line-out auto-mute helper */ 493 static void do_automute(struct hda_codec *codec, int num_pins, hda_nid_t *pins, 494 bool mute, bool hp_out) 495 { 496 struct alc_spec *spec = codec->spec; 497 unsigned int mute_bits = mute ? HDA_AMP_MUTE : 0; 498 unsigned int pin_bits = mute ? 0 : (hp_out ? PIN_HP : PIN_OUT); 499 int i; 500 501 for (i = 0; i < num_pins; i++) { 502 hda_nid_t nid = pins[i]; 503 if (!nid) 504 break; 505 switch (spec->automute_mode) { 506 case ALC_AUTOMUTE_PIN: 507 snd_hda_codec_write(codec, nid, 0, 508 AC_VERB_SET_PIN_WIDGET_CONTROL, 509 pin_bits); 510 break; 511 case ALC_AUTOMUTE_AMP: 512 snd_hda_codec_amp_stereo(codec, nid, HDA_OUTPUT, 0, 513 HDA_AMP_MUTE, mute_bits); 514 break; 515 case ALC_AUTOMUTE_MIXER: 516 nid = spec->automute_mixer_nid[i]; 517 if (!nid) 518 break; 519 snd_hda_codec_amp_stereo(codec, nid, HDA_INPUT, 0, 520 HDA_AMP_MUTE, mute_bits); 521 snd_hda_codec_amp_stereo(codec, nid, HDA_INPUT, 1, 522 HDA_AMP_MUTE, mute_bits); 523 break; 524 } 525 } 526 } 527 528 /* Toggle internal speakers muting */ 529 static void update_speakers(struct hda_codec *codec) 530 { 531 struct alc_spec *spec = codec->spec; 532 int on; 533 534 /* Control HP pins/amps depending on master_mute state; 535 * in general, HP pins/amps control should be enabled in all cases, 536 * but currently set only for master_mute, just to be safe 537 */ 538 do_automute(codec, ARRAY_SIZE(spec->autocfg.hp_pins), 539 spec->autocfg.hp_pins, spec->master_mute, true); 540 541 if (!spec->automute) 542 on = 0; 543 else 544 on = spec->jack_present | spec->line_jack_present; 545 on |= spec->master_mute; 546 do_automute(codec, ARRAY_SIZE(spec->autocfg.speaker_pins), 547 spec->autocfg.speaker_pins, on, false); 548 549 /* toggle line-out mutes if needed, too */ 550 /* if LO is a copy of either HP or Speaker, don't need to handle it */ 551 if (spec->autocfg.line_out_pins[0] == spec->autocfg.hp_pins[0] || 552 spec->autocfg.line_out_pins[0] == spec->autocfg.speaker_pins[0]) 553 return; 554 if (!spec->automute || (spec->automute_hp_lo && !spec->automute_lines)) 555 on = 0; 556 else 557 on = spec->jack_present; 558 on |= spec->master_mute; 559 do_automute(codec, ARRAY_SIZE(spec->autocfg.line_out_pins), 560 spec->autocfg.line_out_pins, on, false); 561 } 562 563 /* standard HP-automute helper */ 564 static void alc_hp_automute(struct hda_codec *codec) 565 { 566 struct alc_spec *spec = codec->spec; 567 568 spec->jack_present = 569 detect_jacks(codec, ARRAY_SIZE(spec->autocfg.hp_pins), 570 spec->autocfg.hp_pins); 571 if (!spec->automute) 572 return; 573 update_speakers(codec); 574 } 575 576 /* standard line-out-automute helper */ 577 static void alc_line_automute(struct hda_codec *codec) 578 { 579 struct alc_spec *spec = codec->spec; 580 581 spec->line_jack_present = 582 detect_jacks(codec, ARRAY_SIZE(spec->autocfg.line_out_pins), 583 spec->autocfg.line_out_pins); 584 if (!spec->automute || !spec->detect_line) 585 return; 586 update_speakers(codec); 587 } 588 589 #define get_connection_index(codec, mux, nid) \ 590 snd_hda_get_conn_index(codec, mux, nid, 0) 591 592 /* standard mic auto-switch helper */ 593 static void alc_mic_automute(struct hda_codec *codec) 594 { 595 struct alc_spec *spec = codec->spec; 596 hda_nid_t *pins = spec->imux_pins; 597 598 if (!spec->auto_mic || !spec->auto_mic_valid_imux) 599 return; 600 if (snd_BUG_ON(!spec->adc_nids)) 601 return; 602 if (snd_BUG_ON(spec->int_mic_idx < 0 || spec->ext_mic_idx < 0)) 603 return; 604 605 if (snd_hda_jack_detect(codec, pins[spec->ext_mic_idx])) 606 alc_mux_select(codec, 0, spec->ext_mic_idx, false); 607 else if (spec->dock_mic_idx >= 0 && 608 snd_hda_jack_detect(codec, pins[spec->dock_mic_idx])) 609 alc_mux_select(codec, 0, spec->dock_mic_idx, false); 610 else 611 alc_mux_select(codec, 0, spec->int_mic_idx, false); 612 613 snd_hda_input_jack_report(codec, pins[spec->ext_mic_idx]); 614 if (spec->dock_mic_idx >= 0) 615 snd_hda_input_jack_report(codec, pins[spec->dock_mic_idx]); 616 } 617 618 /* unsolicited event for HP jack sensing */ 619 static void alc_sku_unsol_event(struct hda_codec *codec, unsigned int res) 620 { 621 if (codec->vendor_id == 0x10ec0880) 622 res >>= 28; 623 else 624 res >>= 26; 625 switch (res) { 626 case ALC_HP_EVENT: 627 alc_hp_automute(codec); 628 break; 629 case ALC_FRONT_EVENT: 630 alc_line_automute(codec); 631 break; 632 case ALC_MIC_EVENT: 633 alc_mic_automute(codec); 634 break; 635 } 636 } 637 638 /* call init functions of standard auto-mute helpers */ 639 static void alc_inithook(struct hda_codec *codec) 640 { 641 alc_hp_automute(codec); 642 alc_line_automute(codec); 643 alc_mic_automute(codec); 644 } 645 646 /* additional initialization for ALC888 variants */ 647 static void alc888_coef_init(struct hda_codec *codec) 648 { 649 unsigned int tmp; 650 651 snd_hda_codec_write(codec, 0x20, 0, AC_VERB_SET_COEF_INDEX, 0); 652 tmp = snd_hda_codec_read(codec, 0x20, 0, AC_VERB_GET_PROC_COEF, 0); 653 snd_hda_codec_write(codec, 0x20, 0, AC_VERB_SET_COEF_INDEX, 7); 654 if ((tmp & 0xf0) == 0x20) 655 /* alc888S-VC */ 656 snd_hda_codec_read(codec, 0x20, 0, 657 AC_VERB_SET_PROC_COEF, 0x830); 658 else 659 /* alc888-VB */ 660 snd_hda_codec_read(codec, 0x20, 0, 661 AC_VERB_SET_PROC_COEF, 0x3030); 662 } 663 664 /* additional initialization for ALC889 variants */ 665 static void alc889_coef_init(struct hda_codec *codec) 666 { 667 unsigned int tmp; 668 669 snd_hda_codec_write(codec, 0x20, 0, AC_VERB_SET_COEF_INDEX, 7); 670 tmp = snd_hda_codec_read(codec, 0x20, 0, AC_VERB_GET_PROC_COEF, 0); 671 snd_hda_codec_write(codec, 0x20, 0, AC_VERB_SET_COEF_INDEX, 7); 672 snd_hda_codec_write(codec, 0x20, 0, AC_VERB_SET_PROC_COEF, tmp|0x2010); 673 } 674 675 /* turn on/off EAPD control (only if available) */ 676 static void set_eapd(struct hda_codec *codec, hda_nid_t nid, int on) 677 { 678 if (get_wcaps_type(get_wcaps(codec, nid)) != AC_WID_PIN) 679 return; 680 if (snd_hda_query_pin_caps(codec, nid) & AC_PINCAP_EAPD) 681 snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_EAPD_BTLENABLE, 682 on ? 2 : 0); 683 } 684 685 /* turn on/off EAPD controls of the codec */ 686 static void alc_auto_setup_eapd(struct hda_codec *codec, bool on) 687 { 688 /* We currently only handle front, HP */ 689 static hda_nid_t pins[] = { 690 0x0f, 0x10, 0x14, 0x15, 0 691 }; 692 hda_nid_t *p; 693 for (p = pins; *p; p++) 694 set_eapd(codec, *p, on); 695 } 696 697 /* generic shutup callback; 698 * just turning off EPAD and a little pause for avoiding pop-noise 699 */ 700 static void alc_eapd_shutup(struct hda_codec *codec) 701 { 702 alc_auto_setup_eapd(codec, false); 703 msleep(200); 704 } 705 706 /* generic EAPD initialization */ 707 static void alc_auto_init_amp(struct hda_codec *codec, int type) 708 { 709 unsigned int tmp; 710 711 alc_auto_setup_eapd(codec, true); 712 switch (type) { 713 case ALC_INIT_GPIO1: 714 snd_hda_sequence_write(codec, alc_gpio1_init_verbs); 715 break; 716 case ALC_INIT_GPIO2: 717 snd_hda_sequence_write(codec, alc_gpio2_init_verbs); 718 break; 719 case ALC_INIT_GPIO3: 720 snd_hda_sequence_write(codec, alc_gpio3_init_verbs); 721 break; 722 case ALC_INIT_DEFAULT: 723 switch (codec->vendor_id) { 724 case 0x10ec0260: 725 snd_hda_codec_write(codec, 0x1a, 0, 726 AC_VERB_SET_COEF_INDEX, 7); 727 tmp = snd_hda_codec_read(codec, 0x1a, 0, 728 AC_VERB_GET_PROC_COEF, 0); 729 snd_hda_codec_write(codec, 0x1a, 0, 730 AC_VERB_SET_COEF_INDEX, 7); 731 snd_hda_codec_write(codec, 0x1a, 0, 732 AC_VERB_SET_PROC_COEF, 733 tmp | 0x2010); 734 break; 735 case 0x10ec0262: 736 case 0x10ec0880: 737 case 0x10ec0882: 738 case 0x10ec0883: 739 case 0x10ec0885: 740 case 0x10ec0887: 741 /*case 0x10ec0889:*/ /* this causes an SPDIF problem */ 742 alc889_coef_init(codec); 743 break; 744 case 0x10ec0888: 745 alc888_coef_init(codec); 746 break; 747 #if 0 /* XXX: This may cause the silent output on speaker on some machines */ 748 case 0x10ec0267: 749 case 0x10ec0268: 750 snd_hda_codec_write(codec, 0x20, 0, 751 AC_VERB_SET_COEF_INDEX, 7); 752 tmp = snd_hda_codec_read(codec, 0x20, 0, 753 AC_VERB_GET_PROC_COEF, 0); 754 snd_hda_codec_write(codec, 0x20, 0, 755 AC_VERB_SET_COEF_INDEX, 7); 756 snd_hda_codec_write(codec, 0x20, 0, 757 AC_VERB_SET_PROC_COEF, 758 tmp | 0x3000); 759 break; 760 #endif /* XXX */ 761 } 762 break; 763 } 764 } 765 766 /* 767 * Auto-Mute mode mixer enum support 768 */ 769 static int alc_automute_mode_info(struct snd_kcontrol *kcontrol, 770 struct snd_ctl_elem_info *uinfo) 771 { 772 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 773 struct alc_spec *spec = codec->spec; 774 static const char * const texts2[] = { 775 "Disabled", "Enabled" 776 }; 777 static const char * const texts3[] = { 778 "Disabled", "Speaker Only", "Line-Out+Speaker" 779 }; 780 const char * const *texts; 781 782 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; 783 uinfo->count = 1; 784 if (spec->automute_hp_lo) { 785 uinfo->value.enumerated.items = 3; 786 texts = texts3; 787 } else { 788 uinfo->value.enumerated.items = 2; 789 texts = texts2; 790 } 791 if (uinfo->value.enumerated.item >= uinfo->value.enumerated.items) 792 uinfo->value.enumerated.item = uinfo->value.enumerated.items - 1; 793 strcpy(uinfo->value.enumerated.name, 794 texts[uinfo->value.enumerated.item]); 795 return 0; 796 } 797 798 static int alc_automute_mode_get(struct snd_kcontrol *kcontrol, 799 struct snd_ctl_elem_value *ucontrol) 800 { 801 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 802 struct alc_spec *spec = codec->spec; 803 unsigned int val; 804 if (!spec->automute) 805 val = 0; 806 else if (!spec->automute_hp_lo || !spec->automute_lines) 807 val = 1; 808 else 809 val = 2; 810 ucontrol->value.enumerated.item[0] = val; 811 return 0; 812 } 813 814 static int alc_automute_mode_put(struct snd_kcontrol *kcontrol, 815 struct snd_ctl_elem_value *ucontrol) 816 { 817 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 818 struct alc_spec *spec = codec->spec; 819 820 switch (ucontrol->value.enumerated.item[0]) { 821 case 0: 822 if (!spec->automute) 823 return 0; 824 spec->automute = 0; 825 break; 826 case 1: 827 if (spec->automute && 828 (!spec->automute_hp_lo || !spec->automute_lines)) 829 return 0; 830 spec->automute = 1; 831 spec->automute_lines = 0; 832 break; 833 case 2: 834 if (!spec->automute_hp_lo) 835 return -EINVAL; 836 if (spec->automute && spec->automute_lines) 837 return 0; 838 spec->automute = 1; 839 spec->automute_lines = 1; 840 break; 841 default: 842 return -EINVAL; 843 } 844 update_speakers(codec); 845 return 1; 846 } 847 848 static const struct snd_kcontrol_new alc_automute_mode_enum = { 849 .iface = SNDRV_CTL_ELEM_IFACE_MIXER, 850 .name = "Auto-Mute Mode", 851 .info = alc_automute_mode_info, 852 .get = alc_automute_mode_get, 853 .put = alc_automute_mode_put, 854 }; 855 856 static struct snd_kcontrol_new *alc_kcontrol_new(struct alc_spec *spec) 857 { 858 snd_array_init(&spec->kctls, sizeof(struct snd_kcontrol_new), 32); 859 return snd_array_new(&spec->kctls); 860 } 861 862 static int alc_add_automute_mode_enum(struct hda_codec *codec) 863 { 864 struct alc_spec *spec = codec->spec; 865 struct snd_kcontrol_new *knew; 866 867 knew = alc_kcontrol_new(spec); 868 if (!knew) 869 return -ENOMEM; 870 *knew = alc_automute_mode_enum; 871 knew->name = kstrdup("Auto-Mute Mode", GFP_KERNEL); 872 if (!knew->name) 873 return -ENOMEM; 874 return 0; 875 } 876 877 /* 878 * Check the availability of HP/line-out auto-mute; 879 * Set up appropriately if really supported 880 */ 881 static void alc_init_auto_hp(struct hda_codec *codec) 882 { 883 struct alc_spec *spec = codec->spec; 884 struct auto_pin_cfg *cfg = &spec->autocfg; 885 int present = 0; 886 int i; 887 888 if (cfg->hp_pins[0]) 889 present++; 890 if (cfg->line_out_pins[0]) 891 present++; 892 if (cfg->speaker_pins[0]) 893 present++; 894 if (present < 2) /* need two different output types */ 895 return; 896 if (present == 3) 897 spec->automute_hp_lo = 1; /* both HP and LO automute */ 898 899 if (!cfg->speaker_pins[0] && 900 cfg->line_out_type == AUTO_PIN_SPEAKER_OUT) { 901 memcpy(cfg->speaker_pins, cfg->line_out_pins, 902 sizeof(cfg->speaker_pins)); 903 cfg->speaker_outs = cfg->line_outs; 904 } 905 906 if (!cfg->hp_pins[0] && 907 cfg->line_out_type == AUTO_PIN_HP_OUT) { 908 memcpy(cfg->hp_pins, cfg->line_out_pins, 909 sizeof(cfg->hp_pins)); 910 cfg->hp_outs = cfg->line_outs; 911 } 912 913 for (i = 0; i < cfg->hp_outs; i++) { 914 hda_nid_t nid = cfg->hp_pins[i]; 915 if (!is_jack_detectable(codec, nid)) 916 continue; 917 snd_printdd("realtek: Enable HP auto-muting on NID 0x%x\n", 918 nid); 919 snd_hda_codec_write_cache(codec, nid, 0, 920 AC_VERB_SET_UNSOLICITED_ENABLE, 921 AC_USRSP_EN | ALC_HP_EVENT); 922 spec->automute = 1; 923 spec->automute_mode = ALC_AUTOMUTE_PIN; 924 } 925 if (spec->automute && cfg->line_out_pins[0] && 926 cfg->speaker_pins[0] && 927 cfg->line_out_pins[0] != cfg->hp_pins[0] && 928 cfg->line_out_pins[0] != cfg->speaker_pins[0]) { 929 for (i = 0; i < cfg->line_outs; i++) { 930 hda_nid_t nid = cfg->line_out_pins[i]; 931 if (!is_jack_detectable(codec, nid)) 932 continue; 933 snd_printdd("realtek: Enable Line-Out auto-muting " 934 "on NID 0x%x\n", nid); 935 snd_hda_codec_write_cache(codec, nid, 0, 936 AC_VERB_SET_UNSOLICITED_ENABLE, 937 AC_USRSP_EN | ALC_FRONT_EVENT); 938 spec->detect_line = 1; 939 } 940 spec->automute_lines = spec->detect_line; 941 } 942 943 if (spec->automute) { 944 /* create a control for automute mode */ 945 alc_add_automute_mode_enum(codec); 946 spec->unsol_event = alc_sku_unsol_event; 947 } 948 } 949 950 /* return the position of NID in the list, or -1 if not found */ 951 static int find_idx_in_nid_list(hda_nid_t nid, const hda_nid_t *list, int nums) 952 { 953 int i; 954 for (i = 0; i < nums; i++) 955 if (list[i] == nid) 956 return i; 957 return -1; 958 } 959 960 /* check whether dynamic ADC-switching is available */ 961 static bool alc_check_dyn_adc_switch(struct hda_codec *codec) 962 { 963 struct alc_spec *spec = codec->spec; 964 struct hda_input_mux *imux = &spec->private_imux[0]; 965 int i, n, idx; 966 hda_nid_t cap, pin; 967 968 if (imux != spec->input_mux) /* no dynamic imux? */ 969 return false; 970 971 for (n = 0; n < spec->num_adc_nids; n++) { 972 cap = spec->private_capsrc_nids[n]; 973 for (i = 0; i < imux->num_items; i++) { 974 pin = spec->imux_pins[i]; 975 if (!pin) 976 return false; 977 if (get_connection_index(codec, cap, pin) < 0) 978 break; 979 } 980 if (i >= imux->num_items) 981 return true; /* no ADC-switch is needed */ 982 } 983 984 for (i = 0; i < imux->num_items; i++) { 985 pin = spec->imux_pins[i]; 986 for (n = 0; n < spec->num_adc_nids; n++) { 987 cap = spec->private_capsrc_nids[n]; 988 idx = get_connection_index(codec, cap, pin); 989 if (idx >= 0) { 990 imux->items[i].index = idx; 991 spec->dyn_adc_idx[i] = n; 992 break; 993 } 994 } 995 } 996 997 snd_printdd("realtek: enabling ADC switching\n"); 998 spec->dyn_adc_switch = 1; 999 return true; 1000 } 1001 1002 /* rebuild imux for matching with the given auto-mic pins (if not yet) */ 1003 static bool alc_rebuild_imux_for_auto_mic(struct hda_codec *codec) 1004 { 1005 struct alc_spec *spec = codec->spec; 1006 struct hda_input_mux *imux; 1007 static char * const texts[3] = { 1008 "Mic", "Internal Mic", "Dock Mic" 1009 }; 1010 int i; 1011 1012 if (!spec->auto_mic) 1013 return false; 1014 imux = &spec->private_imux[0]; 1015 if (spec->input_mux == imux) 1016 return true; 1017 spec->imux_pins[0] = spec->ext_mic_pin; 1018 spec->imux_pins[1] = spec->int_mic_pin; 1019 spec->imux_pins[2] = spec->dock_mic_pin; 1020 for (i = 0; i < 3; i++) { 1021 strcpy(imux->items[i].label, texts[i]); 1022 if (spec->imux_pins[i]) 1023 imux->num_items = i + 1; 1024 } 1025 spec->num_mux_defs = 1; 1026 spec->input_mux = imux; 1027 return true; 1028 } 1029 1030 /* check whether all auto-mic pins are valid; setup indices if OK */ 1031 static bool alc_auto_mic_check_imux(struct hda_codec *codec) 1032 { 1033 struct alc_spec *spec = codec->spec; 1034 const struct hda_input_mux *imux; 1035 1036 if (!spec->auto_mic) 1037 return false; 1038 if (spec->auto_mic_valid_imux) 1039 return true; /* already checked */ 1040 1041 /* fill up imux indices */ 1042 if (!alc_check_dyn_adc_switch(codec)) { 1043 spec->auto_mic = 0; 1044 return false; 1045 } 1046 1047 imux = spec->input_mux; 1048 spec->ext_mic_idx = find_idx_in_nid_list(spec->ext_mic_pin, 1049 spec->imux_pins, imux->num_items); 1050 spec->int_mic_idx = find_idx_in_nid_list(spec->int_mic_pin, 1051 spec->imux_pins, imux->num_items); 1052 spec->dock_mic_idx = find_idx_in_nid_list(spec->dock_mic_pin, 1053 spec->imux_pins, imux->num_items); 1054 if (spec->ext_mic_idx < 0 || spec->int_mic_idx < 0) { 1055 spec->auto_mic = 0; 1056 return false; /* no corresponding imux */ 1057 } 1058 1059 snd_hda_codec_write_cache(codec, spec->ext_mic_pin, 0, 1060 AC_VERB_SET_UNSOLICITED_ENABLE, 1061 AC_USRSP_EN | ALC_MIC_EVENT); 1062 if (spec->dock_mic_pin) 1063 snd_hda_codec_write_cache(codec, spec->dock_mic_pin, 0, 1064 AC_VERB_SET_UNSOLICITED_ENABLE, 1065 AC_USRSP_EN | ALC_MIC_EVENT); 1066 1067 spec->auto_mic_valid_imux = 1; 1068 spec->auto_mic = 1; 1069 return true; 1070 } 1071 1072 /* 1073 * Check the availability of auto-mic switch; 1074 * Set up if really supported 1075 */ 1076 static void alc_init_auto_mic(struct hda_codec *codec) 1077 { 1078 struct alc_spec *spec = codec->spec; 1079 struct auto_pin_cfg *cfg = &spec->autocfg; 1080 hda_nid_t fixed, ext, dock; 1081 int i; 1082 1083 spec->ext_mic_idx = spec->int_mic_idx = spec->dock_mic_idx = -1; 1084 1085 fixed = ext = dock = 0; 1086 for (i = 0; i < cfg->num_inputs; i++) { 1087 hda_nid_t nid = cfg->inputs[i].pin; 1088 unsigned int defcfg; 1089 defcfg = snd_hda_codec_get_pincfg(codec, nid); 1090 switch (snd_hda_get_input_pin_attr(defcfg)) { 1091 case INPUT_PIN_ATTR_INT: 1092 if (fixed) 1093 return; /* already occupied */ 1094 if (cfg->inputs[i].type != AUTO_PIN_MIC) 1095 return; /* invalid type */ 1096 fixed = nid; 1097 break; 1098 case INPUT_PIN_ATTR_UNUSED: 1099 return; /* invalid entry */ 1100 case INPUT_PIN_ATTR_DOCK: 1101 if (dock) 1102 return; /* already occupied */ 1103 if (cfg->inputs[i].type > AUTO_PIN_LINE_IN) 1104 return; /* invalid type */ 1105 dock = nid; 1106 break; 1107 default: 1108 if (ext) 1109 return; /* already occupied */ 1110 if (cfg->inputs[i].type != AUTO_PIN_MIC) 1111 return; /* invalid type */ 1112 ext = nid; 1113 break; 1114 } 1115 } 1116 if (!ext && dock) { 1117 ext = dock; 1118 dock = 0; 1119 } 1120 if (!ext || !fixed) 1121 return; 1122 if (!is_jack_detectable(codec, ext)) 1123 return; /* no unsol support */ 1124 if (dock && !is_jack_detectable(codec, dock)) 1125 return; /* no unsol support */ 1126 1127 /* check imux indices */ 1128 spec->ext_mic_pin = ext; 1129 spec->int_mic_pin = fixed; 1130 spec->dock_mic_pin = dock; 1131 1132 spec->auto_mic = 1; 1133 if (!alc_auto_mic_check_imux(codec)) 1134 return; 1135 1136 snd_printdd("realtek: Enable auto-mic switch on NID 0x%x/0x%x/0x%x\n", 1137 ext, fixed, dock); 1138 spec->unsol_event = alc_sku_unsol_event; 1139 } 1140 1141 /* check the availabilities of auto-mute and auto-mic switches */ 1142 static void alc_auto_check_switches(struct hda_codec *codec) 1143 { 1144 alc_init_auto_hp(codec); 1145 alc_init_auto_mic(codec); 1146 } 1147 1148 /* 1149 * Realtek SSID verification 1150 */ 1151 1152 /* Could be any non-zero and even value. When used as fixup, tells 1153 * the driver to ignore any present sku defines. 1154 */ 1155 #define ALC_FIXUP_SKU_IGNORE (2) 1156 1157 static int alc_auto_parse_customize_define(struct hda_codec *codec) 1158 { 1159 unsigned int ass, tmp, i; 1160 unsigned nid = 0; 1161 struct alc_spec *spec = codec->spec; 1162 1163 spec->cdefine.enable_pcbeep = 1; /* assume always enabled */ 1164 1165 if (spec->cdefine.fixup) { 1166 ass = spec->cdefine.sku_cfg; 1167 if (ass == ALC_FIXUP_SKU_IGNORE) 1168 return -1; 1169 goto do_sku; 1170 } 1171 1172 ass = codec->subsystem_id & 0xffff; 1173 if (ass != codec->bus->pci->subsystem_device && (ass & 1)) 1174 goto do_sku; 1175 1176 nid = 0x1d; 1177 if (codec->vendor_id == 0x10ec0260) 1178 nid = 0x17; 1179 ass = snd_hda_codec_get_pincfg(codec, nid); 1180 1181 if (!(ass & 1)) { 1182 printk(KERN_INFO "hda_codec: %s: SKU not ready 0x%08x\n", 1183 codec->chip_name, ass); 1184 return -1; 1185 } 1186 1187 /* check sum */ 1188 tmp = 0; 1189 for (i = 1; i < 16; i++) { 1190 if ((ass >> i) & 1) 1191 tmp++; 1192 } 1193 if (((ass >> 16) & 0xf) != tmp) 1194 return -1; 1195 1196 spec->cdefine.port_connectivity = ass >> 30; 1197 spec->cdefine.enable_pcbeep = (ass & 0x100000) >> 20; 1198 spec->cdefine.check_sum = (ass >> 16) & 0xf; 1199 spec->cdefine.customization = ass >> 8; 1200 do_sku: 1201 spec->cdefine.sku_cfg = ass; 1202 spec->cdefine.external_amp = (ass & 0x38) >> 3; 1203 spec->cdefine.platform_type = (ass & 0x4) >> 2; 1204 spec->cdefine.swap = (ass & 0x2) >> 1; 1205 spec->cdefine.override = ass & 0x1; 1206 1207 snd_printd("SKU: Nid=0x%x sku_cfg=0x%08x\n", 1208 nid, spec->cdefine.sku_cfg); 1209 snd_printd("SKU: port_connectivity=0x%x\n", 1210 spec->cdefine.port_connectivity); 1211 snd_printd("SKU: enable_pcbeep=0x%x\n", spec->cdefine.enable_pcbeep); 1212 snd_printd("SKU: check_sum=0x%08x\n", spec->cdefine.check_sum); 1213 snd_printd("SKU: customization=0x%08x\n", spec->cdefine.customization); 1214 snd_printd("SKU: external_amp=0x%x\n", spec->cdefine.external_amp); 1215 snd_printd("SKU: platform_type=0x%x\n", spec->cdefine.platform_type); 1216 snd_printd("SKU: swap=0x%x\n", spec->cdefine.swap); 1217 snd_printd("SKU: override=0x%x\n", spec->cdefine.override); 1218 1219 return 0; 1220 } 1221 1222 /* return true if the given NID is found in the list */ 1223 static bool found_in_nid_list(hda_nid_t nid, const hda_nid_t *list, int nums) 1224 { 1225 return find_idx_in_nid_list(nid, list, nums) >= 0; 1226 } 1227 1228 /* check subsystem ID and set up device-specific initialization; 1229 * return 1 if initialized, 0 if invalid SSID 1230 */ 1231 /* 32-bit subsystem ID for BIOS loading in HD Audio codec. 1232 * 31 ~ 16 : Manufacture ID 1233 * 15 ~ 8 : SKU ID 1234 * 7 ~ 0 : Assembly ID 1235 * port-A --> pin 39/41, port-E --> pin 14/15, port-D --> pin 35/36 1236 */ 1237 static int alc_subsystem_id(struct hda_codec *codec, 1238 hda_nid_t porta, hda_nid_t porte, 1239 hda_nid_t portd, hda_nid_t porti) 1240 { 1241 unsigned int ass, tmp, i; 1242 unsigned nid; 1243 struct alc_spec *spec = codec->spec; 1244 1245 if (spec->cdefine.fixup) { 1246 ass = spec->cdefine.sku_cfg; 1247 if (ass == ALC_FIXUP_SKU_IGNORE) 1248 return 0; 1249 goto do_sku; 1250 } 1251 1252 ass = codec->subsystem_id & 0xffff; 1253 if ((ass != codec->bus->pci->subsystem_device) && (ass & 1)) 1254 goto do_sku; 1255 1256 /* invalid SSID, check the special NID pin defcfg instead */ 1257 /* 1258 * 31~30 : port connectivity 1259 * 29~21 : reserve 1260 * 20 : PCBEEP input 1261 * 19~16 : Check sum (15:1) 1262 * 15~1 : Custom 1263 * 0 : override 1264 */ 1265 nid = 0x1d; 1266 if (codec->vendor_id == 0x10ec0260) 1267 nid = 0x17; 1268 ass = snd_hda_codec_get_pincfg(codec, nid); 1269 snd_printd("realtek: No valid SSID, " 1270 "checking pincfg 0x%08x for NID 0x%x\n", 1271 ass, nid); 1272 if (!(ass & 1)) 1273 return 0; 1274 if ((ass >> 30) != 1) /* no physical connection */ 1275 return 0; 1276 1277 /* check sum */ 1278 tmp = 0; 1279 for (i = 1; i < 16; i++) { 1280 if ((ass >> i) & 1) 1281 tmp++; 1282 } 1283 if (((ass >> 16) & 0xf) != tmp) 1284 return 0; 1285 do_sku: 1286 snd_printd("realtek: Enabling init ASM_ID=0x%04x CODEC_ID=%08x\n", 1287 ass & 0xffff, codec->vendor_id); 1288 /* 1289 * 0 : override 1290 * 1 : Swap Jack 1291 * 2 : 0 --> Desktop, 1 --> Laptop 1292 * 3~5 : External Amplifier control 1293 * 7~6 : Reserved 1294 */ 1295 tmp = (ass & 0x38) >> 3; /* external Amp control */ 1296 switch (tmp) { 1297 case 1: 1298 spec->init_amp = ALC_INIT_GPIO1; 1299 break; 1300 case 3: 1301 spec->init_amp = ALC_INIT_GPIO2; 1302 break; 1303 case 7: 1304 spec->init_amp = ALC_INIT_GPIO3; 1305 break; 1306 case 5: 1307 default: 1308 spec->init_amp = ALC_INIT_DEFAULT; 1309 break; 1310 } 1311 1312 /* is laptop or Desktop and enable the function "Mute internal speaker 1313 * when the external headphone out jack is plugged" 1314 */ 1315 if (!(ass & 0x8000)) 1316 return 1; 1317 /* 1318 * 10~8 : Jack location 1319 * 12~11: Headphone out -> 00: PortA, 01: PortE, 02: PortD, 03: Resvered 1320 * 14~13: Resvered 1321 * 15 : 1 --> enable the function "Mute internal speaker 1322 * when the external headphone out jack is plugged" 1323 */ 1324 if (!spec->autocfg.hp_pins[0]) { 1325 hda_nid_t nid; 1326 tmp = (ass >> 11) & 0x3; /* HP to chassis */ 1327 if (tmp == 0) 1328 nid = porta; 1329 else if (tmp == 1) 1330 nid = porte; 1331 else if (tmp == 2) 1332 nid = portd; 1333 else if (tmp == 3) 1334 nid = porti; 1335 else 1336 return 1; 1337 if (found_in_nid_list(nid, spec->autocfg.line_out_pins, 1338 spec->autocfg.line_outs)) 1339 return 1; 1340 spec->autocfg.hp_pins[0] = nid; 1341 } 1342 return 1; 1343 } 1344 1345 /* Check the validity of ALC subsystem-id 1346 * ports contains an array of 4 pin NIDs for port-A, E, D and I */ 1347 static void alc_ssid_check(struct hda_codec *codec, const hda_nid_t *ports) 1348 { 1349 if (!alc_subsystem_id(codec, ports[0], ports[1], ports[2], ports[3])) { 1350 struct alc_spec *spec = codec->spec; 1351 snd_printd("realtek: " 1352 "Enable default setup for auto mode as fallback\n"); 1353 spec->init_amp = ALC_INIT_DEFAULT; 1354 } 1355 } 1356 1357 /* 1358 * Fix-up pin default configurations and add default verbs 1359 */ 1360 1361 struct alc_pincfg { 1362 hda_nid_t nid; 1363 u32 val; 1364 }; 1365 1366 struct alc_model_fixup { 1367 const int id; 1368 const char *name; 1369 }; 1370 1371 struct alc_fixup { 1372 int type; 1373 bool chained; 1374 int chain_id; 1375 union { 1376 unsigned int sku; 1377 const struct alc_pincfg *pins; 1378 const struct hda_verb *verbs; 1379 void (*func)(struct hda_codec *codec, 1380 const struct alc_fixup *fix, 1381 int action); 1382 } v; 1383 }; 1384 1385 enum { 1386 ALC_FIXUP_INVALID, 1387 ALC_FIXUP_SKU, 1388 ALC_FIXUP_PINS, 1389 ALC_FIXUP_VERBS, 1390 ALC_FIXUP_FUNC, 1391 }; 1392 1393 enum { 1394 ALC_FIXUP_ACT_PRE_PROBE, 1395 ALC_FIXUP_ACT_PROBE, 1396 ALC_FIXUP_ACT_INIT, 1397 }; 1398 1399 static void alc_apply_fixup(struct hda_codec *codec, int action) 1400 { 1401 struct alc_spec *spec = codec->spec; 1402 int id = spec->fixup_id; 1403 #ifdef CONFIG_SND_DEBUG_VERBOSE 1404 const char *modelname = spec->fixup_name; 1405 #endif 1406 int depth = 0; 1407 1408 if (!spec->fixup_list) 1409 return; 1410 1411 while (id >= 0) { 1412 const struct alc_fixup *fix = spec->fixup_list + id; 1413 const struct alc_pincfg *cfg; 1414 1415 switch (fix->type) { 1416 case ALC_FIXUP_SKU: 1417 if (action != ALC_FIXUP_ACT_PRE_PROBE || !fix->v.sku) 1418 break;; 1419 snd_printdd(KERN_INFO "hda_codec: %s: " 1420 "Apply sku override for %s\n", 1421 codec->chip_name, modelname); 1422 spec->cdefine.sku_cfg = fix->v.sku; 1423 spec->cdefine.fixup = 1; 1424 break; 1425 case ALC_FIXUP_PINS: 1426 cfg = fix->v.pins; 1427 if (action != ALC_FIXUP_ACT_PRE_PROBE || !cfg) 1428 break; 1429 snd_printdd(KERN_INFO "hda_codec: %s: " 1430 "Apply pincfg for %s\n", 1431 codec->chip_name, modelname); 1432 for (; cfg->nid; cfg++) 1433 snd_hda_codec_set_pincfg(codec, cfg->nid, 1434 cfg->val); 1435 break; 1436 case ALC_FIXUP_VERBS: 1437 if (action != ALC_FIXUP_ACT_PROBE || !fix->v.verbs) 1438 break; 1439 snd_printdd(KERN_INFO "hda_codec: %s: " 1440 "Apply fix-verbs for %s\n", 1441 codec->chip_name, modelname); 1442 add_verb(codec->spec, fix->v.verbs); 1443 break; 1444 case ALC_FIXUP_FUNC: 1445 if (!fix->v.func) 1446 break; 1447 snd_printdd(KERN_INFO "hda_codec: %s: " 1448 "Apply fix-func for %s\n", 1449 codec->chip_name, modelname); 1450 fix->v.func(codec, fix, action); 1451 break; 1452 default: 1453 snd_printk(KERN_ERR "hda_codec: %s: " 1454 "Invalid fixup type %d\n", 1455 codec->chip_name, fix->type); 1456 break; 1457 } 1458 if (!fix->chained) 1459 break; 1460 if (++depth > 10) 1461 break; 1462 id = fix->chain_id; 1463 } 1464 } 1465 1466 static void alc_pick_fixup(struct hda_codec *codec, 1467 const struct alc_model_fixup *models, 1468 const struct snd_pci_quirk *quirk, 1469 const struct alc_fixup *fixlist) 1470 { 1471 struct alc_spec *spec = codec->spec; 1472 int id = -1; 1473 const char *name = NULL; 1474 1475 if (codec->modelname && models) { 1476 while (models->name) { 1477 if (!strcmp(codec->modelname, models->name)) { 1478 id = models->id; 1479 name = models->name; 1480 break; 1481 } 1482 models++; 1483 } 1484 } 1485 if (id < 0) { 1486 quirk = snd_pci_quirk_lookup(codec->bus->pci, quirk); 1487 if (quirk) { 1488 id = quirk->value; 1489 #ifdef CONFIG_SND_DEBUG_VERBOSE 1490 name = quirk->name; 1491 #endif 1492 } 1493 } 1494 1495 spec->fixup_id = id; 1496 if (id >= 0) { 1497 spec->fixup_list = fixlist; 1498 spec->fixup_name = name; 1499 } 1500 } 1501 1502 /* 1503 * COEF access helper functions 1504 */ 1505 static int alc_read_coef_idx(struct hda_codec *codec, 1506 unsigned int coef_idx) 1507 { 1508 unsigned int val; 1509 snd_hda_codec_write(codec, 0x20, 0, AC_VERB_SET_COEF_INDEX, 1510 coef_idx); 1511 val = snd_hda_codec_read(codec, 0x20, 0, 1512 AC_VERB_GET_PROC_COEF, 0); 1513 return val; 1514 } 1515 1516 static void alc_write_coef_idx(struct hda_codec *codec, unsigned int coef_idx, 1517 unsigned int coef_val) 1518 { 1519 snd_hda_codec_write(codec, 0x20, 0, AC_VERB_SET_COEF_INDEX, 1520 coef_idx); 1521 snd_hda_codec_write(codec, 0x20, 0, AC_VERB_SET_PROC_COEF, 1522 coef_val); 1523 } 1524 1525 /* 1526 * Digital I/O handling 1527 */ 1528 1529 /* set right pin controls for digital I/O */ 1530 static void alc_auto_init_digital(struct hda_codec *codec) 1531 { 1532 struct alc_spec *spec = codec->spec; 1533 int i; 1534 hda_nid_t pin, dac; 1535 1536 for (i = 0; i < spec->autocfg.dig_outs; i++) { 1537 pin = spec->autocfg.dig_out_pins[i]; 1538 if (!pin) 1539 continue; 1540 snd_hda_codec_write(codec, pin, 0, 1541 AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT); 1542 if (!i) 1543 dac = spec->multiout.dig_out_nid; 1544 else 1545 dac = spec->slave_dig_outs[i - 1]; 1546 if (!dac || !(get_wcaps(codec, dac) & AC_WCAP_OUT_AMP)) 1547 continue; 1548 snd_hda_codec_write(codec, dac, 0, 1549 AC_VERB_SET_AMP_GAIN_MUTE, 1550 AMP_OUT_UNMUTE); 1551 } 1552 pin = spec->autocfg.dig_in_pin; 1553 if (pin) 1554 snd_hda_codec_write(codec, pin, 0, 1555 AC_VERB_SET_PIN_WIDGET_CONTROL, 1556 PIN_IN); 1557 } 1558 1559 /* parse digital I/Os and set up NIDs in BIOS auto-parse mode */ 1560 static void alc_auto_parse_digital(struct hda_codec *codec) 1561 { 1562 struct alc_spec *spec = codec->spec; 1563 int i, err; 1564 hda_nid_t dig_nid; 1565 1566 /* support multiple SPDIFs; the secondary is set up as a slave */ 1567 for (i = 0; i < spec->autocfg.dig_outs; i++) { 1568 hda_nid_t conn[4]; 1569 err = snd_hda_get_connections(codec, 1570 spec->autocfg.dig_out_pins[i], 1571 conn, ARRAY_SIZE(conn)); 1572 if (err < 0) 1573 continue; 1574 dig_nid = conn[0]; /* assume the first element is audio-out */ 1575 if (!i) { 1576 spec->multiout.dig_out_nid = dig_nid; 1577 spec->dig_out_type = spec->autocfg.dig_out_type[0]; 1578 } else { 1579 spec->multiout.slave_dig_outs = spec->slave_dig_outs; 1580 if (i >= ARRAY_SIZE(spec->slave_dig_outs) - 1) 1581 break; 1582 spec->slave_dig_outs[i - 1] = dig_nid; 1583 } 1584 } 1585 1586 if (spec->autocfg.dig_in_pin) { 1587 dig_nid = codec->start_nid; 1588 for (i = 0; i < codec->num_nodes; i++, dig_nid++) { 1589 unsigned int wcaps = get_wcaps(codec, dig_nid); 1590 if (get_wcaps_type(wcaps) != AC_WID_AUD_IN) 1591 continue; 1592 if (!(wcaps & AC_WCAP_DIGITAL)) 1593 continue; 1594 if (!(wcaps & AC_WCAP_CONN_LIST)) 1595 continue; 1596 err = get_connection_index(codec, dig_nid, 1597 spec->autocfg.dig_in_pin); 1598 if (err >= 0) { 1599 spec->dig_in_nid = dig_nid; 1600 break; 1601 } 1602 } 1603 } 1604 } 1605 1606 /* 1607 * capture mixer elements 1608 */ 1609 static int alc_cap_vol_info(struct snd_kcontrol *kcontrol, 1610 struct snd_ctl_elem_info *uinfo) 1611 { 1612 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 1613 struct alc_spec *spec = codec->spec; 1614 unsigned long val; 1615 int err; 1616 1617 mutex_lock(&codec->control_mutex); 1618 if (spec->vol_in_capsrc) 1619 val = HDA_COMPOSE_AMP_VAL(spec->capsrc_nids[0], 3, 0, HDA_OUTPUT); 1620 else 1621 val = HDA_COMPOSE_AMP_VAL(spec->adc_nids[0], 3, 0, HDA_INPUT); 1622 kcontrol->private_value = val; 1623 err = snd_hda_mixer_amp_volume_info(kcontrol, uinfo); 1624 mutex_unlock(&codec->control_mutex); 1625 return err; 1626 } 1627 1628 static int alc_cap_vol_tlv(struct snd_kcontrol *kcontrol, int op_flag, 1629 unsigned int size, unsigned int __user *tlv) 1630 { 1631 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 1632 struct alc_spec *spec = codec->spec; 1633 unsigned long val; 1634 int err; 1635 1636 mutex_lock(&codec->control_mutex); 1637 if (spec->vol_in_capsrc) 1638 val = HDA_COMPOSE_AMP_VAL(spec->capsrc_nids[0], 3, 0, HDA_OUTPUT); 1639 else 1640 val = HDA_COMPOSE_AMP_VAL(spec->adc_nids[0], 3, 0, HDA_INPUT); 1641 kcontrol->private_value = val; 1642 err = snd_hda_mixer_amp_tlv(kcontrol, op_flag, size, tlv); 1643 mutex_unlock(&codec->control_mutex); 1644 return err; 1645 } 1646 1647 typedef int (*getput_call_t)(struct snd_kcontrol *kcontrol, 1648 struct snd_ctl_elem_value *ucontrol); 1649 1650 static int alc_cap_getput_caller(struct snd_kcontrol *kcontrol, 1651 struct snd_ctl_elem_value *ucontrol, 1652 getput_call_t func, bool check_adc_switch) 1653 { 1654 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 1655 struct alc_spec *spec = codec->spec; 1656 int i, err = 0; 1657 1658 mutex_lock(&codec->control_mutex); 1659 if (check_adc_switch && spec->dyn_adc_switch) { 1660 for (i = 0; i < spec->num_adc_nids; i++) { 1661 kcontrol->private_value = 1662 HDA_COMPOSE_AMP_VAL(spec->adc_nids[i], 1663 3, 0, HDA_INPUT); 1664 err = func(kcontrol, ucontrol); 1665 if (err < 0) 1666 goto error; 1667 } 1668 } else { 1669 i = snd_ctl_get_ioffidx(kcontrol, &ucontrol->id); 1670 if (spec->vol_in_capsrc) 1671 kcontrol->private_value = 1672 HDA_COMPOSE_AMP_VAL(spec->capsrc_nids[i], 1673 3, 0, HDA_OUTPUT); 1674 else 1675 kcontrol->private_value = 1676 HDA_COMPOSE_AMP_VAL(spec->adc_nids[i], 1677 3, 0, HDA_INPUT); 1678 err = func(kcontrol, ucontrol); 1679 } 1680 error: 1681 mutex_unlock(&codec->control_mutex); 1682 return err; 1683 } 1684 1685 static int alc_cap_vol_get(struct snd_kcontrol *kcontrol, 1686 struct snd_ctl_elem_value *ucontrol) 1687 { 1688 return alc_cap_getput_caller(kcontrol, ucontrol, 1689 snd_hda_mixer_amp_volume_get, false); 1690 } 1691 1692 static int alc_cap_vol_put(struct snd_kcontrol *kcontrol, 1693 struct snd_ctl_elem_value *ucontrol) 1694 { 1695 return alc_cap_getput_caller(kcontrol, ucontrol, 1696 snd_hda_mixer_amp_volume_put, true); 1697 } 1698 1699 /* capture mixer elements */ 1700 #define alc_cap_sw_info snd_ctl_boolean_stereo_info 1701 1702 static int alc_cap_sw_get(struct snd_kcontrol *kcontrol, 1703 struct snd_ctl_elem_value *ucontrol) 1704 { 1705 return alc_cap_getput_caller(kcontrol, ucontrol, 1706 snd_hda_mixer_amp_switch_get, false); 1707 } 1708 1709 static int alc_cap_sw_put(struct snd_kcontrol *kcontrol, 1710 struct snd_ctl_elem_value *ucontrol) 1711 { 1712 return alc_cap_getput_caller(kcontrol, ucontrol, 1713 snd_hda_mixer_amp_switch_put, true); 1714 } 1715 1716 #define _DEFINE_CAPMIX(num) \ 1717 { \ 1718 .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \ 1719 .name = "Capture Switch", \ 1720 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE, \ 1721 .count = num, \ 1722 .info = alc_cap_sw_info, \ 1723 .get = alc_cap_sw_get, \ 1724 .put = alc_cap_sw_put, \ 1725 }, \ 1726 { \ 1727 .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \ 1728 .name = "Capture Volume", \ 1729 .access = (SNDRV_CTL_ELEM_ACCESS_READWRITE | \ 1730 SNDRV_CTL_ELEM_ACCESS_TLV_READ | \ 1731 SNDRV_CTL_ELEM_ACCESS_TLV_CALLBACK), \ 1732 .count = num, \ 1733 .info = alc_cap_vol_info, \ 1734 .get = alc_cap_vol_get, \ 1735 .put = alc_cap_vol_put, \ 1736 .tlv = { .c = alc_cap_vol_tlv }, \ 1737 } 1738 1739 #define _DEFINE_CAPSRC(num) \ 1740 { \ 1741 .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \ 1742 /* .name = "Capture Source", */ \ 1743 .name = "Input Source", \ 1744 .count = num, \ 1745 .info = alc_mux_enum_info, \ 1746 .get = alc_mux_enum_get, \ 1747 .put = alc_mux_enum_put, \ 1748 } 1749 1750 #define DEFINE_CAPMIX(num) \ 1751 static const struct snd_kcontrol_new alc_capture_mixer ## num[] = { \ 1752 _DEFINE_CAPMIX(num), \ 1753 _DEFINE_CAPSRC(num), \ 1754 { } /* end */ \ 1755 } 1756 1757 #define DEFINE_CAPMIX_NOSRC(num) \ 1758 static const struct snd_kcontrol_new alc_capture_mixer_nosrc ## num[] = { \ 1759 _DEFINE_CAPMIX(num), \ 1760 { } /* end */ \ 1761 } 1762 1763 /* up to three ADCs */ 1764 DEFINE_CAPMIX(1); 1765 DEFINE_CAPMIX(2); 1766 DEFINE_CAPMIX(3); 1767 DEFINE_CAPMIX_NOSRC(1); 1768 DEFINE_CAPMIX_NOSRC(2); 1769 DEFINE_CAPMIX_NOSRC(3); 1770 1771 /* 1772 * virtual master controls 1773 */ 1774 1775 /* 1776 * slave controls for virtual master 1777 */ 1778 static const char * const alc_slave_vols[] = { 1779 "Front Playback Volume", 1780 "Surround Playback Volume", 1781 "Center Playback Volume", 1782 "LFE Playback Volume", 1783 "Side Playback Volume", 1784 "Headphone Playback Volume", 1785 "Speaker Playback Volume", 1786 "Mono Playback Volume", 1787 "Line-Out Playback Volume", 1788 "PCM Playback Volume", 1789 NULL, 1790 }; 1791 1792 static const char * const alc_slave_sws[] = { 1793 "Front Playback Switch", 1794 "Surround Playback Switch", 1795 "Center Playback Switch", 1796 "LFE Playback Switch", 1797 "Side Playback Switch", 1798 "Headphone Playback Switch", 1799 "Speaker Playback Switch", 1800 "Mono Playback Switch", 1801 "IEC958 Playback Switch", 1802 "Line-Out Playback Switch", 1803 "PCM Playback Switch", 1804 NULL, 1805 }; 1806 1807 /* 1808 * build control elements 1809 */ 1810 1811 #define NID_MAPPING (-1) 1812 1813 #define SUBDEV_SPEAKER_ (0 << 6) 1814 #define SUBDEV_HP_ (1 << 6) 1815 #define SUBDEV_LINE_ (2 << 6) 1816 #define SUBDEV_SPEAKER(x) (SUBDEV_SPEAKER_ | ((x) & 0x3f)) 1817 #define SUBDEV_HP(x) (SUBDEV_HP_ | ((x) & 0x3f)) 1818 #define SUBDEV_LINE(x) (SUBDEV_LINE_ | ((x) & 0x3f)) 1819 1820 static void alc_free_kctls(struct hda_codec *codec); 1821 1822 #ifdef CONFIG_SND_HDA_INPUT_BEEP 1823 /* additional beep mixers; the actual parameters are overwritten at build */ 1824 static const struct snd_kcontrol_new alc_beep_mixer[] = { 1825 HDA_CODEC_VOLUME("Beep Playback Volume", 0, 0, HDA_INPUT), 1826 HDA_CODEC_MUTE_BEEP("Beep Playback Switch", 0, 0, HDA_INPUT), 1827 { } /* end */ 1828 }; 1829 #endif 1830 1831 static int alc_build_controls(struct hda_codec *codec) 1832 { 1833 struct alc_spec *spec = codec->spec; 1834 struct snd_kcontrol *kctl = NULL; 1835 const struct snd_kcontrol_new *knew; 1836 int i, j, err; 1837 unsigned int u; 1838 hda_nid_t nid; 1839 1840 for (i = 0; i < spec->num_mixers; i++) { 1841 err = snd_hda_add_new_ctls(codec, spec->mixers[i]); 1842 if (err < 0) 1843 return err; 1844 } 1845 if (spec->cap_mixer) { 1846 err = snd_hda_add_new_ctls(codec, spec->cap_mixer); 1847 if (err < 0) 1848 return err; 1849 } 1850 if (spec->multiout.dig_out_nid) { 1851 err = snd_hda_create_spdif_out_ctls(codec, 1852 spec->multiout.dig_out_nid, 1853 spec->multiout.dig_out_nid); 1854 if (err < 0) 1855 return err; 1856 if (!spec->no_analog) { 1857 err = snd_hda_create_spdif_share_sw(codec, 1858 &spec->multiout); 1859 if (err < 0) 1860 return err; 1861 spec->multiout.share_spdif = 1; 1862 } 1863 } 1864 if (spec->dig_in_nid) { 1865 err = snd_hda_create_spdif_in_ctls(codec, spec->dig_in_nid); 1866 if (err < 0) 1867 return err; 1868 } 1869 1870 #ifdef CONFIG_SND_HDA_INPUT_BEEP 1871 /* create beep controls if needed */ 1872 if (spec->beep_amp) { 1873 const struct snd_kcontrol_new *knew; 1874 for (knew = alc_beep_mixer; knew->name; knew++) { 1875 struct snd_kcontrol *kctl; 1876 kctl = snd_ctl_new1(knew, codec); 1877 if (!kctl) 1878 return -ENOMEM; 1879 kctl->private_value = spec->beep_amp; 1880 err = snd_hda_ctl_add(codec, 0, kctl); 1881 if (err < 0) 1882 return err; 1883 } 1884 } 1885 #endif 1886 1887 /* if we have no master control, let's create it */ 1888 if (!spec->no_analog && 1889 !snd_hda_find_mixer_ctl(codec, "Master Playback Volume")) { 1890 unsigned int vmaster_tlv[4]; 1891 snd_hda_set_vmaster_tlv(codec, spec->vmaster_nid, 1892 HDA_OUTPUT, vmaster_tlv); 1893 err = snd_hda_add_vmaster(codec, "Master Playback Volume", 1894 vmaster_tlv, alc_slave_vols); 1895 if (err < 0) 1896 return err; 1897 } 1898 if (!spec->no_analog && 1899 !snd_hda_find_mixer_ctl(codec, "Master Playback Switch")) { 1900 err = snd_hda_add_vmaster(codec, "Master Playback Switch", 1901 NULL, alc_slave_sws); 1902 if (err < 0) 1903 return err; 1904 } 1905 1906 /* assign Capture Source enums to NID */ 1907 if (spec->capsrc_nids || spec->adc_nids) { 1908 kctl = snd_hda_find_mixer_ctl(codec, "Capture Source"); 1909 if (!kctl) 1910 kctl = snd_hda_find_mixer_ctl(codec, "Input Source"); 1911 for (i = 0; kctl && i < kctl->count; i++) { 1912 const hda_nid_t *nids = spec->capsrc_nids; 1913 if (!nids) 1914 nids = spec->adc_nids; 1915 err = snd_hda_add_nid(codec, kctl, i, nids[i]); 1916 if (err < 0) 1917 return err; 1918 } 1919 } 1920 if (spec->cap_mixer && spec->adc_nids) { 1921 const char *kname = kctl ? kctl->id.name : NULL; 1922 for (knew = spec->cap_mixer; knew->name; knew++) { 1923 if (kname && strcmp(knew->name, kname) == 0) 1924 continue; 1925 kctl = snd_hda_find_mixer_ctl(codec, knew->name); 1926 for (i = 0; kctl && i < kctl->count; i++) { 1927 err = snd_hda_add_nid(codec, kctl, i, 1928 spec->adc_nids[i]); 1929 if (err < 0) 1930 return err; 1931 } 1932 } 1933 } 1934 1935 /* other nid->control mapping */ 1936 for (i = 0; i < spec->num_mixers; i++) { 1937 for (knew = spec->mixers[i]; knew->name; knew++) { 1938 if (knew->iface != NID_MAPPING) 1939 continue; 1940 kctl = snd_hda_find_mixer_ctl(codec, knew->name); 1941 if (kctl == NULL) 1942 continue; 1943 u = knew->subdevice; 1944 for (j = 0; j < 4; j++, u >>= 8) { 1945 nid = u & 0x3f; 1946 if (nid == 0) 1947 continue; 1948 switch (u & 0xc0) { 1949 case SUBDEV_SPEAKER_: 1950 nid = spec->autocfg.speaker_pins[nid]; 1951 break; 1952 case SUBDEV_LINE_: 1953 nid = spec->autocfg.line_out_pins[nid]; 1954 break; 1955 case SUBDEV_HP_: 1956 nid = spec->autocfg.hp_pins[nid]; 1957 break; 1958 default: 1959 continue; 1960 } 1961 err = snd_hda_add_nid(codec, kctl, 0, nid); 1962 if (err < 0) 1963 return err; 1964 } 1965 u = knew->private_value; 1966 for (j = 0; j < 4; j++, u >>= 8) { 1967 nid = u & 0xff; 1968 if (nid == 0) 1969 continue; 1970 err = snd_hda_add_nid(codec, kctl, 0, nid); 1971 if (err < 0) 1972 return err; 1973 } 1974 } 1975 } 1976 1977 alc_free_kctls(codec); /* no longer needed */ 1978 1979 return 0; 1980 } 1981 1982 1983 /* 1984 * Common callbacks 1985 */ 1986 1987 static void alc_init_special_input_src(struct hda_codec *codec); 1988 1989 static int alc_init(struct hda_codec *codec) 1990 { 1991 struct alc_spec *spec = codec->spec; 1992 unsigned int i; 1993 1994 alc_fix_pll(codec); 1995 alc_auto_init_amp(codec, spec->init_amp); 1996 1997 for (i = 0; i < spec->num_init_verbs; i++) 1998 snd_hda_sequence_write(codec, spec->init_verbs[i]); 1999 alc_init_special_input_src(codec); 2000 2001 if (spec->init_hook) 2002 spec->init_hook(codec); 2003 2004 alc_apply_fixup(codec, ALC_FIXUP_ACT_INIT); 2005 2006 hda_call_check_power_status(codec, 0x01); 2007 return 0; 2008 } 2009 2010 static void alc_unsol_event(struct hda_codec *codec, unsigned int res) 2011 { 2012 struct alc_spec *spec = codec->spec; 2013 2014 if (spec->unsol_event) 2015 spec->unsol_event(codec, res); 2016 } 2017 2018 #ifdef CONFIG_SND_HDA_POWER_SAVE 2019 static int alc_check_power_status(struct hda_codec *codec, hda_nid_t nid) 2020 { 2021 struct alc_spec *spec = codec->spec; 2022 return snd_hda_check_amp_list_power(codec, &spec->loopback, nid); 2023 } 2024 #endif 2025 2026 /* 2027 * Analog playback callbacks 2028 */ 2029 static int alc_playback_pcm_open(struct hda_pcm_stream *hinfo, 2030 struct hda_codec *codec, 2031 struct snd_pcm_substream *substream) 2032 { 2033 struct alc_spec *spec = codec->spec; 2034 return snd_hda_multi_out_analog_open(codec, &spec->multiout, substream, 2035 hinfo); 2036 } 2037 2038 static int alc_playback_pcm_prepare(struct hda_pcm_stream *hinfo, 2039 struct hda_codec *codec, 2040 unsigned int stream_tag, 2041 unsigned int format, 2042 struct snd_pcm_substream *substream) 2043 { 2044 struct alc_spec *spec = codec->spec; 2045 return snd_hda_multi_out_analog_prepare(codec, &spec->multiout, 2046 stream_tag, format, substream); 2047 } 2048 2049 static int alc_playback_pcm_cleanup(struct hda_pcm_stream *hinfo, 2050 struct hda_codec *codec, 2051 struct snd_pcm_substream *substream) 2052 { 2053 struct alc_spec *spec = codec->spec; 2054 return snd_hda_multi_out_analog_cleanup(codec, &spec->multiout); 2055 } 2056 2057 /* 2058 * Digital out 2059 */ 2060 static int alc_dig_playback_pcm_open(struct hda_pcm_stream *hinfo, 2061 struct hda_codec *codec, 2062 struct snd_pcm_substream *substream) 2063 { 2064 struct alc_spec *spec = codec->spec; 2065 return snd_hda_multi_out_dig_open(codec, &spec->multiout); 2066 } 2067 2068 static int alc_dig_playback_pcm_prepare(struct hda_pcm_stream *hinfo, 2069 struct hda_codec *codec, 2070 unsigned int stream_tag, 2071 unsigned int format, 2072 struct snd_pcm_substream *substream) 2073 { 2074 struct alc_spec *spec = codec->spec; 2075 return snd_hda_multi_out_dig_prepare(codec, &spec->multiout, 2076 stream_tag, format, substream); 2077 } 2078 2079 static int alc_dig_playback_pcm_cleanup(struct hda_pcm_stream *hinfo, 2080 struct hda_codec *codec, 2081 struct snd_pcm_substream *substream) 2082 { 2083 struct alc_spec *spec = codec->spec; 2084 return snd_hda_multi_out_dig_cleanup(codec, &spec->multiout); 2085 } 2086 2087 static int alc_dig_playback_pcm_close(struct hda_pcm_stream *hinfo, 2088 struct hda_codec *codec, 2089 struct snd_pcm_substream *substream) 2090 { 2091 struct alc_spec *spec = codec->spec; 2092 return snd_hda_multi_out_dig_close(codec, &spec->multiout); 2093 } 2094 2095 /* 2096 * Analog capture 2097 */ 2098 static int alc_alt_capture_pcm_prepare(struct hda_pcm_stream *hinfo, 2099 struct hda_codec *codec, 2100 unsigned int stream_tag, 2101 unsigned int format, 2102 struct snd_pcm_substream *substream) 2103 { 2104 struct alc_spec *spec = codec->spec; 2105 2106 snd_hda_codec_setup_stream(codec, spec->adc_nids[substream->number + 1], 2107 stream_tag, 0, format); 2108 return 0; 2109 } 2110 2111 static int alc_alt_capture_pcm_cleanup(struct hda_pcm_stream *hinfo, 2112 struct hda_codec *codec, 2113 struct snd_pcm_substream *substream) 2114 { 2115 struct alc_spec *spec = codec->spec; 2116 2117 snd_hda_codec_cleanup_stream(codec, 2118 spec->adc_nids[substream->number + 1]); 2119 return 0; 2120 } 2121 2122 /* analog capture with dynamic dual-adc changes */ 2123 static int dyn_adc_capture_pcm_prepare(struct hda_pcm_stream *hinfo, 2124 struct hda_codec *codec, 2125 unsigned int stream_tag, 2126 unsigned int format, 2127 struct snd_pcm_substream *substream) 2128 { 2129 struct alc_spec *spec = codec->spec; 2130 spec->cur_adc = spec->adc_nids[spec->dyn_adc_idx[spec->cur_mux[0]]]; 2131 spec->cur_adc_stream_tag = stream_tag; 2132 spec->cur_adc_format = format; 2133 snd_hda_codec_setup_stream(codec, spec->cur_adc, stream_tag, 0, format); 2134 return 0; 2135 } 2136 2137 static int dyn_adc_capture_pcm_cleanup(struct hda_pcm_stream *hinfo, 2138 struct hda_codec *codec, 2139 struct snd_pcm_substream *substream) 2140 { 2141 struct alc_spec *spec = codec->spec; 2142 snd_hda_codec_cleanup_stream(codec, spec->cur_adc); 2143 spec->cur_adc = 0; 2144 return 0; 2145 } 2146 2147 static const struct hda_pcm_stream dyn_adc_pcm_analog_capture = { 2148 .substreams = 1, 2149 .channels_min = 2, 2150 .channels_max = 2, 2151 .nid = 0, /* fill later */ 2152 .ops = { 2153 .prepare = dyn_adc_capture_pcm_prepare, 2154 .cleanup = dyn_adc_capture_pcm_cleanup 2155 }, 2156 }; 2157 2158 /* 2159 */ 2160 static const struct hda_pcm_stream alc_pcm_analog_playback = { 2161 .substreams = 1, 2162 .channels_min = 2, 2163 .channels_max = 8, 2164 /* NID is set in alc_build_pcms */ 2165 .ops = { 2166 .open = alc_playback_pcm_open, 2167 .prepare = alc_playback_pcm_prepare, 2168 .cleanup = alc_playback_pcm_cleanup 2169 }, 2170 }; 2171 2172 static const struct hda_pcm_stream alc_pcm_analog_capture = { 2173 .substreams = 1, 2174 .channels_min = 2, 2175 .channels_max = 2, 2176 /* NID is set in alc_build_pcms */ 2177 }; 2178 2179 static const struct hda_pcm_stream alc_pcm_analog_alt_playback = { 2180 .substreams = 1, 2181 .channels_min = 2, 2182 .channels_max = 2, 2183 /* NID is set in alc_build_pcms */ 2184 }; 2185 2186 static const struct hda_pcm_stream alc_pcm_analog_alt_capture = { 2187 .substreams = 2, /* can be overridden */ 2188 .channels_min = 2, 2189 .channels_max = 2, 2190 /* NID is set in alc_build_pcms */ 2191 .ops = { 2192 .prepare = alc_alt_capture_pcm_prepare, 2193 .cleanup = alc_alt_capture_pcm_cleanup 2194 }, 2195 }; 2196 2197 static const struct hda_pcm_stream alc_pcm_digital_playback = { 2198 .substreams = 1, 2199 .channels_min = 2, 2200 .channels_max = 2, 2201 /* NID is set in alc_build_pcms */ 2202 .ops = { 2203 .open = alc_dig_playback_pcm_open, 2204 .close = alc_dig_playback_pcm_close, 2205 .prepare = alc_dig_playback_pcm_prepare, 2206 .cleanup = alc_dig_playback_pcm_cleanup 2207 }, 2208 }; 2209 2210 static const struct hda_pcm_stream alc_pcm_digital_capture = { 2211 .substreams = 1, 2212 .channels_min = 2, 2213 .channels_max = 2, 2214 /* NID is set in alc_build_pcms */ 2215 }; 2216 2217 /* Used by alc_build_pcms to flag that a PCM has no playback stream */ 2218 static const struct hda_pcm_stream alc_pcm_null_stream = { 2219 .substreams = 0, 2220 .channels_min = 0, 2221 .channels_max = 0, 2222 }; 2223 2224 static int alc_build_pcms(struct hda_codec *codec) 2225 { 2226 struct alc_spec *spec = codec->spec; 2227 struct hda_pcm *info = spec->pcm_rec; 2228 const struct hda_pcm_stream *p; 2229 int i; 2230 2231 codec->num_pcms = 1; 2232 codec->pcm_info = info; 2233 2234 if (spec->no_analog) 2235 goto skip_analog; 2236 2237 snprintf(spec->stream_name_analog, sizeof(spec->stream_name_analog), 2238 "%s Analog", codec->chip_name); 2239 info->name = spec->stream_name_analog; 2240 2241 if (spec->multiout.dac_nids > 0) { 2242 p = spec->stream_analog_playback; 2243 if (!p) 2244 p = &alc_pcm_analog_playback; 2245 info->stream[SNDRV_PCM_STREAM_PLAYBACK] = *p; 2246 info->stream[SNDRV_PCM_STREAM_PLAYBACK].nid = spec->multiout.dac_nids[0]; 2247 } 2248 if (spec->adc_nids) { 2249 p = spec->stream_analog_capture; 2250 if (!p) { 2251 if (spec->dyn_adc_switch) 2252 p = &dyn_adc_pcm_analog_capture; 2253 else 2254 p = &alc_pcm_analog_capture; 2255 } 2256 info->stream[SNDRV_PCM_STREAM_CAPTURE] = *p; 2257 info->stream[SNDRV_PCM_STREAM_CAPTURE].nid = spec->adc_nids[0]; 2258 } 2259 2260 if (spec->channel_mode) { 2261 info->stream[SNDRV_PCM_STREAM_PLAYBACK].channels_max = 0; 2262 for (i = 0; i < spec->num_channel_mode; i++) { 2263 if (spec->channel_mode[i].channels > info->stream[SNDRV_PCM_STREAM_PLAYBACK].channels_max) { 2264 info->stream[SNDRV_PCM_STREAM_PLAYBACK].channels_max = spec->channel_mode[i].channels; 2265 } 2266 } 2267 } 2268 2269 skip_analog: 2270 /* SPDIF for stream index #1 */ 2271 if (spec->multiout.dig_out_nid || spec->dig_in_nid) { 2272 snprintf(spec->stream_name_digital, 2273 sizeof(spec->stream_name_digital), 2274 "%s Digital", codec->chip_name); 2275 codec->num_pcms = 2; 2276 codec->slave_dig_outs = spec->multiout.slave_dig_outs; 2277 info = spec->pcm_rec + 1; 2278 info->name = spec->stream_name_digital; 2279 if (spec->dig_out_type) 2280 info->pcm_type = spec->dig_out_type; 2281 else 2282 info->pcm_type = HDA_PCM_TYPE_SPDIF; 2283 if (spec->multiout.dig_out_nid) { 2284 p = spec->stream_digital_playback; 2285 if (!p) 2286 p = &alc_pcm_digital_playback; 2287 info->stream[SNDRV_PCM_STREAM_PLAYBACK] = *p; 2288 info->stream[SNDRV_PCM_STREAM_PLAYBACK].nid = spec->multiout.dig_out_nid; 2289 } 2290 if (spec->dig_in_nid) { 2291 p = spec->stream_digital_capture; 2292 if (!p) 2293 p = &alc_pcm_digital_capture; 2294 info->stream[SNDRV_PCM_STREAM_CAPTURE] = *p; 2295 info->stream[SNDRV_PCM_STREAM_CAPTURE].nid = spec->dig_in_nid; 2296 } 2297 /* FIXME: do we need this for all Realtek codec models? */ 2298 codec->spdif_status_reset = 1; 2299 } 2300 2301 if (spec->no_analog) 2302 return 0; 2303 2304 /* If the use of more than one ADC is requested for the current 2305 * model, configure a second analog capture-only PCM. 2306 */ 2307 /* Additional Analaog capture for index #2 */ 2308 if (spec->alt_dac_nid || spec->num_adc_nids > 1) { 2309 codec->num_pcms = 3; 2310 info = spec->pcm_rec + 2; 2311 info->name = spec->stream_name_analog; 2312 if (spec->alt_dac_nid) { 2313 p = spec->stream_analog_alt_playback; 2314 if (!p) 2315 p = &alc_pcm_analog_alt_playback; 2316 info->stream[SNDRV_PCM_STREAM_PLAYBACK] = *p; 2317 info->stream[SNDRV_PCM_STREAM_PLAYBACK].nid = 2318 spec->alt_dac_nid; 2319 } else { 2320 info->stream[SNDRV_PCM_STREAM_PLAYBACK] = 2321 alc_pcm_null_stream; 2322 info->stream[SNDRV_PCM_STREAM_PLAYBACK].nid = 0; 2323 } 2324 if (spec->num_adc_nids > 1) { 2325 p = spec->stream_analog_alt_capture; 2326 if (!p) 2327 p = &alc_pcm_analog_alt_capture; 2328 info->stream[SNDRV_PCM_STREAM_CAPTURE] = *p; 2329 info->stream[SNDRV_PCM_STREAM_CAPTURE].nid = 2330 spec->adc_nids[1]; 2331 info->stream[SNDRV_PCM_STREAM_CAPTURE].substreams = 2332 spec->num_adc_nids - 1; 2333 } else { 2334 info->stream[SNDRV_PCM_STREAM_CAPTURE] = 2335 alc_pcm_null_stream; 2336 info->stream[SNDRV_PCM_STREAM_CAPTURE].nid = 0; 2337 } 2338 } 2339 2340 return 0; 2341 } 2342 2343 static inline void alc_shutup(struct hda_codec *codec) 2344 { 2345 struct alc_spec *spec = codec->spec; 2346 2347 if (spec && spec->shutup) 2348 spec->shutup(codec); 2349 snd_hda_shutup_pins(codec); 2350 } 2351 2352 static void alc_free_kctls(struct hda_codec *codec) 2353 { 2354 struct alc_spec *spec = codec->spec; 2355 2356 if (spec->kctls.list) { 2357 struct snd_kcontrol_new *kctl = spec->kctls.list; 2358 int i; 2359 for (i = 0; i < spec->kctls.used; i++) 2360 kfree(kctl[i].name); 2361 } 2362 snd_array_free(&spec->kctls); 2363 } 2364 2365 static void alc_free(struct hda_codec *codec) 2366 { 2367 struct alc_spec *spec = codec->spec; 2368 2369 if (!spec) 2370 return; 2371 2372 alc_shutup(codec); 2373 snd_hda_input_jack_free(codec); 2374 alc_free_kctls(codec); 2375 kfree(spec); 2376 snd_hda_detach_beep_device(codec); 2377 } 2378 2379 #ifdef CONFIG_SND_HDA_POWER_SAVE 2380 static void alc_power_eapd(struct hda_codec *codec) 2381 { 2382 alc_auto_setup_eapd(codec, false); 2383 } 2384 2385 static int alc_suspend(struct hda_codec *codec, pm_message_t state) 2386 { 2387 struct alc_spec *spec = codec->spec; 2388 alc_shutup(codec); 2389 if (spec && spec->power_hook) 2390 spec->power_hook(codec); 2391 return 0; 2392 } 2393 #endif 2394 2395 #ifdef CONFIG_PM 2396 static int alc_resume(struct hda_codec *codec) 2397 { 2398 msleep(150); /* to avoid pop noise */ 2399 codec->patch_ops.init(codec); 2400 snd_hda_codec_resume_amp(codec); 2401 snd_hda_codec_resume_cache(codec); 2402 hda_call_check_power_status(codec, 0x01); 2403 return 0; 2404 } 2405 #endif 2406 2407 /* 2408 */ 2409 static const struct hda_codec_ops alc_patch_ops = { 2410 .build_controls = alc_build_controls, 2411 .build_pcms = alc_build_pcms, 2412 .init = alc_init, 2413 .free = alc_free, 2414 .unsol_event = alc_unsol_event, 2415 #ifdef CONFIG_PM 2416 .resume = alc_resume, 2417 #endif 2418 #ifdef CONFIG_SND_HDA_POWER_SAVE 2419 .suspend = alc_suspend, 2420 .check_power_status = alc_check_power_status, 2421 #endif 2422 .reboot_notify = alc_shutup, 2423 }; 2424 2425 /* replace the codec chip_name with the given string */ 2426 static int alc_codec_rename(struct hda_codec *codec, const char *name) 2427 { 2428 kfree(codec->chip_name); 2429 codec->chip_name = kstrdup(name, GFP_KERNEL); 2430 if (!codec->chip_name) { 2431 alc_free(codec); 2432 return -ENOMEM; 2433 } 2434 return 0; 2435 } 2436 2437 /* 2438 * Automatic parse of I/O pins from the BIOS configuration 2439 */ 2440 2441 enum { 2442 ALC_CTL_WIDGET_VOL, 2443 ALC_CTL_WIDGET_MUTE, 2444 ALC_CTL_BIND_MUTE, 2445 }; 2446 static const struct snd_kcontrol_new alc_control_templates[] = { 2447 HDA_CODEC_VOLUME(NULL, 0, 0, 0), 2448 HDA_CODEC_MUTE(NULL, 0, 0, 0), 2449 HDA_BIND_MUTE(NULL, 0, 0, 0), 2450 }; 2451 2452 /* add dynamic controls */ 2453 static int add_control(struct alc_spec *spec, int type, const char *name, 2454 int cidx, unsigned long val) 2455 { 2456 struct snd_kcontrol_new *knew; 2457 2458 knew = alc_kcontrol_new(spec); 2459 if (!knew) 2460 return -ENOMEM; 2461 *knew = alc_control_templates[type]; 2462 knew->name = kstrdup(name, GFP_KERNEL); 2463 if (!knew->name) 2464 return -ENOMEM; 2465 knew->index = cidx; 2466 if (get_amp_nid_(val)) 2467 knew->subdevice = HDA_SUBDEV_AMP_FLAG; 2468 knew->private_value = val; 2469 return 0; 2470 } 2471 2472 static int add_control_with_pfx(struct alc_spec *spec, int type, 2473 const char *pfx, const char *dir, 2474 const char *sfx, int cidx, unsigned long val) 2475 { 2476 char name[32]; 2477 snprintf(name, sizeof(name), "%s %s %s", pfx, dir, sfx); 2478 return add_control(spec, type, name, cidx, val); 2479 } 2480 2481 #define add_pb_vol_ctrl(spec, type, pfx, val) \ 2482 add_control_with_pfx(spec, type, pfx, "Playback", "Volume", 0, val) 2483 #define add_pb_sw_ctrl(spec, type, pfx, val) \ 2484 add_control_with_pfx(spec, type, pfx, "Playback", "Switch", 0, val) 2485 #define __add_pb_vol_ctrl(spec, type, pfx, cidx, val) \ 2486 add_control_with_pfx(spec, type, pfx, "Playback", "Volume", cidx, val) 2487 #define __add_pb_sw_ctrl(spec, type, pfx, cidx, val) \ 2488 add_control_with_pfx(spec, type, pfx, "Playback", "Switch", cidx, val) 2489 2490 static const char *alc_get_line_out_pfx(struct alc_spec *spec, int ch, 2491 bool can_be_master, int *index) 2492 { 2493 struct auto_pin_cfg *cfg = &spec->autocfg; 2494 static const char * const chname[4] = { 2495 "Front", "Surround", NULL /*CLFE*/, "Side" 2496 }; 2497 2498 *index = 0; 2499 if (cfg->line_outs == 1 && !spec->multi_ios && 2500 !cfg->hp_outs && !cfg->speaker_outs && can_be_master) 2501 return "Master"; 2502 2503 switch (cfg->line_out_type) { 2504 case AUTO_PIN_SPEAKER_OUT: 2505 if (cfg->line_outs == 1) 2506 return "Speaker"; 2507 break; 2508 case AUTO_PIN_HP_OUT: 2509 /* for multi-io case, only the primary out */ 2510 if (ch && spec->multi_ios) 2511 break; 2512 *index = ch; 2513 return "Headphone"; 2514 default: 2515 if (cfg->line_outs == 1 && !spec->multi_ios) 2516 return "PCM"; 2517 break; 2518 } 2519 return chname[ch]; 2520 } 2521 2522 /* create input playback/capture controls for the given pin */ 2523 static int new_analog_input(struct alc_spec *spec, hda_nid_t pin, 2524 const char *ctlname, int ctlidx, 2525 int idx, hda_nid_t mix_nid) 2526 { 2527 int err; 2528 2529 err = __add_pb_vol_ctrl(spec, ALC_CTL_WIDGET_VOL, ctlname, ctlidx, 2530 HDA_COMPOSE_AMP_VAL(mix_nid, 3, idx, HDA_INPUT)); 2531 if (err < 0) 2532 return err; 2533 err = __add_pb_sw_ctrl(spec, ALC_CTL_WIDGET_MUTE, ctlname, ctlidx, 2534 HDA_COMPOSE_AMP_VAL(mix_nid, 3, idx, HDA_INPUT)); 2535 if (err < 0) 2536 return err; 2537 return 0; 2538 } 2539 2540 static int alc_is_input_pin(struct hda_codec *codec, hda_nid_t nid) 2541 { 2542 unsigned int pincap = snd_hda_query_pin_caps(codec, nid); 2543 return (pincap & AC_PINCAP_IN) != 0; 2544 } 2545 2546 /* Parse the codec tree and retrieve ADCs and corresponding capsrc MUXs */ 2547 static int alc_auto_fill_adc_caps(struct hda_codec *codec) 2548 { 2549 struct alc_spec *spec = codec->spec; 2550 hda_nid_t nid; 2551 hda_nid_t *adc_nids = spec->private_adc_nids; 2552 hda_nid_t *cap_nids = spec->private_capsrc_nids; 2553 int max_nums = ARRAY_SIZE(spec->private_adc_nids); 2554 bool indep_capsrc = false; 2555 int i, nums = 0; 2556 2557 nid = codec->start_nid; 2558 for (i = 0; i < codec->num_nodes; i++, nid++) { 2559 hda_nid_t src; 2560 const hda_nid_t *list; 2561 unsigned int caps = get_wcaps(codec, nid); 2562 int type = get_wcaps_type(caps); 2563 2564 if (type != AC_WID_AUD_IN || (caps & AC_WCAP_DIGITAL)) 2565 continue; 2566 adc_nids[nums] = nid; 2567 cap_nids[nums] = nid; 2568 src = nid; 2569 for (;;) { 2570 int n; 2571 type = get_wcaps_type(get_wcaps(codec, src)); 2572 if (type == AC_WID_PIN) 2573 break; 2574 if (type == AC_WID_AUD_SEL) { 2575 cap_nids[nums] = src; 2576 indep_capsrc = true; 2577 break; 2578 } 2579 n = snd_hda_get_conn_list(codec, src, &list); 2580 if (n > 1) { 2581 cap_nids[nums] = src; 2582 indep_capsrc = true; 2583 break; 2584 } else if (n != 1) 2585 break; 2586 src = *list; 2587 } 2588 if (++nums >= max_nums) 2589 break; 2590 } 2591 spec->adc_nids = spec->private_adc_nids; 2592 spec->capsrc_nids = spec->private_capsrc_nids; 2593 spec->num_adc_nids = nums; 2594 return nums; 2595 } 2596 2597 /* create playback/capture controls for input pins */ 2598 static int alc_auto_create_input_ctls(struct hda_codec *codec) 2599 { 2600 struct alc_spec *spec = codec->spec; 2601 const struct auto_pin_cfg *cfg = &spec->autocfg; 2602 hda_nid_t mixer = spec->mixer_nid; 2603 struct hda_input_mux *imux = &spec->private_imux[0]; 2604 int num_adcs; 2605 int i, c, err, idx, type_idx = 0; 2606 const char *prev_label = NULL; 2607 2608 num_adcs = alc_auto_fill_adc_caps(codec); 2609 if (num_adcs < 0) 2610 return 0; 2611 2612 for (i = 0; i < cfg->num_inputs; i++) { 2613 hda_nid_t pin; 2614 const char *label; 2615 2616 pin = cfg->inputs[i].pin; 2617 if (!alc_is_input_pin(codec, pin)) 2618 continue; 2619 2620 label = hda_get_autocfg_input_label(codec, cfg, i); 2621 if (prev_label && !strcmp(label, prev_label)) 2622 type_idx++; 2623 else 2624 type_idx = 0; 2625 prev_label = label; 2626 2627 if (mixer) { 2628 idx = get_connection_index(codec, mixer, pin); 2629 if (idx >= 0) { 2630 err = new_analog_input(spec, pin, 2631 label, type_idx, 2632 idx, mixer); 2633 if (err < 0) 2634 return err; 2635 } 2636 } 2637 2638 for (c = 0; c < num_adcs; c++) { 2639 hda_nid_t cap = spec->capsrc_nids ? 2640 spec->capsrc_nids[c] : spec->adc_nids[c]; 2641 idx = get_connection_index(codec, cap, pin); 2642 if (idx >= 0) { 2643 spec->imux_pins[imux->num_items] = pin; 2644 snd_hda_add_imux_item(imux, label, idx, NULL); 2645 break; 2646 } 2647 } 2648 } 2649 2650 spec->num_mux_defs = 1; 2651 spec->input_mux = imux; 2652 2653 return 0; 2654 } 2655 2656 static void alc_set_pin_output(struct hda_codec *codec, hda_nid_t nid, 2657 unsigned int pin_type) 2658 { 2659 snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_PIN_WIDGET_CONTROL, 2660 pin_type); 2661 /* unmute pin */ 2662 if (nid_has_mute(codec, nid, HDA_OUTPUT)) 2663 snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_AMP_GAIN_MUTE, 2664 AMP_OUT_UNMUTE); 2665 } 2666 2667 static int get_pin_type(int line_out_type) 2668 { 2669 if (line_out_type == AUTO_PIN_HP_OUT) 2670 return PIN_HP; 2671 else 2672 return PIN_OUT; 2673 } 2674 2675 static void alc_auto_init_analog_input(struct hda_codec *codec) 2676 { 2677 struct alc_spec *spec = codec->spec; 2678 struct auto_pin_cfg *cfg = &spec->autocfg; 2679 int i; 2680 2681 for (i = 0; i < cfg->num_inputs; i++) { 2682 hda_nid_t nid = cfg->inputs[i].pin; 2683 if (alc_is_input_pin(codec, nid)) { 2684 alc_set_input_pin(codec, nid, cfg->inputs[i].type); 2685 if (get_wcaps(codec, nid) & AC_WCAP_OUT_AMP) 2686 snd_hda_codec_write(codec, nid, 0, 2687 AC_VERB_SET_AMP_GAIN_MUTE, 2688 AMP_OUT_MUTE); 2689 } 2690 } 2691 2692 /* mute all loopback inputs */ 2693 if (spec->mixer_nid) { 2694 int nums = snd_hda_get_conn_list(codec, spec->mixer_nid, NULL); 2695 for (i = 0; i < nums; i++) 2696 snd_hda_codec_write(codec, spec->mixer_nid, 0, 2697 AC_VERB_SET_AMP_GAIN_MUTE, 2698 AMP_IN_MUTE(i)); 2699 } 2700 } 2701 2702 /* convert from MIX nid to DAC */ 2703 static hda_nid_t alc_auto_mix_to_dac(struct hda_codec *codec, hda_nid_t nid) 2704 { 2705 hda_nid_t list[5]; 2706 int i, num; 2707 2708 if (get_wcaps_type(get_wcaps(codec, nid)) == AC_WID_AUD_OUT) 2709 return nid; 2710 num = snd_hda_get_connections(codec, nid, list, ARRAY_SIZE(list)); 2711 for (i = 0; i < num; i++) { 2712 if (get_wcaps_type(get_wcaps(codec, list[i])) == AC_WID_AUD_OUT) 2713 return list[i]; 2714 } 2715 return 0; 2716 } 2717 2718 /* go down to the selector widget before the mixer */ 2719 static hda_nid_t alc_go_down_to_selector(struct hda_codec *codec, hda_nid_t pin) 2720 { 2721 hda_nid_t srcs[5]; 2722 int num = snd_hda_get_connections(codec, pin, srcs, 2723 ARRAY_SIZE(srcs)); 2724 if (num != 1 || 2725 get_wcaps_type(get_wcaps(codec, srcs[0])) != AC_WID_AUD_SEL) 2726 return pin; 2727 return srcs[0]; 2728 } 2729 2730 /* get MIX nid connected to the given pin targeted to DAC */ 2731 static hda_nid_t alc_auto_dac_to_mix(struct hda_codec *codec, hda_nid_t pin, 2732 hda_nid_t dac) 2733 { 2734 hda_nid_t mix[5]; 2735 int i, num; 2736 2737 pin = alc_go_down_to_selector(codec, pin); 2738 num = snd_hda_get_connections(codec, pin, mix, ARRAY_SIZE(mix)); 2739 for (i = 0; i < num; i++) { 2740 if (alc_auto_mix_to_dac(codec, mix[i]) == dac) 2741 return mix[i]; 2742 } 2743 return 0; 2744 } 2745 2746 /* select the connection from pin to DAC if needed */ 2747 static int alc_auto_select_dac(struct hda_codec *codec, hda_nid_t pin, 2748 hda_nid_t dac) 2749 { 2750 hda_nid_t mix[5]; 2751 int i, num; 2752 2753 pin = alc_go_down_to_selector(codec, pin); 2754 num = snd_hda_get_connections(codec, pin, mix, ARRAY_SIZE(mix)); 2755 if (num < 2) 2756 return 0; 2757 for (i = 0; i < num; i++) { 2758 if (alc_auto_mix_to_dac(codec, mix[i]) == dac) { 2759 snd_hda_codec_update_cache(codec, pin, 0, 2760 AC_VERB_SET_CONNECT_SEL, i); 2761 return 0; 2762 } 2763 } 2764 return 0; 2765 } 2766 2767 /* look for an empty DAC slot */ 2768 static hda_nid_t alc_auto_look_for_dac(struct hda_codec *codec, hda_nid_t pin) 2769 { 2770 struct alc_spec *spec = codec->spec; 2771 hda_nid_t srcs[5]; 2772 int i, num; 2773 2774 pin = alc_go_down_to_selector(codec, pin); 2775 num = snd_hda_get_connections(codec, pin, srcs, ARRAY_SIZE(srcs)); 2776 for (i = 0; i < num; i++) { 2777 hda_nid_t nid = alc_auto_mix_to_dac(codec, srcs[i]); 2778 if (!nid) 2779 continue; 2780 if (found_in_nid_list(nid, spec->multiout.dac_nids, 2781 spec->multiout.num_dacs)) 2782 continue; 2783 if (spec->multiout.hp_nid == nid) 2784 continue; 2785 if (found_in_nid_list(nid, spec->multiout.extra_out_nid, 2786 ARRAY_SIZE(spec->multiout.extra_out_nid))) 2787 continue; 2788 return nid; 2789 } 2790 return 0; 2791 } 2792 2793 static hda_nid_t get_dac_if_single(struct hda_codec *codec, hda_nid_t pin) 2794 { 2795 hda_nid_t sel = alc_go_down_to_selector(codec, pin); 2796 if (snd_hda_get_conn_list(codec, sel, NULL) == 1) 2797 return alc_auto_look_for_dac(codec, pin); 2798 return 0; 2799 } 2800 2801 /* fill in the dac_nids table from the parsed pin configuration */ 2802 static int alc_auto_fill_dac_nids(struct hda_codec *codec) 2803 { 2804 struct alc_spec *spec = codec->spec; 2805 const struct auto_pin_cfg *cfg = &spec->autocfg; 2806 bool redone = false; 2807 int i; 2808 2809 again: 2810 /* set num_dacs once to full for alc_auto_look_for_dac() */ 2811 spec->multiout.num_dacs = cfg->line_outs; 2812 spec->multiout.hp_nid = 0; 2813 spec->multiout.extra_out_nid[0] = 0; 2814 memset(spec->private_dac_nids, 0, sizeof(spec->private_dac_nids)); 2815 spec->multiout.dac_nids = spec->private_dac_nids; 2816 2817 /* fill hard-wired DACs first */ 2818 if (!redone) { 2819 for (i = 0; i < cfg->line_outs; i++) 2820 spec->private_dac_nids[i] = 2821 get_dac_if_single(codec, cfg->line_out_pins[i]); 2822 if (cfg->hp_outs) 2823 spec->multiout.hp_nid = 2824 get_dac_if_single(codec, cfg->hp_pins[0]); 2825 if (cfg->speaker_outs) 2826 spec->multiout.extra_out_nid[0] = 2827 get_dac_if_single(codec, cfg->speaker_pins[0]); 2828 } 2829 2830 for (i = 0; i < cfg->line_outs; i++) { 2831 hda_nid_t pin = cfg->line_out_pins[i]; 2832 if (spec->private_dac_nids[i]) 2833 continue; 2834 spec->private_dac_nids[i] = alc_auto_look_for_dac(codec, pin); 2835 if (!spec->private_dac_nids[i] && !redone) { 2836 /* if we can't find primary DACs, re-probe without 2837 * checking the hard-wired DACs 2838 */ 2839 redone = true; 2840 goto again; 2841 } 2842 } 2843 2844 /* re-count num_dacs and squash invalid entries */ 2845 spec->multiout.num_dacs = 0; 2846 for (i = 0; i < cfg->line_outs; i++) { 2847 if (spec->private_dac_nids[i]) 2848 spec->multiout.num_dacs++; 2849 else 2850 memmove(spec->private_dac_nids + i, 2851 spec->private_dac_nids + i + 1, 2852 sizeof(hda_nid_t) * (cfg->line_outs - i - 1)); 2853 } 2854 2855 if (cfg->hp_outs && !spec->multiout.hp_nid) 2856 spec->multiout.hp_nid = 2857 alc_auto_look_for_dac(codec, cfg->hp_pins[0]); 2858 if (cfg->speaker_outs && !spec->multiout.extra_out_nid[0]) 2859 spec->multiout.extra_out_nid[0] = 2860 alc_auto_look_for_dac(codec, cfg->speaker_pins[0]); 2861 2862 return 0; 2863 } 2864 2865 static int alc_auto_add_vol_ctl(struct hda_codec *codec, 2866 const char *pfx, int cidx, 2867 hda_nid_t nid, unsigned int chs) 2868 { 2869 if (!nid) 2870 return 0; 2871 return __add_pb_vol_ctrl(codec->spec, ALC_CTL_WIDGET_VOL, pfx, cidx, 2872 HDA_COMPOSE_AMP_VAL(nid, chs, 0, HDA_OUTPUT)); 2873 } 2874 2875 #define alc_auto_add_stereo_vol(codec, pfx, cidx, nid) \ 2876 alc_auto_add_vol_ctl(codec, pfx, cidx, nid, 3) 2877 2878 /* create a mute-switch for the given mixer widget; 2879 * if it has multiple sources (e.g. DAC and loopback), create a bind-mute 2880 */ 2881 static int alc_auto_add_sw_ctl(struct hda_codec *codec, 2882 const char *pfx, int cidx, 2883 hda_nid_t nid, unsigned int chs) 2884 { 2885 int wid_type; 2886 int type; 2887 unsigned long val; 2888 if (!nid) 2889 return 0; 2890 wid_type = get_wcaps_type(get_wcaps(codec, nid)); 2891 if (wid_type == AC_WID_PIN || wid_type == AC_WID_AUD_OUT) { 2892 type = ALC_CTL_WIDGET_MUTE; 2893 val = HDA_COMPOSE_AMP_VAL(nid, chs, 0, HDA_OUTPUT); 2894 } else if (snd_hda_get_conn_list(codec, nid, NULL) == 1) { 2895 type = ALC_CTL_WIDGET_MUTE; 2896 val = HDA_COMPOSE_AMP_VAL(nid, chs, 0, HDA_INPUT); 2897 } else { 2898 type = ALC_CTL_BIND_MUTE; 2899 val = HDA_COMPOSE_AMP_VAL(nid, chs, 2, HDA_INPUT); 2900 } 2901 return __add_pb_sw_ctrl(codec->spec, type, pfx, cidx, val); 2902 } 2903 2904 #define alc_auto_add_stereo_sw(codec, pfx, cidx, nid) \ 2905 alc_auto_add_sw_ctl(codec, pfx, cidx, nid, 3) 2906 2907 static hda_nid_t alc_look_for_out_mute_nid(struct hda_codec *codec, 2908 hda_nid_t pin, hda_nid_t dac) 2909 { 2910 hda_nid_t mix = alc_auto_dac_to_mix(codec, pin, dac); 2911 if (nid_has_mute(codec, pin, HDA_OUTPUT)) 2912 return pin; 2913 else if (mix && nid_has_mute(codec, mix, HDA_INPUT)) 2914 return mix; 2915 else if (nid_has_mute(codec, dac, HDA_OUTPUT)) 2916 return dac; 2917 return 0; 2918 } 2919 2920 static hda_nid_t alc_look_for_out_vol_nid(struct hda_codec *codec, 2921 hda_nid_t pin, hda_nid_t dac) 2922 { 2923 hda_nid_t mix = alc_auto_dac_to_mix(codec, pin, dac); 2924 if (nid_has_volume(codec, dac, HDA_OUTPUT)) 2925 return dac; 2926 else if (nid_has_volume(codec, mix, HDA_OUTPUT)) 2927 return mix; 2928 else if (nid_has_volume(codec, pin, HDA_OUTPUT)) 2929 return pin; 2930 return 0; 2931 } 2932 2933 /* add playback controls from the parsed DAC table */ 2934 static int alc_auto_create_multi_out_ctls(struct hda_codec *codec, 2935 const struct auto_pin_cfg *cfg) 2936 { 2937 struct alc_spec *spec = codec->spec; 2938 int i, err, noutputs; 2939 2940 noutputs = cfg->line_outs; 2941 if (spec->multi_ios > 0) 2942 noutputs += spec->multi_ios; 2943 2944 for (i = 0; i < noutputs; i++) { 2945 const char *name; 2946 int index; 2947 hda_nid_t dac, pin; 2948 hda_nid_t sw, vol; 2949 2950 dac = spec->multiout.dac_nids[i]; 2951 if (!dac) 2952 continue; 2953 if (i >= cfg->line_outs) 2954 pin = spec->multi_io[i - 1].pin; 2955 else 2956 pin = cfg->line_out_pins[i]; 2957 2958 sw = alc_look_for_out_mute_nid(codec, pin, dac); 2959 vol = alc_look_for_out_vol_nid(codec, pin, dac); 2960 name = alc_get_line_out_pfx(spec, i, true, &index); 2961 if (!name) { 2962 /* Center/LFE */ 2963 err = alc_auto_add_vol_ctl(codec, "Center", 0, vol, 1); 2964 if (err < 0) 2965 return err; 2966 err = alc_auto_add_vol_ctl(codec, "LFE", 0, vol, 2); 2967 if (err < 0) 2968 return err; 2969 err = alc_auto_add_sw_ctl(codec, "Center", 0, sw, 1); 2970 if (err < 0) 2971 return err; 2972 err = alc_auto_add_sw_ctl(codec, "LFE", 0, sw, 2); 2973 if (err < 0) 2974 return err; 2975 } else { 2976 err = alc_auto_add_stereo_vol(codec, name, index, vol); 2977 if (err < 0) 2978 return err; 2979 err = alc_auto_add_stereo_sw(codec, name, index, sw); 2980 if (err < 0) 2981 return err; 2982 } 2983 } 2984 return 0; 2985 } 2986 2987 /* add playback controls for speaker and HP outputs */ 2988 static int alc_auto_create_extra_out(struct hda_codec *codec, hda_nid_t pin, 2989 hda_nid_t dac, const char *pfx) 2990 { 2991 struct alc_spec *spec = codec->spec; 2992 hda_nid_t sw, vol; 2993 int err; 2994 2995 if (!pin) 2996 return 0; 2997 if (!dac) { 2998 /* the corresponding DAC is already occupied */ 2999 if (!(get_wcaps(codec, pin) & AC_WCAP_OUT_AMP)) 3000 return 0; /* no way */ 3001 /* create a switch only */ 3002 return add_pb_sw_ctrl(spec, ALC_CTL_WIDGET_MUTE, pfx, 3003 HDA_COMPOSE_AMP_VAL(pin, 3, 0, HDA_OUTPUT)); 3004 } 3005 3006 sw = alc_look_for_out_mute_nid(codec, pin, dac); 3007 vol = alc_look_for_out_vol_nid(codec, pin, dac); 3008 err = alc_auto_add_stereo_vol(codec, pfx, 0, vol); 3009 if (err < 0) 3010 return err; 3011 err = alc_auto_add_stereo_sw(codec, pfx, 0, sw); 3012 if (err < 0) 3013 return err; 3014 return 0; 3015 } 3016 3017 static int alc_auto_create_hp_out(struct hda_codec *codec) 3018 { 3019 struct alc_spec *spec = codec->spec; 3020 return alc_auto_create_extra_out(codec, spec->autocfg.hp_pins[0], 3021 spec->multiout.hp_nid, 3022 "Headphone"); 3023 } 3024 3025 static int alc_auto_create_speaker_out(struct hda_codec *codec) 3026 { 3027 struct alc_spec *spec = codec->spec; 3028 return alc_auto_create_extra_out(codec, spec->autocfg.speaker_pins[0], 3029 spec->multiout.extra_out_nid[0], 3030 "Speaker"); 3031 } 3032 3033 static void alc_auto_set_output_and_unmute(struct hda_codec *codec, 3034 hda_nid_t pin, int pin_type, 3035 hda_nid_t dac) 3036 { 3037 int i, num; 3038 hda_nid_t nid, mix = 0; 3039 hda_nid_t srcs[HDA_MAX_CONNECTIONS]; 3040 3041 alc_set_pin_output(codec, pin, pin_type); 3042 nid = alc_go_down_to_selector(codec, pin); 3043 num = snd_hda_get_connections(codec, nid, srcs, ARRAY_SIZE(srcs)); 3044 for (i = 0; i < num; i++) { 3045 if (alc_auto_mix_to_dac(codec, srcs[i]) != dac) 3046 continue; 3047 mix = srcs[i]; 3048 break; 3049 } 3050 if (!mix) 3051 return; 3052 3053 /* need the manual connection? */ 3054 if (num > 1) 3055 snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_CONNECT_SEL, i); 3056 /* unmute mixer widget inputs */ 3057 if (nid_has_mute(codec, mix, HDA_INPUT)) { 3058 snd_hda_codec_write(codec, mix, 0, AC_VERB_SET_AMP_GAIN_MUTE, 3059 AMP_IN_UNMUTE(0)); 3060 snd_hda_codec_write(codec, mix, 0, AC_VERB_SET_AMP_GAIN_MUTE, 3061 AMP_IN_UNMUTE(1)); 3062 } 3063 /* initialize volume */ 3064 nid = alc_look_for_out_vol_nid(codec, pin, dac); 3065 if (nid) 3066 snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_AMP_GAIN_MUTE, 3067 AMP_OUT_ZERO); 3068 } 3069 3070 static void alc_auto_init_multi_out(struct hda_codec *codec) 3071 { 3072 struct alc_spec *spec = codec->spec; 3073 int pin_type = get_pin_type(spec->autocfg.line_out_type); 3074 int i; 3075 3076 for (i = 0; i <= HDA_SIDE; i++) { 3077 hda_nid_t nid = spec->autocfg.line_out_pins[i]; 3078 if (nid) 3079 alc_auto_set_output_and_unmute(codec, nid, pin_type, 3080 spec->multiout.dac_nids[i]); 3081 } 3082 } 3083 3084 static void alc_auto_init_extra_out(struct hda_codec *codec) 3085 { 3086 struct alc_spec *spec = codec->spec; 3087 hda_nid_t pin, dac; 3088 3089 pin = spec->autocfg.hp_pins[0]; 3090 if (pin) { 3091 dac = spec->multiout.hp_nid; 3092 if (!dac) 3093 dac = spec->multiout.dac_nids[0]; 3094 alc_auto_set_output_and_unmute(codec, pin, PIN_HP, dac); 3095 } 3096 pin = spec->autocfg.speaker_pins[0]; 3097 if (pin) { 3098 dac = spec->multiout.extra_out_nid[0]; 3099 if (!dac) 3100 dac = spec->multiout.dac_nids[0]; 3101 alc_auto_set_output_and_unmute(codec, pin, PIN_OUT, dac); 3102 } 3103 } 3104 3105 /* 3106 * multi-io helper 3107 */ 3108 static int alc_auto_fill_multi_ios(struct hda_codec *codec, 3109 unsigned int location) 3110 { 3111 struct alc_spec *spec = codec->spec; 3112 struct auto_pin_cfg *cfg = &spec->autocfg; 3113 int type, i, num_pins = 0; 3114 3115 for (type = AUTO_PIN_LINE_IN; type >= AUTO_PIN_MIC; type--) { 3116 for (i = 0; i < cfg->num_inputs; i++) { 3117 hda_nid_t nid = cfg->inputs[i].pin; 3118 hda_nid_t dac; 3119 unsigned int defcfg, caps; 3120 if (cfg->inputs[i].type != type) 3121 continue; 3122 defcfg = snd_hda_codec_get_pincfg(codec, nid); 3123 if (get_defcfg_connect(defcfg) != AC_JACK_PORT_COMPLEX) 3124 continue; 3125 if (location && get_defcfg_location(defcfg) != location) 3126 continue; 3127 caps = snd_hda_query_pin_caps(codec, nid); 3128 if (!(caps & AC_PINCAP_OUT)) 3129 continue; 3130 dac = alc_auto_look_for_dac(codec, nid); 3131 if (!dac) 3132 continue; 3133 spec->multi_io[num_pins].pin = nid; 3134 spec->multi_io[num_pins].dac = dac; 3135 num_pins++; 3136 spec->private_dac_nids[spec->multiout.num_dacs++] = dac; 3137 } 3138 } 3139 spec->multiout.num_dacs = 1; 3140 if (num_pins < 2) 3141 return 0; 3142 return num_pins; 3143 } 3144 3145 static int alc_auto_ch_mode_info(struct snd_kcontrol *kcontrol, 3146 struct snd_ctl_elem_info *uinfo) 3147 { 3148 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 3149 struct alc_spec *spec = codec->spec; 3150 3151 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; 3152 uinfo->count = 1; 3153 uinfo->value.enumerated.items = spec->multi_ios + 1; 3154 if (uinfo->value.enumerated.item > spec->multi_ios) 3155 uinfo->value.enumerated.item = spec->multi_ios; 3156 sprintf(uinfo->value.enumerated.name, "%dch", 3157 (uinfo->value.enumerated.item + 1) * 2); 3158 return 0; 3159 } 3160 3161 static int alc_auto_ch_mode_get(struct snd_kcontrol *kcontrol, 3162 struct snd_ctl_elem_value *ucontrol) 3163 { 3164 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 3165 struct alc_spec *spec = codec->spec; 3166 ucontrol->value.enumerated.item[0] = (spec->ext_channel_count - 1) / 2; 3167 return 0; 3168 } 3169 3170 static int alc_set_multi_io(struct hda_codec *codec, int idx, bool output) 3171 { 3172 struct alc_spec *spec = codec->spec; 3173 hda_nid_t nid = spec->multi_io[idx].pin; 3174 3175 if (!spec->multi_io[idx].ctl_in) 3176 spec->multi_io[idx].ctl_in = 3177 snd_hda_codec_read(codec, nid, 0, 3178 AC_VERB_GET_PIN_WIDGET_CONTROL, 0); 3179 if (output) { 3180 snd_hda_codec_update_cache(codec, nid, 0, 3181 AC_VERB_SET_PIN_WIDGET_CONTROL, 3182 PIN_OUT); 3183 if (get_wcaps(codec, nid) & AC_WCAP_OUT_AMP) 3184 snd_hda_codec_amp_stereo(codec, nid, HDA_OUTPUT, 0, 3185 HDA_AMP_MUTE, 0); 3186 alc_auto_select_dac(codec, nid, spec->multi_io[idx].dac); 3187 } else { 3188 if (get_wcaps(codec, nid) & AC_WCAP_OUT_AMP) 3189 snd_hda_codec_amp_stereo(codec, nid, HDA_OUTPUT, 0, 3190 HDA_AMP_MUTE, HDA_AMP_MUTE); 3191 snd_hda_codec_update_cache(codec, nid, 0, 3192 AC_VERB_SET_PIN_WIDGET_CONTROL, 3193 spec->multi_io[idx].ctl_in); 3194 } 3195 return 0; 3196 } 3197 3198 static int alc_auto_ch_mode_put(struct snd_kcontrol *kcontrol, 3199 struct snd_ctl_elem_value *ucontrol) 3200 { 3201 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 3202 struct alc_spec *spec = codec->spec; 3203 int i, ch; 3204 3205 ch = ucontrol->value.enumerated.item[0]; 3206 if (ch < 0 || ch > spec->multi_ios) 3207 return -EINVAL; 3208 if (ch == (spec->ext_channel_count - 1) / 2) 3209 return 0; 3210 spec->ext_channel_count = (ch + 1) * 2; 3211 for (i = 0; i < spec->multi_ios; i++) 3212 alc_set_multi_io(codec, i, i < ch); 3213 spec->multiout.max_channels = spec->ext_channel_count; 3214 if (spec->need_dac_fix && !spec->const_channel_count) 3215 spec->multiout.num_dacs = spec->multiout.max_channels / 2; 3216 return 1; 3217 } 3218 3219 static const struct snd_kcontrol_new alc_auto_channel_mode_enum = { 3220 .iface = SNDRV_CTL_ELEM_IFACE_MIXER, 3221 .name = "Channel Mode", 3222 .info = alc_auto_ch_mode_info, 3223 .get = alc_auto_ch_mode_get, 3224 .put = alc_auto_ch_mode_put, 3225 }; 3226 3227 static int alc_auto_add_multi_channel_mode(struct hda_codec *codec, 3228 int (*fill_dac)(struct hda_codec *)) 3229 { 3230 struct alc_spec *spec = codec->spec; 3231 struct auto_pin_cfg *cfg = &spec->autocfg; 3232 unsigned int location, defcfg; 3233 int num_pins; 3234 3235 if (cfg->line_out_type == AUTO_PIN_SPEAKER_OUT && cfg->hp_outs == 1) { 3236 /* use HP as primary out */ 3237 cfg->speaker_outs = cfg->line_outs; 3238 memcpy(cfg->speaker_pins, cfg->line_out_pins, 3239 sizeof(cfg->speaker_pins)); 3240 cfg->line_outs = cfg->hp_outs; 3241 memcpy(cfg->line_out_pins, cfg->hp_pins, sizeof(cfg->hp_pins)); 3242 cfg->hp_outs = 0; 3243 memset(cfg->hp_pins, 0, sizeof(cfg->hp_pins)); 3244 cfg->line_out_type = AUTO_PIN_HP_OUT; 3245 if (fill_dac) 3246 fill_dac(codec); 3247 } 3248 if (cfg->line_outs != 1 || 3249 cfg->line_out_type == AUTO_PIN_SPEAKER_OUT) 3250 return 0; 3251 3252 defcfg = snd_hda_codec_get_pincfg(codec, cfg->line_out_pins[0]); 3253 location = get_defcfg_location(defcfg); 3254 3255 num_pins = alc_auto_fill_multi_ios(codec, location); 3256 if (num_pins > 0) { 3257 struct snd_kcontrol_new *knew; 3258 3259 knew = alc_kcontrol_new(spec); 3260 if (!knew) 3261 return -ENOMEM; 3262 *knew = alc_auto_channel_mode_enum; 3263 knew->name = kstrdup("Channel Mode", GFP_KERNEL); 3264 if (!knew->name) 3265 return -ENOMEM; 3266 3267 spec->multi_ios = num_pins; 3268 spec->ext_channel_count = 2; 3269 spec->multiout.num_dacs = num_pins + 1; 3270 } 3271 return 0; 3272 } 3273 3274 /* filter out invalid adc_nids (and capsrc_nids) that don't give all 3275 * active input pins 3276 */ 3277 static void alc_remove_invalid_adc_nids(struct hda_codec *codec) 3278 { 3279 struct alc_spec *spec = codec->spec; 3280 const struct hda_input_mux *imux; 3281 hda_nid_t adc_nids[ARRAY_SIZE(spec->private_adc_nids)]; 3282 hda_nid_t capsrc_nids[ARRAY_SIZE(spec->private_adc_nids)]; 3283 int i, n, nums; 3284 3285 imux = spec->input_mux; 3286 if (!imux) 3287 return; 3288 if (spec->dyn_adc_switch) 3289 return; 3290 3291 nums = 0; 3292 for (n = 0; n < spec->num_adc_nids; n++) { 3293 hda_nid_t cap = spec->private_capsrc_nids[n]; 3294 int num_conns = snd_hda_get_conn_list(codec, cap, NULL); 3295 for (i = 0; i < imux->num_items; i++) { 3296 hda_nid_t pin = spec->imux_pins[i]; 3297 if (pin) { 3298 if (get_connection_index(codec, cap, pin) < 0) 3299 break; 3300 } else if (num_conns <= imux->items[i].index) 3301 break; 3302 } 3303 if (i >= imux->num_items) { 3304 adc_nids[nums] = spec->private_adc_nids[n]; 3305 capsrc_nids[nums++] = cap; 3306 } 3307 } 3308 if (!nums) { 3309 /* check whether ADC-switch is possible */ 3310 if (!alc_check_dyn_adc_switch(codec)) { 3311 printk(KERN_WARNING "hda_codec: %s: no valid ADC found;" 3312 " using fallback 0x%x\n", 3313 codec->chip_name, spec->private_adc_nids[0]); 3314 spec->num_adc_nids = 1; 3315 spec->auto_mic = 0; 3316 return; 3317 } 3318 } else if (nums != spec->num_adc_nids) { 3319 memcpy(spec->private_adc_nids, adc_nids, 3320 nums * sizeof(hda_nid_t)); 3321 memcpy(spec->private_capsrc_nids, capsrc_nids, 3322 nums * sizeof(hda_nid_t)); 3323 spec->num_adc_nids = nums; 3324 } 3325 3326 if (spec->auto_mic) 3327 alc_auto_mic_check_imux(codec); /* check auto-mic setups */ 3328 else if (spec->input_mux->num_items == 1) 3329 spec->num_adc_nids = 1; /* reduce to a single ADC */ 3330 } 3331 3332 /* 3333 * initialize ADC paths 3334 */ 3335 static void alc_auto_init_adc(struct hda_codec *codec, int adc_idx) 3336 { 3337 struct alc_spec *spec = codec->spec; 3338 hda_nid_t nid; 3339 3340 nid = spec->adc_nids[adc_idx]; 3341 /* mute ADC */ 3342 if (nid_has_mute(codec, nid, HDA_INPUT)) { 3343 snd_hda_codec_write(codec, nid, 0, 3344 AC_VERB_SET_AMP_GAIN_MUTE, 3345 AMP_IN_MUTE(0)); 3346 return; 3347 } 3348 if (!spec->capsrc_nids) 3349 return; 3350 nid = spec->capsrc_nids[adc_idx]; 3351 if (nid_has_mute(codec, nid, HDA_OUTPUT)) 3352 snd_hda_codec_write(codec, nid, 0, 3353 AC_VERB_SET_AMP_GAIN_MUTE, 3354 AMP_OUT_MUTE); 3355 } 3356 3357 static void alc_auto_init_input_src(struct hda_codec *codec) 3358 { 3359 struct alc_spec *spec = codec->spec; 3360 int c, nums; 3361 3362 for (c = 0; c < spec->num_adc_nids; c++) 3363 alc_auto_init_adc(codec, c); 3364 if (spec->dyn_adc_switch) 3365 nums = 1; 3366 else 3367 nums = spec->num_adc_nids; 3368 for (c = 0; c < nums; c++) 3369 alc_mux_select(codec, 0, spec->cur_mux[c], true); 3370 } 3371 3372 /* add mic boosts if needed */ 3373 static int alc_auto_add_mic_boost(struct hda_codec *codec) 3374 { 3375 struct alc_spec *spec = codec->spec; 3376 struct auto_pin_cfg *cfg = &spec->autocfg; 3377 int i, err; 3378 int type_idx = 0; 3379 hda_nid_t nid; 3380 const char *prev_label = NULL; 3381 3382 for (i = 0; i < cfg->num_inputs; i++) { 3383 if (cfg->inputs[i].type > AUTO_PIN_MIC) 3384 break; 3385 nid = cfg->inputs[i].pin; 3386 if (get_wcaps(codec, nid) & AC_WCAP_IN_AMP) { 3387 const char *label; 3388 char boost_label[32]; 3389 3390 label = hda_get_autocfg_input_label(codec, cfg, i); 3391 if (prev_label && !strcmp(label, prev_label)) 3392 type_idx++; 3393 else 3394 type_idx = 0; 3395 prev_label = label; 3396 3397 snprintf(boost_label, sizeof(boost_label), 3398 "%s Boost Volume", label); 3399 err = add_control(spec, ALC_CTL_WIDGET_VOL, 3400 boost_label, type_idx, 3401 HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_INPUT)); 3402 if (err < 0) 3403 return err; 3404 } 3405 } 3406 return 0; 3407 } 3408 3409 /* select or unmute the given capsrc route */ 3410 static void select_or_unmute_capsrc(struct hda_codec *codec, hda_nid_t cap, 3411 int idx) 3412 { 3413 if (get_wcaps_type(get_wcaps(codec, cap)) == AC_WID_AUD_MIX) { 3414 snd_hda_codec_amp_stereo(codec, cap, HDA_INPUT, idx, 3415 HDA_AMP_MUTE, 0); 3416 } else if (snd_hda_get_conn_list(codec, cap, NULL) > 1) { 3417 snd_hda_codec_write_cache(codec, cap, 0, 3418 AC_VERB_SET_CONNECT_SEL, idx); 3419 } 3420 } 3421 3422 /* set the default connection to that pin */ 3423 static int init_capsrc_for_pin(struct hda_codec *codec, hda_nid_t pin) 3424 { 3425 struct alc_spec *spec = codec->spec; 3426 int i; 3427 3428 if (!pin) 3429 return 0; 3430 for (i = 0; i < spec->num_adc_nids; i++) { 3431 hda_nid_t cap = spec->capsrc_nids ? 3432 spec->capsrc_nids[i] : spec->adc_nids[i]; 3433 int idx; 3434 3435 idx = get_connection_index(codec, cap, pin); 3436 if (idx < 0) 3437 continue; 3438 select_or_unmute_capsrc(codec, cap, idx); 3439 return i; /* return the found index */ 3440 } 3441 return -1; /* not found */ 3442 } 3443 3444 /* initialize some special cases for input sources */ 3445 static void alc_init_special_input_src(struct hda_codec *codec) 3446 { 3447 struct alc_spec *spec = codec->spec; 3448 int i; 3449 3450 for (i = 0; i < spec->autocfg.num_inputs; i++) 3451 init_capsrc_for_pin(codec, spec->autocfg.inputs[i].pin); 3452 } 3453 3454 /* assign appropriate capture mixers */ 3455 static void set_capture_mixer(struct hda_codec *codec) 3456 { 3457 struct alc_spec *spec = codec->spec; 3458 static const struct snd_kcontrol_new *caps[2][3] = { 3459 { alc_capture_mixer_nosrc1, 3460 alc_capture_mixer_nosrc2, 3461 alc_capture_mixer_nosrc3 }, 3462 { alc_capture_mixer1, 3463 alc_capture_mixer2, 3464 alc_capture_mixer3 }, 3465 }; 3466 3467 /* check whether either of ADC or MUX has a volume control */ 3468 if (!nid_has_volume(codec, spec->adc_nids[0], HDA_INPUT)) { 3469 if (!spec->capsrc_nids) 3470 return; /* no volume */ 3471 if (!nid_has_volume(codec, spec->capsrc_nids[0], HDA_OUTPUT)) 3472 return; /* no volume in capsrc, too */ 3473 spec->vol_in_capsrc = 1; 3474 } 3475 3476 if (spec->num_adc_nids > 0) { 3477 int mux = 0; 3478 int num_adcs = 0; 3479 3480 if (spec->input_mux && spec->input_mux->num_items > 1) 3481 mux = 1; 3482 if (spec->auto_mic) { 3483 num_adcs = 1; 3484 mux = 0; 3485 } else if (spec->dyn_adc_switch) 3486 num_adcs = 1; 3487 if (!num_adcs) { 3488 if (spec->num_adc_nids > 3) 3489 spec->num_adc_nids = 3; 3490 else if (!spec->num_adc_nids) 3491 return; 3492 num_adcs = spec->num_adc_nids; 3493 } 3494 spec->cap_mixer = caps[mux][num_adcs - 1]; 3495 } 3496 } 3497 3498 /* 3499 * standard auto-parser initializations 3500 */ 3501 static void alc_auto_init_std(struct hda_codec *codec) 3502 { 3503 struct alc_spec *spec = codec->spec; 3504 alc_auto_init_multi_out(codec); 3505 alc_auto_init_extra_out(codec); 3506 alc_auto_init_analog_input(codec); 3507 alc_auto_init_input_src(codec); 3508 alc_auto_init_digital(codec); 3509 if (spec->unsol_event) 3510 alc_inithook(codec); 3511 } 3512 3513 /* 3514 * Digital-beep handlers 3515 */ 3516 #ifdef CONFIG_SND_HDA_INPUT_BEEP 3517 #define set_beep_amp(spec, nid, idx, dir) \ 3518 ((spec)->beep_amp = HDA_COMPOSE_AMP_VAL(nid, 3, idx, dir)) 3519 3520 static const struct snd_pci_quirk beep_white_list[] = { 3521 SND_PCI_QUIRK(0x1043, 0x829f, "ASUS", 1), 3522 SND_PCI_QUIRK(0x1043, 0x83ce, "EeePC", 1), 3523 SND_PCI_QUIRK(0x1043, 0x831a, "EeePC", 1), 3524 SND_PCI_QUIRK(0x1043, 0x834a, "EeePC", 1), 3525 SND_PCI_QUIRK(0x8086, 0xd613, "Intel", 1), 3526 {} 3527 }; 3528 3529 static inline int has_cdefine_beep(struct hda_codec *codec) 3530 { 3531 struct alc_spec *spec = codec->spec; 3532 const struct snd_pci_quirk *q; 3533 q = snd_pci_quirk_lookup(codec->bus->pci, beep_white_list); 3534 if (q) 3535 return q->value; 3536 return spec->cdefine.enable_pcbeep; 3537 } 3538 #else 3539 #define set_beep_amp(spec, nid, idx, dir) /* NOP */ 3540 #define has_cdefine_beep(codec) 0 3541 #endif 3542 3543 /* parse the BIOS configuration and set up the alc_spec */ 3544 /* return 1 if successful, 0 if the proper config is not found, 3545 * or a negative error code 3546 */ 3547 static int alc_parse_auto_config(struct hda_codec *codec, 3548 const hda_nid_t *ignore_nids, 3549 const hda_nid_t *ssid_nids) 3550 { 3551 struct alc_spec *spec = codec->spec; 3552 int err; 3553 3554 err = snd_hda_parse_pin_def_config(codec, &spec->autocfg, 3555 ignore_nids); 3556 if (err < 0) 3557 return err; 3558 if (!spec->autocfg.line_outs) { 3559 if (spec->autocfg.dig_outs || spec->autocfg.dig_in_pin) { 3560 spec->multiout.max_channels = 2; 3561 spec->no_analog = 1; 3562 goto dig_only; 3563 } 3564 return 0; /* can't find valid BIOS pin config */ 3565 } 3566 err = alc_auto_fill_dac_nids(codec); 3567 if (err < 0) 3568 return err; 3569 err = alc_auto_add_multi_channel_mode(codec, alc_auto_fill_dac_nids); 3570 if (err < 0) 3571 return err; 3572 err = alc_auto_create_multi_out_ctls(codec, &spec->autocfg); 3573 if (err < 0) 3574 return err; 3575 err = alc_auto_create_hp_out(codec); 3576 if (err < 0) 3577 return err; 3578 err = alc_auto_create_speaker_out(codec); 3579 if (err < 0) 3580 return err; 3581 err = alc_auto_create_input_ctls(codec); 3582 if (err < 0) 3583 return err; 3584 3585 spec->multiout.max_channels = spec->multiout.num_dacs * 2; 3586 3587 dig_only: 3588 alc_auto_parse_digital(codec); 3589 3590 if (!spec->no_analog) 3591 alc_remove_invalid_adc_nids(codec); 3592 3593 if (ssid_nids) 3594 alc_ssid_check(codec, ssid_nids); 3595 3596 if (!spec->no_analog) { 3597 alc_auto_check_switches(codec); 3598 err = alc_auto_add_mic_boost(codec); 3599 if (err < 0) 3600 return err; 3601 } 3602 3603 if (spec->kctls.list) 3604 add_mixer(spec, spec->kctls.list); 3605 3606 return 1; 3607 } 3608 3609 static int alc880_parse_auto_config(struct hda_codec *codec) 3610 { 3611 static const hda_nid_t alc880_ignore[] = { 0x1d, 0 }; 3612 static const hda_nid_t alc880_ssids[] = { 0x15, 0x1b, 0x14, 0 }; 3613 return alc_parse_auto_config(codec, alc880_ignore, alc880_ssids); 3614 } 3615 3616 #ifdef CONFIG_SND_HDA_POWER_SAVE 3617 static const struct hda_amp_list alc880_loopbacks[] = { 3618 { 0x0b, HDA_INPUT, 0 }, 3619 { 0x0b, HDA_INPUT, 1 }, 3620 { 0x0b, HDA_INPUT, 2 }, 3621 { 0x0b, HDA_INPUT, 3 }, 3622 { 0x0b, HDA_INPUT, 4 }, 3623 { } /* end */ 3624 }; 3625 #endif 3626 3627 /* 3628 * board setups 3629 */ 3630 #ifdef CONFIG_SND_HDA_ENABLE_REALTEK_QUIRKS 3631 #define alc_board_config \ 3632 snd_hda_check_board_config 3633 #define alc_board_codec_sid_config \ 3634 snd_hda_check_board_codec_sid_config 3635 #include "alc_quirks.c" 3636 #else 3637 #define alc_board_config(codec, nums, models, tbl) -1 3638 #define alc_board_codec_sid_config(codec, nums, models, tbl) -1 3639 #define setup_preset(codec, x) /* NOP */ 3640 #endif 3641 3642 /* 3643 * OK, here we have finally the patch for ALC880 3644 */ 3645 #ifdef CONFIG_SND_HDA_ENABLE_REALTEK_QUIRKS 3646 #include "alc880_quirks.c" 3647 #endif 3648 3649 static int patch_alc880(struct hda_codec *codec) 3650 { 3651 struct alc_spec *spec; 3652 int board_config; 3653 int err; 3654 3655 spec = kzalloc(sizeof(*spec), GFP_KERNEL); 3656 if (spec == NULL) 3657 return -ENOMEM; 3658 3659 codec->spec = spec; 3660 3661 spec->mixer_nid = 0x0b; 3662 spec->need_dac_fix = 1; 3663 3664 board_config = alc_board_config(codec, ALC880_MODEL_LAST, 3665 alc880_models, alc880_cfg_tbl); 3666 if (board_config < 0) { 3667 printk(KERN_INFO "hda_codec: %s: BIOS auto-probing.\n", 3668 codec->chip_name); 3669 board_config = ALC_MODEL_AUTO; 3670 } 3671 3672 if (board_config == ALC_MODEL_AUTO) { 3673 /* automatic parse from the BIOS config */ 3674 err = alc880_parse_auto_config(codec); 3675 if (err < 0) { 3676 alc_free(codec); 3677 return err; 3678 } 3679 #ifdef CONFIG_SND_HDA_ENABLE_REALTEK_QUIRKS 3680 else if (!err) { 3681 printk(KERN_INFO 3682 "hda_codec: Cannot set up configuration " 3683 "from BIOS. Using 3-stack mode...\n"); 3684 board_config = ALC880_3ST; 3685 } 3686 #endif 3687 } 3688 3689 if (board_config != ALC_MODEL_AUTO) 3690 setup_preset(codec, &alc880_presets[board_config]); 3691 3692 if (!spec->no_analog && !spec->adc_nids) { 3693 alc_auto_fill_adc_caps(codec); 3694 alc_rebuild_imux_for_auto_mic(codec); 3695 alc_remove_invalid_adc_nids(codec); 3696 } 3697 3698 if (!spec->no_analog && !spec->cap_mixer) 3699 set_capture_mixer(codec); 3700 3701 if (!spec->no_analog) { 3702 err = snd_hda_attach_beep_device(codec, 0x1); 3703 if (err < 0) { 3704 alc_free(codec); 3705 return err; 3706 } 3707 set_beep_amp(spec, 0x0b, 0x05, HDA_INPUT); 3708 } 3709 3710 spec->vmaster_nid = 0x0c; 3711 3712 codec->patch_ops = alc_patch_ops; 3713 if (board_config == ALC_MODEL_AUTO) 3714 spec->init_hook = alc_auto_init_std; 3715 #ifdef CONFIG_SND_HDA_POWER_SAVE 3716 if (!spec->loopback.amplist) 3717 spec->loopback.amplist = alc880_loopbacks; 3718 #endif 3719 3720 return 0; 3721 } 3722 3723 3724 /* 3725 * ALC260 support 3726 */ 3727 static int alc260_parse_auto_config(struct hda_codec *codec) 3728 { 3729 static const hda_nid_t alc260_ignore[] = { 0x17, 0 }; 3730 static const hda_nid_t alc260_ssids[] = { 0x10, 0x15, 0x0f, 0 }; 3731 return alc_parse_auto_config(codec, alc260_ignore, alc260_ssids); 3732 } 3733 3734 #ifdef CONFIG_SND_HDA_POWER_SAVE 3735 static const struct hda_amp_list alc260_loopbacks[] = { 3736 { 0x07, HDA_INPUT, 0 }, 3737 { 0x07, HDA_INPUT, 1 }, 3738 { 0x07, HDA_INPUT, 2 }, 3739 { 0x07, HDA_INPUT, 3 }, 3740 { 0x07, HDA_INPUT, 4 }, 3741 { } /* end */ 3742 }; 3743 #endif 3744 3745 /* 3746 * Pin config fixes 3747 */ 3748 enum { 3749 PINFIX_HP_DC5750, 3750 }; 3751 3752 static const struct alc_fixup alc260_fixups[] = { 3753 [PINFIX_HP_DC5750] = { 3754 .type = ALC_FIXUP_PINS, 3755 .v.pins = (const struct alc_pincfg[]) { 3756 { 0x11, 0x90130110 }, /* speaker */ 3757 { } 3758 } 3759 }, 3760 }; 3761 3762 static const struct snd_pci_quirk alc260_fixup_tbl[] = { 3763 SND_PCI_QUIRK(0x103c, 0x280a, "HP dc5750", PINFIX_HP_DC5750), 3764 {} 3765 }; 3766 3767 /* 3768 */ 3769 #ifdef CONFIG_SND_HDA_ENABLE_REALTEK_QUIRKS 3770 #include "alc260_quirks.c" 3771 #endif 3772 3773 static int patch_alc260(struct hda_codec *codec) 3774 { 3775 struct alc_spec *spec; 3776 int err, board_config; 3777 3778 spec = kzalloc(sizeof(*spec), GFP_KERNEL); 3779 if (spec == NULL) 3780 return -ENOMEM; 3781 3782 codec->spec = spec; 3783 3784 spec->mixer_nid = 0x07; 3785 3786 board_config = alc_board_config(codec, ALC260_MODEL_LAST, 3787 alc260_models, alc260_cfg_tbl); 3788 if (board_config < 0) { 3789 snd_printd(KERN_INFO "hda_codec: %s: BIOS auto-probing.\n", 3790 codec->chip_name); 3791 board_config = ALC_MODEL_AUTO; 3792 } 3793 3794 if (board_config == ALC_MODEL_AUTO) { 3795 alc_pick_fixup(codec, NULL, alc260_fixup_tbl, alc260_fixups); 3796 alc_apply_fixup(codec, ALC_FIXUP_ACT_PRE_PROBE); 3797 } 3798 3799 if (board_config == ALC_MODEL_AUTO) { 3800 /* automatic parse from the BIOS config */ 3801 err = alc260_parse_auto_config(codec); 3802 if (err < 0) { 3803 alc_free(codec); 3804 return err; 3805 } 3806 #ifdef CONFIG_SND_HDA_ENABLE_REALTEK_QUIRKS 3807 else if (!err) { 3808 printk(KERN_INFO 3809 "hda_codec: Cannot set up configuration " 3810 "from BIOS. Using base mode...\n"); 3811 board_config = ALC260_BASIC; 3812 } 3813 #endif 3814 } 3815 3816 if (board_config != ALC_MODEL_AUTO) 3817 setup_preset(codec, &alc260_presets[board_config]); 3818 3819 if (!spec->no_analog && !spec->adc_nids) { 3820 alc_auto_fill_adc_caps(codec); 3821 alc_rebuild_imux_for_auto_mic(codec); 3822 alc_remove_invalid_adc_nids(codec); 3823 } 3824 3825 if (!spec->no_analog && !spec->cap_mixer) 3826 set_capture_mixer(codec); 3827 3828 if (!spec->no_analog) { 3829 err = snd_hda_attach_beep_device(codec, 0x1); 3830 if (err < 0) { 3831 alc_free(codec); 3832 return err; 3833 } 3834 set_beep_amp(spec, 0x07, 0x05, HDA_INPUT); 3835 } 3836 3837 alc_apply_fixup(codec, ALC_FIXUP_ACT_PROBE); 3838 3839 spec->vmaster_nid = 0x08; 3840 3841 codec->patch_ops = alc_patch_ops; 3842 if (board_config == ALC_MODEL_AUTO) 3843 spec->init_hook = alc_auto_init_std; 3844 spec->shutup = alc_eapd_shutup; 3845 #ifdef CONFIG_SND_HDA_POWER_SAVE 3846 if (!spec->loopback.amplist) 3847 spec->loopback.amplist = alc260_loopbacks; 3848 #endif 3849 3850 return 0; 3851 } 3852 3853 3854 /* 3855 * ALC882/883/885/888/889 support 3856 * 3857 * ALC882 is almost identical with ALC880 but has cleaner and more flexible 3858 * configuration. Each pin widget can choose any input DACs and a mixer. 3859 * Each ADC is connected from a mixer of all inputs. This makes possible 3860 * 6-channel independent captures. 3861 * 3862 * In addition, an independent DAC for the multi-playback (not used in this 3863 * driver yet). 3864 */ 3865 #ifdef CONFIG_SND_HDA_POWER_SAVE 3866 #define alc882_loopbacks alc880_loopbacks 3867 #endif 3868 3869 /* 3870 * Pin config fixes 3871 */ 3872 enum { 3873 PINFIX_ABIT_AW9D_MAX, 3874 PINFIX_LENOVO_Y530, 3875 PINFIX_PB_M5210, 3876 PINFIX_ACER_ASPIRE_7736, 3877 }; 3878 3879 static const struct alc_fixup alc882_fixups[] = { 3880 [PINFIX_ABIT_AW9D_MAX] = { 3881 .type = ALC_FIXUP_PINS, 3882 .v.pins = (const struct alc_pincfg[]) { 3883 { 0x15, 0x01080104 }, /* side */ 3884 { 0x16, 0x01011012 }, /* rear */ 3885 { 0x17, 0x01016011 }, /* clfe */ 3886 { } 3887 } 3888 }, 3889 [PINFIX_LENOVO_Y530] = { 3890 .type = ALC_FIXUP_PINS, 3891 .v.pins = (const struct alc_pincfg[]) { 3892 { 0x15, 0x99130112 }, /* rear int speakers */ 3893 { 0x16, 0x99130111 }, /* subwoofer */ 3894 { } 3895 } 3896 }, 3897 [PINFIX_PB_M5210] = { 3898 .type = ALC_FIXUP_VERBS, 3899 .v.verbs = (const struct hda_verb[]) { 3900 { 0x19, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREF50 }, 3901 {} 3902 } 3903 }, 3904 [PINFIX_ACER_ASPIRE_7736] = { 3905 .type = ALC_FIXUP_SKU, 3906 .v.sku = ALC_FIXUP_SKU_IGNORE, 3907 }, 3908 }; 3909 3910 static const struct snd_pci_quirk alc882_fixup_tbl[] = { 3911 SND_PCI_QUIRK(0x1025, 0x0155, "Packard-Bell M5120", PINFIX_PB_M5210), 3912 SND_PCI_QUIRK(0x17aa, 0x3a0d, "Lenovo Y530", PINFIX_LENOVO_Y530), 3913 SND_PCI_QUIRK(0x147b, 0x107a, "Abit AW9D-MAX", PINFIX_ABIT_AW9D_MAX), 3914 SND_PCI_QUIRK(0x1025, 0x0296, "Acer Aspire 7736z", PINFIX_ACER_ASPIRE_7736), 3915 {} 3916 }; 3917 3918 /* 3919 * BIOS auto configuration 3920 */ 3921 /* almost identical with ALC880 parser... */ 3922 static int alc882_parse_auto_config(struct hda_codec *codec) 3923 { 3924 static const hda_nid_t alc882_ignore[] = { 0x1d, 0 }; 3925 static const hda_nid_t alc882_ssids[] = { 0x15, 0x1b, 0x14, 0 }; 3926 return alc_parse_auto_config(codec, alc882_ignore, alc882_ssids); 3927 } 3928 3929 /* 3930 */ 3931 #ifdef CONFIG_SND_HDA_ENABLE_REALTEK_QUIRKS 3932 #include "alc882_quirks.c" 3933 #endif 3934 3935 static int patch_alc882(struct hda_codec *codec) 3936 { 3937 struct alc_spec *spec; 3938 int err, board_config; 3939 3940 spec = kzalloc(sizeof(*spec), GFP_KERNEL); 3941 if (spec == NULL) 3942 return -ENOMEM; 3943 3944 codec->spec = spec; 3945 3946 spec->mixer_nid = 0x0b; 3947 3948 switch (codec->vendor_id) { 3949 case 0x10ec0882: 3950 case 0x10ec0885: 3951 break; 3952 default: 3953 /* ALC883 and variants */ 3954 alc_fix_pll_init(codec, 0x20, 0x0a, 10); 3955 break; 3956 } 3957 3958 board_config = alc_board_config(codec, ALC882_MODEL_LAST, 3959 alc882_models, alc882_cfg_tbl); 3960 3961 if (board_config < 0) 3962 board_config = alc_board_codec_sid_config(codec, 3963 ALC882_MODEL_LAST, alc882_models, alc882_ssid_cfg_tbl); 3964 3965 if (board_config < 0) { 3966 printk(KERN_INFO "hda_codec: %s: BIOS auto-probing.\n", 3967 codec->chip_name); 3968 board_config = ALC_MODEL_AUTO; 3969 } 3970 3971 if (board_config == ALC_MODEL_AUTO) { 3972 alc_pick_fixup(codec, NULL, alc882_fixup_tbl, alc882_fixups); 3973 alc_apply_fixup(codec, ALC_FIXUP_ACT_PRE_PROBE); 3974 } 3975 3976 alc_auto_parse_customize_define(codec); 3977 3978 if (board_config == ALC_MODEL_AUTO) { 3979 /* automatic parse from the BIOS config */ 3980 err = alc882_parse_auto_config(codec); 3981 if (err < 0) { 3982 alc_free(codec); 3983 return err; 3984 } 3985 #ifdef CONFIG_SND_HDA_ENABLE_REALTEK_QUIRKS 3986 else if (!err) { 3987 printk(KERN_INFO 3988 "hda_codec: Cannot set up configuration " 3989 "from BIOS. Using base mode...\n"); 3990 board_config = ALC882_3ST_DIG; 3991 } 3992 #endif 3993 } 3994 3995 if (board_config != ALC_MODEL_AUTO) 3996 setup_preset(codec, &alc882_presets[board_config]); 3997 3998 if (!spec->no_analog && !spec->adc_nids) { 3999 alc_auto_fill_adc_caps(codec); 4000 alc_rebuild_imux_for_auto_mic(codec); 4001 alc_remove_invalid_adc_nids(codec); 4002 } 4003 4004 if (!spec->no_analog && !spec->cap_mixer) 4005 set_capture_mixer(codec); 4006 4007 if (!spec->no_analog && has_cdefine_beep(codec)) { 4008 err = snd_hda_attach_beep_device(codec, 0x1); 4009 if (err < 0) { 4010 alc_free(codec); 4011 return err; 4012 } 4013 set_beep_amp(spec, 0x0b, 0x05, HDA_INPUT); 4014 } 4015 4016 alc_apply_fixup(codec, ALC_FIXUP_ACT_PROBE); 4017 4018 spec->vmaster_nid = 0x0c; 4019 4020 codec->patch_ops = alc_patch_ops; 4021 if (board_config == ALC_MODEL_AUTO) 4022 spec->init_hook = alc_auto_init_std; 4023 4024 alc_init_jacks(codec); 4025 #ifdef CONFIG_SND_HDA_POWER_SAVE 4026 if (!spec->loopback.amplist) 4027 spec->loopback.amplist = alc882_loopbacks; 4028 #endif 4029 4030 return 0; 4031 } 4032 4033 4034 /* 4035 * ALC262 support 4036 */ 4037 static int alc262_parse_auto_config(struct hda_codec *codec) 4038 { 4039 static const hda_nid_t alc262_ignore[] = { 0x1d, 0 }; 4040 static const hda_nid_t alc262_ssids[] = { 0x15, 0x1b, 0x14, 0 }; 4041 return alc_parse_auto_config(codec, alc262_ignore, alc262_ssids); 4042 } 4043 4044 /* 4045 * Pin config fixes 4046 */ 4047 enum { 4048 PINFIX_FSC_H270, 4049 PINFIX_HP_Z200, 4050 }; 4051 4052 static const struct alc_fixup alc262_fixups[] = { 4053 [PINFIX_FSC_H270] = { 4054 .type = ALC_FIXUP_PINS, 4055 .v.pins = (const struct alc_pincfg[]) { 4056 { 0x14, 0x99130110 }, /* speaker */ 4057 { 0x15, 0x0221142f }, /* front HP */ 4058 { 0x1b, 0x0121141f }, /* rear HP */ 4059 { } 4060 } 4061 }, 4062 [PINFIX_HP_Z200] = { 4063 .type = ALC_FIXUP_PINS, 4064 .v.pins = (const struct alc_pincfg[]) { 4065 { 0x16, 0x99130120 }, /* internal speaker */ 4066 { } 4067 } 4068 }, 4069 }; 4070 4071 static const struct snd_pci_quirk alc262_fixup_tbl[] = { 4072 SND_PCI_QUIRK(0x103c, 0x170b, "HP Z200", PINFIX_HP_Z200), 4073 SND_PCI_QUIRK(0x1734, 0x1147, "FSC Celsius H270", PINFIX_FSC_H270), 4074 {} 4075 }; 4076 4077 4078 #ifdef CONFIG_SND_HDA_POWER_SAVE 4079 #define alc262_loopbacks alc880_loopbacks 4080 #endif 4081 4082 /* 4083 */ 4084 #ifdef CONFIG_SND_HDA_ENABLE_REALTEK_QUIRKS 4085 #include "alc262_quirks.c" 4086 #endif 4087 4088 static int patch_alc262(struct hda_codec *codec) 4089 { 4090 struct alc_spec *spec; 4091 int board_config; 4092 int err; 4093 4094 spec = kzalloc(sizeof(*spec), GFP_KERNEL); 4095 if (spec == NULL) 4096 return -ENOMEM; 4097 4098 codec->spec = spec; 4099 4100 spec->mixer_nid = 0x0b; 4101 4102 #if 0 4103 /* pshou 07/11/05 set a zero PCM sample to DAC when FIFO is 4104 * under-run 4105 */ 4106 { 4107 int tmp; 4108 snd_hda_codec_write(codec, 0x1a, 0, AC_VERB_SET_COEF_INDEX, 7); 4109 tmp = snd_hda_codec_read(codec, 0x20, 0, AC_VERB_GET_PROC_COEF, 0); 4110 snd_hda_codec_write(codec, 0x1a, 0, AC_VERB_SET_COEF_INDEX, 7); 4111 snd_hda_codec_write(codec, 0x1a, 0, AC_VERB_SET_PROC_COEF, tmp | 0x80); 4112 } 4113 #endif 4114 alc_auto_parse_customize_define(codec); 4115 4116 alc_fix_pll_init(codec, 0x20, 0x0a, 10); 4117 4118 board_config = alc_board_config(codec, ALC262_MODEL_LAST, 4119 alc262_models, alc262_cfg_tbl); 4120 4121 if (board_config < 0) { 4122 printk(KERN_INFO "hda_codec: %s: BIOS auto-probing.\n", 4123 codec->chip_name); 4124 board_config = ALC_MODEL_AUTO; 4125 } 4126 4127 if (board_config == ALC_MODEL_AUTO) { 4128 alc_pick_fixup(codec, NULL, alc262_fixup_tbl, alc262_fixups); 4129 alc_apply_fixup(codec, ALC_FIXUP_ACT_PRE_PROBE); 4130 } 4131 4132 if (board_config == ALC_MODEL_AUTO) { 4133 /* automatic parse from the BIOS config */ 4134 err = alc262_parse_auto_config(codec); 4135 if (err < 0) { 4136 alc_free(codec); 4137 return err; 4138 } 4139 #ifdef CONFIG_SND_HDA_ENABLE_REALTEK_QUIRKS 4140 else if (!err) { 4141 printk(KERN_INFO 4142 "hda_codec: Cannot set up configuration " 4143 "from BIOS. Using base mode...\n"); 4144 board_config = ALC262_BASIC; 4145 } 4146 #endif 4147 } 4148 4149 if (board_config != ALC_MODEL_AUTO) 4150 setup_preset(codec, &alc262_presets[board_config]); 4151 4152 if (!spec->no_analog && !spec->adc_nids) { 4153 alc_auto_fill_adc_caps(codec); 4154 alc_rebuild_imux_for_auto_mic(codec); 4155 alc_remove_invalid_adc_nids(codec); 4156 } 4157 4158 if (!spec->no_analog && !spec->cap_mixer) 4159 set_capture_mixer(codec); 4160 4161 if (!spec->no_analog && has_cdefine_beep(codec)) { 4162 err = snd_hda_attach_beep_device(codec, 0x1); 4163 if (err < 0) { 4164 alc_free(codec); 4165 return err; 4166 } 4167 set_beep_amp(spec, 0x0b, 0x05, HDA_INPUT); 4168 } 4169 4170 alc_apply_fixup(codec, ALC_FIXUP_ACT_PROBE); 4171 4172 spec->vmaster_nid = 0x0c; 4173 4174 codec->patch_ops = alc_patch_ops; 4175 if (board_config == ALC_MODEL_AUTO) 4176 spec->init_hook = alc_auto_init_std; 4177 spec->shutup = alc_eapd_shutup; 4178 4179 alc_init_jacks(codec); 4180 #ifdef CONFIG_SND_HDA_POWER_SAVE 4181 if (!spec->loopback.amplist) 4182 spec->loopback.amplist = alc262_loopbacks; 4183 #endif 4184 4185 return 0; 4186 } 4187 4188 /* 4189 * ALC268 4190 */ 4191 /* bind Beep switches of both NID 0x0f and 0x10 */ 4192 static const struct hda_bind_ctls alc268_bind_beep_sw = { 4193 .ops = &snd_hda_bind_sw, 4194 .values = { 4195 HDA_COMPOSE_AMP_VAL(0x0f, 3, 1, HDA_INPUT), 4196 HDA_COMPOSE_AMP_VAL(0x10, 3, 1, HDA_INPUT), 4197 0 4198 }, 4199 }; 4200 4201 static const struct snd_kcontrol_new alc268_beep_mixer[] = { 4202 HDA_CODEC_VOLUME("Beep Playback Volume", 0x1d, 0x0, HDA_INPUT), 4203 HDA_BIND_SW("Beep Playback Switch", &alc268_bind_beep_sw), 4204 { } 4205 }; 4206 4207 /* set PCBEEP vol = 0, mute connections */ 4208 static const struct hda_verb alc268_beep_init_verbs[] = { 4209 {0x1d, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)}, 4210 {0x0f, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(1)}, 4211 {0x10, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(1)}, 4212 { } 4213 }; 4214 4215 /* 4216 * BIOS auto configuration 4217 */ 4218 static int alc268_parse_auto_config(struct hda_codec *codec) 4219 { 4220 static const hda_nid_t alc268_ssids[] = { 0x15, 0x1b, 0x14, 0 }; 4221 struct alc_spec *spec = codec->spec; 4222 int err = alc_parse_auto_config(codec, NULL, alc268_ssids); 4223 if (err > 0) { 4224 if (!spec->no_analog && spec->autocfg.speaker_pins[0] != 0x1d) { 4225 add_mixer(spec, alc268_beep_mixer); 4226 add_verb(spec, alc268_beep_init_verbs); 4227 } 4228 } 4229 return err; 4230 } 4231 4232 /* 4233 */ 4234 #ifdef CONFIG_SND_HDA_ENABLE_REALTEK_QUIRKS 4235 #include "alc268_quirks.c" 4236 #endif 4237 4238 static int patch_alc268(struct hda_codec *codec) 4239 { 4240 struct alc_spec *spec; 4241 int board_config; 4242 int i, has_beep, err; 4243 4244 spec = kzalloc(sizeof(*spec), GFP_KERNEL); 4245 if (spec == NULL) 4246 return -ENOMEM; 4247 4248 codec->spec = spec; 4249 4250 /* ALC268 has no aa-loopback mixer */ 4251 4252 board_config = alc_board_config(codec, ALC268_MODEL_LAST, 4253 alc268_models, alc268_cfg_tbl); 4254 4255 if (board_config < 0) 4256 board_config = alc_board_codec_sid_config(codec, 4257 ALC268_MODEL_LAST, alc268_models, alc268_ssid_cfg_tbl); 4258 4259 if (board_config < 0) { 4260 printk(KERN_INFO "hda_codec: %s: BIOS auto-probing.\n", 4261 codec->chip_name); 4262 board_config = ALC_MODEL_AUTO; 4263 } 4264 4265 if (board_config == ALC_MODEL_AUTO) { 4266 /* automatic parse from the BIOS config */ 4267 err = alc268_parse_auto_config(codec); 4268 if (err < 0) { 4269 alc_free(codec); 4270 return err; 4271 } 4272 #ifdef CONFIG_SND_HDA_ENABLE_REALTEK_QUIRKS 4273 else if (!err) { 4274 printk(KERN_INFO 4275 "hda_codec: Cannot set up configuration " 4276 "from BIOS. Using base mode...\n"); 4277 board_config = ALC268_3ST; 4278 } 4279 #endif 4280 } 4281 4282 if (board_config != ALC_MODEL_AUTO) 4283 setup_preset(codec, &alc268_presets[board_config]); 4284 4285 has_beep = 0; 4286 for (i = 0; i < spec->num_mixers; i++) { 4287 if (spec->mixers[i] == alc268_beep_mixer) { 4288 has_beep = 1; 4289 break; 4290 } 4291 } 4292 4293 if (has_beep) { 4294 err = snd_hda_attach_beep_device(codec, 0x1); 4295 if (err < 0) { 4296 alc_free(codec); 4297 return err; 4298 } 4299 if (!query_amp_caps(codec, 0x1d, HDA_INPUT)) 4300 /* override the amp caps for beep generator */ 4301 snd_hda_override_amp_caps(codec, 0x1d, HDA_INPUT, 4302 (0x0c << AC_AMPCAP_OFFSET_SHIFT) | 4303 (0x0c << AC_AMPCAP_NUM_STEPS_SHIFT) | 4304 (0x07 << AC_AMPCAP_STEP_SIZE_SHIFT) | 4305 (0 << AC_AMPCAP_MUTE_SHIFT)); 4306 } 4307 4308 if (!spec->no_analog && !spec->adc_nids) { 4309 alc_auto_fill_adc_caps(codec); 4310 alc_rebuild_imux_for_auto_mic(codec); 4311 alc_remove_invalid_adc_nids(codec); 4312 } 4313 4314 if (!spec->no_analog && !spec->cap_mixer) 4315 set_capture_mixer(codec); 4316 4317 spec->vmaster_nid = 0x02; 4318 4319 codec->patch_ops = alc_patch_ops; 4320 if (board_config == ALC_MODEL_AUTO) 4321 spec->init_hook = alc_auto_init_std; 4322 spec->shutup = alc_eapd_shutup; 4323 4324 alc_init_jacks(codec); 4325 4326 return 0; 4327 } 4328 4329 /* 4330 * ALC269 4331 */ 4332 #ifdef CONFIG_SND_HDA_POWER_SAVE 4333 #define alc269_loopbacks alc880_loopbacks 4334 #endif 4335 4336 static const struct hda_pcm_stream alc269_44k_pcm_analog_playback = { 4337 .substreams = 1, 4338 .channels_min = 2, 4339 .channels_max = 8, 4340 .rates = SNDRV_PCM_RATE_44100, /* fixed rate */ 4341 /* NID is set in alc_build_pcms */ 4342 .ops = { 4343 .open = alc_playback_pcm_open, 4344 .prepare = alc_playback_pcm_prepare, 4345 .cleanup = alc_playback_pcm_cleanup 4346 }, 4347 }; 4348 4349 static const struct hda_pcm_stream alc269_44k_pcm_analog_capture = { 4350 .substreams = 1, 4351 .channels_min = 2, 4352 .channels_max = 2, 4353 .rates = SNDRV_PCM_RATE_44100, /* fixed rate */ 4354 /* NID is set in alc_build_pcms */ 4355 }; 4356 4357 #ifdef CONFIG_SND_HDA_POWER_SAVE 4358 static int alc269_mic2_for_mute_led(struct hda_codec *codec) 4359 { 4360 switch (codec->subsystem_id) { 4361 case 0x103c1586: 4362 return 1; 4363 } 4364 return 0; 4365 } 4366 4367 static int alc269_mic2_mute_check_ps(struct hda_codec *codec, hda_nid_t nid) 4368 { 4369 /* update mute-LED according to the speaker mute state */ 4370 if (nid == 0x01 || nid == 0x14) { 4371 int pinval; 4372 if (snd_hda_codec_amp_read(codec, 0x14, 0, HDA_OUTPUT, 0) & 4373 HDA_AMP_MUTE) 4374 pinval = 0x24; 4375 else 4376 pinval = 0x20; 4377 /* mic2 vref pin is used for mute LED control */ 4378 snd_hda_codec_update_cache(codec, 0x19, 0, 4379 AC_VERB_SET_PIN_WIDGET_CONTROL, 4380 pinval); 4381 } 4382 return alc_check_power_status(codec, nid); 4383 } 4384 #endif /* CONFIG_SND_HDA_POWER_SAVE */ 4385 4386 /* different alc269-variants */ 4387 enum { 4388 ALC269_TYPE_ALC269VA, 4389 ALC269_TYPE_ALC269VB, 4390 ALC269_TYPE_ALC269VC, 4391 }; 4392 4393 /* 4394 * BIOS auto configuration 4395 */ 4396 static int alc269_parse_auto_config(struct hda_codec *codec) 4397 { 4398 static const hda_nid_t alc269_ignore[] = { 0x1d, 0 }; 4399 static const hda_nid_t alc269_ssids[] = { 0, 0x1b, 0x14, 0x21 }; 4400 static const hda_nid_t alc269va_ssids[] = { 0x15, 0x1b, 0x14, 0 }; 4401 struct alc_spec *spec = codec->spec; 4402 const hda_nid_t *ssids = spec->codec_variant == ALC269_TYPE_ALC269VA ? 4403 alc269va_ssids : alc269_ssids; 4404 4405 return alc_parse_auto_config(codec, alc269_ignore, ssids); 4406 } 4407 4408 static void alc269_toggle_power_output(struct hda_codec *codec, int power_up) 4409 { 4410 int val = alc_read_coef_idx(codec, 0x04); 4411 if (power_up) 4412 val |= 1 << 11; 4413 else 4414 val &= ~(1 << 11); 4415 alc_write_coef_idx(codec, 0x04, val); 4416 } 4417 4418 static void alc269_shutup(struct hda_codec *codec) 4419 { 4420 if ((alc_read_coef_idx(codec, 0) & 0x00ff) == 0x017) 4421 alc269_toggle_power_output(codec, 0); 4422 if ((alc_read_coef_idx(codec, 0) & 0x00ff) == 0x018) { 4423 alc269_toggle_power_output(codec, 0); 4424 msleep(150); 4425 } 4426 } 4427 4428 #ifdef CONFIG_PM 4429 static int alc269_resume(struct hda_codec *codec) 4430 { 4431 if ((alc_read_coef_idx(codec, 0) & 0x00ff) == 0x018) { 4432 alc269_toggle_power_output(codec, 0); 4433 msleep(150); 4434 } 4435 4436 codec->patch_ops.init(codec); 4437 4438 if ((alc_read_coef_idx(codec, 0) & 0x00ff) == 0x017) { 4439 alc269_toggle_power_output(codec, 1); 4440 msleep(200); 4441 } 4442 4443 if ((alc_read_coef_idx(codec, 0) & 0x00ff) == 0x018) 4444 alc269_toggle_power_output(codec, 1); 4445 4446 snd_hda_codec_resume_amp(codec); 4447 snd_hda_codec_resume_cache(codec); 4448 hda_call_check_power_status(codec, 0x01); 4449 return 0; 4450 } 4451 #endif /* CONFIG_PM */ 4452 4453 static void alc269_fixup_hweq(struct hda_codec *codec, 4454 const struct alc_fixup *fix, int action) 4455 { 4456 int coef; 4457 4458 if (action != ALC_FIXUP_ACT_INIT) 4459 return; 4460 coef = alc_read_coef_idx(codec, 0x1e); 4461 alc_write_coef_idx(codec, 0x1e, coef | 0x80); 4462 } 4463 4464 static void alc271_fixup_dmic(struct hda_codec *codec, 4465 const struct alc_fixup *fix, int action) 4466 { 4467 static const struct hda_verb verbs[] = { 4468 {0x20, AC_VERB_SET_COEF_INDEX, 0x0d}, 4469 {0x20, AC_VERB_SET_PROC_COEF, 0x4000}, 4470 {} 4471 }; 4472 unsigned int cfg; 4473 4474 if (strcmp(codec->chip_name, "ALC271X")) 4475 return; 4476 cfg = snd_hda_codec_get_pincfg(codec, 0x12); 4477 if (get_defcfg_connect(cfg) == AC_JACK_PORT_FIXED) 4478 snd_hda_sequence_write(codec, verbs); 4479 } 4480 4481 static void alc269_fixup_pcm_44k(struct hda_codec *codec, 4482 const struct alc_fixup *fix, int action) 4483 { 4484 struct alc_spec *spec = codec->spec; 4485 4486 if (action != ALC_FIXUP_ACT_PROBE) 4487 return; 4488 4489 /* Due to a hardware problem on Lenovo Ideadpad, we need to 4490 * fix the sample rate of analog I/O to 44.1kHz 4491 */ 4492 spec->stream_analog_playback = &alc269_44k_pcm_analog_playback; 4493 spec->stream_analog_capture = &alc269_44k_pcm_analog_capture; 4494 } 4495 4496 static void alc269_fixup_stereo_dmic(struct hda_codec *codec, 4497 const struct alc_fixup *fix, int action) 4498 { 4499 int coef; 4500 4501 if (action != ALC_FIXUP_ACT_INIT) 4502 return; 4503 /* The digital-mic unit sends PDM (differential signal) instead of 4504 * the standard PCM, thus you can't record a valid mono stream as is. 4505 * Below is a workaround specific to ALC269 to control the dmic 4506 * signal source as mono. 4507 */ 4508 coef = alc_read_coef_idx(codec, 0x07); 4509 alc_write_coef_idx(codec, 0x07, coef | 0x80); 4510 } 4511 4512 enum { 4513 ALC269_FIXUP_SONY_VAIO, 4514 ALC275_FIXUP_SONY_VAIO_GPIO2, 4515 ALC269_FIXUP_DELL_M101Z, 4516 ALC269_FIXUP_SKU_IGNORE, 4517 ALC269_FIXUP_ASUS_G73JW, 4518 ALC269_FIXUP_LENOVO_EAPD, 4519 ALC275_FIXUP_SONY_HWEQ, 4520 ALC271_FIXUP_DMIC, 4521 ALC269_FIXUP_PCM_44K, 4522 ALC269_FIXUP_STEREO_DMIC, 4523 }; 4524 4525 static const struct alc_fixup alc269_fixups[] = { 4526 [ALC269_FIXUP_SONY_VAIO] = { 4527 .type = ALC_FIXUP_VERBS, 4528 .v.verbs = (const struct hda_verb[]) { 4529 {0x19, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREFGRD}, 4530 {} 4531 } 4532 }, 4533 [ALC275_FIXUP_SONY_VAIO_GPIO2] = { 4534 .type = ALC_FIXUP_VERBS, 4535 .v.verbs = (const struct hda_verb[]) { 4536 {0x01, AC_VERB_SET_GPIO_MASK, 0x04}, 4537 {0x01, AC_VERB_SET_GPIO_DIRECTION, 0x04}, 4538 {0x01, AC_VERB_SET_GPIO_DATA, 0x00}, 4539 { } 4540 }, 4541 .chained = true, 4542 .chain_id = ALC269_FIXUP_SONY_VAIO 4543 }, 4544 [ALC269_FIXUP_DELL_M101Z] = { 4545 .type = ALC_FIXUP_VERBS, 4546 .v.verbs = (const struct hda_verb[]) { 4547 /* Enables internal speaker */ 4548 {0x20, AC_VERB_SET_COEF_INDEX, 13}, 4549 {0x20, AC_VERB_SET_PROC_COEF, 0x4040}, 4550 {} 4551 } 4552 }, 4553 [ALC269_FIXUP_SKU_IGNORE] = { 4554 .type = ALC_FIXUP_SKU, 4555 .v.sku = ALC_FIXUP_SKU_IGNORE, 4556 }, 4557 [ALC269_FIXUP_ASUS_G73JW] = { 4558 .type = ALC_FIXUP_PINS, 4559 .v.pins = (const struct alc_pincfg[]) { 4560 { 0x17, 0x99130111 }, /* subwoofer */ 4561 { } 4562 } 4563 }, 4564 [ALC269_FIXUP_LENOVO_EAPD] = { 4565 .type = ALC_FIXUP_VERBS, 4566 .v.verbs = (const struct hda_verb[]) { 4567 {0x14, AC_VERB_SET_EAPD_BTLENABLE, 0}, 4568 {} 4569 } 4570 }, 4571 [ALC275_FIXUP_SONY_HWEQ] = { 4572 .type = ALC_FIXUP_FUNC, 4573 .v.func = alc269_fixup_hweq, 4574 .chained = true, 4575 .chain_id = ALC275_FIXUP_SONY_VAIO_GPIO2 4576 }, 4577 [ALC271_FIXUP_DMIC] = { 4578 .type = ALC_FIXUP_FUNC, 4579 .v.func = alc271_fixup_dmic, 4580 }, 4581 [ALC269_FIXUP_PCM_44K] = { 4582 .type = ALC_FIXUP_FUNC, 4583 .v.func = alc269_fixup_pcm_44k, 4584 }, 4585 [ALC269_FIXUP_STEREO_DMIC] = { 4586 .type = ALC_FIXUP_FUNC, 4587 .v.func = alc269_fixup_stereo_dmic, 4588 }, 4589 }; 4590 4591 static const struct snd_pci_quirk alc269_fixup_tbl[] = { 4592 SND_PCI_QUIRK(0x1043, 0x1a13, "Asus G73Jw", ALC269_FIXUP_ASUS_G73JW), 4593 SND_PCI_QUIRK(0x1043, 0x16e3, "ASUS UX50", ALC269_FIXUP_STEREO_DMIC), 4594 SND_PCI_QUIRK(0x1043, 0x831a, "ASUS P901", ALC269_FIXUP_STEREO_DMIC), 4595 SND_PCI_QUIRK(0x1043, 0x834a, "ASUS S101", ALC269_FIXUP_STEREO_DMIC), 4596 SND_PCI_QUIRK(0x1043, 0x8398, "ASUS P1005", ALC269_FIXUP_STEREO_DMIC), 4597 SND_PCI_QUIRK(0x1043, 0x83ce, "ASUS P1005", ALC269_FIXUP_STEREO_DMIC), 4598 SND_PCI_QUIRK(0x104d, 0x9073, "Sony VAIO", ALC275_FIXUP_SONY_VAIO_GPIO2), 4599 SND_PCI_QUIRK(0x104d, 0x907b, "Sony VAIO", ALC275_FIXUP_SONY_HWEQ), 4600 SND_PCI_QUIRK(0x104d, 0x9084, "Sony VAIO", ALC275_FIXUP_SONY_HWEQ), 4601 SND_PCI_QUIRK_VENDOR(0x104d, "Sony VAIO", ALC269_FIXUP_SONY_VAIO), 4602 SND_PCI_QUIRK(0x1028, 0x0470, "Dell M101z", ALC269_FIXUP_DELL_M101Z), 4603 SND_PCI_QUIRK_VENDOR(0x1025, "Acer Aspire", ALC271_FIXUP_DMIC), 4604 SND_PCI_QUIRK(0x17aa, 0x20f2, "Thinkpad SL410/510", ALC269_FIXUP_SKU_IGNORE), 4605 SND_PCI_QUIRK(0x17aa, 0x215e, "Thinkpad L512", ALC269_FIXUP_SKU_IGNORE), 4606 SND_PCI_QUIRK(0x17aa, 0x21b8, "Thinkpad Edge 14", ALC269_FIXUP_SKU_IGNORE), 4607 SND_PCI_QUIRK(0x17aa, 0x21ca, "Thinkpad L412", ALC269_FIXUP_SKU_IGNORE), 4608 SND_PCI_QUIRK(0x17aa, 0x21e9, "Thinkpad Edge 15", ALC269_FIXUP_SKU_IGNORE), 4609 SND_PCI_QUIRK(0x17aa, 0x3bf8, "Lenovo Ideapd", ALC269_FIXUP_PCM_44K), 4610 SND_PCI_QUIRK(0x17aa, 0x9e54, "LENOVO NB", ALC269_FIXUP_LENOVO_EAPD), 4611 {} 4612 }; 4613 4614 4615 static int alc269_fill_coef(struct hda_codec *codec) 4616 { 4617 int val; 4618 4619 if ((alc_read_coef_idx(codec, 0) & 0x00ff) < 0x015) { 4620 alc_write_coef_idx(codec, 0xf, 0x960b); 4621 alc_write_coef_idx(codec, 0xe, 0x8817); 4622 } 4623 4624 if ((alc_read_coef_idx(codec, 0) & 0x00ff) == 0x016) { 4625 alc_write_coef_idx(codec, 0xf, 0x960b); 4626 alc_write_coef_idx(codec, 0xe, 0x8814); 4627 } 4628 4629 if ((alc_read_coef_idx(codec, 0) & 0x00ff) == 0x017) { 4630 val = alc_read_coef_idx(codec, 0x04); 4631 /* Power up output pin */ 4632 alc_write_coef_idx(codec, 0x04, val | (1<<11)); 4633 } 4634 4635 if ((alc_read_coef_idx(codec, 0) & 0x00ff) == 0x018) { 4636 val = alc_read_coef_idx(codec, 0xd); 4637 if ((val & 0x0c00) >> 10 != 0x1) { 4638 /* Capless ramp up clock control */ 4639 alc_write_coef_idx(codec, 0xd, val | (1<<10)); 4640 } 4641 val = alc_read_coef_idx(codec, 0x17); 4642 if ((val & 0x01c0) >> 6 != 0x4) { 4643 /* Class D power on reset */ 4644 alc_write_coef_idx(codec, 0x17, val | (1<<7)); 4645 } 4646 } 4647 4648 val = alc_read_coef_idx(codec, 0xd); /* Class D */ 4649 alc_write_coef_idx(codec, 0xd, val | (1<<14)); 4650 4651 val = alc_read_coef_idx(codec, 0x4); /* HP */ 4652 alc_write_coef_idx(codec, 0x4, val | (1<<11)); 4653 4654 return 0; 4655 } 4656 4657 /* 4658 */ 4659 #ifdef CONFIG_SND_HDA_ENABLE_REALTEK_QUIRKS 4660 #include "alc269_quirks.c" 4661 #endif 4662 4663 static int patch_alc269(struct hda_codec *codec) 4664 { 4665 struct alc_spec *spec; 4666 int board_config, coef; 4667 int err; 4668 4669 spec = kzalloc(sizeof(*spec), GFP_KERNEL); 4670 if (spec == NULL) 4671 return -ENOMEM; 4672 4673 codec->spec = spec; 4674 4675 spec->mixer_nid = 0x0b; 4676 4677 alc_auto_parse_customize_define(codec); 4678 4679 if (codec->vendor_id == 0x10ec0269) { 4680 spec->codec_variant = ALC269_TYPE_ALC269VA; 4681 coef = alc_read_coef_idx(codec, 0); 4682 if ((coef & 0x00f0) == 0x0010) { 4683 if (codec->bus->pci->subsystem_vendor == 0x1025 && 4684 spec->cdefine.platform_type == 1) { 4685 alc_codec_rename(codec, "ALC271X"); 4686 } else if ((coef & 0xf000) == 0x2000) { 4687 alc_codec_rename(codec, "ALC259"); 4688 } else if ((coef & 0xf000) == 0x3000) { 4689 alc_codec_rename(codec, "ALC258"); 4690 } else if ((coef & 0xfff0) == 0x3010) { 4691 alc_codec_rename(codec, "ALC277"); 4692 } else { 4693 alc_codec_rename(codec, "ALC269VB"); 4694 } 4695 spec->codec_variant = ALC269_TYPE_ALC269VB; 4696 } else if ((coef & 0x00f0) == 0x0020) { 4697 if (coef == 0xa023) 4698 alc_codec_rename(codec, "ALC259"); 4699 else if (coef == 0x6023) 4700 alc_codec_rename(codec, "ALC281X"); 4701 else if (codec->bus->pci->subsystem_vendor == 0x17aa && 4702 codec->bus->pci->subsystem_device == 0x21f3) 4703 alc_codec_rename(codec, "ALC3202"); 4704 else 4705 alc_codec_rename(codec, "ALC269VC"); 4706 spec->codec_variant = ALC269_TYPE_ALC269VC; 4707 } else 4708 alc_fix_pll_init(codec, 0x20, 0x04, 15); 4709 alc269_fill_coef(codec); 4710 } 4711 4712 board_config = alc_board_config(codec, ALC269_MODEL_LAST, 4713 alc269_models, alc269_cfg_tbl); 4714 4715 if (board_config < 0) { 4716 printk(KERN_INFO "hda_codec: %s: BIOS auto-probing.\n", 4717 codec->chip_name); 4718 board_config = ALC_MODEL_AUTO; 4719 } 4720 4721 if (board_config == ALC_MODEL_AUTO) { 4722 alc_pick_fixup(codec, NULL, alc269_fixup_tbl, alc269_fixups); 4723 alc_apply_fixup(codec, ALC_FIXUP_ACT_PRE_PROBE); 4724 } 4725 4726 if (board_config == ALC_MODEL_AUTO) { 4727 /* automatic parse from the BIOS config */ 4728 err = alc269_parse_auto_config(codec); 4729 if (err < 0) { 4730 alc_free(codec); 4731 return err; 4732 } 4733 #ifdef CONFIG_SND_HDA_ENABLE_REALTEK_QUIRKS 4734 else if (!err) { 4735 printk(KERN_INFO 4736 "hda_codec: Cannot set up configuration " 4737 "from BIOS. Using base mode...\n"); 4738 board_config = ALC269_BASIC; 4739 } 4740 #endif 4741 } 4742 4743 if (board_config != ALC_MODEL_AUTO) 4744 setup_preset(codec, &alc269_presets[board_config]); 4745 4746 if (!spec->no_analog && !spec->adc_nids) { 4747 alc_auto_fill_adc_caps(codec); 4748 alc_rebuild_imux_for_auto_mic(codec); 4749 alc_remove_invalid_adc_nids(codec); 4750 } 4751 4752 if (!spec->no_analog && !spec->cap_mixer) 4753 set_capture_mixer(codec); 4754 4755 if (!spec->no_analog && has_cdefine_beep(codec)) { 4756 err = snd_hda_attach_beep_device(codec, 0x1); 4757 if (err < 0) { 4758 alc_free(codec); 4759 return err; 4760 } 4761 set_beep_amp(spec, 0x0b, 0x04, HDA_INPUT); 4762 } 4763 4764 alc_apply_fixup(codec, ALC_FIXUP_ACT_PROBE); 4765 4766 spec->vmaster_nid = 0x02; 4767 4768 codec->patch_ops = alc_patch_ops; 4769 #ifdef CONFIG_PM 4770 codec->patch_ops.resume = alc269_resume; 4771 #endif 4772 if (board_config == ALC_MODEL_AUTO) 4773 spec->init_hook = alc_auto_init_std; 4774 spec->shutup = alc269_shutup; 4775 4776 alc_init_jacks(codec); 4777 #ifdef CONFIG_SND_HDA_POWER_SAVE 4778 if (!spec->loopback.amplist) 4779 spec->loopback.amplist = alc269_loopbacks; 4780 if (alc269_mic2_for_mute_led(codec)) 4781 codec->patch_ops.check_power_status = alc269_mic2_mute_check_ps; 4782 #endif 4783 4784 return 0; 4785 } 4786 4787 /* 4788 * ALC861 4789 */ 4790 4791 static int alc861_parse_auto_config(struct hda_codec *codec) 4792 { 4793 static const hda_nid_t alc861_ignore[] = { 0x1d, 0 }; 4794 static const hda_nid_t alc861_ssids[] = { 0x0e, 0x0f, 0x0b, 0 }; 4795 return alc_parse_auto_config(codec, alc861_ignore, alc861_ssids); 4796 } 4797 4798 #ifdef CONFIG_SND_HDA_POWER_SAVE 4799 static const struct hda_amp_list alc861_loopbacks[] = { 4800 { 0x15, HDA_INPUT, 0 }, 4801 { 0x15, HDA_INPUT, 1 }, 4802 { 0x15, HDA_INPUT, 2 }, 4803 { 0x15, HDA_INPUT, 3 }, 4804 { } /* end */ 4805 }; 4806 #endif 4807 4808 4809 /* Pin config fixes */ 4810 enum { 4811 PINFIX_FSC_AMILO_PI1505, 4812 }; 4813 4814 static const struct alc_fixup alc861_fixups[] = { 4815 [PINFIX_FSC_AMILO_PI1505] = { 4816 .type = ALC_FIXUP_PINS, 4817 .v.pins = (const struct alc_pincfg[]) { 4818 { 0x0b, 0x0221101f }, /* HP */ 4819 { 0x0f, 0x90170310 }, /* speaker */ 4820 { } 4821 } 4822 }, 4823 }; 4824 4825 static const struct snd_pci_quirk alc861_fixup_tbl[] = { 4826 SND_PCI_QUIRK(0x1734, 0x10c7, "FSC Amilo Pi1505", PINFIX_FSC_AMILO_PI1505), 4827 {} 4828 }; 4829 4830 /* 4831 */ 4832 #ifdef CONFIG_SND_HDA_ENABLE_REALTEK_QUIRKS 4833 #include "alc861_quirks.c" 4834 #endif 4835 4836 static int patch_alc861(struct hda_codec *codec) 4837 { 4838 struct alc_spec *spec; 4839 int board_config; 4840 int err; 4841 4842 spec = kzalloc(sizeof(*spec), GFP_KERNEL); 4843 if (spec == NULL) 4844 return -ENOMEM; 4845 4846 codec->spec = spec; 4847 4848 spec->mixer_nid = 0x15; 4849 4850 board_config = alc_board_config(codec, ALC861_MODEL_LAST, 4851 alc861_models, alc861_cfg_tbl); 4852 4853 if (board_config < 0) { 4854 printk(KERN_INFO "hda_codec: %s: BIOS auto-probing.\n", 4855 codec->chip_name); 4856 board_config = ALC_MODEL_AUTO; 4857 } 4858 4859 if (board_config == ALC_MODEL_AUTO) { 4860 alc_pick_fixup(codec, NULL, alc861_fixup_tbl, alc861_fixups); 4861 alc_apply_fixup(codec, ALC_FIXUP_ACT_PRE_PROBE); 4862 } 4863 4864 if (board_config == ALC_MODEL_AUTO) { 4865 /* automatic parse from the BIOS config */ 4866 err = alc861_parse_auto_config(codec); 4867 if (err < 0) { 4868 alc_free(codec); 4869 return err; 4870 } 4871 #ifdef CONFIG_SND_HDA_ENABLE_REALTEK_QUIRKS 4872 else if (!err) { 4873 printk(KERN_INFO 4874 "hda_codec: Cannot set up configuration " 4875 "from BIOS. Using base mode...\n"); 4876 board_config = ALC861_3ST_DIG; 4877 } 4878 #endif 4879 } 4880 4881 if (board_config != ALC_MODEL_AUTO) 4882 setup_preset(codec, &alc861_presets[board_config]); 4883 4884 if (!spec->no_analog && !spec->adc_nids) { 4885 alc_auto_fill_adc_caps(codec); 4886 alc_rebuild_imux_for_auto_mic(codec); 4887 alc_remove_invalid_adc_nids(codec); 4888 } 4889 4890 if (!spec->no_analog && !spec->cap_mixer) 4891 set_capture_mixer(codec); 4892 4893 if (!spec->no_analog) { 4894 err = snd_hda_attach_beep_device(codec, 0x23); 4895 if (err < 0) { 4896 alc_free(codec); 4897 return err; 4898 } 4899 set_beep_amp(spec, 0x23, 0, HDA_OUTPUT); 4900 } 4901 4902 spec->vmaster_nid = 0x03; 4903 4904 alc_apply_fixup(codec, ALC_FIXUP_ACT_PROBE); 4905 4906 codec->patch_ops = alc_patch_ops; 4907 if (board_config == ALC_MODEL_AUTO) { 4908 spec->init_hook = alc_auto_init_std; 4909 #ifdef CONFIG_SND_HDA_POWER_SAVE 4910 spec->power_hook = alc_power_eapd; 4911 #endif 4912 } 4913 #ifdef CONFIG_SND_HDA_POWER_SAVE 4914 if (!spec->loopback.amplist) 4915 spec->loopback.amplist = alc861_loopbacks; 4916 #endif 4917 4918 return 0; 4919 } 4920 4921 /* 4922 * ALC861-VD support 4923 * 4924 * Based on ALC882 4925 * 4926 * In addition, an independent DAC 4927 */ 4928 #ifdef CONFIG_SND_HDA_POWER_SAVE 4929 #define alc861vd_loopbacks alc880_loopbacks 4930 #endif 4931 4932 static int alc861vd_parse_auto_config(struct hda_codec *codec) 4933 { 4934 static const hda_nid_t alc861vd_ignore[] = { 0x1d, 0 }; 4935 static const hda_nid_t alc861vd_ssids[] = { 0x15, 0x1b, 0x14, 0 }; 4936 return alc_parse_auto_config(codec, alc861vd_ignore, alc861vd_ssids); 4937 } 4938 4939 enum { 4940 ALC660VD_FIX_ASUS_GPIO1 4941 }; 4942 4943 /* reset GPIO1 */ 4944 static const struct alc_fixup alc861vd_fixups[] = { 4945 [ALC660VD_FIX_ASUS_GPIO1] = { 4946 .type = ALC_FIXUP_VERBS, 4947 .v.verbs = (const struct hda_verb[]) { 4948 {0x01, AC_VERB_SET_GPIO_MASK, 0x03}, 4949 {0x01, AC_VERB_SET_GPIO_DIRECTION, 0x01}, 4950 {0x01, AC_VERB_SET_GPIO_DATA, 0x01}, 4951 { } 4952 } 4953 }, 4954 }; 4955 4956 static const struct snd_pci_quirk alc861vd_fixup_tbl[] = { 4957 SND_PCI_QUIRK(0x1043, 0x1339, "ASUS A7-K", ALC660VD_FIX_ASUS_GPIO1), 4958 {} 4959 }; 4960 4961 static const struct hda_verb alc660vd_eapd_verbs[] = { 4962 {0x14, AC_VERB_SET_EAPD_BTLENABLE, 2}, 4963 {0x15, AC_VERB_SET_EAPD_BTLENABLE, 2}, 4964 { } 4965 }; 4966 4967 /* 4968 */ 4969 #ifdef CONFIG_SND_HDA_ENABLE_REALTEK_QUIRKS 4970 #include "alc861vd_quirks.c" 4971 #endif 4972 4973 static int patch_alc861vd(struct hda_codec *codec) 4974 { 4975 struct alc_spec *spec; 4976 int err, board_config; 4977 4978 spec = kzalloc(sizeof(*spec), GFP_KERNEL); 4979 if (spec == NULL) 4980 return -ENOMEM; 4981 4982 codec->spec = spec; 4983 4984 spec->mixer_nid = 0x0b; 4985 4986 board_config = alc_board_config(codec, ALC861VD_MODEL_LAST, 4987 alc861vd_models, alc861vd_cfg_tbl); 4988 4989 if (board_config < 0) { 4990 printk(KERN_INFO "hda_codec: %s: BIOS auto-probing.\n", 4991 codec->chip_name); 4992 board_config = ALC_MODEL_AUTO; 4993 } 4994 4995 if (board_config == ALC_MODEL_AUTO) { 4996 alc_pick_fixup(codec, NULL, alc861vd_fixup_tbl, alc861vd_fixups); 4997 alc_apply_fixup(codec, ALC_FIXUP_ACT_PRE_PROBE); 4998 } 4999 5000 if (board_config == ALC_MODEL_AUTO) { 5001 /* automatic parse from the BIOS config */ 5002 err = alc861vd_parse_auto_config(codec); 5003 if (err < 0) { 5004 alc_free(codec); 5005 return err; 5006 } 5007 #ifdef CONFIG_SND_HDA_ENABLE_REALTEK_QUIRKS 5008 else if (!err) { 5009 printk(KERN_INFO 5010 "hda_codec: Cannot set up configuration " 5011 "from BIOS. Using base mode...\n"); 5012 board_config = ALC861VD_3ST; 5013 } 5014 #endif 5015 } 5016 5017 if (board_config != ALC_MODEL_AUTO) 5018 setup_preset(codec, &alc861vd_presets[board_config]); 5019 5020 if (codec->vendor_id == 0x10ec0660) { 5021 /* always turn on EAPD */ 5022 add_verb(spec, alc660vd_eapd_verbs); 5023 } 5024 5025 if (!spec->no_analog && !spec->adc_nids) { 5026 alc_auto_fill_adc_caps(codec); 5027 alc_rebuild_imux_for_auto_mic(codec); 5028 alc_remove_invalid_adc_nids(codec); 5029 } 5030 5031 if (!spec->no_analog && !spec->cap_mixer) 5032 set_capture_mixer(codec); 5033 5034 if (!spec->no_analog) { 5035 err = snd_hda_attach_beep_device(codec, 0x23); 5036 if (err < 0) { 5037 alc_free(codec); 5038 return err; 5039 } 5040 set_beep_amp(spec, 0x0b, 0x05, HDA_INPUT); 5041 } 5042 5043 spec->vmaster_nid = 0x02; 5044 5045 alc_apply_fixup(codec, ALC_FIXUP_ACT_PROBE); 5046 5047 codec->patch_ops = alc_patch_ops; 5048 5049 if (board_config == ALC_MODEL_AUTO) 5050 spec->init_hook = alc_auto_init_std; 5051 spec->shutup = alc_eapd_shutup; 5052 #ifdef CONFIG_SND_HDA_POWER_SAVE 5053 if (!spec->loopback.amplist) 5054 spec->loopback.amplist = alc861vd_loopbacks; 5055 #endif 5056 5057 return 0; 5058 } 5059 5060 /* 5061 * ALC662 support 5062 * 5063 * ALC662 is almost identical with ALC880 but has cleaner and more flexible 5064 * configuration. Each pin widget can choose any input DACs and a mixer. 5065 * Each ADC is connected from a mixer of all inputs. This makes possible 5066 * 6-channel independent captures. 5067 * 5068 * In addition, an independent DAC for the multi-playback (not used in this 5069 * driver yet). 5070 */ 5071 #ifdef CONFIG_SND_HDA_POWER_SAVE 5072 #define alc662_loopbacks alc880_loopbacks 5073 #endif 5074 5075 /* 5076 * BIOS auto configuration 5077 */ 5078 5079 static int alc662_parse_auto_config(struct hda_codec *codec) 5080 { 5081 static const hda_nid_t alc662_ignore[] = { 0x1d, 0 }; 5082 static const hda_nid_t alc663_ssids[] = { 0x15, 0x1b, 0x14, 0x21 }; 5083 static const hda_nid_t alc662_ssids[] = { 0x15, 0x1b, 0x14, 0 }; 5084 const hda_nid_t *ssids; 5085 5086 if (codec->vendor_id == 0x10ec0272 || codec->vendor_id == 0x10ec0663 || 5087 codec->vendor_id == 0x10ec0665 || codec->vendor_id == 0x10ec0670) 5088 ssids = alc663_ssids; 5089 else 5090 ssids = alc662_ssids; 5091 return alc_parse_auto_config(codec, alc662_ignore, ssids); 5092 } 5093 5094 static void alc272_fixup_mario(struct hda_codec *codec, 5095 const struct alc_fixup *fix, int action) 5096 { 5097 if (action != ALC_FIXUP_ACT_PROBE) 5098 return; 5099 if (snd_hda_override_amp_caps(codec, 0x2, HDA_OUTPUT, 5100 (0x3b << AC_AMPCAP_OFFSET_SHIFT) | 5101 (0x3b << AC_AMPCAP_NUM_STEPS_SHIFT) | 5102 (0x03 << AC_AMPCAP_STEP_SIZE_SHIFT) | 5103 (0 << AC_AMPCAP_MUTE_SHIFT))) 5104 printk(KERN_WARNING 5105 "hda_codec: failed to override amp caps for NID 0x2\n"); 5106 } 5107 5108 enum { 5109 ALC662_FIXUP_ASPIRE, 5110 ALC662_FIXUP_IDEAPAD, 5111 ALC272_FIXUP_MARIO, 5112 ALC662_FIXUP_CZC_P10T, 5113 ALC662_FIXUP_SKU_IGNORE, 5114 ALC662_FIXUP_HP_RP5800, 5115 }; 5116 5117 static const struct alc_fixup alc662_fixups[] = { 5118 [ALC662_FIXUP_ASPIRE] = { 5119 .type = ALC_FIXUP_PINS, 5120 .v.pins = (const struct alc_pincfg[]) { 5121 { 0x15, 0x99130112 }, /* subwoofer */ 5122 { } 5123 } 5124 }, 5125 [ALC662_FIXUP_IDEAPAD] = { 5126 .type = ALC_FIXUP_PINS, 5127 .v.pins = (const struct alc_pincfg[]) { 5128 { 0x17, 0x99130112 }, /* subwoofer */ 5129 { } 5130 } 5131 }, 5132 [ALC272_FIXUP_MARIO] = { 5133 .type = ALC_FIXUP_FUNC, 5134 .v.func = alc272_fixup_mario, 5135 }, 5136 [ALC662_FIXUP_CZC_P10T] = { 5137 .type = ALC_FIXUP_VERBS, 5138 .v.verbs = (const struct hda_verb[]) { 5139 {0x14, AC_VERB_SET_EAPD_BTLENABLE, 0}, 5140 {} 5141 } 5142 }, 5143 [ALC662_FIXUP_SKU_IGNORE] = { 5144 .type = ALC_FIXUP_SKU, 5145 .v.sku = ALC_FIXUP_SKU_IGNORE, 5146 }, 5147 [ALC662_FIXUP_HP_RP5800] = { 5148 .type = ALC_FIXUP_PINS, 5149 .v.pins = (const struct alc_pincfg[]) { 5150 { 0x14, 0x0221201f }, /* HP out */ 5151 { } 5152 }, 5153 .chained = true, 5154 .chain_id = ALC662_FIXUP_SKU_IGNORE 5155 }, 5156 }; 5157 5158 static const struct snd_pci_quirk alc662_fixup_tbl[] = { 5159 SND_PCI_QUIRK(0x1025, 0x0308, "Acer Aspire 8942G", ALC662_FIXUP_ASPIRE), 5160 SND_PCI_QUIRK(0x1025, 0x031c, "Gateway NV79", ALC662_FIXUP_SKU_IGNORE), 5161 SND_PCI_QUIRK(0x1025, 0x038b, "Acer Aspire 8943G", ALC662_FIXUP_ASPIRE), 5162 SND_PCI_QUIRK(0x103c, 0x1632, "HP RP5800", ALC662_FIXUP_HP_RP5800), 5163 SND_PCI_QUIRK(0x144d, 0xc051, "Samsung R720", ALC662_FIXUP_IDEAPAD), 5164 SND_PCI_QUIRK(0x17aa, 0x38af, "Lenovo Ideapad Y550P", ALC662_FIXUP_IDEAPAD), 5165 SND_PCI_QUIRK(0x17aa, 0x3a0d, "Lenovo Ideapad Y550", ALC662_FIXUP_IDEAPAD), 5166 SND_PCI_QUIRK(0x1b35, 0x2206, "CZC P10T", ALC662_FIXUP_CZC_P10T), 5167 {} 5168 }; 5169 5170 static const struct alc_model_fixup alc662_fixup_models[] = { 5171 {.id = ALC272_FIXUP_MARIO, .name = "mario"}, 5172 {} 5173 }; 5174 5175 5176 /* 5177 */ 5178 #ifdef CONFIG_SND_HDA_ENABLE_REALTEK_QUIRKS 5179 #include "alc662_quirks.c" 5180 #endif 5181 5182 static int patch_alc662(struct hda_codec *codec) 5183 { 5184 struct alc_spec *spec; 5185 int err, board_config; 5186 int coef; 5187 5188 spec = kzalloc(sizeof(*spec), GFP_KERNEL); 5189 if (!spec) 5190 return -ENOMEM; 5191 5192 codec->spec = spec; 5193 5194 spec->mixer_nid = 0x0b; 5195 5196 alc_auto_parse_customize_define(codec); 5197 5198 alc_fix_pll_init(codec, 0x20, 0x04, 15); 5199 5200 coef = alc_read_coef_idx(codec, 0); 5201 if (coef == 0x8020 || coef == 0x8011) 5202 alc_codec_rename(codec, "ALC661"); 5203 else if (coef & (1 << 14) && 5204 codec->bus->pci->subsystem_vendor == 0x1025 && 5205 spec->cdefine.platform_type == 1) 5206 alc_codec_rename(codec, "ALC272X"); 5207 else if (coef == 0x4011) 5208 alc_codec_rename(codec, "ALC656"); 5209 5210 board_config = alc_board_config(codec, ALC662_MODEL_LAST, 5211 alc662_models, alc662_cfg_tbl); 5212 if (board_config < 0) { 5213 printk(KERN_INFO "hda_codec: %s: BIOS auto-probing.\n", 5214 codec->chip_name); 5215 board_config = ALC_MODEL_AUTO; 5216 } 5217 5218 if (board_config == ALC_MODEL_AUTO) { 5219 alc_pick_fixup(codec, alc662_fixup_models, 5220 alc662_fixup_tbl, alc662_fixups); 5221 alc_apply_fixup(codec, ALC_FIXUP_ACT_PRE_PROBE); 5222 /* automatic parse from the BIOS config */ 5223 err = alc662_parse_auto_config(codec); 5224 if (err < 0) { 5225 alc_free(codec); 5226 return err; 5227 } 5228 #ifdef CONFIG_SND_HDA_ENABLE_REALTEK_QUIRKS 5229 else if (!err) { 5230 printk(KERN_INFO 5231 "hda_codec: Cannot set up configuration " 5232 "from BIOS. Using base mode...\n"); 5233 board_config = ALC662_3ST_2ch_DIG; 5234 } 5235 #endif 5236 } 5237 5238 if (board_config != ALC_MODEL_AUTO) 5239 setup_preset(codec, &alc662_presets[board_config]); 5240 5241 if (!spec->no_analog && !spec->adc_nids) { 5242 alc_auto_fill_adc_caps(codec); 5243 alc_rebuild_imux_for_auto_mic(codec); 5244 alc_remove_invalid_adc_nids(codec); 5245 } 5246 5247 if (!spec->no_analog && !spec->cap_mixer) 5248 set_capture_mixer(codec); 5249 5250 if (!spec->no_analog && has_cdefine_beep(codec)) { 5251 err = snd_hda_attach_beep_device(codec, 0x1); 5252 if (err < 0) { 5253 alc_free(codec); 5254 return err; 5255 } 5256 switch (codec->vendor_id) { 5257 case 0x10ec0662: 5258 set_beep_amp(spec, 0x0b, 0x05, HDA_INPUT); 5259 break; 5260 case 0x10ec0272: 5261 case 0x10ec0663: 5262 case 0x10ec0665: 5263 set_beep_amp(spec, 0x0b, 0x04, HDA_INPUT); 5264 break; 5265 case 0x10ec0273: 5266 set_beep_amp(spec, 0x0b, 0x03, HDA_INPUT); 5267 break; 5268 } 5269 } 5270 spec->vmaster_nid = 0x02; 5271 5272 alc_apply_fixup(codec, ALC_FIXUP_ACT_PROBE); 5273 5274 codec->patch_ops = alc_patch_ops; 5275 if (board_config == ALC_MODEL_AUTO) 5276 spec->init_hook = alc_auto_init_std; 5277 spec->shutup = alc_eapd_shutup; 5278 5279 alc_init_jacks(codec); 5280 5281 #ifdef CONFIG_SND_HDA_POWER_SAVE 5282 if (!spec->loopback.amplist) 5283 spec->loopback.amplist = alc662_loopbacks; 5284 #endif 5285 5286 return 0; 5287 } 5288 5289 static int patch_alc888(struct hda_codec *codec) 5290 { 5291 if ((alc_read_coef_idx(codec, 0) & 0x00f0)==0x0030){ 5292 kfree(codec->chip_name); 5293 if (codec->vendor_id == 0x10ec0887) 5294 codec->chip_name = kstrdup("ALC887-VD", GFP_KERNEL); 5295 else 5296 codec->chip_name = kstrdup("ALC888-VD", GFP_KERNEL); 5297 if (!codec->chip_name) { 5298 alc_free(codec); 5299 return -ENOMEM; 5300 } 5301 return patch_alc662(codec); 5302 } 5303 return patch_alc882(codec); 5304 } 5305 5306 static int patch_alc899(struct hda_codec *codec) 5307 { 5308 if ((alc_read_coef_idx(codec, 0) & 0x2000) != 0x2000) { 5309 kfree(codec->chip_name); 5310 codec->chip_name = kstrdup("ALC898", GFP_KERNEL); 5311 } 5312 return patch_alc882(codec); 5313 } 5314 5315 /* 5316 * ALC680 support 5317 */ 5318 5319 static int alc680_parse_auto_config(struct hda_codec *codec) 5320 { 5321 return alc_parse_auto_config(codec, NULL, NULL); 5322 } 5323 5324 /* 5325 */ 5326 #ifdef CONFIG_SND_HDA_ENABLE_REALTEK_QUIRKS 5327 #include "alc680_quirks.c" 5328 #endif 5329 5330 static int patch_alc680(struct hda_codec *codec) 5331 { 5332 struct alc_spec *spec; 5333 int board_config; 5334 int err; 5335 5336 spec = kzalloc(sizeof(*spec), GFP_KERNEL); 5337 if (spec == NULL) 5338 return -ENOMEM; 5339 5340 codec->spec = spec; 5341 5342 /* ALC680 has no aa-loopback mixer */ 5343 5344 board_config = alc_board_config(codec, ALC680_MODEL_LAST, 5345 alc680_models, alc680_cfg_tbl); 5346 5347 if (board_config < 0) { 5348 printk(KERN_INFO "hda_codec: %s: BIOS auto-probing.\n", 5349 codec->chip_name); 5350 board_config = ALC_MODEL_AUTO; 5351 } 5352 5353 if (board_config == ALC_MODEL_AUTO) { 5354 /* automatic parse from the BIOS config */ 5355 err = alc680_parse_auto_config(codec); 5356 if (err < 0) { 5357 alc_free(codec); 5358 return err; 5359 } 5360 #ifdef CONFIG_SND_HDA_ENABLE_REALTEK_QUIRKS 5361 else if (!err) { 5362 printk(KERN_INFO 5363 "hda_codec: Cannot set up configuration " 5364 "from BIOS. Using base mode...\n"); 5365 board_config = ALC680_BASE; 5366 } 5367 #endif 5368 } 5369 5370 if (board_config != ALC_MODEL_AUTO) { 5371 setup_preset(codec, &alc680_presets[board_config]); 5372 #ifdef CONFIG_SND_HDA_ENABLE_REALTEK_QUIRKS 5373 spec->stream_analog_capture = &alc680_pcm_analog_auto_capture; 5374 #endif 5375 } 5376 5377 if (!spec->no_analog && !spec->adc_nids) { 5378 alc_auto_fill_adc_caps(codec); 5379 alc_rebuild_imux_for_auto_mic(codec); 5380 alc_remove_invalid_adc_nids(codec); 5381 } 5382 5383 if (!spec->no_analog && !spec->cap_mixer) 5384 set_capture_mixer(codec); 5385 5386 spec->vmaster_nid = 0x02; 5387 5388 codec->patch_ops = alc_patch_ops; 5389 if (board_config == ALC_MODEL_AUTO) 5390 spec->init_hook = alc_auto_init_std; 5391 5392 return 0; 5393 } 5394 5395 /* 5396 * patch entries 5397 */ 5398 static const struct hda_codec_preset snd_hda_preset_realtek[] = { 5399 { .id = 0x10ec0221, .name = "ALC221", .patch = patch_alc269 }, 5400 { .id = 0x10ec0260, .name = "ALC260", .patch = patch_alc260 }, 5401 { .id = 0x10ec0262, .name = "ALC262", .patch = patch_alc262 }, 5402 { .id = 0x10ec0267, .name = "ALC267", .patch = patch_alc268 }, 5403 { .id = 0x10ec0268, .name = "ALC268", .patch = patch_alc268 }, 5404 { .id = 0x10ec0269, .name = "ALC269", .patch = patch_alc269 }, 5405 { .id = 0x10ec0270, .name = "ALC270", .patch = patch_alc269 }, 5406 { .id = 0x10ec0272, .name = "ALC272", .patch = patch_alc662 }, 5407 { .id = 0x10ec0275, .name = "ALC275", .patch = patch_alc269 }, 5408 { .id = 0x10ec0276, .name = "ALC276", .patch = patch_alc269 }, 5409 { .id = 0x10ec0861, .rev = 0x100340, .name = "ALC660", 5410 .patch = patch_alc861 }, 5411 { .id = 0x10ec0660, .name = "ALC660-VD", .patch = patch_alc861vd }, 5412 { .id = 0x10ec0861, .name = "ALC861", .patch = patch_alc861 }, 5413 { .id = 0x10ec0862, .name = "ALC861-VD", .patch = patch_alc861vd }, 5414 { .id = 0x10ec0662, .rev = 0x100002, .name = "ALC662 rev2", 5415 .patch = patch_alc882 }, 5416 { .id = 0x10ec0662, .rev = 0x100101, .name = "ALC662 rev1", 5417 .patch = patch_alc662 }, 5418 { .id = 0x10ec0663, .name = "ALC663", .patch = patch_alc662 }, 5419 { .id = 0x10ec0665, .name = "ALC665", .patch = patch_alc662 }, 5420 { .id = 0x10ec0670, .name = "ALC670", .patch = patch_alc662 }, 5421 { .id = 0x10ec0680, .name = "ALC680", .patch = patch_alc680 }, 5422 { .id = 0x10ec0880, .name = "ALC880", .patch = patch_alc880 }, 5423 { .id = 0x10ec0882, .name = "ALC882", .patch = patch_alc882 }, 5424 { .id = 0x10ec0883, .name = "ALC883", .patch = patch_alc882 }, 5425 { .id = 0x10ec0885, .rev = 0x100101, .name = "ALC889A", 5426 .patch = patch_alc882 }, 5427 { .id = 0x10ec0885, .rev = 0x100103, .name = "ALC889A", 5428 .patch = patch_alc882 }, 5429 { .id = 0x10ec0885, .name = "ALC885", .patch = patch_alc882 }, 5430 { .id = 0x10ec0887, .name = "ALC887", .patch = patch_alc888 }, 5431 { .id = 0x10ec0888, .rev = 0x100101, .name = "ALC1200", 5432 .patch = patch_alc882 }, 5433 { .id = 0x10ec0888, .name = "ALC888", .patch = patch_alc888 }, 5434 { .id = 0x10ec0889, .name = "ALC889", .patch = patch_alc882 }, 5435 { .id = 0x10ec0892, .name = "ALC892", .patch = patch_alc662 }, 5436 { .id = 0x10ec0899, .name = "ALC899", .patch = patch_alc899 }, 5437 {} /* terminator */ 5438 }; 5439 5440 MODULE_ALIAS("snd-hda-codec-id:10ec*"); 5441 5442 MODULE_LICENSE("GPL"); 5443 MODULE_DESCRIPTION("Realtek HD-audio codec"); 5444 5445 static struct hda_codec_preset_list realtek_list = { 5446 .preset = snd_hda_preset_realtek, 5447 .owner = THIS_MODULE, 5448 }; 5449 5450 static int __init patch_realtek_init(void) 5451 { 5452 return snd_hda_add_codec_preset(&realtek_list); 5453 } 5454 5455 static void __exit patch_realtek_exit(void) 5456 { 5457 snd_hda_delete_codec_preset(&realtek_list); 5458 } 5459 5460 module_init(patch_realtek_init) 5461 module_exit(patch_realtek_exit) 5462