cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

hda_generic.c (166812B)


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