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