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