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