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