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