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_codec.c (112292B)


      1// SPDX-License-Identifier: GPL-2.0-or-later
      2/*
      3 * Universal Interface for Intel High Definition Audio Codec
      4 *
      5 * Copyright (c) 2004 Takashi Iwai <tiwai@suse.de>
      6 */
      7
      8#include <linux/init.h>
      9#include <linux/delay.h>
     10#include <linux/slab.h>
     11#include <linux/mutex.h>
     12#include <linux/module.h>
     13#include <linux/pm.h>
     14#include <linux/pm_runtime.h>
     15#include <sound/core.h>
     16#include <sound/hda_codec.h>
     17#include <sound/asoundef.h>
     18#include <sound/tlv.h>
     19#include <sound/initval.h>
     20#include <sound/jack.h>
     21#include "hda_local.h"
     22#include "hda_beep.h"
     23#include "hda_jack.h"
     24#include <sound/hda_hwdep.h>
     25#include <sound/hda_component.h>
     26
     27#define codec_in_pm(codec)		snd_hdac_is_in_pm(&codec->core)
     28#define hda_codec_is_power_on(codec)	snd_hdac_is_power_on(&codec->core)
     29#define codec_has_epss(codec) \
     30	((codec)->core.power_caps & AC_PWRST_EPSS)
     31#define codec_has_clkstop(codec) \
     32	((codec)->core.power_caps & AC_PWRST_CLKSTOP)
     33
     34/*
     35 * Send and receive a verb - passed to exec_verb override for hdac_device
     36 */
     37static int codec_exec_verb(struct hdac_device *dev, unsigned int cmd,
     38			   unsigned int flags, unsigned int *res)
     39{
     40	struct hda_codec *codec = container_of(dev, struct hda_codec, core);
     41	struct hda_bus *bus = codec->bus;
     42	int err;
     43
     44	if (cmd == ~0)
     45		return -1;
     46
     47 again:
     48	snd_hda_power_up_pm(codec);
     49	mutex_lock(&bus->core.cmd_mutex);
     50	if (flags & HDA_RW_NO_RESPONSE_FALLBACK)
     51		bus->no_response_fallback = 1;
     52	err = snd_hdac_bus_exec_verb_unlocked(&bus->core, codec->core.addr,
     53					      cmd, res);
     54	bus->no_response_fallback = 0;
     55	mutex_unlock(&bus->core.cmd_mutex);
     56	snd_hda_power_down_pm(codec);
     57	if (!codec_in_pm(codec) && res && err == -EAGAIN) {
     58		if (bus->response_reset) {
     59			codec_dbg(codec,
     60				  "resetting BUS due to fatal communication error\n");
     61			snd_hda_bus_reset(bus);
     62		}
     63		goto again;
     64	}
     65	/* clear reset-flag when the communication gets recovered */
     66	if (!err || codec_in_pm(codec))
     67		bus->response_reset = 0;
     68	return err;
     69}
     70
     71/**
     72 * snd_hda_sequence_write - sequence writes
     73 * @codec: the HDA codec
     74 * @seq: VERB array to send
     75 *
     76 * Send the commands sequentially from the given array.
     77 * The array must be terminated with NID=0.
     78 */
     79void snd_hda_sequence_write(struct hda_codec *codec, const struct hda_verb *seq)
     80{
     81	for (; seq->nid; seq++)
     82		snd_hda_codec_write(codec, seq->nid, 0, seq->verb, seq->param);
     83}
     84EXPORT_SYMBOL_GPL(snd_hda_sequence_write);
     85
     86/* connection list element */
     87struct hda_conn_list {
     88	struct list_head list;
     89	int len;
     90	hda_nid_t nid;
     91	hda_nid_t conns[];
     92};
     93
     94/* look up the cached results */
     95static struct hda_conn_list *
     96lookup_conn_list(struct hda_codec *codec, hda_nid_t nid)
     97{
     98	struct hda_conn_list *p;
     99	list_for_each_entry(p, &codec->conn_list, list) {
    100		if (p->nid == nid)
    101			return p;
    102	}
    103	return NULL;
    104}
    105
    106static int add_conn_list(struct hda_codec *codec, hda_nid_t nid, int len,
    107			 const hda_nid_t *list)
    108{
    109	struct hda_conn_list *p;
    110
    111	p = kmalloc(struct_size(p, conns, len), GFP_KERNEL);
    112	if (!p)
    113		return -ENOMEM;
    114	p->len = len;
    115	p->nid = nid;
    116	memcpy(p->conns, list, len * sizeof(hda_nid_t));
    117	list_add(&p->list, &codec->conn_list);
    118	return 0;
    119}
    120
    121static void remove_conn_list(struct hda_codec *codec)
    122{
    123	while (!list_empty(&codec->conn_list)) {
    124		struct hda_conn_list *p;
    125		p = list_first_entry(&codec->conn_list, typeof(*p), list);
    126		list_del(&p->list);
    127		kfree(p);
    128	}
    129}
    130
    131/* read the connection and add to the cache */
    132static int read_and_add_raw_conns(struct hda_codec *codec, hda_nid_t nid)
    133{
    134	hda_nid_t list[32];
    135	hda_nid_t *result = list;
    136	int len;
    137
    138	len = snd_hda_get_raw_connections(codec, nid, list, ARRAY_SIZE(list));
    139	if (len == -ENOSPC) {
    140		len = snd_hda_get_num_raw_conns(codec, nid);
    141		result = kmalloc_array(len, sizeof(hda_nid_t), GFP_KERNEL);
    142		if (!result)
    143			return -ENOMEM;
    144		len = snd_hda_get_raw_connections(codec, nid, result, len);
    145	}
    146	if (len >= 0)
    147		len = snd_hda_override_conn_list(codec, nid, len, result);
    148	if (result != list)
    149		kfree(result);
    150	return len;
    151}
    152
    153/**
    154 * snd_hda_get_conn_list - get connection list
    155 * @codec: the HDA codec
    156 * @nid: NID to parse
    157 * @listp: the pointer to store NID list
    158 *
    159 * Parses the connection list of the given widget and stores the pointer
    160 * to the list of NIDs.
    161 *
    162 * Returns the number of connections, or a negative error code.
    163 *
    164 * Note that the returned pointer isn't protected against the list
    165 * modification.  If snd_hda_override_conn_list() might be called
    166 * concurrently, protect with a mutex appropriately.
    167 */
    168int snd_hda_get_conn_list(struct hda_codec *codec, hda_nid_t nid,
    169			  const hda_nid_t **listp)
    170{
    171	bool added = false;
    172
    173	for (;;) {
    174		int err;
    175		const struct hda_conn_list *p;
    176
    177		/* if the connection-list is already cached, read it */
    178		p = lookup_conn_list(codec, nid);
    179		if (p) {
    180			if (listp)
    181				*listp = p->conns;
    182			return p->len;
    183		}
    184		if (snd_BUG_ON(added))
    185			return -EINVAL;
    186
    187		err = read_and_add_raw_conns(codec, nid);
    188		if (err < 0)
    189			return err;
    190		added = true;
    191	}
    192}
    193EXPORT_SYMBOL_GPL(snd_hda_get_conn_list);
    194
    195/**
    196 * snd_hda_get_connections - copy connection list
    197 * @codec: the HDA codec
    198 * @nid: NID to parse
    199 * @conn_list: connection list array; when NULL, checks only the size
    200 * @max_conns: max. number of connections to store
    201 *
    202 * Parses the connection list of the given widget and stores the list
    203 * of NIDs.
    204 *
    205 * Returns the number of connections, or a negative error code.
    206 */
    207int snd_hda_get_connections(struct hda_codec *codec, hda_nid_t nid,
    208			    hda_nid_t *conn_list, int max_conns)
    209{
    210	const hda_nid_t *list;
    211	int len = snd_hda_get_conn_list(codec, nid, &list);
    212
    213	if (len > 0 && conn_list) {
    214		if (len > max_conns) {
    215			codec_err(codec, "Too many connections %d for NID 0x%x\n",
    216				   len, nid);
    217			return -EINVAL;
    218		}
    219		memcpy(conn_list, list, len * sizeof(hda_nid_t));
    220	}
    221
    222	return len;
    223}
    224EXPORT_SYMBOL_GPL(snd_hda_get_connections);
    225
    226/**
    227 * snd_hda_override_conn_list - add/modify the connection-list to cache
    228 * @codec: the HDA codec
    229 * @nid: NID to parse
    230 * @len: number of connection list entries
    231 * @list: the list of connection entries
    232 *
    233 * Add or modify the given connection-list to the cache.  If the corresponding
    234 * cache already exists, invalidate it and append a new one.
    235 *
    236 * Returns zero or a negative error code.
    237 */
    238int snd_hda_override_conn_list(struct hda_codec *codec, hda_nid_t nid, int len,
    239			       const hda_nid_t *list)
    240{
    241	struct hda_conn_list *p;
    242
    243	p = lookup_conn_list(codec, nid);
    244	if (p) {
    245		list_del(&p->list);
    246		kfree(p);
    247	}
    248
    249	return add_conn_list(codec, nid, len, list);
    250}
    251EXPORT_SYMBOL_GPL(snd_hda_override_conn_list);
    252
    253/**
    254 * snd_hda_get_conn_index - get the connection index of the given NID
    255 * @codec: the HDA codec
    256 * @mux: NID containing the list
    257 * @nid: NID to select
    258 * @recursive: 1 when searching NID recursively, otherwise 0
    259 *
    260 * Parses the connection list of the widget @mux and checks whether the
    261 * widget @nid is present.  If it is, return the connection index.
    262 * Otherwise it returns -1.
    263 */
    264int snd_hda_get_conn_index(struct hda_codec *codec, hda_nid_t mux,
    265			   hda_nid_t nid, int recursive)
    266{
    267	const hda_nid_t *conn;
    268	int i, nums;
    269
    270	nums = snd_hda_get_conn_list(codec, mux, &conn);
    271	for (i = 0; i < nums; i++)
    272		if (conn[i] == nid)
    273			return i;
    274	if (!recursive)
    275		return -1;
    276	if (recursive > 10) {
    277		codec_dbg(codec, "too deep connection for 0x%x\n", nid);
    278		return -1;
    279	}
    280	recursive++;
    281	for (i = 0; i < nums; i++) {
    282		unsigned int type = get_wcaps_type(get_wcaps(codec, conn[i]));
    283		if (type == AC_WID_PIN || type == AC_WID_AUD_OUT)
    284			continue;
    285		if (snd_hda_get_conn_index(codec, conn[i], nid, recursive) >= 0)
    286			return i;
    287	}
    288	return -1;
    289}
    290EXPORT_SYMBOL_GPL(snd_hda_get_conn_index);
    291
    292/**
    293 * snd_hda_get_num_devices - get DEVLIST_LEN parameter of the given widget
    294 *  @codec: the HDA codec
    295 *  @nid: NID of the pin to parse
    296 *
    297 * Get the device entry number on the given widget. This is a feature of
    298 * DP MST audio. Each pin can have several device entries in it.
    299 */
    300unsigned int snd_hda_get_num_devices(struct hda_codec *codec, hda_nid_t nid)
    301{
    302	unsigned int wcaps = get_wcaps(codec, nid);
    303	unsigned int parm;
    304
    305	if (!codec->dp_mst || !(wcaps & AC_WCAP_DIGITAL) ||
    306	    get_wcaps_type(wcaps) != AC_WID_PIN)
    307		return 0;
    308
    309	parm = snd_hdac_read_parm_uncached(&codec->core, nid, AC_PAR_DEVLIST_LEN);
    310	if (parm == -1)
    311		parm = 0;
    312	return parm & AC_DEV_LIST_LEN_MASK;
    313}
    314EXPORT_SYMBOL_GPL(snd_hda_get_num_devices);
    315
    316/**
    317 * snd_hda_get_devices - copy device list without cache
    318 * @codec: the HDA codec
    319 * @nid: NID of the pin to parse
    320 * @dev_list: device list array
    321 * @max_devices: max. number of devices to store
    322 *
    323 * Copy the device list. This info is dynamic and so not cached.
    324 * Currently called only from hda_proc.c, so not exported.
    325 */
    326int snd_hda_get_devices(struct hda_codec *codec, hda_nid_t nid,
    327			u8 *dev_list, int max_devices)
    328{
    329	unsigned int parm;
    330	int i, dev_len, devices;
    331
    332	parm = snd_hda_get_num_devices(codec, nid);
    333	if (!parm)	/* not multi-stream capable */
    334		return 0;
    335
    336	dev_len = parm + 1;
    337	dev_len = dev_len < max_devices ? dev_len : max_devices;
    338
    339	devices = 0;
    340	while (devices < dev_len) {
    341		if (snd_hdac_read(&codec->core, nid,
    342				  AC_VERB_GET_DEVICE_LIST, devices, &parm))
    343			break; /* error */
    344
    345		for (i = 0; i < 8; i++) {
    346			dev_list[devices] = (u8)parm;
    347			parm >>= 4;
    348			devices++;
    349			if (devices >= dev_len)
    350				break;
    351		}
    352	}
    353	return devices;
    354}
    355
    356/**
    357 * snd_hda_get_dev_select - get device entry select on the pin
    358 * @codec: the HDA codec
    359 * @nid: NID of the pin to get device entry select
    360 *
    361 * Get the devcie entry select on the pin. Return the device entry
    362 * id selected on the pin. Return 0 means the first device entry
    363 * is selected or MST is not supported.
    364 */
    365int snd_hda_get_dev_select(struct hda_codec *codec, hda_nid_t nid)
    366{
    367	/* not support dp_mst will always return 0, using first dev_entry */
    368	if (!codec->dp_mst)
    369		return 0;
    370
    371	return snd_hda_codec_read(codec, nid, 0, AC_VERB_GET_DEVICE_SEL, 0);
    372}
    373EXPORT_SYMBOL_GPL(snd_hda_get_dev_select);
    374
    375/**
    376 * snd_hda_set_dev_select - set device entry select on the pin
    377 * @codec: the HDA codec
    378 * @nid: NID of the pin to set device entry select
    379 * @dev_id: device entry id to be set
    380 *
    381 * Set the device entry select on the pin nid.
    382 */
    383int snd_hda_set_dev_select(struct hda_codec *codec, hda_nid_t nid, int dev_id)
    384{
    385	int ret, num_devices;
    386
    387	/* not support dp_mst will always return 0, using first dev_entry */
    388	if (!codec->dp_mst)
    389		return 0;
    390
    391	/* AC_PAR_DEVLIST_LEN is 0 based. */
    392	num_devices = snd_hda_get_num_devices(codec, nid) + 1;
    393	/* If Device List Length is 0 (num_device = 1),
    394	 * the pin is not multi stream capable.
    395	 * Do nothing in this case.
    396	 */
    397	if (num_devices == 1)
    398		return 0;
    399
    400	/* Behavior of setting index being equal to or greater than
    401	 * Device List Length is not predictable
    402	 */
    403	if (num_devices <= dev_id)
    404		return -EINVAL;
    405
    406	ret = snd_hda_codec_write(codec, nid, 0,
    407			AC_VERB_SET_DEVICE_SEL, dev_id);
    408
    409	return ret;
    410}
    411EXPORT_SYMBOL_GPL(snd_hda_set_dev_select);
    412
    413/*
    414 * read widget caps for each widget and store in cache
    415 */
    416static int read_widget_caps(struct hda_codec *codec, hda_nid_t fg_node)
    417{
    418	int i;
    419	hda_nid_t nid;
    420
    421	codec->wcaps = kmalloc_array(codec->core.num_nodes, 4, GFP_KERNEL);
    422	if (!codec->wcaps)
    423		return -ENOMEM;
    424	nid = codec->core.start_nid;
    425	for (i = 0; i < codec->core.num_nodes; i++, nid++)
    426		codec->wcaps[i] = snd_hdac_read_parm_uncached(&codec->core,
    427					nid, AC_PAR_AUDIO_WIDGET_CAP);
    428	return 0;
    429}
    430
    431/* read all pin default configurations and save codec->init_pins */
    432static int read_pin_defaults(struct hda_codec *codec)
    433{
    434	hda_nid_t nid;
    435
    436	for_each_hda_codec_node(nid, codec) {
    437		struct hda_pincfg *pin;
    438		unsigned int wcaps = get_wcaps(codec, nid);
    439		unsigned int wid_type = get_wcaps_type(wcaps);
    440		if (wid_type != AC_WID_PIN)
    441			continue;
    442		pin = snd_array_new(&codec->init_pins);
    443		if (!pin)
    444			return -ENOMEM;
    445		pin->nid = nid;
    446		pin->cfg = snd_hda_codec_read(codec, nid, 0,
    447					      AC_VERB_GET_CONFIG_DEFAULT, 0);
    448		/*
    449		 * all device entries are the same widget control so far
    450		 * fixme: if any codec is different, need fix here
    451		 */
    452		pin->ctrl = snd_hda_codec_read(codec, nid, 0,
    453					       AC_VERB_GET_PIN_WIDGET_CONTROL,
    454					       0);
    455	}
    456	return 0;
    457}
    458
    459/* look up the given pin config list and return the item matching with NID */
    460static struct hda_pincfg *look_up_pincfg(struct hda_codec *codec,
    461					 struct snd_array *array,
    462					 hda_nid_t nid)
    463{
    464	struct hda_pincfg *pin;
    465	int i;
    466
    467	snd_array_for_each(array, i, pin) {
    468		if (pin->nid == nid)
    469			return pin;
    470	}
    471	return NULL;
    472}
    473
    474/* set the current pin config value for the given NID.
    475 * the value is cached, and read via snd_hda_codec_get_pincfg()
    476 */
    477int snd_hda_add_pincfg(struct hda_codec *codec, struct snd_array *list,
    478		       hda_nid_t nid, unsigned int cfg)
    479{
    480	struct hda_pincfg *pin;
    481
    482	/* the check below may be invalid when pins are added by a fixup
    483	 * dynamically (e.g. via snd_hda_codec_update_widgets()), so disabled
    484	 * for now
    485	 */
    486	/*
    487	if (get_wcaps_type(get_wcaps(codec, nid)) != AC_WID_PIN)
    488		return -EINVAL;
    489	*/
    490
    491	pin = look_up_pincfg(codec, list, nid);
    492	if (!pin) {
    493		pin = snd_array_new(list);
    494		if (!pin)
    495			return -ENOMEM;
    496		pin->nid = nid;
    497	}
    498	pin->cfg = cfg;
    499	return 0;
    500}
    501
    502/**
    503 * snd_hda_codec_set_pincfg - Override a pin default configuration
    504 * @codec: the HDA codec
    505 * @nid: NID to set the pin config
    506 * @cfg: the pin default config value
    507 *
    508 * Override a pin default configuration value in the cache.
    509 * This value can be read by snd_hda_codec_get_pincfg() in a higher
    510 * priority than the real hardware value.
    511 */
    512int snd_hda_codec_set_pincfg(struct hda_codec *codec,
    513			     hda_nid_t nid, unsigned int cfg)
    514{
    515	return snd_hda_add_pincfg(codec, &codec->driver_pins, nid, cfg);
    516}
    517EXPORT_SYMBOL_GPL(snd_hda_codec_set_pincfg);
    518
    519/**
    520 * snd_hda_codec_get_pincfg - Obtain a pin-default configuration
    521 * @codec: the HDA codec
    522 * @nid: NID to get the pin config
    523 *
    524 * Get the current pin config value of the given pin NID.
    525 * If the pincfg value is cached or overridden via sysfs or driver,
    526 * returns the cached value.
    527 */
    528unsigned int snd_hda_codec_get_pincfg(struct hda_codec *codec, hda_nid_t nid)
    529{
    530	struct hda_pincfg *pin;
    531
    532#ifdef CONFIG_SND_HDA_RECONFIG
    533	{
    534		unsigned int cfg = 0;
    535		mutex_lock(&codec->user_mutex);
    536		pin = look_up_pincfg(codec, &codec->user_pins, nid);
    537		if (pin)
    538			cfg = pin->cfg;
    539		mutex_unlock(&codec->user_mutex);
    540		if (cfg)
    541			return cfg;
    542	}
    543#endif
    544	pin = look_up_pincfg(codec, &codec->driver_pins, nid);
    545	if (pin)
    546		return pin->cfg;
    547	pin = look_up_pincfg(codec, &codec->init_pins, nid);
    548	if (pin)
    549		return pin->cfg;
    550	return 0;
    551}
    552EXPORT_SYMBOL_GPL(snd_hda_codec_get_pincfg);
    553
    554/**
    555 * snd_hda_codec_set_pin_target - remember the current pinctl target value
    556 * @codec: the HDA codec
    557 * @nid: pin NID
    558 * @val: assigned pinctl value
    559 *
    560 * This function stores the given value to a pinctl target value in the
    561 * pincfg table.  This isn't always as same as the actually written value
    562 * but can be referred at any time via snd_hda_codec_get_pin_target().
    563 */
    564int snd_hda_codec_set_pin_target(struct hda_codec *codec, hda_nid_t nid,
    565				 unsigned int val)
    566{
    567	struct hda_pincfg *pin;
    568
    569	pin = look_up_pincfg(codec, &codec->init_pins, nid);
    570	if (!pin)
    571		return -EINVAL;
    572	pin->target = val;
    573	return 0;
    574}
    575EXPORT_SYMBOL_GPL(snd_hda_codec_set_pin_target);
    576
    577/**
    578 * snd_hda_codec_get_pin_target - return the current pinctl target value
    579 * @codec: the HDA codec
    580 * @nid: pin NID
    581 */
    582int snd_hda_codec_get_pin_target(struct hda_codec *codec, hda_nid_t nid)
    583{
    584	struct hda_pincfg *pin;
    585
    586	pin = look_up_pincfg(codec, &codec->init_pins, nid);
    587	if (!pin)
    588		return 0;
    589	return pin->target;
    590}
    591EXPORT_SYMBOL_GPL(snd_hda_codec_get_pin_target);
    592
    593/**
    594 * snd_hda_shutup_pins - Shut up all pins
    595 * @codec: the HDA codec
    596 *
    597 * Clear all pin controls to shup up before suspend for avoiding click noise.
    598 * The controls aren't cached so that they can be resumed properly.
    599 */
    600void snd_hda_shutup_pins(struct hda_codec *codec)
    601{
    602	const struct hda_pincfg *pin;
    603	int i;
    604
    605	/* don't shut up pins when unloading the driver; otherwise it breaks
    606	 * the default pin setup at the next load of the driver
    607	 */
    608	if (codec->bus->shutdown)
    609		return;
    610	snd_array_for_each(&codec->init_pins, i, pin) {
    611		/* use read here for syncing after issuing each verb */
    612		snd_hda_codec_read(codec, pin->nid, 0,
    613				   AC_VERB_SET_PIN_WIDGET_CONTROL, 0);
    614	}
    615	codec->pins_shutup = 1;
    616}
    617EXPORT_SYMBOL_GPL(snd_hda_shutup_pins);
    618
    619#ifdef CONFIG_PM
    620/* Restore the pin controls cleared previously via snd_hda_shutup_pins() */
    621static void restore_shutup_pins(struct hda_codec *codec)
    622{
    623	const struct hda_pincfg *pin;
    624	int i;
    625
    626	if (!codec->pins_shutup)
    627		return;
    628	if (codec->bus->shutdown)
    629		return;
    630	snd_array_for_each(&codec->init_pins, i, pin) {
    631		snd_hda_codec_write(codec, pin->nid, 0,
    632				    AC_VERB_SET_PIN_WIDGET_CONTROL,
    633				    pin->ctrl);
    634	}
    635	codec->pins_shutup = 0;
    636}
    637#endif
    638
    639static void hda_jackpoll_work(struct work_struct *work)
    640{
    641	struct hda_codec *codec =
    642		container_of(work, struct hda_codec, jackpoll_work.work);
    643
    644	/* for non-polling trigger: we need nothing if already powered on */
    645	if (!codec->jackpoll_interval && snd_hdac_is_power_on(&codec->core))
    646		return;
    647
    648	/* the power-up/down sequence triggers the runtime resume */
    649	snd_hda_power_up_pm(codec);
    650	/* update jacks manually if polling is required, too */
    651	if (codec->jackpoll_interval) {
    652		snd_hda_jack_set_dirty_all(codec);
    653		snd_hda_jack_poll_all(codec);
    654	}
    655	snd_hda_power_down_pm(codec);
    656
    657	if (!codec->jackpoll_interval)
    658		return;
    659
    660	schedule_delayed_work(&codec->jackpoll_work,
    661			      codec->jackpoll_interval);
    662}
    663
    664/* release all pincfg lists */
    665static void free_init_pincfgs(struct hda_codec *codec)
    666{
    667	snd_array_free(&codec->driver_pins);
    668#ifdef CONFIG_SND_HDA_RECONFIG
    669	snd_array_free(&codec->user_pins);
    670#endif
    671	snd_array_free(&codec->init_pins);
    672}
    673
    674/*
    675 * audio-converter setup caches
    676 */
    677struct hda_cvt_setup {
    678	hda_nid_t nid;
    679	u8 stream_tag;
    680	u8 channel_id;
    681	u16 format_id;
    682	unsigned char active;	/* cvt is currently used */
    683	unsigned char dirty;	/* setups should be cleared */
    684};
    685
    686/* get or create a cache entry for the given audio converter NID */
    687static struct hda_cvt_setup *
    688get_hda_cvt_setup(struct hda_codec *codec, hda_nid_t nid)
    689{
    690	struct hda_cvt_setup *p;
    691	int i;
    692
    693	snd_array_for_each(&codec->cvt_setups, i, p) {
    694		if (p->nid == nid)
    695			return p;
    696	}
    697	p = snd_array_new(&codec->cvt_setups);
    698	if (p)
    699		p->nid = nid;
    700	return p;
    701}
    702
    703/*
    704 * PCM device
    705 */
    706void snd_hda_codec_pcm_put(struct hda_pcm *pcm)
    707{
    708	if (refcount_dec_and_test(&pcm->codec->pcm_ref))
    709		wake_up(&pcm->codec->remove_sleep);
    710}
    711EXPORT_SYMBOL_GPL(snd_hda_codec_pcm_put);
    712
    713struct hda_pcm *snd_hda_codec_pcm_new(struct hda_codec *codec,
    714				      const char *fmt, ...)
    715{
    716	struct hda_pcm *pcm;
    717	va_list args;
    718
    719	pcm = kzalloc(sizeof(*pcm), GFP_KERNEL);
    720	if (!pcm)
    721		return NULL;
    722
    723	pcm->codec = codec;
    724	va_start(args, fmt);
    725	pcm->name = kvasprintf(GFP_KERNEL, fmt, args);
    726	va_end(args);
    727	if (!pcm->name) {
    728		kfree(pcm);
    729		return NULL;
    730	}
    731
    732	list_add_tail(&pcm->list, &codec->pcm_list_head);
    733	refcount_inc(&codec->pcm_ref);
    734	return pcm;
    735}
    736EXPORT_SYMBOL_GPL(snd_hda_codec_pcm_new);
    737
    738/*
    739 * codec destructor
    740 */
    741void snd_hda_codec_disconnect_pcms(struct hda_codec *codec)
    742{
    743	struct hda_pcm *pcm;
    744
    745	list_for_each_entry(pcm, &codec->pcm_list_head, list) {
    746		if (pcm->disconnected)
    747			continue;
    748		if (pcm->pcm)
    749			snd_device_disconnect(codec->card, pcm->pcm);
    750		snd_hda_codec_pcm_put(pcm);
    751		pcm->disconnected = 1;
    752	}
    753}
    754
    755static void codec_release_pcms(struct hda_codec *codec)
    756{
    757	struct hda_pcm *pcm, *n;
    758
    759	list_for_each_entry_safe(pcm, n, &codec->pcm_list_head, list) {
    760		list_del(&pcm->list);
    761		if (pcm->pcm)
    762			snd_device_free(pcm->codec->card, pcm->pcm);
    763		clear_bit(pcm->device, pcm->codec->bus->pcm_dev_bits);
    764		kfree(pcm->name);
    765		kfree(pcm);
    766	}
    767}
    768
    769/**
    770 * snd_hda_codec_cleanup_for_unbind - Prepare codec for removal
    771 * @codec: codec device to cleanup
    772 */
    773void snd_hda_codec_cleanup_for_unbind(struct hda_codec *codec)
    774{
    775	if (codec->registered) {
    776		/* pm_runtime_put() is called in snd_hdac_device_exit() */
    777		pm_runtime_get_noresume(hda_codec_dev(codec));
    778		pm_runtime_disable(hda_codec_dev(codec));
    779		codec->registered = 0;
    780	}
    781
    782	snd_hda_codec_disconnect_pcms(codec);
    783	cancel_delayed_work_sync(&codec->jackpoll_work);
    784	if (!codec->in_freeing)
    785		snd_hda_ctls_clear(codec);
    786	codec_release_pcms(codec);
    787	snd_hda_detach_beep_device(codec);
    788	memset(&codec->patch_ops, 0, sizeof(codec->patch_ops));
    789	snd_hda_jack_tbl_clear(codec);
    790	codec->proc_widget_hook = NULL;
    791	codec->spec = NULL;
    792
    793	/* free only driver_pins so that init_pins + user_pins are restored */
    794	snd_array_free(&codec->driver_pins);
    795	snd_array_free(&codec->cvt_setups);
    796	snd_array_free(&codec->spdif_out);
    797	snd_array_free(&codec->verbs);
    798	codec->preset = NULL;
    799	codec->follower_dig_outs = NULL;
    800	codec->spdif_status_reset = 0;
    801	snd_array_free(&codec->mixers);
    802	snd_array_free(&codec->nids);
    803	remove_conn_list(codec);
    804	snd_hdac_regmap_exit(&codec->core);
    805	codec->configured = 0;
    806	refcount_set(&codec->pcm_ref, 1); /* reset refcount */
    807}
    808EXPORT_SYMBOL_GPL(snd_hda_codec_cleanup_for_unbind);
    809
    810static unsigned int hda_set_power_state(struct hda_codec *codec,
    811				unsigned int power_state);
    812
    813/* enable/disable display power per codec */
    814void snd_hda_codec_display_power(struct hda_codec *codec, bool enable)
    815{
    816	if (codec->display_power_control)
    817		snd_hdac_display_power(&codec->bus->core, codec->addr, enable);
    818}
    819
    820/**
    821 * snd_hda_codec_register - Finalize codec initialization
    822 * @codec: codec device to register
    823 *
    824 * Also called from hda_bind.c
    825 */
    826void snd_hda_codec_register(struct hda_codec *codec)
    827{
    828	if (codec->registered)
    829		return;
    830	if (device_is_registered(hda_codec_dev(codec))) {
    831		snd_hda_codec_display_power(codec, true);
    832		pm_runtime_enable(hda_codec_dev(codec));
    833		/* it was powered up in snd_hda_codec_new(), now all done */
    834		snd_hda_power_down(codec);
    835		codec->registered = 1;
    836	}
    837}
    838EXPORT_SYMBOL_GPL(snd_hda_codec_register);
    839
    840static int snd_hda_codec_dev_register(struct snd_device *device)
    841{
    842	snd_hda_codec_register(device->device_data);
    843	return 0;
    844}
    845
    846/**
    847 * snd_hda_codec_unregister - Unregister specified codec device
    848 * @codec: codec device to unregister
    849 */
    850void snd_hda_codec_unregister(struct hda_codec *codec)
    851{
    852	codec->in_freeing = 1;
    853	/*
    854	 * snd_hda_codec_device_new() is used by legacy HDA and ASoC driver.
    855	 * We can't unregister ASoC device since it will be unregistered in
    856	 * snd_hdac_ext_bus_device_remove().
    857	 */
    858	if (codec->core.type == HDA_DEV_LEGACY)
    859		snd_hdac_device_unregister(&codec->core);
    860	snd_hda_codec_display_power(codec, false);
    861
    862	/*
    863	 * In the case of ASoC HD-audio bus, the device refcount is released in
    864	 * snd_hdac_ext_bus_device_remove() explicitly.
    865	 */
    866	if (codec->core.type == HDA_DEV_LEGACY)
    867		put_device(hda_codec_dev(codec));
    868}
    869EXPORT_SYMBOL_GPL(snd_hda_codec_unregister);
    870
    871static int snd_hda_codec_dev_free(struct snd_device *device)
    872{
    873	snd_hda_codec_unregister(device->device_data);
    874	return 0;
    875}
    876
    877static void snd_hda_codec_dev_release(struct device *dev)
    878{
    879	struct hda_codec *codec = dev_to_hda_codec(dev);
    880
    881	free_init_pincfgs(codec);
    882	snd_hdac_device_exit(&codec->core);
    883	snd_hda_sysfs_clear(codec);
    884	kfree(codec->modelname);
    885	kfree(codec->wcaps);
    886
    887	/*
    888	 * In the case of ASoC HD-audio, hda_codec is device managed.
    889	 * It will be freed when the ASoC device is removed.
    890	 */
    891	if (codec->core.type == HDA_DEV_LEGACY)
    892		kfree(codec);
    893}
    894
    895#define DEV_NAME_LEN 31
    896
    897/**
    898 * snd_hda_codec_device_init - allocate HDA codec device
    899 * @bus: codec's parent bus
    900 * @codec_addr: the codec address on the parent bus
    901 * @fmt: format string for the device's name
    902 *
    903 * Returns newly allocated codec device or ERR_PTR() on failure.
    904 */
    905struct hda_codec *
    906snd_hda_codec_device_init(struct hda_bus *bus, unsigned int codec_addr,
    907			  const char *fmt, ...)
    908{
    909	va_list vargs;
    910	char name[DEV_NAME_LEN];
    911	struct hda_codec *codec;
    912	int err;
    913
    914	if (snd_BUG_ON(!bus))
    915		return ERR_PTR(-EINVAL);
    916	if (snd_BUG_ON(codec_addr > HDA_MAX_CODEC_ADDRESS))
    917		return ERR_PTR(-EINVAL);
    918
    919	codec = kzalloc(sizeof(*codec), GFP_KERNEL);
    920	if (!codec)
    921		return ERR_PTR(-ENOMEM);
    922
    923	va_start(vargs, fmt);
    924	vsprintf(name, fmt, vargs);
    925	va_end(vargs);
    926
    927	err = snd_hdac_device_init(&codec->core, &bus->core, name, codec_addr);
    928	if (err < 0) {
    929		kfree(codec);
    930		return ERR_PTR(err);
    931	}
    932
    933	codec->bus = bus;
    934	codec->core.type = HDA_DEV_LEGACY;
    935
    936	return codec;
    937}
    938EXPORT_SYMBOL_GPL(snd_hda_codec_device_init);
    939
    940/**
    941 * snd_hda_codec_new - create a HDA codec
    942 * @bus: the bus to assign
    943 * @card: card for this codec
    944 * @codec_addr: the codec address
    945 * @codecp: the pointer to store the generated codec
    946 *
    947 * Returns 0 if successful, or a negative error code.
    948 */
    949int snd_hda_codec_new(struct hda_bus *bus, struct snd_card *card,
    950		      unsigned int codec_addr, struct hda_codec **codecp)
    951{
    952	struct hda_codec *codec;
    953
    954	codec = snd_hda_codec_device_init(bus, codec_addr, "hdaudioC%dD%d",
    955					  card->number, codec_addr);
    956	if (IS_ERR(codec))
    957		return PTR_ERR(codec);
    958	*codecp = codec;
    959
    960	return snd_hda_codec_device_new(bus, card, codec_addr, *codecp, true);
    961}
    962EXPORT_SYMBOL_GPL(snd_hda_codec_new);
    963
    964int snd_hda_codec_device_new(struct hda_bus *bus, struct snd_card *card,
    965			unsigned int codec_addr, struct hda_codec *codec,
    966			bool snddev_managed)
    967{
    968	char component[31];
    969	hda_nid_t fg;
    970	int err;
    971	static const struct snd_device_ops dev_ops = {
    972		.dev_register = snd_hda_codec_dev_register,
    973		.dev_free = snd_hda_codec_dev_free,
    974	};
    975
    976	dev_dbg(card->dev, "%s: entry\n", __func__);
    977
    978	if (snd_BUG_ON(!bus))
    979		return -EINVAL;
    980	if (snd_BUG_ON(codec_addr > HDA_MAX_CODEC_ADDRESS))
    981		return -EINVAL;
    982
    983	codec->core.dev.release = snd_hda_codec_dev_release;
    984	codec->core.exec_verb = codec_exec_verb;
    985
    986	codec->card = card;
    987	codec->addr = codec_addr;
    988	mutex_init(&codec->spdif_mutex);
    989	mutex_init(&codec->control_mutex);
    990	snd_array_init(&codec->mixers, sizeof(struct hda_nid_item), 32);
    991	snd_array_init(&codec->nids, sizeof(struct hda_nid_item), 32);
    992	snd_array_init(&codec->init_pins, sizeof(struct hda_pincfg), 16);
    993	snd_array_init(&codec->driver_pins, sizeof(struct hda_pincfg), 16);
    994	snd_array_init(&codec->cvt_setups, sizeof(struct hda_cvt_setup), 8);
    995	snd_array_init(&codec->spdif_out, sizeof(struct hda_spdif_out), 16);
    996	snd_array_init(&codec->jacktbl, sizeof(struct hda_jack_tbl), 16);
    997	snd_array_init(&codec->verbs, sizeof(struct hda_verb *), 8);
    998	INIT_LIST_HEAD(&codec->conn_list);
    999	INIT_LIST_HEAD(&codec->pcm_list_head);
   1000	refcount_set(&codec->pcm_ref, 1);
   1001	init_waitqueue_head(&codec->remove_sleep);
   1002
   1003	INIT_DELAYED_WORK(&codec->jackpoll_work, hda_jackpoll_work);
   1004	codec->depop_delay = -1;
   1005	codec->fixup_id = HDA_FIXUP_ID_NOT_SET;
   1006
   1007#ifdef CONFIG_PM
   1008	codec->power_jiffies = jiffies;
   1009#endif
   1010
   1011	snd_hda_sysfs_init(codec);
   1012
   1013	if (codec->bus->modelname) {
   1014		codec->modelname = kstrdup(codec->bus->modelname, GFP_KERNEL);
   1015		if (!codec->modelname) {
   1016			err = -ENOMEM;
   1017			goto error;
   1018		}
   1019	}
   1020
   1021	fg = codec->core.afg ? codec->core.afg : codec->core.mfg;
   1022	err = read_widget_caps(codec, fg);
   1023	if (err < 0)
   1024		goto error;
   1025	err = read_pin_defaults(codec);
   1026	if (err < 0)
   1027		goto error;
   1028
   1029	/* power-up all before initialization */
   1030	hda_set_power_state(codec, AC_PWRST_D0);
   1031	codec->core.dev.power.power_state = PMSG_ON;
   1032
   1033	snd_hda_codec_proc_new(codec);
   1034
   1035	snd_hda_create_hwdep(codec);
   1036
   1037	sprintf(component, "HDA:%08x,%08x,%08x", codec->core.vendor_id,
   1038		codec->core.subsystem_id, codec->core.revision_id);
   1039	snd_component_add(card, component);
   1040
   1041	if (snddev_managed) {
   1042		/* ASoC features component management instead */
   1043		err = snd_device_new(card, SNDRV_DEV_CODEC, codec, &dev_ops);
   1044		if (err < 0)
   1045			goto error;
   1046	}
   1047
   1048	/* PM runtime needs to be enabled later after binding codec */
   1049	pm_runtime_forbid(&codec->core.dev);
   1050
   1051	return 0;
   1052
   1053 error:
   1054	put_device(hda_codec_dev(codec));
   1055	return err;
   1056}
   1057EXPORT_SYMBOL_GPL(snd_hda_codec_device_new);
   1058
   1059/**
   1060 * snd_hda_codec_update_widgets - Refresh widget caps and pin defaults
   1061 * @codec: the HDA codec
   1062 *
   1063 * Forcibly refresh the all widget caps and the init pin configurations of
   1064 * the given codec.
   1065 */
   1066int snd_hda_codec_update_widgets(struct hda_codec *codec)
   1067{
   1068	hda_nid_t fg;
   1069	int err;
   1070
   1071	err = snd_hdac_refresh_widgets(&codec->core);
   1072	if (err < 0)
   1073		return err;
   1074
   1075	/* Assume the function group node does not change,
   1076	 * only the widget nodes may change.
   1077	 */
   1078	kfree(codec->wcaps);
   1079	fg = codec->core.afg ? codec->core.afg : codec->core.mfg;
   1080	err = read_widget_caps(codec, fg);
   1081	if (err < 0)
   1082		return err;
   1083
   1084	snd_array_free(&codec->init_pins);
   1085	err = read_pin_defaults(codec);
   1086
   1087	return err;
   1088}
   1089EXPORT_SYMBOL_GPL(snd_hda_codec_update_widgets);
   1090
   1091/* update the stream-id if changed */
   1092static void update_pcm_stream_id(struct hda_codec *codec,
   1093				 struct hda_cvt_setup *p, hda_nid_t nid,
   1094				 u32 stream_tag, int channel_id)
   1095{
   1096	unsigned int oldval, newval;
   1097
   1098	if (p->stream_tag != stream_tag || p->channel_id != channel_id) {
   1099		oldval = snd_hda_codec_read(codec, nid, 0, AC_VERB_GET_CONV, 0);
   1100		newval = (stream_tag << 4) | channel_id;
   1101		if (oldval != newval)
   1102			snd_hda_codec_write(codec, nid, 0,
   1103					    AC_VERB_SET_CHANNEL_STREAMID,
   1104					    newval);
   1105		p->stream_tag = stream_tag;
   1106		p->channel_id = channel_id;
   1107	}
   1108}
   1109
   1110/* update the format-id if changed */
   1111static void update_pcm_format(struct hda_codec *codec, struct hda_cvt_setup *p,
   1112			      hda_nid_t nid, int format)
   1113{
   1114	unsigned int oldval;
   1115
   1116	if (p->format_id != format) {
   1117		oldval = snd_hda_codec_read(codec, nid, 0,
   1118					    AC_VERB_GET_STREAM_FORMAT, 0);
   1119		if (oldval != format) {
   1120			msleep(1);
   1121			snd_hda_codec_write(codec, nid, 0,
   1122					    AC_VERB_SET_STREAM_FORMAT,
   1123					    format);
   1124		}
   1125		p->format_id = format;
   1126	}
   1127}
   1128
   1129/**
   1130 * snd_hda_codec_setup_stream - set up the codec for streaming
   1131 * @codec: the CODEC to set up
   1132 * @nid: the NID to set up
   1133 * @stream_tag: stream tag to pass, it's between 0x1 and 0xf.
   1134 * @channel_id: channel id to pass, zero based.
   1135 * @format: stream format.
   1136 */
   1137void snd_hda_codec_setup_stream(struct hda_codec *codec, hda_nid_t nid,
   1138				u32 stream_tag,
   1139				int channel_id, int format)
   1140{
   1141	struct hda_codec *c;
   1142	struct hda_cvt_setup *p;
   1143	int type;
   1144	int i;
   1145
   1146	if (!nid)
   1147		return;
   1148
   1149	codec_dbg(codec,
   1150		  "hda_codec_setup_stream: NID=0x%x, stream=0x%x, channel=%d, format=0x%x\n",
   1151		  nid, stream_tag, channel_id, format);
   1152	p = get_hda_cvt_setup(codec, nid);
   1153	if (!p)
   1154		return;
   1155
   1156	if (codec->patch_ops.stream_pm)
   1157		codec->patch_ops.stream_pm(codec, nid, true);
   1158	if (codec->pcm_format_first)
   1159		update_pcm_format(codec, p, nid, format);
   1160	update_pcm_stream_id(codec, p, nid, stream_tag, channel_id);
   1161	if (!codec->pcm_format_first)
   1162		update_pcm_format(codec, p, nid, format);
   1163
   1164	p->active = 1;
   1165	p->dirty = 0;
   1166
   1167	/* make other inactive cvts with the same stream-tag dirty */
   1168	type = get_wcaps_type(get_wcaps(codec, nid));
   1169	list_for_each_codec(c, codec->bus) {
   1170		snd_array_for_each(&c->cvt_setups, i, p) {
   1171			if (!p->active && p->stream_tag == stream_tag &&
   1172			    get_wcaps_type(get_wcaps(c, p->nid)) == type)
   1173				p->dirty = 1;
   1174		}
   1175	}
   1176}
   1177EXPORT_SYMBOL_GPL(snd_hda_codec_setup_stream);
   1178
   1179static void really_cleanup_stream(struct hda_codec *codec,
   1180				  struct hda_cvt_setup *q);
   1181
   1182/**
   1183 * __snd_hda_codec_cleanup_stream - clean up the codec for closing
   1184 * @codec: the CODEC to clean up
   1185 * @nid: the NID to clean up
   1186 * @do_now: really clean up the stream instead of clearing the active flag
   1187 */
   1188void __snd_hda_codec_cleanup_stream(struct hda_codec *codec, hda_nid_t nid,
   1189				    int do_now)
   1190{
   1191	struct hda_cvt_setup *p;
   1192
   1193	if (!nid)
   1194		return;
   1195
   1196	if (codec->no_sticky_stream)
   1197		do_now = 1;
   1198
   1199	codec_dbg(codec, "hda_codec_cleanup_stream: NID=0x%x\n", nid);
   1200	p = get_hda_cvt_setup(codec, nid);
   1201	if (p) {
   1202		/* here we just clear the active flag when do_now isn't set;
   1203		 * actual clean-ups will be done later in
   1204		 * purify_inactive_streams() called from snd_hda_codec_prpapre()
   1205		 */
   1206		if (do_now)
   1207			really_cleanup_stream(codec, p);
   1208		else
   1209			p->active = 0;
   1210	}
   1211}
   1212EXPORT_SYMBOL_GPL(__snd_hda_codec_cleanup_stream);
   1213
   1214static void really_cleanup_stream(struct hda_codec *codec,
   1215				  struct hda_cvt_setup *q)
   1216{
   1217	hda_nid_t nid = q->nid;
   1218	if (q->stream_tag || q->channel_id)
   1219		snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_CHANNEL_STREAMID, 0);
   1220	if (q->format_id)
   1221		snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_STREAM_FORMAT, 0
   1222);
   1223	memset(q, 0, sizeof(*q));
   1224	q->nid = nid;
   1225	if (codec->patch_ops.stream_pm)
   1226		codec->patch_ops.stream_pm(codec, nid, false);
   1227}
   1228
   1229/* clean up the all conflicting obsolete streams */
   1230static void purify_inactive_streams(struct hda_codec *codec)
   1231{
   1232	struct hda_codec *c;
   1233	struct hda_cvt_setup *p;
   1234	int i;
   1235
   1236	list_for_each_codec(c, codec->bus) {
   1237		snd_array_for_each(&c->cvt_setups, i, p) {
   1238			if (p->dirty)
   1239				really_cleanup_stream(c, p);
   1240		}
   1241	}
   1242}
   1243
   1244#ifdef CONFIG_PM
   1245/* clean up all streams; called from suspend */
   1246static void hda_cleanup_all_streams(struct hda_codec *codec)
   1247{
   1248	struct hda_cvt_setup *p;
   1249	int i;
   1250
   1251	snd_array_for_each(&codec->cvt_setups, i, p) {
   1252		if (p->stream_tag)
   1253			really_cleanup_stream(codec, p);
   1254	}
   1255}
   1256#endif
   1257
   1258/*
   1259 * amp access functions
   1260 */
   1261
   1262/**
   1263 * query_amp_caps - query AMP capabilities
   1264 * @codec: the HD-auio codec
   1265 * @nid: the NID to query
   1266 * @direction: either #HDA_INPUT or #HDA_OUTPUT
   1267 *
   1268 * Query AMP capabilities for the given widget and direction.
   1269 * Returns the obtained capability bits.
   1270 *
   1271 * When cap bits have been already read, this doesn't read again but
   1272 * returns the cached value.
   1273 */
   1274u32 query_amp_caps(struct hda_codec *codec, hda_nid_t nid, int direction)
   1275{
   1276	if (!(get_wcaps(codec, nid) & AC_WCAP_AMP_OVRD))
   1277		nid = codec->core.afg;
   1278	return snd_hda_param_read(codec, nid,
   1279				  direction == HDA_OUTPUT ?
   1280				  AC_PAR_AMP_OUT_CAP : AC_PAR_AMP_IN_CAP);
   1281}
   1282EXPORT_SYMBOL_GPL(query_amp_caps);
   1283
   1284/**
   1285 * snd_hda_check_amp_caps - query AMP capabilities
   1286 * @codec: the HD-audio codec
   1287 * @nid: the NID to query
   1288 * @dir: either #HDA_INPUT or #HDA_OUTPUT
   1289 * @bits: bit mask to check the result
   1290 *
   1291 * Check whether the widget has the given amp capability for the direction.
   1292 */
   1293bool snd_hda_check_amp_caps(struct hda_codec *codec, hda_nid_t nid,
   1294			   int dir, unsigned int bits)
   1295{
   1296	if (!nid)
   1297		return false;
   1298	if (get_wcaps(codec, nid) & (1 << (dir + 1)))
   1299		if (query_amp_caps(codec, nid, dir) & bits)
   1300			return true;
   1301	return false;
   1302}
   1303EXPORT_SYMBOL_GPL(snd_hda_check_amp_caps);
   1304
   1305/**
   1306 * snd_hda_override_amp_caps - Override the AMP capabilities
   1307 * @codec: the CODEC to clean up
   1308 * @nid: the NID to clean up
   1309 * @dir: either #HDA_INPUT or #HDA_OUTPUT
   1310 * @caps: the capability bits to set
   1311 *
   1312 * Override the cached AMP caps bits value by the given one.
   1313 * This function is useful if the driver needs to adjust the AMP ranges,
   1314 * e.g. limit to 0dB, etc.
   1315 *
   1316 * Returns zero if successful or a negative error code.
   1317 */
   1318int snd_hda_override_amp_caps(struct hda_codec *codec, hda_nid_t nid, int dir,
   1319			      unsigned int caps)
   1320{
   1321	unsigned int parm;
   1322
   1323	snd_hda_override_wcaps(codec, nid,
   1324			       get_wcaps(codec, nid) | AC_WCAP_AMP_OVRD);
   1325	parm = dir == HDA_OUTPUT ? AC_PAR_AMP_OUT_CAP : AC_PAR_AMP_IN_CAP;
   1326	return snd_hdac_override_parm(&codec->core, nid, parm, caps);
   1327}
   1328EXPORT_SYMBOL_GPL(snd_hda_override_amp_caps);
   1329
   1330static unsigned int encode_amp(struct hda_codec *codec, hda_nid_t nid,
   1331			       int ch, int dir, int idx)
   1332{
   1333	unsigned int cmd = snd_hdac_regmap_encode_amp(nid, ch, dir, idx);
   1334
   1335	/* enable fake mute if no h/w mute but min=mute */
   1336	if ((query_amp_caps(codec, nid, dir) &
   1337	     (AC_AMPCAP_MUTE | AC_AMPCAP_MIN_MUTE)) == AC_AMPCAP_MIN_MUTE)
   1338		cmd |= AC_AMP_FAKE_MUTE;
   1339	return cmd;
   1340}
   1341
   1342/**
   1343 * snd_hda_codec_amp_update - update the AMP mono value
   1344 * @codec: HD-audio codec
   1345 * @nid: NID to read the AMP value
   1346 * @ch: channel to update (0 or 1)
   1347 * @dir: #HDA_INPUT or #HDA_OUTPUT
   1348 * @idx: the index value (only for input direction)
   1349 * @mask: bit mask to set
   1350 * @val: the bits value to set
   1351 *
   1352 * Update the AMP values for the given channel, direction and index.
   1353 */
   1354int snd_hda_codec_amp_update(struct hda_codec *codec, hda_nid_t nid,
   1355			     int ch, int dir, int idx, int mask, int val)
   1356{
   1357	unsigned int cmd = encode_amp(codec, nid, ch, dir, idx);
   1358
   1359	return snd_hdac_regmap_update_raw(&codec->core, cmd, mask, val);
   1360}
   1361EXPORT_SYMBOL_GPL(snd_hda_codec_amp_update);
   1362
   1363/**
   1364 * snd_hda_codec_amp_stereo - update the AMP stereo values
   1365 * @codec: HD-audio codec
   1366 * @nid: NID to read the AMP value
   1367 * @direction: #HDA_INPUT or #HDA_OUTPUT
   1368 * @idx: the index value (only for input direction)
   1369 * @mask: bit mask to set
   1370 * @val: the bits value to set
   1371 *
   1372 * Update the AMP values like snd_hda_codec_amp_update(), but for a
   1373 * stereo widget with the same mask and value.
   1374 */
   1375int snd_hda_codec_amp_stereo(struct hda_codec *codec, hda_nid_t nid,
   1376			     int direction, int idx, int mask, int val)
   1377{
   1378	int ch, ret = 0;
   1379
   1380	if (snd_BUG_ON(mask & ~0xff))
   1381		mask &= 0xff;
   1382	for (ch = 0; ch < 2; ch++)
   1383		ret |= snd_hda_codec_amp_update(codec, nid, ch, direction,
   1384						idx, mask, val);
   1385	return ret;
   1386}
   1387EXPORT_SYMBOL_GPL(snd_hda_codec_amp_stereo);
   1388
   1389/**
   1390 * snd_hda_codec_amp_init - initialize the AMP value
   1391 * @codec: the HDA codec
   1392 * @nid: NID to read the AMP value
   1393 * @ch: channel (left=0 or right=1)
   1394 * @dir: #HDA_INPUT or #HDA_OUTPUT
   1395 * @idx: the index value (only for input direction)
   1396 * @mask: bit mask to set
   1397 * @val: the bits value to set
   1398 *
   1399 * Works like snd_hda_codec_amp_update() but it writes the value only at
   1400 * the first access.  If the amp was already initialized / updated beforehand,
   1401 * this does nothing.
   1402 */
   1403int snd_hda_codec_amp_init(struct hda_codec *codec, hda_nid_t nid, int ch,
   1404			   int dir, int idx, int mask, int val)
   1405{
   1406	unsigned int cmd = encode_amp(codec, nid, ch, dir, idx);
   1407
   1408	if (!codec->core.regmap)
   1409		return -EINVAL;
   1410	return snd_hdac_regmap_update_raw_once(&codec->core, cmd, mask, val);
   1411}
   1412EXPORT_SYMBOL_GPL(snd_hda_codec_amp_init);
   1413
   1414/**
   1415 * snd_hda_codec_amp_init_stereo - initialize the stereo AMP value
   1416 * @codec: the HDA codec
   1417 * @nid: NID to read the AMP value
   1418 * @dir: #HDA_INPUT or #HDA_OUTPUT
   1419 * @idx: the index value (only for input direction)
   1420 * @mask: bit mask to set
   1421 * @val: the bits value to set
   1422 *
   1423 * Call snd_hda_codec_amp_init() for both stereo channels.
   1424 */
   1425int snd_hda_codec_amp_init_stereo(struct hda_codec *codec, hda_nid_t nid,
   1426				  int dir, int idx, int mask, int val)
   1427{
   1428	int ch, ret = 0;
   1429
   1430	if (snd_BUG_ON(mask & ~0xff))
   1431		mask &= 0xff;
   1432	for (ch = 0; ch < 2; ch++)
   1433		ret |= snd_hda_codec_amp_init(codec, nid, ch, dir,
   1434					      idx, mask, val);
   1435	return ret;
   1436}
   1437EXPORT_SYMBOL_GPL(snd_hda_codec_amp_init_stereo);
   1438
   1439static u32 get_amp_max_value(struct hda_codec *codec, hda_nid_t nid, int dir,
   1440			     unsigned int ofs)
   1441{
   1442	u32 caps = query_amp_caps(codec, nid, dir);
   1443	/* get num steps */
   1444	caps = (caps & AC_AMPCAP_NUM_STEPS) >> AC_AMPCAP_NUM_STEPS_SHIFT;
   1445	if (ofs < caps)
   1446		caps -= ofs;
   1447	return caps;
   1448}
   1449
   1450/**
   1451 * snd_hda_mixer_amp_volume_info - Info callback for a standard AMP mixer
   1452 * @kcontrol: referred ctl element
   1453 * @uinfo: pointer to get/store the data
   1454 *
   1455 * The control element is supposed to have the private_value field
   1456 * set up via HDA_COMPOSE_AMP_VAL*() or related macros.
   1457 */
   1458int snd_hda_mixer_amp_volume_info(struct snd_kcontrol *kcontrol,
   1459				  struct snd_ctl_elem_info *uinfo)
   1460{
   1461	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
   1462	u16 nid = get_amp_nid(kcontrol);
   1463	u8 chs = get_amp_channels(kcontrol);
   1464	int dir = get_amp_direction(kcontrol);
   1465	unsigned int ofs = get_amp_offset(kcontrol);
   1466
   1467	uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
   1468	uinfo->count = chs == 3 ? 2 : 1;
   1469	uinfo->value.integer.min = 0;
   1470	uinfo->value.integer.max = get_amp_max_value(codec, nid, dir, ofs);
   1471	if (!uinfo->value.integer.max) {
   1472		codec_warn(codec,
   1473			   "num_steps = 0 for NID=0x%x (ctl = %s)\n",
   1474			   nid, kcontrol->id.name);
   1475		return -EINVAL;
   1476	}
   1477	return 0;
   1478}
   1479EXPORT_SYMBOL_GPL(snd_hda_mixer_amp_volume_info);
   1480
   1481
   1482static inline unsigned int
   1483read_amp_value(struct hda_codec *codec, hda_nid_t nid,
   1484	       int ch, int dir, int idx, unsigned int ofs)
   1485{
   1486	unsigned int val;
   1487	val = snd_hda_codec_amp_read(codec, nid, ch, dir, idx);
   1488	val &= HDA_AMP_VOLMASK;
   1489	if (val >= ofs)
   1490		val -= ofs;
   1491	else
   1492		val = 0;
   1493	return val;
   1494}
   1495
   1496static inline int
   1497update_amp_value(struct hda_codec *codec, hda_nid_t nid,
   1498		 int ch, int dir, int idx, unsigned int ofs,
   1499		 unsigned int val)
   1500{
   1501	unsigned int maxval;
   1502
   1503	if (val > 0)
   1504		val += ofs;
   1505	/* ofs = 0: raw max value */
   1506	maxval = get_amp_max_value(codec, nid, dir, 0);
   1507	if (val > maxval)
   1508		val = maxval;
   1509	return snd_hda_codec_amp_update(codec, nid, ch, dir, idx,
   1510					HDA_AMP_VOLMASK, val);
   1511}
   1512
   1513/**
   1514 * snd_hda_mixer_amp_volume_get - Get callback for a standard AMP mixer volume
   1515 * @kcontrol: ctl element
   1516 * @ucontrol: pointer to get/store the data
   1517 *
   1518 * The control element is supposed to have the private_value field
   1519 * set up via HDA_COMPOSE_AMP_VAL*() or related macros.
   1520 */
   1521int snd_hda_mixer_amp_volume_get(struct snd_kcontrol *kcontrol,
   1522				 struct snd_ctl_elem_value *ucontrol)
   1523{
   1524	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
   1525	hda_nid_t nid = get_amp_nid(kcontrol);
   1526	int chs = get_amp_channels(kcontrol);
   1527	int dir = get_amp_direction(kcontrol);
   1528	int idx = get_amp_index(kcontrol);
   1529	unsigned int ofs = get_amp_offset(kcontrol);
   1530	long *valp = ucontrol->value.integer.value;
   1531
   1532	if (chs & 1)
   1533		*valp++ = read_amp_value(codec, nid, 0, dir, idx, ofs);
   1534	if (chs & 2)
   1535		*valp = read_amp_value(codec, nid, 1, dir, idx, ofs);
   1536	return 0;
   1537}
   1538EXPORT_SYMBOL_GPL(snd_hda_mixer_amp_volume_get);
   1539
   1540/**
   1541 * snd_hda_mixer_amp_volume_put - Put callback for a standard AMP mixer volume
   1542 * @kcontrol: ctl element
   1543 * @ucontrol: pointer to get/store the data
   1544 *
   1545 * The control element is supposed to have the private_value field
   1546 * set up via HDA_COMPOSE_AMP_VAL*() or related macros.
   1547 */
   1548int snd_hda_mixer_amp_volume_put(struct snd_kcontrol *kcontrol,
   1549				 struct snd_ctl_elem_value *ucontrol)
   1550{
   1551	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
   1552	hda_nid_t nid = get_amp_nid(kcontrol);
   1553	int chs = get_amp_channels(kcontrol);
   1554	int dir = get_amp_direction(kcontrol);
   1555	int idx = get_amp_index(kcontrol);
   1556	unsigned int ofs = get_amp_offset(kcontrol);
   1557	long *valp = ucontrol->value.integer.value;
   1558	int change = 0;
   1559
   1560	if (chs & 1) {
   1561		change = update_amp_value(codec, nid, 0, dir, idx, ofs, *valp);
   1562		valp++;
   1563	}
   1564	if (chs & 2)
   1565		change |= update_amp_value(codec, nid, 1, dir, idx, ofs, *valp);
   1566	return change;
   1567}
   1568EXPORT_SYMBOL_GPL(snd_hda_mixer_amp_volume_put);
   1569
   1570/* inquiry the amp caps and convert to TLV */
   1571static void get_ctl_amp_tlv(struct snd_kcontrol *kcontrol, unsigned int *tlv)
   1572{
   1573	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
   1574	hda_nid_t nid = get_amp_nid(kcontrol);
   1575	int dir = get_amp_direction(kcontrol);
   1576	unsigned int ofs = get_amp_offset(kcontrol);
   1577	bool min_mute = get_amp_min_mute(kcontrol);
   1578	u32 caps, val1, val2;
   1579
   1580	caps = query_amp_caps(codec, nid, dir);
   1581	val2 = (caps & AC_AMPCAP_STEP_SIZE) >> AC_AMPCAP_STEP_SIZE_SHIFT;
   1582	val2 = (val2 + 1) * 25;
   1583	val1 = -((caps & AC_AMPCAP_OFFSET) >> AC_AMPCAP_OFFSET_SHIFT);
   1584	val1 += ofs;
   1585	val1 = ((int)val1) * ((int)val2);
   1586	if (min_mute || (caps & AC_AMPCAP_MIN_MUTE))
   1587		val2 |= TLV_DB_SCALE_MUTE;
   1588	tlv[SNDRV_CTL_TLVO_TYPE] = SNDRV_CTL_TLVT_DB_SCALE;
   1589	tlv[SNDRV_CTL_TLVO_LEN] = 2 * sizeof(unsigned int);
   1590	tlv[SNDRV_CTL_TLVO_DB_SCALE_MIN] = val1;
   1591	tlv[SNDRV_CTL_TLVO_DB_SCALE_MUTE_AND_STEP] = val2;
   1592}
   1593
   1594/**
   1595 * snd_hda_mixer_amp_tlv - TLV callback for a standard AMP mixer volume
   1596 * @kcontrol: ctl element
   1597 * @op_flag: operation flag
   1598 * @size: byte size of input TLV
   1599 * @_tlv: TLV data
   1600 *
   1601 * The control element is supposed to have the private_value field
   1602 * set up via HDA_COMPOSE_AMP_VAL*() or related macros.
   1603 */
   1604int snd_hda_mixer_amp_tlv(struct snd_kcontrol *kcontrol, int op_flag,
   1605			  unsigned int size, unsigned int __user *_tlv)
   1606{
   1607	unsigned int tlv[4];
   1608
   1609	if (size < 4 * sizeof(unsigned int))
   1610		return -ENOMEM;
   1611	get_ctl_amp_tlv(kcontrol, tlv);
   1612	if (copy_to_user(_tlv, tlv, sizeof(tlv)))
   1613		return -EFAULT;
   1614	return 0;
   1615}
   1616EXPORT_SYMBOL_GPL(snd_hda_mixer_amp_tlv);
   1617
   1618/**
   1619 * snd_hda_set_vmaster_tlv - Set TLV for a virtual master control
   1620 * @codec: HD-audio codec
   1621 * @nid: NID of a reference widget
   1622 * @dir: #HDA_INPUT or #HDA_OUTPUT
   1623 * @tlv: TLV data to be stored, at least 4 elements
   1624 *
   1625 * Set (static) TLV data for a virtual master volume using the AMP caps
   1626 * obtained from the reference NID.
   1627 * The volume range is recalculated as if the max volume is 0dB.
   1628 */
   1629void snd_hda_set_vmaster_tlv(struct hda_codec *codec, hda_nid_t nid, int dir,
   1630			     unsigned int *tlv)
   1631{
   1632	u32 caps;
   1633	int nums, step;
   1634
   1635	caps = query_amp_caps(codec, nid, dir);
   1636	nums = (caps & AC_AMPCAP_NUM_STEPS) >> AC_AMPCAP_NUM_STEPS_SHIFT;
   1637	step = (caps & AC_AMPCAP_STEP_SIZE) >> AC_AMPCAP_STEP_SIZE_SHIFT;
   1638	step = (step + 1) * 25;
   1639	tlv[SNDRV_CTL_TLVO_TYPE] = SNDRV_CTL_TLVT_DB_SCALE;
   1640	tlv[SNDRV_CTL_TLVO_LEN] = 2 * sizeof(unsigned int);
   1641	tlv[SNDRV_CTL_TLVO_DB_SCALE_MIN] = -nums * step;
   1642	tlv[SNDRV_CTL_TLVO_DB_SCALE_MUTE_AND_STEP] = step;
   1643}
   1644EXPORT_SYMBOL_GPL(snd_hda_set_vmaster_tlv);
   1645
   1646/* find a mixer control element with the given name */
   1647static struct snd_kcontrol *
   1648find_mixer_ctl(struct hda_codec *codec, const char *name, int dev, int idx)
   1649{
   1650	struct snd_ctl_elem_id id;
   1651	memset(&id, 0, sizeof(id));
   1652	id.iface = SNDRV_CTL_ELEM_IFACE_MIXER;
   1653	id.device = dev;
   1654	id.index = idx;
   1655	if (snd_BUG_ON(strlen(name) >= sizeof(id.name)))
   1656		return NULL;
   1657	strcpy(id.name, name);
   1658	return snd_ctl_find_id(codec->card, &id);
   1659}
   1660
   1661/**
   1662 * snd_hda_find_mixer_ctl - Find a mixer control element with the given name
   1663 * @codec: HD-audio codec
   1664 * @name: ctl id name string
   1665 *
   1666 * Get the control element with the given id string and IFACE_MIXER.
   1667 */
   1668struct snd_kcontrol *snd_hda_find_mixer_ctl(struct hda_codec *codec,
   1669					    const char *name)
   1670{
   1671	return find_mixer_ctl(codec, name, 0, 0);
   1672}
   1673EXPORT_SYMBOL_GPL(snd_hda_find_mixer_ctl);
   1674
   1675static int find_empty_mixer_ctl_idx(struct hda_codec *codec, const char *name,
   1676				    int start_idx)
   1677{
   1678	int i, idx;
   1679	/* 16 ctlrs should be large enough */
   1680	for (i = 0, idx = start_idx; i < 16; i++, idx++) {
   1681		if (!find_mixer_ctl(codec, name, 0, idx))
   1682			return idx;
   1683	}
   1684	return -EBUSY;
   1685}
   1686
   1687/**
   1688 * snd_hda_ctl_add - Add a control element and assign to the codec
   1689 * @codec: HD-audio codec
   1690 * @nid: corresponding NID (optional)
   1691 * @kctl: the control element to assign
   1692 *
   1693 * Add the given control element to an array inside the codec instance.
   1694 * All control elements belonging to a codec are supposed to be added
   1695 * by this function so that a proper clean-up works at the free or
   1696 * reconfiguration time.
   1697 *
   1698 * If non-zero @nid is passed, the NID is assigned to the control element.
   1699 * The assignment is shown in the codec proc file.
   1700 *
   1701 * snd_hda_ctl_add() checks the control subdev id field whether
   1702 * #HDA_SUBDEV_NID_FLAG bit is set.  If set (and @nid is zero), the lower
   1703 * bits value is taken as the NID to assign. The #HDA_NID_ITEM_AMP bit
   1704 * specifies if kctl->private_value is a HDA amplifier value.
   1705 */
   1706int snd_hda_ctl_add(struct hda_codec *codec, hda_nid_t nid,
   1707		    struct snd_kcontrol *kctl)
   1708{
   1709	int err;
   1710	unsigned short flags = 0;
   1711	struct hda_nid_item *item;
   1712
   1713	if (kctl->id.subdevice & HDA_SUBDEV_AMP_FLAG) {
   1714		flags |= HDA_NID_ITEM_AMP;
   1715		if (nid == 0)
   1716			nid = get_amp_nid_(kctl->private_value);
   1717	}
   1718	if ((kctl->id.subdevice & HDA_SUBDEV_NID_FLAG) != 0 && nid == 0)
   1719		nid = kctl->id.subdevice & 0xffff;
   1720	if (kctl->id.subdevice & (HDA_SUBDEV_NID_FLAG|HDA_SUBDEV_AMP_FLAG))
   1721		kctl->id.subdevice = 0;
   1722	err = snd_ctl_add(codec->card, kctl);
   1723	if (err < 0)
   1724		return err;
   1725	item = snd_array_new(&codec->mixers);
   1726	if (!item)
   1727		return -ENOMEM;
   1728	item->kctl = kctl;
   1729	item->nid = nid;
   1730	item->flags = flags;
   1731	return 0;
   1732}
   1733EXPORT_SYMBOL_GPL(snd_hda_ctl_add);
   1734
   1735/**
   1736 * snd_hda_add_nid - Assign a NID to a control element
   1737 * @codec: HD-audio codec
   1738 * @nid: corresponding NID (optional)
   1739 * @kctl: the control element to assign
   1740 * @index: index to kctl
   1741 *
   1742 * Add the given control element to an array inside the codec instance.
   1743 * This function is used when #snd_hda_ctl_add cannot be used for 1:1
   1744 * NID:KCTL mapping - for example "Capture Source" selector.
   1745 */
   1746int snd_hda_add_nid(struct hda_codec *codec, struct snd_kcontrol *kctl,
   1747		    unsigned int index, hda_nid_t nid)
   1748{
   1749	struct hda_nid_item *item;
   1750
   1751	if (nid > 0) {
   1752		item = snd_array_new(&codec->nids);
   1753		if (!item)
   1754			return -ENOMEM;
   1755		item->kctl = kctl;
   1756		item->index = index;
   1757		item->nid = nid;
   1758		return 0;
   1759	}
   1760	codec_err(codec, "no NID for mapping control %s:%d:%d\n",
   1761		  kctl->id.name, kctl->id.index, index);
   1762	return -EINVAL;
   1763}
   1764EXPORT_SYMBOL_GPL(snd_hda_add_nid);
   1765
   1766/**
   1767 * snd_hda_ctls_clear - Clear all controls assigned to the given codec
   1768 * @codec: HD-audio codec
   1769 */
   1770void snd_hda_ctls_clear(struct hda_codec *codec)
   1771{
   1772	int i;
   1773	struct hda_nid_item *items = codec->mixers.list;
   1774
   1775	down_write(&codec->card->controls_rwsem);
   1776	for (i = 0; i < codec->mixers.used; i++)
   1777		snd_ctl_remove(codec->card, items[i].kctl);
   1778	up_write(&codec->card->controls_rwsem);
   1779	snd_array_free(&codec->mixers);
   1780	snd_array_free(&codec->nids);
   1781}
   1782
   1783/**
   1784 * snd_hda_lock_devices - pseudo device locking
   1785 * @bus: the BUS
   1786 *
   1787 * toggle card->shutdown to allow/disallow the device access (as a hack)
   1788 */
   1789int snd_hda_lock_devices(struct hda_bus *bus)
   1790{
   1791	struct snd_card *card = bus->card;
   1792	struct hda_codec *codec;
   1793
   1794	spin_lock(&card->files_lock);
   1795	if (card->shutdown)
   1796		goto err_unlock;
   1797	card->shutdown = 1;
   1798	if (!list_empty(&card->ctl_files))
   1799		goto err_clear;
   1800
   1801	list_for_each_codec(codec, bus) {
   1802		struct hda_pcm *cpcm;
   1803		list_for_each_entry(cpcm, &codec->pcm_list_head, list) {
   1804			if (!cpcm->pcm)
   1805				continue;
   1806			if (cpcm->pcm->streams[0].substream_opened ||
   1807			    cpcm->pcm->streams[1].substream_opened)
   1808				goto err_clear;
   1809		}
   1810	}
   1811	spin_unlock(&card->files_lock);
   1812	return 0;
   1813
   1814 err_clear:
   1815	card->shutdown = 0;
   1816 err_unlock:
   1817	spin_unlock(&card->files_lock);
   1818	return -EINVAL;
   1819}
   1820EXPORT_SYMBOL_GPL(snd_hda_lock_devices);
   1821
   1822/**
   1823 * snd_hda_unlock_devices - pseudo device unlocking
   1824 * @bus: the BUS
   1825 */
   1826void snd_hda_unlock_devices(struct hda_bus *bus)
   1827{
   1828	struct snd_card *card = bus->card;
   1829
   1830	spin_lock(&card->files_lock);
   1831	card->shutdown = 0;
   1832	spin_unlock(&card->files_lock);
   1833}
   1834EXPORT_SYMBOL_GPL(snd_hda_unlock_devices);
   1835
   1836/**
   1837 * snd_hda_codec_reset - Clear all objects assigned to the codec
   1838 * @codec: HD-audio codec
   1839 *
   1840 * This frees the all PCM and control elements assigned to the codec, and
   1841 * clears the caches and restores the pin default configurations.
   1842 *
   1843 * When a device is being used, it returns -EBSY.  If successfully freed,
   1844 * returns zero.
   1845 */
   1846int snd_hda_codec_reset(struct hda_codec *codec)
   1847{
   1848	struct hda_bus *bus = codec->bus;
   1849
   1850	if (snd_hda_lock_devices(bus) < 0)
   1851		return -EBUSY;
   1852
   1853	/* OK, let it free */
   1854	device_release_driver(hda_codec_dev(codec));
   1855
   1856	/* allow device access again */
   1857	snd_hda_unlock_devices(bus);
   1858	return 0;
   1859}
   1860
   1861typedef int (*map_follower_func_t)(struct hda_codec *, void *, struct snd_kcontrol *);
   1862
   1863/* apply the function to all matching follower ctls in the mixer list */
   1864static int map_followers(struct hda_codec *codec, const char * const *followers,
   1865			 const char *suffix, map_follower_func_t func, void *data)
   1866{
   1867	struct hda_nid_item *items;
   1868	const char * const *s;
   1869	int i, err;
   1870
   1871	items = codec->mixers.list;
   1872	for (i = 0; i < codec->mixers.used; i++) {
   1873		struct snd_kcontrol *sctl = items[i].kctl;
   1874		if (!sctl || sctl->id.iface != SNDRV_CTL_ELEM_IFACE_MIXER)
   1875			continue;
   1876		for (s = followers; *s; s++) {
   1877			char tmpname[sizeof(sctl->id.name)];
   1878			const char *name = *s;
   1879			if (suffix) {
   1880				snprintf(tmpname, sizeof(tmpname), "%s %s",
   1881					 name, suffix);
   1882				name = tmpname;
   1883			}
   1884			if (!strcmp(sctl->id.name, name)) {
   1885				err = func(codec, data, sctl);
   1886				if (err)
   1887					return err;
   1888				break;
   1889			}
   1890		}
   1891	}
   1892	return 0;
   1893}
   1894
   1895static int check_follower_present(struct hda_codec *codec,
   1896				  void *data, struct snd_kcontrol *sctl)
   1897{
   1898	return 1;
   1899}
   1900
   1901/* call kctl->put with the given value(s) */
   1902static int put_kctl_with_value(struct snd_kcontrol *kctl, int val)
   1903{
   1904	struct snd_ctl_elem_value *ucontrol;
   1905	ucontrol = kzalloc(sizeof(*ucontrol), GFP_KERNEL);
   1906	if (!ucontrol)
   1907		return -ENOMEM;
   1908	ucontrol->value.integer.value[0] = val;
   1909	ucontrol->value.integer.value[1] = val;
   1910	kctl->put(kctl, ucontrol);
   1911	kfree(ucontrol);
   1912	return 0;
   1913}
   1914
   1915struct follower_init_arg {
   1916	struct hda_codec *codec;
   1917	int step;
   1918};
   1919
   1920/* initialize the follower volume with 0dB via snd_ctl_apply_vmaster_followers() */
   1921static int init_follower_0dB(struct snd_kcontrol *follower,
   1922			     struct snd_kcontrol *kctl,
   1923			     void *_arg)
   1924{
   1925	struct follower_init_arg *arg = _arg;
   1926	int _tlv[4];
   1927	const int *tlv = NULL;
   1928	int step;
   1929	int val;
   1930
   1931	if (kctl->vd[0].access & SNDRV_CTL_ELEM_ACCESS_TLV_CALLBACK) {
   1932		if (kctl->tlv.c != snd_hda_mixer_amp_tlv) {
   1933			codec_err(arg->codec,
   1934				  "Unexpected TLV callback for follower %s:%d\n",
   1935				  kctl->id.name, kctl->id.index);
   1936			return 0; /* ignore */
   1937		}
   1938		get_ctl_amp_tlv(kctl, _tlv);
   1939		tlv = _tlv;
   1940	} else if (kctl->vd[0].access & SNDRV_CTL_ELEM_ACCESS_TLV_READ)
   1941		tlv = kctl->tlv.p;
   1942
   1943	if (!tlv || tlv[SNDRV_CTL_TLVO_TYPE] != SNDRV_CTL_TLVT_DB_SCALE)
   1944		return 0;
   1945
   1946	step = tlv[SNDRV_CTL_TLVO_DB_SCALE_MUTE_AND_STEP];
   1947	step &= ~TLV_DB_SCALE_MUTE;
   1948	if (!step)
   1949		return 0;
   1950	if (arg->step && arg->step != step) {
   1951		codec_err(arg->codec,
   1952			  "Mismatching dB step for vmaster follower (%d!=%d)\n",
   1953			  arg->step, step);
   1954		return 0;
   1955	}
   1956
   1957	arg->step = step;
   1958	val = -tlv[SNDRV_CTL_TLVO_DB_SCALE_MIN] / step;
   1959	if (val > 0) {
   1960		put_kctl_with_value(follower, val);
   1961		return val;
   1962	}
   1963
   1964	return 0;
   1965}
   1966
   1967/* unmute the follower via snd_ctl_apply_vmaster_followers() */
   1968static int init_follower_unmute(struct snd_kcontrol *follower,
   1969				struct snd_kcontrol *kctl,
   1970				void *_arg)
   1971{
   1972	return put_kctl_with_value(follower, 1);
   1973}
   1974
   1975static int add_follower(struct hda_codec *codec,
   1976			void *data, struct snd_kcontrol *follower)
   1977{
   1978	return snd_ctl_add_follower(data, follower);
   1979}
   1980
   1981/**
   1982 * __snd_hda_add_vmaster - create a virtual master control and add followers
   1983 * @codec: HD-audio codec
   1984 * @name: vmaster control name
   1985 * @tlv: TLV data (optional)
   1986 * @followers: follower control names (optional)
   1987 * @suffix: suffix string to each follower name (optional)
   1988 * @init_follower_vol: initialize followers to unmute/0dB
   1989 * @access: kcontrol access rights
   1990 * @ctl_ret: store the vmaster kcontrol in return
   1991 *
   1992 * Create a virtual master control with the given name.  The TLV data
   1993 * must be either NULL or a valid data.
   1994 *
   1995 * @followers is a NULL-terminated array of strings, each of which is a
   1996 * follower control name.  All controls with these names are assigned to
   1997 * the new virtual master control.
   1998 *
   1999 * This function returns zero if successful or a negative error code.
   2000 */
   2001int __snd_hda_add_vmaster(struct hda_codec *codec, char *name,
   2002			  unsigned int *tlv, const char * const *followers,
   2003			  const char *suffix, bool init_follower_vol,
   2004			  unsigned int access, struct snd_kcontrol **ctl_ret)
   2005{
   2006	struct snd_kcontrol *kctl;
   2007	int err;
   2008
   2009	if (ctl_ret)
   2010		*ctl_ret = NULL;
   2011
   2012	err = map_followers(codec, followers, suffix, check_follower_present, NULL);
   2013	if (err != 1) {
   2014		codec_dbg(codec, "No follower found for %s\n", name);
   2015		return 0;
   2016	}
   2017	kctl = snd_ctl_make_virtual_master(name, tlv);
   2018	if (!kctl)
   2019		return -ENOMEM;
   2020	kctl->vd[0].access |= access;
   2021	err = snd_hda_ctl_add(codec, 0, kctl);
   2022	if (err < 0)
   2023		return err;
   2024
   2025	err = map_followers(codec, followers, suffix, add_follower, kctl);
   2026	if (err < 0)
   2027		return err;
   2028
   2029	/* init with master mute & zero volume */
   2030	put_kctl_with_value(kctl, 0);
   2031	if (init_follower_vol) {
   2032		struct follower_init_arg arg = {
   2033			.codec = codec,
   2034			.step = 0,
   2035		};
   2036		snd_ctl_apply_vmaster_followers(kctl,
   2037						tlv ? init_follower_0dB : init_follower_unmute,
   2038						&arg);
   2039	}
   2040
   2041	if (ctl_ret)
   2042		*ctl_ret = kctl;
   2043	return 0;
   2044}
   2045EXPORT_SYMBOL_GPL(__snd_hda_add_vmaster);
   2046
   2047/* meta hook to call each driver's vmaster hook */
   2048static void vmaster_hook(void *private_data, int enabled)
   2049{
   2050	struct hda_vmaster_mute_hook *hook = private_data;
   2051
   2052	hook->hook(hook->codec, enabled);
   2053}
   2054
   2055/**
   2056 * snd_hda_add_vmaster_hook - Add a vmaster hw specific hook
   2057 * @codec: the HDA codec
   2058 * @hook: the vmaster hook object
   2059 *
   2060 * Add a hw specific hook (like EAPD) with the given vmaster switch kctl.
   2061 */
   2062int snd_hda_add_vmaster_hook(struct hda_codec *codec,
   2063			     struct hda_vmaster_mute_hook *hook)
   2064{
   2065	if (!hook->hook || !hook->sw_kctl)
   2066		return 0;
   2067	hook->codec = codec;
   2068	snd_ctl_add_vmaster_hook(hook->sw_kctl, vmaster_hook, hook);
   2069	return 0;
   2070}
   2071EXPORT_SYMBOL_GPL(snd_hda_add_vmaster_hook);
   2072
   2073/**
   2074 * snd_hda_sync_vmaster_hook - Sync vmaster hook
   2075 * @hook: the vmaster hook
   2076 *
   2077 * Call the hook with the current value for synchronization.
   2078 * Should be called in init callback.
   2079 */
   2080void snd_hda_sync_vmaster_hook(struct hda_vmaster_mute_hook *hook)
   2081{
   2082	if (!hook->hook || !hook->codec)
   2083		return;
   2084	/* don't call vmaster hook in the destructor since it might have
   2085	 * been already destroyed
   2086	 */
   2087	if (hook->codec->bus->shutdown)
   2088		return;
   2089	snd_ctl_sync_vmaster_hook(hook->sw_kctl);
   2090}
   2091EXPORT_SYMBOL_GPL(snd_hda_sync_vmaster_hook);
   2092
   2093
   2094/**
   2095 * snd_hda_mixer_amp_switch_info - Info callback for a standard AMP mixer switch
   2096 * @kcontrol: referred ctl element
   2097 * @uinfo: pointer to get/store the data
   2098 *
   2099 * The control element is supposed to have the private_value field
   2100 * set up via HDA_COMPOSE_AMP_VAL*() or related macros.
   2101 */
   2102int snd_hda_mixer_amp_switch_info(struct snd_kcontrol *kcontrol,
   2103				  struct snd_ctl_elem_info *uinfo)
   2104{
   2105	int chs = get_amp_channels(kcontrol);
   2106
   2107	uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
   2108	uinfo->count = chs == 3 ? 2 : 1;
   2109	uinfo->value.integer.min = 0;
   2110	uinfo->value.integer.max = 1;
   2111	return 0;
   2112}
   2113EXPORT_SYMBOL_GPL(snd_hda_mixer_amp_switch_info);
   2114
   2115/**
   2116 * snd_hda_mixer_amp_switch_get - Get callback for a standard AMP mixer switch
   2117 * @kcontrol: ctl element
   2118 * @ucontrol: pointer to get/store the data
   2119 *
   2120 * The control element is supposed to have the private_value field
   2121 * set up via HDA_COMPOSE_AMP_VAL*() or related macros.
   2122 */
   2123int snd_hda_mixer_amp_switch_get(struct snd_kcontrol *kcontrol,
   2124				 struct snd_ctl_elem_value *ucontrol)
   2125{
   2126	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
   2127	hda_nid_t nid = get_amp_nid(kcontrol);
   2128	int chs = get_amp_channels(kcontrol);
   2129	int dir = get_amp_direction(kcontrol);
   2130	int idx = get_amp_index(kcontrol);
   2131	long *valp = ucontrol->value.integer.value;
   2132
   2133	if (chs & 1)
   2134		*valp++ = (snd_hda_codec_amp_read(codec, nid, 0, dir, idx) &
   2135			   HDA_AMP_MUTE) ? 0 : 1;
   2136	if (chs & 2)
   2137		*valp = (snd_hda_codec_amp_read(codec, nid, 1, dir, idx) &
   2138			 HDA_AMP_MUTE) ? 0 : 1;
   2139	return 0;
   2140}
   2141EXPORT_SYMBOL_GPL(snd_hda_mixer_amp_switch_get);
   2142
   2143/**
   2144 * snd_hda_mixer_amp_switch_put - Put callback for a standard AMP mixer switch
   2145 * @kcontrol: ctl element
   2146 * @ucontrol: pointer to get/store the data
   2147 *
   2148 * The control element is supposed to have the private_value field
   2149 * set up via HDA_COMPOSE_AMP_VAL*() or related macros.
   2150 */
   2151int snd_hda_mixer_amp_switch_put(struct snd_kcontrol *kcontrol,
   2152				 struct snd_ctl_elem_value *ucontrol)
   2153{
   2154	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
   2155	hda_nid_t nid = get_amp_nid(kcontrol);
   2156	int chs = get_amp_channels(kcontrol);
   2157	int dir = get_amp_direction(kcontrol);
   2158	int idx = get_amp_index(kcontrol);
   2159	long *valp = ucontrol->value.integer.value;
   2160	int change = 0;
   2161
   2162	if (chs & 1) {
   2163		change = snd_hda_codec_amp_update(codec, nid, 0, dir, idx,
   2164						  HDA_AMP_MUTE,
   2165						  *valp ? 0 : HDA_AMP_MUTE);
   2166		valp++;
   2167	}
   2168	if (chs & 2)
   2169		change |= snd_hda_codec_amp_update(codec, nid, 1, dir, idx,
   2170						   HDA_AMP_MUTE,
   2171						   *valp ? 0 : HDA_AMP_MUTE);
   2172	hda_call_check_power_status(codec, nid);
   2173	return change;
   2174}
   2175EXPORT_SYMBOL_GPL(snd_hda_mixer_amp_switch_put);
   2176
   2177/*
   2178 * SPDIF out controls
   2179 */
   2180
   2181static int snd_hda_spdif_mask_info(struct snd_kcontrol *kcontrol,
   2182				   struct snd_ctl_elem_info *uinfo)
   2183{
   2184	uinfo->type = SNDRV_CTL_ELEM_TYPE_IEC958;
   2185	uinfo->count = 1;
   2186	return 0;
   2187}
   2188
   2189static int snd_hda_spdif_cmask_get(struct snd_kcontrol *kcontrol,
   2190				   struct snd_ctl_elem_value *ucontrol)
   2191{
   2192	ucontrol->value.iec958.status[0] = IEC958_AES0_PROFESSIONAL |
   2193					   IEC958_AES0_NONAUDIO |
   2194					   IEC958_AES0_CON_EMPHASIS_5015 |
   2195					   IEC958_AES0_CON_NOT_COPYRIGHT;
   2196	ucontrol->value.iec958.status[1] = IEC958_AES1_CON_CATEGORY |
   2197					   IEC958_AES1_CON_ORIGINAL;
   2198	return 0;
   2199}
   2200
   2201static int snd_hda_spdif_pmask_get(struct snd_kcontrol *kcontrol,
   2202				   struct snd_ctl_elem_value *ucontrol)
   2203{
   2204	ucontrol->value.iec958.status[0] = IEC958_AES0_PROFESSIONAL |
   2205					   IEC958_AES0_NONAUDIO |
   2206					   IEC958_AES0_PRO_EMPHASIS_5015;
   2207	return 0;
   2208}
   2209
   2210static int snd_hda_spdif_default_get(struct snd_kcontrol *kcontrol,
   2211				     struct snd_ctl_elem_value *ucontrol)
   2212{
   2213	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
   2214	int idx = kcontrol->private_value;
   2215	struct hda_spdif_out *spdif;
   2216
   2217	if (WARN_ON(codec->spdif_out.used <= idx))
   2218		return -EINVAL;
   2219	mutex_lock(&codec->spdif_mutex);
   2220	spdif = snd_array_elem(&codec->spdif_out, idx);
   2221	ucontrol->value.iec958.status[0] = spdif->status & 0xff;
   2222	ucontrol->value.iec958.status[1] = (spdif->status >> 8) & 0xff;
   2223	ucontrol->value.iec958.status[2] = (spdif->status >> 16) & 0xff;
   2224	ucontrol->value.iec958.status[3] = (spdif->status >> 24) & 0xff;
   2225	mutex_unlock(&codec->spdif_mutex);
   2226
   2227	return 0;
   2228}
   2229
   2230/* convert from SPDIF status bits to HDA SPDIF bits
   2231 * bit 0 (DigEn) is always set zero (to be filled later)
   2232 */
   2233static unsigned short convert_from_spdif_status(unsigned int sbits)
   2234{
   2235	unsigned short val = 0;
   2236
   2237	if (sbits & IEC958_AES0_PROFESSIONAL)
   2238		val |= AC_DIG1_PROFESSIONAL;
   2239	if (sbits & IEC958_AES0_NONAUDIO)
   2240		val |= AC_DIG1_NONAUDIO;
   2241	if (sbits & IEC958_AES0_PROFESSIONAL) {
   2242		if ((sbits & IEC958_AES0_PRO_EMPHASIS) ==
   2243		    IEC958_AES0_PRO_EMPHASIS_5015)
   2244			val |= AC_DIG1_EMPHASIS;
   2245	} else {
   2246		if ((sbits & IEC958_AES0_CON_EMPHASIS) ==
   2247		    IEC958_AES0_CON_EMPHASIS_5015)
   2248			val |= AC_DIG1_EMPHASIS;
   2249		if (!(sbits & IEC958_AES0_CON_NOT_COPYRIGHT))
   2250			val |= AC_DIG1_COPYRIGHT;
   2251		if (sbits & (IEC958_AES1_CON_ORIGINAL << 8))
   2252			val |= AC_DIG1_LEVEL;
   2253		val |= sbits & (IEC958_AES1_CON_CATEGORY << 8);
   2254	}
   2255	return val;
   2256}
   2257
   2258/* convert to SPDIF status bits from HDA SPDIF bits
   2259 */
   2260static unsigned int convert_to_spdif_status(unsigned short val)
   2261{
   2262	unsigned int sbits = 0;
   2263
   2264	if (val & AC_DIG1_NONAUDIO)
   2265		sbits |= IEC958_AES0_NONAUDIO;
   2266	if (val & AC_DIG1_PROFESSIONAL)
   2267		sbits |= IEC958_AES0_PROFESSIONAL;
   2268	if (sbits & IEC958_AES0_PROFESSIONAL) {
   2269		if (val & AC_DIG1_EMPHASIS)
   2270			sbits |= IEC958_AES0_PRO_EMPHASIS_5015;
   2271	} else {
   2272		if (val & AC_DIG1_EMPHASIS)
   2273			sbits |= IEC958_AES0_CON_EMPHASIS_5015;
   2274		if (!(val & AC_DIG1_COPYRIGHT))
   2275			sbits |= IEC958_AES0_CON_NOT_COPYRIGHT;
   2276		if (val & AC_DIG1_LEVEL)
   2277			sbits |= (IEC958_AES1_CON_ORIGINAL << 8);
   2278		sbits |= val & (0x7f << 8);
   2279	}
   2280	return sbits;
   2281}
   2282
   2283/* set digital convert verbs both for the given NID and its followers */
   2284static void set_dig_out(struct hda_codec *codec, hda_nid_t nid,
   2285			int mask, int val)
   2286{
   2287	const hda_nid_t *d;
   2288
   2289	snd_hdac_regmap_update(&codec->core, nid, AC_VERB_SET_DIGI_CONVERT_1,
   2290			       mask, val);
   2291	d = codec->follower_dig_outs;
   2292	if (!d)
   2293		return;
   2294	for (; *d; d++)
   2295		snd_hdac_regmap_update(&codec->core, *d,
   2296				       AC_VERB_SET_DIGI_CONVERT_1, mask, val);
   2297}
   2298
   2299static inline void set_dig_out_convert(struct hda_codec *codec, hda_nid_t nid,
   2300				       int dig1, int dig2)
   2301{
   2302	unsigned int mask = 0;
   2303	unsigned int val = 0;
   2304
   2305	if (dig1 != -1) {
   2306		mask |= 0xff;
   2307		val = dig1;
   2308	}
   2309	if (dig2 != -1) {
   2310		mask |= 0xff00;
   2311		val |= dig2 << 8;
   2312	}
   2313	set_dig_out(codec, nid, mask, val);
   2314}
   2315
   2316static int snd_hda_spdif_default_put(struct snd_kcontrol *kcontrol,
   2317				     struct snd_ctl_elem_value *ucontrol)
   2318{
   2319	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
   2320	int idx = kcontrol->private_value;
   2321	struct hda_spdif_out *spdif;
   2322	hda_nid_t nid;
   2323	unsigned short val;
   2324	int change;
   2325
   2326	if (WARN_ON(codec->spdif_out.used <= idx))
   2327		return -EINVAL;
   2328	mutex_lock(&codec->spdif_mutex);
   2329	spdif = snd_array_elem(&codec->spdif_out, idx);
   2330	nid = spdif->nid;
   2331	spdif->status = ucontrol->value.iec958.status[0] |
   2332		((unsigned int)ucontrol->value.iec958.status[1] << 8) |
   2333		((unsigned int)ucontrol->value.iec958.status[2] << 16) |
   2334		((unsigned int)ucontrol->value.iec958.status[3] << 24);
   2335	val = convert_from_spdif_status(spdif->status);
   2336	val |= spdif->ctls & 1;
   2337	change = spdif->ctls != val;
   2338	spdif->ctls = val;
   2339	if (change && nid != (u16)-1)
   2340		set_dig_out_convert(codec, nid, val & 0xff, (val >> 8) & 0xff);
   2341	mutex_unlock(&codec->spdif_mutex);
   2342	return change;
   2343}
   2344
   2345#define snd_hda_spdif_out_switch_info	snd_ctl_boolean_mono_info
   2346
   2347static int snd_hda_spdif_out_switch_get(struct snd_kcontrol *kcontrol,
   2348					struct snd_ctl_elem_value *ucontrol)
   2349{
   2350	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
   2351	int idx = kcontrol->private_value;
   2352	struct hda_spdif_out *spdif;
   2353
   2354	if (WARN_ON(codec->spdif_out.used <= idx))
   2355		return -EINVAL;
   2356	mutex_lock(&codec->spdif_mutex);
   2357	spdif = snd_array_elem(&codec->spdif_out, idx);
   2358	ucontrol->value.integer.value[0] = spdif->ctls & AC_DIG1_ENABLE;
   2359	mutex_unlock(&codec->spdif_mutex);
   2360	return 0;
   2361}
   2362
   2363static inline void set_spdif_ctls(struct hda_codec *codec, hda_nid_t nid,
   2364				  int dig1, int dig2)
   2365{
   2366	set_dig_out_convert(codec, nid, dig1, dig2);
   2367	/* unmute amp switch (if any) */
   2368	if ((get_wcaps(codec, nid) & AC_WCAP_OUT_AMP) &&
   2369	    (dig1 & AC_DIG1_ENABLE))
   2370		snd_hda_codec_amp_stereo(codec, nid, HDA_OUTPUT, 0,
   2371					    HDA_AMP_MUTE, 0);
   2372}
   2373
   2374static int snd_hda_spdif_out_switch_put(struct snd_kcontrol *kcontrol,
   2375					struct snd_ctl_elem_value *ucontrol)
   2376{
   2377	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
   2378	int idx = kcontrol->private_value;
   2379	struct hda_spdif_out *spdif;
   2380	hda_nid_t nid;
   2381	unsigned short val;
   2382	int change;
   2383
   2384	if (WARN_ON(codec->spdif_out.used <= idx))
   2385		return -EINVAL;
   2386	mutex_lock(&codec->spdif_mutex);
   2387	spdif = snd_array_elem(&codec->spdif_out, idx);
   2388	nid = spdif->nid;
   2389	val = spdif->ctls & ~AC_DIG1_ENABLE;
   2390	if (ucontrol->value.integer.value[0])
   2391		val |= AC_DIG1_ENABLE;
   2392	change = spdif->ctls != val;
   2393	spdif->ctls = val;
   2394	if (change && nid != (u16)-1)
   2395		set_spdif_ctls(codec, nid, val & 0xff, -1);
   2396	mutex_unlock(&codec->spdif_mutex);
   2397	return change;
   2398}
   2399
   2400static const struct snd_kcontrol_new dig_mixes[] = {
   2401	{
   2402		.access = SNDRV_CTL_ELEM_ACCESS_READ,
   2403		.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
   2404		.name = SNDRV_CTL_NAME_IEC958("", PLAYBACK, CON_MASK),
   2405		.info = snd_hda_spdif_mask_info,
   2406		.get = snd_hda_spdif_cmask_get,
   2407	},
   2408	{
   2409		.access = SNDRV_CTL_ELEM_ACCESS_READ,
   2410		.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
   2411		.name = SNDRV_CTL_NAME_IEC958("", PLAYBACK, PRO_MASK),
   2412		.info = snd_hda_spdif_mask_info,
   2413		.get = snd_hda_spdif_pmask_get,
   2414	},
   2415	{
   2416		.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
   2417		.name = SNDRV_CTL_NAME_IEC958("", PLAYBACK, DEFAULT),
   2418		.info = snd_hda_spdif_mask_info,
   2419		.get = snd_hda_spdif_default_get,
   2420		.put = snd_hda_spdif_default_put,
   2421	},
   2422	{
   2423		.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
   2424		.name = SNDRV_CTL_NAME_IEC958("", PLAYBACK, SWITCH),
   2425		.info = snd_hda_spdif_out_switch_info,
   2426		.get = snd_hda_spdif_out_switch_get,
   2427		.put = snd_hda_spdif_out_switch_put,
   2428	},
   2429	{ } /* end */
   2430};
   2431
   2432/**
   2433 * snd_hda_create_dig_out_ctls - create Output SPDIF-related controls
   2434 * @codec: the HDA codec
   2435 * @associated_nid: NID that new ctls associated with
   2436 * @cvt_nid: converter NID
   2437 * @type: HDA_PCM_TYPE_*
   2438 * Creates controls related with the digital output.
   2439 * Called from each patch supporting the digital out.
   2440 *
   2441 * Returns 0 if successful, or a negative error code.
   2442 */
   2443int snd_hda_create_dig_out_ctls(struct hda_codec *codec,
   2444				hda_nid_t associated_nid,
   2445				hda_nid_t cvt_nid,
   2446				int type)
   2447{
   2448	int err;
   2449	struct snd_kcontrol *kctl;
   2450	const struct snd_kcontrol_new *dig_mix;
   2451	int idx = 0;
   2452	int val = 0;
   2453	const int spdif_index = 16;
   2454	struct hda_spdif_out *spdif;
   2455	struct hda_bus *bus = codec->bus;
   2456
   2457	if (bus->primary_dig_out_type == HDA_PCM_TYPE_HDMI &&
   2458	    type == HDA_PCM_TYPE_SPDIF) {
   2459		idx = spdif_index;
   2460	} else if (bus->primary_dig_out_type == HDA_PCM_TYPE_SPDIF &&
   2461		   type == HDA_PCM_TYPE_HDMI) {
   2462		/* suppose a single SPDIF device */
   2463		for (dig_mix = dig_mixes; dig_mix->name; dig_mix++) {
   2464			kctl = find_mixer_ctl(codec, dig_mix->name, 0, 0);
   2465			if (!kctl)
   2466				break;
   2467			kctl->id.index = spdif_index;
   2468		}
   2469		bus->primary_dig_out_type = HDA_PCM_TYPE_HDMI;
   2470	}
   2471	if (!bus->primary_dig_out_type)
   2472		bus->primary_dig_out_type = type;
   2473
   2474	idx = find_empty_mixer_ctl_idx(codec, "IEC958 Playback Switch", idx);
   2475	if (idx < 0) {
   2476		codec_err(codec, "too many IEC958 outputs\n");
   2477		return -EBUSY;
   2478	}
   2479	spdif = snd_array_new(&codec->spdif_out);
   2480	if (!spdif)
   2481		return -ENOMEM;
   2482	for (dig_mix = dig_mixes; dig_mix->name; dig_mix++) {
   2483		kctl = snd_ctl_new1(dig_mix, codec);
   2484		if (!kctl)
   2485			return -ENOMEM;
   2486		kctl->id.index = idx;
   2487		kctl->private_value = codec->spdif_out.used - 1;
   2488		err = snd_hda_ctl_add(codec, associated_nid, kctl);
   2489		if (err < 0)
   2490			return err;
   2491	}
   2492	spdif->nid = cvt_nid;
   2493	snd_hdac_regmap_read(&codec->core, cvt_nid,
   2494			     AC_VERB_GET_DIGI_CONVERT_1, &val);
   2495	spdif->ctls = val;
   2496	spdif->status = convert_to_spdif_status(spdif->ctls);
   2497	return 0;
   2498}
   2499EXPORT_SYMBOL_GPL(snd_hda_create_dig_out_ctls);
   2500
   2501/**
   2502 * snd_hda_spdif_out_of_nid - get the hda_spdif_out entry from the given NID
   2503 * @codec: the HDA codec
   2504 * @nid: widget NID
   2505 *
   2506 * call within spdif_mutex lock
   2507 */
   2508struct hda_spdif_out *snd_hda_spdif_out_of_nid(struct hda_codec *codec,
   2509					       hda_nid_t nid)
   2510{
   2511	struct hda_spdif_out *spdif;
   2512	int i;
   2513
   2514	snd_array_for_each(&codec->spdif_out, i, spdif) {
   2515		if (spdif->nid == nid)
   2516			return spdif;
   2517	}
   2518	return NULL;
   2519}
   2520EXPORT_SYMBOL_GPL(snd_hda_spdif_out_of_nid);
   2521
   2522/**
   2523 * snd_hda_spdif_ctls_unassign - Unassign the given SPDIF ctl
   2524 * @codec: the HDA codec
   2525 * @idx: the SPDIF ctl index
   2526 *
   2527 * Unassign the widget from the given SPDIF control.
   2528 */
   2529void snd_hda_spdif_ctls_unassign(struct hda_codec *codec, int idx)
   2530{
   2531	struct hda_spdif_out *spdif;
   2532
   2533	if (WARN_ON(codec->spdif_out.used <= idx))
   2534		return;
   2535	mutex_lock(&codec->spdif_mutex);
   2536	spdif = snd_array_elem(&codec->spdif_out, idx);
   2537	spdif->nid = (u16)-1;
   2538	mutex_unlock(&codec->spdif_mutex);
   2539}
   2540EXPORT_SYMBOL_GPL(snd_hda_spdif_ctls_unassign);
   2541
   2542/**
   2543 * snd_hda_spdif_ctls_assign - Assign the SPDIF controls to the given NID
   2544 * @codec: the HDA codec
   2545 * @idx: the SPDIF ctl idx
   2546 * @nid: widget NID
   2547 *
   2548 * Assign the widget to the SPDIF control with the given index.
   2549 */
   2550void snd_hda_spdif_ctls_assign(struct hda_codec *codec, int idx, hda_nid_t nid)
   2551{
   2552	struct hda_spdif_out *spdif;
   2553	unsigned short val;
   2554
   2555	if (WARN_ON(codec->spdif_out.used <= idx))
   2556		return;
   2557	mutex_lock(&codec->spdif_mutex);
   2558	spdif = snd_array_elem(&codec->spdif_out, idx);
   2559	if (spdif->nid != nid) {
   2560		spdif->nid = nid;
   2561		val = spdif->ctls;
   2562		set_spdif_ctls(codec, nid, val & 0xff, (val >> 8) & 0xff);
   2563	}
   2564	mutex_unlock(&codec->spdif_mutex);
   2565}
   2566EXPORT_SYMBOL_GPL(snd_hda_spdif_ctls_assign);
   2567
   2568/*
   2569 * SPDIF sharing with analog output
   2570 */
   2571static int spdif_share_sw_get(struct snd_kcontrol *kcontrol,
   2572			      struct snd_ctl_elem_value *ucontrol)
   2573{
   2574	struct hda_multi_out *mout = snd_kcontrol_chip(kcontrol);
   2575	ucontrol->value.integer.value[0] = mout->share_spdif;
   2576	return 0;
   2577}
   2578
   2579static int spdif_share_sw_put(struct snd_kcontrol *kcontrol,
   2580			      struct snd_ctl_elem_value *ucontrol)
   2581{
   2582	struct hda_multi_out *mout = snd_kcontrol_chip(kcontrol);
   2583	mout->share_spdif = !!ucontrol->value.integer.value[0];
   2584	return 0;
   2585}
   2586
   2587static const struct snd_kcontrol_new spdif_share_sw = {
   2588	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
   2589	.name = "IEC958 Default PCM Playback Switch",
   2590	.info = snd_ctl_boolean_mono_info,
   2591	.get = spdif_share_sw_get,
   2592	.put = spdif_share_sw_put,
   2593};
   2594
   2595/**
   2596 * snd_hda_create_spdif_share_sw - create Default PCM switch
   2597 * @codec: the HDA codec
   2598 * @mout: multi-out instance
   2599 */
   2600int snd_hda_create_spdif_share_sw(struct hda_codec *codec,
   2601				  struct hda_multi_out *mout)
   2602{
   2603	struct snd_kcontrol *kctl;
   2604
   2605	if (!mout->dig_out_nid)
   2606		return 0;
   2607
   2608	kctl = snd_ctl_new1(&spdif_share_sw, mout);
   2609	if (!kctl)
   2610		return -ENOMEM;
   2611	/* ATTENTION: here mout is passed as private_data, instead of codec */
   2612	return snd_hda_ctl_add(codec, mout->dig_out_nid, kctl);
   2613}
   2614EXPORT_SYMBOL_GPL(snd_hda_create_spdif_share_sw);
   2615
   2616/*
   2617 * SPDIF input
   2618 */
   2619
   2620#define snd_hda_spdif_in_switch_info	snd_hda_spdif_out_switch_info
   2621
   2622static int snd_hda_spdif_in_switch_get(struct snd_kcontrol *kcontrol,
   2623				       struct snd_ctl_elem_value *ucontrol)
   2624{
   2625	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
   2626
   2627	ucontrol->value.integer.value[0] = codec->spdif_in_enable;
   2628	return 0;
   2629}
   2630
   2631static int snd_hda_spdif_in_switch_put(struct snd_kcontrol *kcontrol,
   2632				       struct snd_ctl_elem_value *ucontrol)
   2633{
   2634	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
   2635	hda_nid_t nid = kcontrol->private_value;
   2636	unsigned int val = !!ucontrol->value.integer.value[0];
   2637	int change;
   2638
   2639	mutex_lock(&codec->spdif_mutex);
   2640	change = codec->spdif_in_enable != val;
   2641	if (change) {
   2642		codec->spdif_in_enable = val;
   2643		snd_hdac_regmap_write(&codec->core, nid,
   2644				      AC_VERB_SET_DIGI_CONVERT_1, val);
   2645	}
   2646	mutex_unlock(&codec->spdif_mutex);
   2647	return change;
   2648}
   2649
   2650static int snd_hda_spdif_in_status_get(struct snd_kcontrol *kcontrol,
   2651				       struct snd_ctl_elem_value *ucontrol)
   2652{
   2653	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
   2654	hda_nid_t nid = kcontrol->private_value;
   2655	unsigned int val;
   2656	unsigned int sbits;
   2657
   2658	snd_hdac_regmap_read(&codec->core, nid,
   2659			     AC_VERB_GET_DIGI_CONVERT_1, &val);
   2660	sbits = convert_to_spdif_status(val);
   2661	ucontrol->value.iec958.status[0] = sbits;
   2662	ucontrol->value.iec958.status[1] = sbits >> 8;
   2663	ucontrol->value.iec958.status[2] = sbits >> 16;
   2664	ucontrol->value.iec958.status[3] = sbits >> 24;
   2665	return 0;
   2666}
   2667
   2668static const struct snd_kcontrol_new dig_in_ctls[] = {
   2669	{
   2670		.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
   2671		.name = SNDRV_CTL_NAME_IEC958("", CAPTURE, SWITCH),
   2672		.info = snd_hda_spdif_in_switch_info,
   2673		.get = snd_hda_spdif_in_switch_get,
   2674		.put = snd_hda_spdif_in_switch_put,
   2675	},
   2676	{
   2677		.access = SNDRV_CTL_ELEM_ACCESS_READ,
   2678		.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
   2679		.name = SNDRV_CTL_NAME_IEC958("", CAPTURE, DEFAULT),
   2680		.info = snd_hda_spdif_mask_info,
   2681		.get = snd_hda_spdif_in_status_get,
   2682	},
   2683	{ } /* end */
   2684};
   2685
   2686/**
   2687 * snd_hda_create_spdif_in_ctls - create Input SPDIF-related controls
   2688 * @codec: the HDA codec
   2689 * @nid: audio in widget NID
   2690 *
   2691 * Creates controls related with the SPDIF input.
   2692 * Called from each patch supporting the SPDIF in.
   2693 *
   2694 * Returns 0 if successful, or a negative error code.
   2695 */
   2696int snd_hda_create_spdif_in_ctls(struct hda_codec *codec, hda_nid_t nid)
   2697{
   2698	int err;
   2699	struct snd_kcontrol *kctl;
   2700	const struct snd_kcontrol_new *dig_mix;
   2701	int idx;
   2702
   2703	idx = find_empty_mixer_ctl_idx(codec, "IEC958 Capture Switch", 0);
   2704	if (idx < 0) {
   2705		codec_err(codec, "too many IEC958 inputs\n");
   2706		return -EBUSY;
   2707	}
   2708	for (dig_mix = dig_in_ctls; dig_mix->name; dig_mix++) {
   2709		kctl = snd_ctl_new1(dig_mix, codec);
   2710		if (!kctl)
   2711			return -ENOMEM;
   2712		kctl->private_value = nid;
   2713		err = snd_hda_ctl_add(codec, nid, kctl);
   2714		if (err < 0)
   2715			return err;
   2716	}
   2717	codec->spdif_in_enable =
   2718		snd_hda_codec_read(codec, nid, 0,
   2719				   AC_VERB_GET_DIGI_CONVERT_1, 0) &
   2720		AC_DIG1_ENABLE;
   2721	return 0;
   2722}
   2723EXPORT_SYMBOL_GPL(snd_hda_create_spdif_in_ctls);
   2724
   2725/**
   2726 * snd_hda_codec_set_power_to_all - Set the power state to all widgets
   2727 * @codec: the HDA codec
   2728 * @fg: function group (not used now)
   2729 * @power_state: the power state to set (AC_PWRST_*)
   2730 *
   2731 * Set the given power state to all widgets that have the power control.
   2732 * If the codec has power_filter set, it evaluates the power state and
   2733 * filter out if it's unchanged as D3.
   2734 */
   2735void snd_hda_codec_set_power_to_all(struct hda_codec *codec, hda_nid_t fg,
   2736				    unsigned int power_state)
   2737{
   2738	hda_nid_t nid;
   2739
   2740	for_each_hda_codec_node(nid, codec) {
   2741		unsigned int wcaps = get_wcaps(codec, nid);
   2742		unsigned int state = power_state;
   2743		if (!(wcaps & AC_WCAP_POWER))
   2744			continue;
   2745		if (codec->power_filter) {
   2746			state = codec->power_filter(codec, nid, power_state);
   2747			if (state != power_state && power_state == AC_PWRST_D3)
   2748				continue;
   2749		}
   2750		snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_POWER_STATE,
   2751				    state);
   2752	}
   2753}
   2754EXPORT_SYMBOL_GPL(snd_hda_codec_set_power_to_all);
   2755
   2756/**
   2757 * snd_hda_codec_eapd_power_filter - A power filter callback for EAPD
   2758 * @codec: the HDA codec
   2759 * @nid: widget NID
   2760 * @power_state: power state to evalue
   2761 *
   2762 * Don't power down the widget if it controls eapd and EAPD_BTLENABLE is set.
   2763 * This can be used a codec power_filter callback.
   2764 */
   2765unsigned int snd_hda_codec_eapd_power_filter(struct hda_codec *codec,
   2766					     hda_nid_t nid,
   2767					     unsigned int power_state)
   2768{
   2769	if (nid == codec->core.afg || nid == codec->core.mfg)
   2770		return power_state;
   2771	if (power_state == AC_PWRST_D3 &&
   2772	    get_wcaps_type(get_wcaps(codec, nid)) == AC_WID_PIN &&
   2773	    (snd_hda_query_pin_caps(codec, nid) & AC_PINCAP_EAPD)) {
   2774		int eapd = snd_hda_codec_read(codec, nid, 0,
   2775					      AC_VERB_GET_EAPD_BTLENABLE, 0);
   2776		if (eapd & 0x02)
   2777			return AC_PWRST_D0;
   2778	}
   2779	return power_state;
   2780}
   2781EXPORT_SYMBOL_GPL(snd_hda_codec_eapd_power_filter);
   2782
   2783/*
   2784 * set power state of the codec, and return the power state
   2785 */
   2786static unsigned int hda_set_power_state(struct hda_codec *codec,
   2787					unsigned int power_state)
   2788{
   2789	hda_nid_t fg = codec->core.afg ? codec->core.afg : codec->core.mfg;
   2790	int count;
   2791	unsigned int state;
   2792	int flags = 0;
   2793
   2794	/* this delay seems necessary to avoid click noise at power-down */
   2795	if (power_state == AC_PWRST_D3) {
   2796		if (codec->depop_delay < 0)
   2797			msleep(codec_has_epss(codec) ? 10 : 100);
   2798		else if (codec->depop_delay > 0)
   2799			msleep(codec->depop_delay);
   2800		flags = HDA_RW_NO_RESPONSE_FALLBACK;
   2801	}
   2802
   2803	/* repeat power states setting at most 10 times*/
   2804	for (count = 0; count < 10; count++) {
   2805		if (codec->patch_ops.set_power_state)
   2806			codec->patch_ops.set_power_state(codec, fg,
   2807							 power_state);
   2808		else {
   2809			state = power_state;
   2810			if (codec->power_filter)
   2811				state = codec->power_filter(codec, fg, state);
   2812			if (state == power_state || power_state != AC_PWRST_D3)
   2813				snd_hda_codec_read(codec, fg, flags,
   2814						   AC_VERB_SET_POWER_STATE,
   2815						   state);
   2816			snd_hda_codec_set_power_to_all(codec, fg, power_state);
   2817		}
   2818		state = snd_hda_sync_power_state(codec, fg, power_state);
   2819		if (!(state & AC_PWRST_ERROR))
   2820			break;
   2821	}
   2822
   2823	return state;
   2824}
   2825
   2826/* sync power states of all widgets;
   2827 * this is called at the end of codec parsing
   2828 */
   2829static void sync_power_up_states(struct hda_codec *codec)
   2830{
   2831	hda_nid_t nid;
   2832
   2833	/* don't care if no filter is used */
   2834	if (!codec->power_filter)
   2835		return;
   2836
   2837	for_each_hda_codec_node(nid, codec) {
   2838		unsigned int wcaps = get_wcaps(codec, nid);
   2839		unsigned int target;
   2840		if (!(wcaps & AC_WCAP_POWER))
   2841			continue;
   2842		target = codec->power_filter(codec, nid, AC_PWRST_D0);
   2843		if (target == AC_PWRST_D0)
   2844			continue;
   2845		if (!snd_hda_check_power_state(codec, nid, target))
   2846			snd_hda_codec_write(codec, nid, 0,
   2847					    AC_VERB_SET_POWER_STATE, target);
   2848	}
   2849}
   2850
   2851#ifdef CONFIG_SND_HDA_RECONFIG
   2852/* execute additional init verbs */
   2853static void hda_exec_init_verbs(struct hda_codec *codec)
   2854{
   2855	if (codec->init_verbs.list)
   2856		snd_hda_sequence_write(codec, codec->init_verbs.list);
   2857}
   2858#else
   2859static inline void hda_exec_init_verbs(struct hda_codec *codec) {}
   2860#endif
   2861
   2862#ifdef CONFIG_PM
   2863/* update the power on/off account with the current jiffies */
   2864static void update_power_acct(struct hda_codec *codec, bool on)
   2865{
   2866	unsigned long delta = jiffies - codec->power_jiffies;
   2867
   2868	if (on)
   2869		codec->power_on_acct += delta;
   2870	else
   2871		codec->power_off_acct += delta;
   2872	codec->power_jiffies += delta;
   2873}
   2874
   2875void snd_hda_update_power_acct(struct hda_codec *codec)
   2876{
   2877	update_power_acct(codec, hda_codec_is_power_on(codec));
   2878}
   2879
   2880/*
   2881 * call suspend and power-down; used both from PM and power-save
   2882 * this function returns the power state in the end
   2883 */
   2884static unsigned int hda_call_codec_suspend(struct hda_codec *codec)
   2885{
   2886	unsigned int state;
   2887
   2888	snd_hdac_enter_pm(&codec->core);
   2889	if (codec->patch_ops.suspend)
   2890		codec->patch_ops.suspend(codec);
   2891	hda_cleanup_all_streams(codec);
   2892	state = hda_set_power_state(codec, AC_PWRST_D3);
   2893	update_power_acct(codec, true);
   2894	snd_hdac_leave_pm(&codec->core);
   2895	return state;
   2896}
   2897
   2898/*
   2899 * kick up codec; used both from PM and power-save
   2900 */
   2901static void hda_call_codec_resume(struct hda_codec *codec)
   2902{
   2903	snd_hdac_enter_pm(&codec->core);
   2904	if (codec->core.regmap)
   2905		regcache_mark_dirty(codec->core.regmap);
   2906
   2907	codec->power_jiffies = jiffies;
   2908
   2909	hda_set_power_state(codec, AC_PWRST_D0);
   2910	restore_shutup_pins(codec);
   2911	hda_exec_init_verbs(codec);
   2912	snd_hda_jack_set_dirty_all(codec);
   2913	if (codec->patch_ops.resume)
   2914		codec->patch_ops.resume(codec);
   2915	else {
   2916		if (codec->patch_ops.init)
   2917			codec->patch_ops.init(codec);
   2918		snd_hda_regmap_sync(codec);
   2919	}
   2920
   2921	if (codec->jackpoll_interval)
   2922		hda_jackpoll_work(&codec->jackpoll_work.work);
   2923	else
   2924		snd_hda_jack_report_sync(codec);
   2925	codec->core.dev.power.power_state = PMSG_ON;
   2926	snd_hdac_leave_pm(&codec->core);
   2927}
   2928
   2929static int hda_codec_runtime_suspend(struct device *dev)
   2930{
   2931	struct hda_codec *codec = dev_to_hda_codec(dev);
   2932	unsigned int state;
   2933
   2934	/* Nothing to do if card registration fails and the component driver never probes */
   2935	if (!codec->card)
   2936		return 0;
   2937
   2938	if (!codec->bus->jackpoll_in_suspend)
   2939		cancel_delayed_work_sync(&codec->jackpoll_work);
   2940
   2941	state = hda_call_codec_suspend(codec);
   2942	if (codec->link_down_at_suspend ||
   2943	    (codec_has_clkstop(codec) && codec_has_epss(codec) &&
   2944	     (state & AC_PWRST_CLK_STOP_OK)))
   2945		snd_hdac_codec_link_down(&codec->core);
   2946	snd_hda_codec_display_power(codec, false);
   2947	return 0;
   2948}
   2949
   2950static int hda_codec_runtime_resume(struct device *dev)
   2951{
   2952	struct hda_codec *codec = dev_to_hda_codec(dev);
   2953
   2954	/* Nothing to do if card registration fails and the component driver never probes */
   2955	if (!codec->card)
   2956		return 0;
   2957
   2958	snd_hda_codec_display_power(codec, true);
   2959	snd_hdac_codec_link_up(&codec->core);
   2960	hda_call_codec_resume(codec);
   2961	pm_runtime_mark_last_busy(dev);
   2962	return 0;
   2963}
   2964
   2965#endif /* CONFIG_PM */
   2966
   2967#ifdef CONFIG_PM_SLEEP
   2968static int hda_codec_pm_prepare(struct device *dev)
   2969{
   2970	dev->power.power_state = PMSG_SUSPEND;
   2971	return pm_runtime_suspended(dev);
   2972}
   2973
   2974static void hda_codec_pm_complete(struct device *dev)
   2975{
   2976	struct hda_codec *codec = dev_to_hda_codec(dev);
   2977
   2978	/* If no other pm-functions are called between prepare() and complete() */
   2979	if (dev->power.power_state.event == PM_EVENT_SUSPEND)
   2980		dev->power.power_state = PMSG_RESUME;
   2981
   2982	if (pm_runtime_suspended(dev) && (codec->jackpoll_interval ||
   2983	    hda_codec_need_resume(codec) || codec->forced_resume))
   2984		pm_request_resume(dev);
   2985}
   2986
   2987static int hda_codec_pm_suspend(struct device *dev)
   2988{
   2989	struct hda_codec *codec = dev_to_hda_codec(dev);
   2990
   2991	cancel_delayed_work_sync(&codec->jackpoll_work);
   2992	dev->power.power_state = PMSG_SUSPEND;
   2993	return pm_runtime_force_suspend(dev);
   2994}
   2995
   2996static int hda_codec_pm_resume(struct device *dev)
   2997{
   2998	dev->power.power_state = PMSG_RESUME;
   2999	return pm_runtime_force_resume(dev);
   3000}
   3001
   3002static int hda_codec_pm_freeze(struct device *dev)
   3003{
   3004	struct hda_codec *codec = dev_to_hda_codec(dev);
   3005
   3006	cancel_delayed_work_sync(&codec->jackpoll_work);
   3007	dev->power.power_state = PMSG_FREEZE;
   3008	return pm_runtime_force_suspend(dev);
   3009}
   3010
   3011static int hda_codec_pm_thaw(struct device *dev)
   3012{
   3013	dev->power.power_state = PMSG_THAW;
   3014	return pm_runtime_force_resume(dev);
   3015}
   3016
   3017static int hda_codec_pm_restore(struct device *dev)
   3018{
   3019	dev->power.power_state = PMSG_RESTORE;
   3020	return pm_runtime_force_resume(dev);
   3021}
   3022#endif /* CONFIG_PM_SLEEP */
   3023
   3024/* referred in hda_bind.c */
   3025const struct dev_pm_ops hda_codec_driver_pm = {
   3026#ifdef CONFIG_PM_SLEEP
   3027	.prepare = hda_codec_pm_prepare,
   3028	.complete = hda_codec_pm_complete,
   3029	.suspend = hda_codec_pm_suspend,
   3030	.resume = hda_codec_pm_resume,
   3031	.freeze = hda_codec_pm_freeze,
   3032	.thaw = hda_codec_pm_thaw,
   3033	.poweroff = hda_codec_pm_suspend,
   3034	.restore = hda_codec_pm_restore,
   3035#endif /* CONFIG_PM_SLEEP */
   3036	SET_RUNTIME_PM_OPS(hda_codec_runtime_suspend, hda_codec_runtime_resume,
   3037			   NULL)
   3038};
   3039
   3040/* suspend the codec at shutdown; called from driver's shutdown callback */
   3041void snd_hda_codec_shutdown(struct hda_codec *codec)
   3042{
   3043	struct hda_pcm *cpcm;
   3044
   3045	/* Skip the shutdown if codec is not registered */
   3046	if (!codec->registered)
   3047		return;
   3048
   3049	cancel_delayed_work_sync(&codec->jackpoll_work);
   3050	list_for_each_entry(cpcm, &codec->pcm_list_head, list)
   3051		snd_pcm_suspend_all(cpcm->pcm);
   3052
   3053	pm_runtime_force_suspend(hda_codec_dev(codec));
   3054	pm_runtime_disable(hda_codec_dev(codec));
   3055}
   3056
   3057/*
   3058 * add standard channel maps if not specified
   3059 */
   3060static int add_std_chmaps(struct hda_codec *codec)
   3061{
   3062	struct hda_pcm *pcm;
   3063	int str, err;
   3064
   3065	list_for_each_entry(pcm, &codec->pcm_list_head, list) {
   3066		for (str = 0; str < 2; str++) {
   3067			struct hda_pcm_stream *hinfo = &pcm->stream[str];
   3068			struct snd_pcm_chmap *chmap;
   3069			const struct snd_pcm_chmap_elem *elem;
   3070
   3071			if (!pcm->pcm || pcm->own_chmap || !hinfo->substreams)
   3072				continue;
   3073			elem = hinfo->chmap ? hinfo->chmap : snd_pcm_std_chmaps;
   3074			err = snd_pcm_add_chmap_ctls(pcm->pcm, str, elem,
   3075						     hinfo->channels_max,
   3076						     0, &chmap);
   3077			if (err < 0)
   3078				return err;
   3079			chmap->channel_mask = SND_PCM_CHMAP_MASK_2468;
   3080		}
   3081	}
   3082	return 0;
   3083}
   3084
   3085/* default channel maps for 2.1 speakers;
   3086 * since HD-audio supports only stereo, odd number channels are omitted
   3087 */
   3088const struct snd_pcm_chmap_elem snd_pcm_2_1_chmaps[] = {
   3089	{ .channels = 2,
   3090	  .map = { SNDRV_CHMAP_FL, SNDRV_CHMAP_FR } },
   3091	{ .channels = 4,
   3092	  .map = { SNDRV_CHMAP_FL, SNDRV_CHMAP_FR,
   3093		   SNDRV_CHMAP_LFE, SNDRV_CHMAP_LFE } },
   3094	{ }
   3095};
   3096EXPORT_SYMBOL_GPL(snd_pcm_2_1_chmaps);
   3097
   3098int snd_hda_codec_build_controls(struct hda_codec *codec)
   3099{
   3100	int err = 0;
   3101	hda_exec_init_verbs(codec);
   3102	/* continue to initialize... */
   3103	if (codec->patch_ops.init)
   3104		err = codec->patch_ops.init(codec);
   3105	if (!err && codec->patch_ops.build_controls)
   3106		err = codec->patch_ops.build_controls(codec);
   3107	if (err < 0)
   3108		return err;
   3109
   3110	/* we create chmaps here instead of build_pcms */
   3111	err = add_std_chmaps(codec);
   3112	if (err < 0)
   3113		return err;
   3114
   3115	if (codec->jackpoll_interval)
   3116		hda_jackpoll_work(&codec->jackpoll_work.work);
   3117	else
   3118		snd_hda_jack_report_sync(codec); /* call at the last init point */
   3119	sync_power_up_states(codec);
   3120	return 0;
   3121}
   3122EXPORT_SYMBOL_GPL(snd_hda_codec_build_controls);
   3123
   3124/*
   3125 * PCM stuff
   3126 */
   3127static int hda_pcm_default_open_close(struct hda_pcm_stream *hinfo,
   3128				      struct hda_codec *codec,
   3129				      struct snd_pcm_substream *substream)
   3130{
   3131	return 0;
   3132}
   3133
   3134static int hda_pcm_default_prepare(struct hda_pcm_stream *hinfo,
   3135				   struct hda_codec *codec,
   3136				   unsigned int stream_tag,
   3137				   unsigned int format,
   3138				   struct snd_pcm_substream *substream)
   3139{
   3140	snd_hda_codec_setup_stream(codec, hinfo->nid, stream_tag, 0, format);
   3141	return 0;
   3142}
   3143
   3144static int hda_pcm_default_cleanup(struct hda_pcm_stream *hinfo,
   3145				   struct hda_codec *codec,
   3146				   struct snd_pcm_substream *substream)
   3147{
   3148	snd_hda_codec_cleanup_stream(codec, hinfo->nid);
   3149	return 0;
   3150}
   3151
   3152static int set_pcm_default_values(struct hda_codec *codec,
   3153				  struct hda_pcm_stream *info)
   3154{
   3155	int err;
   3156
   3157	/* query support PCM information from the given NID */
   3158	if (info->nid && (!info->rates || !info->formats)) {
   3159		err = snd_hda_query_supported_pcm(codec, info->nid,
   3160				info->rates ? NULL : &info->rates,
   3161				info->formats ? NULL : &info->formats,
   3162				info->maxbps ? NULL : &info->maxbps);
   3163		if (err < 0)
   3164			return err;
   3165	}
   3166	if (info->ops.open == NULL)
   3167		info->ops.open = hda_pcm_default_open_close;
   3168	if (info->ops.close == NULL)
   3169		info->ops.close = hda_pcm_default_open_close;
   3170	if (info->ops.prepare == NULL) {
   3171		if (snd_BUG_ON(!info->nid))
   3172			return -EINVAL;
   3173		info->ops.prepare = hda_pcm_default_prepare;
   3174	}
   3175	if (info->ops.cleanup == NULL) {
   3176		if (snd_BUG_ON(!info->nid))
   3177			return -EINVAL;
   3178		info->ops.cleanup = hda_pcm_default_cleanup;
   3179	}
   3180	return 0;
   3181}
   3182
   3183/*
   3184 * codec prepare/cleanup entries
   3185 */
   3186/**
   3187 * snd_hda_codec_prepare - Prepare a stream
   3188 * @codec: the HDA codec
   3189 * @hinfo: PCM information
   3190 * @stream: stream tag to assign
   3191 * @format: format id to assign
   3192 * @substream: PCM substream to assign
   3193 *
   3194 * Calls the prepare callback set by the codec with the given arguments.
   3195 * Clean up the inactive streams when successful.
   3196 */
   3197int snd_hda_codec_prepare(struct hda_codec *codec,
   3198			  struct hda_pcm_stream *hinfo,
   3199			  unsigned int stream,
   3200			  unsigned int format,
   3201			  struct snd_pcm_substream *substream)
   3202{
   3203	int ret;
   3204	mutex_lock(&codec->bus->prepare_mutex);
   3205	if (hinfo->ops.prepare)
   3206		ret = hinfo->ops.prepare(hinfo, codec, stream, format,
   3207					 substream);
   3208	else
   3209		ret = -ENODEV;
   3210	if (ret >= 0)
   3211		purify_inactive_streams(codec);
   3212	mutex_unlock(&codec->bus->prepare_mutex);
   3213	return ret;
   3214}
   3215EXPORT_SYMBOL_GPL(snd_hda_codec_prepare);
   3216
   3217/**
   3218 * snd_hda_codec_cleanup - Clean up stream resources
   3219 * @codec: the HDA codec
   3220 * @hinfo: PCM information
   3221 * @substream: PCM substream
   3222 *
   3223 * Calls the cleanup callback set by the codec with the given arguments.
   3224 */
   3225void snd_hda_codec_cleanup(struct hda_codec *codec,
   3226			   struct hda_pcm_stream *hinfo,
   3227			   struct snd_pcm_substream *substream)
   3228{
   3229	mutex_lock(&codec->bus->prepare_mutex);
   3230	if (hinfo->ops.cleanup)
   3231		hinfo->ops.cleanup(hinfo, codec, substream);
   3232	mutex_unlock(&codec->bus->prepare_mutex);
   3233}
   3234EXPORT_SYMBOL_GPL(snd_hda_codec_cleanup);
   3235
   3236/* global */
   3237const char *snd_hda_pcm_type_name[HDA_PCM_NTYPES] = {
   3238	"Audio", "SPDIF", "HDMI", "Modem"
   3239};
   3240
   3241/*
   3242 * get the empty PCM device number to assign
   3243 */
   3244static int get_empty_pcm_device(struct hda_bus *bus, unsigned int type)
   3245{
   3246	/* audio device indices; not linear to keep compatibility */
   3247	/* assigned to static slots up to dev#10; if more needed, assign
   3248	 * the later slot dynamically (when CONFIG_SND_DYNAMIC_MINORS=y)
   3249	 */
   3250	static const int audio_idx[HDA_PCM_NTYPES][5] = {
   3251		[HDA_PCM_TYPE_AUDIO] = { 0, 2, 4, 5, -1 },
   3252		[HDA_PCM_TYPE_SPDIF] = { 1, -1 },
   3253		[HDA_PCM_TYPE_HDMI]  = { 3, 7, 8, 9, -1 },
   3254		[HDA_PCM_TYPE_MODEM] = { 6, -1 },
   3255	};
   3256	int i;
   3257
   3258	if (type >= HDA_PCM_NTYPES) {
   3259		dev_err(bus->card->dev, "Invalid PCM type %d\n", type);
   3260		return -EINVAL;
   3261	}
   3262
   3263	for (i = 0; audio_idx[type][i] >= 0; i++) {
   3264#ifndef CONFIG_SND_DYNAMIC_MINORS
   3265		if (audio_idx[type][i] >= 8)
   3266			break;
   3267#endif
   3268		if (!test_and_set_bit(audio_idx[type][i], bus->pcm_dev_bits))
   3269			return audio_idx[type][i];
   3270	}
   3271
   3272#ifdef CONFIG_SND_DYNAMIC_MINORS
   3273	/* non-fixed slots starting from 10 */
   3274	for (i = 10; i < 32; i++) {
   3275		if (!test_and_set_bit(i, bus->pcm_dev_bits))
   3276			return i;
   3277	}
   3278#endif
   3279
   3280	dev_warn(bus->card->dev, "Too many %s devices\n",
   3281		snd_hda_pcm_type_name[type]);
   3282#ifndef CONFIG_SND_DYNAMIC_MINORS
   3283	dev_warn(bus->card->dev,
   3284		 "Consider building the kernel with CONFIG_SND_DYNAMIC_MINORS=y\n");
   3285#endif
   3286	return -EAGAIN;
   3287}
   3288
   3289/* call build_pcms ops of the given codec and set up the default parameters */
   3290int snd_hda_codec_parse_pcms(struct hda_codec *codec)
   3291{
   3292	struct hda_pcm *cpcm;
   3293	int err;
   3294
   3295	if (!list_empty(&codec->pcm_list_head))
   3296		return 0; /* already parsed */
   3297
   3298	if (!codec->patch_ops.build_pcms)
   3299		return 0;
   3300
   3301	err = codec->patch_ops.build_pcms(codec);
   3302	if (err < 0) {
   3303		codec_err(codec, "cannot build PCMs for #%d (error %d)\n",
   3304			  codec->core.addr, err);
   3305		return err;
   3306	}
   3307
   3308	list_for_each_entry(cpcm, &codec->pcm_list_head, list) {
   3309		int stream;
   3310
   3311		for (stream = 0; stream < 2; stream++) {
   3312			struct hda_pcm_stream *info = &cpcm->stream[stream];
   3313
   3314			if (!info->substreams)
   3315				continue;
   3316			err = set_pcm_default_values(codec, info);
   3317			if (err < 0) {
   3318				codec_warn(codec,
   3319					   "fail to setup default for PCM %s\n",
   3320					   cpcm->name);
   3321				return err;
   3322			}
   3323		}
   3324	}
   3325
   3326	return 0;
   3327}
   3328EXPORT_SYMBOL_GPL(snd_hda_codec_parse_pcms);
   3329
   3330/* assign all PCMs of the given codec */
   3331int snd_hda_codec_build_pcms(struct hda_codec *codec)
   3332{
   3333	struct hda_bus *bus = codec->bus;
   3334	struct hda_pcm *cpcm;
   3335	int dev, err;
   3336
   3337	err = snd_hda_codec_parse_pcms(codec);
   3338	if (err < 0)
   3339		return err;
   3340
   3341	/* attach a new PCM streams */
   3342	list_for_each_entry(cpcm, &codec->pcm_list_head, list) {
   3343		if (cpcm->pcm)
   3344			continue; /* already attached */
   3345		if (!cpcm->stream[0].substreams && !cpcm->stream[1].substreams)
   3346			continue; /* no substreams assigned */
   3347
   3348		dev = get_empty_pcm_device(bus, cpcm->pcm_type);
   3349		if (dev < 0) {
   3350			cpcm->device = SNDRV_PCM_INVALID_DEVICE;
   3351			continue; /* no fatal error */
   3352		}
   3353		cpcm->device = dev;
   3354		err =  snd_hda_attach_pcm_stream(bus, codec, cpcm);
   3355		if (err < 0) {
   3356			codec_err(codec,
   3357				  "cannot attach PCM stream %d for codec #%d\n",
   3358				  dev, codec->core.addr);
   3359			continue; /* no fatal error */
   3360		}
   3361	}
   3362
   3363	return 0;
   3364}
   3365
   3366/**
   3367 * snd_hda_add_new_ctls - create controls from the array
   3368 * @codec: the HDA codec
   3369 * @knew: the array of struct snd_kcontrol_new
   3370 *
   3371 * This helper function creates and add new controls in the given array.
   3372 * The array must be terminated with an empty entry as terminator.
   3373 *
   3374 * Returns 0 if successful, or a negative error code.
   3375 */
   3376int snd_hda_add_new_ctls(struct hda_codec *codec,
   3377			 const struct snd_kcontrol_new *knew)
   3378{
   3379	int err;
   3380
   3381	for (; knew->name; knew++) {
   3382		struct snd_kcontrol *kctl;
   3383		int addr = 0, idx = 0;
   3384		if (knew->iface == (__force snd_ctl_elem_iface_t)-1)
   3385			continue; /* skip this codec private value */
   3386		for (;;) {
   3387			kctl = snd_ctl_new1(knew, codec);
   3388			if (!kctl)
   3389				return -ENOMEM;
   3390			if (addr > 0)
   3391				kctl->id.device = addr;
   3392			if (idx > 0)
   3393				kctl->id.index = idx;
   3394			err = snd_hda_ctl_add(codec, 0, kctl);
   3395			if (!err)
   3396				break;
   3397			/* try first with another device index corresponding to
   3398			 * the codec addr; if it still fails (or it's the
   3399			 * primary codec), then try another control index
   3400			 */
   3401			if (!addr && codec->core.addr)
   3402				addr = codec->core.addr;
   3403			else if (!idx && !knew->index) {
   3404				idx = find_empty_mixer_ctl_idx(codec,
   3405							       knew->name, 0);
   3406				if (idx <= 0)
   3407					return err;
   3408			} else
   3409				return err;
   3410		}
   3411	}
   3412	return 0;
   3413}
   3414EXPORT_SYMBOL_GPL(snd_hda_add_new_ctls);
   3415
   3416#ifdef CONFIG_PM
   3417/**
   3418 * snd_hda_codec_set_power_save - Configure codec's runtime PM
   3419 * @codec: codec device to configure
   3420 * @delay: autosuspend delay
   3421 */
   3422void snd_hda_codec_set_power_save(struct hda_codec *codec, int delay)
   3423{
   3424	struct device *dev = hda_codec_dev(codec);
   3425
   3426	if (delay == 0 && codec->auto_runtime_pm)
   3427		delay = 3000;
   3428
   3429	if (delay > 0) {
   3430		pm_runtime_set_autosuspend_delay(dev, delay);
   3431		pm_runtime_use_autosuspend(dev);
   3432		pm_runtime_allow(dev);
   3433		if (!pm_runtime_suspended(dev))
   3434			pm_runtime_mark_last_busy(dev);
   3435	} else {
   3436		pm_runtime_dont_use_autosuspend(dev);
   3437		pm_runtime_forbid(dev);
   3438	}
   3439}
   3440EXPORT_SYMBOL_GPL(snd_hda_codec_set_power_save);
   3441
   3442/**
   3443 * snd_hda_set_power_save - reprogram autosuspend for the given delay
   3444 * @bus: HD-audio bus
   3445 * @delay: autosuspend delay in msec, 0 = off
   3446 *
   3447 * Synchronize the runtime PM autosuspend state from the power_save option.
   3448 */
   3449void snd_hda_set_power_save(struct hda_bus *bus, int delay)
   3450{
   3451	struct hda_codec *c;
   3452
   3453	list_for_each_codec(c, bus)
   3454		snd_hda_codec_set_power_save(c, delay);
   3455}
   3456EXPORT_SYMBOL_GPL(snd_hda_set_power_save);
   3457
   3458/**
   3459 * snd_hda_check_amp_list_power - Check the amp list and update the power
   3460 * @codec: HD-audio codec
   3461 * @check: the object containing an AMP list and the status
   3462 * @nid: NID to check / update
   3463 *
   3464 * Check whether the given NID is in the amp list.  If it's in the list,
   3465 * check the current AMP status, and update the power-status according
   3466 * to the mute status.
   3467 *
   3468 * This function is supposed to be set or called from the check_power_status
   3469 * patch ops.
   3470 */
   3471int snd_hda_check_amp_list_power(struct hda_codec *codec,
   3472				 struct hda_loopback_check *check,
   3473				 hda_nid_t nid)
   3474{
   3475	const struct hda_amp_list *p;
   3476	int ch, v;
   3477
   3478	if (!check->amplist)
   3479		return 0;
   3480	for (p = check->amplist; p->nid; p++) {
   3481		if (p->nid == nid)
   3482			break;
   3483	}
   3484	if (!p->nid)
   3485		return 0; /* nothing changed */
   3486
   3487	for (p = check->amplist; p->nid; p++) {
   3488		for (ch = 0; ch < 2; ch++) {
   3489			v = snd_hda_codec_amp_read(codec, p->nid, ch, p->dir,
   3490						   p->idx);
   3491			if (!(v & HDA_AMP_MUTE) && v > 0) {
   3492				if (!check->power_on) {
   3493					check->power_on = 1;
   3494					snd_hda_power_up_pm(codec);
   3495				}
   3496				return 1;
   3497			}
   3498		}
   3499	}
   3500	if (check->power_on) {
   3501		check->power_on = 0;
   3502		snd_hda_power_down_pm(codec);
   3503	}
   3504	return 0;
   3505}
   3506EXPORT_SYMBOL_GPL(snd_hda_check_amp_list_power);
   3507#endif
   3508
   3509/*
   3510 * input MUX helper
   3511 */
   3512
   3513/**
   3514 * snd_hda_input_mux_info - Info callback helper for the input-mux enum
   3515 * @imux: imux helper object
   3516 * @uinfo: pointer to get/store the data
   3517 */
   3518int snd_hda_input_mux_info(const struct hda_input_mux *imux,
   3519			   struct snd_ctl_elem_info *uinfo)
   3520{
   3521	unsigned int index;
   3522
   3523	uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
   3524	uinfo->count = 1;
   3525	uinfo->value.enumerated.items = imux->num_items;
   3526	if (!imux->num_items)
   3527		return 0;
   3528	index = uinfo->value.enumerated.item;
   3529	if (index >= imux->num_items)
   3530		index = imux->num_items - 1;
   3531	strcpy(uinfo->value.enumerated.name, imux->items[index].label);
   3532	return 0;
   3533}
   3534EXPORT_SYMBOL_GPL(snd_hda_input_mux_info);
   3535
   3536/**
   3537 * snd_hda_input_mux_put - Put callback helper for the input-mux enum
   3538 * @codec: the HDA codec
   3539 * @imux: imux helper object
   3540 * @ucontrol: pointer to get/store the data
   3541 * @nid: input mux NID
   3542 * @cur_val: pointer to get/store the current imux value
   3543 */
   3544int snd_hda_input_mux_put(struct hda_codec *codec,
   3545			  const struct hda_input_mux *imux,
   3546			  struct snd_ctl_elem_value *ucontrol,
   3547			  hda_nid_t nid,
   3548			  unsigned int *cur_val)
   3549{
   3550	unsigned int idx;
   3551
   3552	if (!imux->num_items)
   3553		return 0;
   3554	idx = ucontrol->value.enumerated.item[0];
   3555	if (idx >= imux->num_items)
   3556		idx = imux->num_items - 1;
   3557	if (*cur_val == idx)
   3558		return 0;
   3559	snd_hda_codec_write_cache(codec, nid, 0, AC_VERB_SET_CONNECT_SEL,
   3560				  imux->items[idx].index);
   3561	*cur_val = idx;
   3562	return 1;
   3563}
   3564EXPORT_SYMBOL_GPL(snd_hda_input_mux_put);
   3565
   3566
   3567/**
   3568 * snd_hda_enum_helper_info - Helper for simple enum ctls
   3569 * @kcontrol: ctl element
   3570 * @uinfo: pointer to get/store the data
   3571 * @num_items: number of enum items
   3572 * @texts: enum item string array
   3573 *
   3574 * process kcontrol info callback of a simple string enum array
   3575 * when @num_items is 0 or @texts is NULL, assume a boolean enum array
   3576 */
   3577int snd_hda_enum_helper_info(struct snd_kcontrol *kcontrol,
   3578			     struct snd_ctl_elem_info *uinfo,
   3579			     int num_items, const char * const *texts)
   3580{
   3581	static const char * const texts_default[] = {
   3582		"Disabled", "Enabled"
   3583	};
   3584
   3585	if (!texts || !num_items) {
   3586		num_items = 2;
   3587		texts = texts_default;
   3588	}
   3589
   3590	return snd_ctl_enum_info(uinfo, 1, num_items, texts);
   3591}
   3592EXPORT_SYMBOL_GPL(snd_hda_enum_helper_info);
   3593
   3594/*
   3595 * Multi-channel / digital-out PCM helper functions
   3596 */
   3597
   3598/* setup SPDIF output stream */
   3599static void setup_dig_out_stream(struct hda_codec *codec, hda_nid_t nid,
   3600				 unsigned int stream_tag, unsigned int format)
   3601{
   3602	struct hda_spdif_out *spdif;
   3603	unsigned int curr_fmt;
   3604	bool reset;
   3605
   3606	spdif = snd_hda_spdif_out_of_nid(codec, nid);
   3607	/* Add sanity check to pass klockwork check.
   3608	 * This should never happen.
   3609	 */
   3610	if (WARN_ON(spdif == NULL))
   3611		return;
   3612
   3613	curr_fmt = snd_hda_codec_read(codec, nid, 0,
   3614				      AC_VERB_GET_STREAM_FORMAT, 0);
   3615	reset = codec->spdif_status_reset &&
   3616		(spdif->ctls & AC_DIG1_ENABLE) &&
   3617		curr_fmt != format;
   3618
   3619	/* turn off SPDIF if needed; otherwise the IEC958 bits won't be
   3620	   updated */
   3621	if (reset)
   3622		set_dig_out_convert(codec, nid,
   3623				    spdif->ctls & ~AC_DIG1_ENABLE & 0xff,
   3624				    -1);
   3625	snd_hda_codec_setup_stream(codec, nid, stream_tag, 0, format);
   3626	if (codec->follower_dig_outs) {
   3627		const hda_nid_t *d;
   3628		for (d = codec->follower_dig_outs; *d; d++)
   3629			snd_hda_codec_setup_stream(codec, *d, stream_tag, 0,
   3630						   format);
   3631	}
   3632	/* turn on again (if needed) */
   3633	if (reset)
   3634		set_dig_out_convert(codec, nid,
   3635				    spdif->ctls & 0xff, -1);
   3636}
   3637
   3638static void cleanup_dig_out_stream(struct hda_codec *codec, hda_nid_t nid)
   3639{
   3640	snd_hda_codec_cleanup_stream(codec, nid);
   3641	if (codec->follower_dig_outs) {
   3642		const hda_nid_t *d;
   3643		for (d = codec->follower_dig_outs; *d; d++)
   3644			snd_hda_codec_cleanup_stream(codec, *d);
   3645	}
   3646}
   3647
   3648/**
   3649 * snd_hda_multi_out_dig_open - open the digital out in the exclusive mode
   3650 * @codec: the HDA codec
   3651 * @mout: hda_multi_out object
   3652 */
   3653int snd_hda_multi_out_dig_open(struct hda_codec *codec,
   3654			       struct hda_multi_out *mout)
   3655{
   3656	mutex_lock(&codec->spdif_mutex);
   3657	if (mout->dig_out_used == HDA_DIG_ANALOG_DUP)
   3658		/* already opened as analog dup; reset it once */
   3659		cleanup_dig_out_stream(codec, mout->dig_out_nid);
   3660	mout->dig_out_used = HDA_DIG_EXCLUSIVE;
   3661	mutex_unlock(&codec->spdif_mutex);
   3662	return 0;
   3663}
   3664EXPORT_SYMBOL_GPL(snd_hda_multi_out_dig_open);
   3665
   3666/**
   3667 * snd_hda_multi_out_dig_prepare - prepare the digital out stream
   3668 * @codec: the HDA codec
   3669 * @mout: hda_multi_out object
   3670 * @stream_tag: stream tag to assign
   3671 * @format: format id to assign
   3672 * @substream: PCM substream to assign
   3673 */
   3674int snd_hda_multi_out_dig_prepare(struct hda_codec *codec,
   3675				  struct hda_multi_out *mout,
   3676				  unsigned int stream_tag,
   3677				  unsigned int format,
   3678				  struct snd_pcm_substream *substream)
   3679{
   3680	mutex_lock(&codec->spdif_mutex);
   3681	setup_dig_out_stream(codec, mout->dig_out_nid, stream_tag, format);
   3682	mutex_unlock(&codec->spdif_mutex);
   3683	return 0;
   3684}
   3685EXPORT_SYMBOL_GPL(snd_hda_multi_out_dig_prepare);
   3686
   3687/**
   3688 * snd_hda_multi_out_dig_cleanup - clean-up the digital out stream
   3689 * @codec: the HDA codec
   3690 * @mout: hda_multi_out object
   3691 */
   3692int snd_hda_multi_out_dig_cleanup(struct hda_codec *codec,
   3693				  struct hda_multi_out *mout)
   3694{
   3695	mutex_lock(&codec->spdif_mutex);
   3696	cleanup_dig_out_stream(codec, mout->dig_out_nid);
   3697	mutex_unlock(&codec->spdif_mutex);
   3698	return 0;
   3699}
   3700EXPORT_SYMBOL_GPL(snd_hda_multi_out_dig_cleanup);
   3701
   3702/**
   3703 * snd_hda_multi_out_dig_close - release the digital out stream
   3704 * @codec: the HDA codec
   3705 * @mout: hda_multi_out object
   3706 */
   3707int snd_hda_multi_out_dig_close(struct hda_codec *codec,
   3708				struct hda_multi_out *mout)
   3709{
   3710	mutex_lock(&codec->spdif_mutex);
   3711	mout->dig_out_used = 0;
   3712	mutex_unlock(&codec->spdif_mutex);
   3713	return 0;
   3714}
   3715EXPORT_SYMBOL_GPL(snd_hda_multi_out_dig_close);
   3716
   3717/**
   3718 * snd_hda_multi_out_analog_open - open analog outputs
   3719 * @codec: the HDA codec
   3720 * @mout: hda_multi_out object
   3721 * @substream: PCM substream to assign
   3722 * @hinfo: PCM information to assign
   3723 *
   3724 * Open analog outputs and set up the hw-constraints.
   3725 * If the digital outputs can be opened as follower, open the digital
   3726 * outputs, too.
   3727 */
   3728int snd_hda_multi_out_analog_open(struct hda_codec *codec,
   3729				  struct hda_multi_out *mout,
   3730				  struct snd_pcm_substream *substream,
   3731				  struct hda_pcm_stream *hinfo)
   3732{
   3733	struct snd_pcm_runtime *runtime = substream->runtime;
   3734	runtime->hw.channels_max = mout->max_channels;
   3735	if (mout->dig_out_nid) {
   3736		if (!mout->analog_rates) {
   3737			mout->analog_rates = hinfo->rates;
   3738			mout->analog_formats = hinfo->formats;
   3739			mout->analog_maxbps = hinfo->maxbps;
   3740		} else {
   3741			runtime->hw.rates = mout->analog_rates;
   3742			runtime->hw.formats = mout->analog_formats;
   3743			hinfo->maxbps = mout->analog_maxbps;
   3744		}
   3745		if (!mout->spdif_rates) {
   3746			snd_hda_query_supported_pcm(codec, mout->dig_out_nid,
   3747						    &mout->spdif_rates,
   3748						    &mout->spdif_formats,
   3749						    &mout->spdif_maxbps);
   3750		}
   3751		mutex_lock(&codec->spdif_mutex);
   3752		if (mout->share_spdif) {
   3753			if ((runtime->hw.rates & mout->spdif_rates) &&
   3754			    (runtime->hw.formats & mout->spdif_formats)) {
   3755				runtime->hw.rates &= mout->spdif_rates;
   3756				runtime->hw.formats &= mout->spdif_formats;
   3757				if (mout->spdif_maxbps < hinfo->maxbps)
   3758					hinfo->maxbps = mout->spdif_maxbps;
   3759			} else {
   3760				mout->share_spdif = 0;
   3761				/* FIXME: need notify? */
   3762			}
   3763		}
   3764		mutex_unlock(&codec->spdif_mutex);
   3765	}
   3766	return snd_pcm_hw_constraint_step(substream->runtime, 0,
   3767					  SNDRV_PCM_HW_PARAM_CHANNELS, 2);
   3768}
   3769EXPORT_SYMBOL_GPL(snd_hda_multi_out_analog_open);
   3770
   3771/**
   3772 * snd_hda_multi_out_analog_prepare - Preapre the analog outputs.
   3773 * @codec: the HDA codec
   3774 * @mout: hda_multi_out object
   3775 * @stream_tag: stream tag to assign
   3776 * @format: format id to assign
   3777 * @substream: PCM substream to assign
   3778 *
   3779 * Set up the i/o for analog out.
   3780 * When the digital out is available, copy the front out to digital out, too.
   3781 */
   3782int snd_hda_multi_out_analog_prepare(struct hda_codec *codec,
   3783				     struct hda_multi_out *mout,
   3784				     unsigned int stream_tag,
   3785				     unsigned int format,
   3786				     struct snd_pcm_substream *substream)
   3787{
   3788	const hda_nid_t *nids = mout->dac_nids;
   3789	int chs = substream->runtime->channels;
   3790	struct hda_spdif_out *spdif;
   3791	int i;
   3792
   3793	mutex_lock(&codec->spdif_mutex);
   3794	spdif = snd_hda_spdif_out_of_nid(codec, mout->dig_out_nid);
   3795	if (mout->dig_out_nid && mout->share_spdif &&
   3796	    mout->dig_out_used != HDA_DIG_EXCLUSIVE) {
   3797		if (chs == 2 && spdif != NULL &&
   3798		    snd_hda_is_supported_format(codec, mout->dig_out_nid,
   3799						format) &&
   3800		    !(spdif->status & IEC958_AES0_NONAUDIO)) {
   3801			mout->dig_out_used = HDA_DIG_ANALOG_DUP;
   3802			setup_dig_out_stream(codec, mout->dig_out_nid,
   3803					     stream_tag, format);
   3804		} else {
   3805			mout->dig_out_used = 0;
   3806			cleanup_dig_out_stream(codec, mout->dig_out_nid);
   3807		}
   3808	}
   3809	mutex_unlock(&codec->spdif_mutex);
   3810
   3811	/* front */
   3812	snd_hda_codec_setup_stream(codec, nids[HDA_FRONT], stream_tag,
   3813				   0, format);
   3814	if (!mout->no_share_stream &&
   3815	    mout->hp_nid && mout->hp_nid != nids[HDA_FRONT])
   3816		/* headphone out will just decode front left/right (stereo) */
   3817		snd_hda_codec_setup_stream(codec, mout->hp_nid, stream_tag,
   3818					   0, format);
   3819	/* extra outputs copied from front */
   3820	for (i = 0; i < ARRAY_SIZE(mout->hp_out_nid); i++)
   3821		if (!mout->no_share_stream && mout->hp_out_nid[i])
   3822			snd_hda_codec_setup_stream(codec,
   3823						   mout->hp_out_nid[i],
   3824						   stream_tag, 0, format);
   3825
   3826	/* surrounds */
   3827	for (i = 1; i < mout->num_dacs; i++) {
   3828		if (chs >= (i + 1) * 2) /* independent out */
   3829			snd_hda_codec_setup_stream(codec, nids[i], stream_tag,
   3830						   i * 2, format);
   3831		else if (!mout->no_share_stream) /* copy front */
   3832			snd_hda_codec_setup_stream(codec, nids[i], stream_tag,
   3833						   0, format);
   3834	}
   3835
   3836	/* extra surrounds */
   3837	for (i = 0; i < ARRAY_SIZE(mout->extra_out_nid); i++) {
   3838		int ch = 0;
   3839		if (!mout->extra_out_nid[i])
   3840			break;
   3841		if (chs >= (i + 1) * 2)
   3842			ch = i * 2;
   3843		else if (!mout->no_share_stream)
   3844			break;
   3845		snd_hda_codec_setup_stream(codec, mout->extra_out_nid[i],
   3846					   stream_tag, ch, format);
   3847	}
   3848
   3849	return 0;
   3850}
   3851EXPORT_SYMBOL_GPL(snd_hda_multi_out_analog_prepare);
   3852
   3853/**
   3854 * snd_hda_multi_out_analog_cleanup - clean up the setting for analog out
   3855 * @codec: the HDA codec
   3856 * @mout: hda_multi_out object
   3857 */
   3858int snd_hda_multi_out_analog_cleanup(struct hda_codec *codec,
   3859				     struct hda_multi_out *mout)
   3860{
   3861	const hda_nid_t *nids = mout->dac_nids;
   3862	int i;
   3863
   3864	for (i = 0; i < mout->num_dacs; i++)
   3865		snd_hda_codec_cleanup_stream(codec, nids[i]);
   3866	if (mout->hp_nid)
   3867		snd_hda_codec_cleanup_stream(codec, mout->hp_nid);
   3868	for (i = 0; i < ARRAY_SIZE(mout->hp_out_nid); i++)
   3869		if (mout->hp_out_nid[i])
   3870			snd_hda_codec_cleanup_stream(codec,
   3871						     mout->hp_out_nid[i]);
   3872	for (i = 0; i < ARRAY_SIZE(mout->extra_out_nid); i++)
   3873		if (mout->extra_out_nid[i])
   3874			snd_hda_codec_cleanup_stream(codec,
   3875						     mout->extra_out_nid[i]);
   3876	mutex_lock(&codec->spdif_mutex);
   3877	if (mout->dig_out_nid && mout->dig_out_used == HDA_DIG_ANALOG_DUP) {
   3878		cleanup_dig_out_stream(codec, mout->dig_out_nid);
   3879		mout->dig_out_used = 0;
   3880	}
   3881	mutex_unlock(&codec->spdif_mutex);
   3882	return 0;
   3883}
   3884EXPORT_SYMBOL_GPL(snd_hda_multi_out_analog_cleanup);
   3885
   3886/**
   3887 * snd_hda_get_default_vref - Get the default (mic) VREF pin bits
   3888 * @codec: the HDA codec
   3889 * @pin: referred pin NID
   3890 *
   3891 * Guess the suitable VREF pin bits to be set as the pin-control value.
   3892 * Note: the function doesn't set the AC_PINCTL_IN_EN bit.
   3893 */
   3894unsigned int snd_hda_get_default_vref(struct hda_codec *codec, hda_nid_t pin)
   3895{
   3896	unsigned int pincap;
   3897	unsigned int oldval;
   3898	oldval = snd_hda_codec_read(codec, pin, 0,
   3899				    AC_VERB_GET_PIN_WIDGET_CONTROL, 0);
   3900	pincap = snd_hda_query_pin_caps(codec, pin);
   3901	pincap = (pincap & AC_PINCAP_VREF) >> AC_PINCAP_VREF_SHIFT;
   3902	/* Exception: if the default pin setup is vref50, we give it priority */
   3903	if ((pincap & AC_PINCAP_VREF_80) && oldval != PIN_VREF50)
   3904		return AC_PINCTL_VREF_80;
   3905	else if (pincap & AC_PINCAP_VREF_50)
   3906		return AC_PINCTL_VREF_50;
   3907	else if (pincap & AC_PINCAP_VREF_100)
   3908		return AC_PINCTL_VREF_100;
   3909	else if (pincap & AC_PINCAP_VREF_GRD)
   3910		return AC_PINCTL_VREF_GRD;
   3911	return AC_PINCTL_VREF_HIZ;
   3912}
   3913EXPORT_SYMBOL_GPL(snd_hda_get_default_vref);
   3914
   3915/**
   3916 * snd_hda_correct_pin_ctl - correct the pin ctl value for matching with the pin cap
   3917 * @codec: the HDA codec
   3918 * @pin: referred pin NID
   3919 * @val: pin ctl value to audit
   3920 */
   3921unsigned int snd_hda_correct_pin_ctl(struct hda_codec *codec,
   3922				     hda_nid_t pin, unsigned int val)
   3923{
   3924	static const unsigned int cap_lists[][2] = {
   3925		{ AC_PINCTL_VREF_100, AC_PINCAP_VREF_100 },
   3926		{ AC_PINCTL_VREF_80, AC_PINCAP_VREF_80 },
   3927		{ AC_PINCTL_VREF_50, AC_PINCAP_VREF_50 },
   3928		{ AC_PINCTL_VREF_GRD, AC_PINCAP_VREF_GRD },
   3929	};
   3930	unsigned int cap;
   3931
   3932	if (!val)
   3933		return 0;
   3934	cap = snd_hda_query_pin_caps(codec, pin);
   3935	if (!cap)
   3936		return val; /* don't know what to do... */
   3937
   3938	if (val & AC_PINCTL_OUT_EN) {
   3939		if (!(cap & AC_PINCAP_OUT))
   3940			val &= ~(AC_PINCTL_OUT_EN | AC_PINCTL_HP_EN);
   3941		else if ((val & AC_PINCTL_HP_EN) && !(cap & AC_PINCAP_HP_DRV))
   3942			val &= ~AC_PINCTL_HP_EN;
   3943	}
   3944
   3945	if (val & AC_PINCTL_IN_EN) {
   3946		if (!(cap & AC_PINCAP_IN))
   3947			val &= ~(AC_PINCTL_IN_EN | AC_PINCTL_VREFEN);
   3948		else {
   3949			unsigned int vcap, vref;
   3950			int i;
   3951			vcap = (cap & AC_PINCAP_VREF) >> AC_PINCAP_VREF_SHIFT;
   3952			vref = val & AC_PINCTL_VREFEN;
   3953			for (i = 0; i < ARRAY_SIZE(cap_lists); i++) {
   3954				if (vref == cap_lists[i][0] &&
   3955				    !(vcap & cap_lists[i][1])) {
   3956					if (i == ARRAY_SIZE(cap_lists) - 1)
   3957						vref = AC_PINCTL_VREF_HIZ;
   3958					else
   3959						vref = cap_lists[i + 1][0];
   3960				}
   3961			}
   3962			val &= ~AC_PINCTL_VREFEN;
   3963			val |= vref;
   3964		}
   3965	}
   3966
   3967	return val;
   3968}
   3969EXPORT_SYMBOL_GPL(snd_hda_correct_pin_ctl);
   3970
   3971/**
   3972 * _snd_hda_set_pin_ctl - Helper to set pin ctl value
   3973 * @codec: the HDA codec
   3974 * @pin: referred pin NID
   3975 * @val: pin control value to set
   3976 * @cached: access over codec pinctl cache or direct write
   3977 *
   3978 * This function is a helper to set a pin ctl value more safely.
   3979 * It corrects the pin ctl value via snd_hda_correct_pin_ctl(), stores the
   3980 * value in pin target array via snd_hda_codec_set_pin_target(), then
   3981 * actually writes the value via either snd_hda_codec_write_cache() or
   3982 * snd_hda_codec_write() depending on @cached flag.
   3983 */
   3984int _snd_hda_set_pin_ctl(struct hda_codec *codec, hda_nid_t pin,
   3985			 unsigned int val, bool cached)
   3986{
   3987	val = snd_hda_correct_pin_ctl(codec, pin, val);
   3988	snd_hda_codec_set_pin_target(codec, pin, val);
   3989	if (cached)
   3990		return snd_hda_codec_write_cache(codec, pin, 0,
   3991				AC_VERB_SET_PIN_WIDGET_CONTROL, val);
   3992	else
   3993		return snd_hda_codec_write(codec, pin, 0,
   3994					   AC_VERB_SET_PIN_WIDGET_CONTROL, val);
   3995}
   3996EXPORT_SYMBOL_GPL(_snd_hda_set_pin_ctl);
   3997
   3998/**
   3999 * snd_hda_add_imux_item - Add an item to input_mux
   4000 * @codec: the HDA codec
   4001 * @imux: imux helper object
   4002 * @label: the name of imux item to assign
   4003 * @index: index number of imux item to assign
   4004 * @type_idx: pointer to store the resultant label index
   4005 *
   4006 * When the same label is used already in the existing items, the number
   4007 * suffix is appended to the label.  This label index number is stored
   4008 * to type_idx when non-NULL pointer is given.
   4009 */
   4010int snd_hda_add_imux_item(struct hda_codec *codec,
   4011			  struct hda_input_mux *imux, const char *label,
   4012			  int index, int *type_idx)
   4013{
   4014	int i, label_idx = 0;
   4015	if (imux->num_items >= HDA_MAX_NUM_INPUTS) {
   4016		codec_err(codec, "hda_codec: Too many imux items!\n");
   4017		return -EINVAL;
   4018	}
   4019	for (i = 0; i < imux->num_items; i++) {
   4020		if (!strncmp(label, imux->items[i].label, strlen(label)))
   4021			label_idx++;
   4022	}
   4023	if (type_idx)
   4024		*type_idx = label_idx;
   4025	if (label_idx > 0)
   4026		snprintf(imux->items[imux->num_items].label,
   4027			 sizeof(imux->items[imux->num_items].label),
   4028			 "%s %d", label, label_idx);
   4029	else
   4030		strscpy(imux->items[imux->num_items].label, label,
   4031			sizeof(imux->items[imux->num_items].label));
   4032	imux->items[imux->num_items].index = index;
   4033	imux->num_items++;
   4034	return 0;
   4035}
   4036EXPORT_SYMBOL_GPL(snd_hda_add_imux_item);
   4037
   4038/**
   4039 * snd_hda_bus_reset_codecs - Reset the bus
   4040 * @bus: HD-audio bus
   4041 */
   4042void snd_hda_bus_reset_codecs(struct hda_bus *bus)
   4043{
   4044	struct hda_codec *codec;
   4045
   4046	list_for_each_codec(codec, bus) {
   4047		/* FIXME: maybe a better way needed for forced reset */
   4048		if (current_work() != &codec->jackpoll_work.work)
   4049			cancel_delayed_work_sync(&codec->jackpoll_work);
   4050#ifdef CONFIG_PM
   4051		if (hda_codec_is_power_on(codec)) {
   4052			hda_call_codec_suspend(codec);
   4053			hda_call_codec_resume(codec);
   4054		}
   4055#endif
   4056	}
   4057}
   4058
   4059/**
   4060 * snd_print_pcm_bits - Print the supported PCM fmt bits to the string buffer
   4061 * @pcm: PCM caps bits
   4062 * @buf: the string buffer to write
   4063 * @buflen: the max buffer length
   4064 *
   4065 * used by hda_proc.c and hda_eld.c
   4066 */
   4067void snd_print_pcm_bits(int pcm, char *buf, int buflen)
   4068{
   4069	static const unsigned int bits[] = { 8, 16, 20, 24, 32 };
   4070	int i, j;
   4071
   4072	for (i = 0, j = 0; i < ARRAY_SIZE(bits); i++)
   4073		if (pcm & (AC_SUPPCM_BITS_8 << i))
   4074			j += scnprintf(buf + j, buflen - j,  " %d", bits[i]);
   4075
   4076	buf[j] = '\0'; /* necessary when j == 0 */
   4077}
   4078EXPORT_SYMBOL_GPL(snd_print_pcm_bits);
   4079
   4080MODULE_DESCRIPTION("HDA codec core");
   4081MODULE_LICENSE("GPL");