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