Merge branch 'fixes-modulesplit' into fixes
[zen-stable.git] / sound / pci / hda / hda_codec.c
blob916a1863af73b6a3df0e6c79ae97a4ce0c5db2f7
1 /*
2 * Universal Interface for Intel High Definition Audio Codec
4 * Copyright (c) 2004 Takashi Iwai <tiwai@suse.de>
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.
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.
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
22 #include <linux/init.h>
23 #include <linux/delay.h>
24 #include <linux/slab.h>
25 #include <linux/pci.h>
26 #include <linux/mutex.h>
27 #include <linux/module.h>
28 #include <sound/core.h>
29 #include "hda_codec.h"
30 #include <sound/asoundef.h>
31 #include <sound/tlv.h>
32 #include <sound/initval.h>
33 #include <sound/jack.h>
34 #include "hda_local.h"
35 #include "hda_beep.h"
36 #include <sound/hda_hwdep.h>
38 #define CREATE_TRACE_POINTS
39 #include "hda_trace.h"
42 * vendor / preset table
45 struct hda_vendor_id {
46 unsigned int id;
47 const char *name;
50 /* codec vendor labels */
51 static struct hda_vendor_id hda_vendor_ids[] = {
52 { 0x1002, "ATI" },
53 { 0x1013, "Cirrus Logic" },
54 { 0x1057, "Motorola" },
55 { 0x1095, "Silicon Image" },
56 { 0x10de, "Nvidia" },
57 { 0x10ec, "Realtek" },
58 { 0x1102, "Creative" },
59 { 0x1106, "VIA" },
60 { 0x111d, "IDT" },
61 { 0x11c1, "LSI" },
62 { 0x11d4, "Analog Devices" },
63 { 0x13f6, "C-Media" },
64 { 0x14f1, "Conexant" },
65 { 0x17e8, "Chrontel" },
66 { 0x1854, "LG" },
67 { 0x1aec, "Wolfson Microelectronics" },
68 { 0x434d, "C-Media" },
69 { 0x8086, "Intel" },
70 { 0x8384, "SigmaTel" },
71 {} /* terminator */
74 static DEFINE_MUTEX(preset_mutex);
75 static LIST_HEAD(hda_preset_tables);
77 int snd_hda_add_codec_preset(struct hda_codec_preset_list *preset)
79 mutex_lock(&preset_mutex);
80 list_add_tail(&preset->list, &hda_preset_tables);
81 mutex_unlock(&preset_mutex);
82 return 0;
84 EXPORT_SYMBOL_HDA(snd_hda_add_codec_preset);
86 int snd_hda_delete_codec_preset(struct hda_codec_preset_list *preset)
88 mutex_lock(&preset_mutex);
89 list_del(&preset->list);
90 mutex_unlock(&preset_mutex);
91 return 0;
93 EXPORT_SYMBOL_HDA(snd_hda_delete_codec_preset);
95 #ifdef CONFIG_SND_HDA_POWER_SAVE
96 static void hda_power_work(struct work_struct *work);
97 static void hda_keep_power_on(struct hda_codec *codec);
98 #define hda_codec_is_power_on(codec) ((codec)->power_on)
99 #else
100 static inline void hda_keep_power_on(struct hda_codec *codec) {}
101 #define hda_codec_is_power_on(codec) 1
102 #endif
105 * snd_hda_get_jack_location - Give a location string of the jack
106 * @cfg: pin default config value
108 * Parse the pin default config value and returns the string of the
109 * jack location, e.g. "Rear", "Front", etc.
111 const char *snd_hda_get_jack_location(u32 cfg)
113 static char *bases[7] = {
114 "N/A", "Rear", "Front", "Left", "Right", "Top", "Bottom",
116 static unsigned char specials_idx[] = {
117 0x07, 0x08,
118 0x17, 0x18, 0x19,
119 0x37, 0x38
121 static char *specials[] = {
122 "Rear Panel", "Drive Bar",
123 "Riser", "HDMI", "ATAPI",
124 "Mobile-In", "Mobile-Out"
126 int i;
127 cfg = (cfg & AC_DEFCFG_LOCATION) >> AC_DEFCFG_LOCATION_SHIFT;
128 if ((cfg & 0x0f) < 7)
129 return bases[cfg & 0x0f];
130 for (i = 0; i < ARRAY_SIZE(specials_idx); i++) {
131 if (cfg == specials_idx[i])
132 return specials[i];
134 return "UNKNOWN";
136 EXPORT_SYMBOL_HDA(snd_hda_get_jack_location);
139 * snd_hda_get_jack_connectivity - Give a connectivity string of the jack
140 * @cfg: pin default config value
142 * Parse the pin default config value and returns the string of the
143 * jack connectivity, i.e. external or internal connection.
145 const char *snd_hda_get_jack_connectivity(u32 cfg)
147 static char *jack_locations[4] = { "Ext", "Int", "Sep", "Oth" };
149 return jack_locations[(cfg >> (AC_DEFCFG_LOCATION_SHIFT + 4)) & 3];
151 EXPORT_SYMBOL_HDA(snd_hda_get_jack_connectivity);
154 * snd_hda_get_jack_type - Give a type string of the jack
155 * @cfg: pin default config value
157 * Parse the pin default config value and returns the string of the
158 * jack type, i.e. the purpose of the jack, such as Line-Out or CD.
160 const char *snd_hda_get_jack_type(u32 cfg)
162 static char *jack_types[16] = {
163 "Line Out", "Speaker", "HP Out", "CD",
164 "SPDIF Out", "Digital Out", "Modem Line", "Modem Hand",
165 "Line In", "Aux", "Mic", "Telephony",
166 "SPDIF In", "Digitial In", "Reserved", "Other"
169 return jack_types[(cfg & AC_DEFCFG_DEVICE)
170 >> AC_DEFCFG_DEVICE_SHIFT];
172 EXPORT_SYMBOL_HDA(snd_hda_get_jack_type);
175 * Compose a 32bit command word to be sent to the HD-audio controller
177 static inline unsigned int
178 make_codec_cmd(struct hda_codec *codec, hda_nid_t nid, int direct,
179 unsigned int verb, unsigned int parm)
181 u32 val;
183 if ((codec->addr & ~0xf) || (direct & ~1) || (nid & ~0x7f) ||
184 (verb & ~0xfff) || (parm & ~0xffff)) {
185 printk(KERN_ERR "hda-codec: out of range cmd %x:%x:%x:%x:%x\n",
186 codec->addr, direct, nid, verb, parm);
187 return ~0;
190 val = (u32)codec->addr << 28;
191 val |= (u32)direct << 27;
192 val |= (u32)nid << 20;
193 val |= verb << 8;
194 val |= parm;
195 return val;
199 * Send and receive a verb
201 static int codec_exec_verb(struct hda_codec *codec, unsigned int cmd,
202 unsigned int *res)
204 struct hda_bus *bus = codec->bus;
205 int err;
207 if (cmd == ~0)
208 return -1;
210 if (res)
211 *res = -1;
212 again:
213 snd_hda_power_up(codec);
214 mutex_lock(&bus->cmd_mutex);
215 trace_hda_send_cmd(codec, cmd);
216 err = bus->ops.command(bus, cmd);
217 if (!err && res) {
218 *res = bus->ops.get_response(bus, codec->addr);
219 trace_hda_get_response(codec, *res);
221 mutex_unlock(&bus->cmd_mutex);
222 snd_hda_power_down(codec);
223 if (res && *res == -1 && bus->rirb_error) {
224 if (bus->response_reset) {
225 snd_printd("hda_codec: resetting BUS due to "
226 "fatal communication error\n");
227 trace_hda_bus_reset(bus);
228 bus->ops.bus_reset(bus);
230 goto again;
232 /* clear reset-flag when the communication gets recovered */
233 if (!err)
234 bus->response_reset = 0;
235 return err;
239 * snd_hda_codec_read - send a command and get the response
240 * @codec: the HDA codec
241 * @nid: NID to send the command
242 * @direct: direct flag
243 * @verb: the verb to send
244 * @parm: the parameter for the verb
246 * Send a single command and read the corresponding response.
248 * Returns the obtained response value, or -1 for an error.
250 unsigned int snd_hda_codec_read(struct hda_codec *codec, hda_nid_t nid,
251 int direct,
252 unsigned int verb, unsigned int parm)
254 unsigned cmd = make_codec_cmd(codec, nid, direct, verb, parm);
255 unsigned int res;
256 if (codec_exec_verb(codec, cmd, &res))
257 return -1;
258 return res;
260 EXPORT_SYMBOL_HDA(snd_hda_codec_read);
263 * snd_hda_codec_write - send a single command without waiting for response
264 * @codec: the HDA codec
265 * @nid: NID to send the command
266 * @direct: direct flag
267 * @verb: the verb to send
268 * @parm: the parameter for the verb
270 * Send a single command without waiting for response.
272 * Returns 0 if successful, or a negative error code.
274 int snd_hda_codec_write(struct hda_codec *codec, hda_nid_t nid, int direct,
275 unsigned int verb, unsigned int parm)
277 unsigned int cmd = make_codec_cmd(codec, nid, direct, verb, parm);
278 unsigned int res;
279 return codec_exec_verb(codec, cmd,
280 codec->bus->sync_write ? &res : NULL);
282 EXPORT_SYMBOL_HDA(snd_hda_codec_write);
285 * snd_hda_sequence_write - sequence writes
286 * @codec: the HDA codec
287 * @seq: VERB array to send
289 * Send the commands sequentially from the given array.
290 * The array must be terminated with NID=0.
292 void snd_hda_sequence_write(struct hda_codec *codec, const struct hda_verb *seq)
294 for (; seq->nid; seq++)
295 snd_hda_codec_write(codec, seq->nid, 0, seq->verb, seq->param);
297 EXPORT_SYMBOL_HDA(snd_hda_sequence_write);
300 * snd_hda_get_sub_nodes - get the range of sub nodes
301 * @codec: the HDA codec
302 * @nid: NID to parse
303 * @start_id: the pointer to store the start NID
305 * Parse the NID and store the start NID of its sub-nodes.
306 * Returns the number of sub-nodes.
308 int snd_hda_get_sub_nodes(struct hda_codec *codec, hda_nid_t nid,
309 hda_nid_t *start_id)
311 unsigned int parm;
313 parm = snd_hda_param_read(codec, nid, AC_PAR_NODE_COUNT);
314 if (parm == -1)
315 return 0;
316 *start_id = (parm >> 16) & 0x7fff;
317 return (int)(parm & 0x7fff);
319 EXPORT_SYMBOL_HDA(snd_hda_get_sub_nodes);
321 /* look up the cached results */
322 static hda_nid_t *lookup_conn_list(struct snd_array *array, hda_nid_t nid)
324 int i, len;
325 for (i = 0; i < array->used; ) {
326 hda_nid_t *p = snd_array_elem(array, i);
327 if (nid == *p)
328 return p;
329 len = p[1];
330 i += len + 2;
332 return NULL;
336 * snd_hda_get_conn_list - get connection list
337 * @codec: the HDA codec
338 * @nid: NID to parse
339 * @listp: the pointer to store NID list
341 * Parses the connection list of the given widget and stores the list
342 * of NIDs.
344 * Returns the number of connections, or a negative error code.
346 int snd_hda_get_conn_list(struct hda_codec *codec, hda_nid_t nid,
347 const hda_nid_t **listp)
349 struct snd_array *array = &codec->conn_lists;
350 int len, err;
351 hda_nid_t list[HDA_MAX_CONNECTIONS];
352 hda_nid_t *p;
353 bool added = false;
355 again:
356 /* if the connection-list is already cached, read it */
357 p = lookup_conn_list(array, nid);
358 if (p) {
359 if (listp)
360 *listp = p + 2;
361 return p[1];
363 if (snd_BUG_ON(added))
364 return -EINVAL;
366 /* read the connection and add to the cache */
367 len = snd_hda_get_raw_connections(codec, nid, list, HDA_MAX_CONNECTIONS);
368 if (len < 0)
369 return len;
370 err = snd_hda_override_conn_list(codec, nid, len, list);
371 if (err < 0)
372 return err;
373 added = true;
374 goto again;
376 EXPORT_SYMBOL_HDA(snd_hda_get_conn_list);
379 * snd_hda_get_connections - copy connection list
380 * @codec: the HDA codec
381 * @nid: NID to parse
382 * @conn_list: connection list array
383 * @max_conns: max. number of connections to store
385 * Parses the connection list of the given widget and stores the list
386 * of NIDs.
388 * Returns the number of connections, or a negative error code.
390 int snd_hda_get_connections(struct hda_codec *codec, hda_nid_t nid,
391 hda_nid_t *conn_list, int max_conns)
393 const hda_nid_t *list;
394 int len = snd_hda_get_conn_list(codec, nid, &list);
396 if (len <= 0)
397 return len;
398 if (len > max_conns) {
399 snd_printk(KERN_ERR "hda_codec: "
400 "Too many connections %d for NID 0x%x\n",
401 len, nid);
402 return -EINVAL;
404 memcpy(conn_list, list, len * sizeof(hda_nid_t));
405 return len;
407 EXPORT_SYMBOL_HDA(snd_hda_get_connections);
410 * snd_hda_get_raw_connections - copy connection list without cache
411 * @codec: the HDA codec
412 * @nid: NID to parse
413 * @conn_list: connection list array
414 * @max_conns: max. number of connections to store
416 * Like snd_hda_get_connections(), copy the connection list but without
417 * checking through the connection-list cache.
418 * Currently called only from hda_proc.c, so not exported.
420 int snd_hda_get_raw_connections(struct hda_codec *codec, hda_nid_t nid,
421 hda_nid_t *conn_list, int max_conns)
423 unsigned int parm;
424 int i, conn_len, conns;
425 unsigned int shift, num_elems, mask;
426 unsigned int wcaps;
427 hda_nid_t prev_nid;
429 if (snd_BUG_ON(!conn_list || max_conns <= 0))
430 return -EINVAL;
432 wcaps = get_wcaps(codec, nid);
433 if (!(wcaps & AC_WCAP_CONN_LIST) &&
434 get_wcaps_type(wcaps) != AC_WID_VOL_KNB)
435 return 0;
437 parm = snd_hda_param_read(codec, nid, AC_PAR_CONNLIST_LEN);
438 if (parm & AC_CLIST_LONG) {
439 /* long form */
440 shift = 16;
441 num_elems = 2;
442 } else {
443 /* short form */
444 shift = 8;
445 num_elems = 4;
447 conn_len = parm & AC_CLIST_LENGTH;
448 mask = (1 << (shift-1)) - 1;
450 if (!conn_len)
451 return 0; /* no connection */
453 if (conn_len == 1) {
454 /* single connection */
455 parm = snd_hda_codec_read(codec, nid, 0,
456 AC_VERB_GET_CONNECT_LIST, 0);
457 if (parm == -1 && codec->bus->rirb_error)
458 return -EIO;
459 conn_list[0] = parm & mask;
460 return 1;
463 /* multi connection */
464 conns = 0;
465 prev_nid = 0;
466 for (i = 0; i < conn_len; i++) {
467 int range_val;
468 hda_nid_t val, n;
470 if (i % num_elems == 0) {
471 parm = snd_hda_codec_read(codec, nid, 0,
472 AC_VERB_GET_CONNECT_LIST, i);
473 if (parm == -1 && codec->bus->rirb_error)
474 return -EIO;
476 range_val = !!(parm & (1 << (shift-1))); /* ranges */
477 val = parm & mask;
478 if (val == 0) {
479 snd_printk(KERN_WARNING "hda_codec: "
480 "invalid CONNECT_LIST verb %x[%i]:%x\n",
481 nid, i, parm);
482 return 0;
484 parm >>= shift;
485 if (range_val) {
486 /* ranges between the previous and this one */
487 if (!prev_nid || prev_nid >= val) {
488 snd_printk(KERN_WARNING "hda_codec: "
489 "invalid dep_range_val %x:%x\n",
490 prev_nid, val);
491 continue;
493 for (n = prev_nid + 1; n <= val; n++) {
494 if (conns >= max_conns) {
495 snd_printk(KERN_ERR "hda_codec: "
496 "Too many connections %d for NID 0x%x\n",
497 conns, nid);
498 return -EINVAL;
500 conn_list[conns++] = n;
502 } else {
503 if (conns >= max_conns) {
504 snd_printk(KERN_ERR "hda_codec: "
505 "Too many connections %d for NID 0x%x\n",
506 conns, nid);
507 return -EINVAL;
509 conn_list[conns++] = val;
511 prev_nid = val;
513 return conns;
516 static bool add_conn_list(struct snd_array *array, hda_nid_t nid)
518 hda_nid_t *p = snd_array_new(array);
519 if (!p)
520 return false;
521 *p = nid;
522 return true;
526 * snd_hda_override_conn_list - add/modify the connection-list to cache
527 * @codec: the HDA codec
528 * @nid: NID to parse
529 * @len: number of connection list entries
530 * @list: the list of connection entries
532 * Add or modify the given connection-list to the cache. If the corresponding
533 * cache already exists, invalidate it and append a new one.
535 * Returns zero or a negative error code.
537 int snd_hda_override_conn_list(struct hda_codec *codec, hda_nid_t nid, int len,
538 const hda_nid_t *list)
540 struct snd_array *array = &codec->conn_lists;
541 hda_nid_t *p;
542 int i, old_used;
544 p = lookup_conn_list(array, nid);
545 if (p)
546 *p = -1; /* invalidate the old entry */
548 old_used = array->used;
549 if (!add_conn_list(array, nid) || !add_conn_list(array, len))
550 goto error_add;
551 for (i = 0; i < len; i++)
552 if (!add_conn_list(array, list[i]))
553 goto error_add;
554 return 0;
556 error_add:
557 array->used = old_used;
558 return -ENOMEM;
560 EXPORT_SYMBOL_HDA(snd_hda_override_conn_list);
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
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.
573 int snd_hda_get_conn_index(struct hda_codec *codec, hda_nid_t mux,
574 hda_nid_t nid, int recursive)
576 hda_nid_t conn[HDA_MAX_NUM_INPUTS];
577 int i, nums;
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;
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;
597 return -1;
599 EXPORT_SYMBOL_HDA(snd_hda_get_conn_index);
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)
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.
611 * Returns 0 if successful, or a negative error code.
613 int snd_hda_queue_unsol_event(struct hda_bus *bus, u32 res, u32 res_ex)
615 struct hda_bus_unsolicited *unsol;
616 unsigned int wp;
618 trace_hda_unsol_event(bus, res, res_ex);
619 unsol = bus->unsol;
620 if (!unsol)
621 return 0;
623 wp = (unsol->wp + 1) % HDA_UNSOL_QUEUE_SIZE;
624 unsol->wp = wp;
626 wp <<= 1;
627 unsol->queue[wp] = res;
628 unsol->queue[wp + 1] = res_ex;
630 queue_work(bus->workq, &unsol->work);
632 return 0;
634 EXPORT_SYMBOL_HDA(snd_hda_queue_unsol_event);
637 * process queued unsolicited events
639 static void process_unsol_events(struct work_struct *work)
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;
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);
662 * initialize unsolicited queue
664 static int init_unsol_queue(struct hda_bus *bus)
666 struct hda_bus_unsolicited *unsol;
668 if (bus->unsol) /* already initialized */
669 return 0;
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;
677 INIT_WORK(&unsol->work, process_unsol_events);
678 unsol->bus = bus;
679 bus->unsol = unsol;
680 return 0;
684 * destructor
686 static void snd_hda_codec_free(struct hda_codec *codec);
688 static int snd_hda_bus_free(struct hda_bus *bus)
690 struct hda_codec *codec, *n;
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);
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;
709 static int snd_hda_bus_dev_free(struct snd_device *device)
711 struct hda_bus *bus = device->device_data;
712 bus->shutdown = 1;
713 return snd_hda_bus_free(bus);
716 #ifdef CONFIG_SND_HDA_HWDEP
717 static int snd_hda_bus_dev_register(struct snd_device *device)
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);
725 return 0;
727 #else
728 #define snd_hda_bus_dev_register NULL
729 #endif
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
737 * Returns 0 if successful, or a negative error code.
739 int /*__devinit*/ snd_hda_bus_new(struct snd_card *card,
740 const struct hda_bus_template *temp,
741 struct hda_bus **busp)
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,
750 if (snd_BUG_ON(!temp))
751 return -EINVAL;
752 if (snd_BUG_ON(!temp->ops.command || !temp->ops.get_response))
753 return -EINVAL;
755 if (busp)
756 *busp = NULL;
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;
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;
771 mutex_init(&bus->cmd_mutex);
772 mutex_init(&bus->prepare_mutex);
773 INIT_LIST_HEAD(&bus->codec_list);
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;
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;
790 if (busp)
791 *busp = bus;
792 return 0;
794 EXPORT_SYMBOL_HDA(snd_hda_bus_new);
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
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
810 * find a matching codec preset
812 static const struct hda_codec_preset *
813 find_codec_preset(struct hda_codec *codec)
815 struct hda_codec_preset_list *tbl;
816 const struct hda_codec_preset *preset;
817 int mod_requested = 0;
819 if (is_generic_config(codec))
820 return NULL; /* use the generic parser */
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;
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;
845 module_put(tbl->owner);
847 mutex_unlock(&preset_mutex);
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;
861 return NULL;
865 * get_codec_name - store the codec name
867 static int get_codec_name(struct hda_codec *codec)
869 const struct hda_vendor_id *c;
870 const char *vendor = NULL;
871 u16 vendor_id = codec->vendor_id >> 16;
872 char tmp[16];
874 if (codec->vendor_name)
875 goto get_chip_name;
877 for (c = hda_vendor_ids; c->id; c++) {
878 if (c->id == vendor_id) {
879 vendor = c->name;
880 break;
883 if (!vendor) {
884 sprintf(tmp, "Generic %04x", vendor_id);
885 vendor = tmp;
887 codec->vendor_name = kstrdup(vendor, GFP_KERNEL);
888 if (!codec->vendor_name)
889 return -ENOMEM;
891 get_chip_name:
892 if (codec->chip_name)
893 return 0;
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);
901 if (!codec->chip_name)
902 return -ENOMEM;
903 return 0;
907 * look for an AFG and MFG nodes
909 static void /*__devinit*/ setup_fg_nodes(struct hda_codec *codec)
911 int i, total_nodes, function_id;
912 hda_nid_t nid;
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;
936 * read widget caps for each widget and store in cache
938 static int read_widget_caps(struct hda_codec *codec, hda_nid_t fg_node)
940 int i;
941 hda_nid_t nid;
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;
955 /* read all pin default configurations and save codec->init_pins */
956 static int read_pin_defaults(struct hda_codec *codec)
958 int i;
959 hda_nid_t nid = codec->start_nid;
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,
977 return 0;
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)
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;
991 return NULL;
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)
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;
1007 /* set the current pin config value for the given NID.
1008 * the value is cached, and read via snd_hda_codec_get_pincfg()
1010 int snd_hda_add_pincfg(struct hda_codec *codec, struct snd_array *list,
1011 hda_nid_t nid, unsigned int cfg)
1013 struct hda_pincfg *pin;
1014 unsigned int oldcfg;
1016 if (get_wcaps_type(get_wcaps(codec, nid)) != AC_WID_PIN)
1017 return -EINVAL;
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;
1027 pin->cfg = cfg;
1029 /* change only when needed; e.g. if the pincfg is already present
1030 * in user_pins[], don't write it
1032 cfg = snd_hda_codec_get_pincfg(codec, nid);
1033 if (oldcfg != cfg)
1034 set_pincfg(codec, nid, cfg);
1035 return 0;
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
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.
1048 int snd_hda_codec_set_pincfg(struct hda_codec *codec,
1049 hda_nid_t nid, unsigned int cfg)
1051 return snd_hda_add_pincfg(codec, &codec->driver_pins, nid, cfg);
1053 EXPORT_SYMBOL_HDA(snd_hda_codec_set_pincfg);
1056 * snd_hda_codec_get_pincfg - Obtain a pin-default configuration
1057 * @codec: the HDA codec
1058 * @nid: NID to get the pin config
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.
1064 unsigned int snd_hda_codec_get_pincfg(struct hda_codec *codec, hda_nid_t nid)
1066 struct hda_pincfg *pin;
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;
1081 EXPORT_SYMBOL_HDA(snd_hda_codec_get_pincfg);
1083 /* restore all current pin configs */
1084 static void restore_pincfgs(struct hda_codec *codec)
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));
1095 * snd_hda_shutup_pins - Shut up all pins
1096 * @codec: the HDA codec
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.
1101 void snd_hda_shutup_pins(struct hda_codec *codec)
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
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);
1115 codec->pins_shutup = 1;
1117 EXPORT_SYMBOL_HDA(snd_hda_shutup_pins);
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)
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);
1134 codec->pins_shutup = 0;
1136 #endif
1138 static void init_hda_cache(struct hda_cache_rec *cache,
1139 unsigned int record_size);
1140 static void free_hda_cache(struct hda_cache_rec *cache);
1142 /* restore the initial pin cfgs and release all pincfg lists */
1143 static void restore_init_pincfgs(struct hda_codec *codec)
1145 /* first free driver_pins and user_pins, then call restore_pincfg
1146 * so that only the values in init_pins are restored
1148 snd_array_free(&codec->driver_pins);
1149 #ifdef CONFIG_SND_HDA_HWDEP
1150 snd_array_free(&codec->user_pins);
1151 #endif
1152 restore_pincfgs(codec);
1153 snd_array_free(&codec->init_pins);
1157 * audio-converter setup caches
1159 struct hda_cvt_setup {
1160 hda_nid_t nid;
1161 u8 stream_tag;
1162 u8 channel_id;
1163 u16 format_id;
1164 unsigned char active; /* cvt is currently used */
1165 unsigned char dirty; /* setups should be cleared */
1168 /* get or create a cache entry for the given audio converter NID */
1169 static struct hda_cvt_setup *
1170 get_hda_cvt_setup(struct hda_codec *codec, hda_nid_t nid)
1172 struct hda_cvt_setup *p;
1173 int i;
1175 for (i = 0; i < codec->cvt_setups.used; i++) {
1176 p = snd_array_elem(&codec->cvt_setups, i);
1177 if (p->nid == nid)
1178 return p;
1180 p = snd_array_new(&codec->cvt_setups);
1181 if (p)
1182 p->nid = nid;
1183 return p;
1187 * codec destructor
1189 static void snd_hda_codec_free(struct hda_codec *codec)
1191 if (!codec)
1192 return;
1193 restore_init_pincfgs(codec);
1194 #ifdef CONFIG_SND_HDA_POWER_SAVE
1195 cancel_delayed_work(&codec->power_work);
1196 flush_workqueue(codec->bus->workq);
1197 #endif
1198 list_del(&codec->list);
1199 snd_array_free(&codec->mixers);
1200 snd_array_free(&codec->nids);
1201 snd_array_free(&codec->conn_lists);
1202 snd_array_free(&codec->spdif_out);
1203 codec->bus->caddr_tbl[codec->addr] = NULL;
1204 if (codec->patch_ops.free)
1205 codec->patch_ops.free(codec);
1206 module_put(codec->owner);
1207 free_hda_cache(&codec->amp_cache);
1208 free_hda_cache(&codec->cmd_cache);
1209 kfree(codec->vendor_name);
1210 kfree(codec->chip_name);
1211 kfree(codec->modelname);
1212 kfree(codec->wcaps);
1213 kfree(codec);
1216 static void hda_set_power_state(struct hda_codec *codec, hda_nid_t fg,
1217 unsigned int power_state);
1220 * snd_hda_codec_new - create a HDA codec
1221 * @bus: the bus to assign
1222 * @codec_addr: the codec address
1223 * @codecp: the pointer to store the generated codec
1225 * Returns 0 if successful, or a negative error code.
1227 int /*__devinit*/ snd_hda_codec_new(struct hda_bus *bus,
1228 unsigned int codec_addr,
1229 struct hda_codec **codecp)
1231 struct hda_codec *codec;
1232 char component[31];
1233 int err;
1235 if (snd_BUG_ON(!bus))
1236 return -EINVAL;
1237 if (snd_BUG_ON(codec_addr > HDA_MAX_CODEC_ADDRESS))
1238 return -EINVAL;
1240 if (bus->caddr_tbl[codec_addr]) {
1241 snd_printk(KERN_ERR "hda_codec: "
1242 "address 0x%x is already occupied\n", codec_addr);
1243 return -EBUSY;
1246 codec = kzalloc(sizeof(*codec), GFP_KERNEL);
1247 if (codec == NULL) {
1248 snd_printk(KERN_ERR "can't allocate struct hda_codec\n");
1249 return -ENOMEM;
1252 codec->bus = bus;
1253 codec->addr = codec_addr;
1254 mutex_init(&codec->spdif_mutex);
1255 mutex_init(&codec->control_mutex);
1256 init_hda_cache(&codec->amp_cache, sizeof(struct hda_amp_info));
1257 init_hda_cache(&codec->cmd_cache, sizeof(struct hda_cache_head));
1258 snd_array_init(&codec->mixers, sizeof(struct hda_nid_item), 32);
1259 snd_array_init(&codec->nids, sizeof(struct hda_nid_item), 32);
1260 snd_array_init(&codec->init_pins, sizeof(struct hda_pincfg), 16);
1261 snd_array_init(&codec->driver_pins, sizeof(struct hda_pincfg), 16);
1262 snd_array_init(&codec->cvt_setups, sizeof(struct hda_cvt_setup), 8);
1263 snd_array_init(&codec->conn_lists, sizeof(hda_nid_t), 64);
1264 snd_array_init(&codec->spdif_out, sizeof(struct hda_spdif_out), 16);
1265 if (codec->bus->modelname) {
1266 codec->modelname = kstrdup(codec->bus->modelname, GFP_KERNEL);
1267 if (!codec->modelname) {
1268 snd_hda_codec_free(codec);
1269 return -ENODEV;
1273 #ifdef CONFIG_SND_HDA_POWER_SAVE
1274 INIT_DELAYED_WORK(&codec->power_work, hda_power_work);
1275 /* snd_hda_codec_new() marks the codec as power-up, and leave it as is.
1276 * the caller has to power down appropriatley after initialization
1277 * phase.
1279 hda_keep_power_on(codec);
1280 #endif
1282 list_add_tail(&codec->list, &bus->codec_list);
1283 bus->caddr_tbl[codec_addr] = codec;
1285 codec->vendor_id = snd_hda_param_read(codec, AC_NODE_ROOT,
1286 AC_PAR_VENDOR_ID);
1287 if (codec->vendor_id == -1)
1288 /* read again, hopefully the access method was corrected
1289 * in the last read...
1291 codec->vendor_id = snd_hda_param_read(codec, AC_NODE_ROOT,
1292 AC_PAR_VENDOR_ID);
1293 codec->subsystem_id = snd_hda_param_read(codec, AC_NODE_ROOT,
1294 AC_PAR_SUBSYSTEM_ID);
1295 codec->revision_id = snd_hda_param_read(codec, AC_NODE_ROOT,
1296 AC_PAR_REV_ID);
1298 setup_fg_nodes(codec);
1299 if (!codec->afg && !codec->mfg) {
1300 snd_printdd("hda_codec: no AFG or MFG node found\n");
1301 err = -ENODEV;
1302 goto error;
1305 err = read_widget_caps(codec, codec->afg ? codec->afg : codec->mfg);
1306 if (err < 0) {
1307 snd_printk(KERN_ERR "hda_codec: cannot malloc\n");
1308 goto error;
1310 err = read_pin_defaults(codec);
1311 if (err < 0)
1312 goto error;
1314 if (!codec->subsystem_id) {
1315 hda_nid_t nid = codec->afg ? codec->afg : codec->mfg;
1316 codec->subsystem_id =
1317 snd_hda_codec_read(codec, nid, 0,
1318 AC_VERB_GET_SUBSYSTEM_ID, 0);
1321 /* power-up all before initialization */
1322 hda_set_power_state(codec,
1323 codec->afg ? codec->afg : codec->mfg,
1324 AC_PWRST_D0);
1326 snd_hda_codec_proc_new(codec);
1328 snd_hda_create_hwdep(codec);
1330 sprintf(component, "HDA:%08x,%08x,%08x", codec->vendor_id,
1331 codec->subsystem_id, codec->revision_id);
1332 snd_component_add(codec->bus->card, component);
1334 if (codecp)
1335 *codecp = codec;
1336 return 0;
1338 error:
1339 snd_hda_codec_free(codec);
1340 return err;
1342 EXPORT_SYMBOL_HDA(snd_hda_codec_new);
1345 * snd_hda_codec_configure - (Re-)configure the HD-audio codec
1346 * @codec: the HDA codec
1348 * Start parsing of the given codec tree and (re-)initialize the whole
1349 * patch instance.
1351 * Returns 0 if successful or a negative error code.
1353 int snd_hda_codec_configure(struct hda_codec *codec)
1355 int err;
1357 codec->preset = find_codec_preset(codec);
1358 if (!codec->vendor_name || !codec->chip_name) {
1359 err = get_codec_name(codec);
1360 if (err < 0)
1361 return err;
1364 if (is_generic_config(codec)) {
1365 err = snd_hda_parse_generic_codec(codec);
1366 goto patched;
1368 if (codec->preset && codec->preset->patch) {
1369 err = codec->preset->patch(codec);
1370 goto patched;
1373 /* call the default parser */
1374 err = snd_hda_parse_generic_codec(codec);
1375 if (err < 0)
1376 printk(KERN_ERR "hda-codec: No codec parser is available\n");
1378 patched:
1379 if (!err && codec->patch_ops.unsol_event)
1380 err = init_unsol_queue(codec->bus);
1381 /* audio codec should override the mixer name */
1382 if (!err && (codec->afg || !*codec->bus->card->mixername))
1383 snprintf(codec->bus->card->mixername,
1384 sizeof(codec->bus->card->mixername),
1385 "%s %s", codec->vendor_name, codec->chip_name);
1386 return err;
1388 EXPORT_SYMBOL_HDA(snd_hda_codec_configure);
1391 * snd_hda_codec_setup_stream - set up the codec for streaming
1392 * @codec: the CODEC to set up
1393 * @nid: the NID to set up
1394 * @stream_tag: stream tag to pass, it's between 0x1 and 0xf.
1395 * @channel_id: channel id to pass, zero based.
1396 * @format: stream format.
1398 void snd_hda_codec_setup_stream(struct hda_codec *codec, hda_nid_t nid,
1399 u32 stream_tag,
1400 int channel_id, int format)
1402 struct hda_codec *c;
1403 struct hda_cvt_setup *p;
1404 unsigned int oldval, newval;
1405 int type;
1406 int i;
1408 if (!nid)
1409 return;
1411 snd_printdd("hda_codec_setup_stream: "
1412 "NID=0x%x, stream=0x%x, channel=%d, format=0x%x\n",
1413 nid, stream_tag, channel_id, format);
1414 p = get_hda_cvt_setup(codec, nid);
1415 if (!p)
1416 return;
1417 /* update the stream-id if changed */
1418 if (p->stream_tag != stream_tag || p->channel_id != channel_id) {
1419 oldval = snd_hda_codec_read(codec, nid, 0, AC_VERB_GET_CONV, 0);
1420 newval = (stream_tag << 4) | channel_id;
1421 if (oldval != newval)
1422 snd_hda_codec_write(codec, nid, 0,
1423 AC_VERB_SET_CHANNEL_STREAMID,
1424 newval);
1425 p->stream_tag = stream_tag;
1426 p->channel_id = channel_id;
1428 /* update the format-id if changed */
1429 if (p->format_id != format) {
1430 oldval = snd_hda_codec_read(codec, nid, 0,
1431 AC_VERB_GET_STREAM_FORMAT, 0);
1432 if (oldval != format) {
1433 msleep(1);
1434 snd_hda_codec_write(codec, nid, 0,
1435 AC_VERB_SET_STREAM_FORMAT,
1436 format);
1438 p->format_id = format;
1440 p->active = 1;
1441 p->dirty = 0;
1443 /* make other inactive cvts with the same stream-tag dirty */
1444 type = get_wcaps_type(get_wcaps(codec, nid));
1445 list_for_each_entry(c, &codec->bus->codec_list, list) {
1446 for (i = 0; i < c->cvt_setups.used; i++) {
1447 p = snd_array_elem(&c->cvt_setups, i);
1448 if (!p->active && p->stream_tag == stream_tag &&
1449 get_wcaps_type(get_wcaps(codec, p->nid)) == type)
1450 p->dirty = 1;
1454 EXPORT_SYMBOL_HDA(snd_hda_codec_setup_stream);
1456 static void really_cleanup_stream(struct hda_codec *codec,
1457 struct hda_cvt_setup *q);
1460 * __snd_hda_codec_cleanup_stream - clean up the codec for closing
1461 * @codec: the CODEC to clean up
1462 * @nid: the NID to clean up
1463 * @do_now: really clean up the stream instead of clearing the active flag
1465 void __snd_hda_codec_cleanup_stream(struct hda_codec *codec, hda_nid_t nid,
1466 int do_now)
1468 struct hda_cvt_setup *p;
1470 if (!nid)
1471 return;
1473 if (codec->no_sticky_stream)
1474 do_now = 1;
1476 snd_printdd("hda_codec_cleanup_stream: NID=0x%x\n", nid);
1477 p = get_hda_cvt_setup(codec, nid);
1478 if (p) {
1479 /* here we just clear the active flag when do_now isn't set;
1480 * actual clean-ups will be done later in
1481 * purify_inactive_streams() called from snd_hda_codec_prpapre()
1483 if (do_now)
1484 really_cleanup_stream(codec, p);
1485 else
1486 p->active = 0;
1489 EXPORT_SYMBOL_HDA(__snd_hda_codec_cleanup_stream);
1491 static void really_cleanup_stream(struct hda_codec *codec,
1492 struct hda_cvt_setup *q)
1494 hda_nid_t nid = q->nid;
1495 if (q->stream_tag || q->channel_id)
1496 snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_CHANNEL_STREAMID, 0);
1497 if (q->format_id)
1498 snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_STREAM_FORMAT, 0
1500 memset(q, 0, sizeof(*q));
1501 q->nid = nid;
1504 /* clean up the all conflicting obsolete streams */
1505 static void purify_inactive_streams(struct hda_codec *codec)
1507 struct hda_codec *c;
1508 int i;
1510 list_for_each_entry(c, &codec->bus->codec_list, list) {
1511 for (i = 0; i < c->cvt_setups.used; i++) {
1512 struct hda_cvt_setup *p;
1513 p = snd_array_elem(&c->cvt_setups, i);
1514 if (p->dirty)
1515 really_cleanup_stream(c, p);
1520 #ifdef CONFIG_PM
1521 /* clean up all streams; called from suspend */
1522 static void hda_cleanup_all_streams(struct hda_codec *codec)
1524 int i;
1526 for (i = 0; i < codec->cvt_setups.used; i++) {
1527 struct hda_cvt_setup *p = snd_array_elem(&codec->cvt_setups, i);
1528 if (p->stream_tag)
1529 really_cleanup_stream(codec, p);
1532 #endif
1535 * amp access functions
1538 /* FIXME: more better hash key? */
1539 #define HDA_HASH_KEY(nid, dir, idx) (u32)((nid) + ((idx) << 16) + ((dir) << 24))
1540 #define HDA_HASH_PINCAP_KEY(nid) (u32)((nid) + (0x02 << 24))
1541 #define HDA_HASH_PARPCM_KEY(nid) (u32)((nid) + (0x03 << 24))
1542 #define HDA_HASH_PARSTR_KEY(nid) (u32)((nid) + (0x04 << 24))
1543 #define INFO_AMP_CAPS (1<<0)
1544 #define INFO_AMP_VOL(ch) (1 << (1 + (ch)))
1546 /* initialize the hash table */
1547 static void /*__devinit*/ init_hda_cache(struct hda_cache_rec *cache,
1548 unsigned int record_size)
1550 memset(cache, 0, sizeof(*cache));
1551 memset(cache->hash, 0xff, sizeof(cache->hash));
1552 snd_array_init(&cache->buf, record_size, 64);
1555 static void free_hda_cache(struct hda_cache_rec *cache)
1557 snd_array_free(&cache->buf);
1560 /* query the hash. allocate an entry if not found. */
1561 static struct hda_cache_head *get_hash(struct hda_cache_rec *cache, u32 key)
1563 u16 idx = key % (u16)ARRAY_SIZE(cache->hash);
1564 u16 cur = cache->hash[idx];
1565 struct hda_cache_head *info;
1567 while (cur != 0xffff) {
1568 info = snd_array_elem(&cache->buf, cur);
1569 if (info->key == key)
1570 return info;
1571 cur = info->next;
1573 return NULL;
1576 /* query the hash. allocate an entry if not found. */
1577 static struct hda_cache_head *get_alloc_hash(struct hda_cache_rec *cache,
1578 u32 key)
1580 struct hda_cache_head *info = get_hash(cache, key);
1581 if (!info) {
1582 u16 idx, cur;
1583 /* add a new hash entry */
1584 info = snd_array_new(&cache->buf);
1585 if (!info)
1586 return NULL;
1587 cur = snd_array_index(&cache->buf, info);
1588 info->key = key;
1589 info->val = 0;
1590 idx = key % (u16)ARRAY_SIZE(cache->hash);
1591 info->next = cache->hash[idx];
1592 cache->hash[idx] = cur;
1594 return info;
1597 /* query and allocate an amp hash entry */
1598 static inline struct hda_amp_info *
1599 get_alloc_amp_hash(struct hda_codec *codec, u32 key)
1601 return (struct hda_amp_info *)get_alloc_hash(&codec->amp_cache, key);
1605 * query_amp_caps - query AMP capabilities
1606 * @codec: the HD-auio codec
1607 * @nid: the NID to query
1608 * @direction: either #HDA_INPUT or #HDA_OUTPUT
1610 * Query AMP capabilities for the given widget and direction.
1611 * Returns the obtained capability bits.
1613 * When cap bits have been already read, this doesn't read again but
1614 * returns the cached value.
1616 u32 query_amp_caps(struct hda_codec *codec, hda_nid_t nid, int direction)
1618 struct hda_amp_info *info;
1620 info = get_alloc_amp_hash(codec, HDA_HASH_KEY(nid, direction, 0));
1621 if (!info)
1622 return 0;
1623 if (!(info->head.val & INFO_AMP_CAPS)) {
1624 if (!(get_wcaps(codec, nid) & AC_WCAP_AMP_OVRD))
1625 nid = codec->afg;
1626 info->amp_caps = snd_hda_param_read(codec, nid,
1627 direction == HDA_OUTPUT ?
1628 AC_PAR_AMP_OUT_CAP :
1629 AC_PAR_AMP_IN_CAP);
1630 if (info->amp_caps)
1631 info->head.val |= INFO_AMP_CAPS;
1633 return info->amp_caps;
1635 EXPORT_SYMBOL_HDA(query_amp_caps);
1638 * snd_hda_override_amp_caps - Override the AMP capabilities
1639 * @codec: the CODEC to clean up
1640 * @nid: the NID to clean up
1641 * @direction: either #HDA_INPUT or #HDA_OUTPUT
1642 * @caps: the capability bits to set
1644 * Override the cached AMP caps bits value by the given one.
1645 * This function is useful if the driver needs to adjust the AMP ranges,
1646 * e.g. limit to 0dB, etc.
1648 * Returns zero if successful or a negative error code.
1650 int snd_hda_override_amp_caps(struct hda_codec *codec, hda_nid_t nid, int dir,
1651 unsigned int caps)
1653 struct hda_amp_info *info;
1655 info = get_alloc_amp_hash(codec, HDA_HASH_KEY(nid, dir, 0));
1656 if (!info)
1657 return -EINVAL;
1658 info->amp_caps = caps;
1659 info->head.val |= INFO_AMP_CAPS;
1660 return 0;
1662 EXPORT_SYMBOL_HDA(snd_hda_override_amp_caps);
1664 static unsigned int
1665 query_caps_hash(struct hda_codec *codec, hda_nid_t nid, u32 key,
1666 unsigned int (*func)(struct hda_codec *, hda_nid_t))
1668 struct hda_amp_info *info;
1670 info = get_alloc_amp_hash(codec, key);
1671 if (!info)
1672 return 0;
1673 if (!info->head.val) {
1674 info->head.val |= INFO_AMP_CAPS;
1675 info->amp_caps = func(codec, nid);
1677 return info->amp_caps;
1680 static unsigned int read_pin_cap(struct hda_codec *codec, hda_nid_t nid)
1682 return snd_hda_param_read(codec, nid, AC_PAR_PIN_CAP);
1686 * snd_hda_query_pin_caps - Query PIN capabilities
1687 * @codec: the HD-auio codec
1688 * @nid: the NID to query
1690 * Query PIN capabilities for the given widget.
1691 * Returns the obtained capability bits.
1693 * When cap bits have been already read, this doesn't read again but
1694 * returns the cached value.
1696 u32 snd_hda_query_pin_caps(struct hda_codec *codec, hda_nid_t nid)
1698 return query_caps_hash(codec, nid, HDA_HASH_PINCAP_KEY(nid),
1699 read_pin_cap);
1701 EXPORT_SYMBOL_HDA(snd_hda_query_pin_caps);
1704 * snd_hda_override_pin_caps - Override the pin capabilities
1705 * @codec: the CODEC
1706 * @nid: the NID to override
1707 * @caps: the capability bits to set
1709 * Override the cached PIN capabilitiy bits value by the given one.
1711 * Returns zero if successful or a negative error code.
1713 int snd_hda_override_pin_caps(struct hda_codec *codec, hda_nid_t nid,
1714 unsigned int caps)
1716 struct hda_amp_info *info;
1717 info = get_alloc_amp_hash(codec, HDA_HASH_PINCAP_KEY(nid));
1718 if (!info)
1719 return -ENOMEM;
1720 info->amp_caps = caps;
1721 info->head.val |= INFO_AMP_CAPS;
1722 return 0;
1724 EXPORT_SYMBOL_HDA(snd_hda_override_pin_caps);
1727 * snd_hda_pin_sense - execute pin sense measurement
1728 * @codec: the CODEC to sense
1729 * @nid: the pin NID to sense
1731 * Execute necessary pin sense measurement and return its Presence Detect,
1732 * Impedance, ELD Valid etc. status bits.
1734 u32 snd_hda_pin_sense(struct hda_codec *codec, hda_nid_t nid)
1736 u32 pincap;
1738 if (!codec->no_trigger_sense) {
1739 pincap = snd_hda_query_pin_caps(codec, nid);
1740 if (pincap & AC_PINCAP_TRIG_REQ) /* need trigger? */
1741 snd_hda_codec_read(codec, nid, 0,
1742 AC_VERB_SET_PIN_SENSE, 0);
1744 return snd_hda_codec_read(codec, nid, 0,
1745 AC_VERB_GET_PIN_SENSE, 0);
1747 EXPORT_SYMBOL_HDA(snd_hda_pin_sense);
1750 * snd_hda_jack_detect - query pin Presence Detect status
1751 * @codec: the CODEC to sense
1752 * @nid: the pin NID to sense
1754 * Query and return the pin's Presence Detect status.
1756 int snd_hda_jack_detect(struct hda_codec *codec, hda_nid_t nid)
1758 u32 sense = snd_hda_pin_sense(codec, nid);
1759 return !!(sense & AC_PINSENSE_PRESENCE);
1761 EXPORT_SYMBOL_HDA(snd_hda_jack_detect);
1764 * read the current volume to info
1765 * if the cache exists, read the cache value.
1767 static unsigned int get_vol_mute(struct hda_codec *codec,
1768 struct hda_amp_info *info, hda_nid_t nid,
1769 int ch, int direction, int index)
1771 u32 val, parm;
1773 if (info->head.val & INFO_AMP_VOL(ch))
1774 return info->vol[ch];
1776 parm = ch ? AC_AMP_GET_RIGHT : AC_AMP_GET_LEFT;
1777 parm |= direction == HDA_OUTPUT ? AC_AMP_GET_OUTPUT : AC_AMP_GET_INPUT;
1778 parm |= index;
1779 val = snd_hda_codec_read(codec, nid, 0,
1780 AC_VERB_GET_AMP_GAIN_MUTE, parm);
1781 info->vol[ch] = val & 0xff;
1782 info->head.val |= INFO_AMP_VOL(ch);
1783 return info->vol[ch];
1787 * write the current volume in info to the h/w and update the cache
1789 static void put_vol_mute(struct hda_codec *codec, struct hda_amp_info *info,
1790 hda_nid_t nid, int ch, int direction, int index,
1791 int val)
1793 u32 parm;
1795 parm = ch ? AC_AMP_SET_RIGHT : AC_AMP_SET_LEFT;
1796 parm |= direction == HDA_OUTPUT ? AC_AMP_SET_OUTPUT : AC_AMP_SET_INPUT;
1797 parm |= index << AC_AMP_SET_INDEX_SHIFT;
1798 parm |= val;
1799 snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_AMP_GAIN_MUTE, parm);
1800 info->vol[ch] = val;
1804 * snd_hda_codec_amp_read - Read AMP value
1805 * @codec: HD-audio codec
1806 * @nid: NID to read the AMP value
1807 * @ch: channel (left=0 or right=1)
1808 * @direction: #HDA_INPUT or #HDA_OUTPUT
1809 * @index: the index value (only for input direction)
1811 * Read AMP value. The volume is between 0 to 0x7f, 0x80 = mute bit.
1813 int snd_hda_codec_amp_read(struct hda_codec *codec, hda_nid_t nid, int ch,
1814 int direction, int index)
1816 struct hda_amp_info *info;
1817 info = get_alloc_amp_hash(codec, HDA_HASH_KEY(nid, direction, index));
1818 if (!info)
1819 return 0;
1820 return get_vol_mute(codec, info, nid, ch, direction, index);
1822 EXPORT_SYMBOL_HDA(snd_hda_codec_amp_read);
1825 * snd_hda_codec_amp_update - update the AMP value
1826 * @codec: HD-audio codec
1827 * @nid: NID to read the AMP value
1828 * @ch: channel (left=0 or right=1)
1829 * @direction: #HDA_INPUT or #HDA_OUTPUT
1830 * @idx: the index value (only for input direction)
1831 * @mask: bit mask to set
1832 * @val: the bits value to set
1834 * Update the AMP value with a bit mask.
1835 * Returns 0 if the value is unchanged, 1 if changed.
1837 int snd_hda_codec_amp_update(struct hda_codec *codec, hda_nid_t nid, int ch,
1838 int direction, int idx, int mask, int val)
1840 struct hda_amp_info *info;
1842 info = get_alloc_amp_hash(codec, HDA_HASH_KEY(nid, direction, idx));
1843 if (!info)
1844 return 0;
1845 if (snd_BUG_ON(mask & ~0xff))
1846 mask &= 0xff;
1847 val &= mask;
1848 val |= get_vol_mute(codec, info, nid, ch, direction, idx) & ~mask;
1849 if (info->vol[ch] == val)
1850 return 0;
1851 put_vol_mute(codec, info, nid, ch, direction, idx, val);
1852 return 1;
1854 EXPORT_SYMBOL_HDA(snd_hda_codec_amp_update);
1857 * snd_hda_codec_amp_stereo - update the AMP stereo values
1858 * @codec: HD-audio codec
1859 * @nid: NID to read the AMP value
1860 * @direction: #HDA_INPUT or #HDA_OUTPUT
1861 * @idx: the index value (only for input direction)
1862 * @mask: bit mask to set
1863 * @val: the bits value to set
1865 * Update the AMP values like snd_hda_codec_amp_update(), but for a
1866 * stereo widget with the same mask and value.
1868 int snd_hda_codec_amp_stereo(struct hda_codec *codec, hda_nid_t nid,
1869 int direction, int idx, int mask, int val)
1871 int ch, ret = 0;
1873 if (snd_BUG_ON(mask & ~0xff))
1874 mask &= 0xff;
1875 for (ch = 0; ch < 2; ch++)
1876 ret |= snd_hda_codec_amp_update(codec, nid, ch, direction,
1877 idx, mask, val);
1878 return ret;
1880 EXPORT_SYMBOL_HDA(snd_hda_codec_amp_stereo);
1882 #ifdef CONFIG_PM
1884 * snd_hda_codec_resume_amp - Resume all AMP commands from the cache
1885 * @codec: HD-audio codec
1887 * Resume the all amp commands from the cache.
1889 void snd_hda_codec_resume_amp(struct hda_codec *codec)
1891 struct hda_amp_info *buffer = codec->amp_cache.buf.list;
1892 int i;
1894 for (i = 0; i < codec->amp_cache.buf.used; i++, buffer++) {
1895 u32 key = buffer->head.key;
1896 hda_nid_t nid;
1897 unsigned int idx, dir, ch;
1898 if (!key)
1899 continue;
1900 nid = key & 0xff;
1901 idx = (key >> 16) & 0xff;
1902 dir = (key >> 24) & 0xff;
1903 for (ch = 0; ch < 2; ch++) {
1904 if (!(buffer->head.val & INFO_AMP_VOL(ch)))
1905 continue;
1906 put_vol_mute(codec, buffer, nid, ch, dir, idx,
1907 buffer->vol[ch]);
1911 EXPORT_SYMBOL_HDA(snd_hda_codec_resume_amp);
1912 #endif /* CONFIG_PM */
1914 static u32 get_amp_max_value(struct hda_codec *codec, hda_nid_t nid, int dir,
1915 unsigned int ofs)
1917 u32 caps = query_amp_caps(codec, nid, dir);
1918 /* get num steps */
1919 caps = (caps & AC_AMPCAP_NUM_STEPS) >> AC_AMPCAP_NUM_STEPS_SHIFT;
1920 if (ofs < caps)
1921 caps -= ofs;
1922 return caps;
1926 * snd_hda_mixer_amp_volume_info - Info callback for a standard AMP mixer
1928 * The control element is supposed to have the private_value field
1929 * set up via HDA_COMPOSE_AMP_VAL*() or related macros.
1931 int snd_hda_mixer_amp_volume_info(struct snd_kcontrol *kcontrol,
1932 struct snd_ctl_elem_info *uinfo)
1934 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1935 u16 nid = get_amp_nid(kcontrol);
1936 u8 chs = get_amp_channels(kcontrol);
1937 int dir = get_amp_direction(kcontrol);
1938 unsigned int ofs = get_amp_offset(kcontrol);
1940 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
1941 uinfo->count = chs == 3 ? 2 : 1;
1942 uinfo->value.integer.min = 0;
1943 uinfo->value.integer.max = get_amp_max_value(codec, nid, dir, ofs);
1944 if (!uinfo->value.integer.max) {
1945 printk(KERN_WARNING "hda_codec: "
1946 "num_steps = 0 for NID=0x%x (ctl = %s)\n", nid,
1947 kcontrol->id.name);
1948 return -EINVAL;
1950 return 0;
1952 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_volume_info);
1955 static inline unsigned int
1956 read_amp_value(struct hda_codec *codec, hda_nid_t nid,
1957 int ch, int dir, int idx, unsigned int ofs)
1959 unsigned int val;
1960 val = snd_hda_codec_amp_read(codec, nid, ch, dir, idx);
1961 val &= HDA_AMP_VOLMASK;
1962 if (val >= ofs)
1963 val -= ofs;
1964 else
1965 val = 0;
1966 return val;
1969 static inline int
1970 update_amp_value(struct hda_codec *codec, hda_nid_t nid,
1971 int ch, int dir, int idx, unsigned int ofs,
1972 unsigned int val)
1974 unsigned int maxval;
1976 if (val > 0)
1977 val += ofs;
1978 /* ofs = 0: raw max value */
1979 maxval = get_amp_max_value(codec, nid, dir, 0);
1980 if (val > maxval)
1981 val = maxval;
1982 return snd_hda_codec_amp_update(codec, nid, ch, dir, idx,
1983 HDA_AMP_VOLMASK, val);
1987 * snd_hda_mixer_amp_volume_get - Get callback for a standard AMP mixer volume
1989 * The control element is supposed to have the private_value field
1990 * set up via HDA_COMPOSE_AMP_VAL*() or related macros.
1992 int snd_hda_mixer_amp_volume_get(struct snd_kcontrol *kcontrol,
1993 struct snd_ctl_elem_value *ucontrol)
1995 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1996 hda_nid_t nid = get_amp_nid(kcontrol);
1997 int chs = get_amp_channels(kcontrol);
1998 int dir = get_amp_direction(kcontrol);
1999 int idx = get_amp_index(kcontrol);
2000 unsigned int ofs = get_amp_offset(kcontrol);
2001 long *valp = ucontrol->value.integer.value;
2003 if (chs & 1)
2004 *valp++ = read_amp_value(codec, nid, 0, dir, idx, ofs);
2005 if (chs & 2)
2006 *valp = read_amp_value(codec, nid, 1, dir, idx, ofs);
2007 return 0;
2009 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_volume_get);
2012 * snd_hda_mixer_amp_volume_put - Put callback for a standard AMP mixer volume
2014 * The control element is supposed to have the private_value field
2015 * set up via HDA_COMPOSE_AMP_VAL*() or related macros.
2017 int snd_hda_mixer_amp_volume_put(struct snd_kcontrol *kcontrol,
2018 struct snd_ctl_elem_value *ucontrol)
2020 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2021 hda_nid_t nid = get_amp_nid(kcontrol);
2022 int chs = get_amp_channels(kcontrol);
2023 int dir = get_amp_direction(kcontrol);
2024 int idx = get_amp_index(kcontrol);
2025 unsigned int ofs = get_amp_offset(kcontrol);
2026 long *valp = ucontrol->value.integer.value;
2027 int change = 0;
2029 snd_hda_power_up(codec);
2030 if (chs & 1) {
2031 change = update_amp_value(codec, nid, 0, dir, idx, ofs, *valp);
2032 valp++;
2034 if (chs & 2)
2035 change |= update_amp_value(codec, nid, 1, dir, idx, ofs, *valp);
2036 snd_hda_power_down(codec);
2037 return change;
2039 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_volume_put);
2042 * snd_hda_mixer_amp_volume_put - TLV callback for a standard AMP mixer volume
2044 * The control element is supposed to have the private_value field
2045 * set up via HDA_COMPOSE_AMP_VAL*() or related macros.
2047 int snd_hda_mixer_amp_tlv(struct snd_kcontrol *kcontrol, int op_flag,
2048 unsigned int size, unsigned int __user *_tlv)
2050 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2051 hda_nid_t nid = get_amp_nid(kcontrol);
2052 int dir = get_amp_direction(kcontrol);
2053 unsigned int ofs = get_amp_offset(kcontrol);
2054 bool min_mute = get_amp_min_mute(kcontrol);
2055 u32 caps, val1, val2;
2057 if (size < 4 * sizeof(unsigned int))
2058 return -ENOMEM;
2059 caps = query_amp_caps(codec, nid, dir);
2060 val2 = (caps & AC_AMPCAP_STEP_SIZE) >> AC_AMPCAP_STEP_SIZE_SHIFT;
2061 val2 = (val2 + 1) * 25;
2062 val1 = -((caps & AC_AMPCAP_OFFSET) >> AC_AMPCAP_OFFSET_SHIFT);
2063 val1 += ofs;
2064 val1 = ((int)val1) * ((int)val2);
2065 if (min_mute)
2066 val2 |= TLV_DB_SCALE_MUTE;
2067 if (put_user(SNDRV_CTL_TLVT_DB_SCALE, _tlv))
2068 return -EFAULT;
2069 if (put_user(2 * sizeof(unsigned int), _tlv + 1))
2070 return -EFAULT;
2071 if (put_user(val1, _tlv + 2))
2072 return -EFAULT;
2073 if (put_user(val2, _tlv + 3))
2074 return -EFAULT;
2075 return 0;
2077 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_tlv);
2080 * snd_hda_set_vmaster_tlv - Set TLV for a virtual master control
2081 * @codec: HD-audio codec
2082 * @nid: NID of a reference widget
2083 * @dir: #HDA_INPUT or #HDA_OUTPUT
2084 * @tlv: TLV data to be stored, at least 4 elements
2086 * Set (static) TLV data for a virtual master volume using the AMP caps
2087 * obtained from the reference NID.
2088 * The volume range is recalculated as if the max volume is 0dB.
2090 void snd_hda_set_vmaster_tlv(struct hda_codec *codec, hda_nid_t nid, int dir,
2091 unsigned int *tlv)
2093 u32 caps;
2094 int nums, step;
2096 caps = query_amp_caps(codec, nid, dir);
2097 nums = (caps & AC_AMPCAP_NUM_STEPS) >> AC_AMPCAP_NUM_STEPS_SHIFT;
2098 step = (caps & AC_AMPCAP_STEP_SIZE) >> AC_AMPCAP_STEP_SIZE_SHIFT;
2099 step = (step + 1) * 25;
2100 tlv[0] = SNDRV_CTL_TLVT_DB_SCALE;
2101 tlv[1] = 2 * sizeof(unsigned int);
2102 tlv[2] = -nums * step;
2103 tlv[3] = step;
2105 EXPORT_SYMBOL_HDA(snd_hda_set_vmaster_tlv);
2107 /* find a mixer control element with the given name */
2108 static struct snd_kcontrol *
2109 _snd_hda_find_mixer_ctl(struct hda_codec *codec,
2110 const char *name, int idx)
2112 struct snd_ctl_elem_id id;
2113 memset(&id, 0, sizeof(id));
2114 id.iface = SNDRV_CTL_ELEM_IFACE_MIXER;
2115 id.index = idx;
2116 if (snd_BUG_ON(strlen(name) >= sizeof(id.name)))
2117 return NULL;
2118 strcpy(id.name, name);
2119 return snd_ctl_find_id(codec->bus->card, &id);
2123 * snd_hda_find_mixer_ctl - Find a mixer control element with the given name
2124 * @codec: HD-audio codec
2125 * @name: ctl id name string
2127 * Get the control element with the given id string and IFACE_MIXER.
2129 struct snd_kcontrol *snd_hda_find_mixer_ctl(struct hda_codec *codec,
2130 const char *name)
2132 return _snd_hda_find_mixer_ctl(codec, name, 0);
2134 EXPORT_SYMBOL_HDA(snd_hda_find_mixer_ctl);
2136 static int find_empty_mixer_ctl_idx(struct hda_codec *codec, const char *name)
2138 int idx;
2139 for (idx = 0; idx < 16; idx++) { /* 16 ctlrs should be large enough */
2140 if (!_snd_hda_find_mixer_ctl(codec, name, idx))
2141 return idx;
2143 return -EBUSY;
2147 * snd_hda_ctl_add - Add a control element and assign to the codec
2148 * @codec: HD-audio codec
2149 * @nid: corresponding NID (optional)
2150 * @kctl: the control element to assign
2152 * Add the given control element to an array inside the codec instance.
2153 * All control elements belonging to a codec are supposed to be added
2154 * by this function so that a proper clean-up works at the free or
2155 * reconfiguration time.
2157 * If non-zero @nid is passed, the NID is assigned to the control element.
2158 * The assignment is shown in the codec proc file.
2160 * snd_hda_ctl_add() checks the control subdev id field whether
2161 * #HDA_SUBDEV_NID_FLAG bit is set. If set (and @nid is zero), the lower
2162 * bits value is taken as the NID to assign. The #HDA_NID_ITEM_AMP bit
2163 * specifies if kctl->private_value is a HDA amplifier value.
2165 int snd_hda_ctl_add(struct hda_codec *codec, hda_nid_t nid,
2166 struct snd_kcontrol *kctl)
2168 int err;
2169 unsigned short flags = 0;
2170 struct hda_nid_item *item;
2172 if (kctl->id.subdevice & HDA_SUBDEV_AMP_FLAG) {
2173 flags |= HDA_NID_ITEM_AMP;
2174 if (nid == 0)
2175 nid = get_amp_nid_(kctl->private_value);
2177 if ((kctl->id.subdevice & HDA_SUBDEV_NID_FLAG) != 0 && nid == 0)
2178 nid = kctl->id.subdevice & 0xffff;
2179 if (kctl->id.subdevice & (HDA_SUBDEV_NID_FLAG|HDA_SUBDEV_AMP_FLAG))
2180 kctl->id.subdevice = 0;
2181 err = snd_ctl_add(codec->bus->card, kctl);
2182 if (err < 0)
2183 return err;
2184 item = snd_array_new(&codec->mixers);
2185 if (!item)
2186 return -ENOMEM;
2187 item->kctl = kctl;
2188 item->nid = nid;
2189 item->flags = flags;
2190 return 0;
2192 EXPORT_SYMBOL_HDA(snd_hda_ctl_add);
2195 * snd_hda_add_nid - Assign a NID to a control element
2196 * @codec: HD-audio codec
2197 * @nid: corresponding NID (optional)
2198 * @kctl: the control element to assign
2199 * @index: index to kctl
2201 * Add the given control element to an array inside the codec instance.
2202 * This function is used when #snd_hda_ctl_add cannot be used for 1:1
2203 * NID:KCTL mapping - for example "Capture Source" selector.
2205 int snd_hda_add_nid(struct hda_codec *codec, struct snd_kcontrol *kctl,
2206 unsigned int index, hda_nid_t nid)
2208 struct hda_nid_item *item;
2210 if (nid > 0) {
2211 item = snd_array_new(&codec->nids);
2212 if (!item)
2213 return -ENOMEM;
2214 item->kctl = kctl;
2215 item->index = index;
2216 item->nid = nid;
2217 return 0;
2219 printk(KERN_ERR "hda-codec: no NID for mapping control %s:%d:%d\n",
2220 kctl->id.name, kctl->id.index, index);
2221 return -EINVAL;
2223 EXPORT_SYMBOL_HDA(snd_hda_add_nid);
2226 * snd_hda_ctls_clear - Clear all controls assigned to the given codec
2227 * @codec: HD-audio codec
2229 void snd_hda_ctls_clear(struct hda_codec *codec)
2231 int i;
2232 struct hda_nid_item *items = codec->mixers.list;
2233 for (i = 0; i < codec->mixers.used; i++)
2234 snd_ctl_remove(codec->bus->card, items[i].kctl);
2235 snd_array_free(&codec->mixers);
2236 snd_array_free(&codec->nids);
2239 /* pseudo device locking
2240 * toggle card->shutdown to allow/disallow the device access (as a hack)
2242 static int hda_lock_devices(struct snd_card *card)
2244 spin_lock(&card->files_lock);
2245 if (card->shutdown) {
2246 spin_unlock(&card->files_lock);
2247 return -EINVAL;
2249 card->shutdown = 1;
2250 spin_unlock(&card->files_lock);
2251 return 0;
2254 static void hda_unlock_devices(struct snd_card *card)
2256 spin_lock(&card->files_lock);
2257 card->shutdown = 0;
2258 spin_unlock(&card->files_lock);
2262 * snd_hda_codec_reset - Clear all objects assigned to the codec
2263 * @codec: HD-audio codec
2265 * This frees the all PCM and control elements assigned to the codec, and
2266 * clears the caches and restores the pin default configurations.
2268 * When a device is being used, it returns -EBSY. If successfully freed,
2269 * returns zero.
2271 int snd_hda_codec_reset(struct hda_codec *codec)
2273 struct snd_card *card = codec->bus->card;
2274 int i, pcm;
2276 if (hda_lock_devices(card) < 0)
2277 return -EBUSY;
2278 /* check whether the codec isn't used by any mixer or PCM streams */
2279 if (!list_empty(&card->ctl_files)) {
2280 hda_unlock_devices(card);
2281 return -EBUSY;
2283 for (pcm = 0; pcm < codec->num_pcms; pcm++) {
2284 struct hda_pcm *cpcm = &codec->pcm_info[pcm];
2285 if (!cpcm->pcm)
2286 continue;
2287 if (cpcm->pcm->streams[0].substream_opened ||
2288 cpcm->pcm->streams[1].substream_opened) {
2289 hda_unlock_devices(card);
2290 return -EBUSY;
2294 /* OK, let it free */
2296 #ifdef CONFIG_SND_HDA_POWER_SAVE
2297 cancel_delayed_work(&codec->power_work);
2298 flush_workqueue(codec->bus->workq);
2299 #endif
2300 snd_hda_ctls_clear(codec);
2301 /* relase PCMs */
2302 for (i = 0; i < codec->num_pcms; i++) {
2303 if (codec->pcm_info[i].pcm) {
2304 snd_device_free(card, codec->pcm_info[i].pcm);
2305 clear_bit(codec->pcm_info[i].device,
2306 codec->bus->pcm_dev_bits);
2309 if (codec->patch_ops.free)
2310 codec->patch_ops.free(codec);
2311 codec->proc_widget_hook = NULL;
2312 codec->spec = NULL;
2313 free_hda_cache(&codec->amp_cache);
2314 free_hda_cache(&codec->cmd_cache);
2315 init_hda_cache(&codec->amp_cache, sizeof(struct hda_amp_info));
2316 init_hda_cache(&codec->cmd_cache, sizeof(struct hda_cache_head));
2317 /* free only driver_pins so that init_pins + user_pins are restored */
2318 snd_array_free(&codec->driver_pins);
2319 restore_pincfgs(codec);
2320 codec->num_pcms = 0;
2321 codec->pcm_info = NULL;
2322 codec->preset = NULL;
2323 memset(&codec->patch_ops, 0, sizeof(codec->patch_ops));
2324 codec->slave_dig_outs = NULL;
2325 codec->spdif_status_reset = 0;
2326 module_put(codec->owner);
2327 codec->owner = NULL;
2329 /* allow device access again */
2330 hda_unlock_devices(card);
2331 return 0;
2335 * snd_hda_add_vmaster - create a virtual master control and add slaves
2336 * @codec: HD-audio codec
2337 * @name: vmaster control name
2338 * @tlv: TLV data (optional)
2339 * @slaves: slave control names (optional)
2341 * Create a virtual master control with the given name. The TLV data
2342 * must be either NULL or a valid data.
2344 * @slaves is a NULL-terminated array of strings, each of which is a
2345 * slave control name. All controls with these names are assigned to
2346 * the new virtual master control.
2348 * This function returns zero if successful or a negative error code.
2350 int snd_hda_add_vmaster(struct hda_codec *codec, char *name,
2351 unsigned int *tlv, const char * const *slaves)
2353 struct snd_kcontrol *kctl;
2354 const char * const *s;
2355 int err;
2357 for (s = slaves; *s && !snd_hda_find_mixer_ctl(codec, *s); s++)
2359 if (!*s) {
2360 snd_printdd("No slave found for %s\n", name);
2361 return 0;
2363 kctl = snd_ctl_make_virtual_master(name, tlv);
2364 if (!kctl)
2365 return -ENOMEM;
2366 err = snd_hda_ctl_add(codec, 0, kctl);
2367 if (err < 0)
2368 return err;
2370 for (s = slaves; *s; s++) {
2371 struct snd_kcontrol *sctl;
2372 int i = 0;
2373 for (;;) {
2374 sctl = _snd_hda_find_mixer_ctl(codec, *s, i);
2375 if (!sctl) {
2376 if (!i)
2377 snd_printdd("Cannot find slave %s, "
2378 "skipped\n", *s);
2379 break;
2381 err = snd_ctl_add_slave(kctl, sctl);
2382 if (err < 0)
2383 return err;
2384 i++;
2387 return 0;
2389 EXPORT_SYMBOL_HDA(snd_hda_add_vmaster);
2392 * snd_hda_mixer_amp_switch_info - Info callback for a standard AMP mixer switch
2394 * The control element is supposed to have the private_value field
2395 * set up via HDA_COMPOSE_AMP_VAL*() or related macros.
2397 int snd_hda_mixer_amp_switch_info(struct snd_kcontrol *kcontrol,
2398 struct snd_ctl_elem_info *uinfo)
2400 int chs = get_amp_channels(kcontrol);
2402 uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
2403 uinfo->count = chs == 3 ? 2 : 1;
2404 uinfo->value.integer.min = 0;
2405 uinfo->value.integer.max = 1;
2406 return 0;
2408 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_switch_info);
2411 * snd_hda_mixer_amp_switch_get - Get callback for a standard AMP mixer switch
2413 * The control element is supposed to have the private_value field
2414 * set up via HDA_COMPOSE_AMP_VAL*() or related macros.
2416 int snd_hda_mixer_amp_switch_get(struct snd_kcontrol *kcontrol,
2417 struct snd_ctl_elem_value *ucontrol)
2419 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2420 hda_nid_t nid = get_amp_nid(kcontrol);
2421 int chs = get_amp_channels(kcontrol);
2422 int dir = get_amp_direction(kcontrol);
2423 int idx = get_amp_index(kcontrol);
2424 long *valp = ucontrol->value.integer.value;
2426 if (chs & 1)
2427 *valp++ = (snd_hda_codec_amp_read(codec, nid, 0, dir, idx) &
2428 HDA_AMP_MUTE) ? 0 : 1;
2429 if (chs & 2)
2430 *valp = (snd_hda_codec_amp_read(codec, nid, 1, dir, idx) &
2431 HDA_AMP_MUTE) ? 0 : 1;
2432 return 0;
2434 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_switch_get);
2437 * snd_hda_mixer_amp_switch_put - Put callback for a standard AMP mixer switch
2439 * The control element is supposed to have the private_value field
2440 * set up via HDA_COMPOSE_AMP_VAL*() or related macros.
2442 int snd_hda_mixer_amp_switch_put(struct snd_kcontrol *kcontrol,
2443 struct snd_ctl_elem_value *ucontrol)
2445 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2446 hda_nid_t nid = get_amp_nid(kcontrol);
2447 int chs = get_amp_channels(kcontrol);
2448 int dir = get_amp_direction(kcontrol);
2449 int idx = get_amp_index(kcontrol);
2450 long *valp = ucontrol->value.integer.value;
2451 int change = 0;
2453 snd_hda_power_up(codec);
2454 if (chs & 1) {
2455 change = snd_hda_codec_amp_update(codec, nid, 0, dir, idx,
2456 HDA_AMP_MUTE,
2457 *valp ? 0 : HDA_AMP_MUTE);
2458 valp++;
2460 if (chs & 2)
2461 change |= snd_hda_codec_amp_update(codec, nid, 1, dir, idx,
2462 HDA_AMP_MUTE,
2463 *valp ? 0 : HDA_AMP_MUTE);
2464 hda_call_check_power_status(codec, nid);
2465 snd_hda_power_down(codec);
2466 return change;
2468 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_switch_put);
2470 #ifdef CONFIG_SND_HDA_INPUT_BEEP
2472 * snd_hda_mixer_amp_switch_put_beep - Put callback for a beep AMP switch
2474 * This function calls snd_hda_enable_beep_device(), which behaves differently
2475 * depending on beep_mode option.
2477 int snd_hda_mixer_amp_switch_put_beep(struct snd_kcontrol *kcontrol,
2478 struct snd_ctl_elem_value *ucontrol)
2480 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2481 long *valp = ucontrol->value.integer.value;
2483 snd_hda_enable_beep_device(codec, *valp);
2484 return snd_hda_mixer_amp_switch_put(kcontrol, ucontrol);
2486 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_switch_put_beep);
2487 #endif /* CONFIG_SND_HDA_INPUT_BEEP */
2490 * bound volume controls
2492 * bind multiple volumes (# indices, from 0)
2495 #define AMP_VAL_IDX_SHIFT 19
2496 #define AMP_VAL_IDX_MASK (0x0f<<19)
2499 * snd_hda_mixer_bind_switch_get - Get callback for a bound volume control
2501 * The control element is supposed to have the private_value field
2502 * set up via HDA_BIND_MUTE*() macros.
2504 int snd_hda_mixer_bind_switch_get(struct snd_kcontrol *kcontrol,
2505 struct snd_ctl_elem_value *ucontrol)
2507 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2508 unsigned long pval;
2509 int err;
2511 mutex_lock(&codec->control_mutex);
2512 pval = kcontrol->private_value;
2513 kcontrol->private_value = pval & ~AMP_VAL_IDX_MASK; /* index 0 */
2514 err = snd_hda_mixer_amp_switch_get(kcontrol, ucontrol);
2515 kcontrol->private_value = pval;
2516 mutex_unlock(&codec->control_mutex);
2517 return err;
2519 EXPORT_SYMBOL_HDA(snd_hda_mixer_bind_switch_get);
2522 * snd_hda_mixer_bind_switch_put - Put callback for a bound volume control
2524 * The control element is supposed to have the private_value field
2525 * set up via HDA_BIND_MUTE*() macros.
2527 int snd_hda_mixer_bind_switch_put(struct snd_kcontrol *kcontrol,
2528 struct snd_ctl_elem_value *ucontrol)
2530 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2531 unsigned long pval;
2532 int i, indices, err = 0, change = 0;
2534 mutex_lock(&codec->control_mutex);
2535 pval = kcontrol->private_value;
2536 indices = (pval & AMP_VAL_IDX_MASK) >> AMP_VAL_IDX_SHIFT;
2537 for (i = 0; i < indices; i++) {
2538 kcontrol->private_value = (pval & ~AMP_VAL_IDX_MASK) |
2539 (i << AMP_VAL_IDX_SHIFT);
2540 err = snd_hda_mixer_amp_switch_put(kcontrol, ucontrol);
2541 if (err < 0)
2542 break;
2543 change |= err;
2545 kcontrol->private_value = pval;
2546 mutex_unlock(&codec->control_mutex);
2547 return err < 0 ? err : change;
2549 EXPORT_SYMBOL_HDA(snd_hda_mixer_bind_switch_put);
2552 * snd_hda_mixer_bind_ctls_info - Info callback for a generic bound control
2554 * The control element is supposed to have the private_value field
2555 * set up via HDA_BIND_VOL() or HDA_BIND_SW() macros.
2557 int snd_hda_mixer_bind_ctls_info(struct snd_kcontrol *kcontrol,
2558 struct snd_ctl_elem_info *uinfo)
2560 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2561 struct hda_bind_ctls *c;
2562 int err;
2564 mutex_lock(&codec->control_mutex);
2565 c = (struct hda_bind_ctls *)kcontrol->private_value;
2566 kcontrol->private_value = *c->values;
2567 err = c->ops->info(kcontrol, uinfo);
2568 kcontrol->private_value = (long)c;
2569 mutex_unlock(&codec->control_mutex);
2570 return err;
2572 EXPORT_SYMBOL_HDA(snd_hda_mixer_bind_ctls_info);
2575 * snd_hda_mixer_bind_ctls_get - Get callback for a generic bound control
2577 * The control element is supposed to have the private_value field
2578 * set up via HDA_BIND_VOL() or HDA_BIND_SW() macros.
2580 int snd_hda_mixer_bind_ctls_get(struct snd_kcontrol *kcontrol,
2581 struct snd_ctl_elem_value *ucontrol)
2583 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2584 struct hda_bind_ctls *c;
2585 int err;
2587 mutex_lock(&codec->control_mutex);
2588 c = (struct hda_bind_ctls *)kcontrol->private_value;
2589 kcontrol->private_value = *c->values;
2590 err = c->ops->get(kcontrol, ucontrol);
2591 kcontrol->private_value = (long)c;
2592 mutex_unlock(&codec->control_mutex);
2593 return err;
2595 EXPORT_SYMBOL_HDA(snd_hda_mixer_bind_ctls_get);
2598 * snd_hda_mixer_bind_ctls_put - Put callback for a generic bound control
2600 * The control element is supposed to have the private_value field
2601 * set up via HDA_BIND_VOL() or HDA_BIND_SW() macros.
2603 int snd_hda_mixer_bind_ctls_put(struct snd_kcontrol *kcontrol,
2604 struct snd_ctl_elem_value *ucontrol)
2606 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2607 struct hda_bind_ctls *c;
2608 unsigned long *vals;
2609 int err = 0, change = 0;
2611 mutex_lock(&codec->control_mutex);
2612 c = (struct hda_bind_ctls *)kcontrol->private_value;
2613 for (vals = c->values; *vals; vals++) {
2614 kcontrol->private_value = *vals;
2615 err = c->ops->put(kcontrol, ucontrol);
2616 if (err < 0)
2617 break;
2618 change |= err;
2620 kcontrol->private_value = (long)c;
2621 mutex_unlock(&codec->control_mutex);
2622 return err < 0 ? err : change;
2624 EXPORT_SYMBOL_HDA(snd_hda_mixer_bind_ctls_put);
2627 * snd_hda_mixer_bind_tlv - TLV callback for a generic bound control
2629 * The control element is supposed to have the private_value field
2630 * set up via HDA_BIND_VOL() macro.
2632 int snd_hda_mixer_bind_tlv(struct snd_kcontrol *kcontrol, int op_flag,
2633 unsigned int size, unsigned int __user *tlv)
2635 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2636 struct hda_bind_ctls *c;
2637 int err;
2639 mutex_lock(&codec->control_mutex);
2640 c = (struct hda_bind_ctls *)kcontrol->private_value;
2641 kcontrol->private_value = *c->values;
2642 err = c->ops->tlv(kcontrol, op_flag, size, tlv);
2643 kcontrol->private_value = (long)c;
2644 mutex_unlock(&codec->control_mutex);
2645 return err;
2647 EXPORT_SYMBOL_HDA(snd_hda_mixer_bind_tlv);
2649 struct hda_ctl_ops snd_hda_bind_vol = {
2650 .info = snd_hda_mixer_amp_volume_info,
2651 .get = snd_hda_mixer_amp_volume_get,
2652 .put = snd_hda_mixer_amp_volume_put,
2653 .tlv = snd_hda_mixer_amp_tlv
2655 EXPORT_SYMBOL_HDA(snd_hda_bind_vol);
2657 struct hda_ctl_ops snd_hda_bind_sw = {
2658 .info = snd_hda_mixer_amp_switch_info,
2659 .get = snd_hda_mixer_amp_switch_get,
2660 .put = snd_hda_mixer_amp_switch_put,
2661 .tlv = snd_hda_mixer_amp_tlv
2663 EXPORT_SYMBOL_HDA(snd_hda_bind_sw);
2666 * SPDIF out controls
2669 static int snd_hda_spdif_mask_info(struct snd_kcontrol *kcontrol,
2670 struct snd_ctl_elem_info *uinfo)
2672 uinfo->type = SNDRV_CTL_ELEM_TYPE_IEC958;
2673 uinfo->count = 1;
2674 return 0;
2677 static int snd_hda_spdif_cmask_get(struct snd_kcontrol *kcontrol,
2678 struct snd_ctl_elem_value *ucontrol)
2680 ucontrol->value.iec958.status[0] = IEC958_AES0_PROFESSIONAL |
2681 IEC958_AES0_NONAUDIO |
2682 IEC958_AES0_CON_EMPHASIS_5015 |
2683 IEC958_AES0_CON_NOT_COPYRIGHT;
2684 ucontrol->value.iec958.status[1] = IEC958_AES1_CON_CATEGORY |
2685 IEC958_AES1_CON_ORIGINAL;
2686 return 0;
2689 static int snd_hda_spdif_pmask_get(struct snd_kcontrol *kcontrol,
2690 struct snd_ctl_elem_value *ucontrol)
2692 ucontrol->value.iec958.status[0] = IEC958_AES0_PROFESSIONAL |
2693 IEC958_AES0_NONAUDIO |
2694 IEC958_AES0_PRO_EMPHASIS_5015;
2695 return 0;
2698 static int snd_hda_spdif_default_get(struct snd_kcontrol *kcontrol,
2699 struct snd_ctl_elem_value *ucontrol)
2701 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2702 int idx = kcontrol->private_value;
2703 struct hda_spdif_out *spdif = snd_array_elem(&codec->spdif_out, idx);
2705 ucontrol->value.iec958.status[0] = spdif->status & 0xff;
2706 ucontrol->value.iec958.status[1] = (spdif->status >> 8) & 0xff;
2707 ucontrol->value.iec958.status[2] = (spdif->status >> 16) & 0xff;
2708 ucontrol->value.iec958.status[3] = (spdif->status >> 24) & 0xff;
2710 return 0;
2713 /* convert from SPDIF status bits to HDA SPDIF bits
2714 * bit 0 (DigEn) is always set zero (to be filled later)
2716 static unsigned short convert_from_spdif_status(unsigned int sbits)
2718 unsigned short val = 0;
2720 if (sbits & IEC958_AES0_PROFESSIONAL)
2721 val |= AC_DIG1_PROFESSIONAL;
2722 if (sbits & IEC958_AES0_NONAUDIO)
2723 val |= AC_DIG1_NONAUDIO;
2724 if (sbits & IEC958_AES0_PROFESSIONAL) {
2725 if ((sbits & IEC958_AES0_PRO_EMPHASIS) ==
2726 IEC958_AES0_PRO_EMPHASIS_5015)
2727 val |= AC_DIG1_EMPHASIS;
2728 } else {
2729 if ((sbits & IEC958_AES0_CON_EMPHASIS) ==
2730 IEC958_AES0_CON_EMPHASIS_5015)
2731 val |= AC_DIG1_EMPHASIS;
2732 if (!(sbits & IEC958_AES0_CON_NOT_COPYRIGHT))
2733 val |= AC_DIG1_COPYRIGHT;
2734 if (sbits & (IEC958_AES1_CON_ORIGINAL << 8))
2735 val |= AC_DIG1_LEVEL;
2736 val |= sbits & (IEC958_AES1_CON_CATEGORY << 8);
2738 return val;
2741 /* convert to SPDIF status bits from HDA SPDIF bits
2743 static unsigned int convert_to_spdif_status(unsigned short val)
2745 unsigned int sbits = 0;
2747 if (val & AC_DIG1_NONAUDIO)
2748 sbits |= IEC958_AES0_NONAUDIO;
2749 if (val & AC_DIG1_PROFESSIONAL)
2750 sbits |= IEC958_AES0_PROFESSIONAL;
2751 if (sbits & IEC958_AES0_PROFESSIONAL) {
2752 if (sbits & AC_DIG1_EMPHASIS)
2753 sbits |= IEC958_AES0_PRO_EMPHASIS_5015;
2754 } else {
2755 if (val & AC_DIG1_EMPHASIS)
2756 sbits |= IEC958_AES0_CON_EMPHASIS_5015;
2757 if (!(val & AC_DIG1_COPYRIGHT))
2758 sbits |= IEC958_AES0_CON_NOT_COPYRIGHT;
2759 if (val & AC_DIG1_LEVEL)
2760 sbits |= (IEC958_AES1_CON_ORIGINAL << 8);
2761 sbits |= val & (0x7f << 8);
2763 return sbits;
2766 /* set digital convert verbs both for the given NID and its slaves */
2767 static void set_dig_out(struct hda_codec *codec, hda_nid_t nid,
2768 int verb, int val)
2770 const hda_nid_t *d;
2772 snd_hda_codec_write_cache(codec, nid, 0, verb, val);
2773 d = codec->slave_dig_outs;
2774 if (!d)
2775 return;
2776 for (; *d; d++)
2777 snd_hda_codec_write_cache(codec, *d, 0, verb, val);
2780 static inline void set_dig_out_convert(struct hda_codec *codec, hda_nid_t nid,
2781 int dig1, int dig2)
2783 if (dig1 != -1)
2784 set_dig_out(codec, nid, AC_VERB_SET_DIGI_CONVERT_1, dig1);
2785 if (dig2 != -1)
2786 set_dig_out(codec, nid, AC_VERB_SET_DIGI_CONVERT_2, dig2);
2789 static int snd_hda_spdif_default_put(struct snd_kcontrol *kcontrol,
2790 struct snd_ctl_elem_value *ucontrol)
2792 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2793 int idx = kcontrol->private_value;
2794 struct hda_spdif_out *spdif = snd_array_elem(&codec->spdif_out, idx);
2795 hda_nid_t nid = spdif->nid;
2796 unsigned short val;
2797 int change;
2799 mutex_lock(&codec->spdif_mutex);
2800 spdif->status = ucontrol->value.iec958.status[0] |
2801 ((unsigned int)ucontrol->value.iec958.status[1] << 8) |
2802 ((unsigned int)ucontrol->value.iec958.status[2] << 16) |
2803 ((unsigned int)ucontrol->value.iec958.status[3] << 24);
2804 val = convert_from_spdif_status(spdif->status);
2805 val |= spdif->ctls & 1;
2806 change = spdif->ctls != val;
2807 spdif->ctls = val;
2808 if (change && nid != (u16)-1)
2809 set_dig_out_convert(codec, nid, val & 0xff, (val >> 8) & 0xff);
2810 mutex_unlock(&codec->spdif_mutex);
2811 return change;
2814 #define snd_hda_spdif_out_switch_info snd_ctl_boolean_mono_info
2816 static int snd_hda_spdif_out_switch_get(struct snd_kcontrol *kcontrol,
2817 struct snd_ctl_elem_value *ucontrol)
2819 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2820 int idx = kcontrol->private_value;
2821 struct hda_spdif_out *spdif = snd_array_elem(&codec->spdif_out, idx);
2823 ucontrol->value.integer.value[0] = spdif->ctls & AC_DIG1_ENABLE;
2824 return 0;
2827 static inline void set_spdif_ctls(struct hda_codec *codec, hda_nid_t nid,
2828 int dig1, int dig2)
2830 set_dig_out_convert(codec, nid, dig1, dig2);
2831 /* unmute amp switch (if any) */
2832 if ((get_wcaps(codec, nid) & AC_WCAP_OUT_AMP) &&
2833 (dig1 & AC_DIG1_ENABLE))
2834 snd_hda_codec_amp_stereo(codec, nid, HDA_OUTPUT, 0,
2835 HDA_AMP_MUTE, 0);
2838 static int snd_hda_spdif_out_switch_put(struct snd_kcontrol *kcontrol,
2839 struct snd_ctl_elem_value *ucontrol)
2841 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2842 int idx = kcontrol->private_value;
2843 struct hda_spdif_out *spdif = snd_array_elem(&codec->spdif_out, idx);
2844 hda_nid_t nid = spdif->nid;
2845 unsigned short val;
2846 int change;
2848 mutex_lock(&codec->spdif_mutex);
2849 val = spdif->ctls & ~AC_DIG1_ENABLE;
2850 if (ucontrol->value.integer.value[0])
2851 val |= AC_DIG1_ENABLE;
2852 change = spdif->ctls != val;
2853 spdif->ctls = val;
2854 if (change && nid != (u16)-1)
2855 set_spdif_ctls(codec, nid, val & 0xff, -1);
2856 mutex_unlock(&codec->spdif_mutex);
2857 return change;
2860 static struct snd_kcontrol_new dig_mixes[] = {
2862 .access = SNDRV_CTL_ELEM_ACCESS_READ,
2863 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2864 .name = SNDRV_CTL_NAME_IEC958("", PLAYBACK, CON_MASK),
2865 .info = snd_hda_spdif_mask_info,
2866 .get = snd_hda_spdif_cmask_get,
2869 .access = SNDRV_CTL_ELEM_ACCESS_READ,
2870 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2871 .name = SNDRV_CTL_NAME_IEC958("", PLAYBACK, PRO_MASK),
2872 .info = snd_hda_spdif_mask_info,
2873 .get = snd_hda_spdif_pmask_get,
2876 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2877 .name = SNDRV_CTL_NAME_IEC958("", PLAYBACK, DEFAULT),
2878 .info = snd_hda_spdif_mask_info,
2879 .get = snd_hda_spdif_default_get,
2880 .put = snd_hda_spdif_default_put,
2883 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2884 .name = SNDRV_CTL_NAME_IEC958("", PLAYBACK, SWITCH),
2885 .info = snd_hda_spdif_out_switch_info,
2886 .get = snd_hda_spdif_out_switch_get,
2887 .put = snd_hda_spdif_out_switch_put,
2889 { } /* end */
2893 * snd_hda_create_spdif_out_ctls - create Output SPDIF-related controls
2894 * @codec: the HDA codec
2895 * @nid: audio out widget NID
2897 * Creates controls related with the SPDIF output.
2898 * Called from each patch supporting the SPDIF out.
2900 * Returns 0 if successful, or a negative error code.
2902 int snd_hda_create_spdif_out_ctls(struct hda_codec *codec,
2903 hda_nid_t associated_nid,
2904 hda_nid_t cvt_nid)
2906 int err;
2907 struct snd_kcontrol *kctl;
2908 struct snd_kcontrol_new *dig_mix;
2909 int idx;
2910 struct hda_spdif_out *spdif;
2912 idx = find_empty_mixer_ctl_idx(codec, "IEC958 Playback Switch");
2913 if (idx < 0) {
2914 printk(KERN_ERR "hda_codec: too many IEC958 outputs\n");
2915 return -EBUSY;
2917 spdif = snd_array_new(&codec->spdif_out);
2918 for (dig_mix = dig_mixes; dig_mix->name; dig_mix++) {
2919 kctl = snd_ctl_new1(dig_mix, codec);
2920 if (!kctl)
2921 return -ENOMEM;
2922 kctl->id.index = idx;
2923 kctl->private_value = codec->spdif_out.used - 1;
2924 err = snd_hda_ctl_add(codec, associated_nid, kctl);
2925 if (err < 0)
2926 return err;
2928 spdif->nid = cvt_nid;
2929 spdif->ctls = snd_hda_codec_read(codec, cvt_nid, 0,
2930 AC_VERB_GET_DIGI_CONVERT_1, 0);
2931 spdif->status = convert_to_spdif_status(spdif->ctls);
2932 return 0;
2934 EXPORT_SYMBOL_HDA(snd_hda_create_spdif_out_ctls);
2936 struct hda_spdif_out *snd_hda_spdif_out_of_nid(struct hda_codec *codec,
2937 hda_nid_t nid)
2939 int i;
2940 for (i = 0; i < codec->spdif_out.used; i++) {
2941 struct hda_spdif_out *spdif =
2942 snd_array_elem(&codec->spdif_out, i);
2943 if (spdif->nid == nid)
2944 return spdif;
2946 return NULL;
2948 EXPORT_SYMBOL_HDA(snd_hda_spdif_out_of_nid);
2950 void snd_hda_spdif_ctls_unassign(struct hda_codec *codec, int idx)
2952 struct hda_spdif_out *spdif = snd_array_elem(&codec->spdif_out, idx);
2954 mutex_lock(&codec->spdif_mutex);
2955 spdif->nid = (u16)-1;
2956 mutex_unlock(&codec->spdif_mutex);
2958 EXPORT_SYMBOL_HDA(snd_hda_spdif_ctls_unassign);
2960 void snd_hda_spdif_ctls_assign(struct hda_codec *codec, int idx, hda_nid_t nid)
2962 struct hda_spdif_out *spdif = snd_array_elem(&codec->spdif_out, idx);
2963 unsigned short val;
2965 mutex_lock(&codec->spdif_mutex);
2966 if (spdif->nid != nid) {
2967 spdif->nid = nid;
2968 val = spdif->ctls;
2969 set_spdif_ctls(codec, nid, val & 0xff, (val >> 8) & 0xff);
2971 mutex_unlock(&codec->spdif_mutex);
2973 EXPORT_SYMBOL_HDA(snd_hda_spdif_ctls_assign);
2976 * SPDIF sharing with analog output
2978 static int spdif_share_sw_get(struct snd_kcontrol *kcontrol,
2979 struct snd_ctl_elem_value *ucontrol)
2981 struct hda_multi_out *mout = snd_kcontrol_chip(kcontrol);
2982 ucontrol->value.integer.value[0] = mout->share_spdif;
2983 return 0;
2986 static int spdif_share_sw_put(struct snd_kcontrol *kcontrol,
2987 struct snd_ctl_elem_value *ucontrol)
2989 struct hda_multi_out *mout = snd_kcontrol_chip(kcontrol);
2990 mout->share_spdif = !!ucontrol->value.integer.value[0];
2991 return 0;
2994 static struct snd_kcontrol_new spdif_share_sw = {
2995 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2996 .name = "IEC958 Default PCM Playback Switch",
2997 .info = snd_ctl_boolean_mono_info,
2998 .get = spdif_share_sw_get,
2999 .put = spdif_share_sw_put,
3003 * snd_hda_create_spdif_share_sw - create Default PCM switch
3004 * @codec: the HDA codec
3005 * @mout: multi-out instance
3007 int snd_hda_create_spdif_share_sw(struct hda_codec *codec,
3008 struct hda_multi_out *mout)
3010 if (!mout->dig_out_nid)
3011 return 0;
3012 /* ATTENTION: here mout is passed as private_data, instead of codec */
3013 return snd_hda_ctl_add(codec, mout->dig_out_nid,
3014 snd_ctl_new1(&spdif_share_sw, mout));
3016 EXPORT_SYMBOL_HDA(snd_hda_create_spdif_share_sw);
3019 * SPDIF input
3022 #define snd_hda_spdif_in_switch_info snd_hda_spdif_out_switch_info
3024 static int snd_hda_spdif_in_switch_get(struct snd_kcontrol *kcontrol,
3025 struct snd_ctl_elem_value *ucontrol)
3027 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3029 ucontrol->value.integer.value[0] = codec->spdif_in_enable;
3030 return 0;
3033 static int snd_hda_spdif_in_switch_put(struct snd_kcontrol *kcontrol,
3034 struct snd_ctl_elem_value *ucontrol)
3036 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3037 hda_nid_t nid = kcontrol->private_value;
3038 unsigned int val = !!ucontrol->value.integer.value[0];
3039 int change;
3041 mutex_lock(&codec->spdif_mutex);
3042 change = codec->spdif_in_enable != val;
3043 if (change) {
3044 codec->spdif_in_enable = val;
3045 snd_hda_codec_write_cache(codec, nid, 0,
3046 AC_VERB_SET_DIGI_CONVERT_1, val);
3048 mutex_unlock(&codec->spdif_mutex);
3049 return change;
3052 static int snd_hda_spdif_in_status_get(struct snd_kcontrol *kcontrol,
3053 struct snd_ctl_elem_value *ucontrol)
3055 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3056 hda_nid_t nid = kcontrol->private_value;
3057 unsigned short val;
3058 unsigned int sbits;
3060 val = snd_hda_codec_read(codec, nid, 0, AC_VERB_GET_DIGI_CONVERT_1, 0);
3061 sbits = convert_to_spdif_status(val);
3062 ucontrol->value.iec958.status[0] = sbits;
3063 ucontrol->value.iec958.status[1] = sbits >> 8;
3064 ucontrol->value.iec958.status[2] = sbits >> 16;
3065 ucontrol->value.iec958.status[3] = sbits >> 24;
3066 return 0;
3069 static struct snd_kcontrol_new dig_in_ctls[] = {
3071 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3072 .name = SNDRV_CTL_NAME_IEC958("", CAPTURE, SWITCH),
3073 .info = snd_hda_spdif_in_switch_info,
3074 .get = snd_hda_spdif_in_switch_get,
3075 .put = snd_hda_spdif_in_switch_put,
3078 .access = SNDRV_CTL_ELEM_ACCESS_READ,
3079 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3080 .name = SNDRV_CTL_NAME_IEC958("", CAPTURE, DEFAULT),
3081 .info = snd_hda_spdif_mask_info,
3082 .get = snd_hda_spdif_in_status_get,
3084 { } /* end */
3088 * snd_hda_create_spdif_in_ctls - create Input SPDIF-related controls
3089 * @codec: the HDA codec
3090 * @nid: audio in widget NID
3092 * Creates controls related with the SPDIF input.
3093 * Called from each patch supporting the SPDIF in.
3095 * Returns 0 if successful, or a negative error code.
3097 int snd_hda_create_spdif_in_ctls(struct hda_codec *codec, hda_nid_t nid)
3099 int err;
3100 struct snd_kcontrol *kctl;
3101 struct snd_kcontrol_new *dig_mix;
3102 int idx;
3104 idx = find_empty_mixer_ctl_idx(codec, "IEC958 Capture Switch");
3105 if (idx < 0) {
3106 printk(KERN_ERR "hda_codec: too many IEC958 inputs\n");
3107 return -EBUSY;
3109 for (dig_mix = dig_in_ctls; dig_mix->name; dig_mix++) {
3110 kctl = snd_ctl_new1(dig_mix, codec);
3111 if (!kctl)
3112 return -ENOMEM;
3113 kctl->private_value = nid;
3114 err = snd_hda_ctl_add(codec, nid, kctl);
3115 if (err < 0)
3116 return err;
3118 codec->spdif_in_enable =
3119 snd_hda_codec_read(codec, nid, 0,
3120 AC_VERB_GET_DIGI_CONVERT_1, 0) &
3121 AC_DIG1_ENABLE;
3122 return 0;
3124 EXPORT_SYMBOL_HDA(snd_hda_create_spdif_in_ctls);
3126 #ifdef CONFIG_PM
3128 * command cache
3131 /* build a 32bit cache key with the widget id and the command parameter */
3132 #define build_cmd_cache_key(nid, verb) ((verb << 8) | nid)
3133 #define get_cmd_cache_nid(key) ((key) & 0xff)
3134 #define get_cmd_cache_cmd(key) (((key) >> 8) & 0xffff)
3137 * snd_hda_codec_write_cache - send a single command with caching
3138 * @codec: the HDA codec
3139 * @nid: NID to send the command
3140 * @direct: direct flag
3141 * @verb: the verb to send
3142 * @parm: the parameter for the verb
3144 * Send a single command without waiting for response.
3146 * Returns 0 if successful, or a negative error code.
3148 int snd_hda_codec_write_cache(struct hda_codec *codec, hda_nid_t nid,
3149 int direct, unsigned int verb, unsigned int parm)
3151 int err = snd_hda_codec_write(codec, nid, direct, verb, parm);
3152 struct hda_cache_head *c;
3153 u32 key;
3155 if (err < 0)
3156 return err;
3157 /* parm may contain the verb stuff for get/set amp */
3158 verb = verb | (parm >> 8);
3159 parm &= 0xff;
3160 key = build_cmd_cache_key(nid, verb);
3161 mutex_lock(&codec->bus->cmd_mutex);
3162 c = get_alloc_hash(&codec->cmd_cache, key);
3163 if (c)
3164 c->val = parm;
3165 mutex_unlock(&codec->bus->cmd_mutex);
3166 return 0;
3168 EXPORT_SYMBOL_HDA(snd_hda_codec_write_cache);
3171 * snd_hda_codec_update_cache - check cache and write the cmd only when needed
3172 * @codec: the HDA codec
3173 * @nid: NID to send the command
3174 * @direct: direct flag
3175 * @verb: the verb to send
3176 * @parm: the parameter for the verb
3178 * This function works like snd_hda_codec_write_cache(), but it doesn't send
3179 * command if the parameter is already identical with the cached value.
3180 * If not, it sends the command and refreshes the cache.
3182 * Returns 0 if successful, or a negative error code.
3184 int snd_hda_codec_update_cache(struct hda_codec *codec, hda_nid_t nid,
3185 int direct, unsigned int verb, unsigned int parm)
3187 struct hda_cache_head *c;
3188 u32 key;
3190 /* parm may contain the verb stuff for get/set amp */
3191 verb = verb | (parm >> 8);
3192 parm &= 0xff;
3193 key = build_cmd_cache_key(nid, verb);
3194 mutex_lock(&codec->bus->cmd_mutex);
3195 c = get_hash(&codec->cmd_cache, key);
3196 if (c && c->val == parm) {
3197 mutex_unlock(&codec->bus->cmd_mutex);
3198 return 0;
3200 mutex_unlock(&codec->bus->cmd_mutex);
3201 return snd_hda_codec_write_cache(codec, nid, direct, verb, parm);
3203 EXPORT_SYMBOL_HDA(snd_hda_codec_update_cache);
3206 * snd_hda_codec_resume_cache - Resume the all commands from the cache
3207 * @codec: HD-audio codec
3209 * Execute all verbs recorded in the command caches to resume.
3211 void snd_hda_codec_resume_cache(struct hda_codec *codec)
3213 struct hda_cache_head *buffer = codec->cmd_cache.buf.list;
3214 int i;
3216 for (i = 0; i < codec->cmd_cache.buf.used; i++, buffer++) {
3217 u32 key = buffer->key;
3218 if (!key)
3219 continue;
3220 snd_hda_codec_write(codec, get_cmd_cache_nid(key), 0,
3221 get_cmd_cache_cmd(key), buffer->val);
3224 EXPORT_SYMBOL_HDA(snd_hda_codec_resume_cache);
3227 * snd_hda_sequence_write_cache - sequence writes with caching
3228 * @codec: the HDA codec
3229 * @seq: VERB array to send
3231 * Send the commands sequentially from the given array.
3232 * Thte commands are recorded on cache for power-save and resume.
3233 * The array must be terminated with NID=0.
3235 void snd_hda_sequence_write_cache(struct hda_codec *codec,
3236 const struct hda_verb *seq)
3238 for (; seq->nid; seq++)
3239 snd_hda_codec_write_cache(codec, seq->nid, 0, seq->verb,
3240 seq->param);
3242 EXPORT_SYMBOL_HDA(snd_hda_sequence_write_cache);
3243 #endif /* CONFIG_PM */
3245 void snd_hda_codec_set_power_to_all(struct hda_codec *codec, hda_nid_t fg,
3246 unsigned int power_state,
3247 bool eapd_workaround)
3249 hda_nid_t nid = codec->start_nid;
3250 int i;
3252 for (i = 0; i < codec->num_nodes; i++, nid++) {
3253 unsigned int wcaps = get_wcaps(codec, nid);
3254 if (!(wcaps & AC_WCAP_POWER))
3255 continue;
3256 /* don't power down the widget if it controls eapd and
3257 * EAPD_BTLENABLE is set.
3259 if (eapd_workaround && power_state == AC_PWRST_D3 &&
3260 get_wcaps_type(wcaps) == AC_WID_PIN &&
3261 (snd_hda_query_pin_caps(codec, nid) & AC_PINCAP_EAPD)) {
3262 int eapd = snd_hda_codec_read(codec, nid, 0,
3263 AC_VERB_GET_EAPD_BTLENABLE, 0);
3264 if (eapd & 0x02)
3265 continue;
3267 snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_POWER_STATE,
3268 power_state);
3271 if (power_state == AC_PWRST_D0) {
3272 unsigned long end_time;
3273 int state;
3274 /* wait until the codec reachs to D0 */
3275 end_time = jiffies + msecs_to_jiffies(500);
3276 do {
3277 state = snd_hda_codec_read(codec, fg, 0,
3278 AC_VERB_GET_POWER_STATE, 0);
3279 if (state == power_state)
3280 break;
3281 msleep(1);
3282 } while (time_after_eq(end_time, jiffies));
3285 EXPORT_SYMBOL_HDA(snd_hda_codec_set_power_to_all);
3288 * set power state of the codec
3290 static void hda_set_power_state(struct hda_codec *codec, hda_nid_t fg,
3291 unsigned int power_state)
3293 if (codec->patch_ops.set_power_state) {
3294 codec->patch_ops.set_power_state(codec, fg, power_state);
3295 return;
3298 /* this delay seems necessary to avoid click noise at power-down */
3299 if (power_state == AC_PWRST_D3)
3300 msleep(100);
3301 snd_hda_codec_read(codec, fg, 0, AC_VERB_SET_POWER_STATE,
3302 power_state);
3303 snd_hda_codec_set_power_to_all(codec, fg, power_state, true);
3306 #ifdef CONFIG_SND_HDA_HWDEP
3307 /* execute additional init verbs */
3308 static void hda_exec_init_verbs(struct hda_codec *codec)
3310 if (codec->init_verbs.list)
3311 snd_hda_sequence_write(codec, codec->init_verbs.list);
3313 #else
3314 static inline void hda_exec_init_verbs(struct hda_codec *codec) {}
3315 #endif
3317 #ifdef CONFIG_PM
3319 * call suspend and power-down; used both from PM and power-save
3321 static void hda_call_codec_suspend(struct hda_codec *codec)
3323 if (codec->patch_ops.suspend)
3324 codec->patch_ops.suspend(codec, PMSG_SUSPEND);
3325 hda_cleanup_all_streams(codec);
3326 hda_set_power_state(codec,
3327 codec->afg ? codec->afg : codec->mfg,
3328 AC_PWRST_D3);
3329 #ifdef CONFIG_SND_HDA_POWER_SAVE
3330 snd_hda_update_power_acct(codec);
3331 cancel_delayed_work(&codec->power_work);
3332 codec->power_on = 0;
3333 codec->power_transition = 0;
3334 codec->power_jiffies = jiffies;
3335 #endif
3339 * kick up codec; used both from PM and power-save
3341 static void hda_call_codec_resume(struct hda_codec *codec)
3343 hda_set_power_state(codec,
3344 codec->afg ? codec->afg : codec->mfg,
3345 AC_PWRST_D0);
3346 restore_pincfgs(codec); /* restore all current pin configs */
3347 restore_shutup_pins(codec);
3348 hda_exec_init_verbs(codec);
3349 if (codec->patch_ops.resume)
3350 codec->patch_ops.resume(codec);
3351 else {
3352 if (codec->patch_ops.init)
3353 codec->patch_ops.init(codec);
3354 snd_hda_codec_resume_amp(codec);
3355 snd_hda_codec_resume_cache(codec);
3358 #endif /* CONFIG_PM */
3362 * snd_hda_build_controls - build mixer controls
3363 * @bus: the BUS
3365 * Creates mixer controls for each codec included in the bus.
3367 * Returns 0 if successful, otherwise a negative error code.
3369 int /*__devinit*/ snd_hda_build_controls(struct hda_bus *bus)
3371 struct hda_codec *codec;
3373 list_for_each_entry(codec, &bus->codec_list, list) {
3374 int err = snd_hda_codec_build_controls(codec);
3375 if (err < 0) {
3376 printk(KERN_ERR "hda_codec: cannot build controls "
3377 "for #%d (error %d)\n", codec->addr, err);
3378 err = snd_hda_codec_reset(codec);
3379 if (err < 0) {
3380 printk(KERN_ERR
3381 "hda_codec: cannot revert codec\n");
3382 return err;
3386 return 0;
3388 EXPORT_SYMBOL_HDA(snd_hda_build_controls);
3390 int snd_hda_codec_build_controls(struct hda_codec *codec)
3392 int err = 0;
3393 hda_exec_init_verbs(codec);
3394 /* continue to initialize... */
3395 if (codec->patch_ops.init)
3396 err = codec->patch_ops.init(codec);
3397 if (!err && codec->patch_ops.build_controls)
3398 err = codec->patch_ops.build_controls(codec);
3399 if (err < 0)
3400 return err;
3401 return 0;
3405 * stream formats
3407 struct hda_rate_tbl {
3408 unsigned int hz;
3409 unsigned int alsa_bits;
3410 unsigned int hda_fmt;
3413 /* rate = base * mult / div */
3414 #define HDA_RATE(base, mult, div) \
3415 (AC_FMT_BASE_##base##K | (((mult) - 1) << AC_FMT_MULT_SHIFT) | \
3416 (((div) - 1) << AC_FMT_DIV_SHIFT))
3418 static struct hda_rate_tbl rate_bits[] = {
3419 /* rate in Hz, ALSA rate bitmask, HDA format value */
3421 /* autodetected value used in snd_hda_query_supported_pcm */
3422 { 8000, SNDRV_PCM_RATE_8000, HDA_RATE(48, 1, 6) },
3423 { 11025, SNDRV_PCM_RATE_11025, HDA_RATE(44, 1, 4) },
3424 { 16000, SNDRV_PCM_RATE_16000, HDA_RATE(48, 1, 3) },
3425 { 22050, SNDRV_PCM_RATE_22050, HDA_RATE(44, 1, 2) },
3426 { 32000, SNDRV_PCM_RATE_32000, HDA_RATE(48, 2, 3) },
3427 { 44100, SNDRV_PCM_RATE_44100, HDA_RATE(44, 1, 1) },
3428 { 48000, SNDRV_PCM_RATE_48000, HDA_RATE(48, 1, 1) },
3429 { 88200, SNDRV_PCM_RATE_88200, HDA_RATE(44, 2, 1) },
3430 { 96000, SNDRV_PCM_RATE_96000, HDA_RATE(48, 2, 1) },
3431 { 176400, SNDRV_PCM_RATE_176400, HDA_RATE(44, 4, 1) },
3432 { 192000, SNDRV_PCM_RATE_192000, HDA_RATE(48, 4, 1) },
3433 #define AC_PAR_PCM_RATE_BITS 11
3434 /* up to bits 10, 384kHZ isn't supported properly */
3436 /* not autodetected value */
3437 { 9600, SNDRV_PCM_RATE_KNOT, HDA_RATE(48, 1, 5) },
3439 { 0 } /* terminator */
3443 * snd_hda_calc_stream_format - calculate format bitset
3444 * @rate: the sample rate
3445 * @channels: the number of channels
3446 * @format: the PCM format (SNDRV_PCM_FORMAT_XXX)
3447 * @maxbps: the max. bps
3449 * Calculate the format bitset from the given rate, channels and th PCM format.
3451 * Return zero if invalid.
3453 unsigned int snd_hda_calc_stream_format(unsigned int rate,
3454 unsigned int channels,
3455 unsigned int format,
3456 unsigned int maxbps,
3457 unsigned short spdif_ctls)
3459 int i;
3460 unsigned int val = 0;
3462 for (i = 0; rate_bits[i].hz; i++)
3463 if (rate_bits[i].hz == rate) {
3464 val = rate_bits[i].hda_fmt;
3465 break;
3467 if (!rate_bits[i].hz) {
3468 snd_printdd("invalid rate %d\n", rate);
3469 return 0;
3472 if (channels == 0 || channels > 8) {
3473 snd_printdd("invalid channels %d\n", channels);
3474 return 0;
3476 val |= channels - 1;
3478 switch (snd_pcm_format_width(format)) {
3479 case 8:
3480 val |= AC_FMT_BITS_8;
3481 break;
3482 case 16:
3483 val |= AC_FMT_BITS_16;
3484 break;
3485 case 20:
3486 case 24:
3487 case 32:
3488 if (maxbps >= 32 || format == SNDRV_PCM_FORMAT_FLOAT_LE)
3489 val |= AC_FMT_BITS_32;
3490 else if (maxbps >= 24)
3491 val |= AC_FMT_BITS_24;
3492 else
3493 val |= AC_FMT_BITS_20;
3494 break;
3495 default:
3496 snd_printdd("invalid format width %d\n",
3497 snd_pcm_format_width(format));
3498 return 0;
3501 if (spdif_ctls & AC_DIG1_NONAUDIO)
3502 val |= AC_FMT_TYPE_NON_PCM;
3504 return val;
3506 EXPORT_SYMBOL_HDA(snd_hda_calc_stream_format);
3508 static unsigned int get_pcm_param(struct hda_codec *codec, hda_nid_t nid)
3510 unsigned int val = 0;
3511 if (nid != codec->afg &&
3512 (get_wcaps(codec, nid) & AC_WCAP_FORMAT_OVRD))
3513 val = snd_hda_param_read(codec, nid, AC_PAR_PCM);
3514 if (!val || val == -1)
3515 val = snd_hda_param_read(codec, codec->afg, AC_PAR_PCM);
3516 if (!val || val == -1)
3517 return 0;
3518 return val;
3521 static unsigned int query_pcm_param(struct hda_codec *codec, hda_nid_t nid)
3523 return query_caps_hash(codec, nid, HDA_HASH_PARPCM_KEY(nid),
3524 get_pcm_param);
3527 static unsigned int get_stream_param(struct hda_codec *codec, hda_nid_t nid)
3529 unsigned int streams = snd_hda_param_read(codec, nid, AC_PAR_STREAM);
3530 if (!streams || streams == -1)
3531 streams = snd_hda_param_read(codec, codec->afg, AC_PAR_STREAM);
3532 if (!streams || streams == -1)
3533 return 0;
3534 return streams;
3537 static unsigned int query_stream_param(struct hda_codec *codec, hda_nid_t nid)
3539 return query_caps_hash(codec, nid, HDA_HASH_PARSTR_KEY(nid),
3540 get_stream_param);
3544 * snd_hda_query_supported_pcm - query the supported PCM rates and formats
3545 * @codec: the HDA codec
3546 * @nid: NID to query
3547 * @ratesp: the pointer to store the detected rate bitflags
3548 * @formatsp: the pointer to store the detected formats
3549 * @bpsp: the pointer to store the detected format widths
3551 * Queries the supported PCM rates and formats. The NULL @ratesp, @formatsp
3552 * or @bsps argument is ignored.
3554 * Returns 0 if successful, otherwise a negative error code.
3556 int snd_hda_query_supported_pcm(struct hda_codec *codec, hda_nid_t nid,
3557 u32 *ratesp, u64 *formatsp, unsigned int *bpsp)
3559 unsigned int i, val, wcaps;
3561 wcaps = get_wcaps(codec, nid);
3562 val = query_pcm_param(codec, nid);
3564 if (ratesp) {
3565 u32 rates = 0;
3566 for (i = 0; i < AC_PAR_PCM_RATE_BITS; i++) {
3567 if (val & (1 << i))
3568 rates |= rate_bits[i].alsa_bits;
3570 if (rates == 0) {
3571 snd_printk(KERN_ERR "hda_codec: rates == 0 "
3572 "(nid=0x%x, val=0x%x, ovrd=%i)\n",
3573 nid, val,
3574 (wcaps & AC_WCAP_FORMAT_OVRD) ? 1 : 0);
3575 return -EIO;
3577 *ratesp = rates;
3580 if (formatsp || bpsp) {
3581 u64 formats = 0;
3582 unsigned int streams, bps;
3584 streams = query_stream_param(codec, nid);
3585 if (!streams)
3586 return -EIO;
3588 bps = 0;
3589 if (streams & AC_SUPFMT_PCM) {
3590 if (val & AC_SUPPCM_BITS_8) {
3591 formats |= SNDRV_PCM_FMTBIT_U8;
3592 bps = 8;
3594 if (val & AC_SUPPCM_BITS_16) {
3595 formats |= SNDRV_PCM_FMTBIT_S16_LE;
3596 bps = 16;
3598 if (wcaps & AC_WCAP_DIGITAL) {
3599 if (val & AC_SUPPCM_BITS_32)
3600 formats |= SNDRV_PCM_FMTBIT_IEC958_SUBFRAME_LE;
3601 if (val & (AC_SUPPCM_BITS_20|AC_SUPPCM_BITS_24))
3602 formats |= SNDRV_PCM_FMTBIT_S32_LE;
3603 if (val & AC_SUPPCM_BITS_24)
3604 bps = 24;
3605 else if (val & AC_SUPPCM_BITS_20)
3606 bps = 20;
3607 } else if (val & (AC_SUPPCM_BITS_20|AC_SUPPCM_BITS_24|
3608 AC_SUPPCM_BITS_32)) {
3609 formats |= SNDRV_PCM_FMTBIT_S32_LE;
3610 if (val & AC_SUPPCM_BITS_32)
3611 bps = 32;
3612 else if (val & AC_SUPPCM_BITS_24)
3613 bps = 24;
3614 else if (val & AC_SUPPCM_BITS_20)
3615 bps = 20;
3618 if (streams & AC_SUPFMT_FLOAT32) {
3619 formats |= SNDRV_PCM_FMTBIT_FLOAT_LE;
3620 if (!bps)
3621 bps = 32;
3623 if (streams == AC_SUPFMT_AC3) {
3624 /* should be exclusive */
3625 /* temporary hack: we have still no proper support
3626 * for the direct AC3 stream...
3628 formats |= SNDRV_PCM_FMTBIT_U8;
3629 bps = 8;
3631 if (formats == 0) {
3632 snd_printk(KERN_ERR "hda_codec: formats == 0 "
3633 "(nid=0x%x, val=0x%x, ovrd=%i, "
3634 "streams=0x%x)\n",
3635 nid, val,
3636 (wcaps & AC_WCAP_FORMAT_OVRD) ? 1 : 0,
3637 streams);
3638 return -EIO;
3640 if (formatsp)
3641 *formatsp = formats;
3642 if (bpsp)
3643 *bpsp = bps;
3646 return 0;
3648 EXPORT_SYMBOL_HDA(snd_hda_query_supported_pcm);
3651 * snd_hda_is_supported_format - Check the validity of the format
3652 * @codec: HD-audio codec
3653 * @nid: NID to check
3654 * @format: the HD-audio format value to check
3656 * Check whether the given node supports the format value.
3658 * Returns 1 if supported, 0 if not.
3660 int snd_hda_is_supported_format(struct hda_codec *codec, hda_nid_t nid,
3661 unsigned int format)
3663 int i;
3664 unsigned int val = 0, rate, stream;
3666 val = query_pcm_param(codec, nid);
3667 if (!val)
3668 return 0;
3670 rate = format & 0xff00;
3671 for (i = 0; i < AC_PAR_PCM_RATE_BITS; i++)
3672 if (rate_bits[i].hda_fmt == rate) {
3673 if (val & (1 << i))
3674 break;
3675 return 0;
3677 if (i >= AC_PAR_PCM_RATE_BITS)
3678 return 0;
3680 stream = query_stream_param(codec, nid);
3681 if (!stream)
3682 return 0;
3684 if (stream & AC_SUPFMT_PCM) {
3685 switch (format & 0xf0) {
3686 case 0x00:
3687 if (!(val & AC_SUPPCM_BITS_8))
3688 return 0;
3689 break;
3690 case 0x10:
3691 if (!(val & AC_SUPPCM_BITS_16))
3692 return 0;
3693 break;
3694 case 0x20:
3695 if (!(val & AC_SUPPCM_BITS_20))
3696 return 0;
3697 break;
3698 case 0x30:
3699 if (!(val & AC_SUPPCM_BITS_24))
3700 return 0;
3701 break;
3702 case 0x40:
3703 if (!(val & AC_SUPPCM_BITS_32))
3704 return 0;
3705 break;
3706 default:
3707 return 0;
3709 } else {
3710 /* FIXME: check for float32 and AC3? */
3713 return 1;
3715 EXPORT_SYMBOL_HDA(snd_hda_is_supported_format);
3718 * PCM stuff
3720 static int hda_pcm_default_open_close(struct hda_pcm_stream *hinfo,
3721 struct hda_codec *codec,
3722 struct snd_pcm_substream *substream)
3724 return 0;
3727 static int hda_pcm_default_prepare(struct hda_pcm_stream *hinfo,
3728 struct hda_codec *codec,
3729 unsigned int stream_tag,
3730 unsigned int format,
3731 struct snd_pcm_substream *substream)
3733 snd_hda_codec_setup_stream(codec, hinfo->nid, stream_tag, 0, format);
3734 return 0;
3737 static int hda_pcm_default_cleanup(struct hda_pcm_stream *hinfo,
3738 struct hda_codec *codec,
3739 struct snd_pcm_substream *substream)
3741 snd_hda_codec_cleanup_stream(codec, hinfo->nid);
3742 return 0;
3745 static int set_pcm_default_values(struct hda_codec *codec,
3746 struct hda_pcm_stream *info)
3748 int err;
3750 /* query support PCM information from the given NID */
3751 if (info->nid && (!info->rates || !info->formats)) {
3752 err = snd_hda_query_supported_pcm(codec, info->nid,
3753 info->rates ? NULL : &info->rates,
3754 info->formats ? NULL : &info->formats,
3755 info->maxbps ? NULL : &info->maxbps);
3756 if (err < 0)
3757 return err;
3759 if (info->ops.open == NULL)
3760 info->ops.open = hda_pcm_default_open_close;
3761 if (info->ops.close == NULL)
3762 info->ops.close = hda_pcm_default_open_close;
3763 if (info->ops.prepare == NULL) {
3764 if (snd_BUG_ON(!info->nid))
3765 return -EINVAL;
3766 info->ops.prepare = hda_pcm_default_prepare;
3768 if (info->ops.cleanup == NULL) {
3769 if (snd_BUG_ON(!info->nid))
3770 return -EINVAL;
3771 info->ops.cleanup = hda_pcm_default_cleanup;
3773 return 0;
3777 * codec prepare/cleanup entries
3779 int snd_hda_codec_prepare(struct hda_codec *codec,
3780 struct hda_pcm_stream *hinfo,
3781 unsigned int stream,
3782 unsigned int format,
3783 struct snd_pcm_substream *substream)
3785 int ret;
3786 mutex_lock(&codec->bus->prepare_mutex);
3787 ret = hinfo->ops.prepare(hinfo, codec, stream, format, substream);
3788 if (ret >= 0)
3789 purify_inactive_streams(codec);
3790 mutex_unlock(&codec->bus->prepare_mutex);
3791 return ret;
3793 EXPORT_SYMBOL_HDA(snd_hda_codec_prepare);
3795 void snd_hda_codec_cleanup(struct hda_codec *codec,
3796 struct hda_pcm_stream *hinfo,
3797 struct snd_pcm_substream *substream)
3799 mutex_lock(&codec->bus->prepare_mutex);
3800 hinfo->ops.cleanup(hinfo, codec, substream);
3801 mutex_unlock(&codec->bus->prepare_mutex);
3803 EXPORT_SYMBOL_HDA(snd_hda_codec_cleanup);
3805 /* global */
3806 const char *snd_hda_pcm_type_name[HDA_PCM_NTYPES] = {
3807 "Audio", "SPDIF", "HDMI", "Modem"
3811 * get the empty PCM device number to assign
3813 * note the max device number is limited by HDA_MAX_PCMS, currently 10
3815 static int get_empty_pcm_device(struct hda_bus *bus, int type)
3817 /* audio device indices; not linear to keep compatibility */
3818 static int audio_idx[HDA_PCM_NTYPES][5] = {
3819 [HDA_PCM_TYPE_AUDIO] = { 0, 2, 4, 5, -1 },
3820 [HDA_PCM_TYPE_SPDIF] = { 1, -1 },
3821 [HDA_PCM_TYPE_HDMI] = { 3, 7, 8, 9, -1 },
3822 [HDA_PCM_TYPE_MODEM] = { 6, -1 },
3824 int i;
3826 if (type >= HDA_PCM_NTYPES) {
3827 snd_printk(KERN_WARNING "Invalid PCM type %d\n", type);
3828 return -EINVAL;
3831 for (i = 0; audio_idx[type][i] >= 0 ; i++)
3832 if (!test_and_set_bit(audio_idx[type][i], bus->pcm_dev_bits))
3833 return audio_idx[type][i];
3835 snd_printk(KERN_WARNING "Too many %s devices\n",
3836 snd_hda_pcm_type_name[type]);
3837 return -EAGAIN;
3841 * attach a new PCM stream
3843 static int snd_hda_attach_pcm(struct hda_codec *codec, struct hda_pcm *pcm)
3845 struct hda_bus *bus = codec->bus;
3846 struct hda_pcm_stream *info;
3847 int stream, err;
3849 if (snd_BUG_ON(!pcm->name))
3850 return -EINVAL;
3851 for (stream = 0; stream < 2; stream++) {
3852 info = &pcm->stream[stream];
3853 if (info->substreams) {
3854 err = set_pcm_default_values(codec, info);
3855 if (err < 0)
3856 return err;
3859 return bus->ops.attach_pcm(bus, codec, pcm);
3862 /* assign all PCMs of the given codec */
3863 int snd_hda_codec_build_pcms(struct hda_codec *codec)
3865 unsigned int pcm;
3866 int err;
3868 if (!codec->num_pcms) {
3869 if (!codec->patch_ops.build_pcms)
3870 return 0;
3871 err = codec->patch_ops.build_pcms(codec);
3872 if (err < 0) {
3873 printk(KERN_ERR "hda_codec: cannot build PCMs"
3874 "for #%d (error %d)\n", codec->addr, err);
3875 err = snd_hda_codec_reset(codec);
3876 if (err < 0) {
3877 printk(KERN_ERR
3878 "hda_codec: cannot revert codec\n");
3879 return err;
3883 for (pcm = 0; pcm < codec->num_pcms; pcm++) {
3884 struct hda_pcm *cpcm = &codec->pcm_info[pcm];
3885 int dev;
3887 if (!cpcm->stream[0].substreams && !cpcm->stream[1].substreams)
3888 continue; /* no substreams assigned */
3890 if (!cpcm->pcm) {
3891 dev = get_empty_pcm_device(codec->bus, cpcm->pcm_type);
3892 if (dev < 0)
3893 continue; /* no fatal error */
3894 cpcm->device = dev;
3895 err = snd_hda_attach_pcm(codec, cpcm);
3896 if (err < 0) {
3897 printk(KERN_ERR "hda_codec: cannot attach "
3898 "PCM stream %d for codec #%d\n",
3899 dev, codec->addr);
3900 continue; /* no fatal error */
3904 return 0;
3908 * snd_hda_build_pcms - build PCM information
3909 * @bus: the BUS
3911 * Create PCM information for each codec included in the bus.
3913 * The build_pcms codec patch is requested to set up codec->num_pcms and
3914 * codec->pcm_info properly. The array is referred by the top-level driver
3915 * to create its PCM instances.
3916 * The allocated codec->pcm_info should be released in codec->patch_ops.free
3917 * callback.
3919 * At least, substreams, channels_min and channels_max must be filled for
3920 * each stream. substreams = 0 indicates that the stream doesn't exist.
3921 * When rates and/or formats are zero, the supported values are queried
3922 * from the given nid. The nid is used also by the default ops.prepare
3923 * and ops.cleanup callbacks.
3925 * The driver needs to call ops.open in its open callback. Similarly,
3926 * ops.close is supposed to be called in the close callback.
3927 * ops.prepare should be called in the prepare or hw_params callback
3928 * with the proper parameters for set up.
3929 * ops.cleanup should be called in hw_free for clean up of streams.
3931 * This function returns 0 if successful, or a negative error code.
3933 int __devinit snd_hda_build_pcms(struct hda_bus *bus)
3935 struct hda_codec *codec;
3937 list_for_each_entry(codec, &bus->codec_list, list) {
3938 int err = snd_hda_codec_build_pcms(codec);
3939 if (err < 0)
3940 return err;
3942 return 0;
3944 EXPORT_SYMBOL_HDA(snd_hda_build_pcms);
3947 * snd_hda_check_board_config - compare the current codec with the config table
3948 * @codec: the HDA codec
3949 * @num_configs: number of config enums
3950 * @models: array of model name strings
3951 * @tbl: configuration table, terminated by null entries
3953 * Compares the modelname or PCI subsystem id of the current codec with the
3954 * given configuration table. If a matching entry is found, returns its
3955 * config value (supposed to be 0 or positive).
3957 * If no entries are matching, the function returns a negative value.
3959 int snd_hda_check_board_config(struct hda_codec *codec,
3960 int num_configs, const char * const *models,
3961 const struct snd_pci_quirk *tbl)
3963 if (codec->modelname && models) {
3964 int i;
3965 for (i = 0; i < num_configs; i++) {
3966 if (models[i] &&
3967 !strcmp(codec->modelname, models[i])) {
3968 snd_printd(KERN_INFO "hda_codec: model '%s' is "
3969 "selected\n", models[i]);
3970 return i;
3975 if (!codec->bus->pci || !tbl)
3976 return -1;
3978 tbl = snd_pci_quirk_lookup(codec->bus->pci, tbl);
3979 if (!tbl)
3980 return -1;
3981 if (tbl->value >= 0 && tbl->value < num_configs) {
3982 #ifdef CONFIG_SND_DEBUG_VERBOSE
3983 char tmp[10];
3984 const char *model = NULL;
3985 if (models)
3986 model = models[tbl->value];
3987 if (!model) {
3988 sprintf(tmp, "#%d", tbl->value);
3989 model = tmp;
3991 snd_printdd(KERN_INFO "hda_codec: model '%s' is selected "
3992 "for config %x:%x (%s)\n",
3993 model, tbl->subvendor, tbl->subdevice,
3994 (tbl->name ? tbl->name : "Unknown device"));
3995 #endif
3996 return tbl->value;
3998 return -1;
4000 EXPORT_SYMBOL_HDA(snd_hda_check_board_config);
4003 * snd_hda_check_board_codec_sid_config - compare the current codec
4004 subsystem ID with the
4005 config table
4007 This is important for Gateway notebooks with SB450 HDA Audio
4008 where the vendor ID of the PCI device is:
4009 ATI Technologies Inc SB450 HDA Audio [1002:437b]
4010 and the vendor/subvendor are found only at the codec.
4012 * @codec: the HDA codec
4013 * @num_configs: number of config enums
4014 * @models: array of model name strings
4015 * @tbl: configuration table, terminated by null entries
4017 * Compares the modelname or PCI subsystem id of the current codec with the
4018 * given configuration table. If a matching entry is found, returns its
4019 * config value (supposed to be 0 or positive).
4021 * If no entries are matching, the function returns a negative value.
4023 int snd_hda_check_board_codec_sid_config(struct hda_codec *codec,
4024 int num_configs, const char * const *models,
4025 const struct snd_pci_quirk *tbl)
4027 const struct snd_pci_quirk *q;
4029 /* Search for codec ID */
4030 for (q = tbl; q->subvendor; q++) {
4031 unsigned long vendorid = (q->subdevice) | (q->subvendor << 16);
4033 if (vendorid == codec->subsystem_id)
4034 break;
4037 if (!q->subvendor)
4038 return -1;
4040 tbl = q;
4042 if (tbl->value >= 0 && tbl->value < num_configs) {
4043 #ifdef CONFIG_SND_DEBUG_VERBOSE
4044 char tmp[10];
4045 const char *model = NULL;
4046 if (models)
4047 model = models[tbl->value];
4048 if (!model) {
4049 sprintf(tmp, "#%d", tbl->value);
4050 model = tmp;
4052 snd_printdd(KERN_INFO "hda_codec: model '%s' is selected "
4053 "for config %x:%x (%s)\n",
4054 model, tbl->subvendor, tbl->subdevice,
4055 (tbl->name ? tbl->name : "Unknown device"));
4056 #endif
4057 return tbl->value;
4059 return -1;
4061 EXPORT_SYMBOL_HDA(snd_hda_check_board_codec_sid_config);
4064 * snd_hda_add_new_ctls - create controls from the array
4065 * @codec: the HDA codec
4066 * @knew: the array of struct snd_kcontrol_new
4068 * This helper function creates and add new controls in the given array.
4069 * The array must be terminated with an empty entry as terminator.
4071 * Returns 0 if successful, or a negative error code.
4073 int snd_hda_add_new_ctls(struct hda_codec *codec,
4074 const struct snd_kcontrol_new *knew)
4076 int err;
4078 for (; knew->name; knew++) {
4079 struct snd_kcontrol *kctl;
4080 int addr = 0, idx = 0;
4081 if (knew->iface == -1) /* skip this codec private value */
4082 continue;
4083 for (;;) {
4084 kctl = snd_ctl_new1(knew, codec);
4085 if (!kctl)
4086 return -ENOMEM;
4087 if (addr > 0)
4088 kctl->id.device = addr;
4089 if (idx > 0)
4090 kctl->id.index = idx;
4091 err = snd_hda_ctl_add(codec, 0, kctl);
4092 if (!err)
4093 break;
4094 /* try first with another device index corresponding to
4095 * the codec addr; if it still fails (or it's the
4096 * primary codec), then try another control index
4098 if (!addr && codec->addr)
4099 addr = codec->addr;
4100 else if (!idx && !knew->index) {
4101 idx = find_empty_mixer_ctl_idx(codec,
4102 knew->name);
4103 if (idx <= 0)
4104 return err;
4105 } else
4106 return err;
4109 return 0;
4111 EXPORT_SYMBOL_HDA(snd_hda_add_new_ctls);
4113 #ifdef CONFIG_SND_HDA_POWER_SAVE
4114 static void hda_power_work(struct work_struct *work)
4116 struct hda_codec *codec =
4117 container_of(work, struct hda_codec, power_work.work);
4118 struct hda_bus *bus = codec->bus;
4120 if (!codec->power_on || codec->power_count) {
4121 codec->power_transition = 0;
4122 return;
4125 trace_hda_power_down(codec);
4126 hda_call_codec_suspend(codec);
4127 if (bus->ops.pm_notify)
4128 bus->ops.pm_notify(bus);
4131 static void hda_keep_power_on(struct hda_codec *codec)
4133 codec->power_count++;
4134 codec->power_on = 1;
4135 codec->power_jiffies = jiffies;
4138 /* update the power on/off account with the current jiffies */
4139 void snd_hda_update_power_acct(struct hda_codec *codec)
4141 unsigned long delta = jiffies - codec->power_jiffies;
4142 if (codec->power_on)
4143 codec->power_on_acct += delta;
4144 else
4145 codec->power_off_acct += delta;
4146 codec->power_jiffies += delta;
4150 * snd_hda_power_up - Power-up the codec
4151 * @codec: HD-audio codec
4153 * Increment the power-up counter and power up the hardware really when
4154 * not turned on yet.
4156 void snd_hda_power_up(struct hda_codec *codec)
4158 struct hda_bus *bus = codec->bus;
4160 codec->power_count++;
4161 if (codec->power_on || codec->power_transition)
4162 return;
4164 trace_hda_power_up(codec);
4165 snd_hda_update_power_acct(codec);
4166 codec->power_on = 1;
4167 codec->power_jiffies = jiffies;
4168 if (bus->ops.pm_notify)
4169 bus->ops.pm_notify(bus);
4170 hda_call_codec_resume(codec);
4171 cancel_delayed_work(&codec->power_work);
4172 codec->power_transition = 0;
4174 EXPORT_SYMBOL_HDA(snd_hda_power_up);
4176 #define power_save(codec) \
4177 ((codec)->bus->power_save ? *(codec)->bus->power_save : 0)
4180 * snd_hda_power_down - Power-down the codec
4181 * @codec: HD-audio codec
4183 * Decrement the power-up counter and schedules the power-off work if
4184 * the counter rearches to zero.
4186 void snd_hda_power_down(struct hda_codec *codec)
4188 --codec->power_count;
4189 if (!codec->power_on || codec->power_count || codec->power_transition)
4190 return;
4191 if (power_save(codec)) {
4192 codec->power_transition = 1; /* avoid reentrance */
4193 queue_delayed_work(codec->bus->workq, &codec->power_work,
4194 msecs_to_jiffies(power_save(codec) * 1000));
4197 EXPORT_SYMBOL_HDA(snd_hda_power_down);
4200 * snd_hda_check_amp_list_power - Check the amp list and update the power
4201 * @codec: HD-audio codec
4202 * @check: the object containing an AMP list and the status
4203 * @nid: NID to check / update
4205 * Check whether the given NID is in the amp list. If it's in the list,
4206 * check the current AMP status, and update the the power-status according
4207 * to the mute status.
4209 * This function is supposed to be set or called from the check_power_status
4210 * patch ops.
4212 int snd_hda_check_amp_list_power(struct hda_codec *codec,
4213 struct hda_loopback_check *check,
4214 hda_nid_t nid)
4216 const struct hda_amp_list *p;
4217 int ch, v;
4219 if (!check->amplist)
4220 return 0;
4221 for (p = check->amplist; p->nid; p++) {
4222 if (p->nid == nid)
4223 break;
4225 if (!p->nid)
4226 return 0; /* nothing changed */
4228 for (p = check->amplist; p->nid; p++) {
4229 for (ch = 0; ch < 2; ch++) {
4230 v = snd_hda_codec_amp_read(codec, p->nid, ch, p->dir,
4231 p->idx);
4232 if (!(v & HDA_AMP_MUTE) && v > 0) {
4233 if (!check->power_on) {
4234 check->power_on = 1;
4235 snd_hda_power_up(codec);
4237 return 1;
4241 if (check->power_on) {
4242 check->power_on = 0;
4243 snd_hda_power_down(codec);
4245 return 0;
4247 EXPORT_SYMBOL_HDA(snd_hda_check_amp_list_power);
4248 #endif
4251 * Channel mode helper
4255 * snd_hda_ch_mode_info - Info callback helper for the channel mode enum
4257 int snd_hda_ch_mode_info(struct hda_codec *codec,
4258 struct snd_ctl_elem_info *uinfo,
4259 const struct hda_channel_mode *chmode,
4260 int num_chmodes)
4262 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
4263 uinfo->count = 1;
4264 uinfo->value.enumerated.items = num_chmodes;
4265 if (uinfo->value.enumerated.item >= num_chmodes)
4266 uinfo->value.enumerated.item = num_chmodes - 1;
4267 sprintf(uinfo->value.enumerated.name, "%dch",
4268 chmode[uinfo->value.enumerated.item].channels);
4269 return 0;
4271 EXPORT_SYMBOL_HDA(snd_hda_ch_mode_info);
4274 * snd_hda_ch_mode_get - Get callback helper for the channel mode enum
4276 int snd_hda_ch_mode_get(struct hda_codec *codec,
4277 struct snd_ctl_elem_value *ucontrol,
4278 const struct hda_channel_mode *chmode,
4279 int num_chmodes,
4280 int max_channels)
4282 int i;
4284 for (i = 0; i < num_chmodes; i++) {
4285 if (max_channels == chmode[i].channels) {
4286 ucontrol->value.enumerated.item[0] = i;
4287 break;
4290 return 0;
4292 EXPORT_SYMBOL_HDA(snd_hda_ch_mode_get);
4295 * snd_hda_ch_mode_put - Put callback helper for the channel mode enum
4297 int snd_hda_ch_mode_put(struct hda_codec *codec,
4298 struct snd_ctl_elem_value *ucontrol,
4299 const struct hda_channel_mode *chmode,
4300 int num_chmodes,
4301 int *max_channelsp)
4303 unsigned int mode;
4305 mode = ucontrol->value.enumerated.item[0];
4306 if (mode >= num_chmodes)
4307 return -EINVAL;
4308 if (*max_channelsp == chmode[mode].channels)
4309 return 0;
4310 /* change the current channel setting */
4311 *max_channelsp = chmode[mode].channels;
4312 if (chmode[mode].sequence)
4313 snd_hda_sequence_write_cache(codec, chmode[mode].sequence);
4314 return 1;
4316 EXPORT_SYMBOL_HDA(snd_hda_ch_mode_put);
4319 * input MUX helper
4323 * snd_hda_input_mux_info_info - Info callback helper for the input-mux enum
4325 int snd_hda_input_mux_info(const struct hda_input_mux *imux,
4326 struct snd_ctl_elem_info *uinfo)
4328 unsigned int index;
4330 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
4331 uinfo->count = 1;
4332 uinfo->value.enumerated.items = imux->num_items;
4333 if (!imux->num_items)
4334 return 0;
4335 index = uinfo->value.enumerated.item;
4336 if (index >= imux->num_items)
4337 index = imux->num_items - 1;
4338 strcpy(uinfo->value.enumerated.name, imux->items[index].label);
4339 return 0;
4341 EXPORT_SYMBOL_HDA(snd_hda_input_mux_info);
4344 * snd_hda_input_mux_info_put - Put callback helper for the input-mux enum
4346 int snd_hda_input_mux_put(struct hda_codec *codec,
4347 const struct hda_input_mux *imux,
4348 struct snd_ctl_elem_value *ucontrol,
4349 hda_nid_t nid,
4350 unsigned int *cur_val)
4352 unsigned int idx;
4354 if (!imux->num_items)
4355 return 0;
4356 idx = ucontrol->value.enumerated.item[0];
4357 if (idx >= imux->num_items)
4358 idx = imux->num_items - 1;
4359 if (*cur_val == idx)
4360 return 0;
4361 snd_hda_codec_write_cache(codec, nid, 0, AC_VERB_SET_CONNECT_SEL,
4362 imux->items[idx].index);
4363 *cur_val = idx;
4364 return 1;
4366 EXPORT_SYMBOL_HDA(snd_hda_input_mux_put);
4370 * Multi-channel / digital-out PCM helper functions
4373 /* setup SPDIF output stream */
4374 static void setup_dig_out_stream(struct hda_codec *codec, hda_nid_t nid,
4375 unsigned int stream_tag, unsigned int format)
4377 struct hda_spdif_out *spdif = snd_hda_spdif_out_of_nid(codec, nid);
4379 /* turn off SPDIF once; otherwise the IEC958 bits won't be updated */
4380 if (codec->spdif_status_reset && (spdif->ctls & AC_DIG1_ENABLE))
4381 set_dig_out_convert(codec, nid,
4382 spdif->ctls & ~AC_DIG1_ENABLE & 0xff,
4383 -1);
4384 snd_hda_codec_setup_stream(codec, nid, stream_tag, 0, format);
4385 if (codec->slave_dig_outs) {
4386 const hda_nid_t *d;
4387 for (d = codec->slave_dig_outs; *d; d++)
4388 snd_hda_codec_setup_stream(codec, *d, stream_tag, 0,
4389 format);
4391 /* turn on again (if needed) */
4392 if (codec->spdif_status_reset && (spdif->ctls & AC_DIG1_ENABLE))
4393 set_dig_out_convert(codec, nid,
4394 spdif->ctls & 0xff, -1);
4397 static void cleanup_dig_out_stream(struct hda_codec *codec, hda_nid_t nid)
4399 snd_hda_codec_cleanup_stream(codec, nid);
4400 if (codec->slave_dig_outs) {
4401 const hda_nid_t *d;
4402 for (d = codec->slave_dig_outs; *d; d++)
4403 snd_hda_codec_cleanup_stream(codec, *d);
4408 * snd_hda_bus_reboot_notify - call the reboot notifier of each codec
4409 * @bus: HD-audio bus
4411 void snd_hda_bus_reboot_notify(struct hda_bus *bus)
4413 struct hda_codec *codec;
4415 if (!bus)
4416 return;
4417 list_for_each_entry(codec, &bus->codec_list, list) {
4418 if (hda_codec_is_power_on(codec) &&
4419 codec->patch_ops.reboot_notify)
4420 codec->patch_ops.reboot_notify(codec);
4423 EXPORT_SYMBOL_HDA(snd_hda_bus_reboot_notify);
4426 * snd_hda_multi_out_dig_open - open the digital out in the exclusive mode
4428 int snd_hda_multi_out_dig_open(struct hda_codec *codec,
4429 struct hda_multi_out *mout)
4431 mutex_lock(&codec->spdif_mutex);
4432 if (mout->dig_out_used == HDA_DIG_ANALOG_DUP)
4433 /* already opened as analog dup; reset it once */
4434 cleanup_dig_out_stream(codec, mout->dig_out_nid);
4435 mout->dig_out_used = HDA_DIG_EXCLUSIVE;
4436 mutex_unlock(&codec->spdif_mutex);
4437 return 0;
4439 EXPORT_SYMBOL_HDA(snd_hda_multi_out_dig_open);
4442 * snd_hda_multi_out_dig_prepare - prepare the digital out stream
4444 int snd_hda_multi_out_dig_prepare(struct hda_codec *codec,
4445 struct hda_multi_out *mout,
4446 unsigned int stream_tag,
4447 unsigned int format,
4448 struct snd_pcm_substream *substream)
4450 mutex_lock(&codec->spdif_mutex);
4451 setup_dig_out_stream(codec, mout->dig_out_nid, stream_tag, format);
4452 mutex_unlock(&codec->spdif_mutex);
4453 return 0;
4455 EXPORT_SYMBOL_HDA(snd_hda_multi_out_dig_prepare);
4458 * snd_hda_multi_out_dig_cleanup - clean-up the digital out stream
4460 int snd_hda_multi_out_dig_cleanup(struct hda_codec *codec,
4461 struct hda_multi_out *mout)
4463 mutex_lock(&codec->spdif_mutex);
4464 cleanup_dig_out_stream(codec, mout->dig_out_nid);
4465 mutex_unlock(&codec->spdif_mutex);
4466 return 0;
4468 EXPORT_SYMBOL_HDA(snd_hda_multi_out_dig_cleanup);
4471 * snd_hda_multi_out_dig_close - release the digital out stream
4473 int snd_hda_multi_out_dig_close(struct hda_codec *codec,
4474 struct hda_multi_out *mout)
4476 mutex_lock(&codec->spdif_mutex);
4477 mout->dig_out_used = 0;
4478 mutex_unlock(&codec->spdif_mutex);
4479 return 0;
4481 EXPORT_SYMBOL_HDA(snd_hda_multi_out_dig_close);
4484 * snd_hda_multi_out_analog_open - open analog outputs
4486 * Open analog outputs and set up the hw-constraints.
4487 * If the digital outputs can be opened as slave, open the digital
4488 * outputs, too.
4490 int snd_hda_multi_out_analog_open(struct hda_codec *codec,
4491 struct hda_multi_out *mout,
4492 struct snd_pcm_substream *substream,
4493 struct hda_pcm_stream *hinfo)
4495 struct snd_pcm_runtime *runtime = substream->runtime;
4496 runtime->hw.channels_max = mout->max_channels;
4497 if (mout->dig_out_nid) {
4498 if (!mout->analog_rates) {
4499 mout->analog_rates = hinfo->rates;
4500 mout->analog_formats = hinfo->formats;
4501 mout->analog_maxbps = hinfo->maxbps;
4502 } else {
4503 runtime->hw.rates = mout->analog_rates;
4504 runtime->hw.formats = mout->analog_formats;
4505 hinfo->maxbps = mout->analog_maxbps;
4507 if (!mout->spdif_rates) {
4508 snd_hda_query_supported_pcm(codec, mout->dig_out_nid,
4509 &mout->spdif_rates,
4510 &mout->spdif_formats,
4511 &mout->spdif_maxbps);
4513 mutex_lock(&codec->spdif_mutex);
4514 if (mout->share_spdif) {
4515 if ((runtime->hw.rates & mout->spdif_rates) &&
4516 (runtime->hw.formats & mout->spdif_formats)) {
4517 runtime->hw.rates &= mout->spdif_rates;
4518 runtime->hw.formats &= mout->spdif_formats;
4519 if (mout->spdif_maxbps < hinfo->maxbps)
4520 hinfo->maxbps = mout->spdif_maxbps;
4521 } else {
4522 mout->share_spdif = 0;
4523 /* FIXME: need notify? */
4526 mutex_unlock(&codec->spdif_mutex);
4528 return snd_pcm_hw_constraint_step(substream->runtime, 0,
4529 SNDRV_PCM_HW_PARAM_CHANNELS, 2);
4531 EXPORT_SYMBOL_HDA(snd_hda_multi_out_analog_open);
4534 * snd_hda_multi_out_analog_prepare - Preapre the analog outputs.
4536 * Set up the i/o for analog out.
4537 * When the digital out is available, copy the front out to digital out, too.
4539 int snd_hda_multi_out_analog_prepare(struct hda_codec *codec,
4540 struct hda_multi_out *mout,
4541 unsigned int stream_tag,
4542 unsigned int format,
4543 struct snd_pcm_substream *substream)
4545 const hda_nid_t *nids = mout->dac_nids;
4546 int chs = substream->runtime->channels;
4547 struct hda_spdif_out *spdif =
4548 snd_hda_spdif_out_of_nid(codec, mout->dig_out_nid);
4549 int i;
4551 mutex_lock(&codec->spdif_mutex);
4552 if (mout->dig_out_nid && mout->share_spdif &&
4553 mout->dig_out_used != HDA_DIG_EXCLUSIVE) {
4554 if (chs == 2 &&
4555 snd_hda_is_supported_format(codec, mout->dig_out_nid,
4556 format) &&
4557 !(spdif->status & IEC958_AES0_NONAUDIO)) {
4558 mout->dig_out_used = HDA_DIG_ANALOG_DUP;
4559 setup_dig_out_stream(codec, mout->dig_out_nid,
4560 stream_tag, format);
4561 } else {
4562 mout->dig_out_used = 0;
4563 cleanup_dig_out_stream(codec, mout->dig_out_nid);
4566 mutex_unlock(&codec->spdif_mutex);
4568 /* front */
4569 snd_hda_codec_setup_stream(codec, nids[HDA_FRONT], stream_tag,
4570 0, format);
4571 if (!mout->no_share_stream &&
4572 mout->hp_nid && mout->hp_nid != nids[HDA_FRONT])
4573 /* headphone out will just decode front left/right (stereo) */
4574 snd_hda_codec_setup_stream(codec, mout->hp_nid, stream_tag,
4575 0, format);
4576 /* extra outputs copied from front */
4577 for (i = 0; i < ARRAY_SIZE(mout->hp_out_nid); i++)
4578 if (!mout->no_share_stream && mout->hp_out_nid[i])
4579 snd_hda_codec_setup_stream(codec,
4580 mout->hp_out_nid[i],
4581 stream_tag, 0, format);
4582 for (i = 0; i < ARRAY_SIZE(mout->extra_out_nid); i++)
4583 if (!mout->no_share_stream && mout->extra_out_nid[i])
4584 snd_hda_codec_setup_stream(codec,
4585 mout->extra_out_nid[i],
4586 stream_tag, 0, format);
4588 /* surrounds */
4589 for (i = 1; i < mout->num_dacs; i++) {
4590 if (chs >= (i + 1) * 2) /* independent out */
4591 snd_hda_codec_setup_stream(codec, nids[i], stream_tag,
4592 i * 2, format);
4593 else if (!mout->no_share_stream) /* copy front */
4594 snd_hda_codec_setup_stream(codec, nids[i], stream_tag,
4595 0, format);
4597 return 0;
4599 EXPORT_SYMBOL_HDA(snd_hda_multi_out_analog_prepare);
4602 * snd_hda_multi_out_analog_cleanup - clean up the setting for analog out
4604 int snd_hda_multi_out_analog_cleanup(struct hda_codec *codec,
4605 struct hda_multi_out *mout)
4607 const hda_nid_t *nids = mout->dac_nids;
4608 int i;
4610 for (i = 0; i < mout->num_dacs; i++)
4611 snd_hda_codec_cleanup_stream(codec, nids[i]);
4612 if (mout->hp_nid)
4613 snd_hda_codec_cleanup_stream(codec, mout->hp_nid);
4614 for (i = 0; i < ARRAY_SIZE(mout->hp_out_nid); i++)
4615 if (mout->hp_out_nid[i])
4616 snd_hda_codec_cleanup_stream(codec,
4617 mout->hp_out_nid[i]);
4618 for (i = 0; i < ARRAY_SIZE(mout->extra_out_nid); i++)
4619 if (mout->extra_out_nid[i])
4620 snd_hda_codec_cleanup_stream(codec,
4621 mout->extra_out_nid[i]);
4622 mutex_lock(&codec->spdif_mutex);
4623 if (mout->dig_out_nid && mout->dig_out_used == HDA_DIG_ANALOG_DUP) {
4624 cleanup_dig_out_stream(codec, mout->dig_out_nid);
4625 mout->dig_out_used = 0;
4627 mutex_unlock(&codec->spdif_mutex);
4628 return 0;
4630 EXPORT_SYMBOL_HDA(snd_hda_multi_out_analog_cleanup);
4633 * Helper for automatic pin configuration
4636 static int is_in_nid_list(hda_nid_t nid, const hda_nid_t *list)
4638 for (; *list; list++)
4639 if (*list == nid)
4640 return 1;
4641 return 0;
4646 * Sort an associated group of pins according to their sequence numbers.
4648 static void sort_pins_by_sequence(hda_nid_t *pins, short *sequences,
4649 int num_pins)
4651 int i, j;
4652 short seq;
4653 hda_nid_t nid;
4655 for (i = 0; i < num_pins; i++) {
4656 for (j = i + 1; j < num_pins; j++) {
4657 if (sequences[i] > sequences[j]) {
4658 seq = sequences[i];
4659 sequences[i] = sequences[j];
4660 sequences[j] = seq;
4661 nid = pins[i];
4662 pins[i] = pins[j];
4663 pins[j] = nid;
4670 /* add the found input-pin to the cfg->inputs[] table */
4671 static void add_auto_cfg_input_pin(struct auto_pin_cfg *cfg, hda_nid_t nid,
4672 int type)
4674 if (cfg->num_inputs < AUTO_CFG_MAX_INS) {
4675 cfg->inputs[cfg->num_inputs].pin = nid;
4676 cfg->inputs[cfg->num_inputs].type = type;
4677 cfg->num_inputs++;
4681 /* sort inputs in the order of AUTO_PIN_* type */
4682 static void sort_autocfg_input_pins(struct auto_pin_cfg *cfg)
4684 int i, j;
4686 for (i = 0; i < cfg->num_inputs; i++) {
4687 for (j = i + 1; j < cfg->num_inputs; j++) {
4688 if (cfg->inputs[i].type > cfg->inputs[j].type) {
4689 struct auto_pin_cfg_item tmp;
4690 tmp = cfg->inputs[i];
4691 cfg->inputs[i] = cfg->inputs[j];
4692 cfg->inputs[j] = tmp;
4698 /* Reorder the surround channels
4699 * ALSA sequence is front/surr/clfe/side
4700 * HDA sequence is:
4701 * 4-ch: front/surr => OK as it is
4702 * 6-ch: front/clfe/surr
4703 * 8-ch: front/clfe/rear/side|fc
4705 static void reorder_outputs(unsigned int nums, hda_nid_t *pins)
4707 hda_nid_t nid;
4709 switch (nums) {
4710 case 3:
4711 case 4:
4712 nid = pins[1];
4713 pins[1] = pins[2];
4714 pins[2] = nid;
4715 break;
4720 * Parse all pin widgets and store the useful pin nids to cfg
4722 * The number of line-outs or any primary output is stored in line_outs,
4723 * and the corresponding output pins are assigned to line_out_pins[],
4724 * in the order of front, rear, CLFE, side, ...
4726 * If more extra outputs (speaker and headphone) are found, the pins are
4727 * assisnged to hp_pins[] and speaker_pins[], respectively. If no line-out jack
4728 * is detected, one of speaker of HP pins is assigned as the primary
4729 * output, i.e. to line_out_pins[0]. So, line_outs is always positive
4730 * if any analog output exists.
4732 * The analog input pins are assigned to inputs array.
4733 * The digital input/output pins are assigned to dig_in_pin and dig_out_pin,
4734 * respectively.
4736 int snd_hda_parse_pin_defcfg(struct hda_codec *codec,
4737 struct auto_pin_cfg *cfg,
4738 const hda_nid_t *ignore_nids,
4739 unsigned int cond_flags)
4741 hda_nid_t nid, end_nid;
4742 short seq, assoc_line_out;
4743 short sequences_line_out[ARRAY_SIZE(cfg->line_out_pins)];
4744 short sequences_speaker[ARRAY_SIZE(cfg->speaker_pins)];
4745 short sequences_hp[ARRAY_SIZE(cfg->hp_pins)];
4746 int i;
4748 memset(cfg, 0, sizeof(*cfg));
4750 memset(sequences_line_out, 0, sizeof(sequences_line_out));
4751 memset(sequences_speaker, 0, sizeof(sequences_speaker));
4752 memset(sequences_hp, 0, sizeof(sequences_hp));
4753 assoc_line_out = 0;
4755 end_nid = codec->start_nid + codec->num_nodes;
4756 for (nid = codec->start_nid; nid < end_nid; nid++) {
4757 unsigned int wid_caps = get_wcaps(codec, nid);
4758 unsigned int wid_type = get_wcaps_type(wid_caps);
4759 unsigned int def_conf;
4760 short assoc, loc, conn, dev;
4762 /* read all default configuration for pin complex */
4763 if (wid_type != AC_WID_PIN)
4764 continue;
4765 /* ignore the given nids (e.g. pc-beep returns error) */
4766 if (ignore_nids && is_in_nid_list(nid, ignore_nids))
4767 continue;
4769 def_conf = snd_hda_codec_get_pincfg(codec, nid);
4770 conn = get_defcfg_connect(def_conf);
4771 if (conn == AC_JACK_PORT_NONE)
4772 continue;
4773 loc = get_defcfg_location(def_conf);
4774 dev = get_defcfg_device(def_conf);
4776 /* workaround for buggy BIOS setups */
4777 if (dev == AC_JACK_LINE_OUT) {
4778 if (conn == AC_JACK_PORT_FIXED)
4779 dev = AC_JACK_SPEAKER;
4782 switch (dev) {
4783 case AC_JACK_LINE_OUT:
4784 seq = get_defcfg_sequence(def_conf);
4785 assoc = get_defcfg_association(def_conf);
4787 if (!(wid_caps & AC_WCAP_STEREO))
4788 if (!cfg->mono_out_pin)
4789 cfg->mono_out_pin = nid;
4790 if (!assoc)
4791 continue;
4792 if (!assoc_line_out)
4793 assoc_line_out = assoc;
4794 else if (assoc_line_out != assoc)
4795 continue;
4796 if (cfg->line_outs >= ARRAY_SIZE(cfg->line_out_pins))
4797 continue;
4798 cfg->line_out_pins[cfg->line_outs] = nid;
4799 sequences_line_out[cfg->line_outs] = seq;
4800 cfg->line_outs++;
4801 break;
4802 case AC_JACK_SPEAKER:
4803 seq = get_defcfg_sequence(def_conf);
4804 assoc = get_defcfg_association(def_conf);
4805 if (cfg->speaker_outs >= ARRAY_SIZE(cfg->speaker_pins))
4806 continue;
4807 cfg->speaker_pins[cfg->speaker_outs] = nid;
4808 sequences_speaker[cfg->speaker_outs] = (assoc << 4) | seq;
4809 cfg->speaker_outs++;
4810 break;
4811 case AC_JACK_HP_OUT:
4812 seq = get_defcfg_sequence(def_conf);
4813 assoc = get_defcfg_association(def_conf);
4814 if (cfg->hp_outs >= ARRAY_SIZE(cfg->hp_pins))
4815 continue;
4816 cfg->hp_pins[cfg->hp_outs] = nid;
4817 sequences_hp[cfg->hp_outs] = (assoc << 4) | seq;
4818 cfg->hp_outs++;
4819 break;
4820 case AC_JACK_MIC_IN:
4821 add_auto_cfg_input_pin(cfg, nid, AUTO_PIN_MIC);
4822 break;
4823 case AC_JACK_LINE_IN:
4824 add_auto_cfg_input_pin(cfg, nid, AUTO_PIN_LINE_IN);
4825 break;
4826 case AC_JACK_CD:
4827 add_auto_cfg_input_pin(cfg, nid, AUTO_PIN_CD);
4828 break;
4829 case AC_JACK_AUX:
4830 add_auto_cfg_input_pin(cfg, nid, AUTO_PIN_AUX);
4831 break;
4832 case AC_JACK_SPDIF_OUT:
4833 case AC_JACK_DIG_OTHER_OUT:
4834 if (cfg->dig_outs >= ARRAY_SIZE(cfg->dig_out_pins))
4835 continue;
4836 cfg->dig_out_pins[cfg->dig_outs] = nid;
4837 cfg->dig_out_type[cfg->dig_outs] =
4838 (loc == AC_JACK_LOC_HDMI) ?
4839 HDA_PCM_TYPE_HDMI : HDA_PCM_TYPE_SPDIF;
4840 cfg->dig_outs++;
4841 break;
4842 case AC_JACK_SPDIF_IN:
4843 case AC_JACK_DIG_OTHER_IN:
4844 cfg->dig_in_pin = nid;
4845 if (loc == AC_JACK_LOC_HDMI)
4846 cfg->dig_in_type = HDA_PCM_TYPE_HDMI;
4847 else
4848 cfg->dig_in_type = HDA_PCM_TYPE_SPDIF;
4849 break;
4853 /* FIX-UP:
4854 * If no line-out is defined but multiple HPs are found,
4855 * some of them might be the real line-outs.
4857 if (!cfg->line_outs && cfg->hp_outs > 1 &&
4858 !(cond_flags & HDA_PINCFG_NO_HP_FIXUP)) {
4859 int i = 0;
4860 while (i < cfg->hp_outs) {
4861 /* The real HPs should have the sequence 0x0f */
4862 if ((sequences_hp[i] & 0x0f) == 0x0f) {
4863 i++;
4864 continue;
4866 /* Move it to the line-out table */
4867 cfg->line_out_pins[cfg->line_outs] = cfg->hp_pins[i];
4868 sequences_line_out[cfg->line_outs] = sequences_hp[i];
4869 cfg->line_outs++;
4870 cfg->hp_outs--;
4871 memmove(cfg->hp_pins + i, cfg->hp_pins + i + 1,
4872 sizeof(cfg->hp_pins[0]) * (cfg->hp_outs - i));
4873 memmove(sequences_hp + i, sequences_hp + i + 1,
4874 sizeof(sequences_hp[0]) * (cfg->hp_outs - i));
4876 memset(cfg->hp_pins + cfg->hp_outs, 0,
4877 sizeof(hda_nid_t) * (AUTO_CFG_MAX_OUTS - cfg->hp_outs));
4878 if (!cfg->hp_outs)
4879 cfg->line_out_type = AUTO_PIN_HP_OUT;
4883 /* sort by sequence */
4884 sort_pins_by_sequence(cfg->line_out_pins, sequences_line_out,
4885 cfg->line_outs);
4886 sort_pins_by_sequence(cfg->speaker_pins, sequences_speaker,
4887 cfg->speaker_outs);
4888 sort_pins_by_sequence(cfg->hp_pins, sequences_hp,
4889 cfg->hp_outs);
4892 * FIX-UP: if no line-outs are detected, try to use speaker or HP pin
4893 * as a primary output
4895 if (!cfg->line_outs &&
4896 !(cond_flags & HDA_PINCFG_NO_LO_FIXUP)) {
4897 if (cfg->speaker_outs) {
4898 cfg->line_outs = cfg->speaker_outs;
4899 memcpy(cfg->line_out_pins, cfg->speaker_pins,
4900 sizeof(cfg->speaker_pins));
4901 cfg->speaker_outs = 0;
4902 memset(cfg->speaker_pins, 0, sizeof(cfg->speaker_pins));
4903 cfg->line_out_type = AUTO_PIN_SPEAKER_OUT;
4904 } else if (cfg->hp_outs) {
4905 cfg->line_outs = cfg->hp_outs;
4906 memcpy(cfg->line_out_pins, cfg->hp_pins,
4907 sizeof(cfg->hp_pins));
4908 cfg->hp_outs = 0;
4909 memset(cfg->hp_pins, 0, sizeof(cfg->hp_pins));
4910 cfg->line_out_type = AUTO_PIN_HP_OUT;
4914 reorder_outputs(cfg->line_outs, cfg->line_out_pins);
4915 reorder_outputs(cfg->hp_outs, cfg->hp_pins);
4916 reorder_outputs(cfg->speaker_outs, cfg->speaker_pins);
4918 sort_autocfg_input_pins(cfg);
4921 * debug prints of the parsed results
4923 snd_printd("autoconfig: line_outs=%d (0x%x/0x%x/0x%x/0x%x/0x%x) type:%s\n",
4924 cfg->line_outs, cfg->line_out_pins[0], cfg->line_out_pins[1],
4925 cfg->line_out_pins[2], cfg->line_out_pins[3],
4926 cfg->line_out_pins[4],
4927 cfg->line_out_type == AUTO_PIN_HP_OUT ? "hp" :
4928 (cfg->line_out_type == AUTO_PIN_SPEAKER_OUT ?
4929 "speaker" : "line"));
4930 snd_printd(" speaker_outs=%d (0x%x/0x%x/0x%x/0x%x/0x%x)\n",
4931 cfg->speaker_outs, cfg->speaker_pins[0],
4932 cfg->speaker_pins[1], cfg->speaker_pins[2],
4933 cfg->speaker_pins[3], cfg->speaker_pins[4]);
4934 snd_printd(" hp_outs=%d (0x%x/0x%x/0x%x/0x%x/0x%x)\n",
4935 cfg->hp_outs, cfg->hp_pins[0],
4936 cfg->hp_pins[1], cfg->hp_pins[2],
4937 cfg->hp_pins[3], cfg->hp_pins[4]);
4938 snd_printd(" mono: mono_out=0x%x\n", cfg->mono_out_pin);
4939 if (cfg->dig_outs)
4940 snd_printd(" dig-out=0x%x/0x%x\n",
4941 cfg->dig_out_pins[0], cfg->dig_out_pins[1]);
4942 snd_printd(" inputs:");
4943 for (i = 0; i < cfg->num_inputs; i++) {
4944 snd_printd(" %s=0x%x",
4945 hda_get_autocfg_input_label(codec, cfg, i),
4946 cfg->inputs[i].pin);
4948 snd_printd("\n");
4949 if (cfg->dig_in_pin)
4950 snd_printd(" dig-in=0x%x\n", cfg->dig_in_pin);
4952 return 0;
4954 EXPORT_SYMBOL_HDA(snd_hda_parse_pin_defcfg);
4956 int snd_hda_get_input_pin_attr(unsigned int def_conf)
4958 unsigned int loc = get_defcfg_location(def_conf);
4959 unsigned int conn = get_defcfg_connect(def_conf);
4960 if (conn == AC_JACK_PORT_NONE)
4961 return INPUT_PIN_ATTR_UNUSED;
4962 /* Windows may claim the internal mic to be BOTH, too */
4963 if (conn == AC_JACK_PORT_FIXED || conn == AC_JACK_PORT_BOTH)
4964 return INPUT_PIN_ATTR_INT;
4965 if ((loc & 0x30) == AC_JACK_LOC_INTERNAL)
4966 return INPUT_PIN_ATTR_INT;
4967 if ((loc & 0x30) == AC_JACK_LOC_SEPARATE)
4968 return INPUT_PIN_ATTR_DOCK;
4969 if (loc == AC_JACK_LOC_REAR)
4970 return INPUT_PIN_ATTR_REAR;
4971 if (loc == AC_JACK_LOC_FRONT)
4972 return INPUT_PIN_ATTR_FRONT;
4973 return INPUT_PIN_ATTR_NORMAL;
4975 EXPORT_SYMBOL_HDA(snd_hda_get_input_pin_attr);
4978 * hda_get_input_pin_label - Give a label for the given input pin
4980 * When check_location is true, the function checks the pin location
4981 * for mic and line-in pins, and set an appropriate prefix like "Front",
4982 * "Rear", "Internal".
4985 const char *hda_get_input_pin_label(struct hda_codec *codec, hda_nid_t pin,
4986 int check_location)
4988 unsigned int def_conf;
4989 static const char * const mic_names[] = {
4990 "Internal Mic", "Dock Mic", "Mic", "Front Mic", "Rear Mic",
4992 int attr;
4994 def_conf = snd_hda_codec_get_pincfg(codec, pin);
4996 switch (get_defcfg_device(def_conf)) {
4997 case AC_JACK_MIC_IN:
4998 if (!check_location)
4999 return "Mic";
5000 attr = snd_hda_get_input_pin_attr(def_conf);
5001 if (!attr)
5002 return "None";
5003 return mic_names[attr - 1];
5004 case AC_JACK_LINE_IN:
5005 if (!check_location)
5006 return "Line";
5007 attr = snd_hda_get_input_pin_attr(def_conf);
5008 if (!attr)
5009 return "None";
5010 if (attr == INPUT_PIN_ATTR_DOCK)
5011 return "Dock Line";
5012 return "Line";
5013 case AC_JACK_AUX:
5014 return "Aux";
5015 case AC_JACK_CD:
5016 return "CD";
5017 case AC_JACK_SPDIF_IN:
5018 return "SPDIF In";
5019 case AC_JACK_DIG_OTHER_IN:
5020 return "Digital In";
5021 default:
5022 return "Misc";
5025 EXPORT_SYMBOL_HDA(hda_get_input_pin_label);
5027 /* Check whether the location prefix needs to be added to the label.
5028 * If all mic-jacks are in the same location (e.g. rear panel), we don't
5029 * have to put "Front" prefix to each label. In such a case, returns false.
5031 static int check_mic_location_need(struct hda_codec *codec,
5032 const struct auto_pin_cfg *cfg,
5033 int input)
5035 unsigned int defc;
5036 int i, attr, attr2;
5038 defc = snd_hda_codec_get_pincfg(codec, cfg->inputs[input].pin);
5039 attr = snd_hda_get_input_pin_attr(defc);
5040 /* for internal or docking mics, we need locations */
5041 if (attr <= INPUT_PIN_ATTR_NORMAL)
5042 return 1;
5044 attr = 0;
5045 for (i = 0; i < cfg->num_inputs; i++) {
5046 defc = snd_hda_codec_get_pincfg(codec, cfg->inputs[i].pin);
5047 attr2 = snd_hda_get_input_pin_attr(defc);
5048 if (attr2 >= INPUT_PIN_ATTR_NORMAL) {
5049 if (attr && attr != attr2)
5050 return 1; /* different locations found */
5051 attr = attr2;
5054 return 0;
5058 * hda_get_autocfg_input_label - Get a label for the given input
5060 * Get a label for the given input pin defined by the autocfg item.
5061 * Unlike hda_get_input_pin_label(), this function checks all inputs
5062 * defined in autocfg and avoids the redundant mic/line prefix as much as
5063 * possible.
5065 const char *hda_get_autocfg_input_label(struct hda_codec *codec,
5066 const struct auto_pin_cfg *cfg,
5067 int input)
5069 int type = cfg->inputs[input].type;
5070 int has_multiple_pins = 0;
5072 if ((input > 0 && cfg->inputs[input - 1].type == type) ||
5073 (input < cfg->num_inputs - 1 && cfg->inputs[input + 1].type == type))
5074 has_multiple_pins = 1;
5075 if (has_multiple_pins && type == AUTO_PIN_MIC)
5076 has_multiple_pins &= check_mic_location_need(codec, cfg, input);
5077 return hda_get_input_pin_label(codec, cfg->inputs[input].pin,
5078 has_multiple_pins);
5080 EXPORT_SYMBOL_HDA(hda_get_autocfg_input_label);
5083 * snd_hda_add_imux_item - Add an item to input_mux
5085 * When the same label is used already in the existing items, the number
5086 * suffix is appended to the label. This label index number is stored
5087 * to type_idx when non-NULL pointer is given.
5089 int snd_hda_add_imux_item(struct hda_input_mux *imux, const char *label,
5090 int index, int *type_idx)
5092 int i, label_idx = 0;
5093 if (imux->num_items >= HDA_MAX_NUM_INPUTS) {
5094 snd_printd(KERN_ERR "hda_codec: Too many imux items!\n");
5095 return -EINVAL;
5097 for (i = 0; i < imux->num_items; i++) {
5098 if (!strncmp(label, imux->items[i].label, strlen(label)))
5099 label_idx++;
5101 if (type_idx)
5102 *type_idx = label_idx;
5103 if (label_idx > 0)
5104 snprintf(imux->items[imux->num_items].label,
5105 sizeof(imux->items[imux->num_items].label),
5106 "%s %d", label, label_idx);
5107 else
5108 strlcpy(imux->items[imux->num_items].label, label,
5109 sizeof(imux->items[imux->num_items].label));
5110 imux->items[imux->num_items].index = index;
5111 imux->num_items++;
5112 return 0;
5114 EXPORT_SYMBOL_HDA(snd_hda_add_imux_item);
5117 #ifdef CONFIG_PM
5119 * power management
5123 * snd_hda_suspend - suspend the codecs
5124 * @bus: the HDA bus
5126 * Returns 0 if successful.
5128 int snd_hda_suspend(struct hda_bus *bus)
5130 struct hda_codec *codec;
5132 list_for_each_entry(codec, &bus->codec_list, list) {
5133 if (hda_codec_is_power_on(codec))
5134 hda_call_codec_suspend(codec);
5135 if (codec->patch_ops.post_suspend)
5136 codec->patch_ops.post_suspend(codec);
5138 return 0;
5140 EXPORT_SYMBOL_HDA(snd_hda_suspend);
5143 * snd_hda_resume - resume the codecs
5144 * @bus: the HDA bus
5146 * Returns 0 if successful.
5148 * This function is defined only when POWER_SAVE isn't set.
5149 * In the power-save mode, the codec is resumed dynamically.
5151 int snd_hda_resume(struct hda_bus *bus)
5153 struct hda_codec *codec;
5155 list_for_each_entry(codec, &bus->codec_list, list) {
5156 if (codec->patch_ops.pre_resume)
5157 codec->patch_ops.pre_resume(codec);
5158 if (snd_hda_codec_needs_resume(codec))
5159 hda_call_codec_resume(codec);
5161 return 0;
5163 EXPORT_SYMBOL_HDA(snd_hda_resume);
5164 #endif /* CONFIG_PM */
5167 * generic arrays
5171 * snd_array_new - get a new element from the given array
5172 * @array: the array object
5174 * Get a new element from the given array. If it exceeds the
5175 * pre-allocated array size, re-allocate the array.
5177 * Returns NULL if allocation failed.
5179 void *snd_array_new(struct snd_array *array)
5181 if (array->used >= array->alloced) {
5182 int num = array->alloced + array->alloc_align;
5183 int size = (num + 1) * array->elem_size;
5184 int oldsize = array->alloced * array->elem_size;
5185 void *nlist;
5186 if (snd_BUG_ON(num >= 4096))
5187 return NULL;
5188 nlist = krealloc(array->list, size, GFP_KERNEL);
5189 if (!nlist)
5190 return NULL;
5191 memset(nlist + oldsize, 0, size - oldsize);
5192 array->list = nlist;
5193 array->alloced = num;
5195 return snd_array_elem(array, array->used++);
5197 EXPORT_SYMBOL_HDA(snd_array_new);
5200 * snd_array_free - free the given array elements
5201 * @array: the array object
5203 void snd_array_free(struct snd_array *array)
5205 kfree(array->list);
5206 array->used = 0;
5207 array->alloced = 0;
5208 array->list = NULL;
5210 EXPORT_SYMBOL_HDA(snd_array_free);
5213 * snd_print_pcm_bits - Print the supported PCM fmt bits to the string buffer
5214 * @pcm: PCM caps bits
5215 * @buf: the string buffer to write
5216 * @buflen: the max buffer length
5218 * used by hda_proc.c and hda_eld.c
5220 void snd_print_pcm_bits(int pcm, char *buf, int buflen)
5222 static unsigned int bits[] = { 8, 16, 20, 24, 32 };
5223 int i, j;
5225 for (i = 0, j = 0; i < ARRAY_SIZE(bits); i++)
5226 if (pcm & (AC_SUPPCM_BITS_8 << i))
5227 j += snprintf(buf + j, buflen - j, " %d", bits[i]);
5229 buf[j] = '\0'; /* necessary when j == 0 */
5231 EXPORT_SYMBOL_HDA(snd_print_pcm_bits);
5233 #ifdef CONFIG_SND_HDA_INPUT_JACK
5235 * Input-jack notification support
5237 struct hda_jack_item {
5238 hda_nid_t nid;
5239 int type;
5240 struct snd_jack *jack;
5243 static const char *get_jack_default_name(struct hda_codec *codec, hda_nid_t nid,
5244 int type)
5246 switch (type) {
5247 case SND_JACK_HEADPHONE:
5248 return "Headphone";
5249 case SND_JACK_MICROPHONE:
5250 return "Mic";
5251 case SND_JACK_LINEOUT:
5252 return "Line-out";
5253 case SND_JACK_LINEIN:
5254 return "Line-in";
5255 case SND_JACK_HEADSET:
5256 return "Headset";
5257 case SND_JACK_VIDEOOUT:
5258 return "HDMI/DP";
5259 default:
5260 return "Misc";
5264 static void hda_free_jack_priv(struct snd_jack *jack)
5266 struct hda_jack_item *jacks = jack->private_data;
5267 jacks->nid = 0;
5268 jacks->jack = NULL;
5271 int snd_hda_input_jack_add(struct hda_codec *codec, hda_nid_t nid, int type,
5272 const char *name)
5274 struct hda_jack_item *jack;
5275 int err;
5277 snd_array_init(&codec->jacks, sizeof(*jack), 32);
5278 jack = snd_array_new(&codec->jacks);
5279 if (!jack)
5280 return -ENOMEM;
5282 jack->nid = nid;
5283 jack->type = type;
5284 if (!name)
5285 name = get_jack_default_name(codec, nid, type);
5286 err = snd_jack_new(codec->bus->card, name, type, &jack->jack);
5287 if (err < 0) {
5288 jack->nid = 0;
5289 return err;
5291 jack->jack->private_data = jack;
5292 jack->jack->private_free = hda_free_jack_priv;
5293 return 0;
5295 EXPORT_SYMBOL_HDA(snd_hda_input_jack_add);
5297 void snd_hda_input_jack_report(struct hda_codec *codec, hda_nid_t nid)
5299 struct hda_jack_item *jacks = codec->jacks.list;
5300 int i;
5302 if (!jacks)
5303 return;
5305 for (i = 0; i < codec->jacks.used; i++, jacks++) {
5306 unsigned int pin_ctl;
5307 unsigned int present;
5308 int type;
5310 if (jacks->nid != nid)
5311 continue;
5312 present = snd_hda_jack_detect(codec, nid);
5313 type = jacks->type;
5314 if (type == (SND_JACK_HEADPHONE | SND_JACK_LINEOUT)) {
5315 pin_ctl = snd_hda_codec_read(codec, nid, 0,
5316 AC_VERB_GET_PIN_WIDGET_CONTROL, 0);
5317 type = (pin_ctl & AC_PINCTL_HP_EN) ?
5318 SND_JACK_HEADPHONE : SND_JACK_LINEOUT;
5320 snd_jack_report(jacks->jack, present ? type : 0);
5323 EXPORT_SYMBOL_HDA(snd_hda_input_jack_report);
5325 /* free jack instances manually when clearing/reconfiguring */
5326 void snd_hda_input_jack_free(struct hda_codec *codec)
5328 if (!codec->bus->shutdown && codec->jacks.list) {
5329 struct hda_jack_item *jacks = codec->jacks.list;
5330 int i;
5331 for (i = 0; i < codec->jacks.used; i++, jacks++) {
5332 if (jacks->jack)
5333 snd_device_free(codec->bus->card, jacks->jack);
5336 snd_array_free(&codec->jacks);
5338 EXPORT_SYMBOL_HDA(snd_hda_input_jack_free);
5339 #endif /* CONFIG_SND_HDA_INPUT_JACK */
5341 MODULE_DESCRIPTION("HDA codec core");
5342 MODULE_LICENSE("GPL");