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