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