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