xref: /openbmc/linux/sound/pci/hda/hda_codec.c (revision db181ce0)
1 /*
2  * Universal Interface for Intel High Definition Audio Codec
3  *
4  * Copyright (c) 2004 Takashi Iwai <tiwai@suse.de>
5  *
6  *
7  *  This driver is free software; you can redistribute it and/or modify
8  *  it under the terms of the GNU General Public License as published by
9  *  the Free Software Foundation; either version 2 of the License, or
10  *  (at your option) any later version.
11  *
12  *  This driver is distributed in the hope that it will be useful,
13  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
14  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  *  GNU General Public License for more details.
16  *
17  *  You should have received a copy of the GNU General Public License
18  *  along with this program; if not, write to the Free Software
19  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
20  */
21 
22 #include <linux/mm.h>
23 #include <linux/init.h>
24 #include <linux/delay.h>
25 #include <linux/slab.h>
26 #include <linux/mutex.h>
27 #include <linux/module.h>
28 #include <linux/async.h>
29 #include <sound/core.h>
30 #include "hda_codec.h"
31 #include <sound/asoundef.h>
32 #include <sound/tlv.h>
33 #include <sound/initval.h>
34 #include <sound/jack.h>
35 #include "hda_local.h"
36 #include "hda_beep.h"
37 #include "hda_jack.h"
38 #include <sound/hda_hwdep.h>
39 
40 #define CREATE_TRACE_POINTS
41 #include "hda_trace.h"
42 
43 /*
44  * vendor / preset table
45  */
46 
47 struct hda_vendor_id {
48 	unsigned int id;
49 	const char *name;
50 };
51 
52 /* codec vendor labels */
53 static struct hda_vendor_id hda_vendor_ids[] = {
54 	{ 0x1002, "ATI" },
55 	{ 0x1013, "Cirrus Logic" },
56 	{ 0x1057, "Motorola" },
57 	{ 0x1095, "Silicon Image" },
58 	{ 0x10de, "Nvidia" },
59 	{ 0x10ec, "Realtek" },
60 	{ 0x1102, "Creative" },
61 	{ 0x1106, "VIA" },
62 	{ 0x111d, "IDT" },
63 	{ 0x11c1, "LSI" },
64 	{ 0x11d4, "Analog Devices" },
65 	{ 0x13f6, "C-Media" },
66 	{ 0x14f1, "Conexant" },
67 	{ 0x17e8, "Chrontel" },
68 	{ 0x1854, "LG" },
69 	{ 0x1aec, "Wolfson Microelectronics" },
70 	{ 0x1af4, "QEMU" },
71 	{ 0x434d, "C-Media" },
72 	{ 0x8086, "Intel" },
73 	{ 0x8384, "SigmaTel" },
74 	{} /* terminator */
75 };
76 
77 static DEFINE_MUTEX(preset_mutex);
78 static LIST_HEAD(hda_preset_tables);
79 
80 int snd_hda_add_codec_preset(struct hda_codec_preset_list *preset)
81 {
82 	mutex_lock(&preset_mutex);
83 	list_add_tail(&preset->list, &hda_preset_tables);
84 	mutex_unlock(&preset_mutex);
85 	return 0;
86 }
87 EXPORT_SYMBOL_GPL(snd_hda_add_codec_preset);
88 
89 int snd_hda_delete_codec_preset(struct hda_codec_preset_list *preset)
90 {
91 	mutex_lock(&preset_mutex);
92 	list_del(&preset->list);
93 	mutex_unlock(&preset_mutex);
94 	return 0;
95 }
96 EXPORT_SYMBOL_GPL(snd_hda_delete_codec_preset);
97 
98 #ifdef CONFIG_PM
99 #define codec_in_pm(codec)	((codec)->in_pm)
100 static void hda_power_work(struct work_struct *work);
101 static void hda_keep_power_on(struct hda_codec *codec);
102 #define hda_codec_is_power_on(codec)	((codec)->power_on)
103 
104 static void hda_call_pm_notify(struct hda_codec *codec, bool power_up)
105 {
106 	struct hda_bus *bus = codec->bus;
107 
108 	if ((power_up && codec->pm_up_notified) ||
109 	    (!power_up && !codec->pm_up_notified))
110 		return;
111 	if (bus->ops.pm_notify)
112 		bus->ops.pm_notify(bus, power_up);
113 	codec->pm_up_notified = power_up;
114 }
115 
116 #else
117 #define codec_in_pm(codec)	0
118 static inline void hda_keep_power_on(struct hda_codec *codec) {}
119 #define hda_codec_is_power_on(codec)	1
120 #define hda_call_pm_notify(codec, state) {}
121 #endif
122 
123 /**
124  * snd_hda_get_jack_location - Give a location string of the jack
125  * @cfg: pin default config value
126  *
127  * Parse the pin default config value and returns the string of the
128  * jack location, e.g. "Rear", "Front", etc.
129  */
130 const char *snd_hda_get_jack_location(u32 cfg)
131 {
132 	static char *bases[7] = {
133 		"N/A", "Rear", "Front", "Left", "Right", "Top", "Bottom",
134 	};
135 	static unsigned char specials_idx[] = {
136 		0x07, 0x08,
137 		0x17, 0x18, 0x19,
138 		0x37, 0x38
139 	};
140 	static char *specials[] = {
141 		"Rear Panel", "Drive Bar",
142 		"Riser", "HDMI", "ATAPI",
143 		"Mobile-In", "Mobile-Out"
144 	};
145 	int i;
146 	cfg = (cfg & AC_DEFCFG_LOCATION) >> AC_DEFCFG_LOCATION_SHIFT;
147 	if ((cfg & 0x0f) < 7)
148 		return bases[cfg & 0x0f];
149 	for (i = 0; i < ARRAY_SIZE(specials_idx); i++) {
150 		if (cfg == specials_idx[i])
151 			return specials[i];
152 	}
153 	return "UNKNOWN";
154 }
155 EXPORT_SYMBOL_GPL(snd_hda_get_jack_location);
156 
157 /**
158  * snd_hda_get_jack_connectivity - Give a connectivity string of the jack
159  * @cfg: pin default config value
160  *
161  * Parse the pin default config value and returns the string of the
162  * jack connectivity, i.e. external or internal connection.
163  */
164 const char *snd_hda_get_jack_connectivity(u32 cfg)
165 {
166 	static char *jack_locations[4] = { "Ext", "Int", "Sep", "Oth" };
167 
168 	return jack_locations[(cfg >> (AC_DEFCFG_LOCATION_SHIFT + 4)) & 3];
169 }
170 EXPORT_SYMBOL_GPL(snd_hda_get_jack_connectivity);
171 
172 /**
173  * snd_hda_get_jack_type - Give a type string of the jack
174  * @cfg: pin default config value
175  *
176  * Parse the pin default config value and returns the string of the
177  * jack type, i.e. the purpose of the jack, such as Line-Out or CD.
178  */
179 const char *snd_hda_get_jack_type(u32 cfg)
180 {
181 	static char *jack_types[16] = {
182 		"Line Out", "Speaker", "HP Out", "CD",
183 		"SPDIF Out", "Digital Out", "Modem Line", "Modem Hand",
184 		"Line In", "Aux", "Mic", "Telephony",
185 		"SPDIF In", "Digital In", "Reserved", "Other"
186 	};
187 
188 	return jack_types[(cfg & AC_DEFCFG_DEVICE)
189 				>> AC_DEFCFG_DEVICE_SHIFT];
190 }
191 EXPORT_SYMBOL_GPL(snd_hda_get_jack_type);
192 
193 /*
194  * Compose a 32bit command word to be sent to the HD-audio controller
195  */
196 static inline unsigned int
197 make_codec_cmd(struct hda_codec *codec, hda_nid_t nid, int flags,
198 	       unsigned int verb, unsigned int parm)
199 {
200 	u32 val;
201 
202 	if ((codec->addr & ~0xf) || (nid & ~0x7f) ||
203 	    (verb & ~0xfff) || (parm & ~0xffff)) {
204 		codec_err(codec, "hda-codec: out of range cmd %x:%x:%x:%x\n",
205 		       codec->addr, nid, verb, parm);
206 		return ~0;
207 	}
208 
209 	val = (u32)codec->addr << 28;
210 	val |= (u32)nid << 20;
211 	val |= verb << 8;
212 	val |= parm;
213 	return val;
214 }
215 
216 /*
217  * Send and receive a verb
218  */
219 static int codec_exec_verb(struct hda_codec *codec, unsigned int cmd,
220 			   int flags, unsigned int *res)
221 {
222 	struct hda_bus *bus = codec->bus;
223 	int err;
224 
225 	if (cmd == ~0)
226 		return -1;
227 
228 	if (res)
229 		*res = -1;
230  again:
231 	snd_hda_power_up(codec);
232 	mutex_lock(&bus->cmd_mutex);
233 	if (flags & HDA_RW_NO_RESPONSE_FALLBACK)
234 		bus->no_response_fallback = 1;
235 	for (;;) {
236 		trace_hda_send_cmd(codec, cmd);
237 		err = bus->ops.command(bus, cmd);
238 		if (err != -EAGAIN)
239 			break;
240 		/* process pending verbs */
241 		bus->ops.get_response(bus, codec->addr);
242 	}
243 	if (!err && res) {
244 		*res = bus->ops.get_response(bus, codec->addr);
245 		trace_hda_get_response(codec, *res);
246 	}
247 	bus->no_response_fallback = 0;
248 	mutex_unlock(&bus->cmd_mutex);
249 	snd_hda_power_down(codec);
250 	if (!codec_in_pm(codec) && res && *res == -1 && bus->rirb_error) {
251 		if (bus->response_reset) {
252 			codec_dbg(codec,
253 				  "resetting BUS due to fatal communication error\n");
254 			trace_hda_bus_reset(bus);
255 			bus->ops.bus_reset(bus);
256 		}
257 		goto again;
258 	}
259 	/* clear reset-flag when the communication gets recovered */
260 	if (!err || codec_in_pm(codec))
261 		bus->response_reset = 0;
262 	return err;
263 }
264 
265 /**
266  * snd_hda_codec_read - send a command and get the response
267  * @codec: the HDA codec
268  * @nid: NID to send the command
269  * @flags: optional bit flags
270  * @verb: the verb to send
271  * @parm: the parameter for the verb
272  *
273  * Send a single command and read the corresponding response.
274  *
275  * Returns the obtained response value, or -1 for an error.
276  */
277 unsigned int snd_hda_codec_read(struct hda_codec *codec, hda_nid_t nid,
278 				int flags,
279 				unsigned int verb, unsigned int parm)
280 {
281 	unsigned cmd = make_codec_cmd(codec, nid, flags, verb, parm);
282 	unsigned int res;
283 	if (codec_exec_verb(codec, cmd, flags, &res))
284 		return -1;
285 	return res;
286 }
287 EXPORT_SYMBOL_GPL(snd_hda_codec_read);
288 
289 /**
290  * snd_hda_codec_write - send a single command without waiting for response
291  * @codec: the HDA codec
292  * @nid: NID to send the command
293  * @flags: optional bit flags
294  * @verb: the verb to send
295  * @parm: the parameter for the verb
296  *
297  * Send a single command without waiting for response.
298  *
299  * Returns 0 if successful, or a negative error code.
300  */
301 int snd_hda_codec_write(struct hda_codec *codec, hda_nid_t nid, int flags,
302 			unsigned int verb, unsigned int parm)
303 {
304 	unsigned int cmd = make_codec_cmd(codec, nid, flags, verb, parm);
305 	unsigned int res;
306 	return codec_exec_verb(codec, cmd, flags,
307 			       codec->bus->sync_write ? &res : NULL);
308 }
309 EXPORT_SYMBOL_GPL(snd_hda_codec_write);
310 
311 /**
312  * snd_hda_sequence_write - sequence writes
313  * @codec: the HDA codec
314  * @seq: VERB array to send
315  *
316  * Send the commands sequentially from the given array.
317  * The array must be terminated with NID=0.
318  */
319 void snd_hda_sequence_write(struct hda_codec *codec, const struct hda_verb *seq)
320 {
321 	for (; seq->nid; seq++)
322 		snd_hda_codec_write(codec, seq->nid, 0, seq->verb, seq->param);
323 }
324 EXPORT_SYMBOL_GPL(snd_hda_sequence_write);
325 
326 /**
327  * snd_hda_get_sub_nodes - get the range of sub nodes
328  * @codec: the HDA codec
329  * @nid: NID to parse
330  * @start_id: the pointer to store the start NID
331  *
332  * Parse the NID and store the start NID of its sub-nodes.
333  * Returns the number of sub-nodes.
334  */
335 int snd_hda_get_sub_nodes(struct hda_codec *codec, hda_nid_t nid,
336 			  hda_nid_t *start_id)
337 {
338 	unsigned int parm;
339 
340 	parm = snd_hda_param_read(codec, nid, AC_PAR_NODE_COUNT);
341 	if (parm == -1)
342 		return 0;
343 	*start_id = (parm >> 16) & 0x7fff;
344 	return (int)(parm & 0x7fff);
345 }
346 EXPORT_SYMBOL_GPL(snd_hda_get_sub_nodes);
347 
348 /* connection list element */
349 struct hda_conn_list {
350 	struct list_head list;
351 	int len;
352 	hda_nid_t nid;
353 	hda_nid_t conns[0];
354 };
355 
356 /* look up the cached results */
357 static struct hda_conn_list *
358 lookup_conn_list(struct hda_codec *codec, hda_nid_t nid)
359 {
360 	struct hda_conn_list *p;
361 	list_for_each_entry(p, &codec->conn_list, list) {
362 		if (p->nid == nid)
363 			return p;
364 	}
365 	return NULL;
366 }
367 
368 static int add_conn_list(struct hda_codec *codec, hda_nid_t nid, int len,
369 			 const hda_nid_t *list)
370 {
371 	struct hda_conn_list *p;
372 
373 	p = kmalloc(sizeof(*p) + len * sizeof(hda_nid_t), GFP_KERNEL);
374 	if (!p)
375 		return -ENOMEM;
376 	p->len = len;
377 	p->nid = nid;
378 	memcpy(p->conns, list, len * sizeof(hda_nid_t));
379 	list_add(&p->list, &codec->conn_list);
380 	return 0;
381 }
382 
383 static void remove_conn_list(struct hda_codec *codec)
384 {
385 	while (!list_empty(&codec->conn_list)) {
386 		struct hda_conn_list *p;
387 		p = list_first_entry(&codec->conn_list, typeof(*p), list);
388 		list_del(&p->list);
389 		kfree(p);
390 	}
391 }
392 
393 /* read the connection and add to the cache */
394 static int read_and_add_raw_conns(struct hda_codec *codec, hda_nid_t nid)
395 {
396 	hda_nid_t list[32];
397 	hda_nid_t *result = list;
398 	int len;
399 
400 	len = snd_hda_get_raw_connections(codec, nid, list, ARRAY_SIZE(list));
401 	if (len == -ENOSPC) {
402 		len = snd_hda_get_num_raw_conns(codec, nid);
403 		result = kmalloc(sizeof(hda_nid_t) * len, GFP_KERNEL);
404 		if (!result)
405 			return -ENOMEM;
406 		len = snd_hda_get_raw_connections(codec, nid, result, len);
407 	}
408 	if (len >= 0)
409 		len = snd_hda_override_conn_list(codec, nid, len, result);
410 	if (result != list)
411 		kfree(result);
412 	return len;
413 }
414 
415 /**
416  * snd_hda_get_conn_list - get connection list
417  * @codec: the HDA codec
418  * @nid: NID to parse
419  * @len: number of connection list entries
420  * @listp: the pointer to store NID list
421  *
422  * Parses the connection list of the given widget and stores the pointer
423  * to the list of NIDs.
424  *
425  * Returns the number of connections, or a negative error code.
426  *
427  * Note that the returned pointer isn't protected against the list
428  * modification.  If snd_hda_override_conn_list() might be called
429  * concurrently, protect with a mutex appropriately.
430  */
431 int snd_hda_get_conn_list(struct hda_codec *codec, hda_nid_t nid,
432 			  const hda_nid_t **listp)
433 {
434 	bool added = false;
435 
436 	for (;;) {
437 		int err;
438 		const struct hda_conn_list *p;
439 
440 		/* if the connection-list is already cached, read it */
441 		p = lookup_conn_list(codec, nid);
442 		if (p) {
443 			if (listp)
444 				*listp = p->conns;
445 			return p->len;
446 		}
447 		if (snd_BUG_ON(added))
448 			return -EINVAL;
449 
450 		err = read_and_add_raw_conns(codec, nid);
451 		if (err < 0)
452 			return err;
453 		added = true;
454 	}
455 }
456 EXPORT_SYMBOL_GPL(snd_hda_get_conn_list);
457 
458 /**
459  * snd_hda_get_connections - copy connection list
460  * @codec: the HDA codec
461  * @nid: NID to parse
462  * @conn_list: connection list array; when NULL, checks only the size
463  * @max_conns: max. number of connections to store
464  *
465  * Parses the connection list of the given widget and stores the list
466  * of NIDs.
467  *
468  * Returns the number of connections, or a negative error code.
469  */
470 int snd_hda_get_connections(struct hda_codec *codec, hda_nid_t nid,
471 			    hda_nid_t *conn_list, int max_conns)
472 {
473 	const hda_nid_t *list;
474 	int len = snd_hda_get_conn_list(codec, nid, &list);
475 
476 	if (len > 0 && conn_list) {
477 		if (len > max_conns) {
478 			codec_err(codec, "Too many connections %d for NID 0x%x\n",
479 				   len, nid);
480 			return -EINVAL;
481 		}
482 		memcpy(conn_list, list, len * sizeof(hda_nid_t));
483 	}
484 
485 	return len;
486 }
487 EXPORT_SYMBOL_GPL(snd_hda_get_connections);
488 
489 /* return CONNLIST_LEN parameter of the given widget */
490 static unsigned int get_num_conns(struct hda_codec *codec, hda_nid_t nid)
491 {
492 	unsigned int wcaps = get_wcaps(codec, nid);
493 	unsigned int parm;
494 
495 	if (!(wcaps & AC_WCAP_CONN_LIST) &&
496 	    get_wcaps_type(wcaps) != AC_WID_VOL_KNB)
497 		return 0;
498 
499 	parm = snd_hda_param_read(codec, nid, AC_PAR_CONNLIST_LEN);
500 	if (parm == -1)
501 		parm = 0;
502 	return parm;
503 }
504 
505 int snd_hda_get_num_raw_conns(struct hda_codec *codec, hda_nid_t nid)
506 {
507 	return snd_hda_get_raw_connections(codec, nid, NULL, 0);
508 }
509 
510 /**
511  * snd_hda_get_raw_connections - copy connection list without cache
512  * @codec: the HDA codec
513  * @nid: NID to parse
514  * @conn_list: connection list array
515  * @max_conns: max. number of connections to store
516  *
517  * Like snd_hda_get_connections(), copy the connection list but without
518  * checking through the connection-list cache.
519  * Currently called only from hda_proc.c, so not exported.
520  */
521 int snd_hda_get_raw_connections(struct hda_codec *codec, hda_nid_t nid,
522 				hda_nid_t *conn_list, int max_conns)
523 {
524 	unsigned int parm;
525 	int i, conn_len, conns;
526 	unsigned int shift, num_elems, mask;
527 	hda_nid_t prev_nid;
528 	int null_count = 0;
529 
530 	parm = get_num_conns(codec, nid);
531 	if (!parm)
532 		return 0;
533 
534 	if (parm & AC_CLIST_LONG) {
535 		/* long form */
536 		shift = 16;
537 		num_elems = 2;
538 	} else {
539 		/* short form */
540 		shift = 8;
541 		num_elems = 4;
542 	}
543 	conn_len = parm & AC_CLIST_LENGTH;
544 	mask = (1 << (shift-1)) - 1;
545 
546 	if (!conn_len)
547 		return 0; /* no connection */
548 
549 	if (conn_len == 1) {
550 		/* single connection */
551 		parm = snd_hda_codec_read(codec, nid, 0,
552 					  AC_VERB_GET_CONNECT_LIST, 0);
553 		if (parm == -1 && codec->bus->rirb_error)
554 			return -EIO;
555 		if (conn_list)
556 			conn_list[0] = parm & mask;
557 		return 1;
558 	}
559 
560 	/* multi connection */
561 	conns = 0;
562 	prev_nid = 0;
563 	for (i = 0; i < conn_len; i++) {
564 		int range_val;
565 		hda_nid_t val, n;
566 
567 		if (i % num_elems == 0) {
568 			parm = snd_hda_codec_read(codec, nid, 0,
569 						  AC_VERB_GET_CONNECT_LIST, i);
570 			if (parm == -1 && codec->bus->rirb_error)
571 				return -EIO;
572 		}
573 		range_val = !!(parm & (1 << (shift-1))); /* ranges */
574 		val = parm & mask;
575 		if (val == 0 && null_count++) {  /* no second chance */
576 			codec_dbg(codec,
577 				  "invalid CONNECT_LIST verb %x[%i]:%x\n",
578 				    nid, i, parm);
579 			return 0;
580 		}
581 		parm >>= shift;
582 		if (range_val) {
583 			/* ranges between the previous and this one */
584 			if (!prev_nid || prev_nid >= val) {
585 				codec_warn(codec,
586 					   "invalid dep_range_val %x:%x\n",
587 					   prev_nid, val);
588 				continue;
589 			}
590 			for (n = prev_nid + 1; n <= val; n++) {
591 				if (conn_list) {
592 					if (conns >= max_conns)
593 						return -ENOSPC;
594 					conn_list[conns] = n;
595 				}
596 				conns++;
597 			}
598 		} else {
599 			if (conn_list) {
600 				if (conns >= max_conns)
601 					return -ENOSPC;
602 				conn_list[conns] = val;
603 			}
604 			conns++;
605 		}
606 		prev_nid = val;
607 	}
608 	return conns;
609 }
610 
611 /**
612  * snd_hda_override_conn_list - add/modify the connection-list to cache
613  * @codec: the HDA codec
614  * @nid: NID to parse
615  * @len: number of connection list entries
616  * @list: the list of connection entries
617  *
618  * Add or modify the given connection-list to the cache.  If the corresponding
619  * cache already exists, invalidate it and append a new one.
620  *
621  * Returns zero or a negative error code.
622  */
623 int snd_hda_override_conn_list(struct hda_codec *codec, hda_nid_t nid, int len,
624 			       const hda_nid_t *list)
625 {
626 	struct hda_conn_list *p;
627 
628 	p = lookup_conn_list(codec, nid);
629 	if (p) {
630 		list_del(&p->list);
631 		kfree(p);
632 	}
633 
634 	return add_conn_list(codec, nid, len, list);
635 }
636 EXPORT_SYMBOL_GPL(snd_hda_override_conn_list);
637 
638 /**
639  * snd_hda_get_conn_index - get the connection index of the given NID
640  * @codec: the HDA codec
641  * @mux: NID containing the list
642  * @nid: NID to select
643  * @recursive: 1 when searching NID recursively, otherwise 0
644  *
645  * Parses the connection list of the widget @mux and checks whether the
646  * widget @nid is present.  If it is, return the connection index.
647  * Otherwise it returns -1.
648  */
649 int snd_hda_get_conn_index(struct hda_codec *codec, hda_nid_t mux,
650 			   hda_nid_t nid, int recursive)
651 {
652 	const hda_nid_t *conn;
653 	int i, nums;
654 
655 	nums = snd_hda_get_conn_list(codec, mux, &conn);
656 	for (i = 0; i < nums; i++)
657 		if (conn[i] == nid)
658 			return i;
659 	if (!recursive)
660 		return -1;
661 	if (recursive > 10) {
662 		codec_dbg(codec, "too deep connection for 0x%x\n", nid);
663 		return -1;
664 	}
665 	recursive++;
666 	for (i = 0; i < nums; i++) {
667 		unsigned int type = get_wcaps_type(get_wcaps(codec, conn[i]));
668 		if (type == AC_WID_PIN || type == AC_WID_AUD_OUT)
669 			continue;
670 		if (snd_hda_get_conn_index(codec, conn[i], nid, recursive) >= 0)
671 			return i;
672 	}
673 	return -1;
674 }
675 EXPORT_SYMBOL_GPL(snd_hda_get_conn_index);
676 
677 
678 /* return DEVLIST_LEN parameter of the given widget */
679 static unsigned int get_num_devices(struct hda_codec *codec, hda_nid_t nid)
680 {
681 	unsigned int wcaps = get_wcaps(codec, nid);
682 	unsigned int parm;
683 
684 	if (!codec->dp_mst || !(wcaps & AC_WCAP_DIGITAL) ||
685 	    get_wcaps_type(wcaps) != AC_WID_PIN)
686 		return 0;
687 
688 	parm = snd_hda_param_read(codec, nid, AC_PAR_DEVLIST_LEN);
689 	if (parm == -1 && codec->bus->rirb_error)
690 		parm = 0;
691 	return parm & AC_DEV_LIST_LEN_MASK;
692 }
693 
694 /**
695  * snd_hda_get_devices - copy device list without cache
696  * @codec: the HDA codec
697  * @nid: NID of the pin to parse
698  * @dev_list: device list array
699  * @max_devices: max. number of devices to store
700  *
701  * Copy the device list. This info is dynamic and so not cached.
702  * Currently called only from hda_proc.c, so not exported.
703  */
704 int snd_hda_get_devices(struct hda_codec *codec, hda_nid_t nid,
705 			u8 *dev_list, int max_devices)
706 {
707 	unsigned int parm;
708 	int i, dev_len, devices;
709 
710 	parm = get_num_devices(codec, nid);
711 	if (!parm)	/* not multi-stream capable */
712 		return 0;
713 
714 	dev_len = parm + 1;
715 	dev_len = dev_len < max_devices ? dev_len : max_devices;
716 
717 	devices = 0;
718 	while (devices < dev_len) {
719 		parm = snd_hda_codec_read(codec, nid, 0,
720 					  AC_VERB_GET_DEVICE_LIST, devices);
721 		if (parm == -1 && codec->bus->rirb_error)
722 			break;
723 
724 		for (i = 0; i < 8; i++) {
725 			dev_list[devices] = (u8)parm;
726 			parm >>= 4;
727 			devices++;
728 			if (devices >= dev_len)
729 				break;
730 		}
731 	}
732 	return devices;
733 }
734 
735 /**
736  * snd_hda_queue_unsol_event - add an unsolicited event to queue
737  * @bus: the BUS
738  * @res: unsolicited event (lower 32bit of RIRB entry)
739  * @res_ex: codec addr and flags (upper 32bit or RIRB entry)
740  *
741  * Adds the given event to the queue.  The events are processed in
742  * the workqueue asynchronously.  Call this function in the interrupt
743  * hanlder when RIRB receives an unsolicited event.
744  *
745  * Returns 0 if successful, or a negative error code.
746  */
747 int snd_hda_queue_unsol_event(struct hda_bus *bus, u32 res, u32 res_ex)
748 {
749 	struct hda_bus_unsolicited *unsol;
750 	unsigned int wp;
751 
752 	if (!bus || !bus->workq)
753 		return 0;
754 
755 	trace_hda_unsol_event(bus, res, res_ex);
756 	unsol = bus->unsol;
757 	if (!unsol)
758 		return 0;
759 
760 	wp = (unsol->wp + 1) % HDA_UNSOL_QUEUE_SIZE;
761 	unsol->wp = wp;
762 
763 	wp <<= 1;
764 	unsol->queue[wp] = res;
765 	unsol->queue[wp + 1] = res_ex;
766 
767 	queue_work(bus->workq, &unsol->work);
768 
769 	return 0;
770 }
771 EXPORT_SYMBOL_GPL(snd_hda_queue_unsol_event);
772 
773 /*
774  * process queued unsolicited events
775  */
776 static void process_unsol_events(struct work_struct *work)
777 {
778 	struct hda_bus_unsolicited *unsol =
779 		container_of(work, struct hda_bus_unsolicited, work);
780 	struct hda_bus *bus = unsol->bus;
781 	struct hda_codec *codec;
782 	unsigned int rp, caddr, res;
783 
784 	while (unsol->rp != unsol->wp) {
785 		rp = (unsol->rp + 1) % HDA_UNSOL_QUEUE_SIZE;
786 		unsol->rp = rp;
787 		rp <<= 1;
788 		res = unsol->queue[rp];
789 		caddr = unsol->queue[rp + 1];
790 		if (!(caddr & (1 << 4))) /* no unsolicited event? */
791 			continue;
792 		codec = bus->caddr_tbl[caddr & 0x0f];
793 		if (codec && codec->patch_ops.unsol_event)
794 			codec->patch_ops.unsol_event(codec, res);
795 	}
796 }
797 
798 /*
799  * initialize unsolicited queue
800  */
801 static int init_unsol_queue(struct hda_bus *bus)
802 {
803 	struct hda_bus_unsolicited *unsol;
804 
805 	if (bus->unsol) /* already initialized */
806 		return 0;
807 
808 	unsol = kzalloc(sizeof(*unsol), GFP_KERNEL);
809 	if (!unsol) {
810 		dev_err(bus->card->dev, "can't allocate unsolicited queue\n");
811 		return -ENOMEM;
812 	}
813 	INIT_WORK(&unsol->work, process_unsol_events);
814 	unsol->bus = bus;
815 	bus->unsol = unsol;
816 	return 0;
817 }
818 
819 /*
820  * destructor
821  */
822 static void snd_hda_bus_free(struct hda_bus *bus)
823 {
824 	if (!bus)
825 		return;
826 
827 	WARN_ON(!list_empty(&bus->codec_list));
828 	if (bus->workq)
829 		flush_workqueue(bus->workq);
830 	if (bus->unsol)
831 		kfree(bus->unsol);
832 	if (bus->ops.private_free)
833 		bus->ops.private_free(bus);
834 	if (bus->workq)
835 		destroy_workqueue(bus->workq);
836 
837 	kfree(bus);
838 }
839 
840 static int snd_hda_bus_dev_free(struct snd_device *device)
841 {
842 	snd_hda_bus_free(device->device_data);
843 	return 0;
844 }
845 
846 static int snd_hda_bus_dev_disconnect(struct snd_device *device)
847 {
848 	struct hda_bus *bus = device->device_data;
849 	bus->shutdown = 1;
850 	return 0;
851 }
852 
853 /**
854  * snd_hda_bus_new - create a HDA bus
855  * @card: the card entry
856  * @temp: the template for hda_bus information
857  * @busp: the pointer to store the created bus instance
858  *
859  * Returns 0 if successful, or a negative error code.
860  */
861 int snd_hda_bus_new(struct snd_card *card,
862 			      const struct hda_bus_template *temp,
863 			      struct hda_bus **busp)
864 {
865 	struct hda_bus *bus;
866 	int err;
867 	static struct snd_device_ops dev_ops = {
868 		.dev_disconnect = snd_hda_bus_dev_disconnect,
869 		.dev_free = snd_hda_bus_dev_free,
870 	};
871 
872 	if (snd_BUG_ON(!temp))
873 		return -EINVAL;
874 	if (snd_BUG_ON(!temp->ops.command || !temp->ops.get_response))
875 		return -EINVAL;
876 
877 	if (busp)
878 		*busp = NULL;
879 
880 	bus = kzalloc(sizeof(*bus), GFP_KERNEL);
881 	if (bus == NULL) {
882 		dev_err(card->dev, "can't allocate struct hda_bus\n");
883 		return -ENOMEM;
884 	}
885 
886 	bus->card = card;
887 	bus->private_data = temp->private_data;
888 	bus->pci = temp->pci;
889 	bus->modelname = temp->modelname;
890 	bus->power_save = temp->power_save;
891 	bus->ops = temp->ops;
892 
893 	mutex_init(&bus->cmd_mutex);
894 	mutex_init(&bus->prepare_mutex);
895 	INIT_LIST_HEAD(&bus->codec_list);
896 
897 	snprintf(bus->workq_name, sizeof(bus->workq_name),
898 		 "hd-audio%d", card->number);
899 	bus->workq = create_singlethread_workqueue(bus->workq_name);
900 	if (!bus->workq) {
901 		dev_err(card->dev, "cannot create workqueue %s\n",
902 			   bus->workq_name);
903 		kfree(bus);
904 		return -ENOMEM;
905 	}
906 
907 	err = snd_device_new(card, SNDRV_DEV_BUS, bus, &dev_ops);
908 	if (err < 0) {
909 		snd_hda_bus_free(bus);
910 		return err;
911 	}
912 	if (busp)
913 		*busp = bus;
914 	return 0;
915 }
916 EXPORT_SYMBOL_GPL(snd_hda_bus_new);
917 
918 #if IS_ENABLED(CONFIG_SND_HDA_GENERIC)
919 #define is_generic_config(codec) \
920 	(codec->modelname && !strcmp(codec->modelname, "generic"))
921 #else
922 #define is_generic_config(codec)	0
923 #endif
924 
925 #ifdef MODULE
926 #define HDA_MODREQ_MAX_COUNT	2	/* two request_modules()'s */
927 #else
928 #define HDA_MODREQ_MAX_COUNT	0	/* all presets are statically linked */
929 #endif
930 
931 /*
932  * find a matching codec preset
933  */
934 static const struct hda_codec_preset *
935 find_codec_preset(struct hda_codec *codec)
936 {
937 	struct hda_codec_preset_list *tbl;
938 	const struct hda_codec_preset *preset;
939 	unsigned int mod_requested = 0;
940 
941  again:
942 	mutex_lock(&preset_mutex);
943 	list_for_each_entry(tbl, &hda_preset_tables, list) {
944 		if (!try_module_get(tbl->owner)) {
945 			codec_err(codec, "cannot module_get\n");
946 			continue;
947 		}
948 		for (preset = tbl->preset; preset->id; preset++) {
949 			u32 mask = preset->mask;
950 			if (preset->afg && preset->afg != codec->afg)
951 				continue;
952 			if (preset->mfg && preset->mfg != codec->mfg)
953 				continue;
954 			if (!mask)
955 				mask = ~0;
956 			if (preset->id == (codec->vendor_id & mask) &&
957 			    (!preset->rev ||
958 			     preset->rev == codec->revision_id)) {
959 				mutex_unlock(&preset_mutex);
960 				codec->owner = tbl->owner;
961 				return preset;
962 			}
963 		}
964 		module_put(tbl->owner);
965 	}
966 	mutex_unlock(&preset_mutex);
967 
968 	if (mod_requested < HDA_MODREQ_MAX_COUNT) {
969 		char name[32];
970 		if (!mod_requested)
971 			snprintf(name, sizeof(name), "snd-hda-codec-id:%08x",
972 				 codec->vendor_id);
973 		else
974 			snprintf(name, sizeof(name), "snd-hda-codec-id:%04x*",
975 				 (codec->vendor_id >> 16) & 0xffff);
976 		request_module(name);
977 		mod_requested++;
978 		goto again;
979 	}
980 	return NULL;
981 }
982 
983 /*
984  * get_codec_name - store the codec name
985  */
986 static int get_codec_name(struct hda_codec *codec)
987 {
988 	const struct hda_vendor_id *c;
989 	const char *vendor = NULL;
990 	u16 vendor_id = codec->vendor_id >> 16;
991 	char tmp[16];
992 
993 	if (codec->vendor_name)
994 		goto get_chip_name;
995 
996 	for (c = hda_vendor_ids; c->id; c++) {
997 		if (c->id == vendor_id) {
998 			vendor = c->name;
999 			break;
1000 		}
1001 	}
1002 	if (!vendor) {
1003 		sprintf(tmp, "Generic %04x", vendor_id);
1004 		vendor = tmp;
1005 	}
1006 	codec->vendor_name = kstrdup(vendor, GFP_KERNEL);
1007 	if (!codec->vendor_name)
1008 		return -ENOMEM;
1009 
1010  get_chip_name:
1011 	if (codec->chip_name)
1012 		return 0;
1013 
1014 	if (codec->preset && codec->preset->name)
1015 		codec->chip_name = kstrdup(codec->preset->name, GFP_KERNEL);
1016 	else {
1017 		sprintf(tmp, "ID %x", codec->vendor_id & 0xffff);
1018 		codec->chip_name = kstrdup(tmp, GFP_KERNEL);
1019 	}
1020 	if (!codec->chip_name)
1021 		return -ENOMEM;
1022 	return 0;
1023 }
1024 
1025 /*
1026  * look for an AFG and MFG nodes
1027  */
1028 static void setup_fg_nodes(struct hda_codec *codec)
1029 {
1030 	int i, total_nodes, function_id;
1031 	hda_nid_t nid;
1032 
1033 	total_nodes = snd_hda_get_sub_nodes(codec, AC_NODE_ROOT, &nid);
1034 	for (i = 0; i < total_nodes; i++, nid++) {
1035 		function_id = snd_hda_param_read(codec, nid,
1036 						AC_PAR_FUNCTION_TYPE);
1037 		switch (function_id & 0xff) {
1038 		case AC_GRP_AUDIO_FUNCTION:
1039 			codec->afg = nid;
1040 			codec->afg_function_id = function_id & 0xff;
1041 			codec->afg_unsol = (function_id >> 8) & 1;
1042 			break;
1043 		case AC_GRP_MODEM_FUNCTION:
1044 			codec->mfg = nid;
1045 			codec->mfg_function_id = function_id & 0xff;
1046 			codec->mfg_unsol = (function_id >> 8) & 1;
1047 			break;
1048 		default:
1049 			break;
1050 		}
1051 	}
1052 }
1053 
1054 /*
1055  * read widget caps for each widget and store in cache
1056  */
1057 static int read_widget_caps(struct hda_codec *codec, hda_nid_t fg_node)
1058 {
1059 	int i;
1060 	hda_nid_t nid;
1061 
1062 	codec->num_nodes = snd_hda_get_sub_nodes(codec, fg_node,
1063 						 &codec->start_nid);
1064 	codec->wcaps = kmalloc(codec->num_nodes * 4, GFP_KERNEL);
1065 	if (!codec->wcaps)
1066 		return -ENOMEM;
1067 	nid = codec->start_nid;
1068 	for (i = 0; i < codec->num_nodes; i++, nid++)
1069 		codec->wcaps[i] = snd_hda_param_read(codec, nid,
1070 						     AC_PAR_AUDIO_WIDGET_CAP);
1071 	return 0;
1072 }
1073 
1074 /* read all pin default configurations and save codec->init_pins */
1075 static int read_pin_defaults(struct hda_codec *codec)
1076 {
1077 	int i;
1078 	hda_nid_t nid = codec->start_nid;
1079 
1080 	for (i = 0; i < codec->num_nodes; i++, nid++) {
1081 		struct hda_pincfg *pin;
1082 		unsigned int wcaps = get_wcaps(codec, nid);
1083 		unsigned int wid_type = get_wcaps_type(wcaps);
1084 		if (wid_type != AC_WID_PIN)
1085 			continue;
1086 		pin = snd_array_new(&codec->init_pins);
1087 		if (!pin)
1088 			return -ENOMEM;
1089 		pin->nid = nid;
1090 		pin->cfg = snd_hda_codec_read(codec, nid, 0,
1091 					      AC_VERB_GET_CONFIG_DEFAULT, 0);
1092 		pin->ctrl = snd_hda_codec_read(codec, nid, 0,
1093 					       AC_VERB_GET_PIN_WIDGET_CONTROL,
1094 					       0);
1095 	}
1096 	return 0;
1097 }
1098 
1099 /* look up the given pin config list and return the item matching with NID */
1100 static struct hda_pincfg *look_up_pincfg(struct hda_codec *codec,
1101 					 struct snd_array *array,
1102 					 hda_nid_t nid)
1103 {
1104 	int i;
1105 	for (i = 0; i < array->used; i++) {
1106 		struct hda_pincfg *pin = snd_array_elem(array, i);
1107 		if (pin->nid == nid)
1108 			return pin;
1109 	}
1110 	return NULL;
1111 }
1112 
1113 /* set the current pin config value for the given NID.
1114  * the value is cached, and read via snd_hda_codec_get_pincfg()
1115  */
1116 int snd_hda_add_pincfg(struct hda_codec *codec, struct snd_array *list,
1117 		       hda_nid_t nid, unsigned int cfg)
1118 {
1119 	struct hda_pincfg *pin;
1120 
1121 	/* the check below may be invalid when pins are added by a fixup
1122 	 * dynamically (e.g. via snd_hda_codec_update_widgets()), so disabled
1123 	 * for now
1124 	 */
1125 	/*
1126 	if (get_wcaps_type(get_wcaps(codec, nid)) != AC_WID_PIN)
1127 		return -EINVAL;
1128 	*/
1129 
1130 	pin = look_up_pincfg(codec, list, nid);
1131 	if (!pin) {
1132 		pin = snd_array_new(list);
1133 		if (!pin)
1134 			return -ENOMEM;
1135 		pin->nid = nid;
1136 	}
1137 	pin->cfg = cfg;
1138 	return 0;
1139 }
1140 
1141 /**
1142  * snd_hda_codec_set_pincfg - Override a pin default configuration
1143  * @codec: the HDA codec
1144  * @nid: NID to set the pin config
1145  * @cfg: the pin default config value
1146  *
1147  * Override a pin default configuration value in the cache.
1148  * This value can be read by snd_hda_codec_get_pincfg() in a higher
1149  * priority than the real hardware value.
1150  */
1151 int snd_hda_codec_set_pincfg(struct hda_codec *codec,
1152 			     hda_nid_t nid, unsigned int cfg)
1153 {
1154 	return snd_hda_add_pincfg(codec, &codec->driver_pins, nid, cfg);
1155 }
1156 EXPORT_SYMBOL_GPL(snd_hda_codec_set_pincfg);
1157 
1158 /**
1159  * snd_hda_codec_get_pincfg - Obtain a pin-default configuration
1160  * @codec: the HDA codec
1161  * @nid: NID to get the pin config
1162  *
1163  * Get the current pin config value of the given pin NID.
1164  * If the pincfg value is cached or overridden via sysfs or driver,
1165  * returns the cached value.
1166  */
1167 unsigned int snd_hda_codec_get_pincfg(struct hda_codec *codec, hda_nid_t nid)
1168 {
1169 	struct hda_pincfg *pin;
1170 
1171 #ifdef CONFIG_SND_HDA_RECONFIG
1172 	{
1173 		unsigned int cfg = 0;
1174 		mutex_lock(&codec->user_mutex);
1175 		pin = look_up_pincfg(codec, &codec->user_pins, nid);
1176 		if (pin)
1177 			cfg = pin->cfg;
1178 		mutex_unlock(&codec->user_mutex);
1179 		if (cfg)
1180 			return cfg;
1181 	}
1182 #endif
1183 	pin = look_up_pincfg(codec, &codec->driver_pins, nid);
1184 	if (pin)
1185 		return pin->cfg;
1186 	pin = look_up_pincfg(codec, &codec->init_pins, nid);
1187 	if (pin)
1188 		return pin->cfg;
1189 	return 0;
1190 }
1191 EXPORT_SYMBOL_GPL(snd_hda_codec_get_pincfg);
1192 
1193 /* remember the current pinctl target value */
1194 int snd_hda_codec_set_pin_target(struct hda_codec *codec, hda_nid_t nid,
1195 				 unsigned int val)
1196 {
1197 	struct hda_pincfg *pin;
1198 
1199 	pin = look_up_pincfg(codec, &codec->init_pins, nid);
1200 	if (!pin)
1201 		return -EINVAL;
1202 	pin->target = val;
1203 	return 0;
1204 }
1205 EXPORT_SYMBOL_GPL(snd_hda_codec_set_pin_target);
1206 
1207 /* return the current pinctl target value */
1208 int snd_hda_codec_get_pin_target(struct hda_codec *codec, hda_nid_t nid)
1209 {
1210 	struct hda_pincfg *pin;
1211 
1212 	pin = look_up_pincfg(codec, &codec->init_pins, nid);
1213 	if (!pin)
1214 		return 0;
1215 	return pin->target;
1216 }
1217 EXPORT_SYMBOL_GPL(snd_hda_codec_get_pin_target);
1218 
1219 /**
1220  * snd_hda_shutup_pins - Shut up all pins
1221  * @codec: the HDA codec
1222  *
1223  * Clear all pin controls to shup up before suspend for avoiding click noise.
1224  * The controls aren't cached so that they can be resumed properly.
1225  */
1226 void snd_hda_shutup_pins(struct hda_codec *codec)
1227 {
1228 	int i;
1229 	/* don't shut up pins when unloading the driver; otherwise it breaks
1230 	 * the default pin setup at the next load of the driver
1231 	 */
1232 	if (codec->bus->shutdown)
1233 		return;
1234 	for (i = 0; i < codec->init_pins.used; i++) {
1235 		struct hda_pincfg *pin = snd_array_elem(&codec->init_pins, i);
1236 		/* use read here for syncing after issuing each verb */
1237 		snd_hda_codec_read(codec, pin->nid, 0,
1238 				   AC_VERB_SET_PIN_WIDGET_CONTROL, 0);
1239 	}
1240 	codec->pins_shutup = 1;
1241 }
1242 EXPORT_SYMBOL_GPL(snd_hda_shutup_pins);
1243 
1244 #ifdef CONFIG_PM
1245 /* Restore the pin controls cleared previously via snd_hda_shutup_pins() */
1246 static void restore_shutup_pins(struct hda_codec *codec)
1247 {
1248 	int i;
1249 	if (!codec->pins_shutup)
1250 		return;
1251 	if (codec->bus->shutdown)
1252 		return;
1253 	for (i = 0; i < codec->init_pins.used; i++) {
1254 		struct hda_pincfg *pin = snd_array_elem(&codec->init_pins, i);
1255 		snd_hda_codec_write(codec, pin->nid, 0,
1256 				    AC_VERB_SET_PIN_WIDGET_CONTROL,
1257 				    pin->ctrl);
1258 	}
1259 	codec->pins_shutup = 0;
1260 }
1261 #endif
1262 
1263 static void hda_jackpoll_work(struct work_struct *work)
1264 {
1265 	struct hda_codec *codec =
1266 		container_of(work, struct hda_codec, jackpoll_work.work);
1267 
1268 	snd_hda_jack_set_dirty_all(codec);
1269 	snd_hda_jack_poll_all(codec);
1270 
1271 	if (!codec->jackpoll_interval)
1272 		return;
1273 
1274 	queue_delayed_work(codec->bus->workq, &codec->jackpoll_work,
1275 			   codec->jackpoll_interval);
1276 }
1277 
1278 static void init_hda_cache(struct hda_cache_rec *cache,
1279 			   unsigned int record_size);
1280 static void free_hda_cache(struct hda_cache_rec *cache);
1281 
1282 /* release all pincfg lists */
1283 static void free_init_pincfgs(struct hda_codec *codec)
1284 {
1285 	snd_array_free(&codec->driver_pins);
1286 #ifdef CONFIG_SND_HDA_RECONFIG
1287 	snd_array_free(&codec->user_pins);
1288 #endif
1289 	snd_array_free(&codec->init_pins);
1290 }
1291 
1292 /*
1293  * audio-converter setup caches
1294  */
1295 struct hda_cvt_setup {
1296 	hda_nid_t nid;
1297 	u8 stream_tag;
1298 	u8 channel_id;
1299 	u16 format_id;
1300 	unsigned char active;	/* cvt is currently used */
1301 	unsigned char dirty;	/* setups should be cleared */
1302 };
1303 
1304 /* get or create a cache entry for the given audio converter NID */
1305 static struct hda_cvt_setup *
1306 get_hda_cvt_setup(struct hda_codec *codec, hda_nid_t nid)
1307 {
1308 	struct hda_cvt_setup *p;
1309 	int i;
1310 
1311 	for (i = 0; i < codec->cvt_setups.used; i++) {
1312 		p = snd_array_elem(&codec->cvt_setups, i);
1313 		if (p->nid == nid)
1314 			return p;
1315 	}
1316 	p = snd_array_new(&codec->cvt_setups);
1317 	if (p)
1318 		p->nid = nid;
1319 	return p;
1320 }
1321 
1322 /*
1323  * Dynamic symbol binding for the codec parsers
1324  */
1325 
1326 #define load_parser(codec, sym) \
1327 	((codec)->parser = (int (*)(struct hda_codec *))symbol_request(sym))
1328 
1329 static void unload_parser(struct hda_codec *codec)
1330 {
1331 	if (codec->parser)
1332 		symbol_put_addr(codec->parser);
1333 	codec->parser = NULL;
1334 }
1335 
1336 /*
1337  * codec destructor
1338  */
1339 static void snd_hda_codec_free(struct hda_codec *codec)
1340 {
1341 	if (!codec)
1342 		return;
1343 	cancel_delayed_work_sync(&codec->jackpoll_work);
1344 	snd_hda_jack_tbl_clear(codec);
1345 	free_init_pincfgs(codec);
1346 #ifdef CONFIG_PM
1347 	cancel_delayed_work(&codec->power_work);
1348 	flush_workqueue(codec->bus->workq);
1349 #endif
1350 	list_del(&codec->list);
1351 	snd_array_free(&codec->mixers);
1352 	snd_array_free(&codec->nids);
1353 	snd_array_free(&codec->cvt_setups);
1354 	snd_array_free(&codec->spdif_out);
1355 	remove_conn_list(codec);
1356 	codec->bus->caddr_tbl[codec->addr] = NULL;
1357 	if (codec->patch_ops.free)
1358 		codec->patch_ops.free(codec);
1359 	hda_call_pm_notify(codec, false); /* cancel leftover refcounts */
1360 	snd_hda_sysfs_clear(codec);
1361 	unload_parser(codec);
1362 	module_put(codec->owner);
1363 	free_hda_cache(&codec->amp_cache);
1364 	free_hda_cache(&codec->cmd_cache);
1365 	kfree(codec->vendor_name);
1366 	kfree(codec->chip_name);
1367 	kfree(codec->modelname);
1368 	kfree(codec->wcaps);
1369 	codec->bus->num_codecs--;
1370 	put_device(&codec->dev);
1371 }
1372 
1373 static bool snd_hda_codec_get_supported_ps(struct hda_codec *codec,
1374 				hda_nid_t fg, unsigned int power_state);
1375 
1376 static unsigned int hda_set_power_state(struct hda_codec *codec,
1377 				unsigned int power_state);
1378 
1379 static int snd_hda_codec_dev_register(struct snd_device *device)
1380 {
1381 	struct hda_codec *codec = device->device_data;
1382 	int err = device_add(&codec->dev);
1383 
1384 	if (err < 0)
1385 		return err;
1386 	snd_hda_register_beep_device(codec);
1387 	return 0;
1388 }
1389 
1390 static int snd_hda_codec_dev_disconnect(struct snd_device *device)
1391 {
1392 	struct hda_codec *codec = device->device_data;
1393 
1394 	snd_hda_detach_beep_device(codec);
1395 	device_del(&codec->dev);
1396 	return 0;
1397 }
1398 
1399 static int snd_hda_codec_dev_free(struct snd_device *device)
1400 {
1401 	snd_hda_codec_free(device->device_data);
1402 	return 0;
1403 }
1404 
1405 /* just free the container */
1406 static void snd_hda_codec_dev_release(struct device *dev)
1407 {
1408 	kfree(container_of(dev, struct hda_codec, dev));
1409 }
1410 
1411 /**
1412  * snd_hda_codec_new - create a HDA codec
1413  * @bus: the bus to assign
1414  * @codec_addr: the codec address
1415  * @codecp: the pointer to store the generated codec
1416  *
1417  * Returns 0 if successful, or a negative error code.
1418  */
1419 int snd_hda_codec_new(struct hda_bus *bus,
1420 				unsigned int codec_addr,
1421 				struct hda_codec **codecp)
1422 {
1423 	struct hda_codec *codec;
1424 	char component[31];
1425 	hda_nid_t fg;
1426 	int err;
1427 	static struct snd_device_ops dev_ops = {
1428 		.dev_register = snd_hda_codec_dev_register,
1429 		.dev_disconnect = snd_hda_codec_dev_disconnect,
1430 		.dev_free = snd_hda_codec_dev_free,
1431 	};
1432 
1433 	if (snd_BUG_ON(!bus))
1434 		return -EINVAL;
1435 	if (snd_BUG_ON(codec_addr > HDA_MAX_CODEC_ADDRESS))
1436 		return -EINVAL;
1437 
1438 	if (bus->caddr_tbl[codec_addr]) {
1439 		dev_err(bus->card->dev,
1440 			"address 0x%x is already occupied\n",
1441 			codec_addr);
1442 		return -EBUSY;
1443 	}
1444 
1445 	codec = kzalloc(sizeof(*codec), GFP_KERNEL);
1446 	if (codec == NULL) {
1447 		dev_err(bus->card->dev, "can't allocate struct hda_codec\n");
1448 		return -ENOMEM;
1449 	}
1450 
1451 	device_initialize(&codec->dev);
1452 	codec->dev.parent = &bus->card->card_dev;
1453 	codec->dev.class = sound_class;
1454 	codec->dev.release = snd_hda_codec_dev_release;
1455 	codec->dev.groups = snd_hda_dev_attr_groups;
1456 	dev_set_name(&codec->dev, "hdaudioC%dD%d", bus->card->number,
1457 		     codec_addr);
1458 	dev_set_drvdata(&codec->dev, codec); /* for sysfs */
1459 
1460 	codec->bus = bus;
1461 	codec->addr = codec_addr;
1462 	mutex_init(&codec->spdif_mutex);
1463 	mutex_init(&codec->control_mutex);
1464 	mutex_init(&codec->hash_mutex);
1465 	init_hda_cache(&codec->amp_cache, sizeof(struct hda_amp_info));
1466 	init_hda_cache(&codec->cmd_cache, sizeof(struct hda_cache_head));
1467 	snd_array_init(&codec->mixers, sizeof(struct hda_nid_item), 32);
1468 	snd_array_init(&codec->nids, sizeof(struct hda_nid_item), 32);
1469 	snd_array_init(&codec->init_pins, sizeof(struct hda_pincfg), 16);
1470 	snd_array_init(&codec->driver_pins, sizeof(struct hda_pincfg), 16);
1471 	snd_array_init(&codec->cvt_setups, sizeof(struct hda_cvt_setup), 8);
1472 	snd_array_init(&codec->spdif_out, sizeof(struct hda_spdif_out), 16);
1473 	snd_array_init(&codec->jacktbl, sizeof(struct hda_jack_tbl), 16);
1474 	snd_array_init(&codec->verbs, sizeof(struct hda_verb *), 8);
1475 	INIT_LIST_HEAD(&codec->conn_list);
1476 
1477 	INIT_DELAYED_WORK(&codec->jackpoll_work, hda_jackpoll_work);
1478 	codec->depop_delay = -1;
1479 
1480 #ifdef CONFIG_PM
1481 	spin_lock_init(&codec->power_lock);
1482 	INIT_DELAYED_WORK(&codec->power_work, hda_power_work);
1483 	/* snd_hda_codec_new() marks the codec as power-up, and leave it as is.
1484 	 * the caller has to power down appropriatley after initialization
1485 	 * phase.
1486 	 */
1487 	hda_keep_power_on(codec);
1488 #endif
1489 
1490 	snd_hda_sysfs_init(codec);
1491 
1492 	if (codec->bus->modelname) {
1493 		codec->modelname = kstrdup(codec->bus->modelname, GFP_KERNEL);
1494 		if (!codec->modelname) {
1495 			err = -ENODEV;
1496 			goto error;
1497 		}
1498 	}
1499 
1500 	list_add_tail(&codec->list, &bus->codec_list);
1501 	bus->num_codecs++;
1502 
1503 	bus->caddr_tbl[codec_addr] = codec;
1504 
1505 	codec->vendor_id = snd_hda_param_read(codec, AC_NODE_ROOT,
1506 					      AC_PAR_VENDOR_ID);
1507 	if (codec->vendor_id == -1)
1508 		/* read again, hopefully the access method was corrected
1509 		 * in the last read...
1510 		 */
1511 		codec->vendor_id = snd_hda_param_read(codec, AC_NODE_ROOT,
1512 						      AC_PAR_VENDOR_ID);
1513 	codec->subsystem_id = snd_hda_param_read(codec, AC_NODE_ROOT,
1514 						 AC_PAR_SUBSYSTEM_ID);
1515 	codec->revision_id = snd_hda_param_read(codec, AC_NODE_ROOT,
1516 						AC_PAR_REV_ID);
1517 
1518 	setup_fg_nodes(codec);
1519 	if (!codec->afg && !codec->mfg) {
1520 		dev_err(bus->card->dev, "no AFG or MFG node found\n");
1521 		err = -ENODEV;
1522 		goto error;
1523 	}
1524 
1525 	fg = codec->afg ? codec->afg : codec->mfg;
1526 	err = read_widget_caps(codec, fg);
1527 	if (err < 0) {
1528 		dev_err(bus->card->dev, "cannot malloc\n");
1529 		goto error;
1530 	}
1531 	err = read_pin_defaults(codec);
1532 	if (err < 0)
1533 		goto error;
1534 
1535 	if (!codec->subsystem_id) {
1536 		codec->subsystem_id =
1537 			snd_hda_codec_read(codec, fg, 0,
1538 					   AC_VERB_GET_SUBSYSTEM_ID, 0);
1539 	}
1540 
1541 #ifdef CONFIG_PM
1542 	codec->d3_stop_clk = snd_hda_codec_get_supported_ps(codec, fg,
1543 					AC_PWRST_CLKSTOP);
1544 #endif
1545 	codec->epss = snd_hda_codec_get_supported_ps(codec, fg,
1546 					AC_PWRST_EPSS);
1547 #ifdef CONFIG_PM
1548 	if (!codec->d3_stop_clk || !codec->epss)
1549 		bus->power_keep_link_on = 1;
1550 #endif
1551 
1552 
1553 	/* power-up all before initialization */
1554 	hda_set_power_state(codec, AC_PWRST_D0);
1555 
1556 	snd_hda_codec_proc_new(codec);
1557 
1558 	snd_hda_create_hwdep(codec);
1559 
1560 	sprintf(component, "HDA:%08x,%08x,%08x", codec->vendor_id,
1561 		codec->subsystem_id, codec->revision_id);
1562 	snd_component_add(codec->bus->card, component);
1563 
1564 	err = snd_device_new(bus->card, SNDRV_DEV_CODEC, codec, &dev_ops);
1565 	if (err < 0)
1566 		goto error;
1567 
1568 	if (codecp)
1569 		*codecp = codec;
1570 	return 0;
1571 
1572  error:
1573 	snd_hda_codec_free(codec);
1574 	return err;
1575 }
1576 EXPORT_SYMBOL_GPL(snd_hda_codec_new);
1577 
1578 int snd_hda_codec_update_widgets(struct hda_codec *codec)
1579 {
1580 	hda_nid_t fg;
1581 	int err;
1582 
1583 	/* Assume the function group node does not change,
1584 	 * only the widget nodes may change.
1585 	 */
1586 	kfree(codec->wcaps);
1587 	fg = codec->afg ? codec->afg : codec->mfg;
1588 	err = read_widget_caps(codec, fg);
1589 	if (err < 0) {
1590 		codec_err(codec, "cannot malloc\n");
1591 		return err;
1592 	}
1593 
1594 	snd_array_free(&codec->init_pins);
1595 	err = read_pin_defaults(codec);
1596 
1597 	return err;
1598 }
1599 EXPORT_SYMBOL_GPL(snd_hda_codec_update_widgets);
1600 
1601 
1602 #if IS_ENABLED(CONFIG_SND_HDA_CODEC_HDMI)
1603 /* if all audio out widgets are digital, let's assume the codec as a HDMI/DP */
1604 static bool is_likely_hdmi_codec(struct hda_codec *codec)
1605 {
1606 	hda_nid_t nid = codec->start_nid;
1607 	int i;
1608 
1609 	for (i = 0; i < codec->num_nodes; i++, nid++) {
1610 		unsigned int wcaps = get_wcaps(codec, nid);
1611 		switch (get_wcaps_type(wcaps)) {
1612 		case AC_WID_AUD_IN:
1613 			return false; /* HDMI parser supports only HDMI out */
1614 		case AC_WID_AUD_OUT:
1615 			if (!(wcaps & AC_WCAP_DIGITAL))
1616 				return false;
1617 			break;
1618 		}
1619 	}
1620 	return true;
1621 }
1622 #else
1623 /* no HDMI codec parser support */
1624 #define is_likely_hdmi_codec(codec)	false
1625 #endif /* CONFIG_SND_HDA_CODEC_HDMI */
1626 
1627 /**
1628  * snd_hda_codec_configure - (Re-)configure the HD-audio codec
1629  * @codec: the HDA codec
1630  *
1631  * Start parsing of the given codec tree and (re-)initialize the whole
1632  * patch instance.
1633  *
1634  * Returns 0 if successful or a negative error code.
1635  */
1636 int snd_hda_codec_configure(struct hda_codec *codec)
1637 {
1638 	int (*patch)(struct hda_codec *) = NULL;
1639 	int err;
1640 
1641 	codec->preset = find_codec_preset(codec);
1642 	if (!codec->vendor_name || !codec->chip_name) {
1643 		err = get_codec_name(codec);
1644 		if (err < 0)
1645 			return err;
1646 	}
1647 
1648 	if (!is_generic_config(codec) && codec->preset)
1649 		patch = codec->preset->patch;
1650 	if (!patch) {
1651 		unload_parser(codec); /* to be sure */
1652 		if (is_likely_hdmi_codec(codec)) {
1653 #if IS_MODULE(CONFIG_SND_HDA_CODEC_HDMI)
1654 			patch = load_parser(codec, snd_hda_parse_hdmi_codec);
1655 #elif IS_BUILTIN(CONFIG_SND_HDA_CODEC_HDMI)
1656 			patch = snd_hda_parse_hdmi_codec;
1657 #endif
1658 		}
1659 		if (!patch) {
1660 #if IS_MODULE(CONFIG_SND_HDA_GENERIC)
1661 			patch = load_parser(codec, snd_hda_parse_generic_codec);
1662 #elif IS_BUILTIN(CONFIG_SND_HDA_GENERIC)
1663 			patch = snd_hda_parse_generic_codec;
1664 #endif
1665 		}
1666 		if (!patch) {
1667 			codec_err(codec, "No codec parser is available\n");
1668 			return -ENODEV;
1669 		}
1670 	}
1671 
1672 	err = patch(codec);
1673 	if (err < 0) {
1674 		unload_parser(codec);
1675 		return err;
1676 	}
1677 
1678 	if (codec->patch_ops.unsol_event) {
1679 		err = init_unsol_queue(codec->bus);
1680 		if (err < 0)
1681 			return err;
1682 	}
1683 
1684 	/* audio codec should override the mixer name */
1685 	if (codec->afg || !*codec->bus->card->mixername)
1686 		snprintf(codec->bus->card->mixername,
1687 			 sizeof(codec->bus->card->mixername),
1688 			 "%s %s", codec->vendor_name, codec->chip_name);
1689 	return 0;
1690 }
1691 EXPORT_SYMBOL_GPL(snd_hda_codec_configure);
1692 
1693 /* update the stream-id if changed */
1694 static void update_pcm_stream_id(struct hda_codec *codec,
1695 				 struct hda_cvt_setup *p, hda_nid_t nid,
1696 				 u32 stream_tag, int channel_id)
1697 {
1698 	unsigned int oldval, newval;
1699 
1700 	if (p->stream_tag != stream_tag || p->channel_id != channel_id) {
1701 		oldval = snd_hda_codec_read(codec, nid, 0, AC_VERB_GET_CONV, 0);
1702 		newval = (stream_tag << 4) | channel_id;
1703 		if (oldval != newval)
1704 			snd_hda_codec_write(codec, nid, 0,
1705 					    AC_VERB_SET_CHANNEL_STREAMID,
1706 					    newval);
1707 		p->stream_tag = stream_tag;
1708 		p->channel_id = channel_id;
1709 	}
1710 }
1711 
1712 /* update the format-id if changed */
1713 static void update_pcm_format(struct hda_codec *codec, struct hda_cvt_setup *p,
1714 			      hda_nid_t nid, int format)
1715 {
1716 	unsigned int oldval;
1717 
1718 	if (p->format_id != format) {
1719 		oldval = snd_hda_codec_read(codec, nid, 0,
1720 					    AC_VERB_GET_STREAM_FORMAT, 0);
1721 		if (oldval != format) {
1722 			msleep(1);
1723 			snd_hda_codec_write(codec, nid, 0,
1724 					    AC_VERB_SET_STREAM_FORMAT,
1725 					    format);
1726 		}
1727 		p->format_id = format;
1728 	}
1729 }
1730 
1731 /**
1732  * snd_hda_codec_setup_stream - set up the codec for streaming
1733  * @codec: the CODEC to set up
1734  * @nid: the NID to set up
1735  * @stream_tag: stream tag to pass, it's between 0x1 and 0xf.
1736  * @channel_id: channel id to pass, zero based.
1737  * @format: stream format.
1738  */
1739 void snd_hda_codec_setup_stream(struct hda_codec *codec, hda_nid_t nid,
1740 				u32 stream_tag,
1741 				int channel_id, int format)
1742 {
1743 	struct hda_codec *c;
1744 	struct hda_cvt_setup *p;
1745 	int type;
1746 	int i;
1747 
1748 	if (!nid)
1749 		return;
1750 
1751 	codec_dbg(codec,
1752 		  "hda_codec_setup_stream: NID=0x%x, stream=0x%x, channel=%d, format=0x%x\n",
1753 		  nid, stream_tag, channel_id, format);
1754 	p = get_hda_cvt_setup(codec, nid);
1755 	if (!p)
1756 		return;
1757 
1758 	if (codec->pcm_format_first)
1759 		update_pcm_format(codec, p, nid, format);
1760 	update_pcm_stream_id(codec, p, nid, stream_tag, channel_id);
1761 	if (!codec->pcm_format_first)
1762 		update_pcm_format(codec, p, nid, format);
1763 
1764 	p->active = 1;
1765 	p->dirty = 0;
1766 
1767 	/* make other inactive cvts with the same stream-tag dirty */
1768 	type = get_wcaps_type(get_wcaps(codec, nid));
1769 	list_for_each_entry(c, &codec->bus->codec_list, list) {
1770 		for (i = 0; i < c->cvt_setups.used; i++) {
1771 			p = snd_array_elem(&c->cvt_setups, i);
1772 			if (!p->active && p->stream_tag == stream_tag &&
1773 			    get_wcaps_type(get_wcaps(c, p->nid)) == type)
1774 				p->dirty = 1;
1775 		}
1776 	}
1777 }
1778 EXPORT_SYMBOL_GPL(snd_hda_codec_setup_stream);
1779 
1780 static void really_cleanup_stream(struct hda_codec *codec,
1781 				  struct hda_cvt_setup *q);
1782 
1783 /**
1784  * __snd_hda_codec_cleanup_stream - clean up the codec for closing
1785  * @codec: the CODEC to clean up
1786  * @nid: the NID to clean up
1787  * @do_now: really clean up the stream instead of clearing the active flag
1788  */
1789 void __snd_hda_codec_cleanup_stream(struct hda_codec *codec, hda_nid_t nid,
1790 				    int do_now)
1791 {
1792 	struct hda_cvt_setup *p;
1793 
1794 	if (!nid)
1795 		return;
1796 
1797 	if (codec->no_sticky_stream)
1798 		do_now = 1;
1799 
1800 	codec_dbg(codec, "hda_codec_cleanup_stream: NID=0x%x\n", nid);
1801 	p = get_hda_cvt_setup(codec, nid);
1802 	if (p) {
1803 		/* here we just clear the active flag when do_now isn't set;
1804 		 * actual clean-ups will be done later in
1805 		 * purify_inactive_streams() called from snd_hda_codec_prpapre()
1806 		 */
1807 		if (do_now)
1808 			really_cleanup_stream(codec, p);
1809 		else
1810 			p->active = 0;
1811 	}
1812 }
1813 EXPORT_SYMBOL_GPL(__snd_hda_codec_cleanup_stream);
1814 
1815 static void really_cleanup_stream(struct hda_codec *codec,
1816 				  struct hda_cvt_setup *q)
1817 {
1818 	hda_nid_t nid = q->nid;
1819 	if (q->stream_tag || q->channel_id)
1820 		snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_CHANNEL_STREAMID, 0);
1821 	if (q->format_id)
1822 		snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_STREAM_FORMAT, 0
1823 );
1824 	memset(q, 0, sizeof(*q));
1825 	q->nid = nid;
1826 }
1827 
1828 /* clean up the all conflicting obsolete streams */
1829 static void purify_inactive_streams(struct hda_codec *codec)
1830 {
1831 	struct hda_codec *c;
1832 	int i;
1833 
1834 	list_for_each_entry(c, &codec->bus->codec_list, list) {
1835 		for (i = 0; i < c->cvt_setups.used; i++) {
1836 			struct hda_cvt_setup *p;
1837 			p = snd_array_elem(&c->cvt_setups, i);
1838 			if (p->dirty)
1839 				really_cleanup_stream(c, p);
1840 		}
1841 	}
1842 }
1843 
1844 #ifdef CONFIG_PM
1845 /* clean up all streams; called from suspend */
1846 static void hda_cleanup_all_streams(struct hda_codec *codec)
1847 {
1848 	int i;
1849 
1850 	for (i = 0; i < codec->cvt_setups.used; i++) {
1851 		struct hda_cvt_setup *p = snd_array_elem(&codec->cvt_setups, i);
1852 		if (p->stream_tag)
1853 			really_cleanup_stream(codec, p);
1854 	}
1855 }
1856 #endif
1857 
1858 /*
1859  * amp access functions
1860  */
1861 
1862 /* FIXME: more better hash key? */
1863 #define HDA_HASH_KEY(nid, dir, idx) (u32)((nid) + ((idx) << 16) + ((dir) << 24))
1864 #define HDA_HASH_PINCAP_KEY(nid) (u32)((nid) + (0x02 << 24))
1865 #define HDA_HASH_PARPCM_KEY(nid) (u32)((nid) + (0x03 << 24))
1866 #define HDA_HASH_PARSTR_KEY(nid) (u32)((nid) + (0x04 << 24))
1867 #define INFO_AMP_CAPS	(1<<0)
1868 #define INFO_AMP_VOL(ch)	(1 << (1 + (ch)))
1869 
1870 /* initialize the hash table */
1871 static void init_hda_cache(struct hda_cache_rec *cache,
1872 				     unsigned int record_size)
1873 {
1874 	memset(cache, 0, sizeof(*cache));
1875 	memset(cache->hash, 0xff, sizeof(cache->hash));
1876 	snd_array_init(&cache->buf, record_size, 64);
1877 }
1878 
1879 static void free_hda_cache(struct hda_cache_rec *cache)
1880 {
1881 	snd_array_free(&cache->buf);
1882 }
1883 
1884 /* query the hash.  allocate an entry if not found. */
1885 static struct hda_cache_head  *get_hash(struct hda_cache_rec *cache, u32 key)
1886 {
1887 	u16 idx = key % (u16)ARRAY_SIZE(cache->hash);
1888 	u16 cur = cache->hash[idx];
1889 	struct hda_cache_head *info;
1890 
1891 	while (cur != 0xffff) {
1892 		info = snd_array_elem(&cache->buf, cur);
1893 		if (info->key == key)
1894 			return info;
1895 		cur = info->next;
1896 	}
1897 	return NULL;
1898 }
1899 
1900 /* query the hash.  allocate an entry if not found. */
1901 static struct hda_cache_head  *get_alloc_hash(struct hda_cache_rec *cache,
1902 					      u32 key)
1903 {
1904 	struct hda_cache_head *info = get_hash(cache, key);
1905 	if (!info) {
1906 		u16 idx, cur;
1907 		/* add a new hash entry */
1908 		info = snd_array_new(&cache->buf);
1909 		if (!info)
1910 			return NULL;
1911 		cur = snd_array_index(&cache->buf, info);
1912 		info->key = key;
1913 		info->val = 0;
1914 		info->dirty = 0;
1915 		idx = key % (u16)ARRAY_SIZE(cache->hash);
1916 		info->next = cache->hash[idx];
1917 		cache->hash[idx] = cur;
1918 	}
1919 	return info;
1920 }
1921 
1922 /* query and allocate an amp hash entry */
1923 static inline struct hda_amp_info *
1924 get_alloc_amp_hash(struct hda_codec *codec, u32 key)
1925 {
1926 	return (struct hda_amp_info *)get_alloc_hash(&codec->amp_cache, key);
1927 }
1928 
1929 /* overwrite the value with the key in the caps hash */
1930 static int write_caps_hash(struct hda_codec *codec, u32 key, unsigned int val)
1931 {
1932 	struct hda_amp_info *info;
1933 
1934 	mutex_lock(&codec->hash_mutex);
1935 	info = get_alloc_amp_hash(codec, key);
1936 	if (!info) {
1937 		mutex_unlock(&codec->hash_mutex);
1938 		return -EINVAL;
1939 	}
1940 	info->amp_caps = val;
1941 	info->head.val |= INFO_AMP_CAPS;
1942 	mutex_unlock(&codec->hash_mutex);
1943 	return 0;
1944 }
1945 
1946 /* query the value from the caps hash; if not found, fetch the current
1947  * value from the given function and store in the hash
1948  */
1949 static unsigned int
1950 query_caps_hash(struct hda_codec *codec, hda_nid_t nid, int dir, u32 key,
1951 		unsigned int (*func)(struct hda_codec *, hda_nid_t, int))
1952 {
1953 	struct hda_amp_info *info;
1954 	unsigned int val;
1955 
1956 	mutex_lock(&codec->hash_mutex);
1957 	info = get_alloc_amp_hash(codec, key);
1958 	if (!info) {
1959 		mutex_unlock(&codec->hash_mutex);
1960 		return 0;
1961 	}
1962 	if (!(info->head.val & INFO_AMP_CAPS)) {
1963 		mutex_unlock(&codec->hash_mutex); /* for reentrance */
1964 		val = func(codec, nid, dir);
1965 		write_caps_hash(codec, key, val);
1966 	} else {
1967 		val = info->amp_caps;
1968 		mutex_unlock(&codec->hash_mutex);
1969 	}
1970 	return val;
1971 }
1972 
1973 static unsigned int read_amp_cap(struct hda_codec *codec, hda_nid_t nid,
1974 				 int direction)
1975 {
1976 	if (!(get_wcaps(codec, nid) & AC_WCAP_AMP_OVRD))
1977 		nid = codec->afg;
1978 	return snd_hda_param_read(codec, nid,
1979 				  direction == HDA_OUTPUT ?
1980 				  AC_PAR_AMP_OUT_CAP : AC_PAR_AMP_IN_CAP);
1981 }
1982 
1983 /**
1984  * query_amp_caps - query AMP capabilities
1985  * @codec: the HD-auio codec
1986  * @nid: the NID to query
1987  * @direction: either #HDA_INPUT or #HDA_OUTPUT
1988  *
1989  * Query AMP capabilities for the given widget and direction.
1990  * Returns the obtained capability bits.
1991  *
1992  * When cap bits have been already read, this doesn't read again but
1993  * returns the cached value.
1994  */
1995 u32 query_amp_caps(struct hda_codec *codec, hda_nid_t nid, int direction)
1996 {
1997 	return query_caps_hash(codec, nid, direction,
1998 			       HDA_HASH_KEY(nid, direction, 0),
1999 			       read_amp_cap);
2000 }
2001 EXPORT_SYMBOL_GPL(query_amp_caps);
2002 
2003 /**
2004  * snd_hda_override_amp_caps - Override the AMP capabilities
2005  * @codec: the CODEC to clean up
2006  * @nid: the NID to clean up
2007  * @direction: either #HDA_INPUT or #HDA_OUTPUT
2008  * @caps: the capability bits to set
2009  *
2010  * Override the cached AMP caps bits value by the given one.
2011  * This function is useful if the driver needs to adjust the AMP ranges,
2012  * e.g. limit to 0dB, etc.
2013  *
2014  * Returns zero if successful or a negative error code.
2015  */
2016 int snd_hda_override_amp_caps(struct hda_codec *codec, hda_nid_t nid, int dir,
2017 			      unsigned int caps)
2018 {
2019 	return write_caps_hash(codec, HDA_HASH_KEY(nid, dir, 0), caps);
2020 }
2021 EXPORT_SYMBOL_GPL(snd_hda_override_amp_caps);
2022 
2023 static unsigned int read_pin_cap(struct hda_codec *codec, hda_nid_t nid,
2024 				 int dir)
2025 {
2026 	return snd_hda_param_read(codec, nid, AC_PAR_PIN_CAP);
2027 }
2028 
2029 /**
2030  * snd_hda_query_pin_caps - Query PIN capabilities
2031  * @codec: the HD-auio codec
2032  * @nid: the NID to query
2033  *
2034  * Query PIN capabilities for the given widget.
2035  * Returns the obtained capability bits.
2036  *
2037  * When cap bits have been already read, this doesn't read again but
2038  * returns the cached value.
2039  */
2040 u32 snd_hda_query_pin_caps(struct hda_codec *codec, hda_nid_t nid)
2041 {
2042 	return query_caps_hash(codec, nid, 0, HDA_HASH_PINCAP_KEY(nid),
2043 			       read_pin_cap);
2044 }
2045 EXPORT_SYMBOL_GPL(snd_hda_query_pin_caps);
2046 
2047 /**
2048  * snd_hda_override_pin_caps - Override the pin capabilities
2049  * @codec: the CODEC
2050  * @nid: the NID to override
2051  * @caps: the capability bits to set
2052  *
2053  * Override the cached PIN capabilitiy bits value by the given one.
2054  *
2055  * Returns zero if successful or a negative error code.
2056  */
2057 int snd_hda_override_pin_caps(struct hda_codec *codec, hda_nid_t nid,
2058 			      unsigned int caps)
2059 {
2060 	return write_caps_hash(codec, HDA_HASH_PINCAP_KEY(nid), caps);
2061 }
2062 EXPORT_SYMBOL_GPL(snd_hda_override_pin_caps);
2063 
2064 /* read or sync the hash value with the current value;
2065  * call within hash_mutex
2066  */
2067 static struct hda_amp_info *
2068 update_amp_hash(struct hda_codec *codec, hda_nid_t nid, int ch,
2069 		int direction, int index, bool init_only)
2070 {
2071 	struct hda_amp_info *info;
2072 	unsigned int parm, val = 0;
2073 	bool val_read = false;
2074 
2075  retry:
2076 	info = get_alloc_amp_hash(codec, HDA_HASH_KEY(nid, direction, index));
2077 	if (!info)
2078 		return NULL;
2079 	if (!(info->head.val & INFO_AMP_VOL(ch))) {
2080 		if (!val_read) {
2081 			mutex_unlock(&codec->hash_mutex);
2082 			parm = ch ? AC_AMP_GET_RIGHT : AC_AMP_GET_LEFT;
2083 			parm |= direction == HDA_OUTPUT ?
2084 				AC_AMP_GET_OUTPUT : AC_AMP_GET_INPUT;
2085 			parm |= index;
2086 			val = snd_hda_codec_read(codec, nid, 0,
2087 				 AC_VERB_GET_AMP_GAIN_MUTE, parm);
2088 			val &= 0xff;
2089 			val_read = true;
2090 			mutex_lock(&codec->hash_mutex);
2091 			goto retry;
2092 		}
2093 		info->vol[ch] = val;
2094 		info->head.val |= INFO_AMP_VOL(ch);
2095 	} else if (init_only)
2096 		return NULL;
2097 	return info;
2098 }
2099 
2100 /*
2101  * write the current volume in info to the h/w
2102  */
2103 static void put_vol_mute(struct hda_codec *codec, unsigned int amp_caps,
2104 			 hda_nid_t nid, int ch, int direction, int index,
2105 			 int val)
2106 {
2107 	u32 parm;
2108 
2109 	parm = ch ? AC_AMP_SET_RIGHT : AC_AMP_SET_LEFT;
2110 	parm |= direction == HDA_OUTPUT ? AC_AMP_SET_OUTPUT : AC_AMP_SET_INPUT;
2111 	parm |= index << AC_AMP_SET_INDEX_SHIFT;
2112 	if ((val & HDA_AMP_MUTE) && !(amp_caps & AC_AMPCAP_MUTE) &&
2113 	    (amp_caps & AC_AMPCAP_MIN_MUTE))
2114 		; /* set the zero value as a fake mute */
2115 	else
2116 		parm |= val;
2117 	snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_AMP_GAIN_MUTE, parm);
2118 }
2119 
2120 /**
2121  * snd_hda_codec_amp_read - Read AMP value
2122  * @codec: HD-audio codec
2123  * @nid: NID to read the AMP value
2124  * @ch: channel (left=0 or right=1)
2125  * @direction: #HDA_INPUT or #HDA_OUTPUT
2126  * @index: the index value (only for input direction)
2127  *
2128  * Read AMP value.  The volume is between 0 to 0x7f, 0x80 = mute bit.
2129  */
2130 int snd_hda_codec_amp_read(struct hda_codec *codec, hda_nid_t nid, int ch,
2131 			   int direction, int index)
2132 {
2133 	struct hda_amp_info *info;
2134 	unsigned int val = 0;
2135 
2136 	mutex_lock(&codec->hash_mutex);
2137 	info = update_amp_hash(codec, nid, ch, direction, index, false);
2138 	if (info)
2139 		val = info->vol[ch];
2140 	mutex_unlock(&codec->hash_mutex);
2141 	return val;
2142 }
2143 EXPORT_SYMBOL_GPL(snd_hda_codec_amp_read);
2144 
2145 static int codec_amp_update(struct hda_codec *codec, hda_nid_t nid, int ch,
2146 			    int direction, int idx, int mask, int val,
2147 			    bool init_only)
2148 {
2149 	struct hda_amp_info *info;
2150 	unsigned int caps;
2151 	unsigned int cache_only;
2152 
2153 	if (snd_BUG_ON(mask & ~0xff))
2154 		mask &= 0xff;
2155 	val &= mask;
2156 
2157 	mutex_lock(&codec->hash_mutex);
2158 	info = update_amp_hash(codec, nid, ch, direction, idx, init_only);
2159 	if (!info) {
2160 		mutex_unlock(&codec->hash_mutex);
2161 		return 0;
2162 	}
2163 	val |= info->vol[ch] & ~mask;
2164 	if (info->vol[ch] == val) {
2165 		mutex_unlock(&codec->hash_mutex);
2166 		return 0;
2167 	}
2168 	info->vol[ch] = val;
2169 	cache_only = info->head.dirty = codec->cached_write;
2170 	caps = info->amp_caps;
2171 	mutex_unlock(&codec->hash_mutex);
2172 	if (!cache_only)
2173 		put_vol_mute(codec, caps, nid, ch, direction, idx, val);
2174 	return 1;
2175 }
2176 
2177 /**
2178  * snd_hda_codec_amp_update - update the AMP value
2179  * @codec: HD-audio codec
2180  * @nid: NID to read the AMP value
2181  * @ch: channel (left=0 or right=1)
2182  * @direction: #HDA_INPUT or #HDA_OUTPUT
2183  * @idx: the index value (only for input direction)
2184  * @mask: bit mask to set
2185  * @val: the bits value to set
2186  *
2187  * Update the AMP value with a bit mask.
2188  * Returns 0 if the value is unchanged, 1 if changed.
2189  */
2190 int snd_hda_codec_amp_update(struct hda_codec *codec, hda_nid_t nid, int ch,
2191 			     int direction, int idx, int mask, int val)
2192 {
2193 	return codec_amp_update(codec, nid, ch, direction, idx, mask, val, false);
2194 }
2195 EXPORT_SYMBOL_GPL(snd_hda_codec_amp_update);
2196 
2197 /**
2198  * snd_hda_codec_amp_stereo - update the AMP stereo values
2199  * @codec: HD-audio codec
2200  * @nid: NID to read the AMP value
2201  * @direction: #HDA_INPUT or #HDA_OUTPUT
2202  * @idx: the index value (only for input direction)
2203  * @mask: bit mask to set
2204  * @val: the bits value to set
2205  *
2206  * Update the AMP values like snd_hda_codec_amp_update(), but for a
2207  * stereo widget with the same mask and value.
2208  */
2209 int snd_hda_codec_amp_stereo(struct hda_codec *codec, hda_nid_t nid,
2210 			     int direction, int idx, int mask, int val)
2211 {
2212 	int ch, ret = 0;
2213 
2214 	if (snd_BUG_ON(mask & ~0xff))
2215 		mask &= 0xff;
2216 	for (ch = 0; ch < 2; ch++)
2217 		ret |= snd_hda_codec_amp_update(codec, nid, ch, direction,
2218 						idx, mask, val);
2219 	return ret;
2220 }
2221 EXPORT_SYMBOL_GPL(snd_hda_codec_amp_stereo);
2222 
2223 /* Works like snd_hda_codec_amp_update() but it writes the value only at
2224  * the first access.  If the amp was already initialized / updated beforehand,
2225  * this does nothing.
2226  */
2227 int snd_hda_codec_amp_init(struct hda_codec *codec, hda_nid_t nid, int ch,
2228 			   int dir, int idx, int mask, int val)
2229 {
2230 	return codec_amp_update(codec, nid, ch, dir, idx, mask, val, true);
2231 }
2232 EXPORT_SYMBOL_GPL(snd_hda_codec_amp_init);
2233 
2234 int snd_hda_codec_amp_init_stereo(struct hda_codec *codec, hda_nid_t nid,
2235 				  int dir, int idx, int mask, int val)
2236 {
2237 	int ch, ret = 0;
2238 
2239 	if (snd_BUG_ON(mask & ~0xff))
2240 		mask &= 0xff;
2241 	for (ch = 0; ch < 2; ch++)
2242 		ret |= snd_hda_codec_amp_init(codec, nid, ch, dir,
2243 					      idx, mask, val);
2244 	return ret;
2245 }
2246 EXPORT_SYMBOL_GPL(snd_hda_codec_amp_init_stereo);
2247 
2248 /**
2249  * snd_hda_codec_resume_amp - Resume all AMP commands from the cache
2250  * @codec: HD-audio codec
2251  *
2252  * Resume the all amp commands from the cache.
2253  */
2254 void snd_hda_codec_resume_amp(struct hda_codec *codec)
2255 {
2256 	int i;
2257 
2258 	mutex_lock(&codec->hash_mutex);
2259 	codec->cached_write = 0;
2260 	for (i = 0; i < codec->amp_cache.buf.used; i++) {
2261 		struct hda_amp_info *buffer;
2262 		u32 key;
2263 		hda_nid_t nid;
2264 		unsigned int idx, dir, ch;
2265 		struct hda_amp_info info;
2266 
2267 		buffer = snd_array_elem(&codec->amp_cache.buf, i);
2268 		if (!buffer->head.dirty)
2269 			continue;
2270 		buffer->head.dirty = 0;
2271 		info = *buffer;
2272 		key = info.head.key;
2273 		if (!key)
2274 			continue;
2275 		nid = key & 0xff;
2276 		idx = (key >> 16) & 0xff;
2277 		dir = (key >> 24) & 0xff;
2278 		for (ch = 0; ch < 2; ch++) {
2279 			if (!(info.head.val & INFO_AMP_VOL(ch)))
2280 				continue;
2281 			mutex_unlock(&codec->hash_mutex);
2282 			put_vol_mute(codec, info.amp_caps, nid, ch, dir, idx,
2283 				     info.vol[ch]);
2284 			mutex_lock(&codec->hash_mutex);
2285 		}
2286 	}
2287 	mutex_unlock(&codec->hash_mutex);
2288 }
2289 EXPORT_SYMBOL_GPL(snd_hda_codec_resume_amp);
2290 
2291 static u32 get_amp_max_value(struct hda_codec *codec, hda_nid_t nid, int dir,
2292 			     unsigned int ofs)
2293 {
2294 	u32 caps = query_amp_caps(codec, nid, dir);
2295 	/* get num steps */
2296 	caps = (caps & AC_AMPCAP_NUM_STEPS) >> AC_AMPCAP_NUM_STEPS_SHIFT;
2297 	if (ofs < caps)
2298 		caps -= ofs;
2299 	return caps;
2300 }
2301 
2302 /**
2303  * snd_hda_mixer_amp_volume_info - Info callback for a standard AMP mixer
2304  *
2305  * The control element is supposed to have the private_value field
2306  * set up via HDA_COMPOSE_AMP_VAL*() or related macros.
2307  */
2308 int snd_hda_mixer_amp_volume_info(struct snd_kcontrol *kcontrol,
2309 				  struct snd_ctl_elem_info *uinfo)
2310 {
2311 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2312 	u16 nid = get_amp_nid(kcontrol);
2313 	u8 chs = get_amp_channels(kcontrol);
2314 	int dir = get_amp_direction(kcontrol);
2315 	unsigned int ofs = get_amp_offset(kcontrol);
2316 
2317 	uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
2318 	uinfo->count = chs == 3 ? 2 : 1;
2319 	uinfo->value.integer.min = 0;
2320 	uinfo->value.integer.max = get_amp_max_value(codec, nid, dir, ofs);
2321 	if (!uinfo->value.integer.max) {
2322 		codec_warn(codec,
2323 			   "num_steps = 0 for NID=0x%x (ctl = %s)\n",
2324 			   nid, kcontrol->id.name);
2325 		return -EINVAL;
2326 	}
2327 	return 0;
2328 }
2329 EXPORT_SYMBOL_GPL(snd_hda_mixer_amp_volume_info);
2330 
2331 
2332 static inline unsigned int
2333 read_amp_value(struct hda_codec *codec, hda_nid_t nid,
2334 	       int ch, int dir, int idx, unsigned int ofs)
2335 {
2336 	unsigned int val;
2337 	val = snd_hda_codec_amp_read(codec, nid, ch, dir, idx);
2338 	val &= HDA_AMP_VOLMASK;
2339 	if (val >= ofs)
2340 		val -= ofs;
2341 	else
2342 		val = 0;
2343 	return val;
2344 }
2345 
2346 static inline int
2347 update_amp_value(struct hda_codec *codec, hda_nid_t nid,
2348 		 int ch, int dir, int idx, unsigned int ofs,
2349 		 unsigned int val)
2350 {
2351 	unsigned int maxval;
2352 
2353 	if (val > 0)
2354 		val += ofs;
2355 	/* ofs = 0: raw max value */
2356 	maxval = get_amp_max_value(codec, nid, dir, 0);
2357 	if (val > maxval)
2358 		val = maxval;
2359 	return snd_hda_codec_amp_update(codec, nid, ch, dir, idx,
2360 					HDA_AMP_VOLMASK, val);
2361 }
2362 
2363 /**
2364  * snd_hda_mixer_amp_volume_get - Get callback for a standard AMP mixer volume
2365  *
2366  * The control element is supposed to have the private_value field
2367  * set up via HDA_COMPOSE_AMP_VAL*() or related macros.
2368  */
2369 int snd_hda_mixer_amp_volume_get(struct snd_kcontrol *kcontrol,
2370 				 struct snd_ctl_elem_value *ucontrol)
2371 {
2372 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2373 	hda_nid_t nid = get_amp_nid(kcontrol);
2374 	int chs = get_amp_channels(kcontrol);
2375 	int dir = get_amp_direction(kcontrol);
2376 	int idx = get_amp_index(kcontrol);
2377 	unsigned int ofs = get_amp_offset(kcontrol);
2378 	long *valp = ucontrol->value.integer.value;
2379 
2380 	if (chs & 1)
2381 		*valp++ = read_amp_value(codec, nid, 0, dir, idx, ofs);
2382 	if (chs & 2)
2383 		*valp = read_amp_value(codec, nid, 1, dir, idx, ofs);
2384 	return 0;
2385 }
2386 EXPORT_SYMBOL_GPL(snd_hda_mixer_amp_volume_get);
2387 
2388 /**
2389  * snd_hda_mixer_amp_volume_put - Put callback for a standard AMP mixer volume
2390  *
2391  * The control element is supposed to have the private_value field
2392  * set up via HDA_COMPOSE_AMP_VAL*() or related macros.
2393  */
2394 int snd_hda_mixer_amp_volume_put(struct snd_kcontrol *kcontrol,
2395 				 struct snd_ctl_elem_value *ucontrol)
2396 {
2397 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2398 	hda_nid_t nid = get_amp_nid(kcontrol);
2399 	int chs = get_amp_channels(kcontrol);
2400 	int dir = get_amp_direction(kcontrol);
2401 	int idx = get_amp_index(kcontrol);
2402 	unsigned int ofs = get_amp_offset(kcontrol);
2403 	long *valp = ucontrol->value.integer.value;
2404 	int change = 0;
2405 
2406 	snd_hda_power_up(codec);
2407 	if (chs & 1) {
2408 		change = update_amp_value(codec, nid, 0, dir, idx, ofs, *valp);
2409 		valp++;
2410 	}
2411 	if (chs & 2)
2412 		change |= update_amp_value(codec, nid, 1, dir, idx, ofs, *valp);
2413 	snd_hda_power_down(codec);
2414 	return change;
2415 }
2416 EXPORT_SYMBOL_GPL(snd_hda_mixer_amp_volume_put);
2417 
2418 /**
2419  * snd_hda_mixer_amp_volume_put - TLV callback for a standard AMP mixer volume
2420  *
2421  * The control element is supposed to have the private_value field
2422  * set up via HDA_COMPOSE_AMP_VAL*() or related macros.
2423  */
2424 int snd_hda_mixer_amp_tlv(struct snd_kcontrol *kcontrol, int op_flag,
2425 			  unsigned int size, unsigned int __user *_tlv)
2426 {
2427 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2428 	hda_nid_t nid = get_amp_nid(kcontrol);
2429 	int dir = get_amp_direction(kcontrol);
2430 	unsigned int ofs = get_amp_offset(kcontrol);
2431 	bool min_mute = get_amp_min_mute(kcontrol);
2432 	u32 caps, val1, val2;
2433 
2434 	if (size < 4 * sizeof(unsigned int))
2435 		return -ENOMEM;
2436 	caps = query_amp_caps(codec, nid, dir);
2437 	val2 = (caps & AC_AMPCAP_STEP_SIZE) >> AC_AMPCAP_STEP_SIZE_SHIFT;
2438 	val2 = (val2 + 1) * 25;
2439 	val1 = -((caps & AC_AMPCAP_OFFSET) >> AC_AMPCAP_OFFSET_SHIFT);
2440 	val1 += ofs;
2441 	val1 = ((int)val1) * ((int)val2);
2442 	if (min_mute || (caps & AC_AMPCAP_MIN_MUTE))
2443 		val2 |= TLV_DB_SCALE_MUTE;
2444 	if (put_user(SNDRV_CTL_TLVT_DB_SCALE, _tlv))
2445 		return -EFAULT;
2446 	if (put_user(2 * sizeof(unsigned int), _tlv + 1))
2447 		return -EFAULT;
2448 	if (put_user(val1, _tlv + 2))
2449 		return -EFAULT;
2450 	if (put_user(val2, _tlv + 3))
2451 		return -EFAULT;
2452 	return 0;
2453 }
2454 EXPORT_SYMBOL_GPL(snd_hda_mixer_amp_tlv);
2455 
2456 /**
2457  * snd_hda_set_vmaster_tlv - Set TLV for a virtual master control
2458  * @codec: HD-audio codec
2459  * @nid: NID of a reference widget
2460  * @dir: #HDA_INPUT or #HDA_OUTPUT
2461  * @tlv: TLV data to be stored, at least 4 elements
2462  *
2463  * Set (static) TLV data for a virtual master volume using the AMP caps
2464  * obtained from the reference NID.
2465  * The volume range is recalculated as if the max volume is 0dB.
2466  */
2467 void snd_hda_set_vmaster_tlv(struct hda_codec *codec, hda_nid_t nid, int dir,
2468 			     unsigned int *tlv)
2469 {
2470 	u32 caps;
2471 	int nums, step;
2472 
2473 	caps = query_amp_caps(codec, nid, dir);
2474 	nums = (caps & AC_AMPCAP_NUM_STEPS) >> AC_AMPCAP_NUM_STEPS_SHIFT;
2475 	step = (caps & AC_AMPCAP_STEP_SIZE) >> AC_AMPCAP_STEP_SIZE_SHIFT;
2476 	step = (step + 1) * 25;
2477 	tlv[0] = SNDRV_CTL_TLVT_DB_SCALE;
2478 	tlv[1] = 2 * sizeof(unsigned int);
2479 	tlv[2] = -nums * step;
2480 	tlv[3] = step;
2481 }
2482 EXPORT_SYMBOL_GPL(snd_hda_set_vmaster_tlv);
2483 
2484 /* find a mixer control element with the given name */
2485 static struct snd_kcontrol *
2486 find_mixer_ctl(struct hda_codec *codec, const char *name, int dev, int idx)
2487 {
2488 	struct snd_ctl_elem_id id;
2489 	memset(&id, 0, sizeof(id));
2490 	id.iface = SNDRV_CTL_ELEM_IFACE_MIXER;
2491 	id.device = dev;
2492 	id.index = idx;
2493 	if (snd_BUG_ON(strlen(name) >= sizeof(id.name)))
2494 		return NULL;
2495 	strcpy(id.name, name);
2496 	return snd_ctl_find_id(codec->bus->card, &id);
2497 }
2498 
2499 /**
2500  * snd_hda_find_mixer_ctl - Find a mixer control element with the given name
2501  * @codec: HD-audio codec
2502  * @name: ctl id name string
2503  *
2504  * Get the control element with the given id string and IFACE_MIXER.
2505  */
2506 struct snd_kcontrol *snd_hda_find_mixer_ctl(struct hda_codec *codec,
2507 					    const char *name)
2508 {
2509 	return find_mixer_ctl(codec, name, 0, 0);
2510 }
2511 EXPORT_SYMBOL_GPL(snd_hda_find_mixer_ctl);
2512 
2513 static int find_empty_mixer_ctl_idx(struct hda_codec *codec, const char *name,
2514 				    int start_idx)
2515 {
2516 	int i, idx;
2517 	/* 16 ctlrs should be large enough */
2518 	for (i = 0, idx = start_idx; i < 16; i++, idx++) {
2519 		if (!find_mixer_ctl(codec, name, 0, idx))
2520 			return idx;
2521 	}
2522 	return -EBUSY;
2523 }
2524 
2525 /**
2526  * snd_hda_ctl_add - Add a control element and assign to the codec
2527  * @codec: HD-audio codec
2528  * @nid: corresponding NID (optional)
2529  * @kctl: the control element to assign
2530  *
2531  * Add the given control element to an array inside the codec instance.
2532  * All control elements belonging to a codec are supposed to be added
2533  * by this function so that a proper clean-up works at the free or
2534  * reconfiguration time.
2535  *
2536  * If non-zero @nid is passed, the NID is assigned to the control element.
2537  * The assignment is shown in the codec proc file.
2538  *
2539  * snd_hda_ctl_add() checks the control subdev id field whether
2540  * #HDA_SUBDEV_NID_FLAG bit is set.  If set (and @nid is zero), the lower
2541  * bits value is taken as the NID to assign. The #HDA_NID_ITEM_AMP bit
2542  * specifies if kctl->private_value is a HDA amplifier value.
2543  */
2544 int snd_hda_ctl_add(struct hda_codec *codec, hda_nid_t nid,
2545 		    struct snd_kcontrol *kctl)
2546 {
2547 	int err;
2548 	unsigned short flags = 0;
2549 	struct hda_nid_item *item;
2550 
2551 	if (kctl->id.subdevice & HDA_SUBDEV_AMP_FLAG) {
2552 		flags |= HDA_NID_ITEM_AMP;
2553 		if (nid == 0)
2554 			nid = get_amp_nid_(kctl->private_value);
2555 	}
2556 	if ((kctl->id.subdevice & HDA_SUBDEV_NID_FLAG) != 0 && nid == 0)
2557 		nid = kctl->id.subdevice & 0xffff;
2558 	if (kctl->id.subdevice & (HDA_SUBDEV_NID_FLAG|HDA_SUBDEV_AMP_FLAG))
2559 		kctl->id.subdevice = 0;
2560 	err = snd_ctl_add(codec->bus->card, kctl);
2561 	if (err < 0)
2562 		return err;
2563 	item = snd_array_new(&codec->mixers);
2564 	if (!item)
2565 		return -ENOMEM;
2566 	item->kctl = kctl;
2567 	item->nid = nid;
2568 	item->flags = flags;
2569 	return 0;
2570 }
2571 EXPORT_SYMBOL_GPL(snd_hda_ctl_add);
2572 
2573 /**
2574  * snd_hda_add_nid - Assign a NID to a control element
2575  * @codec: HD-audio codec
2576  * @nid: corresponding NID (optional)
2577  * @kctl: the control element to assign
2578  * @index: index to kctl
2579  *
2580  * Add the given control element to an array inside the codec instance.
2581  * This function is used when #snd_hda_ctl_add cannot be used for 1:1
2582  * NID:KCTL mapping - for example "Capture Source" selector.
2583  */
2584 int snd_hda_add_nid(struct hda_codec *codec, struct snd_kcontrol *kctl,
2585 		    unsigned int index, hda_nid_t nid)
2586 {
2587 	struct hda_nid_item *item;
2588 
2589 	if (nid > 0) {
2590 		item = snd_array_new(&codec->nids);
2591 		if (!item)
2592 			return -ENOMEM;
2593 		item->kctl = kctl;
2594 		item->index = index;
2595 		item->nid = nid;
2596 		return 0;
2597 	}
2598 	codec_err(codec, "no NID for mapping control %s:%d:%d\n",
2599 		  kctl->id.name, kctl->id.index, index);
2600 	return -EINVAL;
2601 }
2602 EXPORT_SYMBOL_GPL(snd_hda_add_nid);
2603 
2604 /**
2605  * snd_hda_ctls_clear - Clear all controls assigned to the given codec
2606  * @codec: HD-audio codec
2607  */
2608 void snd_hda_ctls_clear(struct hda_codec *codec)
2609 {
2610 	int i;
2611 	struct hda_nid_item *items = codec->mixers.list;
2612 	for (i = 0; i < codec->mixers.used; i++)
2613 		snd_ctl_remove(codec->bus->card, items[i].kctl);
2614 	snd_array_free(&codec->mixers);
2615 	snd_array_free(&codec->nids);
2616 }
2617 
2618 /* pseudo device locking
2619  * toggle card->shutdown to allow/disallow the device access (as a hack)
2620  */
2621 int snd_hda_lock_devices(struct hda_bus *bus)
2622 {
2623 	struct snd_card *card = bus->card;
2624 	struct hda_codec *codec;
2625 
2626 	spin_lock(&card->files_lock);
2627 	if (card->shutdown)
2628 		goto err_unlock;
2629 	card->shutdown = 1;
2630 	if (!list_empty(&card->ctl_files))
2631 		goto err_clear;
2632 
2633 	list_for_each_entry(codec, &bus->codec_list, list) {
2634 		int pcm;
2635 		for (pcm = 0; pcm < codec->num_pcms; pcm++) {
2636 			struct hda_pcm *cpcm = &codec->pcm_info[pcm];
2637 			if (!cpcm->pcm)
2638 				continue;
2639 			if (cpcm->pcm->streams[0].substream_opened ||
2640 			    cpcm->pcm->streams[1].substream_opened)
2641 				goto err_clear;
2642 		}
2643 	}
2644 	spin_unlock(&card->files_lock);
2645 	return 0;
2646 
2647  err_clear:
2648 	card->shutdown = 0;
2649  err_unlock:
2650 	spin_unlock(&card->files_lock);
2651 	return -EINVAL;
2652 }
2653 EXPORT_SYMBOL_GPL(snd_hda_lock_devices);
2654 
2655 void snd_hda_unlock_devices(struct hda_bus *bus)
2656 {
2657 	struct snd_card *card = bus->card;
2658 
2659 	card = bus->card;
2660 	spin_lock(&card->files_lock);
2661 	card->shutdown = 0;
2662 	spin_unlock(&card->files_lock);
2663 }
2664 EXPORT_SYMBOL_GPL(snd_hda_unlock_devices);
2665 
2666 /**
2667  * snd_hda_codec_reset - Clear all objects assigned to the codec
2668  * @codec: HD-audio codec
2669  *
2670  * This frees the all PCM and control elements assigned to the codec, and
2671  * clears the caches and restores the pin default configurations.
2672  *
2673  * When a device is being used, it returns -EBSY.  If successfully freed,
2674  * returns zero.
2675  */
2676 int snd_hda_codec_reset(struct hda_codec *codec)
2677 {
2678 	struct hda_bus *bus = codec->bus;
2679 	struct snd_card *card = bus->card;
2680 	int i;
2681 
2682 	if (snd_hda_lock_devices(bus) < 0)
2683 		return -EBUSY;
2684 
2685 	/* OK, let it free */
2686 	cancel_delayed_work_sync(&codec->jackpoll_work);
2687 #ifdef CONFIG_PM
2688 	cancel_delayed_work_sync(&codec->power_work);
2689 	flush_workqueue(bus->workq);
2690 #endif
2691 	snd_hda_ctls_clear(codec);
2692 	/* release PCMs */
2693 	for (i = 0; i < codec->num_pcms; i++) {
2694 		if (codec->pcm_info[i].pcm) {
2695 			snd_device_free(card, codec->pcm_info[i].pcm);
2696 			clear_bit(codec->pcm_info[i].device,
2697 				  bus->pcm_dev_bits);
2698 		}
2699 	}
2700 	snd_hda_detach_beep_device(codec);
2701 	if (codec->patch_ops.free)
2702 		codec->patch_ops.free(codec);
2703 	memset(&codec->patch_ops, 0, sizeof(codec->patch_ops));
2704 	snd_hda_jack_tbl_clear(codec);
2705 	codec->proc_widget_hook = NULL;
2706 	codec->spec = NULL;
2707 	free_hda_cache(&codec->amp_cache);
2708 	free_hda_cache(&codec->cmd_cache);
2709 	init_hda_cache(&codec->amp_cache, sizeof(struct hda_amp_info));
2710 	init_hda_cache(&codec->cmd_cache, sizeof(struct hda_cache_head));
2711 	/* free only driver_pins so that init_pins + user_pins are restored */
2712 	snd_array_free(&codec->driver_pins);
2713 	snd_array_free(&codec->cvt_setups);
2714 	snd_array_free(&codec->spdif_out);
2715 	snd_array_free(&codec->verbs);
2716 	codec->num_pcms = 0;
2717 	codec->pcm_info = NULL;
2718 	codec->preset = NULL;
2719 	codec->slave_dig_outs = NULL;
2720 	codec->spdif_status_reset = 0;
2721 	unload_parser(codec);
2722 	module_put(codec->owner);
2723 	codec->owner = NULL;
2724 
2725 	/* allow device access again */
2726 	snd_hda_unlock_devices(bus);
2727 	return 0;
2728 }
2729 
2730 typedef int (*map_slave_func_t)(void *, struct snd_kcontrol *);
2731 
2732 /* apply the function to all matching slave ctls in the mixer list */
2733 static int map_slaves(struct hda_codec *codec, const char * const *slaves,
2734 		      const char *suffix, map_slave_func_t func, void *data)
2735 {
2736 	struct hda_nid_item *items;
2737 	const char * const *s;
2738 	int i, err;
2739 
2740 	items = codec->mixers.list;
2741 	for (i = 0; i < codec->mixers.used; i++) {
2742 		struct snd_kcontrol *sctl = items[i].kctl;
2743 		if (!sctl || sctl->id.iface != SNDRV_CTL_ELEM_IFACE_MIXER)
2744 			continue;
2745 		for (s = slaves; *s; s++) {
2746 			char tmpname[sizeof(sctl->id.name)];
2747 			const char *name = *s;
2748 			if (suffix) {
2749 				snprintf(tmpname, sizeof(tmpname), "%s %s",
2750 					 name, suffix);
2751 				name = tmpname;
2752 			}
2753 			if (!strcmp(sctl->id.name, name)) {
2754 				err = func(data, sctl);
2755 				if (err)
2756 					return err;
2757 				break;
2758 			}
2759 		}
2760 	}
2761 	return 0;
2762 }
2763 
2764 static int check_slave_present(void *data, struct snd_kcontrol *sctl)
2765 {
2766 	return 1;
2767 }
2768 
2769 /* guess the value corresponding to 0dB */
2770 static int get_kctl_0dB_offset(struct snd_kcontrol *kctl, int *step_to_check)
2771 {
2772 	int _tlv[4];
2773 	const int *tlv = NULL;
2774 	int val = -1;
2775 
2776 	if (kctl->vd[0].access & SNDRV_CTL_ELEM_ACCESS_TLV_CALLBACK) {
2777 		/* FIXME: set_fs() hack for obtaining user-space TLV data */
2778 		mm_segment_t fs = get_fs();
2779 		set_fs(get_ds());
2780 		if (!kctl->tlv.c(kctl, 0, sizeof(_tlv), _tlv))
2781 			tlv = _tlv;
2782 		set_fs(fs);
2783 	} else if (kctl->vd[0].access & SNDRV_CTL_ELEM_ACCESS_TLV_READ)
2784 		tlv = kctl->tlv.p;
2785 	if (tlv && tlv[0] == SNDRV_CTL_TLVT_DB_SCALE) {
2786 		int step = tlv[3];
2787 		step &= ~TLV_DB_SCALE_MUTE;
2788 		if (!step)
2789 			return -1;
2790 		if (*step_to_check && *step_to_check != step) {
2791 			snd_printk(KERN_ERR "hda_codec: Mismatching dB step for vmaster slave (%d!=%d)\n",
2792 -				   *step_to_check, step);
2793 			return -1;
2794 		}
2795 		*step_to_check = step;
2796 		val = -tlv[2] / step;
2797 	}
2798 	return val;
2799 }
2800 
2801 /* call kctl->put with the given value(s) */
2802 static int put_kctl_with_value(struct snd_kcontrol *kctl, int val)
2803 {
2804 	struct snd_ctl_elem_value *ucontrol;
2805 	ucontrol = kzalloc(sizeof(*ucontrol), GFP_KERNEL);
2806 	if (!ucontrol)
2807 		return -ENOMEM;
2808 	ucontrol->value.integer.value[0] = val;
2809 	ucontrol->value.integer.value[1] = val;
2810 	kctl->put(kctl, ucontrol);
2811 	kfree(ucontrol);
2812 	return 0;
2813 }
2814 
2815 /* initialize the slave volume with 0dB */
2816 static int init_slave_0dB(void *data, struct snd_kcontrol *slave)
2817 {
2818 	int offset = get_kctl_0dB_offset(slave, data);
2819 	if (offset > 0)
2820 		put_kctl_with_value(slave, offset);
2821 	return 0;
2822 }
2823 
2824 /* unmute the slave */
2825 static int init_slave_unmute(void *data, struct snd_kcontrol *slave)
2826 {
2827 	return put_kctl_with_value(slave, 1);
2828 }
2829 
2830 /**
2831  * snd_hda_add_vmaster - create a virtual master control and add slaves
2832  * @codec: HD-audio codec
2833  * @name: vmaster control name
2834  * @tlv: TLV data (optional)
2835  * @slaves: slave control names (optional)
2836  * @suffix: suffix string to each slave name (optional)
2837  * @init_slave_vol: initialize slaves to unmute/0dB
2838  * @ctl_ret: store the vmaster kcontrol in return
2839  *
2840  * Create a virtual master control with the given name.  The TLV data
2841  * must be either NULL or a valid data.
2842  *
2843  * @slaves is a NULL-terminated array of strings, each of which is a
2844  * slave control name.  All controls with these names are assigned to
2845  * the new virtual master control.
2846  *
2847  * This function returns zero if successful or a negative error code.
2848  */
2849 int __snd_hda_add_vmaster(struct hda_codec *codec, char *name,
2850 			unsigned int *tlv, const char * const *slaves,
2851 			  const char *suffix, bool init_slave_vol,
2852 			  struct snd_kcontrol **ctl_ret)
2853 {
2854 	struct snd_kcontrol *kctl;
2855 	int err;
2856 
2857 	if (ctl_ret)
2858 		*ctl_ret = NULL;
2859 
2860 	err = map_slaves(codec, slaves, suffix, check_slave_present, NULL);
2861 	if (err != 1) {
2862 		codec_dbg(codec, "No slave found for %s\n", name);
2863 		return 0;
2864 	}
2865 	kctl = snd_ctl_make_virtual_master(name, tlv);
2866 	if (!kctl)
2867 		return -ENOMEM;
2868 	err = snd_hda_ctl_add(codec, 0, kctl);
2869 	if (err < 0)
2870 		return err;
2871 
2872 	err = map_slaves(codec, slaves, suffix,
2873 			 (map_slave_func_t)snd_ctl_add_slave, kctl);
2874 	if (err < 0)
2875 		return err;
2876 
2877 	/* init with master mute & zero volume */
2878 	put_kctl_with_value(kctl, 0);
2879 	if (init_slave_vol) {
2880 		int step = 0;
2881 		map_slaves(codec, slaves, suffix,
2882 			   tlv ? init_slave_0dB : init_slave_unmute, &step);
2883 	}
2884 
2885 	if (ctl_ret)
2886 		*ctl_ret = kctl;
2887 	return 0;
2888 }
2889 EXPORT_SYMBOL_GPL(__snd_hda_add_vmaster);
2890 
2891 /*
2892  * mute-LED control using vmaster
2893  */
2894 static int vmaster_mute_mode_info(struct snd_kcontrol *kcontrol,
2895 				  struct snd_ctl_elem_info *uinfo)
2896 {
2897 	static const char * const texts[] = {
2898 		"On", "Off", "Follow Master"
2899 	};
2900 	unsigned int index;
2901 
2902 	uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
2903 	uinfo->count = 1;
2904 	uinfo->value.enumerated.items = 3;
2905 	index = uinfo->value.enumerated.item;
2906 	if (index >= 3)
2907 		index = 2;
2908 	strcpy(uinfo->value.enumerated.name, texts[index]);
2909 	return 0;
2910 }
2911 
2912 static int vmaster_mute_mode_get(struct snd_kcontrol *kcontrol,
2913 				 struct snd_ctl_elem_value *ucontrol)
2914 {
2915 	struct hda_vmaster_mute_hook *hook = snd_kcontrol_chip(kcontrol);
2916 	ucontrol->value.enumerated.item[0] = hook->mute_mode;
2917 	return 0;
2918 }
2919 
2920 static int vmaster_mute_mode_put(struct snd_kcontrol *kcontrol,
2921 				 struct snd_ctl_elem_value *ucontrol)
2922 {
2923 	struct hda_vmaster_mute_hook *hook = snd_kcontrol_chip(kcontrol);
2924 	unsigned int old_mode = hook->mute_mode;
2925 
2926 	hook->mute_mode = ucontrol->value.enumerated.item[0];
2927 	if (hook->mute_mode > HDA_VMUTE_FOLLOW_MASTER)
2928 		hook->mute_mode = HDA_VMUTE_FOLLOW_MASTER;
2929 	if (old_mode == hook->mute_mode)
2930 		return 0;
2931 	snd_hda_sync_vmaster_hook(hook);
2932 	return 1;
2933 }
2934 
2935 static struct snd_kcontrol_new vmaster_mute_mode = {
2936 	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2937 	.name = "Mute-LED Mode",
2938 	.info = vmaster_mute_mode_info,
2939 	.get = vmaster_mute_mode_get,
2940 	.put = vmaster_mute_mode_put,
2941 };
2942 
2943 /*
2944  * Add a mute-LED hook with the given vmaster switch kctl
2945  * "Mute-LED Mode" control is automatically created and associated with
2946  * the given hook.
2947  */
2948 int snd_hda_add_vmaster_hook(struct hda_codec *codec,
2949 			     struct hda_vmaster_mute_hook *hook,
2950 			     bool expose_enum_ctl)
2951 {
2952 	struct snd_kcontrol *kctl;
2953 
2954 	if (!hook->hook || !hook->sw_kctl)
2955 		return 0;
2956 	snd_ctl_add_vmaster_hook(hook->sw_kctl, hook->hook, codec);
2957 	hook->codec = codec;
2958 	hook->mute_mode = HDA_VMUTE_FOLLOW_MASTER;
2959 	if (!expose_enum_ctl)
2960 		return 0;
2961 	kctl = snd_ctl_new1(&vmaster_mute_mode, hook);
2962 	if (!kctl)
2963 		return -ENOMEM;
2964 	return snd_hda_ctl_add(codec, 0, kctl);
2965 }
2966 EXPORT_SYMBOL_GPL(snd_hda_add_vmaster_hook);
2967 
2968 /*
2969  * Call the hook with the current value for synchronization
2970  * Should be called in init callback
2971  */
2972 void snd_hda_sync_vmaster_hook(struct hda_vmaster_mute_hook *hook)
2973 {
2974 	if (!hook->hook || !hook->codec)
2975 		return;
2976 	/* don't call vmaster hook in the destructor since it might have
2977 	 * been already destroyed
2978 	 */
2979 	if (hook->codec->bus->shutdown)
2980 		return;
2981 	switch (hook->mute_mode) {
2982 	case HDA_VMUTE_FOLLOW_MASTER:
2983 		snd_ctl_sync_vmaster_hook(hook->sw_kctl);
2984 		break;
2985 	default:
2986 		hook->hook(hook->codec, hook->mute_mode);
2987 		break;
2988 	}
2989 }
2990 EXPORT_SYMBOL_GPL(snd_hda_sync_vmaster_hook);
2991 
2992 
2993 /**
2994  * snd_hda_mixer_amp_switch_info - Info callback for a standard AMP mixer switch
2995  *
2996  * The control element is supposed to have the private_value field
2997  * set up via HDA_COMPOSE_AMP_VAL*() or related macros.
2998  */
2999 int snd_hda_mixer_amp_switch_info(struct snd_kcontrol *kcontrol,
3000 				  struct snd_ctl_elem_info *uinfo)
3001 {
3002 	int chs = get_amp_channels(kcontrol);
3003 
3004 	uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
3005 	uinfo->count = chs == 3 ? 2 : 1;
3006 	uinfo->value.integer.min = 0;
3007 	uinfo->value.integer.max = 1;
3008 	return 0;
3009 }
3010 EXPORT_SYMBOL_GPL(snd_hda_mixer_amp_switch_info);
3011 
3012 /**
3013  * snd_hda_mixer_amp_switch_get - Get callback for a standard AMP mixer switch
3014  *
3015  * The control element is supposed to have the private_value field
3016  * set up via HDA_COMPOSE_AMP_VAL*() or related macros.
3017  */
3018 int snd_hda_mixer_amp_switch_get(struct snd_kcontrol *kcontrol,
3019 				 struct snd_ctl_elem_value *ucontrol)
3020 {
3021 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3022 	hda_nid_t nid = get_amp_nid(kcontrol);
3023 	int chs = get_amp_channels(kcontrol);
3024 	int dir = get_amp_direction(kcontrol);
3025 	int idx = get_amp_index(kcontrol);
3026 	long *valp = ucontrol->value.integer.value;
3027 
3028 	if (chs & 1)
3029 		*valp++ = (snd_hda_codec_amp_read(codec, nid, 0, dir, idx) &
3030 			   HDA_AMP_MUTE) ? 0 : 1;
3031 	if (chs & 2)
3032 		*valp = (snd_hda_codec_amp_read(codec, nid, 1, dir, idx) &
3033 			 HDA_AMP_MUTE) ? 0 : 1;
3034 	return 0;
3035 }
3036 EXPORT_SYMBOL_GPL(snd_hda_mixer_amp_switch_get);
3037 
3038 /**
3039  * snd_hda_mixer_amp_switch_put - Put callback for a standard AMP mixer switch
3040  *
3041  * The control element is supposed to have the private_value field
3042  * set up via HDA_COMPOSE_AMP_VAL*() or related macros.
3043  */
3044 int snd_hda_mixer_amp_switch_put(struct snd_kcontrol *kcontrol,
3045 				 struct snd_ctl_elem_value *ucontrol)
3046 {
3047 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3048 	hda_nid_t nid = get_amp_nid(kcontrol);
3049 	int chs = get_amp_channels(kcontrol);
3050 	int dir = get_amp_direction(kcontrol);
3051 	int idx = get_amp_index(kcontrol);
3052 	long *valp = ucontrol->value.integer.value;
3053 	int change = 0;
3054 
3055 	snd_hda_power_up(codec);
3056 	if (chs & 1) {
3057 		change = snd_hda_codec_amp_update(codec, nid, 0, dir, idx,
3058 						  HDA_AMP_MUTE,
3059 						  *valp ? 0 : HDA_AMP_MUTE);
3060 		valp++;
3061 	}
3062 	if (chs & 2)
3063 		change |= snd_hda_codec_amp_update(codec, nid, 1, dir, idx,
3064 						   HDA_AMP_MUTE,
3065 						   *valp ? 0 : HDA_AMP_MUTE);
3066 	hda_call_check_power_status(codec, nid);
3067 	snd_hda_power_down(codec);
3068 	return change;
3069 }
3070 EXPORT_SYMBOL_GPL(snd_hda_mixer_amp_switch_put);
3071 
3072 /*
3073  * bound volume controls
3074  *
3075  * bind multiple volumes (# indices, from 0)
3076  */
3077 
3078 #define AMP_VAL_IDX_SHIFT	19
3079 #define AMP_VAL_IDX_MASK	(0x0f<<19)
3080 
3081 /**
3082  * snd_hda_mixer_bind_switch_get - Get callback for a bound volume control
3083  *
3084  * The control element is supposed to have the private_value field
3085  * set up via HDA_BIND_MUTE*() macros.
3086  */
3087 int snd_hda_mixer_bind_switch_get(struct snd_kcontrol *kcontrol,
3088 				  struct snd_ctl_elem_value *ucontrol)
3089 {
3090 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3091 	unsigned long pval;
3092 	int err;
3093 
3094 	mutex_lock(&codec->control_mutex);
3095 	pval = kcontrol->private_value;
3096 	kcontrol->private_value = pval & ~AMP_VAL_IDX_MASK; /* index 0 */
3097 	err = snd_hda_mixer_amp_switch_get(kcontrol, ucontrol);
3098 	kcontrol->private_value = pval;
3099 	mutex_unlock(&codec->control_mutex);
3100 	return err;
3101 }
3102 EXPORT_SYMBOL_GPL(snd_hda_mixer_bind_switch_get);
3103 
3104 /**
3105  * snd_hda_mixer_bind_switch_put - Put callback for a bound volume control
3106  *
3107  * The control element is supposed to have the private_value field
3108  * set up via HDA_BIND_MUTE*() macros.
3109  */
3110 int snd_hda_mixer_bind_switch_put(struct snd_kcontrol *kcontrol,
3111 				  struct snd_ctl_elem_value *ucontrol)
3112 {
3113 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3114 	unsigned long pval;
3115 	int i, indices, err = 0, change = 0;
3116 
3117 	mutex_lock(&codec->control_mutex);
3118 	pval = kcontrol->private_value;
3119 	indices = (pval & AMP_VAL_IDX_MASK) >> AMP_VAL_IDX_SHIFT;
3120 	for (i = 0; i < indices; i++) {
3121 		kcontrol->private_value = (pval & ~AMP_VAL_IDX_MASK) |
3122 			(i << AMP_VAL_IDX_SHIFT);
3123 		err = snd_hda_mixer_amp_switch_put(kcontrol, ucontrol);
3124 		if (err < 0)
3125 			break;
3126 		change |= err;
3127 	}
3128 	kcontrol->private_value = pval;
3129 	mutex_unlock(&codec->control_mutex);
3130 	return err < 0 ? err : change;
3131 }
3132 EXPORT_SYMBOL_GPL(snd_hda_mixer_bind_switch_put);
3133 
3134 /**
3135  * snd_hda_mixer_bind_ctls_info - Info callback for a generic bound control
3136  *
3137  * The control element is supposed to have the private_value field
3138  * set up via HDA_BIND_VOL() or HDA_BIND_SW() macros.
3139  */
3140 int snd_hda_mixer_bind_ctls_info(struct snd_kcontrol *kcontrol,
3141 				 struct snd_ctl_elem_info *uinfo)
3142 {
3143 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3144 	struct hda_bind_ctls *c;
3145 	int err;
3146 
3147 	mutex_lock(&codec->control_mutex);
3148 	c = (struct hda_bind_ctls *)kcontrol->private_value;
3149 	kcontrol->private_value = *c->values;
3150 	err = c->ops->info(kcontrol, uinfo);
3151 	kcontrol->private_value = (long)c;
3152 	mutex_unlock(&codec->control_mutex);
3153 	return err;
3154 }
3155 EXPORT_SYMBOL_GPL(snd_hda_mixer_bind_ctls_info);
3156 
3157 /**
3158  * snd_hda_mixer_bind_ctls_get - Get callback for a generic bound control
3159  *
3160  * The control element is supposed to have the private_value field
3161  * set up via HDA_BIND_VOL() or HDA_BIND_SW() macros.
3162  */
3163 int snd_hda_mixer_bind_ctls_get(struct snd_kcontrol *kcontrol,
3164 				struct snd_ctl_elem_value *ucontrol)
3165 {
3166 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3167 	struct hda_bind_ctls *c;
3168 	int err;
3169 
3170 	mutex_lock(&codec->control_mutex);
3171 	c = (struct hda_bind_ctls *)kcontrol->private_value;
3172 	kcontrol->private_value = *c->values;
3173 	err = c->ops->get(kcontrol, ucontrol);
3174 	kcontrol->private_value = (long)c;
3175 	mutex_unlock(&codec->control_mutex);
3176 	return err;
3177 }
3178 EXPORT_SYMBOL_GPL(snd_hda_mixer_bind_ctls_get);
3179 
3180 /**
3181  * snd_hda_mixer_bind_ctls_put - Put callback for a generic bound control
3182  *
3183  * The control element is supposed to have the private_value field
3184  * set up via HDA_BIND_VOL() or HDA_BIND_SW() macros.
3185  */
3186 int snd_hda_mixer_bind_ctls_put(struct snd_kcontrol *kcontrol,
3187 				struct snd_ctl_elem_value *ucontrol)
3188 {
3189 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3190 	struct hda_bind_ctls *c;
3191 	unsigned long *vals;
3192 	int err = 0, change = 0;
3193 
3194 	mutex_lock(&codec->control_mutex);
3195 	c = (struct hda_bind_ctls *)kcontrol->private_value;
3196 	for (vals = c->values; *vals; vals++) {
3197 		kcontrol->private_value = *vals;
3198 		err = c->ops->put(kcontrol, ucontrol);
3199 		if (err < 0)
3200 			break;
3201 		change |= err;
3202 	}
3203 	kcontrol->private_value = (long)c;
3204 	mutex_unlock(&codec->control_mutex);
3205 	return err < 0 ? err : change;
3206 }
3207 EXPORT_SYMBOL_GPL(snd_hda_mixer_bind_ctls_put);
3208 
3209 /**
3210  * snd_hda_mixer_bind_tlv - TLV callback for a generic bound control
3211  *
3212  * The control element is supposed to have the private_value field
3213  * set up via HDA_BIND_VOL() macro.
3214  */
3215 int snd_hda_mixer_bind_tlv(struct snd_kcontrol *kcontrol, int op_flag,
3216 			   unsigned int size, unsigned int __user *tlv)
3217 {
3218 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3219 	struct hda_bind_ctls *c;
3220 	int err;
3221 
3222 	mutex_lock(&codec->control_mutex);
3223 	c = (struct hda_bind_ctls *)kcontrol->private_value;
3224 	kcontrol->private_value = *c->values;
3225 	err = c->ops->tlv(kcontrol, op_flag, size, tlv);
3226 	kcontrol->private_value = (long)c;
3227 	mutex_unlock(&codec->control_mutex);
3228 	return err;
3229 }
3230 EXPORT_SYMBOL_GPL(snd_hda_mixer_bind_tlv);
3231 
3232 struct hda_ctl_ops snd_hda_bind_vol = {
3233 	.info = snd_hda_mixer_amp_volume_info,
3234 	.get = snd_hda_mixer_amp_volume_get,
3235 	.put = snd_hda_mixer_amp_volume_put,
3236 	.tlv = snd_hda_mixer_amp_tlv
3237 };
3238 EXPORT_SYMBOL_GPL(snd_hda_bind_vol);
3239 
3240 struct hda_ctl_ops snd_hda_bind_sw = {
3241 	.info = snd_hda_mixer_amp_switch_info,
3242 	.get = snd_hda_mixer_amp_switch_get,
3243 	.put = snd_hda_mixer_amp_switch_put,
3244 	.tlv = snd_hda_mixer_amp_tlv
3245 };
3246 EXPORT_SYMBOL_GPL(snd_hda_bind_sw);
3247 
3248 /*
3249  * SPDIF out controls
3250  */
3251 
3252 static int snd_hda_spdif_mask_info(struct snd_kcontrol *kcontrol,
3253 				   struct snd_ctl_elem_info *uinfo)
3254 {
3255 	uinfo->type = SNDRV_CTL_ELEM_TYPE_IEC958;
3256 	uinfo->count = 1;
3257 	return 0;
3258 }
3259 
3260 static int snd_hda_spdif_cmask_get(struct snd_kcontrol *kcontrol,
3261 				   struct snd_ctl_elem_value *ucontrol)
3262 {
3263 	ucontrol->value.iec958.status[0] = IEC958_AES0_PROFESSIONAL |
3264 					   IEC958_AES0_NONAUDIO |
3265 					   IEC958_AES0_CON_EMPHASIS_5015 |
3266 					   IEC958_AES0_CON_NOT_COPYRIGHT;
3267 	ucontrol->value.iec958.status[1] = IEC958_AES1_CON_CATEGORY |
3268 					   IEC958_AES1_CON_ORIGINAL;
3269 	return 0;
3270 }
3271 
3272 static int snd_hda_spdif_pmask_get(struct snd_kcontrol *kcontrol,
3273 				   struct snd_ctl_elem_value *ucontrol)
3274 {
3275 	ucontrol->value.iec958.status[0] = IEC958_AES0_PROFESSIONAL |
3276 					   IEC958_AES0_NONAUDIO |
3277 					   IEC958_AES0_PRO_EMPHASIS_5015;
3278 	return 0;
3279 }
3280 
3281 static int snd_hda_spdif_default_get(struct snd_kcontrol *kcontrol,
3282 				     struct snd_ctl_elem_value *ucontrol)
3283 {
3284 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3285 	int idx = kcontrol->private_value;
3286 	struct hda_spdif_out *spdif;
3287 
3288 	mutex_lock(&codec->spdif_mutex);
3289 	spdif = snd_array_elem(&codec->spdif_out, idx);
3290 	ucontrol->value.iec958.status[0] = spdif->status & 0xff;
3291 	ucontrol->value.iec958.status[1] = (spdif->status >> 8) & 0xff;
3292 	ucontrol->value.iec958.status[2] = (spdif->status >> 16) & 0xff;
3293 	ucontrol->value.iec958.status[3] = (spdif->status >> 24) & 0xff;
3294 	mutex_unlock(&codec->spdif_mutex);
3295 
3296 	return 0;
3297 }
3298 
3299 /* convert from SPDIF status bits to HDA SPDIF bits
3300  * bit 0 (DigEn) is always set zero (to be filled later)
3301  */
3302 static unsigned short convert_from_spdif_status(unsigned int sbits)
3303 {
3304 	unsigned short val = 0;
3305 
3306 	if (sbits & IEC958_AES0_PROFESSIONAL)
3307 		val |= AC_DIG1_PROFESSIONAL;
3308 	if (sbits & IEC958_AES0_NONAUDIO)
3309 		val |= AC_DIG1_NONAUDIO;
3310 	if (sbits & IEC958_AES0_PROFESSIONAL) {
3311 		if ((sbits & IEC958_AES0_PRO_EMPHASIS) ==
3312 		    IEC958_AES0_PRO_EMPHASIS_5015)
3313 			val |= AC_DIG1_EMPHASIS;
3314 	} else {
3315 		if ((sbits & IEC958_AES0_CON_EMPHASIS) ==
3316 		    IEC958_AES0_CON_EMPHASIS_5015)
3317 			val |= AC_DIG1_EMPHASIS;
3318 		if (!(sbits & IEC958_AES0_CON_NOT_COPYRIGHT))
3319 			val |= AC_DIG1_COPYRIGHT;
3320 		if (sbits & (IEC958_AES1_CON_ORIGINAL << 8))
3321 			val |= AC_DIG1_LEVEL;
3322 		val |= sbits & (IEC958_AES1_CON_CATEGORY << 8);
3323 	}
3324 	return val;
3325 }
3326 
3327 /* convert to SPDIF status bits from HDA SPDIF bits
3328  */
3329 static unsigned int convert_to_spdif_status(unsigned short val)
3330 {
3331 	unsigned int sbits = 0;
3332 
3333 	if (val & AC_DIG1_NONAUDIO)
3334 		sbits |= IEC958_AES0_NONAUDIO;
3335 	if (val & AC_DIG1_PROFESSIONAL)
3336 		sbits |= IEC958_AES0_PROFESSIONAL;
3337 	if (sbits & IEC958_AES0_PROFESSIONAL) {
3338 		if (val & AC_DIG1_EMPHASIS)
3339 			sbits |= IEC958_AES0_PRO_EMPHASIS_5015;
3340 	} else {
3341 		if (val & AC_DIG1_EMPHASIS)
3342 			sbits |= IEC958_AES0_CON_EMPHASIS_5015;
3343 		if (!(val & AC_DIG1_COPYRIGHT))
3344 			sbits |= IEC958_AES0_CON_NOT_COPYRIGHT;
3345 		if (val & AC_DIG1_LEVEL)
3346 			sbits |= (IEC958_AES1_CON_ORIGINAL << 8);
3347 		sbits |= val & (0x7f << 8);
3348 	}
3349 	return sbits;
3350 }
3351 
3352 /* set digital convert verbs both for the given NID and its slaves */
3353 static void set_dig_out(struct hda_codec *codec, hda_nid_t nid,
3354 			int verb, int val)
3355 {
3356 	const hda_nid_t *d;
3357 
3358 	snd_hda_codec_write_cache(codec, nid, 0, verb, val);
3359 	d = codec->slave_dig_outs;
3360 	if (!d)
3361 		return;
3362 	for (; *d; d++)
3363 		snd_hda_codec_write_cache(codec, *d, 0, verb, val);
3364 }
3365 
3366 static inline void set_dig_out_convert(struct hda_codec *codec, hda_nid_t nid,
3367 				       int dig1, int dig2)
3368 {
3369 	if (dig1 != -1)
3370 		set_dig_out(codec, nid, AC_VERB_SET_DIGI_CONVERT_1, dig1);
3371 	if (dig2 != -1)
3372 		set_dig_out(codec, nid, AC_VERB_SET_DIGI_CONVERT_2, dig2);
3373 }
3374 
3375 static int snd_hda_spdif_default_put(struct snd_kcontrol *kcontrol,
3376 				     struct snd_ctl_elem_value *ucontrol)
3377 {
3378 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3379 	int idx = kcontrol->private_value;
3380 	struct hda_spdif_out *spdif;
3381 	hda_nid_t nid;
3382 	unsigned short val;
3383 	int change;
3384 
3385 	mutex_lock(&codec->spdif_mutex);
3386 	spdif = snd_array_elem(&codec->spdif_out, idx);
3387 	nid = spdif->nid;
3388 	spdif->status = ucontrol->value.iec958.status[0] |
3389 		((unsigned int)ucontrol->value.iec958.status[1] << 8) |
3390 		((unsigned int)ucontrol->value.iec958.status[2] << 16) |
3391 		((unsigned int)ucontrol->value.iec958.status[3] << 24);
3392 	val = convert_from_spdif_status(spdif->status);
3393 	val |= spdif->ctls & 1;
3394 	change = spdif->ctls != val;
3395 	spdif->ctls = val;
3396 	if (change && nid != (u16)-1)
3397 		set_dig_out_convert(codec, nid, val & 0xff, (val >> 8) & 0xff);
3398 	mutex_unlock(&codec->spdif_mutex);
3399 	return change;
3400 }
3401 
3402 #define snd_hda_spdif_out_switch_info	snd_ctl_boolean_mono_info
3403 
3404 static int snd_hda_spdif_out_switch_get(struct snd_kcontrol *kcontrol,
3405 					struct snd_ctl_elem_value *ucontrol)
3406 {
3407 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3408 	int idx = kcontrol->private_value;
3409 	struct hda_spdif_out *spdif;
3410 
3411 	mutex_lock(&codec->spdif_mutex);
3412 	spdif = snd_array_elem(&codec->spdif_out, idx);
3413 	ucontrol->value.integer.value[0] = spdif->ctls & AC_DIG1_ENABLE;
3414 	mutex_unlock(&codec->spdif_mutex);
3415 	return 0;
3416 }
3417 
3418 static inline void set_spdif_ctls(struct hda_codec *codec, hda_nid_t nid,
3419 				  int dig1, int dig2)
3420 {
3421 	set_dig_out_convert(codec, nid, dig1, dig2);
3422 	/* unmute amp switch (if any) */
3423 	if ((get_wcaps(codec, nid) & AC_WCAP_OUT_AMP) &&
3424 	    (dig1 & AC_DIG1_ENABLE))
3425 		snd_hda_codec_amp_stereo(codec, nid, HDA_OUTPUT, 0,
3426 					    HDA_AMP_MUTE, 0);
3427 }
3428 
3429 static int snd_hda_spdif_out_switch_put(struct snd_kcontrol *kcontrol,
3430 					struct snd_ctl_elem_value *ucontrol)
3431 {
3432 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3433 	int idx = kcontrol->private_value;
3434 	struct hda_spdif_out *spdif;
3435 	hda_nid_t nid;
3436 	unsigned short val;
3437 	int change;
3438 
3439 	mutex_lock(&codec->spdif_mutex);
3440 	spdif = snd_array_elem(&codec->spdif_out, idx);
3441 	nid = spdif->nid;
3442 	val = spdif->ctls & ~AC_DIG1_ENABLE;
3443 	if (ucontrol->value.integer.value[0])
3444 		val |= AC_DIG1_ENABLE;
3445 	change = spdif->ctls != val;
3446 	spdif->ctls = val;
3447 	if (change && nid != (u16)-1)
3448 		set_spdif_ctls(codec, nid, val & 0xff, -1);
3449 	mutex_unlock(&codec->spdif_mutex);
3450 	return change;
3451 }
3452 
3453 static struct snd_kcontrol_new dig_mixes[] = {
3454 	{
3455 		.access = SNDRV_CTL_ELEM_ACCESS_READ,
3456 		.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3457 		.name = SNDRV_CTL_NAME_IEC958("", PLAYBACK, CON_MASK),
3458 		.info = snd_hda_spdif_mask_info,
3459 		.get = snd_hda_spdif_cmask_get,
3460 	},
3461 	{
3462 		.access = SNDRV_CTL_ELEM_ACCESS_READ,
3463 		.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3464 		.name = SNDRV_CTL_NAME_IEC958("", PLAYBACK, PRO_MASK),
3465 		.info = snd_hda_spdif_mask_info,
3466 		.get = snd_hda_spdif_pmask_get,
3467 	},
3468 	{
3469 		.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3470 		.name = SNDRV_CTL_NAME_IEC958("", PLAYBACK, DEFAULT),
3471 		.info = snd_hda_spdif_mask_info,
3472 		.get = snd_hda_spdif_default_get,
3473 		.put = snd_hda_spdif_default_put,
3474 	},
3475 	{
3476 		.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3477 		.name = SNDRV_CTL_NAME_IEC958("", PLAYBACK, SWITCH),
3478 		.info = snd_hda_spdif_out_switch_info,
3479 		.get = snd_hda_spdif_out_switch_get,
3480 		.put = snd_hda_spdif_out_switch_put,
3481 	},
3482 	{ } /* end */
3483 };
3484 
3485 /**
3486  * snd_hda_create_dig_out_ctls - create Output SPDIF-related controls
3487  * @codec: the HDA codec
3488  * @associated_nid: NID that new ctls associated with
3489  * @cvt_nid: converter NID
3490  * @type: HDA_PCM_TYPE_*
3491  * Creates controls related with the digital output.
3492  * Called from each patch supporting the digital out.
3493  *
3494  * Returns 0 if successful, or a negative error code.
3495  */
3496 int snd_hda_create_dig_out_ctls(struct hda_codec *codec,
3497 				hda_nid_t associated_nid,
3498 				hda_nid_t cvt_nid,
3499 				int type)
3500 {
3501 	int err;
3502 	struct snd_kcontrol *kctl;
3503 	struct snd_kcontrol_new *dig_mix;
3504 	int idx = 0;
3505 	const int spdif_index = 16;
3506 	struct hda_spdif_out *spdif;
3507 	struct hda_bus *bus = codec->bus;
3508 
3509 	if (bus->primary_dig_out_type == HDA_PCM_TYPE_HDMI &&
3510 	    type == HDA_PCM_TYPE_SPDIF) {
3511 		idx = spdif_index;
3512 	} else if (bus->primary_dig_out_type == HDA_PCM_TYPE_SPDIF &&
3513 		   type == HDA_PCM_TYPE_HDMI) {
3514 		/* suppose a single SPDIF device */
3515 		for (dig_mix = dig_mixes; dig_mix->name; dig_mix++) {
3516 			kctl = find_mixer_ctl(codec, dig_mix->name, 0, 0);
3517 			if (!kctl)
3518 				break;
3519 			kctl->id.index = spdif_index;
3520 		}
3521 		bus->primary_dig_out_type = HDA_PCM_TYPE_HDMI;
3522 	}
3523 	if (!bus->primary_dig_out_type)
3524 		bus->primary_dig_out_type = type;
3525 
3526 	idx = find_empty_mixer_ctl_idx(codec, "IEC958 Playback Switch", idx);
3527 	if (idx < 0) {
3528 		codec_err(codec, "too many IEC958 outputs\n");
3529 		return -EBUSY;
3530 	}
3531 	spdif = snd_array_new(&codec->spdif_out);
3532 	if (!spdif)
3533 		return -ENOMEM;
3534 	for (dig_mix = dig_mixes; dig_mix->name; dig_mix++) {
3535 		kctl = snd_ctl_new1(dig_mix, codec);
3536 		if (!kctl)
3537 			return -ENOMEM;
3538 		kctl->id.index = idx;
3539 		kctl->private_value = codec->spdif_out.used - 1;
3540 		err = snd_hda_ctl_add(codec, associated_nid, kctl);
3541 		if (err < 0)
3542 			return err;
3543 	}
3544 	spdif->nid = cvt_nid;
3545 	spdif->ctls = snd_hda_codec_read(codec, cvt_nid, 0,
3546 					 AC_VERB_GET_DIGI_CONVERT_1, 0);
3547 	spdif->status = convert_to_spdif_status(spdif->ctls);
3548 	return 0;
3549 }
3550 EXPORT_SYMBOL_GPL(snd_hda_create_dig_out_ctls);
3551 
3552 /* get the hda_spdif_out entry from the given NID
3553  * call within spdif_mutex lock
3554  */
3555 struct hda_spdif_out *snd_hda_spdif_out_of_nid(struct hda_codec *codec,
3556 					       hda_nid_t nid)
3557 {
3558 	int i;
3559 	for (i = 0; i < codec->spdif_out.used; i++) {
3560 		struct hda_spdif_out *spdif =
3561 				snd_array_elem(&codec->spdif_out, i);
3562 		if (spdif->nid == nid)
3563 			return spdif;
3564 	}
3565 	return NULL;
3566 }
3567 EXPORT_SYMBOL_GPL(snd_hda_spdif_out_of_nid);
3568 
3569 void snd_hda_spdif_ctls_unassign(struct hda_codec *codec, int idx)
3570 {
3571 	struct hda_spdif_out *spdif;
3572 
3573 	mutex_lock(&codec->spdif_mutex);
3574 	spdif = snd_array_elem(&codec->spdif_out, idx);
3575 	spdif->nid = (u16)-1;
3576 	mutex_unlock(&codec->spdif_mutex);
3577 }
3578 EXPORT_SYMBOL_GPL(snd_hda_spdif_ctls_unassign);
3579 
3580 void snd_hda_spdif_ctls_assign(struct hda_codec *codec, int idx, hda_nid_t nid)
3581 {
3582 	struct hda_spdif_out *spdif;
3583 	unsigned short val;
3584 
3585 	mutex_lock(&codec->spdif_mutex);
3586 	spdif = snd_array_elem(&codec->spdif_out, idx);
3587 	if (spdif->nid != nid) {
3588 		spdif->nid = nid;
3589 		val = spdif->ctls;
3590 		set_spdif_ctls(codec, nid, val & 0xff, (val >> 8) & 0xff);
3591 	}
3592 	mutex_unlock(&codec->spdif_mutex);
3593 }
3594 EXPORT_SYMBOL_GPL(snd_hda_spdif_ctls_assign);
3595 
3596 /*
3597  * SPDIF sharing with analog output
3598  */
3599 static int spdif_share_sw_get(struct snd_kcontrol *kcontrol,
3600 			      struct snd_ctl_elem_value *ucontrol)
3601 {
3602 	struct hda_multi_out *mout = snd_kcontrol_chip(kcontrol);
3603 	ucontrol->value.integer.value[0] = mout->share_spdif;
3604 	return 0;
3605 }
3606 
3607 static int spdif_share_sw_put(struct snd_kcontrol *kcontrol,
3608 			      struct snd_ctl_elem_value *ucontrol)
3609 {
3610 	struct hda_multi_out *mout = snd_kcontrol_chip(kcontrol);
3611 	mout->share_spdif = !!ucontrol->value.integer.value[0];
3612 	return 0;
3613 }
3614 
3615 static struct snd_kcontrol_new spdif_share_sw = {
3616 	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3617 	.name = "IEC958 Default PCM Playback Switch",
3618 	.info = snd_ctl_boolean_mono_info,
3619 	.get = spdif_share_sw_get,
3620 	.put = spdif_share_sw_put,
3621 };
3622 
3623 /**
3624  * snd_hda_create_spdif_share_sw - create Default PCM switch
3625  * @codec: the HDA codec
3626  * @mout: multi-out instance
3627  */
3628 int snd_hda_create_spdif_share_sw(struct hda_codec *codec,
3629 				  struct hda_multi_out *mout)
3630 {
3631 	struct snd_kcontrol *kctl;
3632 
3633 	if (!mout->dig_out_nid)
3634 		return 0;
3635 
3636 	kctl = snd_ctl_new1(&spdif_share_sw, mout);
3637 	if (!kctl)
3638 		return -ENOMEM;
3639 	/* ATTENTION: here mout is passed as private_data, instead of codec */
3640 	return snd_hda_ctl_add(codec, mout->dig_out_nid, kctl);
3641 }
3642 EXPORT_SYMBOL_GPL(snd_hda_create_spdif_share_sw);
3643 
3644 /*
3645  * SPDIF input
3646  */
3647 
3648 #define snd_hda_spdif_in_switch_info	snd_hda_spdif_out_switch_info
3649 
3650 static int snd_hda_spdif_in_switch_get(struct snd_kcontrol *kcontrol,
3651 				       struct snd_ctl_elem_value *ucontrol)
3652 {
3653 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3654 
3655 	ucontrol->value.integer.value[0] = codec->spdif_in_enable;
3656 	return 0;
3657 }
3658 
3659 static int snd_hda_spdif_in_switch_put(struct snd_kcontrol *kcontrol,
3660 				       struct snd_ctl_elem_value *ucontrol)
3661 {
3662 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3663 	hda_nid_t nid = kcontrol->private_value;
3664 	unsigned int val = !!ucontrol->value.integer.value[0];
3665 	int change;
3666 
3667 	mutex_lock(&codec->spdif_mutex);
3668 	change = codec->spdif_in_enable != val;
3669 	if (change) {
3670 		codec->spdif_in_enable = val;
3671 		snd_hda_codec_write_cache(codec, nid, 0,
3672 					  AC_VERB_SET_DIGI_CONVERT_1, val);
3673 	}
3674 	mutex_unlock(&codec->spdif_mutex);
3675 	return change;
3676 }
3677 
3678 static int snd_hda_spdif_in_status_get(struct snd_kcontrol *kcontrol,
3679 				       struct snd_ctl_elem_value *ucontrol)
3680 {
3681 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3682 	hda_nid_t nid = kcontrol->private_value;
3683 	unsigned short val;
3684 	unsigned int sbits;
3685 
3686 	val = snd_hda_codec_read(codec, nid, 0, AC_VERB_GET_DIGI_CONVERT_1, 0);
3687 	sbits = convert_to_spdif_status(val);
3688 	ucontrol->value.iec958.status[0] = sbits;
3689 	ucontrol->value.iec958.status[1] = sbits >> 8;
3690 	ucontrol->value.iec958.status[2] = sbits >> 16;
3691 	ucontrol->value.iec958.status[3] = sbits >> 24;
3692 	return 0;
3693 }
3694 
3695 static struct snd_kcontrol_new dig_in_ctls[] = {
3696 	{
3697 		.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3698 		.name = SNDRV_CTL_NAME_IEC958("", CAPTURE, SWITCH),
3699 		.info = snd_hda_spdif_in_switch_info,
3700 		.get = snd_hda_spdif_in_switch_get,
3701 		.put = snd_hda_spdif_in_switch_put,
3702 	},
3703 	{
3704 		.access = SNDRV_CTL_ELEM_ACCESS_READ,
3705 		.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3706 		.name = SNDRV_CTL_NAME_IEC958("", CAPTURE, DEFAULT),
3707 		.info = snd_hda_spdif_mask_info,
3708 		.get = snd_hda_spdif_in_status_get,
3709 	},
3710 	{ } /* end */
3711 };
3712 
3713 /**
3714  * snd_hda_create_spdif_in_ctls - create Input SPDIF-related controls
3715  * @codec: the HDA codec
3716  * @nid: audio in widget NID
3717  *
3718  * Creates controls related with the SPDIF input.
3719  * Called from each patch supporting the SPDIF in.
3720  *
3721  * Returns 0 if successful, or a negative error code.
3722  */
3723 int snd_hda_create_spdif_in_ctls(struct hda_codec *codec, hda_nid_t nid)
3724 {
3725 	int err;
3726 	struct snd_kcontrol *kctl;
3727 	struct snd_kcontrol_new *dig_mix;
3728 	int idx;
3729 
3730 	idx = find_empty_mixer_ctl_idx(codec, "IEC958 Capture Switch", 0);
3731 	if (idx < 0) {
3732 		codec_err(codec, "too many IEC958 inputs\n");
3733 		return -EBUSY;
3734 	}
3735 	for (dig_mix = dig_in_ctls; dig_mix->name; dig_mix++) {
3736 		kctl = snd_ctl_new1(dig_mix, codec);
3737 		if (!kctl)
3738 			return -ENOMEM;
3739 		kctl->private_value = nid;
3740 		err = snd_hda_ctl_add(codec, nid, kctl);
3741 		if (err < 0)
3742 			return err;
3743 	}
3744 	codec->spdif_in_enable =
3745 		snd_hda_codec_read(codec, nid, 0,
3746 				   AC_VERB_GET_DIGI_CONVERT_1, 0) &
3747 		AC_DIG1_ENABLE;
3748 	return 0;
3749 }
3750 EXPORT_SYMBOL_GPL(snd_hda_create_spdif_in_ctls);
3751 
3752 /*
3753  * command cache
3754  */
3755 
3756 /* build a 31bit cache key with the widget id and the command parameter */
3757 #define build_cmd_cache_key(nid, verb)	((verb << 8) | nid)
3758 #define get_cmd_cache_nid(key)		((key) & 0xff)
3759 #define get_cmd_cache_cmd(key)		(((key) >> 8) & 0xffff)
3760 
3761 /**
3762  * snd_hda_codec_write_cache - send a single command with caching
3763  * @codec: the HDA codec
3764  * @nid: NID to send the command
3765  * @flags: optional bit flags
3766  * @verb: the verb to send
3767  * @parm: the parameter for the verb
3768  *
3769  * Send a single command without waiting for response.
3770  *
3771  * Returns 0 if successful, or a negative error code.
3772  */
3773 int snd_hda_codec_write_cache(struct hda_codec *codec, hda_nid_t nid,
3774 			      int flags, unsigned int verb, unsigned int parm)
3775 {
3776 	int err;
3777 	struct hda_cache_head *c;
3778 	u32 key;
3779 	unsigned int cache_only;
3780 
3781 	cache_only = codec->cached_write;
3782 	if (!cache_only) {
3783 		err = snd_hda_codec_write(codec, nid, flags, verb, parm);
3784 		if (err < 0)
3785 			return err;
3786 	}
3787 
3788 	/* parm may contain the verb stuff for get/set amp */
3789 	verb = verb | (parm >> 8);
3790 	parm &= 0xff;
3791 	key = build_cmd_cache_key(nid, verb);
3792 	mutex_lock(&codec->bus->cmd_mutex);
3793 	c = get_alloc_hash(&codec->cmd_cache, key);
3794 	if (c) {
3795 		c->val = parm;
3796 		c->dirty = cache_only;
3797 	}
3798 	mutex_unlock(&codec->bus->cmd_mutex);
3799 	return 0;
3800 }
3801 EXPORT_SYMBOL_GPL(snd_hda_codec_write_cache);
3802 
3803 /**
3804  * snd_hda_codec_update_cache - check cache and write the cmd only when needed
3805  * @codec: the HDA codec
3806  * @nid: NID to send the command
3807  * @flags: optional bit flags
3808  * @verb: the verb to send
3809  * @parm: the parameter for the verb
3810  *
3811  * This function works like snd_hda_codec_write_cache(), but it doesn't send
3812  * command if the parameter is already identical with the cached value.
3813  * If not, it sends the command and refreshes the cache.
3814  *
3815  * Returns 0 if successful, or a negative error code.
3816  */
3817 int snd_hda_codec_update_cache(struct hda_codec *codec, hda_nid_t nid,
3818 			       int flags, unsigned int verb, unsigned int parm)
3819 {
3820 	struct hda_cache_head *c;
3821 	u32 key;
3822 
3823 	/* parm may contain the verb stuff for get/set amp */
3824 	verb = verb | (parm >> 8);
3825 	parm &= 0xff;
3826 	key = build_cmd_cache_key(nid, verb);
3827 	mutex_lock(&codec->bus->cmd_mutex);
3828 	c = get_hash(&codec->cmd_cache, key);
3829 	if (c && c->val == parm) {
3830 		mutex_unlock(&codec->bus->cmd_mutex);
3831 		return 0;
3832 	}
3833 	mutex_unlock(&codec->bus->cmd_mutex);
3834 	return snd_hda_codec_write_cache(codec, nid, flags, verb, parm);
3835 }
3836 EXPORT_SYMBOL_GPL(snd_hda_codec_update_cache);
3837 
3838 /**
3839  * snd_hda_codec_resume_cache - Resume the all commands from the cache
3840  * @codec: HD-audio codec
3841  *
3842  * Execute all verbs recorded in the command caches to resume.
3843  */
3844 void snd_hda_codec_resume_cache(struct hda_codec *codec)
3845 {
3846 	int i;
3847 
3848 	mutex_lock(&codec->hash_mutex);
3849 	codec->cached_write = 0;
3850 	for (i = 0; i < codec->cmd_cache.buf.used; i++) {
3851 		struct hda_cache_head *buffer;
3852 		u32 key;
3853 
3854 		buffer = snd_array_elem(&codec->cmd_cache.buf, i);
3855 		key = buffer->key;
3856 		if (!key)
3857 			continue;
3858 		if (!buffer->dirty)
3859 			continue;
3860 		buffer->dirty = 0;
3861 		mutex_unlock(&codec->hash_mutex);
3862 		snd_hda_codec_write(codec, get_cmd_cache_nid(key), 0,
3863 				    get_cmd_cache_cmd(key), buffer->val);
3864 		mutex_lock(&codec->hash_mutex);
3865 	}
3866 	mutex_unlock(&codec->hash_mutex);
3867 }
3868 EXPORT_SYMBOL_GPL(snd_hda_codec_resume_cache);
3869 
3870 /**
3871  * snd_hda_sequence_write_cache - sequence writes with caching
3872  * @codec: the HDA codec
3873  * @seq: VERB array to send
3874  *
3875  * Send the commands sequentially from the given array.
3876  * Thte commands are recorded on cache for power-save and resume.
3877  * The array must be terminated with NID=0.
3878  */
3879 void snd_hda_sequence_write_cache(struct hda_codec *codec,
3880 				  const struct hda_verb *seq)
3881 {
3882 	for (; seq->nid; seq++)
3883 		snd_hda_codec_write_cache(codec, seq->nid, 0, seq->verb,
3884 					  seq->param);
3885 }
3886 EXPORT_SYMBOL_GPL(snd_hda_sequence_write_cache);
3887 
3888 /**
3889  * snd_hda_codec_flush_cache - Execute all pending (cached) amps / verbs
3890  * @codec: HD-audio codec
3891  */
3892 void snd_hda_codec_flush_cache(struct hda_codec *codec)
3893 {
3894 	snd_hda_codec_resume_amp(codec);
3895 	snd_hda_codec_resume_cache(codec);
3896 }
3897 EXPORT_SYMBOL_GPL(snd_hda_codec_flush_cache);
3898 
3899 void snd_hda_codec_set_power_to_all(struct hda_codec *codec, hda_nid_t fg,
3900 				    unsigned int power_state)
3901 {
3902 	hda_nid_t nid = codec->start_nid;
3903 	int i;
3904 
3905 	for (i = 0; i < codec->num_nodes; i++, nid++) {
3906 		unsigned int wcaps = get_wcaps(codec, nid);
3907 		unsigned int state = power_state;
3908 		if (!(wcaps & AC_WCAP_POWER))
3909 			continue;
3910 		if (codec->power_filter) {
3911 			state = codec->power_filter(codec, nid, power_state);
3912 			if (state != power_state && power_state == AC_PWRST_D3)
3913 				continue;
3914 		}
3915 		snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_POWER_STATE,
3916 				    state);
3917 	}
3918 }
3919 EXPORT_SYMBOL_GPL(snd_hda_codec_set_power_to_all);
3920 
3921 /*
3922  *  supported power states check
3923  */
3924 static bool snd_hda_codec_get_supported_ps(struct hda_codec *codec, hda_nid_t fg,
3925 				unsigned int power_state)
3926 {
3927 	int sup = snd_hda_param_read(codec, fg, AC_PAR_POWER_STATE);
3928 
3929 	if (sup == -1)
3930 		return false;
3931 	if (sup & power_state)
3932 		return true;
3933 	else
3934 		return false;
3935 }
3936 
3937 /*
3938  * wait until the state is reached, returns the current state
3939  */
3940 static unsigned int hda_sync_power_state(struct hda_codec *codec,
3941 					 hda_nid_t fg,
3942 					 unsigned int power_state)
3943 {
3944 	unsigned long end_time = jiffies + msecs_to_jiffies(500);
3945 	unsigned int state, actual_state;
3946 
3947 	for (;;) {
3948 		state = snd_hda_codec_read(codec, fg, 0,
3949 					   AC_VERB_GET_POWER_STATE, 0);
3950 		if (state & AC_PWRST_ERROR)
3951 			break;
3952 		actual_state = (state >> 4) & 0x0f;
3953 		if (actual_state == power_state)
3954 			break;
3955 		if (time_after_eq(jiffies, end_time))
3956 			break;
3957 		/* wait until the codec reachs to the target state */
3958 		msleep(1);
3959 	}
3960 	return state;
3961 }
3962 
3963 /* don't power down the widget if it controls eapd and EAPD_BTLENABLE is set */
3964 unsigned int snd_hda_codec_eapd_power_filter(struct hda_codec *codec,
3965 					     hda_nid_t nid,
3966 					     unsigned int power_state)
3967 {
3968 	if (nid == codec->afg || nid == codec->mfg)
3969 		return power_state;
3970 	if (power_state == AC_PWRST_D3 &&
3971 	    get_wcaps_type(get_wcaps(codec, nid)) == AC_WID_PIN &&
3972 	    (snd_hda_query_pin_caps(codec, nid) & AC_PINCAP_EAPD)) {
3973 		int eapd = snd_hda_codec_read(codec, nid, 0,
3974 					      AC_VERB_GET_EAPD_BTLENABLE, 0);
3975 		if (eapd & 0x02)
3976 			return AC_PWRST_D0;
3977 	}
3978 	return power_state;
3979 }
3980 EXPORT_SYMBOL_GPL(snd_hda_codec_eapd_power_filter);
3981 
3982 /*
3983  * set power state of the codec, and return the power state
3984  */
3985 static unsigned int hda_set_power_state(struct hda_codec *codec,
3986 					unsigned int power_state)
3987 {
3988 	hda_nid_t fg = codec->afg ? codec->afg : codec->mfg;
3989 	int count;
3990 	unsigned int state;
3991 	int flags = 0;
3992 
3993 	/* this delay seems necessary to avoid click noise at power-down */
3994 	if (power_state == AC_PWRST_D3) {
3995 		if (codec->depop_delay < 0)
3996 			msleep(codec->epss ? 10 : 100);
3997 		else if (codec->depop_delay > 0)
3998 			msleep(codec->depop_delay);
3999 		flags = HDA_RW_NO_RESPONSE_FALLBACK;
4000 	}
4001 
4002 	/* repeat power states setting at most 10 times*/
4003 	for (count = 0; count < 10; count++) {
4004 		if (codec->patch_ops.set_power_state)
4005 			codec->patch_ops.set_power_state(codec, fg,
4006 							 power_state);
4007 		else {
4008 			state = power_state;
4009 			if (codec->power_filter)
4010 				state = codec->power_filter(codec, fg, state);
4011 			if (state == power_state || power_state != AC_PWRST_D3)
4012 				snd_hda_codec_read(codec, fg, flags,
4013 						   AC_VERB_SET_POWER_STATE,
4014 						   state);
4015 			snd_hda_codec_set_power_to_all(codec, fg, power_state);
4016 		}
4017 		state = hda_sync_power_state(codec, fg, power_state);
4018 		if (!(state & AC_PWRST_ERROR))
4019 			break;
4020 	}
4021 
4022 	return state;
4023 }
4024 
4025 /* sync power states of all widgets;
4026  * this is called at the end of codec parsing
4027  */
4028 static void sync_power_up_states(struct hda_codec *codec)
4029 {
4030 	hda_nid_t nid = codec->start_nid;
4031 	int i;
4032 
4033 	/* don't care if no filter is used */
4034 	if (!codec->power_filter)
4035 		return;
4036 
4037 	for (i = 0; i < codec->num_nodes; i++, nid++) {
4038 		unsigned int wcaps = get_wcaps(codec, nid);
4039 		unsigned int target;
4040 		if (!(wcaps & AC_WCAP_POWER))
4041 			continue;
4042 		target = codec->power_filter(codec, nid, AC_PWRST_D0);
4043 		if (target == AC_PWRST_D0)
4044 			continue;
4045 		if (!snd_hda_check_power_state(codec, nid, target))
4046 			snd_hda_codec_write(codec, nid, 0,
4047 					    AC_VERB_SET_POWER_STATE, target);
4048 	}
4049 }
4050 
4051 #ifdef CONFIG_SND_HDA_RECONFIG
4052 /* execute additional init verbs */
4053 static void hda_exec_init_verbs(struct hda_codec *codec)
4054 {
4055 	if (codec->init_verbs.list)
4056 		snd_hda_sequence_write(codec, codec->init_verbs.list);
4057 }
4058 #else
4059 static inline void hda_exec_init_verbs(struct hda_codec *codec) {}
4060 #endif
4061 
4062 #ifdef CONFIG_PM
4063 /*
4064  * call suspend and power-down; used both from PM and power-save
4065  * this function returns the power state in the end
4066  */
4067 static unsigned int hda_call_codec_suspend(struct hda_codec *codec, bool in_wq)
4068 {
4069 	unsigned int state;
4070 
4071 	codec->in_pm = 1;
4072 
4073 	if (codec->patch_ops.suspend)
4074 		codec->patch_ops.suspend(codec);
4075 	hda_cleanup_all_streams(codec);
4076 	state = hda_set_power_state(codec, AC_PWRST_D3);
4077 	/* Cancel delayed work if we aren't currently running from it. */
4078 	if (!in_wq)
4079 		cancel_delayed_work_sync(&codec->power_work);
4080 	spin_lock(&codec->power_lock);
4081 	snd_hda_update_power_acct(codec);
4082 	trace_hda_power_down(codec);
4083 	codec->power_on = 0;
4084 	codec->power_transition = 0;
4085 	codec->power_jiffies = jiffies;
4086 	spin_unlock(&codec->power_lock);
4087 	codec->in_pm = 0;
4088 	return state;
4089 }
4090 
4091 /* mark all entries of cmd and amp caches dirty */
4092 static void hda_mark_cmd_cache_dirty(struct hda_codec *codec)
4093 {
4094 	int i;
4095 	for (i = 0; i < codec->cmd_cache.buf.used; i++) {
4096 		struct hda_cache_head *cmd;
4097 		cmd = snd_array_elem(&codec->cmd_cache.buf, i);
4098 		cmd->dirty = 1;
4099 	}
4100 	for (i = 0; i < codec->amp_cache.buf.used; i++) {
4101 		struct hda_amp_info *amp;
4102 		amp = snd_array_elem(&codec->amp_cache.buf, i);
4103 		amp->head.dirty = 1;
4104 	}
4105 }
4106 
4107 /*
4108  * kick up codec; used both from PM and power-save
4109  */
4110 static void hda_call_codec_resume(struct hda_codec *codec)
4111 {
4112 	codec->in_pm = 1;
4113 
4114 	hda_mark_cmd_cache_dirty(codec);
4115 
4116 	/* set as if powered on for avoiding re-entering the resume
4117 	 * in the resume / power-save sequence
4118 	 */
4119 	hda_keep_power_on(codec);
4120 	hda_set_power_state(codec, AC_PWRST_D0);
4121 	restore_shutup_pins(codec);
4122 	hda_exec_init_verbs(codec);
4123 	snd_hda_jack_set_dirty_all(codec);
4124 	if (codec->patch_ops.resume)
4125 		codec->patch_ops.resume(codec);
4126 	else {
4127 		if (codec->patch_ops.init)
4128 			codec->patch_ops.init(codec);
4129 		snd_hda_codec_resume_amp(codec);
4130 		snd_hda_codec_resume_cache(codec);
4131 	}
4132 
4133 	if (codec->jackpoll_interval)
4134 		hda_jackpoll_work(&codec->jackpoll_work.work);
4135 	else
4136 		snd_hda_jack_report_sync(codec);
4137 
4138 	codec->in_pm = 0;
4139 	snd_hda_power_down(codec); /* flag down before returning */
4140 }
4141 #endif /* CONFIG_PM */
4142 
4143 
4144 /**
4145  * snd_hda_build_controls - build mixer controls
4146  * @bus: the BUS
4147  *
4148  * Creates mixer controls for each codec included in the bus.
4149  *
4150  * Returns 0 if successful, otherwise a negative error code.
4151  */
4152 int snd_hda_build_controls(struct hda_bus *bus)
4153 {
4154 	struct hda_codec *codec;
4155 
4156 	list_for_each_entry(codec, &bus->codec_list, list) {
4157 		int err = snd_hda_codec_build_controls(codec);
4158 		if (err < 0) {
4159 			codec_err(codec,
4160 				  "cannot build controls for #%d (error %d)\n",
4161 				  codec->addr, err);
4162 			err = snd_hda_codec_reset(codec);
4163 			if (err < 0) {
4164 				codec_err(codec,
4165 					  "cannot revert codec\n");
4166 				return err;
4167 			}
4168 		}
4169 	}
4170 	return 0;
4171 }
4172 EXPORT_SYMBOL_GPL(snd_hda_build_controls);
4173 
4174 /*
4175  * add standard channel maps if not specified
4176  */
4177 static int add_std_chmaps(struct hda_codec *codec)
4178 {
4179 	int i, str, err;
4180 
4181 	for (i = 0; i < codec->num_pcms; i++) {
4182 		for (str = 0; str < 2; str++) {
4183 			struct snd_pcm *pcm = codec->pcm_info[i].pcm;
4184 			struct hda_pcm_stream *hinfo =
4185 				&codec->pcm_info[i].stream[str];
4186 			struct snd_pcm_chmap *chmap;
4187 			const struct snd_pcm_chmap_elem *elem;
4188 
4189 			if (codec->pcm_info[i].own_chmap)
4190 				continue;
4191 			if (!pcm || !hinfo->substreams)
4192 				continue;
4193 			elem = hinfo->chmap ? hinfo->chmap : snd_pcm_std_chmaps;
4194 			err = snd_pcm_add_chmap_ctls(pcm, str, elem,
4195 						     hinfo->channels_max,
4196 						     0, &chmap);
4197 			if (err < 0)
4198 				return err;
4199 			chmap->channel_mask = SND_PCM_CHMAP_MASK_2468;
4200 		}
4201 	}
4202 	return 0;
4203 }
4204 
4205 /* default channel maps for 2.1 speakers;
4206  * since HD-audio supports only stereo, odd number channels are omitted
4207  */
4208 const struct snd_pcm_chmap_elem snd_pcm_2_1_chmaps[] = {
4209 	{ .channels = 2,
4210 	  .map = { SNDRV_CHMAP_FL, SNDRV_CHMAP_FR } },
4211 	{ .channels = 4,
4212 	  .map = { SNDRV_CHMAP_FL, SNDRV_CHMAP_FR,
4213 		   SNDRV_CHMAP_LFE, SNDRV_CHMAP_LFE } },
4214 	{ }
4215 };
4216 EXPORT_SYMBOL_GPL(snd_pcm_2_1_chmaps);
4217 
4218 int snd_hda_codec_build_controls(struct hda_codec *codec)
4219 {
4220 	int err = 0;
4221 	hda_exec_init_verbs(codec);
4222 	/* continue to initialize... */
4223 	if (codec->patch_ops.init)
4224 		err = codec->patch_ops.init(codec);
4225 	if (!err && codec->patch_ops.build_controls)
4226 		err = codec->patch_ops.build_controls(codec);
4227 	if (err < 0)
4228 		return err;
4229 
4230 	/* we create chmaps here instead of build_pcms */
4231 	err = add_std_chmaps(codec);
4232 	if (err < 0)
4233 		return err;
4234 
4235 	if (codec->jackpoll_interval)
4236 		hda_jackpoll_work(&codec->jackpoll_work.work);
4237 	else
4238 		snd_hda_jack_report_sync(codec); /* call at the last init point */
4239 	sync_power_up_states(codec);
4240 	return 0;
4241 }
4242 
4243 /*
4244  * stream formats
4245  */
4246 struct hda_rate_tbl {
4247 	unsigned int hz;
4248 	unsigned int alsa_bits;
4249 	unsigned int hda_fmt;
4250 };
4251 
4252 /* rate = base * mult / div */
4253 #define HDA_RATE(base, mult, div) \
4254 	(AC_FMT_BASE_##base##K | (((mult) - 1) << AC_FMT_MULT_SHIFT) | \
4255 	 (((div) - 1) << AC_FMT_DIV_SHIFT))
4256 
4257 static struct hda_rate_tbl rate_bits[] = {
4258 	/* rate in Hz, ALSA rate bitmask, HDA format value */
4259 
4260 	/* autodetected value used in snd_hda_query_supported_pcm */
4261 	{ 8000, SNDRV_PCM_RATE_8000, HDA_RATE(48, 1, 6) },
4262 	{ 11025, SNDRV_PCM_RATE_11025, HDA_RATE(44, 1, 4) },
4263 	{ 16000, SNDRV_PCM_RATE_16000, HDA_RATE(48, 1, 3) },
4264 	{ 22050, SNDRV_PCM_RATE_22050, HDA_RATE(44, 1, 2) },
4265 	{ 32000, SNDRV_PCM_RATE_32000, HDA_RATE(48, 2, 3) },
4266 	{ 44100, SNDRV_PCM_RATE_44100, HDA_RATE(44, 1, 1) },
4267 	{ 48000, SNDRV_PCM_RATE_48000, HDA_RATE(48, 1, 1) },
4268 	{ 88200, SNDRV_PCM_RATE_88200, HDA_RATE(44, 2, 1) },
4269 	{ 96000, SNDRV_PCM_RATE_96000, HDA_RATE(48, 2, 1) },
4270 	{ 176400, SNDRV_PCM_RATE_176400, HDA_RATE(44, 4, 1) },
4271 	{ 192000, SNDRV_PCM_RATE_192000, HDA_RATE(48, 4, 1) },
4272 #define AC_PAR_PCM_RATE_BITS	11
4273 	/* up to bits 10, 384kHZ isn't supported properly */
4274 
4275 	/* not autodetected value */
4276 	{ 9600, SNDRV_PCM_RATE_KNOT, HDA_RATE(48, 1, 5) },
4277 
4278 	{ 0 } /* terminator */
4279 };
4280 
4281 /**
4282  * snd_hda_calc_stream_format - calculate format bitset
4283  * @rate: the sample rate
4284  * @channels: the number of channels
4285  * @format: the PCM format (SNDRV_PCM_FORMAT_XXX)
4286  * @maxbps: the max. bps
4287  *
4288  * Calculate the format bitset from the given rate, channels and th PCM format.
4289  *
4290  * Return zero if invalid.
4291  */
4292 unsigned int snd_hda_calc_stream_format(unsigned int rate,
4293 					unsigned int channels,
4294 					unsigned int format,
4295 					unsigned int maxbps,
4296 					unsigned short spdif_ctls)
4297 {
4298 	int i;
4299 	unsigned int val = 0;
4300 
4301 	for (i = 0; rate_bits[i].hz; i++)
4302 		if (rate_bits[i].hz == rate) {
4303 			val = rate_bits[i].hda_fmt;
4304 			break;
4305 		}
4306 	if (!rate_bits[i].hz) {
4307 		snd_printdd("invalid rate %d\n", rate);
4308 		return 0;
4309 	}
4310 
4311 	if (channels == 0 || channels > 8) {
4312 		snd_printdd("invalid channels %d\n", channels);
4313 		return 0;
4314 	}
4315 	val |= channels - 1;
4316 
4317 	switch (snd_pcm_format_width(format)) {
4318 	case 8:
4319 		val |= AC_FMT_BITS_8;
4320 		break;
4321 	case 16:
4322 		val |= AC_FMT_BITS_16;
4323 		break;
4324 	case 20:
4325 	case 24:
4326 	case 32:
4327 		if (maxbps >= 32 || format == SNDRV_PCM_FORMAT_FLOAT_LE)
4328 			val |= AC_FMT_BITS_32;
4329 		else if (maxbps >= 24)
4330 			val |= AC_FMT_BITS_24;
4331 		else
4332 			val |= AC_FMT_BITS_20;
4333 		break;
4334 	default:
4335 		snd_printdd("invalid format width %d\n",
4336 			  snd_pcm_format_width(format));
4337 		return 0;
4338 	}
4339 
4340 	if (spdif_ctls & AC_DIG1_NONAUDIO)
4341 		val |= AC_FMT_TYPE_NON_PCM;
4342 
4343 	return val;
4344 }
4345 EXPORT_SYMBOL_GPL(snd_hda_calc_stream_format);
4346 
4347 static unsigned int get_pcm_param(struct hda_codec *codec, hda_nid_t nid,
4348 				  int dir)
4349 {
4350 	unsigned int val = 0;
4351 	if (nid != codec->afg &&
4352 	    (get_wcaps(codec, nid) & AC_WCAP_FORMAT_OVRD))
4353 		val = snd_hda_param_read(codec, nid, AC_PAR_PCM);
4354 	if (!val || val == -1)
4355 		val = snd_hda_param_read(codec, codec->afg, AC_PAR_PCM);
4356 	if (!val || val == -1)
4357 		return 0;
4358 	return val;
4359 }
4360 
4361 static unsigned int query_pcm_param(struct hda_codec *codec, hda_nid_t nid)
4362 {
4363 	return query_caps_hash(codec, nid, 0, HDA_HASH_PARPCM_KEY(nid),
4364 			       get_pcm_param);
4365 }
4366 
4367 static unsigned int get_stream_param(struct hda_codec *codec, hda_nid_t nid,
4368 				     int dir)
4369 {
4370 	unsigned int streams = snd_hda_param_read(codec, nid, AC_PAR_STREAM);
4371 	if (!streams || streams == -1)
4372 		streams = snd_hda_param_read(codec, codec->afg, AC_PAR_STREAM);
4373 	if (!streams || streams == -1)
4374 		return 0;
4375 	return streams;
4376 }
4377 
4378 static unsigned int query_stream_param(struct hda_codec *codec, hda_nid_t nid)
4379 {
4380 	return query_caps_hash(codec, nid, 0, HDA_HASH_PARSTR_KEY(nid),
4381 			       get_stream_param);
4382 }
4383 
4384 /**
4385  * snd_hda_query_supported_pcm - query the supported PCM rates and formats
4386  * @codec: the HDA codec
4387  * @nid: NID to query
4388  * @ratesp: the pointer to store the detected rate bitflags
4389  * @formatsp: the pointer to store the detected formats
4390  * @bpsp: the pointer to store the detected format widths
4391  *
4392  * Queries the supported PCM rates and formats.  The NULL @ratesp, @formatsp
4393  * or @bsps argument is ignored.
4394  *
4395  * Returns 0 if successful, otherwise a negative error code.
4396  */
4397 int snd_hda_query_supported_pcm(struct hda_codec *codec, hda_nid_t nid,
4398 				u32 *ratesp, u64 *formatsp, unsigned int *bpsp)
4399 {
4400 	unsigned int i, val, wcaps;
4401 
4402 	wcaps = get_wcaps(codec, nid);
4403 	val = query_pcm_param(codec, nid);
4404 
4405 	if (ratesp) {
4406 		u32 rates = 0;
4407 		for (i = 0; i < AC_PAR_PCM_RATE_BITS; i++) {
4408 			if (val & (1 << i))
4409 				rates |= rate_bits[i].alsa_bits;
4410 		}
4411 		if (rates == 0) {
4412 			codec_err(codec,
4413 				  "rates == 0 (nid=0x%x, val=0x%x, ovrd=%i)\n",
4414 				  nid, val,
4415 				  (wcaps & AC_WCAP_FORMAT_OVRD) ? 1 : 0);
4416 			return -EIO;
4417 		}
4418 		*ratesp = rates;
4419 	}
4420 
4421 	if (formatsp || bpsp) {
4422 		u64 formats = 0;
4423 		unsigned int streams, bps;
4424 
4425 		streams = query_stream_param(codec, nid);
4426 		if (!streams)
4427 			return -EIO;
4428 
4429 		bps = 0;
4430 		if (streams & AC_SUPFMT_PCM) {
4431 			if (val & AC_SUPPCM_BITS_8) {
4432 				formats |= SNDRV_PCM_FMTBIT_U8;
4433 				bps = 8;
4434 			}
4435 			if (val & AC_SUPPCM_BITS_16) {
4436 				formats |= SNDRV_PCM_FMTBIT_S16_LE;
4437 				bps = 16;
4438 			}
4439 			if (wcaps & AC_WCAP_DIGITAL) {
4440 				if (val & AC_SUPPCM_BITS_32)
4441 					formats |= SNDRV_PCM_FMTBIT_IEC958_SUBFRAME_LE;
4442 				if (val & (AC_SUPPCM_BITS_20|AC_SUPPCM_BITS_24))
4443 					formats |= SNDRV_PCM_FMTBIT_S32_LE;
4444 				if (val & AC_SUPPCM_BITS_24)
4445 					bps = 24;
4446 				else if (val & AC_SUPPCM_BITS_20)
4447 					bps = 20;
4448 			} else if (val & (AC_SUPPCM_BITS_20|AC_SUPPCM_BITS_24|
4449 					  AC_SUPPCM_BITS_32)) {
4450 				formats |= SNDRV_PCM_FMTBIT_S32_LE;
4451 				if (val & AC_SUPPCM_BITS_32)
4452 					bps = 32;
4453 				else if (val & AC_SUPPCM_BITS_24)
4454 					bps = 24;
4455 				else if (val & AC_SUPPCM_BITS_20)
4456 					bps = 20;
4457 			}
4458 		}
4459 #if 0 /* FIXME: CS4206 doesn't work, which is the only codec supporting float */
4460 		if (streams & AC_SUPFMT_FLOAT32) {
4461 			formats |= SNDRV_PCM_FMTBIT_FLOAT_LE;
4462 			if (!bps)
4463 				bps = 32;
4464 		}
4465 #endif
4466 		if (streams == AC_SUPFMT_AC3) {
4467 			/* should be exclusive */
4468 			/* temporary hack: we have still no proper support
4469 			 * for the direct AC3 stream...
4470 			 */
4471 			formats |= SNDRV_PCM_FMTBIT_U8;
4472 			bps = 8;
4473 		}
4474 		if (formats == 0) {
4475 			codec_err(codec,
4476 				  "formats == 0 (nid=0x%x, val=0x%x, ovrd=%i, streams=0x%x)\n",
4477 				  nid, val,
4478 				  (wcaps & AC_WCAP_FORMAT_OVRD) ? 1 : 0,
4479 				  streams);
4480 			return -EIO;
4481 		}
4482 		if (formatsp)
4483 			*formatsp = formats;
4484 		if (bpsp)
4485 			*bpsp = bps;
4486 	}
4487 
4488 	return 0;
4489 }
4490 EXPORT_SYMBOL_GPL(snd_hda_query_supported_pcm);
4491 
4492 /**
4493  * snd_hda_is_supported_format - Check the validity of the format
4494  * @codec: HD-audio codec
4495  * @nid: NID to check
4496  * @format: the HD-audio format value to check
4497  *
4498  * Check whether the given node supports the format value.
4499  *
4500  * Returns 1 if supported, 0 if not.
4501  */
4502 int snd_hda_is_supported_format(struct hda_codec *codec, hda_nid_t nid,
4503 				unsigned int format)
4504 {
4505 	int i;
4506 	unsigned int val = 0, rate, stream;
4507 
4508 	val = query_pcm_param(codec, nid);
4509 	if (!val)
4510 		return 0;
4511 
4512 	rate = format & 0xff00;
4513 	for (i = 0; i < AC_PAR_PCM_RATE_BITS; i++)
4514 		if (rate_bits[i].hda_fmt == rate) {
4515 			if (val & (1 << i))
4516 				break;
4517 			return 0;
4518 		}
4519 	if (i >= AC_PAR_PCM_RATE_BITS)
4520 		return 0;
4521 
4522 	stream = query_stream_param(codec, nid);
4523 	if (!stream)
4524 		return 0;
4525 
4526 	if (stream & AC_SUPFMT_PCM) {
4527 		switch (format & 0xf0) {
4528 		case 0x00:
4529 			if (!(val & AC_SUPPCM_BITS_8))
4530 				return 0;
4531 			break;
4532 		case 0x10:
4533 			if (!(val & AC_SUPPCM_BITS_16))
4534 				return 0;
4535 			break;
4536 		case 0x20:
4537 			if (!(val & AC_SUPPCM_BITS_20))
4538 				return 0;
4539 			break;
4540 		case 0x30:
4541 			if (!(val & AC_SUPPCM_BITS_24))
4542 				return 0;
4543 			break;
4544 		case 0x40:
4545 			if (!(val & AC_SUPPCM_BITS_32))
4546 				return 0;
4547 			break;
4548 		default:
4549 			return 0;
4550 		}
4551 	} else {
4552 		/* FIXME: check for float32 and AC3? */
4553 	}
4554 
4555 	return 1;
4556 }
4557 EXPORT_SYMBOL_GPL(snd_hda_is_supported_format);
4558 
4559 /*
4560  * PCM stuff
4561  */
4562 static int hda_pcm_default_open_close(struct hda_pcm_stream *hinfo,
4563 				      struct hda_codec *codec,
4564 				      struct snd_pcm_substream *substream)
4565 {
4566 	return 0;
4567 }
4568 
4569 static int hda_pcm_default_prepare(struct hda_pcm_stream *hinfo,
4570 				   struct hda_codec *codec,
4571 				   unsigned int stream_tag,
4572 				   unsigned int format,
4573 				   struct snd_pcm_substream *substream)
4574 {
4575 	snd_hda_codec_setup_stream(codec, hinfo->nid, stream_tag, 0, format);
4576 	return 0;
4577 }
4578 
4579 static int hda_pcm_default_cleanup(struct hda_pcm_stream *hinfo,
4580 				   struct hda_codec *codec,
4581 				   struct snd_pcm_substream *substream)
4582 {
4583 	snd_hda_codec_cleanup_stream(codec, hinfo->nid);
4584 	return 0;
4585 }
4586 
4587 static int set_pcm_default_values(struct hda_codec *codec,
4588 				  struct hda_pcm_stream *info)
4589 {
4590 	int err;
4591 
4592 	/* query support PCM information from the given NID */
4593 	if (info->nid && (!info->rates || !info->formats)) {
4594 		err = snd_hda_query_supported_pcm(codec, info->nid,
4595 				info->rates ? NULL : &info->rates,
4596 				info->formats ? NULL : &info->formats,
4597 				info->maxbps ? NULL : &info->maxbps);
4598 		if (err < 0)
4599 			return err;
4600 	}
4601 	if (info->ops.open == NULL)
4602 		info->ops.open = hda_pcm_default_open_close;
4603 	if (info->ops.close == NULL)
4604 		info->ops.close = hda_pcm_default_open_close;
4605 	if (info->ops.prepare == NULL) {
4606 		if (snd_BUG_ON(!info->nid))
4607 			return -EINVAL;
4608 		info->ops.prepare = hda_pcm_default_prepare;
4609 	}
4610 	if (info->ops.cleanup == NULL) {
4611 		if (snd_BUG_ON(!info->nid))
4612 			return -EINVAL;
4613 		info->ops.cleanup = hda_pcm_default_cleanup;
4614 	}
4615 	return 0;
4616 }
4617 
4618 /*
4619  * codec prepare/cleanup entries
4620  */
4621 int snd_hda_codec_prepare(struct hda_codec *codec,
4622 			  struct hda_pcm_stream *hinfo,
4623 			  unsigned int stream,
4624 			  unsigned int format,
4625 			  struct snd_pcm_substream *substream)
4626 {
4627 	int ret;
4628 	mutex_lock(&codec->bus->prepare_mutex);
4629 	ret = hinfo->ops.prepare(hinfo, codec, stream, format, substream);
4630 	if (ret >= 0)
4631 		purify_inactive_streams(codec);
4632 	mutex_unlock(&codec->bus->prepare_mutex);
4633 	return ret;
4634 }
4635 EXPORT_SYMBOL_GPL(snd_hda_codec_prepare);
4636 
4637 void snd_hda_codec_cleanup(struct hda_codec *codec,
4638 			   struct hda_pcm_stream *hinfo,
4639 			   struct snd_pcm_substream *substream)
4640 {
4641 	mutex_lock(&codec->bus->prepare_mutex);
4642 	hinfo->ops.cleanup(hinfo, codec, substream);
4643 	mutex_unlock(&codec->bus->prepare_mutex);
4644 }
4645 EXPORT_SYMBOL_GPL(snd_hda_codec_cleanup);
4646 
4647 /* global */
4648 const char *snd_hda_pcm_type_name[HDA_PCM_NTYPES] = {
4649 	"Audio", "SPDIF", "HDMI", "Modem"
4650 };
4651 
4652 /*
4653  * get the empty PCM device number to assign
4654  */
4655 static int get_empty_pcm_device(struct hda_bus *bus, unsigned int type)
4656 {
4657 	/* audio device indices; not linear to keep compatibility */
4658 	/* assigned to static slots up to dev#10; if more needed, assign
4659 	 * the later slot dynamically (when CONFIG_SND_DYNAMIC_MINORS=y)
4660 	 */
4661 	static int audio_idx[HDA_PCM_NTYPES][5] = {
4662 		[HDA_PCM_TYPE_AUDIO] = { 0, 2, 4, 5, -1 },
4663 		[HDA_PCM_TYPE_SPDIF] = { 1, -1 },
4664 		[HDA_PCM_TYPE_HDMI]  = { 3, 7, 8, 9, -1 },
4665 		[HDA_PCM_TYPE_MODEM] = { 6, -1 },
4666 	};
4667 	int i;
4668 
4669 	if (type >= HDA_PCM_NTYPES) {
4670 		dev_err(bus->card->dev, "Invalid PCM type %d\n", type);
4671 		return -EINVAL;
4672 	}
4673 
4674 	for (i = 0; audio_idx[type][i] >= 0; i++) {
4675 #ifndef CONFIG_SND_DYNAMIC_MINORS
4676 		if (audio_idx[type][i] >= 8)
4677 			break;
4678 #endif
4679 		if (!test_and_set_bit(audio_idx[type][i], bus->pcm_dev_bits))
4680 			return audio_idx[type][i];
4681 	}
4682 
4683 #ifdef CONFIG_SND_DYNAMIC_MINORS
4684 	/* non-fixed slots starting from 10 */
4685 	for (i = 10; i < 32; i++) {
4686 		if (!test_and_set_bit(i, bus->pcm_dev_bits))
4687 			return i;
4688 	}
4689 #endif
4690 
4691 	dev_warn(bus->card->dev, "Too many %s devices\n",
4692 		snd_hda_pcm_type_name[type]);
4693 #ifndef CONFIG_SND_DYNAMIC_MINORS
4694 	dev_warn(bus->card->dev,
4695 		 "Consider building the kernel with CONFIG_SND_DYNAMIC_MINORS=y\n");
4696 #endif
4697 	return -EAGAIN;
4698 }
4699 
4700 /*
4701  * attach a new PCM stream
4702  */
4703 static int snd_hda_attach_pcm(struct hda_codec *codec, struct hda_pcm *pcm)
4704 {
4705 	struct hda_bus *bus = codec->bus;
4706 	struct hda_pcm_stream *info;
4707 	int stream, err;
4708 
4709 	if (snd_BUG_ON(!pcm->name))
4710 		return -EINVAL;
4711 	for (stream = 0; stream < 2; stream++) {
4712 		info = &pcm->stream[stream];
4713 		if (info->substreams) {
4714 			err = set_pcm_default_values(codec, info);
4715 			if (err < 0)
4716 				return err;
4717 		}
4718 	}
4719 	return bus->ops.attach_pcm(bus, codec, pcm);
4720 }
4721 
4722 /* assign all PCMs of the given codec */
4723 int snd_hda_codec_build_pcms(struct hda_codec *codec)
4724 {
4725 	unsigned int pcm;
4726 	int err;
4727 
4728 	if (!codec->num_pcms) {
4729 		if (!codec->patch_ops.build_pcms)
4730 			return 0;
4731 		err = codec->patch_ops.build_pcms(codec);
4732 		if (err < 0) {
4733 			codec_err(codec,
4734 				  "cannot build PCMs for #%d (error %d)\n",
4735 				  codec->addr, err);
4736 			err = snd_hda_codec_reset(codec);
4737 			if (err < 0) {
4738 				codec_err(codec,
4739 					  "cannot revert codec\n");
4740 				return err;
4741 			}
4742 		}
4743 	}
4744 	for (pcm = 0; pcm < codec->num_pcms; pcm++) {
4745 		struct hda_pcm *cpcm = &codec->pcm_info[pcm];
4746 		int dev;
4747 
4748 		if (!cpcm->stream[0].substreams && !cpcm->stream[1].substreams)
4749 			continue; /* no substreams assigned */
4750 
4751 		if (!cpcm->pcm) {
4752 			dev = get_empty_pcm_device(codec->bus, cpcm->pcm_type);
4753 			if (dev < 0)
4754 				continue; /* no fatal error */
4755 			cpcm->device = dev;
4756 			err = snd_hda_attach_pcm(codec, cpcm);
4757 			if (err < 0) {
4758 				codec_err(codec,
4759 					  "cannot attach PCM stream %d for codec #%d\n",
4760 					  dev, codec->addr);
4761 				continue; /* no fatal error */
4762 			}
4763 		}
4764 	}
4765 	return 0;
4766 }
4767 
4768 /**
4769  * snd_hda_build_pcms - build PCM information
4770  * @bus: the BUS
4771  *
4772  * Create PCM information for each codec included in the bus.
4773  *
4774  * The build_pcms codec patch is requested to set up codec->num_pcms and
4775  * codec->pcm_info properly.  The array is referred by the top-level driver
4776  * to create its PCM instances.
4777  * The allocated codec->pcm_info should be released in codec->patch_ops.free
4778  * callback.
4779  *
4780  * At least, substreams, channels_min and channels_max must be filled for
4781  * each stream.  substreams = 0 indicates that the stream doesn't exist.
4782  * When rates and/or formats are zero, the supported values are queried
4783  * from the given nid.  The nid is used also by the default ops.prepare
4784  * and ops.cleanup callbacks.
4785  *
4786  * The driver needs to call ops.open in its open callback.  Similarly,
4787  * ops.close is supposed to be called in the close callback.
4788  * ops.prepare should be called in the prepare or hw_params callback
4789  * with the proper parameters for set up.
4790  * ops.cleanup should be called in hw_free for clean up of streams.
4791  *
4792  * This function returns 0 if successful, or a negative error code.
4793  */
4794 int snd_hda_build_pcms(struct hda_bus *bus)
4795 {
4796 	struct hda_codec *codec;
4797 
4798 	list_for_each_entry(codec, &bus->codec_list, list) {
4799 		int err = snd_hda_codec_build_pcms(codec);
4800 		if (err < 0)
4801 			return err;
4802 	}
4803 	return 0;
4804 }
4805 EXPORT_SYMBOL_GPL(snd_hda_build_pcms);
4806 
4807 /**
4808  * snd_hda_check_board_config - compare the current codec with the config table
4809  * @codec: the HDA codec
4810  * @num_configs: number of config enums
4811  * @models: array of model name strings
4812  * @tbl: configuration table, terminated by null entries
4813  *
4814  * Compares the modelname or PCI subsystem id of the current codec with the
4815  * given configuration table.  If a matching entry is found, returns its
4816  * config value (supposed to be 0 or positive).
4817  *
4818  * If no entries are matching, the function returns a negative value.
4819  */
4820 int snd_hda_check_board_config(struct hda_codec *codec,
4821 			       int num_configs, const char * const *models,
4822 			       const struct snd_pci_quirk *tbl)
4823 {
4824 	if (codec->modelname && models) {
4825 		int i;
4826 		for (i = 0; i < num_configs; i++) {
4827 			if (models[i] &&
4828 			    !strcmp(codec->modelname, models[i])) {
4829 				codec_info(codec, "model '%s' is selected\n",
4830 					   models[i]);
4831 				return i;
4832 			}
4833 		}
4834 	}
4835 
4836 	if (!codec->bus->pci || !tbl)
4837 		return -1;
4838 
4839 	tbl = snd_pci_quirk_lookup(codec->bus->pci, tbl);
4840 	if (!tbl)
4841 		return -1;
4842 	if (tbl->value >= 0 && tbl->value < num_configs) {
4843 #ifdef CONFIG_SND_DEBUG_VERBOSE
4844 		char tmp[10];
4845 		const char *model = NULL;
4846 		if (models)
4847 			model = models[tbl->value];
4848 		if (!model) {
4849 			sprintf(tmp, "#%d", tbl->value);
4850 			model = tmp;
4851 		}
4852 		codec_info(codec, "model '%s' is selected for config %x:%x (%s)\n",
4853 			   model, tbl->subvendor, tbl->subdevice,
4854 			   (tbl->name ? tbl->name : "Unknown device"));
4855 #endif
4856 		return tbl->value;
4857 	}
4858 	return -1;
4859 }
4860 EXPORT_SYMBOL_GPL(snd_hda_check_board_config);
4861 
4862 /**
4863  * snd_hda_check_board_codec_sid_config - compare the current codec
4864 					subsystem ID with the
4865 					config table
4866 
4867 	   This is important for Gateway notebooks with SB450 HDA Audio
4868 	   where the vendor ID of the PCI device is:
4869 		ATI Technologies Inc SB450 HDA Audio [1002:437b]
4870 	   and the vendor/subvendor are found only at the codec.
4871 
4872  * @codec: the HDA codec
4873  * @num_configs: number of config enums
4874  * @models: array of model name strings
4875  * @tbl: configuration table, terminated by null entries
4876  *
4877  * Compares the modelname or PCI subsystem id of the current codec with the
4878  * given configuration table.  If a matching entry is found, returns its
4879  * config value (supposed to be 0 or positive).
4880  *
4881  * If no entries are matching, the function returns a negative value.
4882  */
4883 int snd_hda_check_board_codec_sid_config(struct hda_codec *codec,
4884 			       int num_configs, const char * const *models,
4885 			       const struct snd_pci_quirk *tbl)
4886 {
4887 	const struct snd_pci_quirk *q;
4888 
4889 	/* Search for codec ID */
4890 	for (q = tbl; q->subvendor; q++) {
4891 		unsigned int mask = 0xffff0000 | q->subdevice_mask;
4892 		unsigned int id = (q->subdevice | (q->subvendor << 16)) & mask;
4893 		if ((codec->subsystem_id & mask) == id)
4894 			break;
4895 	}
4896 
4897 	if (!q->subvendor)
4898 		return -1;
4899 
4900 	tbl = q;
4901 
4902 	if (tbl->value >= 0 && tbl->value < num_configs) {
4903 #ifdef CONFIG_SND_DEBUG_VERBOSE
4904 		char tmp[10];
4905 		const char *model = NULL;
4906 		if (models)
4907 			model = models[tbl->value];
4908 		if (!model) {
4909 			sprintf(tmp, "#%d", tbl->value);
4910 			model = tmp;
4911 		}
4912 		codec_info(codec, "model '%s' is selected for config %x:%x (%s)\n",
4913 			   model, tbl->subvendor, tbl->subdevice,
4914 			   (tbl->name ? tbl->name : "Unknown device"));
4915 #endif
4916 		return tbl->value;
4917 	}
4918 	return -1;
4919 }
4920 EXPORT_SYMBOL_GPL(snd_hda_check_board_codec_sid_config);
4921 
4922 /**
4923  * snd_hda_add_new_ctls - create controls from the array
4924  * @codec: the HDA codec
4925  * @knew: the array of struct snd_kcontrol_new
4926  *
4927  * This helper function creates and add new controls in the given array.
4928  * The array must be terminated with an empty entry as terminator.
4929  *
4930  * Returns 0 if successful, or a negative error code.
4931  */
4932 int snd_hda_add_new_ctls(struct hda_codec *codec,
4933 			 const struct snd_kcontrol_new *knew)
4934 {
4935 	int err;
4936 
4937 	for (; knew->name; knew++) {
4938 		struct snd_kcontrol *kctl;
4939 		int addr = 0, idx = 0;
4940 		if (knew->iface == -1)	/* skip this codec private value */
4941 			continue;
4942 		for (;;) {
4943 			kctl = snd_ctl_new1(knew, codec);
4944 			if (!kctl)
4945 				return -ENOMEM;
4946 			if (addr > 0)
4947 				kctl->id.device = addr;
4948 			if (idx > 0)
4949 				kctl->id.index = idx;
4950 			err = snd_hda_ctl_add(codec, 0, kctl);
4951 			if (!err)
4952 				break;
4953 			/* try first with another device index corresponding to
4954 			 * the codec addr; if it still fails (or it's the
4955 			 * primary codec), then try another control index
4956 			 */
4957 			if (!addr && codec->addr)
4958 				addr = codec->addr;
4959 			else if (!idx && !knew->index) {
4960 				idx = find_empty_mixer_ctl_idx(codec,
4961 							       knew->name, 0);
4962 				if (idx <= 0)
4963 					return err;
4964 			} else
4965 				return err;
4966 		}
4967 	}
4968 	return 0;
4969 }
4970 EXPORT_SYMBOL_GPL(snd_hda_add_new_ctls);
4971 
4972 #ifdef CONFIG_PM
4973 static void hda_power_work(struct work_struct *work)
4974 {
4975 	struct hda_codec *codec =
4976 		container_of(work, struct hda_codec, power_work.work);
4977 	struct hda_bus *bus = codec->bus;
4978 	unsigned int state;
4979 
4980 	spin_lock(&codec->power_lock);
4981 	if (codec->power_transition > 0) { /* during power-up sequence? */
4982 		spin_unlock(&codec->power_lock);
4983 		return;
4984 	}
4985 	if (!codec->power_on || codec->power_count) {
4986 		codec->power_transition = 0;
4987 		spin_unlock(&codec->power_lock);
4988 		return;
4989 	}
4990 	spin_unlock(&codec->power_lock);
4991 
4992 	state = hda_call_codec_suspend(codec, true);
4993 	if (!bus->power_keep_link_on && (state & AC_PWRST_CLK_STOP_OK))
4994 		hda_call_pm_notify(codec, false);
4995 }
4996 
4997 static void hda_keep_power_on(struct hda_codec *codec)
4998 {
4999 	spin_lock(&codec->power_lock);
5000 	codec->power_count++;
5001 	codec->power_on = 1;
5002 	codec->power_jiffies = jiffies;
5003 	spin_unlock(&codec->power_lock);
5004 	hda_call_pm_notify(codec, true);
5005 }
5006 
5007 /* update the power on/off account with the current jiffies */
5008 void snd_hda_update_power_acct(struct hda_codec *codec)
5009 {
5010 	unsigned long delta = jiffies - codec->power_jiffies;
5011 	if (codec->power_on)
5012 		codec->power_on_acct += delta;
5013 	else
5014 		codec->power_off_acct += delta;
5015 	codec->power_jiffies += delta;
5016 }
5017 
5018 /* Transition to powered up, if wait_power_down then wait for a pending
5019  * transition to D3 to complete. A pending D3 transition is indicated
5020  * with power_transition == -1. */
5021 /* call this with codec->power_lock held! */
5022 static void __snd_hda_power_up(struct hda_codec *codec, bool wait_power_down)
5023 {
5024 	/* Return if power_on or transitioning to power_on, unless currently
5025 	 * powering down. */
5026 	if ((codec->power_on || codec->power_transition > 0) &&
5027 	    !(wait_power_down && codec->power_transition < 0))
5028 		return;
5029 	spin_unlock(&codec->power_lock);
5030 
5031 	cancel_delayed_work_sync(&codec->power_work);
5032 
5033 	spin_lock(&codec->power_lock);
5034 	/* If the power down delayed work was cancelled above before starting,
5035 	 * then there is no need to go through power up here.
5036 	 */
5037 	if (codec->power_on) {
5038 		if (codec->power_transition < 0)
5039 			codec->power_transition = 0;
5040 		return;
5041 	}
5042 
5043 	trace_hda_power_up(codec);
5044 	snd_hda_update_power_acct(codec);
5045 	codec->power_on = 1;
5046 	codec->power_jiffies = jiffies;
5047 	codec->power_transition = 1; /* avoid reentrance */
5048 	spin_unlock(&codec->power_lock);
5049 
5050 	hda_call_codec_resume(codec);
5051 
5052 	spin_lock(&codec->power_lock);
5053 	codec->power_transition = 0;
5054 }
5055 
5056 #define power_save(codec)	\
5057 	((codec)->bus->power_save ? *(codec)->bus->power_save : 0)
5058 
5059 /* Transition to powered down */
5060 static void __snd_hda_power_down(struct hda_codec *codec)
5061 {
5062 	if (!codec->power_on || codec->power_count || codec->power_transition)
5063 		return;
5064 
5065 	if (power_save(codec)) {
5066 		codec->power_transition = -1; /* avoid reentrance */
5067 		queue_delayed_work(codec->bus->workq, &codec->power_work,
5068 				msecs_to_jiffies(power_save(codec) * 1000));
5069 	}
5070 }
5071 
5072 /**
5073  * snd_hda_power_save - Power-up/down/sync the codec
5074  * @codec: HD-audio codec
5075  * @delta: the counter delta to change
5076  *
5077  * Change the power-up counter via @delta, and power up or down the hardware
5078  * appropriately.  For the power-down, queue to the delayed action.
5079  * Passing zero to @delta means to synchronize the power state.
5080  */
5081 void snd_hda_power_save(struct hda_codec *codec, int delta, bool d3wait)
5082 {
5083 	spin_lock(&codec->power_lock);
5084 	codec->power_count += delta;
5085 	trace_hda_power_count(codec);
5086 	if (delta > 0)
5087 		__snd_hda_power_up(codec, d3wait);
5088 	else
5089 		__snd_hda_power_down(codec);
5090 	spin_unlock(&codec->power_lock);
5091 }
5092 EXPORT_SYMBOL_GPL(snd_hda_power_save);
5093 
5094 /**
5095  * snd_hda_check_amp_list_power - Check the amp list and update the power
5096  * @codec: HD-audio codec
5097  * @check: the object containing an AMP list and the status
5098  * @nid: NID to check / update
5099  *
5100  * Check whether the given NID is in the amp list.  If it's in the list,
5101  * check the current AMP status, and update the the power-status according
5102  * to the mute status.
5103  *
5104  * This function is supposed to be set or called from the check_power_status
5105  * patch ops.
5106  */
5107 int snd_hda_check_amp_list_power(struct hda_codec *codec,
5108 				 struct hda_loopback_check *check,
5109 				 hda_nid_t nid)
5110 {
5111 	const struct hda_amp_list *p;
5112 	int ch, v;
5113 
5114 	if (!check->amplist)
5115 		return 0;
5116 	for (p = check->amplist; p->nid; p++) {
5117 		if (p->nid == nid)
5118 			break;
5119 	}
5120 	if (!p->nid)
5121 		return 0; /* nothing changed */
5122 
5123 	for (p = check->amplist; p->nid; p++) {
5124 		for (ch = 0; ch < 2; ch++) {
5125 			v = snd_hda_codec_amp_read(codec, p->nid, ch, p->dir,
5126 						   p->idx);
5127 			if (!(v & HDA_AMP_MUTE) && v > 0) {
5128 				if (!check->power_on) {
5129 					check->power_on = 1;
5130 					snd_hda_power_up(codec);
5131 				}
5132 				return 1;
5133 			}
5134 		}
5135 	}
5136 	if (check->power_on) {
5137 		check->power_on = 0;
5138 		snd_hda_power_down(codec);
5139 	}
5140 	return 0;
5141 }
5142 EXPORT_SYMBOL_GPL(snd_hda_check_amp_list_power);
5143 #endif
5144 
5145 /*
5146  * Channel mode helper
5147  */
5148 
5149 /**
5150  * snd_hda_ch_mode_info - Info callback helper for the channel mode enum
5151  */
5152 int snd_hda_ch_mode_info(struct hda_codec *codec,
5153 			 struct snd_ctl_elem_info *uinfo,
5154 			 const struct hda_channel_mode *chmode,
5155 			 int num_chmodes)
5156 {
5157 	uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
5158 	uinfo->count = 1;
5159 	uinfo->value.enumerated.items = num_chmodes;
5160 	if (uinfo->value.enumerated.item >= num_chmodes)
5161 		uinfo->value.enumerated.item = num_chmodes - 1;
5162 	sprintf(uinfo->value.enumerated.name, "%dch",
5163 		chmode[uinfo->value.enumerated.item].channels);
5164 	return 0;
5165 }
5166 EXPORT_SYMBOL_GPL(snd_hda_ch_mode_info);
5167 
5168 /**
5169  * snd_hda_ch_mode_get - Get callback helper for the channel mode enum
5170  */
5171 int snd_hda_ch_mode_get(struct hda_codec *codec,
5172 			struct snd_ctl_elem_value *ucontrol,
5173 			const struct hda_channel_mode *chmode,
5174 			int num_chmodes,
5175 			int max_channels)
5176 {
5177 	int i;
5178 
5179 	for (i = 0; i < num_chmodes; i++) {
5180 		if (max_channels == chmode[i].channels) {
5181 			ucontrol->value.enumerated.item[0] = i;
5182 			break;
5183 		}
5184 	}
5185 	return 0;
5186 }
5187 EXPORT_SYMBOL_GPL(snd_hda_ch_mode_get);
5188 
5189 /**
5190  * snd_hda_ch_mode_put - Put callback helper for the channel mode enum
5191  */
5192 int snd_hda_ch_mode_put(struct hda_codec *codec,
5193 			struct snd_ctl_elem_value *ucontrol,
5194 			const struct hda_channel_mode *chmode,
5195 			int num_chmodes,
5196 			int *max_channelsp)
5197 {
5198 	unsigned int mode;
5199 
5200 	mode = ucontrol->value.enumerated.item[0];
5201 	if (mode >= num_chmodes)
5202 		return -EINVAL;
5203 	if (*max_channelsp == chmode[mode].channels)
5204 		return 0;
5205 	/* change the current channel setting */
5206 	*max_channelsp = chmode[mode].channels;
5207 	if (chmode[mode].sequence)
5208 		snd_hda_sequence_write_cache(codec, chmode[mode].sequence);
5209 	return 1;
5210 }
5211 EXPORT_SYMBOL_GPL(snd_hda_ch_mode_put);
5212 
5213 /*
5214  * input MUX helper
5215  */
5216 
5217 /**
5218  * snd_hda_input_mux_info_info - Info callback helper for the input-mux enum
5219  */
5220 int snd_hda_input_mux_info(const struct hda_input_mux *imux,
5221 			   struct snd_ctl_elem_info *uinfo)
5222 {
5223 	unsigned int index;
5224 
5225 	uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
5226 	uinfo->count = 1;
5227 	uinfo->value.enumerated.items = imux->num_items;
5228 	if (!imux->num_items)
5229 		return 0;
5230 	index = uinfo->value.enumerated.item;
5231 	if (index >= imux->num_items)
5232 		index = imux->num_items - 1;
5233 	strcpy(uinfo->value.enumerated.name, imux->items[index].label);
5234 	return 0;
5235 }
5236 EXPORT_SYMBOL_GPL(snd_hda_input_mux_info);
5237 
5238 /**
5239  * snd_hda_input_mux_info_put - Put callback helper for the input-mux enum
5240  */
5241 int snd_hda_input_mux_put(struct hda_codec *codec,
5242 			  const struct hda_input_mux *imux,
5243 			  struct snd_ctl_elem_value *ucontrol,
5244 			  hda_nid_t nid,
5245 			  unsigned int *cur_val)
5246 {
5247 	unsigned int idx;
5248 
5249 	if (!imux->num_items)
5250 		return 0;
5251 	idx = ucontrol->value.enumerated.item[0];
5252 	if (idx >= imux->num_items)
5253 		idx = imux->num_items - 1;
5254 	if (*cur_val == idx)
5255 		return 0;
5256 	snd_hda_codec_write_cache(codec, nid, 0, AC_VERB_SET_CONNECT_SEL,
5257 				  imux->items[idx].index);
5258 	*cur_val = idx;
5259 	return 1;
5260 }
5261 EXPORT_SYMBOL_GPL(snd_hda_input_mux_put);
5262 
5263 
5264 /*
5265  * process kcontrol info callback of a simple string enum array
5266  * when @num_items is 0 or @texts is NULL, assume a boolean enum array
5267  */
5268 int snd_hda_enum_helper_info(struct snd_kcontrol *kcontrol,
5269 			     struct snd_ctl_elem_info *uinfo,
5270 			     int num_items, const char * const *texts)
5271 {
5272 	static const char * const texts_default[] = {
5273 		"Disabled", "Enabled"
5274 	};
5275 
5276 	if (!texts || !num_items) {
5277 		num_items = 2;
5278 		texts = texts_default;
5279 	}
5280 
5281 	uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
5282 	uinfo->count = 1;
5283 	uinfo->value.enumerated.items = num_items;
5284 	if (uinfo->value.enumerated.item >= uinfo->value.enumerated.items)
5285 		uinfo->value.enumerated.item = uinfo->value.enumerated.items - 1;
5286 	strcpy(uinfo->value.enumerated.name,
5287 	       texts[uinfo->value.enumerated.item]);
5288 	return 0;
5289 }
5290 EXPORT_SYMBOL_GPL(snd_hda_enum_helper_info);
5291 
5292 /*
5293  * Multi-channel / digital-out PCM helper functions
5294  */
5295 
5296 /* setup SPDIF output stream */
5297 static void setup_dig_out_stream(struct hda_codec *codec, hda_nid_t nid,
5298 				 unsigned int stream_tag, unsigned int format)
5299 {
5300 	struct hda_spdif_out *spdif;
5301 	unsigned int curr_fmt;
5302 	bool reset;
5303 
5304 	spdif = snd_hda_spdif_out_of_nid(codec, nid);
5305 	curr_fmt = snd_hda_codec_read(codec, nid, 0,
5306 				      AC_VERB_GET_STREAM_FORMAT, 0);
5307 	reset = codec->spdif_status_reset &&
5308 		(spdif->ctls & AC_DIG1_ENABLE) &&
5309 		curr_fmt != format;
5310 
5311 	/* turn off SPDIF if needed; otherwise the IEC958 bits won't be
5312 	   updated */
5313 	if (reset)
5314 		set_dig_out_convert(codec, nid,
5315 				    spdif->ctls & ~AC_DIG1_ENABLE & 0xff,
5316 				    -1);
5317 	snd_hda_codec_setup_stream(codec, nid, stream_tag, 0, format);
5318 	if (codec->slave_dig_outs) {
5319 		const hda_nid_t *d;
5320 		for (d = codec->slave_dig_outs; *d; d++)
5321 			snd_hda_codec_setup_stream(codec, *d, stream_tag, 0,
5322 						   format);
5323 	}
5324 	/* turn on again (if needed) */
5325 	if (reset)
5326 		set_dig_out_convert(codec, nid,
5327 				    spdif->ctls & 0xff, -1);
5328 }
5329 
5330 static void cleanup_dig_out_stream(struct hda_codec *codec, hda_nid_t nid)
5331 {
5332 	snd_hda_codec_cleanup_stream(codec, nid);
5333 	if (codec->slave_dig_outs) {
5334 		const hda_nid_t *d;
5335 		for (d = codec->slave_dig_outs; *d; d++)
5336 			snd_hda_codec_cleanup_stream(codec, *d);
5337 	}
5338 }
5339 
5340 /**
5341  * snd_hda_bus_reboot_notify - call the reboot notifier of each codec
5342  * @bus: HD-audio bus
5343  */
5344 void snd_hda_bus_reboot_notify(struct hda_bus *bus)
5345 {
5346 	struct hda_codec *codec;
5347 
5348 	if (!bus)
5349 		return;
5350 	list_for_each_entry(codec, &bus->codec_list, list) {
5351 		if (hda_codec_is_power_on(codec) &&
5352 		    codec->patch_ops.reboot_notify)
5353 			codec->patch_ops.reboot_notify(codec);
5354 	}
5355 }
5356 EXPORT_SYMBOL_GPL(snd_hda_bus_reboot_notify);
5357 
5358 /**
5359  * snd_hda_multi_out_dig_open - open the digital out in the exclusive mode
5360  */
5361 int snd_hda_multi_out_dig_open(struct hda_codec *codec,
5362 			       struct hda_multi_out *mout)
5363 {
5364 	mutex_lock(&codec->spdif_mutex);
5365 	if (mout->dig_out_used == HDA_DIG_ANALOG_DUP)
5366 		/* already opened as analog dup; reset it once */
5367 		cleanup_dig_out_stream(codec, mout->dig_out_nid);
5368 	mout->dig_out_used = HDA_DIG_EXCLUSIVE;
5369 	mutex_unlock(&codec->spdif_mutex);
5370 	return 0;
5371 }
5372 EXPORT_SYMBOL_GPL(snd_hda_multi_out_dig_open);
5373 
5374 /**
5375  * snd_hda_multi_out_dig_prepare - prepare the digital out stream
5376  */
5377 int snd_hda_multi_out_dig_prepare(struct hda_codec *codec,
5378 				  struct hda_multi_out *mout,
5379 				  unsigned int stream_tag,
5380 				  unsigned int format,
5381 				  struct snd_pcm_substream *substream)
5382 {
5383 	mutex_lock(&codec->spdif_mutex);
5384 	setup_dig_out_stream(codec, mout->dig_out_nid, stream_tag, format);
5385 	mutex_unlock(&codec->spdif_mutex);
5386 	return 0;
5387 }
5388 EXPORT_SYMBOL_GPL(snd_hda_multi_out_dig_prepare);
5389 
5390 /**
5391  * snd_hda_multi_out_dig_cleanup - clean-up the digital out stream
5392  */
5393 int snd_hda_multi_out_dig_cleanup(struct hda_codec *codec,
5394 				  struct hda_multi_out *mout)
5395 {
5396 	mutex_lock(&codec->spdif_mutex);
5397 	cleanup_dig_out_stream(codec, mout->dig_out_nid);
5398 	mutex_unlock(&codec->spdif_mutex);
5399 	return 0;
5400 }
5401 EXPORT_SYMBOL_GPL(snd_hda_multi_out_dig_cleanup);
5402 
5403 /**
5404  * snd_hda_multi_out_dig_close - release the digital out stream
5405  */
5406 int snd_hda_multi_out_dig_close(struct hda_codec *codec,
5407 				struct hda_multi_out *mout)
5408 {
5409 	mutex_lock(&codec->spdif_mutex);
5410 	mout->dig_out_used = 0;
5411 	mutex_unlock(&codec->spdif_mutex);
5412 	return 0;
5413 }
5414 EXPORT_SYMBOL_GPL(snd_hda_multi_out_dig_close);
5415 
5416 /**
5417  * snd_hda_multi_out_analog_open - open analog outputs
5418  *
5419  * Open analog outputs and set up the hw-constraints.
5420  * If the digital outputs can be opened as slave, open the digital
5421  * outputs, too.
5422  */
5423 int snd_hda_multi_out_analog_open(struct hda_codec *codec,
5424 				  struct hda_multi_out *mout,
5425 				  struct snd_pcm_substream *substream,
5426 				  struct hda_pcm_stream *hinfo)
5427 {
5428 	struct snd_pcm_runtime *runtime = substream->runtime;
5429 	runtime->hw.channels_max = mout->max_channels;
5430 	if (mout->dig_out_nid) {
5431 		if (!mout->analog_rates) {
5432 			mout->analog_rates = hinfo->rates;
5433 			mout->analog_formats = hinfo->formats;
5434 			mout->analog_maxbps = hinfo->maxbps;
5435 		} else {
5436 			runtime->hw.rates = mout->analog_rates;
5437 			runtime->hw.formats = mout->analog_formats;
5438 			hinfo->maxbps = mout->analog_maxbps;
5439 		}
5440 		if (!mout->spdif_rates) {
5441 			snd_hda_query_supported_pcm(codec, mout->dig_out_nid,
5442 						    &mout->spdif_rates,
5443 						    &mout->spdif_formats,
5444 						    &mout->spdif_maxbps);
5445 		}
5446 		mutex_lock(&codec->spdif_mutex);
5447 		if (mout->share_spdif) {
5448 			if ((runtime->hw.rates & mout->spdif_rates) &&
5449 			    (runtime->hw.formats & mout->spdif_formats)) {
5450 				runtime->hw.rates &= mout->spdif_rates;
5451 				runtime->hw.formats &= mout->spdif_formats;
5452 				if (mout->spdif_maxbps < hinfo->maxbps)
5453 					hinfo->maxbps = mout->spdif_maxbps;
5454 			} else {
5455 				mout->share_spdif = 0;
5456 				/* FIXME: need notify? */
5457 			}
5458 		}
5459 		mutex_unlock(&codec->spdif_mutex);
5460 	}
5461 	return snd_pcm_hw_constraint_step(substream->runtime, 0,
5462 					  SNDRV_PCM_HW_PARAM_CHANNELS, 2);
5463 }
5464 EXPORT_SYMBOL_GPL(snd_hda_multi_out_analog_open);
5465 
5466 /**
5467  * snd_hda_multi_out_analog_prepare - Preapre the analog outputs.
5468  *
5469  * Set up the i/o for analog out.
5470  * When the digital out is available, copy the front out to digital out, too.
5471  */
5472 int snd_hda_multi_out_analog_prepare(struct hda_codec *codec,
5473 				     struct hda_multi_out *mout,
5474 				     unsigned int stream_tag,
5475 				     unsigned int format,
5476 				     struct snd_pcm_substream *substream)
5477 {
5478 	const hda_nid_t *nids = mout->dac_nids;
5479 	int chs = substream->runtime->channels;
5480 	struct hda_spdif_out *spdif;
5481 	int i;
5482 
5483 	mutex_lock(&codec->spdif_mutex);
5484 	spdif = snd_hda_spdif_out_of_nid(codec, mout->dig_out_nid);
5485 	if (mout->dig_out_nid && mout->share_spdif &&
5486 	    mout->dig_out_used != HDA_DIG_EXCLUSIVE) {
5487 		if (chs == 2 &&
5488 		    snd_hda_is_supported_format(codec, mout->dig_out_nid,
5489 						format) &&
5490 		    !(spdif->status & IEC958_AES0_NONAUDIO)) {
5491 			mout->dig_out_used = HDA_DIG_ANALOG_DUP;
5492 			setup_dig_out_stream(codec, mout->dig_out_nid,
5493 					     stream_tag, format);
5494 		} else {
5495 			mout->dig_out_used = 0;
5496 			cleanup_dig_out_stream(codec, mout->dig_out_nid);
5497 		}
5498 	}
5499 	mutex_unlock(&codec->spdif_mutex);
5500 
5501 	/* front */
5502 	snd_hda_codec_setup_stream(codec, nids[HDA_FRONT], stream_tag,
5503 				   0, format);
5504 	if (!mout->no_share_stream &&
5505 	    mout->hp_nid && mout->hp_nid != nids[HDA_FRONT])
5506 		/* headphone out will just decode front left/right (stereo) */
5507 		snd_hda_codec_setup_stream(codec, mout->hp_nid, stream_tag,
5508 					   0, format);
5509 	/* extra outputs copied from front */
5510 	for (i = 0; i < ARRAY_SIZE(mout->hp_out_nid); i++)
5511 		if (!mout->no_share_stream && mout->hp_out_nid[i])
5512 			snd_hda_codec_setup_stream(codec,
5513 						   mout->hp_out_nid[i],
5514 						   stream_tag, 0, format);
5515 
5516 	/* surrounds */
5517 	for (i = 1; i < mout->num_dacs; i++) {
5518 		if (chs >= (i + 1) * 2) /* independent out */
5519 			snd_hda_codec_setup_stream(codec, nids[i], stream_tag,
5520 						   i * 2, format);
5521 		else if (!mout->no_share_stream) /* copy front */
5522 			snd_hda_codec_setup_stream(codec, nids[i], stream_tag,
5523 						   0, format);
5524 	}
5525 
5526 	/* extra surrounds */
5527 	for (i = 0; i < ARRAY_SIZE(mout->extra_out_nid); i++) {
5528 		int ch = 0;
5529 		if (!mout->extra_out_nid[i])
5530 			break;
5531 		if (chs >= (i + 1) * 2)
5532 			ch = i * 2;
5533 		else if (!mout->no_share_stream)
5534 			break;
5535 		snd_hda_codec_setup_stream(codec, mout->extra_out_nid[i],
5536 					   stream_tag, ch, format);
5537 	}
5538 
5539 	return 0;
5540 }
5541 EXPORT_SYMBOL_GPL(snd_hda_multi_out_analog_prepare);
5542 
5543 /**
5544  * snd_hda_multi_out_analog_cleanup - clean up the setting for analog out
5545  */
5546 int snd_hda_multi_out_analog_cleanup(struct hda_codec *codec,
5547 				     struct hda_multi_out *mout)
5548 {
5549 	const hda_nid_t *nids = mout->dac_nids;
5550 	int i;
5551 
5552 	for (i = 0; i < mout->num_dacs; i++)
5553 		snd_hda_codec_cleanup_stream(codec, nids[i]);
5554 	if (mout->hp_nid)
5555 		snd_hda_codec_cleanup_stream(codec, mout->hp_nid);
5556 	for (i = 0; i < ARRAY_SIZE(mout->hp_out_nid); i++)
5557 		if (mout->hp_out_nid[i])
5558 			snd_hda_codec_cleanup_stream(codec,
5559 						     mout->hp_out_nid[i]);
5560 	for (i = 0; i < ARRAY_SIZE(mout->extra_out_nid); i++)
5561 		if (mout->extra_out_nid[i])
5562 			snd_hda_codec_cleanup_stream(codec,
5563 						     mout->extra_out_nid[i]);
5564 	mutex_lock(&codec->spdif_mutex);
5565 	if (mout->dig_out_nid && mout->dig_out_used == HDA_DIG_ANALOG_DUP) {
5566 		cleanup_dig_out_stream(codec, mout->dig_out_nid);
5567 		mout->dig_out_used = 0;
5568 	}
5569 	mutex_unlock(&codec->spdif_mutex);
5570 	return 0;
5571 }
5572 EXPORT_SYMBOL_GPL(snd_hda_multi_out_analog_cleanup);
5573 
5574 /**
5575  * snd_hda_get_default_vref - Get the default (mic) VREF pin bits
5576  *
5577  * Guess the suitable VREF pin bits to be set as the pin-control value.
5578  * Note: the function doesn't set the AC_PINCTL_IN_EN bit.
5579  */
5580 unsigned int snd_hda_get_default_vref(struct hda_codec *codec, hda_nid_t pin)
5581 {
5582 	unsigned int pincap;
5583 	unsigned int oldval;
5584 	oldval = snd_hda_codec_read(codec, pin, 0,
5585 				    AC_VERB_GET_PIN_WIDGET_CONTROL, 0);
5586 	pincap = snd_hda_query_pin_caps(codec, pin);
5587 	pincap = (pincap & AC_PINCAP_VREF) >> AC_PINCAP_VREF_SHIFT;
5588 	/* Exception: if the default pin setup is vref50, we give it priority */
5589 	if ((pincap & AC_PINCAP_VREF_80) && oldval != PIN_VREF50)
5590 		return AC_PINCTL_VREF_80;
5591 	else if (pincap & AC_PINCAP_VREF_50)
5592 		return AC_PINCTL_VREF_50;
5593 	else if (pincap & AC_PINCAP_VREF_100)
5594 		return AC_PINCTL_VREF_100;
5595 	else if (pincap & AC_PINCAP_VREF_GRD)
5596 		return AC_PINCTL_VREF_GRD;
5597 	return AC_PINCTL_VREF_HIZ;
5598 }
5599 EXPORT_SYMBOL_GPL(snd_hda_get_default_vref);
5600 
5601 /* correct the pin ctl value for matching with the pin cap */
5602 unsigned int snd_hda_correct_pin_ctl(struct hda_codec *codec,
5603 				     hda_nid_t pin, unsigned int val)
5604 {
5605 	static unsigned int cap_lists[][2] = {
5606 		{ AC_PINCTL_VREF_100, AC_PINCAP_VREF_100 },
5607 		{ AC_PINCTL_VREF_80, AC_PINCAP_VREF_80 },
5608 		{ AC_PINCTL_VREF_50, AC_PINCAP_VREF_50 },
5609 		{ AC_PINCTL_VREF_GRD, AC_PINCAP_VREF_GRD },
5610 	};
5611 	unsigned int cap;
5612 
5613 	if (!val)
5614 		return 0;
5615 	cap = snd_hda_query_pin_caps(codec, pin);
5616 	if (!cap)
5617 		return val; /* don't know what to do... */
5618 
5619 	if (val & AC_PINCTL_OUT_EN) {
5620 		if (!(cap & AC_PINCAP_OUT))
5621 			val &= ~(AC_PINCTL_OUT_EN | AC_PINCTL_HP_EN);
5622 		else if ((val & AC_PINCTL_HP_EN) && !(cap & AC_PINCAP_HP_DRV))
5623 			val &= ~AC_PINCTL_HP_EN;
5624 	}
5625 
5626 	if (val & AC_PINCTL_IN_EN) {
5627 		if (!(cap & AC_PINCAP_IN))
5628 			val &= ~(AC_PINCTL_IN_EN | AC_PINCTL_VREFEN);
5629 		else {
5630 			unsigned int vcap, vref;
5631 			int i;
5632 			vcap = (cap & AC_PINCAP_VREF) >> AC_PINCAP_VREF_SHIFT;
5633 			vref = val & AC_PINCTL_VREFEN;
5634 			for (i = 0; i < ARRAY_SIZE(cap_lists); i++) {
5635 				if (vref == cap_lists[i][0] &&
5636 				    !(vcap & cap_lists[i][1])) {
5637 					if (i == ARRAY_SIZE(cap_lists) - 1)
5638 						vref = AC_PINCTL_VREF_HIZ;
5639 					else
5640 						vref = cap_lists[i + 1][0];
5641 				}
5642 			}
5643 			val &= ~AC_PINCTL_VREFEN;
5644 			val |= vref;
5645 		}
5646 	}
5647 
5648 	return val;
5649 }
5650 EXPORT_SYMBOL_GPL(snd_hda_correct_pin_ctl);
5651 
5652 int _snd_hda_set_pin_ctl(struct hda_codec *codec, hda_nid_t pin,
5653 			 unsigned int val, bool cached)
5654 {
5655 	val = snd_hda_correct_pin_ctl(codec, pin, val);
5656 	snd_hda_codec_set_pin_target(codec, pin, val);
5657 	if (cached)
5658 		return snd_hda_codec_update_cache(codec, pin, 0,
5659 				AC_VERB_SET_PIN_WIDGET_CONTROL, val);
5660 	else
5661 		return snd_hda_codec_write(codec, pin, 0,
5662 					   AC_VERB_SET_PIN_WIDGET_CONTROL, val);
5663 }
5664 EXPORT_SYMBOL_GPL(_snd_hda_set_pin_ctl);
5665 
5666 /**
5667  * snd_hda_add_imux_item - Add an item to input_mux
5668  *
5669  * When the same label is used already in the existing items, the number
5670  * suffix is appended to the label.  This label index number is stored
5671  * to type_idx when non-NULL pointer is given.
5672  */
5673 int snd_hda_add_imux_item(struct hda_input_mux *imux, const char *label,
5674 			  int index, int *type_idx)
5675 {
5676 	int i, label_idx = 0;
5677 	if (imux->num_items >= HDA_MAX_NUM_INPUTS) {
5678 		snd_printd(KERN_ERR "hda_codec: Too many imux items!\n");
5679 		return -EINVAL;
5680 	}
5681 	for (i = 0; i < imux->num_items; i++) {
5682 		if (!strncmp(label, imux->items[i].label, strlen(label)))
5683 			label_idx++;
5684 	}
5685 	if (type_idx)
5686 		*type_idx = label_idx;
5687 	if (label_idx > 0)
5688 		snprintf(imux->items[imux->num_items].label,
5689 			 sizeof(imux->items[imux->num_items].label),
5690 			 "%s %d", label, label_idx);
5691 	else
5692 		strlcpy(imux->items[imux->num_items].label, label,
5693 			sizeof(imux->items[imux->num_items].label));
5694 	imux->items[imux->num_items].index = index;
5695 	imux->num_items++;
5696 	return 0;
5697 }
5698 EXPORT_SYMBOL_GPL(snd_hda_add_imux_item);
5699 
5700 
5701 #ifdef CONFIG_PM
5702 /*
5703  * power management
5704  */
5705 
5706 
5707 static void hda_async_suspend(void *data, async_cookie_t cookie)
5708 {
5709 	hda_call_codec_suspend(data, false);
5710 }
5711 
5712 static void hda_async_resume(void *data, async_cookie_t cookie)
5713 {
5714 	hda_call_codec_resume(data);
5715 }
5716 
5717 /**
5718  * snd_hda_suspend - suspend the codecs
5719  * @bus: the HDA bus
5720  *
5721  * Returns 0 if successful.
5722  */
5723 int snd_hda_suspend(struct hda_bus *bus)
5724 {
5725 	struct hda_codec *codec;
5726 	ASYNC_DOMAIN_EXCLUSIVE(domain);
5727 
5728 	list_for_each_entry(codec, &bus->codec_list, list) {
5729 		cancel_delayed_work_sync(&codec->jackpoll_work);
5730 		if (hda_codec_is_power_on(codec)) {
5731 			if (bus->num_codecs > 1)
5732 				async_schedule_domain(hda_async_suspend, codec,
5733 						      &domain);
5734 			else
5735 				hda_call_codec_suspend(codec, false);
5736 		}
5737 	}
5738 
5739 	if (bus->num_codecs > 1)
5740 		async_synchronize_full_domain(&domain);
5741 
5742 	return 0;
5743 }
5744 EXPORT_SYMBOL_GPL(snd_hda_suspend);
5745 
5746 /**
5747  * snd_hda_resume - resume the codecs
5748  * @bus: the HDA bus
5749  *
5750  * Returns 0 if successful.
5751  */
5752 int snd_hda_resume(struct hda_bus *bus)
5753 {
5754 	struct hda_codec *codec;
5755 	ASYNC_DOMAIN_EXCLUSIVE(domain);
5756 
5757 	list_for_each_entry(codec, &bus->codec_list, list) {
5758 		if (bus->num_codecs > 1)
5759 			async_schedule_domain(hda_async_resume, codec, &domain);
5760 		else
5761 			hda_call_codec_resume(codec);
5762 	}
5763 
5764 	if (bus->num_codecs > 1)
5765 		async_synchronize_full_domain(&domain);
5766 
5767 	return 0;
5768 }
5769 EXPORT_SYMBOL_GPL(snd_hda_resume);
5770 #endif /* CONFIG_PM */
5771 
5772 /*
5773  * generic arrays
5774  */
5775 
5776 /**
5777  * snd_array_new - get a new element from the given array
5778  * @array: the array object
5779  *
5780  * Get a new element from the given array.  If it exceeds the
5781  * pre-allocated array size, re-allocate the array.
5782  *
5783  * Returns NULL if allocation failed.
5784  */
5785 void *snd_array_new(struct snd_array *array)
5786 {
5787 	if (snd_BUG_ON(!array->elem_size))
5788 		return NULL;
5789 	if (array->used >= array->alloced) {
5790 		int num = array->alloced + array->alloc_align;
5791 		int size = (num + 1) * array->elem_size;
5792 		void *nlist;
5793 		if (snd_BUG_ON(num >= 4096))
5794 			return NULL;
5795 		nlist = krealloc(array->list, size, GFP_KERNEL | __GFP_ZERO);
5796 		if (!nlist)
5797 			return NULL;
5798 		array->list = nlist;
5799 		array->alloced = num;
5800 	}
5801 	return snd_array_elem(array, array->used++);
5802 }
5803 EXPORT_SYMBOL_GPL(snd_array_new);
5804 
5805 /**
5806  * snd_array_free - free the given array elements
5807  * @array: the array object
5808  */
5809 void snd_array_free(struct snd_array *array)
5810 {
5811 	kfree(array->list);
5812 	array->used = 0;
5813 	array->alloced = 0;
5814 	array->list = NULL;
5815 }
5816 EXPORT_SYMBOL_GPL(snd_array_free);
5817 
5818 /**
5819  * snd_print_pcm_bits - Print the supported PCM fmt bits to the string buffer
5820  * @pcm: PCM caps bits
5821  * @buf: the string buffer to write
5822  * @buflen: the max buffer length
5823  *
5824  * used by hda_proc.c and hda_eld.c
5825  */
5826 void snd_print_pcm_bits(int pcm, char *buf, int buflen)
5827 {
5828 	static unsigned int bits[] = { 8, 16, 20, 24, 32 };
5829 	int i, j;
5830 
5831 	for (i = 0, j = 0; i < ARRAY_SIZE(bits); i++)
5832 		if (pcm & (AC_SUPPCM_BITS_8 << i))
5833 			j += snprintf(buf + j, buflen - j,  " %d", bits[i]);
5834 
5835 	buf[j] = '\0'; /* necessary when j == 0 */
5836 }
5837 EXPORT_SYMBOL_GPL(snd_print_pcm_bits);
5838 
5839 MODULE_DESCRIPTION("HDA codec core");
5840 MODULE_LICENSE("GPL");
5841