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