1 /* 2 * Universal Interface for Intel High Definition Audio Codec 3 * 4 * Generic widget tree parser 5 * 6 * Copyright (c) 2004 Takashi Iwai <tiwai@suse.de> 7 * 8 * This driver is free software; you can redistribute it and/or modify 9 * it under the terms of the GNU General Public License as published by 10 * the Free Software Foundation; either version 2 of the License, or 11 * (at your option) any later version. 12 * 13 * This driver is distributed in the hope that it will be useful, 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 * GNU General Public License for more details. 17 * 18 * You should have received a copy of the GNU General Public License 19 * along with this program; if not, write to the Free Software 20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 21 */ 22 23 #include <linux/init.h> 24 #include <linux/slab.h> 25 #include <linux/export.h> 26 #include <linux/sort.h> 27 #include <linux/delay.h> 28 #include <linux/ctype.h> 29 #include <linux/string.h> 30 #include <linux/bitops.h> 31 #include <sound/core.h> 32 #include <sound/jack.h> 33 #include "hda_codec.h" 34 #include "hda_local.h" 35 #include "hda_auto_parser.h" 36 #include "hda_jack.h" 37 #include "hda_generic.h" 38 39 40 /* initialize hda_gen_spec struct */ 41 int snd_hda_gen_spec_init(struct hda_gen_spec *spec) 42 { 43 snd_array_init(&spec->kctls, sizeof(struct snd_kcontrol_new), 32); 44 snd_array_init(&spec->paths, sizeof(struct nid_path), 8); 45 snd_array_init(&spec->loopback_list, sizeof(struct hda_amp_list), 8); 46 mutex_init(&spec->pcm_mutex); 47 return 0; 48 } 49 EXPORT_SYMBOL_HDA(snd_hda_gen_spec_init); 50 51 struct snd_kcontrol_new * 52 snd_hda_gen_add_kctl(struct hda_gen_spec *spec, const char *name, 53 const struct snd_kcontrol_new *temp) 54 { 55 struct snd_kcontrol_new *knew = snd_array_new(&spec->kctls); 56 if (!knew) 57 return NULL; 58 *knew = *temp; 59 if (name) 60 knew->name = kstrdup(name, GFP_KERNEL); 61 else if (knew->name) 62 knew->name = kstrdup(knew->name, GFP_KERNEL); 63 if (!knew->name) 64 return NULL; 65 return knew; 66 } 67 EXPORT_SYMBOL_HDA(snd_hda_gen_add_kctl); 68 69 static void free_kctls(struct hda_gen_spec *spec) 70 { 71 if (spec->kctls.list) { 72 struct snd_kcontrol_new *kctl = spec->kctls.list; 73 int i; 74 for (i = 0; i < spec->kctls.used; i++) 75 kfree(kctl[i].name); 76 } 77 snd_array_free(&spec->kctls); 78 } 79 80 void snd_hda_gen_spec_free(struct hda_gen_spec *spec) 81 { 82 if (!spec) 83 return; 84 free_kctls(spec); 85 snd_array_free(&spec->paths); 86 snd_array_free(&spec->loopback_list); 87 } 88 EXPORT_SYMBOL_HDA(snd_hda_gen_spec_free); 89 90 /* 91 * store user hints 92 */ 93 static void parse_user_hints(struct hda_codec *codec) 94 { 95 struct hda_gen_spec *spec = codec->spec; 96 int val; 97 98 val = snd_hda_get_bool_hint(codec, "jack_detect"); 99 if (val >= 0) 100 codec->no_jack_detect = !val; 101 val = snd_hda_get_bool_hint(codec, "inv_jack_detect"); 102 if (val >= 0) 103 codec->inv_jack_detect = !!val; 104 val = snd_hda_get_bool_hint(codec, "trigger_sense"); 105 if (val >= 0) 106 codec->no_trigger_sense = !val; 107 val = snd_hda_get_bool_hint(codec, "inv_eapd"); 108 if (val >= 0) 109 codec->inv_eapd = !!val; 110 val = snd_hda_get_bool_hint(codec, "pcm_format_first"); 111 if (val >= 0) 112 codec->pcm_format_first = !!val; 113 val = snd_hda_get_bool_hint(codec, "sticky_stream"); 114 if (val >= 0) 115 codec->no_sticky_stream = !val; 116 val = snd_hda_get_bool_hint(codec, "spdif_status_reset"); 117 if (val >= 0) 118 codec->spdif_status_reset = !!val; 119 val = snd_hda_get_bool_hint(codec, "pin_amp_workaround"); 120 if (val >= 0) 121 codec->pin_amp_workaround = !!val; 122 val = snd_hda_get_bool_hint(codec, "single_adc_amp"); 123 if (val >= 0) 124 codec->single_adc_amp = !!val; 125 126 val = snd_hda_get_bool_hint(codec, "auto_mute"); 127 if (val >= 0) 128 spec->suppress_auto_mute = !val; 129 val = snd_hda_get_bool_hint(codec, "auto_mic"); 130 if (val >= 0) 131 spec->suppress_auto_mic = !val; 132 val = snd_hda_get_bool_hint(codec, "line_in_auto_switch"); 133 if (val >= 0) 134 spec->line_in_auto_switch = !!val; 135 val = snd_hda_get_bool_hint(codec, "need_dac_fix"); 136 if (val >= 0) 137 spec->need_dac_fix = !!val; 138 val = snd_hda_get_bool_hint(codec, "primary_hp"); 139 if (val >= 0) 140 spec->no_primary_hp = !val; 141 val = snd_hda_get_bool_hint(codec, "multi_cap_vol"); 142 if (val >= 0) 143 spec->multi_cap_vol = !!val; 144 val = snd_hda_get_bool_hint(codec, "inv_dmic_split"); 145 if (val >= 0) 146 spec->inv_dmic_split = !!val; 147 val = snd_hda_get_bool_hint(codec, "indep_hp"); 148 if (val >= 0) 149 spec->indep_hp = !!val; 150 val = snd_hda_get_bool_hint(codec, "add_stereo_mix_input"); 151 if (val >= 0) 152 spec->add_stereo_mix_input = !!val; 153 val = snd_hda_get_bool_hint(codec, "add_out_jack_modes"); 154 if (val >= 0) 155 spec->add_out_jack_modes = !!val; 156 val = snd_hda_get_bool_hint(codec, "add_in_jack_modes"); 157 if (val >= 0) 158 spec->add_in_jack_modes = !!val; 159 val = snd_hda_get_bool_hint(codec, "power_down_unused"); 160 if (val >= 0) 161 spec->power_down_unused = !!val; 162 163 if (!snd_hda_get_int_hint(codec, "mixer_nid", &val)) 164 spec->mixer_nid = val; 165 } 166 167 /* 168 * pin control value accesses 169 */ 170 171 #define update_pin_ctl(codec, pin, val) \ 172 snd_hda_codec_update_cache(codec, pin, 0, \ 173 AC_VERB_SET_PIN_WIDGET_CONTROL, val) 174 175 /* restore the pinctl based on the cached value */ 176 static inline void restore_pin_ctl(struct hda_codec *codec, hda_nid_t pin) 177 { 178 update_pin_ctl(codec, pin, snd_hda_codec_get_pin_target(codec, pin)); 179 } 180 181 /* set the pinctl target value and write it if requested */ 182 static void set_pin_target(struct hda_codec *codec, hda_nid_t pin, 183 unsigned int val, bool do_write) 184 { 185 if (!pin) 186 return; 187 val = snd_hda_correct_pin_ctl(codec, pin, val); 188 snd_hda_codec_set_pin_target(codec, pin, val); 189 if (do_write) 190 update_pin_ctl(codec, pin, val); 191 } 192 193 /* set pinctl target values for all given pins */ 194 static void set_pin_targets(struct hda_codec *codec, int num_pins, 195 hda_nid_t *pins, unsigned int val) 196 { 197 int i; 198 for (i = 0; i < num_pins; i++) 199 set_pin_target(codec, pins[i], val, false); 200 } 201 202 /* 203 * parsing paths 204 */ 205 206 /* return the position of NID in the list, or -1 if not found */ 207 static int find_idx_in_nid_list(hda_nid_t nid, const hda_nid_t *list, int nums) 208 { 209 int i; 210 for (i = 0; i < nums; i++) 211 if (list[i] == nid) 212 return i; 213 return -1; 214 } 215 216 /* return true if the given NID is contained in the path */ 217 static bool is_nid_contained(struct nid_path *path, hda_nid_t nid) 218 { 219 return find_idx_in_nid_list(nid, path->path, path->depth) >= 0; 220 } 221 222 static struct nid_path *get_nid_path(struct hda_codec *codec, 223 hda_nid_t from_nid, hda_nid_t to_nid, 224 int anchor_nid) 225 { 226 struct hda_gen_spec *spec = codec->spec; 227 int i; 228 229 for (i = 0; i < spec->paths.used; i++) { 230 struct nid_path *path = snd_array_elem(&spec->paths, i); 231 if (path->depth <= 0) 232 continue; 233 if ((!from_nid || path->path[0] == from_nid) && 234 (!to_nid || path->path[path->depth - 1] == to_nid)) { 235 if (!anchor_nid || 236 (anchor_nid > 0 && is_nid_contained(path, anchor_nid)) || 237 (anchor_nid < 0 && !is_nid_contained(path, anchor_nid))) 238 return path; 239 } 240 } 241 return NULL; 242 } 243 244 /* get the path between the given NIDs; 245 * passing 0 to either @pin or @dac behaves as a wildcard 246 */ 247 struct nid_path *snd_hda_get_nid_path(struct hda_codec *codec, 248 hda_nid_t from_nid, hda_nid_t to_nid) 249 { 250 return get_nid_path(codec, from_nid, to_nid, 0); 251 } 252 EXPORT_SYMBOL_HDA(snd_hda_get_nid_path); 253 254 /* get the index number corresponding to the path instance; 255 * the index starts from 1, for easier checking the invalid value 256 */ 257 int snd_hda_get_path_idx(struct hda_codec *codec, struct nid_path *path) 258 { 259 struct hda_gen_spec *spec = codec->spec; 260 struct nid_path *array = spec->paths.list; 261 ssize_t idx; 262 263 if (!spec->paths.used) 264 return 0; 265 idx = path - array; 266 if (idx < 0 || idx >= spec->paths.used) 267 return 0; 268 return idx + 1; 269 } 270 EXPORT_SYMBOL_HDA(snd_hda_get_path_idx); 271 272 /* get the path instance corresponding to the given index number */ 273 struct nid_path *snd_hda_get_path_from_idx(struct hda_codec *codec, int idx) 274 { 275 struct hda_gen_spec *spec = codec->spec; 276 277 if (idx <= 0 || idx > spec->paths.used) 278 return NULL; 279 return snd_array_elem(&spec->paths, idx - 1); 280 } 281 EXPORT_SYMBOL_HDA(snd_hda_get_path_from_idx); 282 283 /* check whether the given DAC is already found in any existing paths */ 284 static bool is_dac_already_used(struct hda_codec *codec, hda_nid_t nid) 285 { 286 struct hda_gen_spec *spec = codec->spec; 287 int i; 288 289 for (i = 0; i < spec->paths.used; i++) { 290 struct nid_path *path = snd_array_elem(&spec->paths, i); 291 if (path->path[0] == nid) 292 return true; 293 } 294 return false; 295 } 296 297 /* check whether the given two widgets can be connected */ 298 static bool is_reachable_path(struct hda_codec *codec, 299 hda_nid_t from_nid, hda_nid_t to_nid) 300 { 301 if (!from_nid || !to_nid) 302 return false; 303 return snd_hda_get_conn_index(codec, to_nid, from_nid, true) >= 0; 304 } 305 306 /* nid, dir and idx */ 307 #define AMP_VAL_COMPARE_MASK (0xffff | (1U << 18) | (0x0f << 19)) 308 309 /* check whether the given ctl is already assigned in any path elements */ 310 static bool is_ctl_used(struct hda_codec *codec, unsigned int val, int type) 311 { 312 struct hda_gen_spec *spec = codec->spec; 313 int i; 314 315 val &= AMP_VAL_COMPARE_MASK; 316 for (i = 0; i < spec->paths.used; i++) { 317 struct nid_path *path = snd_array_elem(&spec->paths, i); 318 if ((path->ctls[type] & AMP_VAL_COMPARE_MASK) == val) 319 return true; 320 } 321 return false; 322 } 323 324 /* check whether a control with the given (nid, dir, idx) was assigned */ 325 static bool is_ctl_associated(struct hda_codec *codec, hda_nid_t nid, 326 int dir, int idx, int type) 327 { 328 unsigned int val = HDA_COMPOSE_AMP_VAL(nid, 3, idx, dir); 329 return is_ctl_used(codec, val, type); 330 } 331 332 static void print_nid_path(const char *pfx, struct nid_path *path) 333 { 334 char buf[40]; 335 int i; 336 337 338 buf[0] = 0; 339 for (i = 0; i < path->depth; i++) { 340 char tmp[4]; 341 sprintf(tmp, ":%02x", path->path[i]); 342 strlcat(buf, tmp, sizeof(buf)); 343 } 344 snd_printdd("%s path: depth=%d %s\n", pfx, path->depth, buf); 345 } 346 347 /* called recursively */ 348 static bool __parse_nid_path(struct hda_codec *codec, 349 hda_nid_t from_nid, hda_nid_t to_nid, 350 int anchor_nid, struct nid_path *path, 351 int depth) 352 { 353 const hda_nid_t *conn; 354 int i, nums; 355 356 if (to_nid == anchor_nid) 357 anchor_nid = 0; /* anchor passed */ 358 else if (to_nid == (hda_nid_t)(-anchor_nid)) 359 return false; /* hit the exclusive nid */ 360 361 nums = snd_hda_get_conn_list(codec, to_nid, &conn); 362 for (i = 0; i < nums; i++) { 363 if (conn[i] != from_nid) { 364 /* special case: when from_nid is 0, 365 * try to find an empty DAC 366 */ 367 if (from_nid || 368 get_wcaps_type(get_wcaps(codec, conn[i])) != AC_WID_AUD_OUT || 369 is_dac_already_used(codec, conn[i])) 370 continue; 371 } 372 /* anchor is not requested or already passed? */ 373 if (anchor_nid <= 0) 374 goto found; 375 } 376 if (depth >= MAX_NID_PATH_DEPTH) 377 return false; 378 for (i = 0; i < nums; i++) { 379 unsigned int type; 380 type = get_wcaps_type(get_wcaps(codec, conn[i])); 381 if (type == AC_WID_AUD_OUT || type == AC_WID_AUD_IN || 382 type == AC_WID_PIN) 383 continue; 384 if (__parse_nid_path(codec, from_nid, conn[i], 385 anchor_nid, path, depth + 1)) 386 goto found; 387 } 388 return false; 389 390 found: 391 path->path[path->depth] = conn[i]; 392 path->idx[path->depth + 1] = i; 393 if (nums > 1 && get_wcaps_type(get_wcaps(codec, to_nid)) != AC_WID_AUD_MIX) 394 path->multi[path->depth + 1] = 1; 395 path->depth++; 396 return true; 397 } 398 399 /* parse the widget path from the given nid to the target nid; 400 * when @from_nid is 0, try to find an empty DAC; 401 * when @anchor_nid is set to a positive value, only paths through the widget 402 * with the given value are evaluated. 403 * when @anchor_nid is set to a negative value, paths through the widget 404 * with the negative of given value are excluded, only other paths are chosen. 405 * when @anchor_nid is zero, no special handling about path selection. 406 */ 407 bool snd_hda_parse_nid_path(struct hda_codec *codec, hda_nid_t from_nid, 408 hda_nid_t to_nid, int anchor_nid, 409 struct nid_path *path) 410 { 411 if (__parse_nid_path(codec, from_nid, to_nid, anchor_nid, path, 1)) { 412 path->path[path->depth] = to_nid; 413 path->depth++; 414 return true; 415 } 416 return false; 417 } 418 EXPORT_SYMBOL_HDA(snd_hda_parse_nid_path); 419 420 /* 421 * parse the path between the given NIDs and add to the path list. 422 * if no valid path is found, return NULL 423 */ 424 struct nid_path * 425 snd_hda_add_new_path(struct hda_codec *codec, hda_nid_t from_nid, 426 hda_nid_t to_nid, int anchor_nid) 427 { 428 struct hda_gen_spec *spec = codec->spec; 429 struct nid_path *path; 430 431 if (from_nid && to_nid && !is_reachable_path(codec, from_nid, to_nid)) 432 return NULL; 433 434 /* check whether the path has been already added */ 435 path = get_nid_path(codec, from_nid, to_nid, anchor_nid); 436 if (path) 437 return path; 438 439 path = snd_array_new(&spec->paths); 440 if (!path) 441 return NULL; 442 memset(path, 0, sizeof(*path)); 443 if (snd_hda_parse_nid_path(codec, from_nid, to_nid, anchor_nid, path)) 444 return path; 445 /* push back */ 446 spec->paths.used--; 447 return NULL; 448 } 449 EXPORT_SYMBOL_HDA(snd_hda_add_new_path); 450 451 /* clear the given path as invalid so that it won't be picked up later */ 452 static void invalidate_nid_path(struct hda_codec *codec, int idx) 453 { 454 struct nid_path *path = snd_hda_get_path_from_idx(codec, idx); 455 if (!path) 456 return; 457 memset(path, 0, sizeof(*path)); 458 } 459 460 /* look for an empty DAC slot */ 461 static hda_nid_t look_for_dac(struct hda_codec *codec, hda_nid_t pin, 462 bool is_digital) 463 { 464 struct hda_gen_spec *spec = codec->spec; 465 bool cap_digital; 466 int i; 467 468 for (i = 0; i < spec->num_all_dacs; i++) { 469 hda_nid_t nid = spec->all_dacs[i]; 470 if (!nid || is_dac_already_used(codec, nid)) 471 continue; 472 cap_digital = !!(get_wcaps(codec, nid) & AC_WCAP_DIGITAL); 473 if (is_digital != cap_digital) 474 continue; 475 if (is_reachable_path(codec, nid, pin)) 476 return nid; 477 } 478 return 0; 479 } 480 481 /* replace the channels in the composed amp value with the given number */ 482 static unsigned int amp_val_replace_channels(unsigned int val, unsigned int chs) 483 { 484 val &= ~(0x3U << 16); 485 val |= chs << 16; 486 return val; 487 } 488 489 /* check whether the widget has the given amp capability for the direction */ 490 static bool check_amp_caps(struct hda_codec *codec, hda_nid_t nid, 491 int dir, unsigned int bits) 492 { 493 if (!nid) 494 return false; 495 if (get_wcaps(codec, nid) & (1 << (dir + 1))) 496 if (query_amp_caps(codec, nid, dir) & bits) 497 return true; 498 return false; 499 } 500 501 static bool same_amp_caps(struct hda_codec *codec, hda_nid_t nid1, 502 hda_nid_t nid2, int dir) 503 { 504 if (!(get_wcaps(codec, nid1) & (1 << (dir + 1)))) 505 return !(get_wcaps(codec, nid2) & (1 << (dir + 1))); 506 return (query_amp_caps(codec, nid1, dir) == 507 query_amp_caps(codec, nid2, dir)); 508 } 509 510 #define nid_has_mute(codec, nid, dir) \ 511 check_amp_caps(codec, nid, dir, AC_AMPCAP_MUTE) 512 #define nid_has_volume(codec, nid, dir) \ 513 check_amp_caps(codec, nid, dir, AC_AMPCAP_NUM_STEPS) 514 515 /* look for a widget suitable for assigning a mute switch in the path */ 516 static hda_nid_t look_for_out_mute_nid(struct hda_codec *codec, 517 struct nid_path *path) 518 { 519 int i; 520 521 for (i = path->depth - 1; i >= 0; i--) { 522 if (nid_has_mute(codec, path->path[i], HDA_OUTPUT)) 523 return path->path[i]; 524 if (i != path->depth - 1 && i != 0 && 525 nid_has_mute(codec, path->path[i], HDA_INPUT)) 526 return path->path[i]; 527 } 528 return 0; 529 } 530 531 /* look for a widget suitable for assigning a volume ctl in the path */ 532 static hda_nid_t look_for_out_vol_nid(struct hda_codec *codec, 533 struct nid_path *path) 534 { 535 int i; 536 537 for (i = path->depth - 1; i >= 0; i--) { 538 if (nid_has_volume(codec, path->path[i], HDA_OUTPUT)) 539 return path->path[i]; 540 } 541 return 0; 542 } 543 544 /* 545 * path activation / deactivation 546 */ 547 548 /* can have the amp-in capability? */ 549 static bool has_amp_in(struct hda_codec *codec, struct nid_path *path, int idx) 550 { 551 hda_nid_t nid = path->path[idx]; 552 unsigned int caps = get_wcaps(codec, nid); 553 unsigned int type = get_wcaps_type(caps); 554 555 if (!(caps & AC_WCAP_IN_AMP)) 556 return false; 557 if (type == AC_WID_PIN && idx > 0) /* only for input pins */ 558 return false; 559 return true; 560 } 561 562 /* can have the amp-out capability? */ 563 static bool has_amp_out(struct hda_codec *codec, struct nid_path *path, int idx) 564 { 565 hda_nid_t nid = path->path[idx]; 566 unsigned int caps = get_wcaps(codec, nid); 567 unsigned int type = get_wcaps_type(caps); 568 569 if (!(caps & AC_WCAP_OUT_AMP)) 570 return false; 571 if (type == AC_WID_PIN && !idx) /* only for output pins */ 572 return false; 573 return true; 574 } 575 576 /* check whether the given (nid,dir,idx) is active */ 577 static bool is_active_nid(struct hda_codec *codec, hda_nid_t nid, 578 unsigned int dir, unsigned int idx) 579 { 580 struct hda_gen_spec *spec = codec->spec; 581 int i, n; 582 583 for (n = 0; n < spec->paths.used; n++) { 584 struct nid_path *path = snd_array_elem(&spec->paths, n); 585 if (!path->active) 586 continue; 587 for (i = 0; i < path->depth; i++) { 588 if (path->path[i] == nid) { 589 if (dir == HDA_OUTPUT || path->idx[i] == idx) 590 return true; 591 break; 592 } 593 } 594 } 595 return false; 596 } 597 598 /* get the default amp value for the target state */ 599 static int get_amp_val_to_activate(struct hda_codec *codec, hda_nid_t nid, 600 int dir, unsigned int caps, bool enable) 601 { 602 unsigned int val = 0; 603 604 if (caps & AC_AMPCAP_NUM_STEPS) { 605 /* set to 0dB */ 606 if (enable) 607 val = (caps & AC_AMPCAP_OFFSET) >> AC_AMPCAP_OFFSET_SHIFT; 608 } 609 if (caps & AC_AMPCAP_MUTE) { 610 if (!enable) 611 val |= HDA_AMP_MUTE; 612 } 613 return val; 614 } 615 616 /* initialize the amp value (only at the first time) */ 617 static void init_amp(struct hda_codec *codec, hda_nid_t nid, int dir, int idx) 618 { 619 unsigned int caps = query_amp_caps(codec, nid, dir); 620 int val = get_amp_val_to_activate(codec, nid, dir, caps, false); 621 snd_hda_codec_amp_init_stereo(codec, nid, dir, idx, 0xff, val); 622 } 623 624 /* calculate amp value mask we can modify; 625 * if the given amp is controlled by mixers, don't touch it 626 */ 627 static unsigned int get_amp_mask_to_modify(struct hda_codec *codec, 628 hda_nid_t nid, int dir, int idx, 629 unsigned int caps) 630 { 631 unsigned int mask = 0xff; 632 633 if (caps & AC_AMPCAP_MUTE) { 634 if (is_ctl_associated(codec, nid, dir, idx, NID_PATH_MUTE_CTL)) 635 mask &= ~0x80; 636 } 637 if (caps & AC_AMPCAP_NUM_STEPS) { 638 if (is_ctl_associated(codec, nid, dir, idx, NID_PATH_VOL_CTL) || 639 is_ctl_associated(codec, nid, dir, idx, NID_PATH_BOOST_CTL)) 640 mask &= ~0x7f; 641 } 642 return mask; 643 } 644 645 static void activate_amp(struct hda_codec *codec, hda_nid_t nid, int dir, 646 int idx, int idx_to_check, bool enable) 647 { 648 unsigned int caps; 649 unsigned int mask, val; 650 651 if (!enable && is_active_nid(codec, nid, dir, idx_to_check)) 652 return; 653 654 caps = query_amp_caps(codec, nid, dir); 655 val = get_amp_val_to_activate(codec, nid, dir, caps, enable); 656 mask = get_amp_mask_to_modify(codec, nid, dir, idx_to_check, caps); 657 if (!mask) 658 return; 659 660 val &= mask; 661 snd_hda_codec_amp_stereo(codec, nid, dir, idx, mask, val); 662 } 663 664 static void activate_amp_out(struct hda_codec *codec, struct nid_path *path, 665 int i, bool enable) 666 { 667 hda_nid_t nid = path->path[i]; 668 init_amp(codec, nid, HDA_OUTPUT, 0); 669 activate_amp(codec, nid, HDA_OUTPUT, 0, 0, enable); 670 } 671 672 static void activate_amp_in(struct hda_codec *codec, struct nid_path *path, 673 int i, bool enable, bool add_aamix) 674 { 675 struct hda_gen_spec *spec = codec->spec; 676 const hda_nid_t *conn; 677 int n, nums, idx; 678 int type; 679 hda_nid_t nid = path->path[i]; 680 681 nums = snd_hda_get_conn_list(codec, nid, &conn); 682 type = get_wcaps_type(get_wcaps(codec, nid)); 683 if (type == AC_WID_PIN || 684 (type == AC_WID_AUD_IN && codec->single_adc_amp)) { 685 nums = 1; 686 idx = 0; 687 } else 688 idx = path->idx[i]; 689 690 for (n = 0; n < nums; n++) 691 init_amp(codec, nid, HDA_INPUT, n); 692 693 /* here is a little bit tricky in comparison with activate_amp_out(); 694 * when aa-mixer is available, we need to enable the path as well 695 */ 696 for (n = 0; n < nums; n++) { 697 if (n != idx && (!add_aamix || conn[n] != spec->mixer_merge_nid)) 698 continue; 699 activate_amp(codec, nid, HDA_INPUT, n, idx, enable); 700 } 701 } 702 703 /* activate or deactivate the given path 704 * if @add_aamix is set, enable the input from aa-mix NID as well (if any) 705 */ 706 void snd_hda_activate_path(struct hda_codec *codec, struct nid_path *path, 707 bool enable, bool add_aamix) 708 { 709 struct hda_gen_spec *spec = codec->spec; 710 int i; 711 712 if (!enable) 713 path->active = false; 714 715 for (i = path->depth - 1; i >= 0; i--) { 716 hda_nid_t nid = path->path[i]; 717 if (enable && spec->power_down_unused) { 718 /* make sure the widget is powered up */ 719 if (!snd_hda_check_power_state(codec, nid, AC_PWRST_D0)) 720 snd_hda_codec_write(codec, nid, 0, 721 AC_VERB_SET_POWER_STATE, 722 AC_PWRST_D0); 723 } 724 if (enable && path->multi[i]) 725 snd_hda_codec_write_cache(codec, nid, 0, 726 AC_VERB_SET_CONNECT_SEL, 727 path->idx[i]); 728 if (has_amp_in(codec, path, i)) 729 activate_amp_in(codec, path, i, enable, add_aamix); 730 if (has_amp_out(codec, path, i)) 731 activate_amp_out(codec, path, i, enable); 732 } 733 734 if (enable) 735 path->active = true; 736 } 737 EXPORT_SYMBOL_HDA(snd_hda_activate_path); 738 739 /* if the given path is inactive, put widgets into D3 (only if suitable) */ 740 static void path_power_down_sync(struct hda_codec *codec, struct nid_path *path) 741 { 742 struct hda_gen_spec *spec = codec->spec; 743 bool changed; 744 int i; 745 746 if (!spec->power_down_unused || path->active) 747 return; 748 749 for (i = 0; i < path->depth; i++) { 750 hda_nid_t nid = path->path[i]; 751 if (!snd_hda_check_power_state(codec, nid, AC_PWRST_D3)) { 752 snd_hda_codec_write(codec, nid, 0, 753 AC_VERB_SET_POWER_STATE, 754 AC_PWRST_D3); 755 changed = true; 756 } 757 } 758 759 if (changed) { 760 msleep(10); 761 snd_hda_codec_read(codec, path->path[0], 0, 762 AC_VERB_GET_POWER_STATE, 0); 763 } 764 } 765 766 /* turn on/off EAPD on the given pin */ 767 static void set_pin_eapd(struct hda_codec *codec, hda_nid_t pin, bool enable) 768 { 769 struct hda_gen_spec *spec = codec->spec; 770 if (spec->own_eapd_ctl || 771 !(snd_hda_query_pin_caps(codec, pin) & AC_PINCAP_EAPD)) 772 return; 773 if (codec->inv_eapd) 774 enable = !enable; 775 snd_hda_codec_update_cache(codec, pin, 0, 776 AC_VERB_SET_EAPD_BTLENABLE, 777 enable ? 0x02 : 0x00); 778 } 779 780 /* re-initialize the path specified by the given path index */ 781 static void resume_path_from_idx(struct hda_codec *codec, int path_idx) 782 { 783 struct nid_path *path = snd_hda_get_path_from_idx(codec, path_idx); 784 if (path) 785 snd_hda_activate_path(codec, path, path->active, false); 786 } 787 788 789 /* 790 * Helper functions for creating mixer ctl elements 791 */ 792 793 enum { 794 HDA_CTL_WIDGET_VOL, 795 HDA_CTL_WIDGET_MUTE, 796 HDA_CTL_BIND_MUTE, 797 }; 798 static const struct snd_kcontrol_new control_templates[] = { 799 HDA_CODEC_VOLUME(NULL, 0, 0, 0), 800 HDA_CODEC_MUTE(NULL, 0, 0, 0), 801 HDA_BIND_MUTE(NULL, 0, 0, 0), 802 }; 803 804 /* add dynamic controls from template */ 805 static struct snd_kcontrol_new * 806 add_control(struct hda_gen_spec *spec, int type, const char *name, 807 int cidx, unsigned long val) 808 { 809 struct snd_kcontrol_new *knew; 810 811 knew = snd_hda_gen_add_kctl(spec, name, &control_templates[type]); 812 if (!knew) 813 return NULL; 814 knew->index = cidx; 815 if (get_amp_nid_(val)) 816 knew->subdevice = HDA_SUBDEV_AMP_FLAG; 817 knew->private_value = val; 818 return knew; 819 } 820 821 static int add_control_with_pfx(struct hda_gen_spec *spec, int type, 822 const char *pfx, const char *dir, 823 const char *sfx, int cidx, unsigned long val) 824 { 825 char name[32]; 826 snprintf(name, sizeof(name), "%s %s %s", pfx, dir, sfx); 827 if (!add_control(spec, type, name, cidx, val)) 828 return -ENOMEM; 829 return 0; 830 } 831 832 #define add_pb_vol_ctrl(spec, type, pfx, val) \ 833 add_control_with_pfx(spec, type, pfx, "Playback", "Volume", 0, val) 834 #define add_pb_sw_ctrl(spec, type, pfx, val) \ 835 add_control_with_pfx(spec, type, pfx, "Playback", "Switch", 0, val) 836 #define __add_pb_vol_ctrl(spec, type, pfx, cidx, val) \ 837 add_control_with_pfx(spec, type, pfx, "Playback", "Volume", cidx, val) 838 #define __add_pb_sw_ctrl(spec, type, pfx, cidx, val) \ 839 add_control_with_pfx(spec, type, pfx, "Playback", "Switch", cidx, val) 840 841 static int add_vol_ctl(struct hda_codec *codec, const char *pfx, int cidx, 842 unsigned int chs, struct nid_path *path) 843 { 844 unsigned int val; 845 if (!path) 846 return 0; 847 val = path->ctls[NID_PATH_VOL_CTL]; 848 if (!val) 849 return 0; 850 val = amp_val_replace_channels(val, chs); 851 return __add_pb_vol_ctrl(codec->spec, HDA_CTL_WIDGET_VOL, pfx, cidx, val); 852 } 853 854 /* return the channel bits suitable for the given path->ctls[] */ 855 static int get_default_ch_nums(struct hda_codec *codec, struct nid_path *path, 856 int type) 857 { 858 int chs = 1; /* mono (left only) */ 859 if (path) { 860 hda_nid_t nid = get_amp_nid_(path->ctls[type]); 861 if (nid && (get_wcaps(codec, nid) & AC_WCAP_STEREO)) 862 chs = 3; /* stereo */ 863 } 864 return chs; 865 } 866 867 static int add_stereo_vol(struct hda_codec *codec, const char *pfx, int cidx, 868 struct nid_path *path) 869 { 870 int chs = get_default_ch_nums(codec, path, NID_PATH_VOL_CTL); 871 return add_vol_ctl(codec, pfx, cidx, chs, path); 872 } 873 874 /* create a mute-switch for the given mixer widget; 875 * if it has multiple sources (e.g. DAC and loopback), create a bind-mute 876 */ 877 static int add_sw_ctl(struct hda_codec *codec, const char *pfx, int cidx, 878 unsigned int chs, struct nid_path *path) 879 { 880 unsigned int val; 881 int type = HDA_CTL_WIDGET_MUTE; 882 883 if (!path) 884 return 0; 885 val = path->ctls[NID_PATH_MUTE_CTL]; 886 if (!val) 887 return 0; 888 val = amp_val_replace_channels(val, chs); 889 if (get_amp_direction_(val) == HDA_INPUT) { 890 hda_nid_t nid = get_amp_nid_(val); 891 int nums = snd_hda_get_num_conns(codec, nid); 892 if (nums > 1) { 893 type = HDA_CTL_BIND_MUTE; 894 val |= nums << 19; 895 } 896 } 897 return __add_pb_sw_ctrl(codec->spec, type, pfx, cidx, val); 898 } 899 900 static int add_stereo_sw(struct hda_codec *codec, const char *pfx, 901 int cidx, struct nid_path *path) 902 { 903 int chs = get_default_ch_nums(codec, path, NID_PATH_MUTE_CTL); 904 return add_sw_ctl(codec, pfx, cidx, chs, path); 905 } 906 907 /* any ctl assigned to the path with the given index? */ 908 static bool path_has_mixer(struct hda_codec *codec, int path_idx, int ctl_type) 909 { 910 struct nid_path *path = snd_hda_get_path_from_idx(codec, path_idx); 911 return path && path->ctls[ctl_type]; 912 } 913 914 static const char * const channel_name[4] = { 915 "Front", "Surround", "CLFE", "Side" 916 }; 917 918 /* give some appropriate ctl name prefix for the given line out channel */ 919 static const char *get_line_out_pfx(struct hda_codec *codec, int ch, 920 int *index, int ctl_type) 921 { 922 struct hda_gen_spec *spec = codec->spec; 923 struct auto_pin_cfg *cfg = &spec->autocfg; 924 925 *index = 0; 926 if (cfg->line_outs == 1 && !spec->multi_ios && 927 !cfg->hp_outs && !cfg->speaker_outs) 928 return spec->vmaster_mute.hook ? "PCM" : "Master"; 929 930 /* if there is really a single DAC used in the whole output paths, 931 * use it master (or "PCM" if a vmaster hook is present) 932 */ 933 if (spec->multiout.num_dacs == 1 && !spec->mixer_nid && 934 !spec->multiout.hp_out_nid[0] && !spec->multiout.extra_out_nid[0]) 935 return spec->vmaster_mute.hook ? "PCM" : "Master"; 936 937 /* multi-io channels */ 938 if (ch >= cfg->line_outs) 939 return channel_name[ch]; 940 941 switch (cfg->line_out_type) { 942 case AUTO_PIN_SPEAKER_OUT: 943 /* if the primary channel vol/mute is shared with HP volume, 944 * don't name it as Speaker 945 */ 946 if (!ch && cfg->hp_outs && 947 !path_has_mixer(codec, spec->hp_paths[0], ctl_type)) 948 break; 949 if (cfg->line_outs == 1) 950 return "Speaker"; 951 if (cfg->line_outs == 2) 952 return ch ? "Bass Speaker" : "Speaker"; 953 break; 954 case AUTO_PIN_HP_OUT: 955 /* if the primary channel vol/mute is shared with spk volume, 956 * don't name it as Headphone 957 */ 958 if (!ch && cfg->speaker_outs && 959 !path_has_mixer(codec, spec->speaker_paths[0], ctl_type)) 960 break; 961 /* for multi-io case, only the primary out */ 962 if (ch && spec->multi_ios) 963 break; 964 *index = ch; 965 return "Headphone"; 966 } 967 968 /* for a single channel output, we don't have to name the channel */ 969 if (cfg->line_outs == 1 && !spec->multi_ios) 970 return "PCM"; 971 972 if (ch >= ARRAY_SIZE(channel_name)) { 973 snd_BUG(); 974 return "PCM"; 975 } 976 977 return channel_name[ch]; 978 } 979 980 /* 981 * Parse output paths 982 */ 983 984 /* badness definition */ 985 enum { 986 /* No primary DAC is found for the main output */ 987 BAD_NO_PRIMARY_DAC = 0x10000, 988 /* No DAC is found for the extra output */ 989 BAD_NO_DAC = 0x4000, 990 /* No possible multi-ios */ 991 BAD_MULTI_IO = 0x120, 992 /* No individual DAC for extra output */ 993 BAD_NO_EXTRA_DAC = 0x102, 994 /* No individual DAC for extra surrounds */ 995 BAD_NO_EXTRA_SURR_DAC = 0x101, 996 /* Primary DAC shared with main surrounds */ 997 BAD_SHARED_SURROUND = 0x100, 998 /* Primary DAC shared with main CLFE */ 999 BAD_SHARED_CLFE = 0x10, 1000 /* Primary DAC shared with extra surrounds */ 1001 BAD_SHARED_EXTRA_SURROUND = 0x10, 1002 /* Volume widget is shared */ 1003 BAD_SHARED_VOL = 0x10, 1004 }; 1005 1006 /* look for widgets in the given path which are appropriate for 1007 * volume and mute controls, and assign the values to ctls[]. 1008 * 1009 * When no appropriate widget is found in the path, the badness value 1010 * is incremented depending on the situation. The function returns the 1011 * total badness for both volume and mute controls. 1012 */ 1013 static int assign_out_path_ctls(struct hda_codec *codec, struct nid_path *path) 1014 { 1015 hda_nid_t nid; 1016 unsigned int val; 1017 int badness = 0; 1018 1019 if (!path) 1020 return BAD_SHARED_VOL * 2; 1021 1022 if (path->ctls[NID_PATH_VOL_CTL] || 1023 path->ctls[NID_PATH_MUTE_CTL]) 1024 return 0; /* already evaluated */ 1025 1026 nid = look_for_out_vol_nid(codec, path); 1027 if (nid) { 1028 val = HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_OUTPUT); 1029 if (is_ctl_used(codec, val, NID_PATH_VOL_CTL)) 1030 badness += BAD_SHARED_VOL; 1031 else 1032 path->ctls[NID_PATH_VOL_CTL] = val; 1033 } else 1034 badness += BAD_SHARED_VOL; 1035 nid = look_for_out_mute_nid(codec, path); 1036 if (nid) { 1037 unsigned int wid_type = get_wcaps_type(get_wcaps(codec, nid)); 1038 if (wid_type == AC_WID_PIN || wid_type == AC_WID_AUD_OUT || 1039 nid_has_mute(codec, nid, HDA_OUTPUT)) 1040 val = HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_OUTPUT); 1041 else 1042 val = HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_INPUT); 1043 if (is_ctl_used(codec, val, NID_PATH_MUTE_CTL)) 1044 badness += BAD_SHARED_VOL; 1045 else 1046 path->ctls[NID_PATH_MUTE_CTL] = val; 1047 } else 1048 badness += BAD_SHARED_VOL; 1049 return badness; 1050 } 1051 1052 struct badness_table { 1053 int no_primary_dac; /* no primary DAC */ 1054 int no_dac; /* no secondary DACs */ 1055 int shared_primary; /* primary DAC is shared with main output */ 1056 int shared_surr; /* secondary DAC shared with main or primary */ 1057 int shared_clfe; /* third DAC shared with main or primary */ 1058 int shared_surr_main; /* secondary DAC sahred with main/DAC0 */ 1059 }; 1060 1061 static struct badness_table main_out_badness = { 1062 .no_primary_dac = BAD_NO_PRIMARY_DAC, 1063 .no_dac = BAD_NO_DAC, 1064 .shared_primary = BAD_NO_PRIMARY_DAC, 1065 .shared_surr = BAD_SHARED_SURROUND, 1066 .shared_clfe = BAD_SHARED_CLFE, 1067 .shared_surr_main = BAD_SHARED_SURROUND, 1068 }; 1069 1070 static struct badness_table extra_out_badness = { 1071 .no_primary_dac = BAD_NO_DAC, 1072 .no_dac = BAD_NO_DAC, 1073 .shared_primary = BAD_NO_EXTRA_DAC, 1074 .shared_surr = BAD_SHARED_EXTRA_SURROUND, 1075 .shared_clfe = BAD_SHARED_EXTRA_SURROUND, 1076 .shared_surr_main = BAD_NO_EXTRA_SURR_DAC, 1077 }; 1078 1079 /* get the DAC of the primary output corresponding to the given array index */ 1080 static hda_nid_t get_primary_out(struct hda_codec *codec, int idx) 1081 { 1082 struct hda_gen_spec *spec = codec->spec; 1083 struct auto_pin_cfg *cfg = &spec->autocfg; 1084 1085 if (cfg->line_outs > idx) 1086 return spec->private_dac_nids[idx]; 1087 idx -= cfg->line_outs; 1088 if (spec->multi_ios > idx) 1089 return spec->multi_io[idx].dac; 1090 return 0; 1091 } 1092 1093 /* return the DAC if it's reachable, otherwise zero */ 1094 static inline hda_nid_t try_dac(struct hda_codec *codec, 1095 hda_nid_t dac, hda_nid_t pin) 1096 { 1097 return is_reachable_path(codec, dac, pin) ? dac : 0; 1098 } 1099 1100 /* try to assign DACs to pins and return the resultant badness */ 1101 static int try_assign_dacs(struct hda_codec *codec, int num_outs, 1102 const hda_nid_t *pins, hda_nid_t *dacs, 1103 int *path_idx, 1104 const struct badness_table *bad) 1105 { 1106 struct hda_gen_spec *spec = codec->spec; 1107 int i, j; 1108 int badness = 0; 1109 hda_nid_t dac; 1110 1111 if (!num_outs) 1112 return 0; 1113 1114 for (i = 0; i < num_outs; i++) { 1115 struct nid_path *path; 1116 hda_nid_t pin = pins[i]; 1117 1118 path = snd_hda_get_path_from_idx(codec, path_idx[i]); 1119 if (path) { 1120 badness += assign_out_path_ctls(codec, path); 1121 continue; 1122 } 1123 1124 dacs[i] = look_for_dac(codec, pin, false); 1125 if (!dacs[i] && !i) { 1126 /* try to steal the DAC of surrounds for the front */ 1127 for (j = 1; j < num_outs; j++) { 1128 if (is_reachable_path(codec, dacs[j], pin)) { 1129 dacs[0] = dacs[j]; 1130 dacs[j] = 0; 1131 invalidate_nid_path(codec, path_idx[j]); 1132 path_idx[j] = 0; 1133 break; 1134 } 1135 } 1136 } 1137 dac = dacs[i]; 1138 if (!dac) { 1139 if (num_outs > 2) 1140 dac = try_dac(codec, get_primary_out(codec, i), pin); 1141 if (!dac) 1142 dac = try_dac(codec, dacs[0], pin); 1143 if (!dac) 1144 dac = try_dac(codec, get_primary_out(codec, i), pin); 1145 if (dac) { 1146 if (!i) 1147 badness += bad->shared_primary; 1148 else if (i == 1) 1149 badness += bad->shared_surr; 1150 else 1151 badness += bad->shared_clfe; 1152 } else if (is_reachable_path(codec, spec->private_dac_nids[0], pin)) { 1153 dac = spec->private_dac_nids[0]; 1154 badness += bad->shared_surr_main; 1155 } else if (!i) 1156 badness += bad->no_primary_dac; 1157 else 1158 badness += bad->no_dac; 1159 } 1160 if (!dac) 1161 continue; 1162 path = snd_hda_add_new_path(codec, dac, pin, -spec->mixer_nid); 1163 if (!path && !i && spec->mixer_nid) { 1164 /* try with aamix */ 1165 path = snd_hda_add_new_path(codec, dac, pin, 0); 1166 } 1167 if (!path) { 1168 dac = dacs[i] = 0; 1169 badness += bad->no_dac; 1170 } else { 1171 /* print_nid_path("output", path); */ 1172 path->active = true; 1173 path_idx[i] = snd_hda_get_path_idx(codec, path); 1174 badness += assign_out_path_ctls(codec, path); 1175 } 1176 } 1177 1178 return badness; 1179 } 1180 1181 /* return NID if the given pin has only a single connection to a certain DAC */ 1182 static hda_nid_t get_dac_if_single(struct hda_codec *codec, hda_nid_t pin) 1183 { 1184 struct hda_gen_spec *spec = codec->spec; 1185 int i; 1186 hda_nid_t nid_found = 0; 1187 1188 for (i = 0; i < spec->num_all_dacs; i++) { 1189 hda_nid_t nid = spec->all_dacs[i]; 1190 if (!nid || is_dac_already_used(codec, nid)) 1191 continue; 1192 if (is_reachable_path(codec, nid, pin)) { 1193 if (nid_found) 1194 return 0; 1195 nid_found = nid; 1196 } 1197 } 1198 return nid_found; 1199 } 1200 1201 /* check whether the given pin can be a multi-io pin */ 1202 static bool can_be_multiio_pin(struct hda_codec *codec, 1203 unsigned int location, hda_nid_t nid) 1204 { 1205 unsigned int defcfg, caps; 1206 1207 defcfg = snd_hda_codec_get_pincfg(codec, nid); 1208 if (get_defcfg_connect(defcfg) != AC_JACK_PORT_COMPLEX) 1209 return false; 1210 if (location && get_defcfg_location(defcfg) != location) 1211 return false; 1212 caps = snd_hda_query_pin_caps(codec, nid); 1213 if (!(caps & AC_PINCAP_OUT)) 1214 return false; 1215 return true; 1216 } 1217 1218 /* count the number of input pins that are capable to be multi-io */ 1219 static int count_multiio_pins(struct hda_codec *codec, hda_nid_t reference_pin) 1220 { 1221 struct hda_gen_spec *spec = codec->spec; 1222 struct auto_pin_cfg *cfg = &spec->autocfg; 1223 unsigned int defcfg = snd_hda_codec_get_pincfg(codec, reference_pin); 1224 unsigned int location = get_defcfg_location(defcfg); 1225 int type, i; 1226 int num_pins = 0; 1227 1228 for (type = AUTO_PIN_LINE_IN; type >= AUTO_PIN_MIC; type--) { 1229 for (i = 0; i < cfg->num_inputs; i++) { 1230 if (cfg->inputs[i].type != type) 1231 continue; 1232 if (can_be_multiio_pin(codec, location, 1233 cfg->inputs[i].pin)) 1234 num_pins++; 1235 } 1236 } 1237 return num_pins; 1238 } 1239 1240 /* 1241 * multi-io helper 1242 * 1243 * When hardwired is set, try to fill ony hardwired pins, and returns 1244 * zero if any pins are filled, non-zero if nothing found. 1245 * When hardwired is off, try to fill possible input pins, and returns 1246 * the badness value. 1247 */ 1248 static int fill_multi_ios(struct hda_codec *codec, 1249 hda_nid_t reference_pin, 1250 bool hardwired) 1251 { 1252 struct hda_gen_spec *spec = codec->spec; 1253 struct auto_pin_cfg *cfg = &spec->autocfg; 1254 int type, i, j, num_pins, old_pins; 1255 unsigned int defcfg = snd_hda_codec_get_pincfg(codec, reference_pin); 1256 unsigned int location = get_defcfg_location(defcfg); 1257 int badness = 0; 1258 struct nid_path *path; 1259 1260 old_pins = spec->multi_ios; 1261 if (old_pins >= 2) 1262 goto end_fill; 1263 1264 num_pins = count_multiio_pins(codec, reference_pin); 1265 if (num_pins < 2) 1266 goto end_fill; 1267 1268 for (type = AUTO_PIN_LINE_IN; type >= AUTO_PIN_MIC; type--) { 1269 for (i = 0; i < cfg->num_inputs; i++) { 1270 hda_nid_t nid = cfg->inputs[i].pin; 1271 hda_nid_t dac = 0; 1272 1273 if (cfg->inputs[i].type != type) 1274 continue; 1275 if (!can_be_multiio_pin(codec, location, nid)) 1276 continue; 1277 for (j = 0; j < spec->multi_ios; j++) { 1278 if (nid == spec->multi_io[j].pin) 1279 break; 1280 } 1281 if (j < spec->multi_ios) 1282 continue; 1283 1284 if (hardwired) 1285 dac = get_dac_if_single(codec, nid); 1286 else if (!dac) 1287 dac = look_for_dac(codec, nid, false); 1288 if (!dac) { 1289 badness++; 1290 continue; 1291 } 1292 path = snd_hda_add_new_path(codec, dac, nid, 1293 -spec->mixer_nid); 1294 if (!path) { 1295 badness++; 1296 continue; 1297 } 1298 /* print_nid_path("multiio", path); */ 1299 spec->multi_io[spec->multi_ios].pin = nid; 1300 spec->multi_io[spec->multi_ios].dac = dac; 1301 spec->out_paths[cfg->line_outs + spec->multi_ios] = 1302 snd_hda_get_path_idx(codec, path); 1303 spec->multi_ios++; 1304 if (spec->multi_ios >= 2) 1305 break; 1306 } 1307 } 1308 end_fill: 1309 if (badness) 1310 badness = BAD_MULTI_IO; 1311 if (old_pins == spec->multi_ios) { 1312 if (hardwired) 1313 return 1; /* nothing found */ 1314 else 1315 return badness; /* no badness if nothing found */ 1316 } 1317 if (!hardwired && spec->multi_ios < 2) { 1318 /* cancel newly assigned paths */ 1319 spec->paths.used -= spec->multi_ios - old_pins; 1320 spec->multi_ios = old_pins; 1321 return badness; 1322 } 1323 1324 /* assign volume and mute controls */ 1325 for (i = old_pins; i < spec->multi_ios; i++) { 1326 path = snd_hda_get_path_from_idx(codec, spec->out_paths[cfg->line_outs + i]); 1327 badness += assign_out_path_ctls(codec, path); 1328 } 1329 1330 return badness; 1331 } 1332 1333 /* map DACs for all pins in the list if they are single connections */ 1334 static bool map_singles(struct hda_codec *codec, int outs, 1335 const hda_nid_t *pins, hda_nid_t *dacs, int *path_idx) 1336 { 1337 struct hda_gen_spec *spec = codec->spec; 1338 int i; 1339 bool found = false; 1340 for (i = 0; i < outs; i++) { 1341 struct nid_path *path; 1342 hda_nid_t dac; 1343 if (dacs[i]) 1344 continue; 1345 dac = get_dac_if_single(codec, pins[i]); 1346 if (!dac) 1347 continue; 1348 path = snd_hda_add_new_path(codec, dac, pins[i], 1349 -spec->mixer_nid); 1350 if (!path && !i && spec->mixer_nid) 1351 path = snd_hda_add_new_path(codec, dac, pins[i], 0); 1352 if (path) { 1353 dacs[i] = dac; 1354 found = true; 1355 /* print_nid_path("output", path); */ 1356 path->active = true; 1357 path_idx[i] = snd_hda_get_path_idx(codec, path); 1358 } 1359 } 1360 return found; 1361 } 1362 1363 /* create a new path including aamix if available, and return its index */ 1364 static int check_aamix_out_path(struct hda_codec *codec, int path_idx) 1365 { 1366 struct hda_gen_spec *spec = codec->spec; 1367 struct nid_path *path; 1368 hda_nid_t dac, pin; 1369 1370 path = snd_hda_get_path_from_idx(codec, path_idx); 1371 if (!path || !path->depth || 1372 is_nid_contained(path, spec->mixer_nid)) 1373 return 0; 1374 dac = path->path[0]; 1375 pin = path->path[path->depth - 1]; 1376 path = snd_hda_add_new_path(codec, dac, pin, spec->mixer_nid); 1377 if (!path) { 1378 if (dac != spec->multiout.dac_nids[0]) 1379 dac = spec->multiout.dac_nids[0]; 1380 else if (spec->multiout.hp_out_nid[0]) 1381 dac = spec->multiout.hp_out_nid[0]; 1382 else if (spec->multiout.extra_out_nid[0]) 1383 dac = spec->multiout.extra_out_nid[0]; 1384 if (dac) 1385 path = snd_hda_add_new_path(codec, dac, pin, 1386 spec->mixer_nid); 1387 } 1388 if (!path) 1389 return 0; 1390 /* print_nid_path("output-aamix", path); */ 1391 path->active = false; /* unused as default */ 1392 return snd_hda_get_path_idx(codec, path); 1393 } 1394 1395 /* fill the empty entries in the dac array for speaker/hp with the 1396 * shared dac pointed by the paths 1397 */ 1398 static void refill_shared_dacs(struct hda_codec *codec, int num_outs, 1399 hda_nid_t *dacs, int *path_idx) 1400 { 1401 struct nid_path *path; 1402 int i; 1403 1404 for (i = 0; i < num_outs; i++) { 1405 if (dacs[i]) 1406 continue; 1407 path = snd_hda_get_path_from_idx(codec, path_idx[i]); 1408 if (!path) 1409 continue; 1410 dacs[i] = path->path[0]; 1411 } 1412 } 1413 1414 /* fill in the dac_nids table from the parsed pin configuration */ 1415 static int fill_and_eval_dacs(struct hda_codec *codec, 1416 bool fill_hardwired, 1417 bool fill_mio_first) 1418 { 1419 struct hda_gen_spec *spec = codec->spec; 1420 struct auto_pin_cfg *cfg = &spec->autocfg; 1421 int i, err, badness; 1422 1423 /* set num_dacs once to full for look_for_dac() */ 1424 spec->multiout.num_dacs = cfg->line_outs; 1425 spec->multiout.dac_nids = spec->private_dac_nids; 1426 memset(spec->private_dac_nids, 0, sizeof(spec->private_dac_nids)); 1427 memset(spec->multiout.hp_out_nid, 0, sizeof(spec->multiout.hp_out_nid)); 1428 memset(spec->multiout.extra_out_nid, 0, sizeof(spec->multiout.extra_out_nid)); 1429 spec->multi_ios = 0; 1430 snd_array_free(&spec->paths); 1431 1432 /* clear path indices */ 1433 memset(spec->out_paths, 0, sizeof(spec->out_paths)); 1434 memset(spec->hp_paths, 0, sizeof(spec->hp_paths)); 1435 memset(spec->speaker_paths, 0, sizeof(spec->speaker_paths)); 1436 memset(spec->aamix_out_paths, 0, sizeof(spec->aamix_out_paths)); 1437 memset(spec->digout_paths, 0, sizeof(spec->digout_paths)); 1438 memset(spec->input_paths, 0, sizeof(spec->input_paths)); 1439 memset(spec->loopback_paths, 0, sizeof(spec->loopback_paths)); 1440 memset(&spec->digin_path, 0, sizeof(spec->digin_path)); 1441 1442 badness = 0; 1443 1444 /* fill hard-wired DACs first */ 1445 if (fill_hardwired) { 1446 bool mapped; 1447 do { 1448 mapped = map_singles(codec, cfg->line_outs, 1449 cfg->line_out_pins, 1450 spec->private_dac_nids, 1451 spec->out_paths); 1452 mapped |= map_singles(codec, cfg->hp_outs, 1453 cfg->hp_pins, 1454 spec->multiout.hp_out_nid, 1455 spec->hp_paths); 1456 mapped |= map_singles(codec, cfg->speaker_outs, 1457 cfg->speaker_pins, 1458 spec->multiout.extra_out_nid, 1459 spec->speaker_paths); 1460 if (fill_mio_first && cfg->line_outs == 1 && 1461 cfg->line_out_type != AUTO_PIN_SPEAKER_OUT) { 1462 err = fill_multi_ios(codec, cfg->line_out_pins[0], true); 1463 if (!err) 1464 mapped = true; 1465 } 1466 } while (mapped); 1467 } 1468 1469 badness += try_assign_dacs(codec, cfg->line_outs, cfg->line_out_pins, 1470 spec->private_dac_nids, spec->out_paths, 1471 &main_out_badness); 1472 1473 if (fill_mio_first && 1474 cfg->line_outs == 1 && cfg->line_out_type != AUTO_PIN_SPEAKER_OUT) { 1475 /* try to fill multi-io first */ 1476 err = fill_multi_ios(codec, cfg->line_out_pins[0], false); 1477 if (err < 0) 1478 return err; 1479 /* we don't count badness at this stage yet */ 1480 } 1481 1482 if (cfg->line_out_type != AUTO_PIN_HP_OUT) { 1483 err = try_assign_dacs(codec, cfg->hp_outs, cfg->hp_pins, 1484 spec->multiout.hp_out_nid, 1485 spec->hp_paths, 1486 &extra_out_badness); 1487 if (err < 0) 1488 return err; 1489 badness += err; 1490 } 1491 if (cfg->line_out_type != AUTO_PIN_SPEAKER_OUT) { 1492 err = try_assign_dacs(codec, cfg->speaker_outs, 1493 cfg->speaker_pins, 1494 spec->multiout.extra_out_nid, 1495 spec->speaker_paths, 1496 &extra_out_badness); 1497 if (err < 0) 1498 return err; 1499 badness += err; 1500 } 1501 if (cfg->line_outs == 1 && cfg->line_out_type != AUTO_PIN_SPEAKER_OUT) { 1502 err = fill_multi_ios(codec, cfg->line_out_pins[0], false); 1503 if (err < 0) 1504 return err; 1505 badness += err; 1506 } 1507 1508 if (spec->mixer_nid) { 1509 spec->aamix_out_paths[0] = 1510 check_aamix_out_path(codec, spec->out_paths[0]); 1511 if (cfg->line_out_type != AUTO_PIN_HP_OUT) 1512 spec->aamix_out_paths[1] = 1513 check_aamix_out_path(codec, spec->hp_paths[0]); 1514 if (cfg->line_out_type != AUTO_PIN_SPEAKER_OUT) 1515 spec->aamix_out_paths[2] = 1516 check_aamix_out_path(codec, spec->speaker_paths[0]); 1517 } 1518 1519 if (cfg->hp_outs && cfg->line_out_type == AUTO_PIN_SPEAKER_OUT) 1520 if (count_multiio_pins(codec, cfg->hp_pins[0]) >= 2) 1521 spec->multi_ios = 1; /* give badness */ 1522 1523 /* re-count num_dacs and squash invalid entries */ 1524 spec->multiout.num_dacs = 0; 1525 for (i = 0; i < cfg->line_outs; i++) { 1526 if (spec->private_dac_nids[i]) 1527 spec->multiout.num_dacs++; 1528 else { 1529 memmove(spec->private_dac_nids + i, 1530 spec->private_dac_nids + i + 1, 1531 sizeof(hda_nid_t) * (cfg->line_outs - i - 1)); 1532 spec->private_dac_nids[cfg->line_outs - 1] = 0; 1533 } 1534 } 1535 1536 spec->ext_channel_count = spec->min_channel_count = 1537 spec->multiout.num_dacs * 2; 1538 1539 if (spec->multi_ios == 2) { 1540 for (i = 0; i < 2; i++) 1541 spec->private_dac_nids[spec->multiout.num_dacs++] = 1542 spec->multi_io[i].dac; 1543 } else if (spec->multi_ios) { 1544 spec->multi_ios = 0; 1545 badness += BAD_MULTI_IO; 1546 } 1547 1548 /* re-fill the shared DAC for speaker / headphone */ 1549 if (cfg->line_out_type != AUTO_PIN_HP_OUT) 1550 refill_shared_dacs(codec, cfg->hp_outs, 1551 spec->multiout.hp_out_nid, 1552 spec->hp_paths); 1553 if (cfg->line_out_type != AUTO_PIN_SPEAKER_OUT) 1554 refill_shared_dacs(codec, cfg->speaker_outs, 1555 spec->multiout.extra_out_nid, 1556 spec->speaker_paths); 1557 1558 return badness; 1559 } 1560 1561 #define DEBUG_BADNESS 1562 1563 #ifdef DEBUG_BADNESS 1564 #define debug_badness snd_printdd 1565 #else 1566 #define debug_badness(...) 1567 #endif 1568 1569 #ifdef DEBUG_BADNESS 1570 static inline void print_nid_path_idx(struct hda_codec *codec, 1571 const char *pfx, int idx) 1572 { 1573 struct nid_path *path; 1574 1575 path = snd_hda_get_path_from_idx(codec, idx); 1576 if (path) 1577 print_nid_path(pfx, path); 1578 } 1579 1580 static void debug_show_configs(struct hda_codec *codec, 1581 struct auto_pin_cfg *cfg) 1582 { 1583 struct hda_gen_spec *spec = codec->spec; 1584 static const char * const lo_type[3] = { "LO", "SP", "HP" }; 1585 int i; 1586 1587 debug_badness("multi_outs = %x/%x/%x/%x : %x/%x/%x/%x (type %s)\n", 1588 cfg->line_out_pins[0], cfg->line_out_pins[1], 1589 cfg->line_out_pins[2], cfg->line_out_pins[3], 1590 spec->multiout.dac_nids[0], 1591 spec->multiout.dac_nids[1], 1592 spec->multiout.dac_nids[2], 1593 spec->multiout.dac_nids[3], 1594 lo_type[cfg->line_out_type]); 1595 for (i = 0; i < cfg->line_outs; i++) 1596 print_nid_path_idx(codec, " out", spec->out_paths[i]); 1597 if (spec->multi_ios > 0) 1598 debug_badness("multi_ios(%d) = %x/%x : %x/%x\n", 1599 spec->multi_ios, 1600 spec->multi_io[0].pin, spec->multi_io[1].pin, 1601 spec->multi_io[0].dac, spec->multi_io[1].dac); 1602 for (i = 0; i < spec->multi_ios; i++) 1603 print_nid_path_idx(codec, " mio", 1604 spec->out_paths[cfg->line_outs + i]); 1605 if (cfg->hp_outs) 1606 debug_badness("hp_outs = %x/%x/%x/%x : %x/%x/%x/%x\n", 1607 cfg->hp_pins[0], cfg->hp_pins[1], 1608 cfg->hp_pins[2], cfg->hp_pins[3], 1609 spec->multiout.hp_out_nid[0], 1610 spec->multiout.hp_out_nid[1], 1611 spec->multiout.hp_out_nid[2], 1612 spec->multiout.hp_out_nid[3]); 1613 for (i = 0; i < cfg->hp_outs; i++) 1614 print_nid_path_idx(codec, " hp ", spec->hp_paths[i]); 1615 if (cfg->speaker_outs) 1616 debug_badness("spk_outs = %x/%x/%x/%x : %x/%x/%x/%x\n", 1617 cfg->speaker_pins[0], cfg->speaker_pins[1], 1618 cfg->speaker_pins[2], cfg->speaker_pins[3], 1619 spec->multiout.extra_out_nid[0], 1620 spec->multiout.extra_out_nid[1], 1621 spec->multiout.extra_out_nid[2], 1622 spec->multiout.extra_out_nid[3]); 1623 for (i = 0; i < cfg->speaker_outs; i++) 1624 print_nid_path_idx(codec, " spk", spec->speaker_paths[i]); 1625 for (i = 0; i < 3; i++) 1626 print_nid_path_idx(codec, " mix", spec->aamix_out_paths[i]); 1627 } 1628 #else 1629 #define debug_show_configs(codec, cfg) /* NOP */ 1630 #endif 1631 1632 /* find all available DACs of the codec */ 1633 static void fill_all_dac_nids(struct hda_codec *codec) 1634 { 1635 struct hda_gen_spec *spec = codec->spec; 1636 int i; 1637 hda_nid_t nid = codec->start_nid; 1638 1639 spec->num_all_dacs = 0; 1640 memset(spec->all_dacs, 0, sizeof(spec->all_dacs)); 1641 for (i = 0; i < codec->num_nodes; i++, nid++) { 1642 if (get_wcaps_type(get_wcaps(codec, nid)) != AC_WID_AUD_OUT) 1643 continue; 1644 if (spec->num_all_dacs >= ARRAY_SIZE(spec->all_dacs)) { 1645 snd_printk(KERN_ERR "hda: Too many DACs!\n"); 1646 break; 1647 } 1648 spec->all_dacs[spec->num_all_dacs++] = nid; 1649 } 1650 } 1651 1652 static int parse_output_paths(struct hda_codec *codec) 1653 { 1654 struct hda_gen_spec *spec = codec->spec; 1655 struct auto_pin_cfg *cfg = &spec->autocfg; 1656 struct auto_pin_cfg *best_cfg; 1657 unsigned int val; 1658 int best_badness = INT_MAX; 1659 int badness; 1660 bool fill_hardwired = true, fill_mio_first = true; 1661 bool best_wired = true, best_mio = true; 1662 bool hp_spk_swapped = false; 1663 1664 best_cfg = kmalloc(sizeof(*best_cfg), GFP_KERNEL); 1665 if (!best_cfg) 1666 return -ENOMEM; 1667 *best_cfg = *cfg; 1668 1669 for (;;) { 1670 badness = fill_and_eval_dacs(codec, fill_hardwired, 1671 fill_mio_first); 1672 if (badness < 0) { 1673 kfree(best_cfg); 1674 return badness; 1675 } 1676 debug_badness("==> lo_type=%d, wired=%d, mio=%d, badness=0x%x\n", 1677 cfg->line_out_type, fill_hardwired, fill_mio_first, 1678 badness); 1679 debug_show_configs(codec, cfg); 1680 if (badness < best_badness) { 1681 best_badness = badness; 1682 *best_cfg = *cfg; 1683 best_wired = fill_hardwired; 1684 best_mio = fill_mio_first; 1685 } 1686 if (!badness) 1687 break; 1688 fill_mio_first = !fill_mio_first; 1689 if (!fill_mio_first) 1690 continue; 1691 fill_hardwired = !fill_hardwired; 1692 if (!fill_hardwired) 1693 continue; 1694 if (hp_spk_swapped) 1695 break; 1696 hp_spk_swapped = true; 1697 if (cfg->speaker_outs > 0 && 1698 cfg->line_out_type == AUTO_PIN_HP_OUT) { 1699 cfg->hp_outs = cfg->line_outs; 1700 memcpy(cfg->hp_pins, cfg->line_out_pins, 1701 sizeof(cfg->hp_pins)); 1702 cfg->line_outs = cfg->speaker_outs; 1703 memcpy(cfg->line_out_pins, cfg->speaker_pins, 1704 sizeof(cfg->speaker_pins)); 1705 cfg->speaker_outs = 0; 1706 memset(cfg->speaker_pins, 0, sizeof(cfg->speaker_pins)); 1707 cfg->line_out_type = AUTO_PIN_SPEAKER_OUT; 1708 fill_hardwired = true; 1709 continue; 1710 } 1711 if (cfg->hp_outs > 0 && 1712 cfg->line_out_type == AUTO_PIN_SPEAKER_OUT) { 1713 cfg->speaker_outs = cfg->line_outs; 1714 memcpy(cfg->speaker_pins, cfg->line_out_pins, 1715 sizeof(cfg->speaker_pins)); 1716 cfg->line_outs = cfg->hp_outs; 1717 memcpy(cfg->line_out_pins, cfg->hp_pins, 1718 sizeof(cfg->hp_pins)); 1719 cfg->hp_outs = 0; 1720 memset(cfg->hp_pins, 0, sizeof(cfg->hp_pins)); 1721 cfg->line_out_type = AUTO_PIN_HP_OUT; 1722 fill_hardwired = true; 1723 continue; 1724 } 1725 break; 1726 } 1727 1728 if (badness) { 1729 debug_badness("==> restoring best_cfg\n"); 1730 *cfg = *best_cfg; 1731 fill_and_eval_dacs(codec, best_wired, best_mio); 1732 } 1733 debug_badness("==> Best config: lo_type=%d, wired=%d, mio=%d\n", 1734 cfg->line_out_type, best_wired, best_mio); 1735 debug_show_configs(codec, cfg); 1736 1737 if (cfg->line_out_pins[0]) { 1738 struct nid_path *path; 1739 path = snd_hda_get_path_from_idx(codec, spec->out_paths[0]); 1740 if (path) 1741 spec->vmaster_nid = look_for_out_vol_nid(codec, path); 1742 if (spec->vmaster_nid) 1743 snd_hda_set_vmaster_tlv(codec, spec->vmaster_nid, 1744 HDA_OUTPUT, spec->vmaster_tlv); 1745 } 1746 1747 /* set initial pinctl targets */ 1748 if (spec->prefer_hp_amp || cfg->line_out_type == AUTO_PIN_HP_OUT) 1749 val = PIN_HP; 1750 else 1751 val = PIN_OUT; 1752 set_pin_targets(codec, cfg->line_outs, cfg->line_out_pins, val); 1753 if (cfg->line_out_type != AUTO_PIN_HP_OUT) 1754 set_pin_targets(codec, cfg->hp_outs, cfg->hp_pins, PIN_HP); 1755 if (cfg->line_out_type != AUTO_PIN_SPEAKER_OUT) { 1756 val = spec->prefer_hp_amp ? PIN_HP : PIN_OUT; 1757 set_pin_targets(codec, cfg->speaker_outs, 1758 cfg->speaker_pins, val); 1759 } 1760 1761 kfree(best_cfg); 1762 return 0; 1763 } 1764 1765 /* add playback controls from the parsed DAC table */ 1766 static int create_multi_out_ctls(struct hda_codec *codec, 1767 const struct auto_pin_cfg *cfg) 1768 { 1769 struct hda_gen_spec *spec = codec->spec; 1770 int i, err, noutputs; 1771 1772 noutputs = cfg->line_outs; 1773 if (spec->multi_ios > 0 && cfg->line_outs < 3) 1774 noutputs += spec->multi_ios; 1775 1776 for (i = 0; i < noutputs; i++) { 1777 const char *name; 1778 int index; 1779 struct nid_path *path; 1780 1781 path = snd_hda_get_path_from_idx(codec, spec->out_paths[i]); 1782 if (!path) 1783 continue; 1784 1785 name = get_line_out_pfx(codec, i, &index, NID_PATH_VOL_CTL); 1786 if (!name || !strcmp(name, "CLFE")) { 1787 /* Center/LFE */ 1788 err = add_vol_ctl(codec, "Center", 0, 1, path); 1789 if (err < 0) 1790 return err; 1791 err = add_vol_ctl(codec, "LFE", 0, 2, path); 1792 if (err < 0) 1793 return err; 1794 } else { 1795 err = add_stereo_vol(codec, name, index, path); 1796 if (err < 0) 1797 return err; 1798 } 1799 1800 name = get_line_out_pfx(codec, i, &index, NID_PATH_MUTE_CTL); 1801 if (!name || !strcmp(name, "CLFE")) { 1802 err = add_sw_ctl(codec, "Center", 0, 1, path); 1803 if (err < 0) 1804 return err; 1805 err = add_sw_ctl(codec, "LFE", 0, 2, path); 1806 if (err < 0) 1807 return err; 1808 } else { 1809 err = add_stereo_sw(codec, name, index, path); 1810 if (err < 0) 1811 return err; 1812 } 1813 } 1814 return 0; 1815 } 1816 1817 static int create_extra_out(struct hda_codec *codec, int path_idx, 1818 const char *pfx, int cidx) 1819 { 1820 struct nid_path *path; 1821 int err; 1822 1823 path = snd_hda_get_path_from_idx(codec, path_idx); 1824 if (!path) 1825 return 0; 1826 err = add_stereo_vol(codec, pfx, cidx, path); 1827 if (err < 0) 1828 return err; 1829 err = add_stereo_sw(codec, pfx, cidx, path); 1830 if (err < 0) 1831 return err; 1832 return 0; 1833 } 1834 1835 /* add playback controls for speaker and HP outputs */ 1836 static int create_extra_outs(struct hda_codec *codec, int num_pins, 1837 const int *paths, const char *pfx) 1838 { 1839 int i; 1840 1841 for (i = 0; i < num_pins; i++) { 1842 const char *name; 1843 char tmp[44]; 1844 int err, idx = 0; 1845 1846 if (num_pins == 2 && i == 1 && !strcmp(pfx, "Speaker")) 1847 name = "Bass Speaker"; 1848 else if (num_pins >= 3) { 1849 snprintf(tmp, sizeof(tmp), "%s %s", 1850 pfx, channel_name[i]); 1851 name = tmp; 1852 } else { 1853 name = pfx; 1854 idx = i; 1855 } 1856 err = create_extra_out(codec, paths[i], name, idx); 1857 if (err < 0) 1858 return err; 1859 } 1860 return 0; 1861 } 1862 1863 static int create_hp_out_ctls(struct hda_codec *codec) 1864 { 1865 struct hda_gen_spec *spec = codec->spec; 1866 return create_extra_outs(codec, spec->autocfg.hp_outs, 1867 spec->hp_paths, 1868 "Headphone"); 1869 } 1870 1871 static int create_speaker_out_ctls(struct hda_codec *codec) 1872 { 1873 struct hda_gen_spec *spec = codec->spec; 1874 return create_extra_outs(codec, spec->autocfg.speaker_outs, 1875 spec->speaker_paths, 1876 "Speaker"); 1877 } 1878 1879 /* 1880 * independent HP controls 1881 */ 1882 1883 static int indep_hp_info(struct snd_kcontrol *kcontrol, 1884 struct snd_ctl_elem_info *uinfo) 1885 { 1886 return snd_hda_enum_bool_helper_info(kcontrol, uinfo); 1887 } 1888 1889 static int indep_hp_get(struct snd_kcontrol *kcontrol, 1890 struct snd_ctl_elem_value *ucontrol) 1891 { 1892 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 1893 struct hda_gen_spec *spec = codec->spec; 1894 ucontrol->value.enumerated.item[0] = spec->indep_hp_enabled; 1895 return 0; 1896 } 1897 1898 static void update_aamix_paths(struct hda_codec *codec, bool do_mix, 1899 int nomix_path_idx, int mix_path_idx, 1900 int out_type); 1901 1902 static int indep_hp_put(struct snd_kcontrol *kcontrol, 1903 struct snd_ctl_elem_value *ucontrol) 1904 { 1905 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 1906 struct hda_gen_spec *spec = codec->spec; 1907 unsigned int select = ucontrol->value.enumerated.item[0]; 1908 int ret = 0; 1909 1910 mutex_lock(&spec->pcm_mutex); 1911 if (spec->active_streams) { 1912 ret = -EBUSY; 1913 goto unlock; 1914 } 1915 1916 if (spec->indep_hp_enabled != select) { 1917 hda_nid_t *dacp; 1918 if (spec->autocfg.line_out_type == AUTO_PIN_HP_OUT) 1919 dacp = &spec->private_dac_nids[0]; 1920 else 1921 dacp = &spec->multiout.hp_out_nid[0]; 1922 1923 /* update HP aamix paths in case it conflicts with indep HP */ 1924 if (spec->have_aamix_ctl) { 1925 if (spec->autocfg.line_out_type == AUTO_PIN_HP_OUT) 1926 update_aamix_paths(codec, spec->aamix_mode, 1927 spec->out_paths[0], 1928 spec->aamix_out_paths[0], 1929 spec->autocfg.line_out_type); 1930 else 1931 update_aamix_paths(codec, spec->aamix_mode, 1932 spec->hp_paths[0], 1933 spec->aamix_out_paths[1], 1934 AUTO_PIN_HP_OUT); 1935 } 1936 1937 spec->indep_hp_enabled = select; 1938 if (spec->indep_hp_enabled) 1939 *dacp = 0; 1940 else 1941 *dacp = spec->alt_dac_nid; 1942 1943 /* update HP auto-mute state too */ 1944 if (spec->hp_automute_hook) 1945 spec->hp_automute_hook(codec, NULL); 1946 else 1947 snd_hda_gen_hp_automute(codec, NULL); 1948 1949 ret = 1; 1950 } 1951 unlock: 1952 mutex_unlock(&spec->pcm_mutex); 1953 return ret; 1954 } 1955 1956 static const struct snd_kcontrol_new indep_hp_ctl = { 1957 .iface = SNDRV_CTL_ELEM_IFACE_MIXER, 1958 .name = "Independent HP", 1959 .info = indep_hp_info, 1960 .get = indep_hp_get, 1961 .put = indep_hp_put, 1962 }; 1963 1964 1965 static int create_indep_hp_ctls(struct hda_codec *codec) 1966 { 1967 struct hda_gen_spec *spec = codec->spec; 1968 hda_nid_t dac; 1969 1970 if (!spec->indep_hp) 1971 return 0; 1972 if (spec->autocfg.line_out_type == AUTO_PIN_HP_OUT) 1973 dac = spec->multiout.dac_nids[0]; 1974 else 1975 dac = spec->multiout.hp_out_nid[0]; 1976 if (!dac) { 1977 spec->indep_hp = 0; 1978 return 0; 1979 } 1980 1981 spec->indep_hp_enabled = false; 1982 spec->alt_dac_nid = dac; 1983 if (!snd_hda_gen_add_kctl(spec, NULL, &indep_hp_ctl)) 1984 return -ENOMEM; 1985 return 0; 1986 } 1987 1988 /* 1989 * channel mode enum control 1990 */ 1991 1992 static int ch_mode_info(struct snd_kcontrol *kcontrol, 1993 struct snd_ctl_elem_info *uinfo) 1994 { 1995 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 1996 struct hda_gen_spec *spec = codec->spec; 1997 int chs; 1998 1999 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; 2000 uinfo->count = 1; 2001 uinfo->value.enumerated.items = spec->multi_ios + 1; 2002 if (uinfo->value.enumerated.item > spec->multi_ios) 2003 uinfo->value.enumerated.item = spec->multi_ios; 2004 chs = uinfo->value.enumerated.item * 2 + spec->min_channel_count; 2005 sprintf(uinfo->value.enumerated.name, "%dch", chs); 2006 return 0; 2007 } 2008 2009 static int ch_mode_get(struct snd_kcontrol *kcontrol, 2010 struct snd_ctl_elem_value *ucontrol) 2011 { 2012 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 2013 struct hda_gen_spec *spec = codec->spec; 2014 ucontrol->value.enumerated.item[0] = 2015 (spec->ext_channel_count - spec->min_channel_count) / 2; 2016 return 0; 2017 } 2018 2019 static inline struct nid_path * 2020 get_multiio_path(struct hda_codec *codec, int idx) 2021 { 2022 struct hda_gen_spec *spec = codec->spec; 2023 return snd_hda_get_path_from_idx(codec, 2024 spec->out_paths[spec->autocfg.line_outs + idx]); 2025 } 2026 2027 static void update_automute_all(struct hda_codec *codec); 2028 2029 static int set_multi_io(struct hda_codec *codec, int idx, bool output) 2030 { 2031 struct hda_gen_spec *spec = codec->spec; 2032 hda_nid_t nid = spec->multi_io[idx].pin; 2033 struct nid_path *path; 2034 2035 path = get_multiio_path(codec, idx); 2036 if (!path) 2037 return -EINVAL; 2038 2039 if (path->active == output) 2040 return 0; 2041 2042 if (output) { 2043 set_pin_target(codec, nid, PIN_OUT, true); 2044 snd_hda_activate_path(codec, path, true, true); 2045 set_pin_eapd(codec, nid, true); 2046 } else { 2047 set_pin_eapd(codec, nid, false); 2048 snd_hda_activate_path(codec, path, false, true); 2049 set_pin_target(codec, nid, spec->multi_io[idx].ctl_in, true); 2050 path_power_down_sync(codec, path); 2051 } 2052 2053 /* update jack retasking in case it modifies any of them */ 2054 update_automute_all(codec); 2055 2056 return 0; 2057 } 2058 2059 static int ch_mode_put(struct snd_kcontrol *kcontrol, 2060 struct snd_ctl_elem_value *ucontrol) 2061 { 2062 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 2063 struct hda_gen_spec *spec = codec->spec; 2064 int i, ch; 2065 2066 ch = ucontrol->value.enumerated.item[0]; 2067 if (ch < 0 || ch > spec->multi_ios) 2068 return -EINVAL; 2069 if (ch == (spec->ext_channel_count - spec->min_channel_count) / 2) 2070 return 0; 2071 spec->ext_channel_count = ch * 2 + spec->min_channel_count; 2072 for (i = 0; i < spec->multi_ios; i++) 2073 set_multi_io(codec, i, i < ch); 2074 spec->multiout.max_channels = max(spec->ext_channel_count, 2075 spec->const_channel_count); 2076 if (spec->need_dac_fix) 2077 spec->multiout.num_dacs = spec->multiout.max_channels / 2; 2078 return 1; 2079 } 2080 2081 static const struct snd_kcontrol_new channel_mode_enum = { 2082 .iface = SNDRV_CTL_ELEM_IFACE_MIXER, 2083 .name = "Channel Mode", 2084 .info = ch_mode_info, 2085 .get = ch_mode_get, 2086 .put = ch_mode_put, 2087 }; 2088 2089 static int create_multi_channel_mode(struct hda_codec *codec) 2090 { 2091 struct hda_gen_spec *spec = codec->spec; 2092 2093 if (spec->multi_ios > 0) { 2094 if (!snd_hda_gen_add_kctl(spec, NULL, &channel_mode_enum)) 2095 return -ENOMEM; 2096 } 2097 return 0; 2098 } 2099 2100 /* 2101 * aamix loopback enable/disable switch 2102 */ 2103 2104 #define loopback_mixing_info indep_hp_info 2105 2106 static int loopback_mixing_get(struct snd_kcontrol *kcontrol, 2107 struct snd_ctl_elem_value *ucontrol) 2108 { 2109 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 2110 struct hda_gen_spec *spec = codec->spec; 2111 ucontrol->value.enumerated.item[0] = spec->aamix_mode; 2112 return 0; 2113 } 2114 2115 static void update_aamix_paths(struct hda_codec *codec, bool do_mix, 2116 int nomix_path_idx, int mix_path_idx, 2117 int out_type) 2118 { 2119 struct hda_gen_spec *spec = codec->spec; 2120 struct nid_path *nomix_path, *mix_path; 2121 2122 nomix_path = snd_hda_get_path_from_idx(codec, nomix_path_idx); 2123 mix_path = snd_hda_get_path_from_idx(codec, mix_path_idx); 2124 if (!nomix_path || !mix_path) 2125 return; 2126 2127 /* if HP aamix path is driven from a different DAC and the 2128 * independent HP mode is ON, can't turn on aamix path 2129 */ 2130 if (out_type == AUTO_PIN_HP_OUT && spec->indep_hp_enabled && 2131 mix_path->path[0] != spec->alt_dac_nid) 2132 do_mix = false; 2133 2134 if (do_mix) { 2135 snd_hda_activate_path(codec, nomix_path, false, true); 2136 snd_hda_activate_path(codec, mix_path, true, true); 2137 path_power_down_sync(codec, nomix_path); 2138 } else { 2139 snd_hda_activate_path(codec, mix_path, false, true); 2140 snd_hda_activate_path(codec, nomix_path, true, true); 2141 path_power_down_sync(codec, mix_path); 2142 } 2143 } 2144 2145 static int loopback_mixing_put(struct snd_kcontrol *kcontrol, 2146 struct snd_ctl_elem_value *ucontrol) 2147 { 2148 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 2149 struct hda_gen_spec *spec = codec->spec; 2150 unsigned int val = ucontrol->value.enumerated.item[0]; 2151 2152 if (val == spec->aamix_mode) 2153 return 0; 2154 spec->aamix_mode = val; 2155 update_aamix_paths(codec, val, spec->out_paths[0], 2156 spec->aamix_out_paths[0], 2157 spec->autocfg.line_out_type); 2158 update_aamix_paths(codec, val, spec->hp_paths[0], 2159 spec->aamix_out_paths[1], 2160 AUTO_PIN_HP_OUT); 2161 update_aamix_paths(codec, val, spec->speaker_paths[0], 2162 spec->aamix_out_paths[2], 2163 AUTO_PIN_SPEAKER_OUT); 2164 return 1; 2165 } 2166 2167 static const struct snd_kcontrol_new loopback_mixing_enum = { 2168 .iface = SNDRV_CTL_ELEM_IFACE_MIXER, 2169 .name = "Loopback Mixing", 2170 .info = loopback_mixing_info, 2171 .get = loopback_mixing_get, 2172 .put = loopback_mixing_put, 2173 }; 2174 2175 static int create_loopback_mixing_ctl(struct hda_codec *codec) 2176 { 2177 struct hda_gen_spec *spec = codec->spec; 2178 2179 if (!spec->mixer_nid) 2180 return 0; 2181 if (!(spec->aamix_out_paths[0] || spec->aamix_out_paths[1] || 2182 spec->aamix_out_paths[2])) 2183 return 0; 2184 if (!snd_hda_gen_add_kctl(spec, NULL, &loopback_mixing_enum)) 2185 return -ENOMEM; 2186 spec->have_aamix_ctl = 1; 2187 return 0; 2188 } 2189 2190 /* 2191 * shared headphone/mic handling 2192 */ 2193 2194 static void call_update_outputs(struct hda_codec *codec); 2195 2196 /* for shared I/O, change the pin-control accordingly */ 2197 static void update_shared_mic_hp(struct hda_codec *codec, bool set_as_mic) 2198 { 2199 struct hda_gen_spec *spec = codec->spec; 2200 unsigned int val; 2201 hda_nid_t pin = spec->autocfg.inputs[1].pin; 2202 /* NOTE: this assumes that there are only two inputs, the 2203 * first is the real internal mic and the second is HP/mic jack. 2204 */ 2205 2206 val = snd_hda_get_default_vref(codec, pin); 2207 2208 /* This pin does not have vref caps - let's enable vref on pin 0x18 2209 instead, as suggested by Realtek */ 2210 if (val == AC_PINCTL_VREF_HIZ && spec->shared_mic_vref_pin) { 2211 const hda_nid_t vref_pin = spec->shared_mic_vref_pin; 2212 unsigned int vref_val = snd_hda_get_default_vref(codec, vref_pin); 2213 if (vref_val != AC_PINCTL_VREF_HIZ) 2214 snd_hda_set_pin_ctl_cache(codec, vref_pin, 2215 PIN_IN | (set_as_mic ? vref_val : 0)); 2216 } 2217 2218 val = set_as_mic ? val | PIN_IN : PIN_HP; 2219 set_pin_target(codec, pin, val, true); 2220 2221 spec->automute_speaker = !set_as_mic; 2222 call_update_outputs(codec); 2223 } 2224 2225 /* create a shared input with the headphone out */ 2226 static int create_shared_input(struct hda_codec *codec) 2227 { 2228 struct hda_gen_spec *spec = codec->spec; 2229 struct auto_pin_cfg *cfg = &spec->autocfg; 2230 unsigned int defcfg; 2231 hda_nid_t nid; 2232 2233 /* only one internal input pin? */ 2234 if (cfg->num_inputs != 1) 2235 return 0; 2236 defcfg = snd_hda_codec_get_pincfg(codec, cfg->inputs[0].pin); 2237 if (snd_hda_get_input_pin_attr(defcfg) != INPUT_PIN_ATTR_INT) 2238 return 0; 2239 2240 if (cfg->hp_outs == 1 && cfg->line_out_type == AUTO_PIN_SPEAKER_OUT) 2241 nid = cfg->hp_pins[0]; /* OK, we have a single HP-out */ 2242 else if (cfg->line_outs == 1 && cfg->line_out_type == AUTO_PIN_HP_OUT) 2243 nid = cfg->line_out_pins[0]; /* OK, we have a single line-out */ 2244 else 2245 return 0; /* both not available */ 2246 2247 if (!(snd_hda_query_pin_caps(codec, nid) & AC_PINCAP_IN)) 2248 return 0; /* no input */ 2249 2250 cfg->inputs[1].pin = nid; 2251 cfg->inputs[1].type = AUTO_PIN_MIC; 2252 cfg->num_inputs = 2; 2253 spec->shared_mic_hp = 1; 2254 snd_printdd("hda-codec: Enable shared I/O jack on NID 0x%x\n", nid); 2255 return 0; 2256 } 2257 2258 /* 2259 * output jack mode 2260 */ 2261 static int out_jack_mode_info(struct snd_kcontrol *kcontrol, 2262 struct snd_ctl_elem_info *uinfo) 2263 { 2264 static const char * const texts[] = { 2265 "Line Out", "Headphone Out", 2266 }; 2267 return snd_hda_enum_helper_info(kcontrol, uinfo, 2, texts); 2268 } 2269 2270 static int out_jack_mode_get(struct snd_kcontrol *kcontrol, 2271 struct snd_ctl_elem_value *ucontrol) 2272 { 2273 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 2274 hda_nid_t nid = kcontrol->private_value; 2275 if (snd_hda_codec_get_pin_target(codec, nid) == PIN_HP) 2276 ucontrol->value.enumerated.item[0] = 1; 2277 else 2278 ucontrol->value.enumerated.item[0] = 0; 2279 return 0; 2280 } 2281 2282 static int out_jack_mode_put(struct snd_kcontrol *kcontrol, 2283 struct snd_ctl_elem_value *ucontrol) 2284 { 2285 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 2286 hda_nid_t nid = kcontrol->private_value; 2287 unsigned int val; 2288 2289 val = ucontrol->value.enumerated.item[0] ? PIN_HP : PIN_OUT; 2290 if (snd_hda_codec_get_pin_target(codec, nid) == val) 2291 return 0; 2292 snd_hda_set_pin_ctl_cache(codec, nid, val); 2293 return 1; 2294 } 2295 2296 static const struct snd_kcontrol_new out_jack_mode_enum = { 2297 .iface = SNDRV_CTL_ELEM_IFACE_MIXER, 2298 .info = out_jack_mode_info, 2299 .get = out_jack_mode_get, 2300 .put = out_jack_mode_put, 2301 }; 2302 2303 static bool find_kctl_name(struct hda_codec *codec, const char *name, int idx) 2304 { 2305 struct hda_gen_spec *spec = codec->spec; 2306 int i; 2307 2308 for (i = 0; i < spec->kctls.used; i++) { 2309 struct snd_kcontrol_new *kctl = snd_array_elem(&spec->kctls, i); 2310 if (!strcmp(kctl->name, name) && kctl->index == idx) 2311 return true; 2312 } 2313 return false; 2314 } 2315 2316 static void get_jack_mode_name(struct hda_codec *codec, hda_nid_t pin, 2317 char *name, size_t name_len) 2318 { 2319 struct hda_gen_spec *spec = codec->spec; 2320 int idx = 0; 2321 2322 snd_hda_get_pin_label(codec, pin, &spec->autocfg, name, name_len, &idx); 2323 strlcat(name, " Jack Mode", name_len); 2324 2325 for (; find_kctl_name(codec, name, idx); idx++) 2326 ; 2327 } 2328 2329 static int create_out_jack_modes(struct hda_codec *codec, int num_pins, 2330 hda_nid_t *pins) 2331 { 2332 struct hda_gen_spec *spec = codec->spec; 2333 int i; 2334 2335 for (i = 0; i < num_pins; i++) { 2336 hda_nid_t pin = pins[i]; 2337 unsigned int pincap = snd_hda_query_pin_caps(codec, pin); 2338 if ((pincap & AC_PINCAP_OUT) && (pincap & AC_PINCAP_HP_DRV)) { 2339 struct snd_kcontrol_new *knew; 2340 char name[44]; 2341 get_jack_mode_name(codec, pin, name, sizeof(name)); 2342 knew = snd_hda_gen_add_kctl(spec, name, 2343 &out_jack_mode_enum); 2344 if (!knew) 2345 return -ENOMEM; 2346 knew->private_value = pin; 2347 } 2348 } 2349 2350 return 0; 2351 } 2352 2353 /* 2354 * input jack mode 2355 */ 2356 2357 /* from AC_PINCTL_VREF_HIZ to AC_PINCTL_VREF_100 */ 2358 #define NUM_VREFS 6 2359 2360 static const char * const vref_texts[NUM_VREFS] = { 2361 "Line In", "Mic 50pc Bias", "Mic 0V Bias", 2362 "", "Mic 80pc Bias", "Mic 100pc Bias" 2363 }; 2364 2365 static unsigned int get_vref_caps(struct hda_codec *codec, hda_nid_t pin) 2366 { 2367 unsigned int pincap; 2368 2369 pincap = snd_hda_query_pin_caps(codec, pin); 2370 pincap = (pincap & AC_PINCAP_VREF) >> AC_PINCAP_VREF_SHIFT; 2371 /* filter out unusual vrefs */ 2372 pincap &= ~(AC_PINCAP_VREF_GRD | AC_PINCAP_VREF_100); 2373 return pincap; 2374 } 2375 2376 /* convert from the enum item index to the vref ctl index (0=HIZ, 1=50%...) */ 2377 static int get_vref_idx(unsigned int vref_caps, unsigned int item_idx) 2378 { 2379 unsigned int i, n = 0; 2380 2381 for (i = 0; i < NUM_VREFS; i++) { 2382 if (vref_caps & (1 << i)) { 2383 if (n == item_idx) 2384 return i; 2385 n++; 2386 } 2387 } 2388 return 0; 2389 } 2390 2391 /* convert back from the vref ctl index to the enum item index */ 2392 static int cvt_from_vref_idx(unsigned int vref_caps, unsigned int idx) 2393 { 2394 unsigned int i, n = 0; 2395 2396 for (i = 0; i < NUM_VREFS; i++) { 2397 if (i == idx) 2398 return n; 2399 if (vref_caps & (1 << i)) 2400 n++; 2401 } 2402 return 0; 2403 } 2404 2405 static int in_jack_mode_info(struct snd_kcontrol *kcontrol, 2406 struct snd_ctl_elem_info *uinfo) 2407 { 2408 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 2409 hda_nid_t nid = kcontrol->private_value; 2410 unsigned int vref_caps = get_vref_caps(codec, nid); 2411 2412 snd_hda_enum_helper_info(kcontrol, uinfo, hweight32(vref_caps), 2413 vref_texts); 2414 /* set the right text */ 2415 strcpy(uinfo->value.enumerated.name, 2416 vref_texts[get_vref_idx(vref_caps, uinfo->value.enumerated.item)]); 2417 return 0; 2418 } 2419 2420 static int in_jack_mode_get(struct snd_kcontrol *kcontrol, 2421 struct snd_ctl_elem_value *ucontrol) 2422 { 2423 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 2424 hda_nid_t nid = kcontrol->private_value; 2425 unsigned int vref_caps = get_vref_caps(codec, nid); 2426 unsigned int idx; 2427 2428 idx = snd_hda_codec_get_pin_target(codec, nid) & AC_PINCTL_VREFEN; 2429 ucontrol->value.enumerated.item[0] = cvt_from_vref_idx(vref_caps, idx); 2430 return 0; 2431 } 2432 2433 static int in_jack_mode_put(struct snd_kcontrol *kcontrol, 2434 struct snd_ctl_elem_value *ucontrol) 2435 { 2436 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 2437 hda_nid_t nid = kcontrol->private_value; 2438 unsigned int vref_caps = get_vref_caps(codec, nid); 2439 unsigned int val, idx; 2440 2441 val = snd_hda_codec_get_pin_target(codec, nid); 2442 idx = cvt_from_vref_idx(vref_caps, val & AC_PINCTL_VREFEN); 2443 if (idx == ucontrol->value.enumerated.item[0]) 2444 return 0; 2445 2446 val &= ~AC_PINCTL_VREFEN; 2447 val |= get_vref_idx(vref_caps, ucontrol->value.enumerated.item[0]); 2448 snd_hda_set_pin_ctl_cache(codec, nid, val); 2449 return 1; 2450 } 2451 2452 static const struct snd_kcontrol_new in_jack_mode_enum = { 2453 .iface = SNDRV_CTL_ELEM_IFACE_MIXER, 2454 .info = in_jack_mode_info, 2455 .get = in_jack_mode_get, 2456 .put = in_jack_mode_put, 2457 }; 2458 2459 static int create_in_jack_mode(struct hda_codec *codec, hda_nid_t pin) 2460 { 2461 struct hda_gen_spec *spec = codec->spec; 2462 unsigned int defcfg; 2463 struct snd_kcontrol_new *knew; 2464 char name[44]; 2465 2466 /* no jack mode for fixed pins */ 2467 defcfg = snd_hda_codec_get_pincfg(codec, pin); 2468 if (snd_hda_get_input_pin_attr(defcfg) == INPUT_PIN_ATTR_INT) 2469 return 0; 2470 2471 /* no multiple vref caps? */ 2472 if (hweight32(get_vref_caps(codec, pin)) <= 1) 2473 return 0; 2474 2475 get_jack_mode_name(codec, pin, name, sizeof(name)); 2476 knew = snd_hda_gen_add_kctl(spec, name, &in_jack_mode_enum); 2477 if (!knew) 2478 return -ENOMEM; 2479 knew->private_value = pin; 2480 return 0; 2481 } 2482 2483 2484 /* 2485 * Parse input paths 2486 */ 2487 2488 /* add the powersave loopback-list entry */ 2489 static int add_loopback_list(struct hda_gen_spec *spec, hda_nid_t mix, int idx) 2490 { 2491 struct hda_amp_list *list; 2492 2493 list = snd_array_new(&spec->loopback_list); 2494 if (!list) 2495 return -ENOMEM; 2496 list->nid = mix; 2497 list->dir = HDA_INPUT; 2498 list->idx = idx; 2499 spec->loopback.amplist = spec->loopback_list.list; 2500 return 0; 2501 } 2502 2503 /* create input playback/capture controls for the given pin */ 2504 static int new_analog_input(struct hda_codec *codec, int input_idx, 2505 hda_nid_t pin, const char *ctlname, int ctlidx, 2506 hda_nid_t mix_nid) 2507 { 2508 struct hda_gen_spec *spec = codec->spec; 2509 struct nid_path *path; 2510 unsigned int val; 2511 int err, idx; 2512 2513 if (!nid_has_volume(codec, mix_nid, HDA_INPUT) && 2514 !nid_has_mute(codec, mix_nid, HDA_INPUT)) 2515 return 0; /* no need for analog loopback */ 2516 2517 path = snd_hda_add_new_path(codec, pin, mix_nid, 0); 2518 if (!path) 2519 return -EINVAL; 2520 print_nid_path("loopback", path); 2521 spec->loopback_paths[input_idx] = snd_hda_get_path_idx(codec, path); 2522 2523 idx = path->idx[path->depth - 1]; 2524 if (nid_has_volume(codec, mix_nid, HDA_INPUT)) { 2525 val = HDA_COMPOSE_AMP_VAL(mix_nid, 3, idx, HDA_INPUT); 2526 err = __add_pb_vol_ctrl(spec, HDA_CTL_WIDGET_VOL, ctlname, ctlidx, val); 2527 if (err < 0) 2528 return err; 2529 path->ctls[NID_PATH_VOL_CTL] = val; 2530 } 2531 2532 if (nid_has_mute(codec, mix_nid, HDA_INPUT)) { 2533 val = HDA_COMPOSE_AMP_VAL(mix_nid, 3, idx, HDA_INPUT); 2534 err = __add_pb_sw_ctrl(spec, HDA_CTL_WIDGET_MUTE, ctlname, ctlidx, val); 2535 if (err < 0) 2536 return err; 2537 path->ctls[NID_PATH_MUTE_CTL] = val; 2538 } 2539 2540 path->active = true; 2541 err = add_loopback_list(spec, mix_nid, idx); 2542 if (err < 0) 2543 return err; 2544 2545 if (spec->mixer_nid != spec->mixer_merge_nid && 2546 !spec->loopback_merge_path) { 2547 path = snd_hda_add_new_path(codec, spec->mixer_nid, 2548 spec->mixer_merge_nid, 0); 2549 if (path) { 2550 print_nid_path("loopback-merge", path); 2551 path->active = true; 2552 spec->loopback_merge_path = 2553 snd_hda_get_path_idx(codec, path); 2554 } 2555 } 2556 2557 return 0; 2558 } 2559 2560 static int is_input_pin(struct hda_codec *codec, hda_nid_t nid) 2561 { 2562 unsigned int pincap = snd_hda_query_pin_caps(codec, nid); 2563 return (pincap & AC_PINCAP_IN) != 0; 2564 } 2565 2566 /* Parse the codec tree and retrieve ADCs */ 2567 static int fill_adc_nids(struct hda_codec *codec) 2568 { 2569 struct hda_gen_spec *spec = codec->spec; 2570 hda_nid_t nid; 2571 hda_nid_t *adc_nids = spec->adc_nids; 2572 int max_nums = ARRAY_SIZE(spec->adc_nids); 2573 int i, nums = 0; 2574 2575 nid = codec->start_nid; 2576 for (i = 0; i < codec->num_nodes; i++, nid++) { 2577 unsigned int caps = get_wcaps(codec, nid); 2578 int type = get_wcaps_type(caps); 2579 2580 if (type != AC_WID_AUD_IN || (caps & AC_WCAP_DIGITAL)) 2581 continue; 2582 adc_nids[nums] = nid; 2583 if (++nums >= max_nums) 2584 break; 2585 } 2586 spec->num_adc_nids = nums; 2587 2588 /* copy the detected ADCs to all_adcs[] */ 2589 spec->num_all_adcs = nums; 2590 memcpy(spec->all_adcs, spec->adc_nids, nums * sizeof(hda_nid_t)); 2591 2592 return nums; 2593 } 2594 2595 /* filter out invalid adc_nids that don't give all active input pins; 2596 * if needed, check whether dynamic ADC-switching is available 2597 */ 2598 static int check_dyn_adc_switch(struct hda_codec *codec) 2599 { 2600 struct hda_gen_spec *spec = codec->spec; 2601 struct hda_input_mux *imux = &spec->input_mux; 2602 unsigned int ok_bits; 2603 int i, n, nums; 2604 2605 again: 2606 nums = 0; 2607 ok_bits = 0; 2608 for (n = 0; n < spec->num_adc_nids; n++) { 2609 for (i = 0; i < imux->num_items; i++) { 2610 if (!spec->input_paths[i][n]) 2611 break; 2612 } 2613 if (i >= imux->num_items) { 2614 ok_bits |= (1 << n); 2615 nums++; 2616 } 2617 } 2618 2619 if (!ok_bits) { 2620 if (spec->shared_mic_hp) { 2621 spec->shared_mic_hp = 0; 2622 imux->num_items = 1; 2623 goto again; 2624 } 2625 2626 /* check whether ADC-switch is possible */ 2627 for (i = 0; i < imux->num_items; i++) { 2628 for (n = 0; n < spec->num_adc_nids; n++) { 2629 if (spec->input_paths[i][n]) { 2630 spec->dyn_adc_idx[i] = n; 2631 break; 2632 } 2633 } 2634 } 2635 2636 snd_printdd("hda-codec: enabling ADC switching\n"); 2637 spec->dyn_adc_switch = 1; 2638 } else if (nums != spec->num_adc_nids) { 2639 /* shrink the invalid adcs and input paths */ 2640 nums = 0; 2641 for (n = 0; n < spec->num_adc_nids; n++) { 2642 if (!(ok_bits & (1 << n))) 2643 continue; 2644 if (n != nums) { 2645 spec->adc_nids[nums] = spec->adc_nids[n]; 2646 for (i = 0; i < imux->num_items; i++) { 2647 invalidate_nid_path(codec, 2648 spec->input_paths[i][nums]); 2649 spec->input_paths[i][nums] = 2650 spec->input_paths[i][n]; 2651 } 2652 } 2653 nums++; 2654 } 2655 spec->num_adc_nids = nums; 2656 } 2657 2658 if (imux->num_items == 1 || spec->shared_mic_hp) { 2659 snd_printdd("hda-codec: reducing to a single ADC\n"); 2660 spec->num_adc_nids = 1; /* reduce to a single ADC */ 2661 } 2662 2663 /* single index for individual volumes ctls */ 2664 if (!spec->dyn_adc_switch && spec->multi_cap_vol) 2665 spec->num_adc_nids = 1; 2666 2667 return 0; 2668 } 2669 2670 /* parse capture source paths from the given pin and create imux items */ 2671 static int parse_capture_source(struct hda_codec *codec, hda_nid_t pin, 2672 int cfg_idx, int num_adcs, 2673 const char *label, int anchor) 2674 { 2675 struct hda_gen_spec *spec = codec->spec; 2676 struct hda_input_mux *imux = &spec->input_mux; 2677 int imux_idx = imux->num_items; 2678 bool imux_added = false; 2679 int c; 2680 2681 for (c = 0; c < num_adcs; c++) { 2682 struct nid_path *path; 2683 hda_nid_t adc = spec->adc_nids[c]; 2684 2685 if (!is_reachable_path(codec, pin, adc)) 2686 continue; 2687 path = snd_hda_add_new_path(codec, pin, adc, anchor); 2688 if (!path) 2689 continue; 2690 print_nid_path("input", path); 2691 spec->input_paths[imux_idx][c] = 2692 snd_hda_get_path_idx(codec, path); 2693 2694 if (!imux_added) { 2695 spec->imux_pins[imux->num_items] = pin; 2696 snd_hda_add_imux_item(imux, label, cfg_idx, NULL); 2697 imux_added = true; 2698 } 2699 } 2700 2701 return 0; 2702 } 2703 2704 /* 2705 * create playback/capture controls for input pins 2706 */ 2707 2708 /* fill the label for each input at first */ 2709 static int fill_input_pin_labels(struct hda_codec *codec) 2710 { 2711 struct hda_gen_spec *spec = codec->spec; 2712 const struct auto_pin_cfg *cfg = &spec->autocfg; 2713 int i; 2714 2715 for (i = 0; i < cfg->num_inputs; i++) { 2716 hda_nid_t pin = cfg->inputs[i].pin; 2717 const char *label; 2718 int j, idx; 2719 2720 if (!is_input_pin(codec, pin)) 2721 continue; 2722 2723 label = hda_get_autocfg_input_label(codec, cfg, i); 2724 idx = 0; 2725 for (j = i - 1; j >= 0; j--) { 2726 if (spec->input_labels[j] && 2727 !strcmp(spec->input_labels[j], label)) { 2728 idx = spec->input_label_idxs[j] + 1; 2729 break; 2730 } 2731 } 2732 2733 spec->input_labels[i] = label; 2734 spec->input_label_idxs[i] = idx; 2735 } 2736 2737 return 0; 2738 } 2739 2740 #define CFG_IDX_MIX 99 /* a dummy cfg->input idx for stereo mix */ 2741 2742 static int create_input_ctls(struct hda_codec *codec) 2743 { 2744 struct hda_gen_spec *spec = codec->spec; 2745 const struct auto_pin_cfg *cfg = &spec->autocfg; 2746 hda_nid_t mixer = spec->mixer_nid; 2747 int num_adcs; 2748 int i, err; 2749 unsigned int val; 2750 2751 num_adcs = fill_adc_nids(codec); 2752 if (num_adcs < 0) 2753 return 0; 2754 2755 err = fill_input_pin_labels(codec); 2756 if (err < 0) 2757 return err; 2758 2759 for (i = 0; i < cfg->num_inputs; i++) { 2760 hda_nid_t pin; 2761 2762 pin = cfg->inputs[i].pin; 2763 if (!is_input_pin(codec, pin)) 2764 continue; 2765 2766 val = PIN_IN; 2767 if (cfg->inputs[i].type == AUTO_PIN_MIC) 2768 val |= snd_hda_get_default_vref(codec, pin); 2769 set_pin_target(codec, pin, val, false); 2770 2771 if (mixer) { 2772 if (is_reachable_path(codec, pin, mixer)) { 2773 err = new_analog_input(codec, i, pin, 2774 spec->input_labels[i], 2775 spec->input_label_idxs[i], 2776 mixer); 2777 if (err < 0) 2778 return err; 2779 } 2780 } 2781 2782 err = parse_capture_source(codec, pin, i, num_adcs, 2783 spec->input_labels[i], -mixer); 2784 if (err < 0) 2785 return err; 2786 2787 if (spec->add_in_jack_modes) { 2788 err = create_in_jack_mode(codec, pin); 2789 if (err < 0) 2790 return err; 2791 } 2792 } 2793 2794 if (mixer && spec->add_stereo_mix_input) { 2795 err = parse_capture_source(codec, mixer, CFG_IDX_MIX, num_adcs, 2796 "Stereo Mix", 0); 2797 if (err < 0) 2798 return err; 2799 } 2800 2801 return 0; 2802 } 2803 2804 2805 /* 2806 * input source mux 2807 */ 2808 2809 /* get the input path specified by the given adc and imux indices */ 2810 static struct nid_path *get_input_path(struct hda_codec *codec, int adc_idx, int imux_idx) 2811 { 2812 struct hda_gen_spec *spec = codec->spec; 2813 if (imux_idx < 0 || imux_idx >= HDA_MAX_NUM_INPUTS) { 2814 snd_BUG(); 2815 return NULL; 2816 } 2817 if (spec->dyn_adc_switch) 2818 adc_idx = spec->dyn_adc_idx[imux_idx]; 2819 if (adc_idx < 0 || adc_idx >= AUTO_CFG_MAX_INS) { 2820 snd_BUG(); 2821 return NULL; 2822 } 2823 return snd_hda_get_path_from_idx(codec, spec->input_paths[imux_idx][adc_idx]); 2824 } 2825 2826 static int mux_select(struct hda_codec *codec, unsigned int adc_idx, 2827 unsigned int idx); 2828 2829 static int mux_enum_info(struct snd_kcontrol *kcontrol, 2830 struct snd_ctl_elem_info *uinfo) 2831 { 2832 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 2833 struct hda_gen_spec *spec = codec->spec; 2834 return snd_hda_input_mux_info(&spec->input_mux, uinfo); 2835 } 2836 2837 static int mux_enum_get(struct snd_kcontrol *kcontrol, 2838 struct snd_ctl_elem_value *ucontrol) 2839 { 2840 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 2841 struct hda_gen_spec *spec = codec->spec; 2842 /* the ctls are created at once with multiple counts */ 2843 unsigned int adc_idx = snd_ctl_get_ioffidx(kcontrol, &ucontrol->id); 2844 2845 ucontrol->value.enumerated.item[0] = spec->cur_mux[adc_idx]; 2846 return 0; 2847 } 2848 2849 static int mux_enum_put(struct snd_kcontrol *kcontrol, 2850 struct snd_ctl_elem_value *ucontrol) 2851 { 2852 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 2853 unsigned int adc_idx = snd_ctl_get_ioffidx(kcontrol, &ucontrol->id); 2854 return mux_select(codec, adc_idx, 2855 ucontrol->value.enumerated.item[0]); 2856 } 2857 2858 static const struct snd_kcontrol_new cap_src_temp = { 2859 .iface = SNDRV_CTL_ELEM_IFACE_MIXER, 2860 .name = "Input Source", 2861 .info = mux_enum_info, 2862 .get = mux_enum_get, 2863 .put = mux_enum_put, 2864 }; 2865 2866 /* 2867 * capture volume and capture switch ctls 2868 */ 2869 2870 typedef int (*put_call_t)(struct snd_kcontrol *kcontrol, 2871 struct snd_ctl_elem_value *ucontrol); 2872 2873 /* call the given amp update function for all amps in the imux list at once */ 2874 static int cap_put_caller(struct snd_kcontrol *kcontrol, 2875 struct snd_ctl_elem_value *ucontrol, 2876 put_call_t func, int type) 2877 { 2878 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 2879 struct hda_gen_spec *spec = codec->spec; 2880 const struct hda_input_mux *imux; 2881 struct nid_path *path; 2882 int i, adc_idx, err = 0; 2883 2884 imux = &spec->input_mux; 2885 adc_idx = kcontrol->id.index; 2886 mutex_lock(&codec->control_mutex); 2887 /* we use the cache-only update at first since multiple input paths 2888 * may shared the same amp; by updating only caches, the redundant 2889 * writes to hardware can be reduced. 2890 */ 2891 codec->cached_write = 1; 2892 for (i = 0; i < imux->num_items; i++) { 2893 path = get_input_path(codec, adc_idx, i); 2894 if (!path || !path->ctls[type]) 2895 continue; 2896 kcontrol->private_value = path->ctls[type]; 2897 err = func(kcontrol, ucontrol); 2898 if (err < 0) 2899 goto error; 2900 } 2901 error: 2902 codec->cached_write = 0; 2903 mutex_unlock(&codec->control_mutex); 2904 snd_hda_codec_flush_cache(codec); /* flush the updates */ 2905 if (err >= 0 && spec->cap_sync_hook) 2906 spec->cap_sync_hook(codec, ucontrol); 2907 return err; 2908 } 2909 2910 /* capture volume ctl callbacks */ 2911 #define cap_vol_info snd_hda_mixer_amp_volume_info 2912 #define cap_vol_get snd_hda_mixer_amp_volume_get 2913 #define cap_vol_tlv snd_hda_mixer_amp_tlv 2914 2915 static int cap_vol_put(struct snd_kcontrol *kcontrol, 2916 struct snd_ctl_elem_value *ucontrol) 2917 { 2918 return cap_put_caller(kcontrol, ucontrol, 2919 snd_hda_mixer_amp_volume_put, 2920 NID_PATH_VOL_CTL); 2921 } 2922 2923 static const struct snd_kcontrol_new cap_vol_temp = { 2924 .iface = SNDRV_CTL_ELEM_IFACE_MIXER, 2925 .name = "Capture Volume", 2926 .access = (SNDRV_CTL_ELEM_ACCESS_READWRITE | 2927 SNDRV_CTL_ELEM_ACCESS_TLV_READ | 2928 SNDRV_CTL_ELEM_ACCESS_TLV_CALLBACK), 2929 .info = cap_vol_info, 2930 .get = cap_vol_get, 2931 .put = cap_vol_put, 2932 .tlv = { .c = cap_vol_tlv }, 2933 }; 2934 2935 /* capture switch ctl callbacks */ 2936 #define cap_sw_info snd_ctl_boolean_stereo_info 2937 #define cap_sw_get snd_hda_mixer_amp_switch_get 2938 2939 static int cap_sw_put(struct snd_kcontrol *kcontrol, 2940 struct snd_ctl_elem_value *ucontrol) 2941 { 2942 return cap_put_caller(kcontrol, ucontrol, 2943 snd_hda_mixer_amp_switch_put, 2944 NID_PATH_MUTE_CTL); 2945 } 2946 2947 static const struct snd_kcontrol_new cap_sw_temp = { 2948 .iface = SNDRV_CTL_ELEM_IFACE_MIXER, 2949 .name = "Capture Switch", 2950 .info = cap_sw_info, 2951 .get = cap_sw_get, 2952 .put = cap_sw_put, 2953 }; 2954 2955 static int parse_capvol_in_path(struct hda_codec *codec, struct nid_path *path) 2956 { 2957 hda_nid_t nid; 2958 int i, depth; 2959 2960 path->ctls[NID_PATH_VOL_CTL] = path->ctls[NID_PATH_MUTE_CTL] = 0; 2961 for (depth = 0; depth < 3; depth++) { 2962 if (depth >= path->depth) 2963 return -EINVAL; 2964 i = path->depth - depth - 1; 2965 nid = path->path[i]; 2966 if (!path->ctls[NID_PATH_VOL_CTL]) { 2967 if (nid_has_volume(codec, nid, HDA_OUTPUT)) 2968 path->ctls[NID_PATH_VOL_CTL] = 2969 HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_OUTPUT); 2970 else if (nid_has_volume(codec, nid, HDA_INPUT)) { 2971 int idx = path->idx[i]; 2972 if (!depth && codec->single_adc_amp) 2973 idx = 0; 2974 path->ctls[NID_PATH_VOL_CTL] = 2975 HDA_COMPOSE_AMP_VAL(nid, 3, idx, HDA_INPUT); 2976 } 2977 } 2978 if (!path->ctls[NID_PATH_MUTE_CTL]) { 2979 if (nid_has_mute(codec, nid, HDA_OUTPUT)) 2980 path->ctls[NID_PATH_MUTE_CTL] = 2981 HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_OUTPUT); 2982 else if (nid_has_mute(codec, nid, HDA_INPUT)) { 2983 int idx = path->idx[i]; 2984 if (!depth && codec->single_adc_amp) 2985 idx = 0; 2986 path->ctls[NID_PATH_MUTE_CTL] = 2987 HDA_COMPOSE_AMP_VAL(nid, 3, idx, HDA_INPUT); 2988 } 2989 } 2990 } 2991 return 0; 2992 } 2993 2994 static bool is_inv_dmic_pin(struct hda_codec *codec, hda_nid_t nid) 2995 { 2996 struct hda_gen_spec *spec = codec->spec; 2997 struct auto_pin_cfg *cfg = &spec->autocfg; 2998 unsigned int val; 2999 int i; 3000 3001 if (!spec->inv_dmic_split) 3002 return false; 3003 for (i = 0; i < cfg->num_inputs; i++) { 3004 if (cfg->inputs[i].pin != nid) 3005 continue; 3006 if (cfg->inputs[i].type != AUTO_PIN_MIC) 3007 return false; 3008 val = snd_hda_codec_get_pincfg(codec, nid); 3009 return snd_hda_get_input_pin_attr(val) == INPUT_PIN_ATTR_INT; 3010 } 3011 return false; 3012 } 3013 3014 /* capture switch put callback for a single control with hook call */ 3015 static int cap_single_sw_put(struct snd_kcontrol *kcontrol, 3016 struct snd_ctl_elem_value *ucontrol) 3017 { 3018 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 3019 struct hda_gen_spec *spec = codec->spec; 3020 int ret; 3021 3022 ret = snd_hda_mixer_amp_switch_put(kcontrol, ucontrol); 3023 if (ret < 0) 3024 return ret; 3025 3026 if (spec->cap_sync_hook) 3027 spec->cap_sync_hook(codec, ucontrol); 3028 3029 return ret; 3030 } 3031 3032 static int add_single_cap_ctl(struct hda_codec *codec, const char *label, 3033 int idx, bool is_switch, unsigned int ctl, 3034 bool inv_dmic) 3035 { 3036 struct hda_gen_spec *spec = codec->spec; 3037 char tmpname[44]; 3038 int type = is_switch ? HDA_CTL_WIDGET_MUTE : HDA_CTL_WIDGET_VOL; 3039 const char *sfx = is_switch ? "Switch" : "Volume"; 3040 unsigned int chs = inv_dmic ? 1 : 3; 3041 struct snd_kcontrol_new *knew; 3042 3043 if (!ctl) 3044 return 0; 3045 3046 if (label) 3047 snprintf(tmpname, sizeof(tmpname), 3048 "%s Capture %s", label, sfx); 3049 else 3050 snprintf(tmpname, sizeof(tmpname), 3051 "Capture %s", sfx); 3052 knew = add_control(spec, type, tmpname, idx, 3053 amp_val_replace_channels(ctl, chs)); 3054 if (!knew) 3055 return -ENOMEM; 3056 if (is_switch) 3057 knew->put = cap_single_sw_put; 3058 if (!inv_dmic) 3059 return 0; 3060 3061 /* Make independent right kcontrol */ 3062 if (label) 3063 snprintf(tmpname, sizeof(tmpname), 3064 "Inverted %s Capture %s", label, sfx); 3065 else 3066 snprintf(tmpname, sizeof(tmpname), 3067 "Inverted Capture %s", sfx); 3068 knew = add_control(spec, type, tmpname, idx, 3069 amp_val_replace_channels(ctl, 2)); 3070 if (!knew) 3071 return -ENOMEM; 3072 if (is_switch) 3073 knew->put = cap_single_sw_put; 3074 return 0; 3075 } 3076 3077 /* create single (and simple) capture volume and switch controls */ 3078 static int create_single_cap_vol_ctl(struct hda_codec *codec, int idx, 3079 unsigned int vol_ctl, unsigned int sw_ctl, 3080 bool inv_dmic) 3081 { 3082 int err; 3083 err = add_single_cap_ctl(codec, NULL, idx, false, vol_ctl, inv_dmic); 3084 if (err < 0) 3085 return err; 3086 err = add_single_cap_ctl(codec, NULL, idx, true, sw_ctl, inv_dmic); 3087 if (err < 0) 3088 return err; 3089 return 0; 3090 } 3091 3092 /* create bound capture volume and switch controls */ 3093 static int create_bind_cap_vol_ctl(struct hda_codec *codec, int idx, 3094 unsigned int vol_ctl, unsigned int sw_ctl) 3095 { 3096 struct hda_gen_spec *spec = codec->spec; 3097 struct snd_kcontrol_new *knew; 3098 3099 if (vol_ctl) { 3100 knew = snd_hda_gen_add_kctl(spec, NULL, &cap_vol_temp); 3101 if (!knew) 3102 return -ENOMEM; 3103 knew->index = idx; 3104 knew->private_value = vol_ctl; 3105 knew->subdevice = HDA_SUBDEV_AMP_FLAG; 3106 } 3107 if (sw_ctl) { 3108 knew = snd_hda_gen_add_kctl(spec, NULL, &cap_sw_temp); 3109 if (!knew) 3110 return -ENOMEM; 3111 knew->index = idx; 3112 knew->private_value = sw_ctl; 3113 knew->subdevice = HDA_SUBDEV_AMP_FLAG; 3114 } 3115 return 0; 3116 } 3117 3118 /* return the vol ctl when used first in the imux list */ 3119 static unsigned int get_first_cap_ctl(struct hda_codec *codec, int idx, int type) 3120 { 3121 struct nid_path *path; 3122 unsigned int ctl; 3123 int i; 3124 3125 path = get_input_path(codec, 0, idx); 3126 if (!path) 3127 return 0; 3128 ctl = path->ctls[type]; 3129 if (!ctl) 3130 return 0; 3131 for (i = 0; i < idx - 1; i++) { 3132 path = get_input_path(codec, 0, i); 3133 if (path && path->ctls[type] == ctl) 3134 return 0; 3135 } 3136 return ctl; 3137 } 3138 3139 /* create individual capture volume and switch controls per input */ 3140 static int create_multi_cap_vol_ctl(struct hda_codec *codec) 3141 { 3142 struct hda_gen_spec *spec = codec->spec; 3143 struct hda_input_mux *imux = &spec->input_mux; 3144 int i, err, type; 3145 3146 for (i = 0; i < imux->num_items; i++) { 3147 bool inv_dmic; 3148 int idx; 3149 3150 idx = imux->items[i].index; 3151 if (idx >= spec->autocfg.num_inputs) 3152 continue; 3153 inv_dmic = is_inv_dmic_pin(codec, spec->imux_pins[i]); 3154 3155 for (type = 0; type < 2; type++) { 3156 err = add_single_cap_ctl(codec, 3157 spec->input_labels[idx], 3158 spec->input_label_idxs[idx], 3159 type, 3160 get_first_cap_ctl(codec, i, type), 3161 inv_dmic); 3162 if (err < 0) 3163 return err; 3164 } 3165 } 3166 return 0; 3167 } 3168 3169 static int create_capture_mixers(struct hda_codec *codec) 3170 { 3171 struct hda_gen_spec *spec = codec->spec; 3172 struct hda_input_mux *imux = &spec->input_mux; 3173 int i, n, nums, err; 3174 3175 if (spec->dyn_adc_switch) 3176 nums = 1; 3177 else 3178 nums = spec->num_adc_nids; 3179 3180 if (!spec->auto_mic && imux->num_items > 1) { 3181 struct snd_kcontrol_new *knew; 3182 const char *name; 3183 name = nums > 1 ? "Input Source" : "Capture Source"; 3184 knew = snd_hda_gen_add_kctl(spec, name, &cap_src_temp); 3185 if (!knew) 3186 return -ENOMEM; 3187 knew->count = nums; 3188 } 3189 3190 for (n = 0; n < nums; n++) { 3191 bool multi = false; 3192 bool multi_cap_vol = spec->multi_cap_vol; 3193 bool inv_dmic = false; 3194 int vol, sw; 3195 3196 vol = sw = 0; 3197 for (i = 0; i < imux->num_items; i++) { 3198 struct nid_path *path; 3199 path = get_input_path(codec, n, i); 3200 if (!path) 3201 continue; 3202 parse_capvol_in_path(codec, path); 3203 if (!vol) 3204 vol = path->ctls[NID_PATH_VOL_CTL]; 3205 else if (vol != path->ctls[NID_PATH_VOL_CTL]) { 3206 multi = true; 3207 if (!same_amp_caps(codec, vol, 3208 path->ctls[NID_PATH_VOL_CTL], HDA_INPUT)) 3209 multi_cap_vol = true; 3210 } 3211 if (!sw) 3212 sw = path->ctls[NID_PATH_MUTE_CTL]; 3213 else if (sw != path->ctls[NID_PATH_MUTE_CTL]) { 3214 multi = true; 3215 if (!same_amp_caps(codec, sw, 3216 path->ctls[NID_PATH_MUTE_CTL], HDA_INPUT)) 3217 multi_cap_vol = true; 3218 } 3219 if (is_inv_dmic_pin(codec, spec->imux_pins[i])) 3220 inv_dmic = true; 3221 } 3222 3223 if (!multi) 3224 err = create_single_cap_vol_ctl(codec, n, vol, sw, 3225 inv_dmic); 3226 else if (!multi_cap_vol) 3227 err = create_bind_cap_vol_ctl(codec, n, vol, sw); 3228 else 3229 err = create_multi_cap_vol_ctl(codec); 3230 if (err < 0) 3231 return err; 3232 } 3233 3234 return 0; 3235 } 3236 3237 /* 3238 * add mic boosts if needed 3239 */ 3240 3241 /* check whether the given amp is feasible as a boost volume */ 3242 static bool check_boost_vol(struct hda_codec *codec, hda_nid_t nid, 3243 int dir, int idx) 3244 { 3245 unsigned int step; 3246 3247 if (!nid_has_volume(codec, nid, dir) || 3248 is_ctl_associated(codec, nid, dir, idx, NID_PATH_VOL_CTL) || 3249 is_ctl_associated(codec, nid, dir, idx, NID_PATH_BOOST_CTL)) 3250 return false; 3251 3252 step = (query_amp_caps(codec, nid, dir) & AC_AMPCAP_STEP_SIZE) 3253 >> AC_AMPCAP_STEP_SIZE_SHIFT; 3254 if (step < 0x20) 3255 return false; 3256 return true; 3257 } 3258 3259 /* look for a boost amp in a widget close to the pin */ 3260 static unsigned int look_for_boost_amp(struct hda_codec *codec, 3261 struct nid_path *path) 3262 { 3263 unsigned int val = 0; 3264 hda_nid_t nid; 3265 int depth; 3266 3267 for (depth = 0; depth < 3; depth++) { 3268 if (depth >= path->depth - 1) 3269 break; 3270 nid = path->path[depth]; 3271 if (depth && check_boost_vol(codec, nid, HDA_OUTPUT, 0)) { 3272 val = HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_OUTPUT); 3273 break; 3274 } else if (check_boost_vol(codec, nid, HDA_INPUT, 3275 path->idx[depth])) { 3276 val = HDA_COMPOSE_AMP_VAL(nid, 3, path->idx[depth], 3277 HDA_INPUT); 3278 break; 3279 } 3280 } 3281 3282 return val; 3283 } 3284 3285 static int parse_mic_boost(struct hda_codec *codec) 3286 { 3287 struct hda_gen_spec *spec = codec->spec; 3288 struct auto_pin_cfg *cfg = &spec->autocfg; 3289 struct hda_input_mux *imux = &spec->input_mux; 3290 int i; 3291 3292 if (!spec->num_adc_nids) 3293 return 0; 3294 3295 for (i = 0; i < imux->num_items; i++) { 3296 struct nid_path *path; 3297 unsigned int val; 3298 int idx; 3299 char boost_label[44]; 3300 3301 idx = imux->items[i].index; 3302 if (idx >= imux->num_items) 3303 continue; 3304 3305 /* check only line-in and mic pins */ 3306 if (cfg->inputs[idx].type > AUTO_PIN_LINE_IN) 3307 continue; 3308 3309 path = get_input_path(codec, 0, i); 3310 if (!path) 3311 continue; 3312 3313 val = look_for_boost_amp(codec, path); 3314 if (!val) 3315 continue; 3316 3317 /* create a boost control */ 3318 snprintf(boost_label, sizeof(boost_label), 3319 "%s Boost Volume", spec->input_labels[idx]); 3320 if (!add_control(spec, HDA_CTL_WIDGET_VOL, boost_label, 3321 spec->input_label_idxs[idx], val)) 3322 return -ENOMEM; 3323 3324 path->ctls[NID_PATH_BOOST_CTL] = val; 3325 } 3326 return 0; 3327 } 3328 3329 /* 3330 * parse digital I/Os and set up NIDs in BIOS auto-parse mode 3331 */ 3332 static void parse_digital(struct hda_codec *codec) 3333 { 3334 struct hda_gen_spec *spec = codec->spec; 3335 struct nid_path *path; 3336 int i, nums; 3337 hda_nid_t dig_nid, pin; 3338 3339 /* support multiple SPDIFs; the secondary is set up as a slave */ 3340 nums = 0; 3341 for (i = 0; i < spec->autocfg.dig_outs; i++) { 3342 pin = spec->autocfg.dig_out_pins[i]; 3343 dig_nid = look_for_dac(codec, pin, true); 3344 if (!dig_nid) 3345 continue; 3346 path = snd_hda_add_new_path(codec, dig_nid, pin, 0); 3347 if (!path) 3348 continue; 3349 print_nid_path("digout", path); 3350 path->active = true; 3351 spec->digout_paths[i] = snd_hda_get_path_idx(codec, path); 3352 set_pin_target(codec, pin, PIN_OUT, false); 3353 if (!nums) { 3354 spec->multiout.dig_out_nid = dig_nid; 3355 spec->dig_out_type = spec->autocfg.dig_out_type[0]; 3356 } else { 3357 spec->multiout.slave_dig_outs = spec->slave_dig_outs; 3358 if (nums >= ARRAY_SIZE(spec->slave_dig_outs) - 1) 3359 break; 3360 spec->slave_dig_outs[nums - 1] = dig_nid; 3361 } 3362 nums++; 3363 } 3364 3365 if (spec->autocfg.dig_in_pin) { 3366 pin = spec->autocfg.dig_in_pin; 3367 dig_nid = codec->start_nid; 3368 for (i = 0; i < codec->num_nodes; i++, dig_nid++) { 3369 unsigned int wcaps = get_wcaps(codec, dig_nid); 3370 if (get_wcaps_type(wcaps) != AC_WID_AUD_IN) 3371 continue; 3372 if (!(wcaps & AC_WCAP_DIGITAL)) 3373 continue; 3374 path = snd_hda_add_new_path(codec, pin, dig_nid, 0); 3375 if (path) { 3376 print_nid_path("digin", path); 3377 path->active = true; 3378 spec->dig_in_nid = dig_nid; 3379 spec->digin_path = snd_hda_get_path_idx(codec, path); 3380 set_pin_target(codec, pin, PIN_IN, false); 3381 break; 3382 } 3383 } 3384 } 3385 } 3386 3387 3388 /* 3389 * input MUX handling 3390 */ 3391 3392 static bool dyn_adc_pcm_resetup(struct hda_codec *codec, int cur); 3393 3394 /* select the given imux item; either unmute exclusively or select the route */ 3395 static int mux_select(struct hda_codec *codec, unsigned int adc_idx, 3396 unsigned int idx) 3397 { 3398 struct hda_gen_spec *spec = codec->spec; 3399 const struct hda_input_mux *imux; 3400 struct nid_path *old_path, *path; 3401 3402 imux = &spec->input_mux; 3403 if (!imux->num_items) 3404 return 0; 3405 3406 if (idx >= imux->num_items) 3407 idx = imux->num_items - 1; 3408 if (spec->cur_mux[adc_idx] == idx) 3409 return 0; 3410 3411 old_path = get_input_path(codec, adc_idx, spec->cur_mux[adc_idx]); 3412 if (!old_path) 3413 return 0; 3414 if (old_path->active) 3415 snd_hda_activate_path(codec, old_path, false, false); 3416 3417 spec->cur_mux[adc_idx] = idx; 3418 3419 if (spec->shared_mic_hp) 3420 update_shared_mic_hp(codec, spec->cur_mux[adc_idx]); 3421 3422 if (spec->dyn_adc_switch) 3423 dyn_adc_pcm_resetup(codec, idx); 3424 3425 path = get_input_path(codec, adc_idx, idx); 3426 if (!path) 3427 return 0; 3428 if (path->active) 3429 return 0; 3430 snd_hda_activate_path(codec, path, true, false); 3431 if (spec->cap_sync_hook) 3432 spec->cap_sync_hook(codec, NULL); 3433 path_power_down_sync(codec, old_path); 3434 return 1; 3435 } 3436 3437 3438 /* 3439 * Jack detections for HP auto-mute and mic-switch 3440 */ 3441 3442 /* check each pin in the given array; returns true if any of them is plugged */ 3443 static bool detect_jacks(struct hda_codec *codec, int num_pins, hda_nid_t *pins) 3444 { 3445 int i, present = 0; 3446 3447 for (i = 0; i < num_pins; i++) { 3448 hda_nid_t nid = pins[i]; 3449 if (!nid) 3450 break; 3451 /* don't detect pins retasked as inputs */ 3452 if (snd_hda_codec_get_pin_target(codec, nid) & AC_PINCTL_IN_EN) 3453 continue; 3454 present |= snd_hda_jack_detect(codec, nid); 3455 } 3456 return present; 3457 } 3458 3459 /* standard HP/line-out auto-mute helper */ 3460 static void do_automute(struct hda_codec *codec, int num_pins, hda_nid_t *pins, 3461 bool mute) 3462 { 3463 struct hda_gen_spec *spec = codec->spec; 3464 int i; 3465 3466 for (i = 0; i < num_pins; i++) { 3467 hda_nid_t nid = pins[i]; 3468 unsigned int val; 3469 if (!nid) 3470 break; 3471 /* don't reset VREF value in case it's controlling 3472 * the amp (see alc861_fixup_asus_amp_vref_0f()) 3473 */ 3474 if (spec->keep_vref_in_automute) 3475 val = snd_hda_codec_get_pin_target(codec, nid) & ~PIN_HP; 3476 else 3477 val = 0; 3478 if (!mute) 3479 val |= snd_hda_codec_get_pin_target(codec, nid); 3480 /* here we call update_pin_ctl() so that the pinctl is changed 3481 * without changing the pinctl target value; 3482 * the original target value will be still referred at the 3483 * init / resume again 3484 */ 3485 update_pin_ctl(codec, nid, val); 3486 set_pin_eapd(codec, nid, !mute); 3487 } 3488 } 3489 3490 /* Toggle outputs muting */ 3491 void snd_hda_gen_update_outputs(struct hda_codec *codec) 3492 { 3493 struct hda_gen_spec *spec = codec->spec; 3494 int on; 3495 3496 /* Control HP pins/amps depending on master_mute state; 3497 * in general, HP pins/amps control should be enabled in all cases, 3498 * but currently set only for master_mute, just to be safe 3499 */ 3500 if (!spec->shared_mic_hp) /* don't change HP-pin when shared with mic */ 3501 do_automute(codec, ARRAY_SIZE(spec->autocfg.hp_pins), 3502 spec->autocfg.hp_pins, spec->master_mute); 3503 3504 if (!spec->automute_speaker) 3505 on = 0; 3506 else 3507 on = spec->hp_jack_present | spec->line_jack_present; 3508 on |= spec->master_mute; 3509 spec->speaker_muted = on; 3510 do_automute(codec, ARRAY_SIZE(spec->autocfg.speaker_pins), 3511 spec->autocfg.speaker_pins, on); 3512 3513 /* toggle line-out mutes if needed, too */ 3514 /* if LO is a copy of either HP or Speaker, don't need to handle it */ 3515 if (spec->autocfg.line_out_pins[0] == spec->autocfg.hp_pins[0] || 3516 spec->autocfg.line_out_pins[0] == spec->autocfg.speaker_pins[0]) 3517 return; 3518 if (!spec->automute_lo) 3519 on = 0; 3520 else 3521 on = spec->hp_jack_present; 3522 on |= spec->master_mute; 3523 spec->line_out_muted = on; 3524 do_automute(codec, ARRAY_SIZE(spec->autocfg.line_out_pins), 3525 spec->autocfg.line_out_pins, on); 3526 } 3527 EXPORT_SYMBOL_HDA(snd_hda_gen_update_outputs); 3528 3529 static void call_update_outputs(struct hda_codec *codec) 3530 { 3531 struct hda_gen_spec *spec = codec->spec; 3532 if (spec->automute_hook) 3533 spec->automute_hook(codec); 3534 else 3535 snd_hda_gen_update_outputs(codec); 3536 } 3537 3538 /* standard HP-automute helper */ 3539 void snd_hda_gen_hp_automute(struct hda_codec *codec, struct hda_jack_tbl *jack) 3540 { 3541 struct hda_gen_spec *spec = codec->spec; 3542 hda_nid_t *pins = spec->autocfg.hp_pins; 3543 int num_pins = ARRAY_SIZE(spec->autocfg.hp_pins); 3544 3545 /* No detection for the first HP jack during indep-HP mode */ 3546 if (spec->indep_hp_enabled) { 3547 pins++; 3548 num_pins--; 3549 } 3550 3551 spec->hp_jack_present = detect_jacks(codec, num_pins, pins); 3552 if (!spec->detect_hp || (!spec->automute_speaker && !spec->automute_lo)) 3553 return; 3554 call_update_outputs(codec); 3555 } 3556 EXPORT_SYMBOL_HDA(snd_hda_gen_hp_automute); 3557 3558 /* standard line-out-automute helper */ 3559 void snd_hda_gen_line_automute(struct hda_codec *codec, struct hda_jack_tbl *jack) 3560 { 3561 struct hda_gen_spec *spec = codec->spec; 3562 3563 if (spec->autocfg.line_out_type == AUTO_PIN_SPEAKER_OUT) 3564 return; 3565 /* check LO jack only when it's different from HP */ 3566 if (spec->autocfg.line_out_pins[0] == spec->autocfg.hp_pins[0]) 3567 return; 3568 3569 spec->line_jack_present = 3570 detect_jacks(codec, ARRAY_SIZE(spec->autocfg.line_out_pins), 3571 spec->autocfg.line_out_pins); 3572 if (!spec->automute_speaker || !spec->detect_lo) 3573 return; 3574 call_update_outputs(codec); 3575 } 3576 EXPORT_SYMBOL_HDA(snd_hda_gen_line_automute); 3577 3578 /* standard mic auto-switch helper */ 3579 void snd_hda_gen_mic_autoswitch(struct hda_codec *codec, struct hda_jack_tbl *jack) 3580 { 3581 struct hda_gen_spec *spec = codec->spec; 3582 int i; 3583 3584 if (!spec->auto_mic) 3585 return; 3586 3587 for (i = spec->am_num_entries - 1; i > 0; i--) { 3588 hda_nid_t pin = spec->am_entry[i].pin; 3589 /* don't detect pins retasked as outputs */ 3590 if (snd_hda_codec_get_pin_target(codec, pin) & AC_PINCTL_OUT_EN) 3591 continue; 3592 if (snd_hda_jack_detect(codec, pin)) { 3593 mux_select(codec, 0, spec->am_entry[i].idx); 3594 return; 3595 } 3596 } 3597 mux_select(codec, 0, spec->am_entry[0].idx); 3598 } 3599 EXPORT_SYMBOL_HDA(snd_hda_gen_mic_autoswitch); 3600 3601 /* update jack retasking */ 3602 static void update_automute_all(struct hda_codec *codec) 3603 { 3604 struct hda_gen_spec *spec = codec->spec; 3605 3606 if (spec->hp_automute_hook) 3607 spec->hp_automute_hook(codec, NULL); 3608 else 3609 snd_hda_gen_hp_automute(codec, NULL); 3610 if (spec->line_automute_hook) 3611 spec->line_automute_hook(codec, NULL); 3612 else 3613 snd_hda_gen_line_automute(codec, NULL); 3614 if (spec->mic_autoswitch_hook) 3615 spec->mic_autoswitch_hook(codec, NULL); 3616 else 3617 snd_hda_gen_mic_autoswitch(codec, NULL); 3618 } 3619 3620 /* 3621 * Auto-Mute mode mixer enum support 3622 */ 3623 static int automute_mode_info(struct snd_kcontrol *kcontrol, 3624 struct snd_ctl_elem_info *uinfo) 3625 { 3626 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 3627 struct hda_gen_spec *spec = codec->spec; 3628 static const char * const texts3[] = { 3629 "Disabled", "Speaker Only", "Line Out+Speaker" 3630 }; 3631 3632 if (spec->automute_speaker_possible && spec->automute_lo_possible) 3633 return snd_hda_enum_helper_info(kcontrol, uinfo, 3, texts3); 3634 return snd_hda_enum_bool_helper_info(kcontrol, uinfo); 3635 } 3636 3637 static int automute_mode_get(struct snd_kcontrol *kcontrol, 3638 struct snd_ctl_elem_value *ucontrol) 3639 { 3640 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 3641 struct hda_gen_spec *spec = codec->spec; 3642 unsigned int val = 0; 3643 if (spec->automute_speaker) 3644 val++; 3645 if (spec->automute_lo) 3646 val++; 3647 3648 ucontrol->value.enumerated.item[0] = val; 3649 return 0; 3650 } 3651 3652 static int automute_mode_put(struct snd_kcontrol *kcontrol, 3653 struct snd_ctl_elem_value *ucontrol) 3654 { 3655 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 3656 struct hda_gen_spec *spec = codec->spec; 3657 3658 switch (ucontrol->value.enumerated.item[0]) { 3659 case 0: 3660 if (!spec->automute_speaker && !spec->automute_lo) 3661 return 0; 3662 spec->automute_speaker = 0; 3663 spec->automute_lo = 0; 3664 break; 3665 case 1: 3666 if (spec->automute_speaker_possible) { 3667 if (!spec->automute_lo && spec->automute_speaker) 3668 return 0; 3669 spec->automute_speaker = 1; 3670 spec->automute_lo = 0; 3671 } else if (spec->automute_lo_possible) { 3672 if (spec->automute_lo) 3673 return 0; 3674 spec->automute_lo = 1; 3675 } else 3676 return -EINVAL; 3677 break; 3678 case 2: 3679 if (!spec->automute_lo_possible || !spec->automute_speaker_possible) 3680 return -EINVAL; 3681 if (spec->automute_speaker && spec->automute_lo) 3682 return 0; 3683 spec->automute_speaker = 1; 3684 spec->automute_lo = 1; 3685 break; 3686 default: 3687 return -EINVAL; 3688 } 3689 call_update_outputs(codec); 3690 return 1; 3691 } 3692 3693 static const struct snd_kcontrol_new automute_mode_enum = { 3694 .iface = SNDRV_CTL_ELEM_IFACE_MIXER, 3695 .name = "Auto-Mute Mode", 3696 .info = automute_mode_info, 3697 .get = automute_mode_get, 3698 .put = automute_mode_put, 3699 }; 3700 3701 static int add_automute_mode_enum(struct hda_codec *codec) 3702 { 3703 struct hda_gen_spec *spec = codec->spec; 3704 3705 if (!snd_hda_gen_add_kctl(spec, NULL, &automute_mode_enum)) 3706 return -ENOMEM; 3707 return 0; 3708 } 3709 3710 /* 3711 * Check the availability of HP/line-out auto-mute; 3712 * Set up appropriately if really supported 3713 */ 3714 static int check_auto_mute_availability(struct hda_codec *codec) 3715 { 3716 struct hda_gen_spec *spec = codec->spec; 3717 struct auto_pin_cfg *cfg = &spec->autocfg; 3718 int present = 0; 3719 int i, err; 3720 3721 if (spec->suppress_auto_mute) 3722 return 0; 3723 3724 if (cfg->hp_pins[0]) 3725 present++; 3726 if (cfg->line_out_pins[0]) 3727 present++; 3728 if (cfg->speaker_pins[0]) 3729 present++; 3730 if (present < 2) /* need two different output types */ 3731 return 0; 3732 3733 if (!cfg->speaker_pins[0] && 3734 cfg->line_out_type == AUTO_PIN_SPEAKER_OUT) { 3735 memcpy(cfg->speaker_pins, cfg->line_out_pins, 3736 sizeof(cfg->speaker_pins)); 3737 cfg->speaker_outs = cfg->line_outs; 3738 } 3739 3740 if (!cfg->hp_pins[0] && 3741 cfg->line_out_type == AUTO_PIN_HP_OUT) { 3742 memcpy(cfg->hp_pins, cfg->line_out_pins, 3743 sizeof(cfg->hp_pins)); 3744 cfg->hp_outs = cfg->line_outs; 3745 } 3746 3747 for (i = 0; i < cfg->hp_outs; i++) { 3748 hda_nid_t nid = cfg->hp_pins[i]; 3749 if (!is_jack_detectable(codec, nid)) 3750 continue; 3751 snd_printdd("hda-codec: Enable HP auto-muting on NID 0x%x\n", 3752 nid); 3753 snd_hda_jack_detect_enable_callback(codec, nid, HDA_GEN_HP_EVENT, 3754 spec->hp_automute_hook ? 3755 spec->hp_automute_hook : 3756 snd_hda_gen_hp_automute); 3757 spec->detect_hp = 1; 3758 } 3759 3760 if (cfg->line_out_type == AUTO_PIN_LINE_OUT && cfg->line_outs) { 3761 if (cfg->speaker_outs) 3762 for (i = 0; i < cfg->line_outs; i++) { 3763 hda_nid_t nid = cfg->line_out_pins[i]; 3764 if (!is_jack_detectable(codec, nid)) 3765 continue; 3766 snd_printdd("hda-codec: Enable Line-Out auto-muting on NID 0x%x\n", nid); 3767 snd_hda_jack_detect_enable_callback(codec, nid, 3768 HDA_GEN_FRONT_EVENT, 3769 spec->line_automute_hook ? 3770 spec->line_automute_hook : 3771 snd_hda_gen_line_automute); 3772 spec->detect_lo = 1; 3773 } 3774 spec->automute_lo_possible = spec->detect_hp; 3775 } 3776 3777 spec->automute_speaker_possible = cfg->speaker_outs && 3778 (spec->detect_hp || spec->detect_lo); 3779 3780 spec->automute_lo = spec->automute_lo_possible; 3781 spec->automute_speaker = spec->automute_speaker_possible; 3782 3783 if (spec->automute_speaker_possible || spec->automute_lo_possible) { 3784 /* create a control for automute mode */ 3785 err = add_automute_mode_enum(codec); 3786 if (err < 0) 3787 return err; 3788 } 3789 return 0; 3790 } 3791 3792 /* check whether all auto-mic pins are valid; setup indices if OK */ 3793 static bool auto_mic_check_imux(struct hda_codec *codec) 3794 { 3795 struct hda_gen_spec *spec = codec->spec; 3796 const struct hda_input_mux *imux; 3797 int i; 3798 3799 imux = &spec->input_mux; 3800 for (i = 0; i < spec->am_num_entries; i++) { 3801 spec->am_entry[i].idx = 3802 find_idx_in_nid_list(spec->am_entry[i].pin, 3803 spec->imux_pins, imux->num_items); 3804 if (spec->am_entry[i].idx < 0) 3805 return false; /* no corresponding imux */ 3806 } 3807 3808 /* we don't need the jack detection for the first pin */ 3809 for (i = 1; i < spec->am_num_entries; i++) 3810 snd_hda_jack_detect_enable_callback(codec, 3811 spec->am_entry[i].pin, 3812 HDA_GEN_MIC_EVENT, 3813 spec->mic_autoswitch_hook ? 3814 spec->mic_autoswitch_hook : 3815 snd_hda_gen_mic_autoswitch); 3816 return true; 3817 } 3818 3819 static int compare_attr(const void *ap, const void *bp) 3820 { 3821 const struct automic_entry *a = ap; 3822 const struct automic_entry *b = bp; 3823 return (int)(a->attr - b->attr); 3824 } 3825 3826 /* 3827 * Check the availability of auto-mic switch; 3828 * Set up if really supported 3829 */ 3830 static int check_auto_mic_availability(struct hda_codec *codec) 3831 { 3832 struct hda_gen_spec *spec = codec->spec; 3833 struct auto_pin_cfg *cfg = &spec->autocfg; 3834 unsigned int types; 3835 int i, num_pins; 3836 3837 if (spec->suppress_auto_mic) 3838 return 0; 3839 3840 types = 0; 3841 num_pins = 0; 3842 for (i = 0; i < cfg->num_inputs; i++) { 3843 hda_nid_t nid = cfg->inputs[i].pin; 3844 unsigned int attr; 3845 attr = snd_hda_codec_get_pincfg(codec, nid); 3846 attr = snd_hda_get_input_pin_attr(attr); 3847 if (types & (1 << attr)) 3848 return 0; /* already occupied */ 3849 switch (attr) { 3850 case INPUT_PIN_ATTR_INT: 3851 if (cfg->inputs[i].type != AUTO_PIN_MIC) 3852 return 0; /* invalid type */ 3853 break; 3854 case INPUT_PIN_ATTR_UNUSED: 3855 return 0; /* invalid entry */ 3856 default: 3857 if (cfg->inputs[i].type > AUTO_PIN_LINE_IN) 3858 return 0; /* invalid type */ 3859 if (!spec->line_in_auto_switch && 3860 cfg->inputs[i].type != AUTO_PIN_MIC) 3861 return 0; /* only mic is allowed */ 3862 if (!is_jack_detectable(codec, nid)) 3863 return 0; /* no unsol support */ 3864 break; 3865 } 3866 if (num_pins >= MAX_AUTO_MIC_PINS) 3867 return 0; 3868 types |= (1 << attr); 3869 spec->am_entry[num_pins].pin = nid; 3870 spec->am_entry[num_pins].attr = attr; 3871 num_pins++; 3872 } 3873 3874 if (num_pins < 2) 3875 return 0; 3876 3877 spec->am_num_entries = num_pins; 3878 /* sort the am_entry in the order of attr so that the pin with a 3879 * higher attr will be selected when the jack is plugged. 3880 */ 3881 sort(spec->am_entry, num_pins, sizeof(spec->am_entry[0]), 3882 compare_attr, NULL); 3883 3884 if (!auto_mic_check_imux(codec)) 3885 return 0; 3886 3887 spec->auto_mic = 1; 3888 spec->num_adc_nids = 1; 3889 spec->cur_mux[0] = spec->am_entry[0].idx; 3890 snd_printdd("hda-codec: Enable auto-mic switch on NID 0x%x/0x%x/0x%x\n", 3891 spec->am_entry[0].pin, 3892 spec->am_entry[1].pin, 3893 spec->am_entry[2].pin); 3894 3895 return 0; 3896 } 3897 3898 /* power_filter hook; make inactive widgets into power down */ 3899 static unsigned int snd_hda_gen_path_power_filter(struct hda_codec *codec, 3900 hda_nid_t nid, 3901 unsigned int power_state) 3902 { 3903 if (power_state != AC_PWRST_D0) 3904 return power_state; 3905 if (get_wcaps_type(get_wcaps(codec, nid)) >= AC_WID_POWER) 3906 return power_state; 3907 if (is_active_nid(codec, nid, HDA_OUTPUT, 0)) 3908 return power_state; 3909 return AC_PWRST_D3; 3910 } 3911 3912 3913 /* 3914 * Parse the given BIOS configuration and set up the hda_gen_spec 3915 * 3916 * return 1 if successful, 0 if the proper config is not found, 3917 * or a negative error code 3918 */ 3919 int snd_hda_gen_parse_auto_config(struct hda_codec *codec, 3920 struct auto_pin_cfg *cfg) 3921 { 3922 struct hda_gen_spec *spec = codec->spec; 3923 int err; 3924 3925 parse_user_hints(codec); 3926 3927 if (spec->mixer_nid && !spec->mixer_merge_nid) 3928 spec->mixer_merge_nid = spec->mixer_nid; 3929 3930 if (cfg != &spec->autocfg) { 3931 spec->autocfg = *cfg; 3932 cfg = &spec->autocfg; 3933 } 3934 3935 fill_all_dac_nids(codec); 3936 3937 if (!cfg->line_outs) { 3938 if (cfg->dig_outs || cfg->dig_in_pin) { 3939 spec->multiout.max_channels = 2; 3940 spec->no_analog = 1; 3941 goto dig_only; 3942 } 3943 return 0; /* can't find valid BIOS pin config */ 3944 } 3945 3946 if (!spec->no_primary_hp && 3947 cfg->line_out_type == AUTO_PIN_SPEAKER_OUT && 3948 cfg->line_outs <= cfg->hp_outs) { 3949 /* use HP as primary out */ 3950 cfg->speaker_outs = cfg->line_outs; 3951 memcpy(cfg->speaker_pins, cfg->line_out_pins, 3952 sizeof(cfg->speaker_pins)); 3953 cfg->line_outs = cfg->hp_outs; 3954 memcpy(cfg->line_out_pins, cfg->hp_pins, sizeof(cfg->hp_pins)); 3955 cfg->hp_outs = 0; 3956 memset(cfg->hp_pins, 0, sizeof(cfg->hp_pins)); 3957 cfg->line_out_type = AUTO_PIN_HP_OUT; 3958 } 3959 3960 err = parse_output_paths(codec); 3961 if (err < 0) 3962 return err; 3963 err = create_multi_channel_mode(codec); 3964 if (err < 0) 3965 return err; 3966 err = create_multi_out_ctls(codec, cfg); 3967 if (err < 0) 3968 return err; 3969 err = create_hp_out_ctls(codec); 3970 if (err < 0) 3971 return err; 3972 err = create_speaker_out_ctls(codec); 3973 if (err < 0) 3974 return err; 3975 err = create_indep_hp_ctls(codec); 3976 if (err < 0) 3977 return err; 3978 err = create_loopback_mixing_ctl(codec); 3979 if (err < 0) 3980 return err; 3981 err = create_shared_input(codec); 3982 if (err < 0) 3983 return err; 3984 err = create_input_ctls(codec); 3985 if (err < 0) 3986 return err; 3987 3988 spec->const_channel_count = spec->ext_channel_count; 3989 /* check the multiple speaker and headphone pins */ 3990 if (cfg->line_out_type != AUTO_PIN_SPEAKER_OUT) 3991 spec->const_channel_count = max(spec->const_channel_count, 3992 cfg->speaker_outs * 2); 3993 if (cfg->line_out_type != AUTO_PIN_HP_OUT) 3994 spec->const_channel_count = max(spec->const_channel_count, 3995 cfg->hp_outs * 2); 3996 spec->multiout.max_channels = max(spec->ext_channel_count, 3997 spec->const_channel_count); 3998 3999 err = check_auto_mute_availability(codec); 4000 if (err < 0) 4001 return err; 4002 4003 err = check_dyn_adc_switch(codec); 4004 if (err < 0) 4005 return err; 4006 4007 if (!spec->shared_mic_hp) { 4008 err = check_auto_mic_availability(codec); 4009 if (err < 0) 4010 return err; 4011 } 4012 4013 err = create_capture_mixers(codec); 4014 if (err < 0) 4015 return err; 4016 4017 err = parse_mic_boost(codec); 4018 if (err < 0) 4019 return err; 4020 4021 if (spec->add_out_jack_modes) { 4022 if (cfg->line_out_type != AUTO_PIN_SPEAKER_OUT) { 4023 err = create_out_jack_modes(codec, cfg->line_outs, 4024 cfg->line_out_pins); 4025 if (err < 0) 4026 return err; 4027 } 4028 if (cfg->line_out_type != AUTO_PIN_HP_OUT) { 4029 err = create_out_jack_modes(codec, cfg->hp_outs, 4030 cfg->hp_pins); 4031 if (err < 0) 4032 return err; 4033 } 4034 } 4035 4036 dig_only: 4037 parse_digital(codec); 4038 4039 if (spec->power_down_unused) 4040 codec->power_filter = snd_hda_gen_path_power_filter; 4041 4042 return 1; 4043 } 4044 EXPORT_SYMBOL_HDA(snd_hda_gen_parse_auto_config); 4045 4046 4047 /* 4048 * Build control elements 4049 */ 4050 4051 /* slave controls for virtual master */ 4052 static const char * const slave_pfxs[] = { 4053 "Front", "Surround", "Center", "LFE", "Side", 4054 "Headphone", "Speaker", "Mono", "Line Out", 4055 "CLFE", "Bass Speaker", "PCM", 4056 "Speaker Front", "Speaker Surround", "Speaker CLFE", "Speaker Side", 4057 "Headphone Front", "Headphone Surround", "Headphone CLFE", 4058 "Headphone Side", 4059 NULL, 4060 }; 4061 4062 int snd_hda_gen_build_controls(struct hda_codec *codec) 4063 { 4064 struct hda_gen_spec *spec = codec->spec; 4065 int err; 4066 4067 if (spec->kctls.used) { 4068 err = snd_hda_add_new_ctls(codec, spec->kctls.list); 4069 if (err < 0) 4070 return err; 4071 } 4072 4073 if (spec->multiout.dig_out_nid) { 4074 err = snd_hda_create_dig_out_ctls(codec, 4075 spec->multiout.dig_out_nid, 4076 spec->multiout.dig_out_nid, 4077 spec->pcm_rec[1].pcm_type); 4078 if (err < 0) 4079 return err; 4080 if (!spec->no_analog) { 4081 err = snd_hda_create_spdif_share_sw(codec, 4082 &spec->multiout); 4083 if (err < 0) 4084 return err; 4085 spec->multiout.share_spdif = 1; 4086 } 4087 } 4088 if (spec->dig_in_nid) { 4089 err = snd_hda_create_spdif_in_ctls(codec, spec->dig_in_nid); 4090 if (err < 0) 4091 return err; 4092 } 4093 4094 /* if we have no master control, let's create it */ 4095 if (!spec->no_analog && 4096 !snd_hda_find_mixer_ctl(codec, "Master Playback Volume")) { 4097 err = snd_hda_add_vmaster(codec, "Master Playback Volume", 4098 spec->vmaster_tlv, slave_pfxs, 4099 "Playback Volume"); 4100 if (err < 0) 4101 return err; 4102 } 4103 if (!spec->no_analog && 4104 !snd_hda_find_mixer_ctl(codec, "Master Playback Switch")) { 4105 err = __snd_hda_add_vmaster(codec, "Master Playback Switch", 4106 NULL, slave_pfxs, 4107 "Playback Switch", 4108 true, &spec->vmaster_mute.sw_kctl); 4109 if (err < 0) 4110 return err; 4111 if (spec->vmaster_mute.hook) 4112 snd_hda_add_vmaster_hook(codec, &spec->vmaster_mute, 4113 spec->vmaster_mute_enum); 4114 } 4115 4116 free_kctls(spec); /* no longer needed */ 4117 4118 if (spec->shared_mic_hp) { 4119 int err; 4120 int nid = spec->autocfg.inputs[1].pin; 4121 err = snd_hda_jack_add_kctl(codec, nid, "Headphone Mic", 0); 4122 if (err < 0) 4123 return err; 4124 err = snd_hda_jack_detect_enable(codec, nid, 0); 4125 if (err < 0) 4126 return err; 4127 } 4128 4129 err = snd_hda_jack_add_kctls(codec, &spec->autocfg); 4130 if (err < 0) 4131 return err; 4132 4133 return 0; 4134 } 4135 EXPORT_SYMBOL_HDA(snd_hda_gen_build_controls); 4136 4137 4138 /* 4139 * PCM definitions 4140 */ 4141 4142 static void call_pcm_playback_hook(struct hda_pcm_stream *hinfo, 4143 struct hda_codec *codec, 4144 struct snd_pcm_substream *substream, 4145 int action) 4146 { 4147 struct hda_gen_spec *spec = codec->spec; 4148 if (spec->pcm_playback_hook) 4149 spec->pcm_playback_hook(hinfo, codec, substream, action); 4150 } 4151 4152 static void call_pcm_capture_hook(struct hda_pcm_stream *hinfo, 4153 struct hda_codec *codec, 4154 struct snd_pcm_substream *substream, 4155 int action) 4156 { 4157 struct hda_gen_spec *spec = codec->spec; 4158 if (spec->pcm_capture_hook) 4159 spec->pcm_capture_hook(hinfo, codec, substream, action); 4160 } 4161 4162 /* 4163 * Analog playback callbacks 4164 */ 4165 static int playback_pcm_open(struct hda_pcm_stream *hinfo, 4166 struct hda_codec *codec, 4167 struct snd_pcm_substream *substream) 4168 { 4169 struct hda_gen_spec *spec = codec->spec; 4170 int err; 4171 4172 mutex_lock(&spec->pcm_mutex); 4173 err = snd_hda_multi_out_analog_open(codec, 4174 &spec->multiout, substream, 4175 hinfo); 4176 if (!err) { 4177 spec->active_streams |= 1 << STREAM_MULTI_OUT; 4178 call_pcm_playback_hook(hinfo, codec, substream, 4179 HDA_GEN_PCM_ACT_OPEN); 4180 } 4181 mutex_unlock(&spec->pcm_mutex); 4182 return err; 4183 } 4184 4185 static int playback_pcm_prepare(struct hda_pcm_stream *hinfo, 4186 struct hda_codec *codec, 4187 unsigned int stream_tag, 4188 unsigned int format, 4189 struct snd_pcm_substream *substream) 4190 { 4191 struct hda_gen_spec *spec = codec->spec; 4192 int err; 4193 4194 err = snd_hda_multi_out_analog_prepare(codec, &spec->multiout, 4195 stream_tag, format, substream); 4196 if (!err) 4197 call_pcm_playback_hook(hinfo, codec, substream, 4198 HDA_GEN_PCM_ACT_PREPARE); 4199 return err; 4200 } 4201 4202 static int playback_pcm_cleanup(struct hda_pcm_stream *hinfo, 4203 struct hda_codec *codec, 4204 struct snd_pcm_substream *substream) 4205 { 4206 struct hda_gen_spec *spec = codec->spec; 4207 int err; 4208 4209 err = snd_hda_multi_out_analog_cleanup(codec, &spec->multiout); 4210 if (!err) 4211 call_pcm_playback_hook(hinfo, codec, substream, 4212 HDA_GEN_PCM_ACT_CLEANUP); 4213 return err; 4214 } 4215 4216 static int playback_pcm_close(struct hda_pcm_stream *hinfo, 4217 struct hda_codec *codec, 4218 struct snd_pcm_substream *substream) 4219 { 4220 struct hda_gen_spec *spec = codec->spec; 4221 mutex_lock(&spec->pcm_mutex); 4222 spec->active_streams &= ~(1 << STREAM_MULTI_OUT); 4223 call_pcm_playback_hook(hinfo, codec, substream, 4224 HDA_GEN_PCM_ACT_CLOSE); 4225 mutex_unlock(&spec->pcm_mutex); 4226 return 0; 4227 } 4228 4229 static int capture_pcm_open(struct hda_pcm_stream *hinfo, 4230 struct hda_codec *codec, 4231 struct snd_pcm_substream *substream) 4232 { 4233 call_pcm_capture_hook(hinfo, codec, substream, HDA_GEN_PCM_ACT_OPEN); 4234 return 0; 4235 } 4236 4237 static int capture_pcm_prepare(struct hda_pcm_stream *hinfo, 4238 struct hda_codec *codec, 4239 unsigned int stream_tag, 4240 unsigned int format, 4241 struct snd_pcm_substream *substream) 4242 { 4243 snd_hda_codec_setup_stream(codec, hinfo->nid, stream_tag, 0, format); 4244 call_pcm_capture_hook(hinfo, codec, substream, 4245 HDA_GEN_PCM_ACT_PREPARE); 4246 return 0; 4247 } 4248 4249 static int capture_pcm_cleanup(struct hda_pcm_stream *hinfo, 4250 struct hda_codec *codec, 4251 struct snd_pcm_substream *substream) 4252 { 4253 snd_hda_codec_cleanup_stream(codec, hinfo->nid); 4254 call_pcm_capture_hook(hinfo, codec, substream, 4255 HDA_GEN_PCM_ACT_CLEANUP); 4256 return 0; 4257 } 4258 4259 static int capture_pcm_close(struct hda_pcm_stream *hinfo, 4260 struct hda_codec *codec, 4261 struct snd_pcm_substream *substream) 4262 { 4263 call_pcm_capture_hook(hinfo, codec, substream, HDA_GEN_PCM_ACT_CLOSE); 4264 return 0; 4265 } 4266 4267 static int alt_playback_pcm_open(struct hda_pcm_stream *hinfo, 4268 struct hda_codec *codec, 4269 struct snd_pcm_substream *substream) 4270 { 4271 struct hda_gen_spec *spec = codec->spec; 4272 int err = 0; 4273 4274 mutex_lock(&spec->pcm_mutex); 4275 if (!spec->indep_hp_enabled) 4276 err = -EBUSY; 4277 else 4278 spec->active_streams |= 1 << STREAM_INDEP_HP; 4279 call_pcm_playback_hook(hinfo, codec, substream, 4280 HDA_GEN_PCM_ACT_OPEN); 4281 mutex_unlock(&spec->pcm_mutex); 4282 return err; 4283 } 4284 4285 static int alt_playback_pcm_close(struct hda_pcm_stream *hinfo, 4286 struct hda_codec *codec, 4287 struct snd_pcm_substream *substream) 4288 { 4289 struct hda_gen_spec *spec = codec->spec; 4290 mutex_lock(&spec->pcm_mutex); 4291 spec->active_streams &= ~(1 << STREAM_INDEP_HP); 4292 call_pcm_playback_hook(hinfo, codec, substream, 4293 HDA_GEN_PCM_ACT_CLOSE); 4294 mutex_unlock(&spec->pcm_mutex); 4295 return 0; 4296 } 4297 4298 static int alt_playback_pcm_prepare(struct hda_pcm_stream *hinfo, 4299 struct hda_codec *codec, 4300 unsigned int stream_tag, 4301 unsigned int format, 4302 struct snd_pcm_substream *substream) 4303 { 4304 snd_hda_codec_setup_stream(codec, hinfo->nid, stream_tag, 0, format); 4305 call_pcm_playback_hook(hinfo, codec, substream, 4306 HDA_GEN_PCM_ACT_PREPARE); 4307 return 0; 4308 } 4309 4310 static int alt_playback_pcm_cleanup(struct hda_pcm_stream *hinfo, 4311 struct hda_codec *codec, 4312 struct snd_pcm_substream *substream) 4313 { 4314 snd_hda_codec_cleanup_stream(codec, hinfo->nid); 4315 call_pcm_playback_hook(hinfo, codec, substream, 4316 HDA_GEN_PCM_ACT_CLEANUP); 4317 return 0; 4318 } 4319 4320 /* 4321 * Digital out 4322 */ 4323 static int dig_playback_pcm_open(struct hda_pcm_stream *hinfo, 4324 struct hda_codec *codec, 4325 struct snd_pcm_substream *substream) 4326 { 4327 struct hda_gen_spec *spec = codec->spec; 4328 return snd_hda_multi_out_dig_open(codec, &spec->multiout); 4329 } 4330 4331 static int dig_playback_pcm_prepare(struct hda_pcm_stream *hinfo, 4332 struct hda_codec *codec, 4333 unsigned int stream_tag, 4334 unsigned int format, 4335 struct snd_pcm_substream *substream) 4336 { 4337 struct hda_gen_spec *spec = codec->spec; 4338 return snd_hda_multi_out_dig_prepare(codec, &spec->multiout, 4339 stream_tag, format, substream); 4340 } 4341 4342 static int dig_playback_pcm_cleanup(struct hda_pcm_stream *hinfo, 4343 struct hda_codec *codec, 4344 struct snd_pcm_substream *substream) 4345 { 4346 struct hda_gen_spec *spec = codec->spec; 4347 return snd_hda_multi_out_dig_cleanup(codec, &spec->multiout); 4348 } 4349 4350 static int dig_playback_pcm_close(struct hda_pcm_stream *hinfo, 4351 struct hda_codec *codec, 4352 struct snd_pcm_substream *substream) 4353 { 4354 struct hda_gen_spec *spec = codec->spec; 4355 return snd_hda_multi_out_dig_close(codec, &spec->multiout); 4356 } 4357 4358 /* 4359 * Analog capture 4360 */ 4361 #define alt_capture_pcm_open capture_pcm_open 4362 #define alt_capture_pcm_close capture_pcm_close 4363 4364 static int alt_capture_pcm_prepare(struct hda_pcm_stream *hinfo, 4365 struct hda_codec *codec, 4366 unsigned int stream_tag, 4367 unsigned int format, 4368 struct snd_pcm_substream *substream) 4369 { 4370 struct hda_gen_spec *spec = codec->spec; 4371 4372 snd_hda_codec_setup_stream(codec, spec->adc_nids[substream->number + 1], 4373 stream_tag, 0, format); 4374 call_pcm_capture_hook(hinfo, codec, substream, 4375 HDA_GEN_PCM_ACT_PREPARE); 4376 return 0; 4377 } 4378 4379 static int alt_capture_pcm_cleanup(struct hda_pcm_stream *hinfo, 4380 struct hda_codec *codec, 4381 struct snd_pcm_substream *substream) 4382 { 4383 struct hda_gen_spec *spec = codec->spec; 4384 4385 snd_hda_codec_cleanup_stream(codec, 4386 spec->adc_nids[substream->number + 1]); 4387 call_pcm_capture_hook(hinfo, codec, substream, 4388 HDA_GEN_PCM_ACT_CLEANUP); 4389 return 0; 4390 } 4391 4392 /* 4393 */ 4394 static const struct hda_pcm_stream pcm_analog_playback = { 4395 .substreams = 1, 4396 .channels_min = 2, 4397 .channels_max = 8, 4398 /* NID is set in build_pcms */ 4399 .ops = { 4400 .open = playback_pcm_open, 4401 .close = playback_pcm_close, 4402 .prepare = playback_pcm_prepare, 4403 .cleanup = playback_pcm_cleanup 4404 }, 4405 }; 4406 4407 static const struct hda_pcm_stream pcm_analog_capture = { 4408 .substreams = 1, 4409 .channels_min = 2, 4410 .channels_max = 2, 4411 /* NID is set in build_pcms */ 4412 .ops = { 4413 .open = capture_pcm_open, 4414 .close = capture_pcm_close, 4415 .prepare = capture_pcm_prepare, 4416 .cleanup = capture_pcm_cleanup 4417 }, 4418 }; 4419 4420 static const struct hda_pcm_stream pcm_analog_alt_playback = { 4421 .substreams = 1, 4422 .channels_min = 2, 4423 .channels_max = 2, 4424 /* NID is set in build_pcms */ 4425 .ops = { 4426 .open = alt_playback_pcm_open, 4427 .close = alt_playback_pcm_close, 4428 .prepare = alt_playback_pcm_prepare, 4429 .cleanup = alt_playback_pcm_cleanup 4430 }, 4431 }; 4432 4433 static const struct hda_pcm_stream pcm_analog_alt_capture = { 4434 .substreams = 2, /* can be overridden */ 4435 .channels_min = 2, 4436 .channels_max = 2, 4437 /* NID is set in build_pcms */ 4438 .ops = { 4439 .open = alt_capture_pcm_open, 4440 .close = alt_capture_pcm_close, 4441 .prepare = alt_capture_pcm_prepare, 4442 .cleanup = alt_capture_pcm_cleanup 4443 }, 4444 }; 4445 4446 static const struct hda_pcm_stream pcm_digital_playback = { 4447 .substreams = 1, 4448 .channels_min = 2, 4449 .channels_max = 2, 4450 /* NID is set in build_pcms */ 4451 .ops = { 4452 .open = dig_playback_pcm_open, 4453 .close = dig_playback_pcm_close, 4454 .prepare = dig_playback_pcm_prepare, 4455 .cleanup = dig_playback_pcm_cleanup 4456 }, 4457 }; 4458 4459 static const struct hda_pcm_stream pcm_digital_capture = { 4460 .substreams = 1, 4461 .channels_min = 2, 4462 .channels_max = 2, 4463 /* NID is set in build_pcms */ 4464 }; 4465 4466 /* Used by build_pcms to flag that a PCM has no playback stream */ 4467 static const struct hda_pcm_stream pcm_null_stream = { 4468 .substreams = 0, 4469 .channels_min = 0, 4470 .channels_max = 0, 4471 }; 4472 4473 /* 4474 * dynamic changing ADC PCM streams 4475 */ 4476 static bool dyn_adc_pcm_resetup(struct hda_codec *codec, int cur) 4477 { 4478 struct hda_gen_spec *spec = codec->spec; 4479 hda_nid_t new_adc = spec->adc_nids[spec->dyn_adc_idx[cur]]; 4480 4481 if (spec->cur_adc && spec->cur_adc != new_adc) { 4482 /* stream is running, let's swap the current ADC */ 4483 __snd_hda_codec_cleanup_stream(codec, spec->cur_adc, 1); 4484 spec->cur_adc = new_adc; 4485 snd_hda_codec_setup_stream(codec, new_adc, 4486 spec->cur_adc_stream_tag, 0, 4487 spec->cur_adc_format); 4488 return true; 4489 } 4490 return false; 4491 } 4492 4493 /* analog capture with dynamic dual-adc changes */ 4494 static int dyn_adc_capture_pcm_prepare(struct hda_pcm_stream *hinfo, 4495 struct hda_codec *codec, 4496 unsigned int stream_tag, 4497 unsigned int format, 4498 struct snd_pcm_substream *substream) 4499 { 4500 struct hda_gen_spec *spec = codec->spec; 4501 spec->cur_adc = spec->adc_nids[spec->dyn_adc_idx[spec->cur_mux[0]]]; 4502 spec->cur_adc_stream_tag = stream_tag; 4503 spec->cur_adc_format = format; 4504 snd_hda_codec_setup_stream(codec, spec->cur_adc, stream_tag, 0, format); 4505 return 0; 4506 } 4507 4508 static int dyn_adc_capture_pcm_cleanup(struct hda_pcm_stream *hinfo, 4509 struct hda_codec *codec, 4510 struct snd_pcm_substream *substream) 4511 { 4512 struct hda_gen_spec *spec = codec->spec; 4513 snd_hda_codec_cleanup_stream(codec, spec->cur_adc); 4514 spec->cur_adc = 0; 4515 return 0; 4516 } 4517 4518 static const struct hda_pcm_stream dyn_adc_pcm_analog_capture = { 4519 .substreams = 1, 4520 .channels_min = 2, 4521 .channels_max = 2, 4522 .nid = 0, /* fill later */ 4523 .ops = { 4524 .prepare = dyn_adc_capture_pcm_prepare, 4525 .cleanup = dyn_adc_capture_pcm_cleanup 4526 }, 4527 }; 4528 4529 static void fill_pcm_stream_name(char *str, size_t len, const char *sfx, 4530 const char *chip_name) 4531 { 4532 char *p; 4533 4534 if (*str) 4535 return; 4536 strlcpy(str, chip_name, len); 4537 4538 /* drop non-alnum chars after a space */ 4539 for (p = strchr(str, ' '); p; p = strchr(p + 1, ' ')) { 4540 if (!isalnum(p[1])) { 4541 *p = 0; 4542 break; 4543 } 4544 } 4545 strlcat(str, sfx, len); 4546 } 4547 4548 /* build PCM streams based on the parsed results */ 4549 int snd_hda_gen_build_pcms(struct hda_codec *codec) 4550 { 4551 struct hda_gen_spec *spec = codec->spec; 4552 struct hda_pcm *info = spec->pcm_rec; 4553 const struct hda_pcm_stream *p; 4554 bool have_multi_adcs; 4555 4556 codec->num_pcms = 1; 4557 codec->pcm_info = info; 4558 4559 if (spec->no_analog) 4560 goto skip_analog; 4561 4562 fill_pcm_stream_name(spec->stream_name_analog, 4563 sizeof(spec->stream_name_analog), 4564 " Analog", codec->chip_name); 4565 info->name = spec->stream_name_analog; 4566 4567 if (spec->multiout.num_dacs > 0) { 4568 p = spec->stream_analog_playback; 4569 if (!p) 4570 p = &pcm_analog_playback; 4571 info->stream[SNDRV_PCM_STREAM_PLAYBACK] = *p; 4572 info->stream[SNDRV_PCM_STREAM_PLAYBACK].nid = spec->multiout.dac_nids[0]; 4573 info->stream[SNDRV_PCM_STREAM_PLAYBACK].channels_max = 4574 spec->multiout.max_channels; 4575 if (spec->autocfg.line_out_type == AUTO_PIN_SPEAKER_OUT && 4576 spec->autocfg.line_outs == 2) 4577 info->stream[SNDRV_PCM_STREAM_PLAYBACK].chmap = 4578 snd_pcm_2_1_chmaps; 4579 } 4580 if (spec->num_adc_nids) { 4581 p = spec->stream_analog_capture; 4582 if (!p) { 4583 if (spec->dyn_adc_switch) 4584 p = &dyn_adc_pcm_analog_capture; 4585 else 4586 p = &pcm_analog_capture; 4587 } 4588 info->stream[SNDRV_PCM_STREAM_CAPTURE] = *p; 4589 info->stream[SNDRV_PCM_STREAM_CAPTURE].nid = spec->adc_nids[0]; 4590 } 4591 4592 skip_analog: 4593 /* SPDIF for stream index #1 */ 4594 if (spec->multiout.dig_out_nid || spec->dig_in_nid) { 4595 fill_pcm_stream_name(spec->stream_name_digital, 4596 sizeof(spec->stream_name_digital), 4597 " Digital", codec->chip_name); 4598 codec->num_pcms = 2; 4599 codec->slave_dig_outs = spec->multiout.slave_dig_outs; 4600 info = spec->pcm_rec + 1; 4601 info->name = spec->stream_name_digital; 4602 if (spec->dig_out_type) 4603 info->pcm_type = spec->dig_out_type; 4604 else 4605 info->pcm_type = HDA_PCM_TYPE_SPDIF; 4606 if (spec->multiout.dig_out_nid) { 4607 p = spec->stream_digital_playback; 4608 if (!p) 4609 p = &pcm_digital_playback; 4610 info->stream[SNDRV_PCM_STREAM_PLAYBACK] = *p; 4611 info->stream[SNDRV_PCM_STREAM_PLAYBACK].nid = spec->multiout.dig_out_nid; 4612 } 4613 if (spec->dig_in_nid) { 4614 p = spec->stream_digital_capture; 4615 if (!p) 4616 p = &pcm_digital_capture; 4617 info->stream[SNDRV_PCM_STREAM_CAPTURE] = *p; 4618 info->stream[SNDRV_PCM_STREAM_CAPTURE].nid = spec->dig_in_nid; 4619 } 4620 } 4621 4622 if (spec->no_analog) 4623 return 0; 4624 4625 /* If the use of more than one ADC is requested for the current 4626 * model, configure a second analog capture-only PCM. 4627 */ 4628 have_multi_adcs = (spec->num_adc_nids > 1) && 4629 !spec->dyn_adc_switch && !spec->auto_mic; 4630 /* Additional Analaog capture for index #2 */ 4631 if (spec->alt_dac_nid || have_multi_adcs) { 4632 fill_pcm_stream_name(spec->stream_name_alt_analog, 4633 sizeof(spec->stream_name_alt_analog), 4634 " Alt Analog", codec->chip_name); 4635 codec->num_pcms = 3; 4636 info = spec->pcm_rec + 2; 4637 info->name = spec->stream_name_alt_analog; 4638 if (spec->alt_dac_nid) { 4639 p = spec->stream_analog_alt_playback; 4640 if (!p) 4641 p = &pcm_analog_alt_playback; 4642 info->stream[SNDRV_PCM_STREAM_PLAYBACK] = *p; 4643 info->stream[SNDRV_PCM_STREAM_PLAYBACK].nid = 4644 spec->alt_dac_nid; 4645 } else { 4646 info->stream[SNDRV_PCM_STREAM_PLAYBACK] = 4647 pcm_null_stream; 4648 info->stream[SNDRV_PCM_STREAM_PLAYBACK].nid = 0; 4649 } 4650 if (have_multi_adcs) { 4651 p = spec->stream_analog_alt_capture; 4652 if (!p) 4653 p = &pcm_analog_alt_capture; 4654 info->stream[SNDRV_PCM_STREAM_CAPTURE] = *p; 4655 info->stream[SNDRV_PCM_STREAM_CAPTURE].nid = 4656 spec->adc_nids[1]; 4657 info->stream[SNDRV_PCM_STREAM_CAPTURE].substreams = 4658 spec->num_adc_nids - 1; 4659 } else { 4660 info->stream[SNDRV_PCM_STREAM_CAPTURE] = 4661 pcm_null_stream; 4662 info->stream[SNDRV_PCM_STREAM_CAPTURE].nid = 0; 4663 } 4664 } 4665 4666 return 0; 4667 } 4668 EXPORT_SYMBOL_HDA(snd_hda_gen_build_pcms); 4669 4670 4671 /* 4672 * Standard auto-parser initializations 4673 */ 4674 4675 /* configure the given path as a proper output */ 4676 static void set_output_and_unmute(struct hda_codec *codec, int path_idx) 4677 { 4678 struct nid_path *path; 4679 hda_nid_t pin; 4680 4681 path = snd_hda_get_path_from_idx(codec, path_idx); 4682 if (!path || !path->depth) 4683 return; 4684 pin = path->path[path->depth - 1]; 4685 restore_pin_ctl(codec, pin); 4686 snd_hda_activate_path(codec, path, path->active, true); 4687 set_pin_eapd(codec, pin, path->active); 4688 } 4689 4690 /* initialize primary output paths */ 4691 static void init_multi_out(struct hda_codec *codec) 4692 { 4693 struct hda_gen_spec *spec = codec->spec; 4694 int i; 4695 4696 for (i = 0; i < spec->autocfg.line_outs; i++) 4697 set_output_and_unmute(codec, spec->out_paths[i]); 4698 } 4699 4700 4701 static void __init_extra_out(struct hda_codec *codec, int num_outs, int *paths) 4702 { 4703 int i; 4704 4705 for (i = 0; i < num_outs; i++) 4706 set_output_and_unmute(codec, paths[i]); 4707 } 4708 4709 /* initialize hp and speaker paths */ 4710 static void init_extra_out(struct hda_codec *codec) 4711 { 4712 struct hda_gen_spec *spec = codec->spec; 4713 4714 if (spec->autocfg.line_out_type != AUTO_PIN_HP_OUT) 4715 __init_extra_out(codec, spec->autocfg.hp_outs, spec->hp_paths); 4716 if (spec->autocfg.line_out_type != AUTO_PIN_SPEAKER_OUT) 4717 __init_extra_out(codec, spec->autocfg.speaker_outs, 4718 spec->speaker_paths); 4719 } 4720 4721 /* initialize multi-io paths */ 4722 static void init_multi_io(struct hda_codec *codec) 4723 { 4724 struct hda_gen_spec *spec = codec->spec; 4725 int i; 4726 4727 for (i = 0; i < spec->multi_ios; i++) { 4728 hda_nid_t pin = spec->multi_io[i].pin; 4729 struct nid_path *path; 4730 path = get_multiio_path(codec, i); 4731 if (!path) 4732 continue; 4733 if (!spec->multi_io[i].ctl_in) 4734 spec->multi_io[i].ctl_in = 4735 snd_hda_codec_get_pin_target(codec, pin); 4736 snd_hda_activate_path(codec, path, path->active, true); 4737 } 4738 } 4739 4740 /* set up input pins and loopback paths */ 4741 static void init_analog_input(struct hda_codec *codec) 4742 { 4743 struct hda_gen_spec *spec = codec->spec; 4744 struct auto_pin_cfg *cfg = &spec->autocfg; 4745 int i; 4746 4747 for (i = 0; i < cfg->num_inputs; i++) { 4748 hda_nid_t nid = cfg->inputs[i].pin; 4749 if (is_input_pin(codec, nid)) 4750 restore_pin_ctl(codec, nid); 4751 4752 /* init loopback inputs */ 4753 if (spec->mixer_nid) { 4754 resume_path_from_idx(codec, spec->loopback_paths[i]); 4755 resume_path_from_idx(codec, spec->loopback_merge_path); 4756 } 4757 } 4758 } 4759 4760 /* initialize ADC paths */ 4761 static void init_input_src(struct hda_codec *codec) 4762 { 4763 struct hda_gen_spec *spec = codec->spec; 4764 struct hda_input_mux *imux = &spec->input_mux; 4765 struct nid_path *path; 4766 int i, c, nums; 4767 4768 if (spec->dyn_adc_switch) 4769 nums = 1; 4770 else 4771 nums = spec->num_adc_nids; 4772 4773 for (c = 0; c < nums; c++) { 4774 for (i = 0; i < imux->num_items; i++) { 4775 path = get_input_path(codec, c, i); 4776 if (path) { 4777 bool active = path->active; 4778 if (i == spec->cur_mux[c]) 4779 active = true; 4780 snd_hda_activate_path(codec, path, active, false); 4781 } 4782 } 4783 } 4784 4785 if (spec->shared_mic_hp) 4786 update_shared_mic_hp(codec, spec->cur_mux[0]); 4787 4788 if (spec->cap_sync_hook) 4789 spec->cap_sync_hook(codec, NULL); 4790 } 4791 4792 /* set right pin controls for digital I/O */ 4793 static void init_digital(struct hda_codec *codec) 4794 { 4795 struct hda_gen_spec *spec = codec->spec; 4796 int i; 4797 hda_nid_t pin; 4798 4799 for (i = 0; i < spec->autocfg.dig_outs; i++) 4800 set_output_and_unmute(codec, spec->digout_paths[i]); 4801 pin = spec->autocfg.dig_in_pin; 4802 if (pin) { 4803 restore_pin_ctl(codec, pin); 4804 resume_path_from_idx(codec, spec->digin_path); 4805 } 4806 } 4807 4808 /* clear unsol-event tags on unused pins; Conexant codecs seem to leave 4809 * invalid unsol tags by some reason 4810 */ 4811 static void clear_unsol_on_unused_pins(struct hda_codec *codec) 4812 { 4813 int i; 4814 4815 for (i = 0; i < codec->init_pins.used; i++) { 4816 struct hda_pincfg *pin = snd_array_elem(&codec->init_pins, i); 4817 hda_nid_t nid = pin->nid; 4818 if (is_jack_detectable(codec, nid) && 4819 !snd_hda_jack_tbl_get(codec, nid)) 4820 snd_hda_codec_update_cache(codec, nid, 0, 4821 AC_VERB_SET_UNSOLICITED_ENABLE, 0); 4822 } 4823 } 4824 4825 /* 4826 * initialize the generic spec; 4827 * this can be put as patch_ops.init function 4828 */ 4829 int snd_hda_gen_init(struct hda_codec *codec) 4830 { 4831 struct hda_gen_spec *spec = codec->spec; 4832 4833 if (spec->init_hook) 4834 spec->init_hook(codec); 4835 4836 snd_hda_apply_verbs(codec); 4837 4838 codec->cached_write = 1; 4839 4840 init_multi_out(codec); 4841 init_extra_out(codec); 4842 init_multi_io(codec); 4843 init_analog_input(codec); 4844 init_input_src(codec); 4845 init_digital(codec); 4846 4847 clear_unsol_on_unused_pins(codec); 4848 4849 /* call init functions of standard auto-mute helpers */ 4850 update_automute_all(codec); 4851 4852 snd_hda_codec_flush_cache(codec); 4853 4854 if (spec->vmaster_mute.sw_kctl && spec->vmaster_mute.hook) 4855 snd_hda_sync_vmaster_hook(&spec->vmaster_mute); 4856 4857 hda_call_check_power_status(codec, 0x01); 4858 return 0; 4859 } 4860 EXPORT_SYMBOL_HDA(snd_hda_gen_init); 4861 4862 /* 4863 * free the generic spec; 4864 * this can be put as patch_ops.free function 4865 */ 4866 void snd_hda_gen_free(struct hda_codec *codec) 4867 { 4868 snd_hda_gen_spec_free(codec->spec); 4869 kfree(codec->spec); 4870 codec->spec = NULL; 4871 } 4872 EXPORT_SYMBOL_HDA(snd_hda_gen_free); 4873 4874 #ifdef CONFIG_PM 4875 /* 4876 * check the loopback power save state; 4877 * this can be put as patch_ops.check_power_status function 4878 */ 4879 int snd_hda_gen_check_power_status(struct hda_codec *codec, hda_nid_t nid) 4880 { 4881 struct hda_gen_spec *spec = codec->spec; 4882 return snd_hda_check_amp_list_power(codec, &spec->loopback, nid); 4883 } 4884 EXPORT_SYMBOL_HDA(snd_hda_gen_check_power_status); 4885 #endif 4886 4887 4888 /* 4889 * the generic codec support 4890 */ 4891 4892 static const struct hda_codec_ops generic_patch_ops = { 4893 .build_controls = snd_hda_gen_build_controls, 4894 .build_pcms = snd_hda_gen_build_pcms, 4895 .init = snd_hda_gen_init, 4896 .free = snd_hda_gen_free, 4897 .unsol_event = snd_hda_jack_unsol_event, 4898 #ifdef CONFIG_PM 4899 .check_power_status = snd_hda_gen_check_power_status, 4900 #endif 4901 }; 4902 4903 int snd_hda_parse_generic_codec(struct hda_codec *codec) 4904 { 4905 struct hda_gen_spec *spec; 4906 int err; 4907 4908 spec = kzalloc(sizeof(*spec), GFP_KERNEL); 4909 if (!spec) 4910 return -ENOMEM; 4911 snd_hda_gen_spec_init(spec); 4912 codec->spec = spec; 4913 4914 err = snd_hda_parse_pin_defcfg(codec, &spec->autocfg, NULL, 0); 4915 if (err < 0) 4916 return err; 4917 4918 err = snd_hda_gen_parse_auto_config(codec, &spec->autocfg); 4919 if (err < 0) 4920 goto error; 4921 4922 codec->patch_ops = generic_patch_ops; 4923 return 0; 4924 4925 error: 4926 snd_hda_gen_free(codec); 4927 return err; 4928 } 4929 EXPORT_SYMBOL_HDA(snd_hda_parse_generic_codec); 4930