Linux Audio

Check our new training course

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