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