ALSA: hda - Avoid invalid "Independent HP" control for VIA codecs
[linux-2.6/linux-acpi-2.6/ibm-acpi-2.6.git] / sound / pci / hda / hda_codec.c
blob0e76ac2b2aceefe24ac0037331124c9e8d87eb65
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 <sound/core.h>
28 #include "hda_codec.h"
29 #include <sound/asoundef.h>
30 #include <sound/tlv.h>
31 #include <sound/initval.h>
32 #include "hda_local.h"
33 #include "hda_beep.h"
34 #include <sound/hda_hwdep.h>
37 * vendor / preset table
40 struct hda_vendor_id {
41 unsigned int id;
42 const char *name;
45 /* codec vendor labels */
46 static struct hda_vendor_id hda_vendor_ids[] = {
47 { 0x1002, "ATI" },
48 { 0x1013, "Cirrus Logic" },
49 { 0x1057, "Motorola" },
50 { 0x1095, "Silicon Image" },
51 { 0x10de, "Nvidia" },
52 { 0x10ec, "Realtek" },
53 { 0x1102, "Creative" },
54 { 0x1106, "VIA" },
55 { 0x111d, "IDT" },
56 { 0x11c1, "LSI" },
57 { 0x11d4, "Analog Devices" },
58 { 0x13f6, "C-Media" },
59 { 0x14f1, "Conexant" },
60 { 0x17e8, "Chrontel" },
61 { 0x1854, "LG" },
62 { 0x1aec, "Wolfson Microelectronics" },
63 { 0x434d, "C-Media" },
64 { 0x8086, "Intel" },
65 { 0x8384, "SigmaTel" },
66 {} /* terminator */
69 static DEFINE_MUTEX(preset_mutex);
70 static LIST_HEAD(hda_preset_tables);
72 int snd_hda_add_codec_preset(struct hda_codec_preset_list *preset)
74 mutex_lock(&preset_mutex);
75 list_add_tail(&preset->list, &hda_preset_tables);
76 mutex_unlock(&preset_mutex);
77 return 0;
79 EXPORT_SYMBOL_HDA(snd_hda_add_codec_preset);
81 int snd_hda_delete_codec_preset(struct hda_codec_preset_list *preset)
83 mutex_lock(&preset_mutex);
84 list_del(&preset->list);
85 mutex_unlock(&preset_mutex);
86 return 0;
88 EXPORT_SYMBOL_HDA(snd_hda_delete_codec_preset);
90 #ifdef CONFIG_SND_HDA_POWER_SAVE
91 static void hda_power_work(struct work_struct *work);
92 static void hda_keep_power_on(struct hda_codec *codec);
93 #else
94 static inline void hda_keep_power_on(struct hda_codec *codec) {}
95 #endif
97 /**
98 * snd_hda_get_jack_location - Give a location string of the jack
99 * @cfg: pin default config value
101 * Parse the pin default config value and returns the string of the
102 * jack location, e.g. "Rear", "Front", etc.
104 const char *snd_hda_get_jack_location(u32 cfg)
106 static char *bases[7] = {
107 "N/A", "Rear", "Front", "Left", "Right", "Top", "Bottom",
109 static unsigned char specials_idx[] = {
110 0x07, 0x08,
111 0x17, 0x18, 0x19,
112 0x37, 0x38
114 static char *specials[] = {
115 "Rear Panel", "Drive Bar",
116 "Riser", "HDMI", "ATAPI",
117 "Mobile-In", "Mobile-Out"
119 int i;
120 cfg = (cfg & AC_DEFCFG_LOCATION) >> AC_DEFCFG_LOCATION_SHIFT;
121 if ((cfg & 0x0f) < 7)
122 return bases[cfg & 0x0f];
123 for (i = 0; i < ARRAY_SIZE(specials_idx); i++) {
124 if (cfg == specials_idx[i])
125 return specials[i];
127 return "UNKNOWN";
129 EXPORT_SYMBOL_HDA(snd_hda_get_jack_location);
132 * snd_hda_get_jack_connectivity - Give a connectivity string of the jack
133 * @cfg: pin default config value
135 * Parse the pin default config value and returns the string of the
136 * jack connectivity, i.e. external or internal connection.
138 const char *snd_hda_get_jack_connectivity(u32 cfg)
140 static char *jack_locations[4] = { "Ext", "Int", "Sep", "Oth" };
142 return jack_locations[(cfg >> (AC_DEFCFG_LOCATION_SHIFT + 4)) & 3];
144 EXPORT_SYMBOL_HDA(snd_hda_get_jack_connectivity);
147 * snd_hda_get_jack_type - Give a type string of the jack
148 * @cfg: pin default config value
150 * Parse the pin default config value and returns the string of the
151 * jack type, i.e. the purpose of the jack, such as Line-Out or CD.
153 const char *snd_hda_get_jack_type(u32 cfg)
155 static char *jack_types[16] = {
156 "Line Out", "Speaker", "HP Out", "CD",
157 "SPDIF Out", "Digital Out", "Modem Line", "Modem Hand",
158 "Line In", "Aux", "Mic", "Telephony",
159 "SPDIF In", "Digitial In", "Reserved", "Other"
162 return jack_types[(cfg & AC_DEFCFG_DEVICE)
163 >> AC_DEFCFG_DEVICE_SHIFT];
165 EXPORT_SYMBOL_HDA(snd_hda_get_jack_type);
168 * Compose a 32bit command word to be sent to the HD-audio controller
170 static inline unsigned int
171 make_codec_cmd(struct hda_codec *codec, hda_nid_t nid, int direct,
172 unsigned int verb, unsigned int parm)
174 u32 val;
176 if ((codec->addr & ~0xf) || (direct & ~1) || (nid & ~0x7f) ||
177 (verb & ~0xfff) || (parm & ~0xffff)) {
178 printk(KERN_ERR "hda-codec: out of range cmd %x:%x:%x:%x:%x\n",
179 codec->addr, direct, nid, verb, parm);
180 return ~0;
183 val = (u32)codec->addr << 28;
184 val |= (u32)direct << 27;
185 val |= (u32)nid << 20;
186 val |= verb << 8;
187 val |= parm;
188 return val;
192 * Send and receive a verb
194 static int codec_exec_verb(struct hda_codec *codec, unsigned int cmd,
195 unsigned int *res)
197 struct hda_bus *bus = codec->bus;
198 int err;
200 if (cmd == ~0)
201 return -1;
203 if (res)
204 *res = -1;
205 again:
206 snd_hda_power_up(codec);
207 mutex_lock(&bus->cmd_mutex);
208 err = bus->ops.command(bus, cmd);
209 if (!err && res)
210 *res = bus->ops.get_response(bus, codec->addr);
211 mutex_unlock(&bus->cmd_mutex);
212 snd_hda_power_down(codec);
213 if (res && *res == -1 && bus->rirb_error) {
214 if (bus->response_reset) {
215 snd_printd("hda_codec: resetting BUS due to "
216 "fatal communication error\n");
217 bus->ops.bus_reset(bus);
219 goto again;
221 /* clear reset-flag when the communication gets recovered */
222 if (!err)
223 bus->response_reset = 0;
224 return err;
228 * snd_hda_codec_read - send a command and get the response
229 * @codec: the HDA codec
230 * @nid: NID to send the command
231 * @direct: direct flag
232 * @verb: the verb to send
233 * @parm: the parameter for the verb
235 * Send a single command and read the corresponding response.
237 * Returns the obtained response value, or -1 for an error.
239 unsigned int snd_hda_codec_read(struct hda_codec *codec, hda_nid_t nid,
240 int direct,
241 unsigned int verb, unsigned int parm)
243 unsigned cmd = make_codec_cmd(codec, nid, direct, verb, parm);
244 unsigned int res;
245 codec_exec_verb(codec, cmd, &res);
246 return res;
248 EXPORT_SYMBOL_HDA(snd_hda_codec_read);
251 * snd_hda_codec_write - send a single command without waiting for response
252 * @codec: the HDA codec
253 * @nid: NID to send the command
254 * @direct: direct flag
255 * @verb: the verb to send
256 * @parm: the parameter for the verb
258 * Send a single command without waiting for response.
260 * Returns 0 if successful, or a negative error code.
262 int snd_hda_codec_write(struct hda_codec *codec, hda_nid_t nid, int direct,
263 unsigned int verb, unsigned int parm)
265 unsigned int cmd = make_codec_cmd(codec, nid, direct, verb, parm);
266 unsigned int res;
267 return codec_exec_verb(codec, cmd,
268 codec->bus->sync_write ? &res : NULL);
270 EXPORT_SYMBOL_HDA(snd_hda_codec_write);
273 * snd_hda_sequence_write - sequence writes
274 * @codec: the HDA codec
275 * @seq: VERB array to send
277 * Send the commands sequentially from the given array.
278 * The array must be terminated with NID=0.
280 void snd_hda_sequence_write(struct hda_codec *codec, const struct hda_verb *seq)
282 for (; seq->nid; seq++)
283 snd_hda_codec_write(codec, seq->nid, 0, seq->verb, seq->param);
285 EXPORT_SYMBOL_HDA(snd_hda_sequence_write);
288 * snd_hda_get_sub_nodes - get the range of sub nodes
289 * @codec: the HDA codec
290 * @nid: NID to parse
291 * @start_id: the pointer to store the start NID
293 * Parse the NID and store the start NID of its sub-nodes.
294 * Returns the number of sub-nodes.
296 int snd_hda_get_sub_nodes(struct hda_codec *codec, hda_nid_t nid,
297 hda_nid_t *start_id)
299 unsigned int parm;
301 parm = snd_hda_param_read(codec, nid, AC_PAR_NODE_COUNT);
302 if (parm == -1)
303 return 0;
304 *start_id = (parm >> 16) & 0x7fff;
305 return (int)(parm & 0x7fff);
307 EXPORT_SYMBOL_HDA(snd_hda_get_sub_nodes);
310 * snd_hda_get_connections - get connection list
311 * @codec: the HDA codec
312 * @nid: NID to parse
313 * @conn_list: connection list array
314 * @max_conns: max. number of connections to store
316 * Parses the connection list of the given widget and stores the list
317 * of NIDs.
319 * Returns the number of connections, or a negative error code.
321 int snd_hda_get_connections(struct hda_codec *codec, hda_nid_t nid,
322 hda_nid_t *conn_list, int max_conns)
324 unsigned int parm;
325 int i, conn_len, conns;
326 unsigned int shift, num_elems, mask;
327 unsigned int wcaps;
328 hda_nid_t prev_nid;
330 if (snd_BUG_ON(!conn_list || max_conns <= 0))
331 return -EINVAL;
333 wcaps = get_wcaps(codec, nid);
334 if (!(wcaps & AC_WCAP_CONN_LIST) &&
335 get_wcaps_type(wcaps) != AC_WID_VOL_KNB) {
336 snd_printk(KERN_WARNING "hda_codec: "
337 "connection list not available for 0x%x\n", nid);
338 return -EINVAL;
341 parm = snd_hda_param_read(codec, nid, AC_PAR_CONNLIST_LEN);
342 if (parm & AC_CLIST_LONG) {
343 /* long form */
344 shift = 16;
345 num_elems = 2;
346 } else {
347 /* short form */
348 shift = 8;
349 num_elems = 4;
351 conn_len = parm & AC_CLIST_LENGTH;
352 mask = (1 << (shift-1)) - 1;
354 if (!conn_len)
355 return 0; /* no connection */
357 if (conn_len == 1) {
358 /* single connection */
359 parm = snd_hda_codec_read(codec, nid, 0,
360 AC_VERB_GET_CONNECT_LIST, 0);
361 if (parm == -1 && codec->bus->rirb_error)
362 return -EIO;
363 conn_list[0] = parm & mask;
364 return 1;
367 /* multi connection */
368 conns = 0;
369 prev_nid = 0;
370 for (i = 0; i < conn_len; i++) {
371 int range_val;
372 hda_nid_t val, n;
374 if (i % num_elems == 0) {
375 parm = snd_hda_codec_read(codec, nid, 0,
376 AC_VERB_GET_CONNECT_LIST, i);
377 if (parm == -1 && codec->bus->rirb_error)
378 return -EIO;
380 range_val = !!(parm & (1 << (shift-1))); /* ranges */
381 val = parm & mask;
382 if (val == 0) {
383 snd_printk(KERN_WARNING "hda_codec: "
384 "invalid CONNECT_LIST verb %x[%i]:%x\n",
385 nid, i, parm);
386 return 0;
388 parm >>= shift;
389 if (range_val) {
390 /* ranges between the previous and this one */
391 if (!prev_nid || prev_nid >= val) {
392 snd_printk(KERN_WARNING "hda_codec: "
393 "invalid dep_range_val %x:%x\n",
394 prev_nid, val);
395 continue;
397 for (n = prev_nid + 1; n <= val; n++) {
398 if (conns >= max_conns) {
399 snd_printk(KERN_ERR
400 "Too many connections\n");
401 return -EINVAL;
403 conn_list[conns++] = n;
405 } else {
406 if (conns >= max_conns) {
407 snd_printk(KERN_ERR "Too many connections\n");
408 return -EINVAL;
410 conn_list[conns++] = val;
412 prev_nid = val;
414 return conns;
416 EXPORT_SYMBOL_HDA(snd_hda_get_connections);
420 * snd_hda_queue_unsol_event - add an unsolicited event to queue
421 * @bus: the BUS
422 * @res: unsolicited event (lower 32bit of RIRB entry)
423 * @res_ex: codec addr and flags (upper 32bit or RIRB entry)
425 * Adds the given event to the queue. The events are processed in
426 * the workqueue asynchronously. Call this function in the interrupt
427 * hanlder when RIRB receives an unsolicited event.
429 * Returns 0 if successful, or a negative error code.
431 int snd_hda_queue_unsol_event(struct hda_bus *bus, u32 res, u32 res_ex)
433 struct hda_bus_unsolicited *unsol;
434 unsigned int wp;
436 unsol = bus->unsol;
437 if (!unsol)
438 return 0;
440 wp = (unsol->wp + 1) % HDA_UNSOL_QUEUE_SIZE;
441 unsol->wp = wp;
443 wp <<= 1;
444 unsol->queue[wp] = res;
445 unsol->queue[wp + 1] = res_ex;
447 queue_work(bus->workq, &unsol->work);
449 return 0;
451 EXPORT_SYMBOL_HDA(snd_hda_queue_unsol_event);
454 * process queued unsolicited events
456 static void process_unsol_events(struct work_struct *work)
458 struct hda_bus_unsolicited *unsol =
459 container_of(work, struct hda_bus_unsolicited, work);
460 struct hda_bus *bus = unsol->bus;
461 struct hda_codec *codec;
462 unsigned int rp, caddr, res;
464 while (unsol->rp != unsol->wp) {
465 rp = (unsol->rp + 1) % HDA_UNSOL_QUEUE_SIZE;
466 unsol->rp = rp;
467 rp <<= 1;
468 res = unsol->queue[rp];
469 caddr = unsol->queue[rp + 1];
470 if (!(caddr & (1 << 4))) /* no unsolicited event? */
471 continue;
472 codec = bus->caddr_tbl[caddr & 0x0f];
473 if (codec && codec->patch_ops.unsol_event)
474 codec->patch_ops.unsol_event(codec, res);
479 * initialize unsolicited queue
481 static int init_unsol_queue(struct hda_bus *bus)
483 struct hda_bus_unsolicited *unsol;
485 if (bus->unsol) /* already initialized */
486 return 0;
488 unsol = kzalloc(sizeof(*unsol), GFP_KERNEL);
489 if (!unsol) {
490 snd_printk(KERN_ERR "hda_codec: "
491 "can't allocate unsolicited queue\n");
492 return -ENOMEM;
494 INIT_WORK(&unsol->work, process_unsol_events);
495 unsol->bus = bus;
496 bus->unsol = unsol;
497 return 0;
501 * destructor
503 static void snd_hda_codec_free(struct hda_codec *codec);
505 static int snd_hda_bus_free(struct hda_bus *bus)
507 struct hda_codec *codec, *n;
509 if (!bus)
510 return 0;
511 if (bus->workq)
512 flush_workqueue(bus->workq);
513 if (bus->unsol)
514 kfree(bus->unsol);
515 list_for_each_entry_safe(codec, n, &bus->codec_list, list) {
516 snd_hda_codec_free(codec);
518 if (bus->ops.private_free)
519 bus->ops.private_free(bus);
520 if (bus->workq)
521 destroy_workqueue(bus->workq);
522 kfree(bus);
523 return 0;
526 static int snd_hda_bus_dev_free(struct snd_device *device)
528 struct hda_bus *bus = device->device_data;
529 bus->shutdown = 1;
530 return snd_hda_bus_free(bus);
533 #ifdef CONFIG_SND_HDA_HWDEP
534 static int snd_hda_bus_dev_register(struct snd_device *device)
536 struct hda_bus *bus = device->device_data;
537 struct hda_codec *codec;
538 list_for_each_entry(codec, &bus->codec_list, list) {
539 snd_hda_hwdep_add_sysfs(codec);
540 snd_hda_hwdep_add_power_sysfs(codec);
542 return 0;
544 #else
545 #define snd_hda_bus_dev_register NULL
546 #endif
549 * snd_hda_bus_new - create a HDA bus
550 * @card: the card entry
551 * @temp: the template for hda_bus information
552 * @busp: the pointer to store the created bus instance
554 * Returns 0 if successful, or a negative error code.
556 int /*__devinit*/ snd_hda_bus_new(struct snd_card *card,
557 const struct hda_bus_template *temp,
558 struct hda_bus **busp)
560 struct hda_bus *bus;
561 int err;
562 static struct snd_device_ops dev_ops = {
563 .dev_register = snd_hda_bus_dev_register,
564 .dev_free = snd_hda_bus_dev_free,
567 if (snd_BUG_ON(!temp))
568 return -EINVAL;
569 if (snd_BUG_ON(!temp->ops.command || !temp->ops.get_response))
570 return -EINVAL;
572 if (busp)
573 *busp = NULL;
575 bus = kzalloc(sizeof(*bus), GFP_KERNEL);
576 if (bus == NULL) {
577 snd_printk(KERN_ERR "can't allocate struct hda_bus\n");
578 return -ENOMEM;
581 bus->card = card;
582 bus->private_data = temp->private_data;
583 bus->pci = temp->pci;
584 bus->modelname = temp->modelname;
585 bus->power_save = temp->power_save;
586 bus->ops = temp->ops;
588 mutex_init(&bus->cmd_mutex);
589 INIT_LIST_HEAD(&bus->codec_list);
591 snprintf(bus->workq_name, sizeof(bus->workq_name),
592 "hd-audio%d", card->number);
593 bus->workq = create_singlethread_workqueue(bus->workq_name);
594 if (!bus->workq) {
595 snd_printk(KERN_ERR "cannot create workqueue %s\n",
596 bus->workq_name);
597 kfree(bus);
598 return -ENOMEM;
601 err = snd_device_new(card, SNDRV_DEV_BUS, bus, &dev_ops);
602 if (err < 0) {
603 snd_hda_bus_free(bus);
604 return err;
606 if (busp)
607 *busp = bus;
608 return 0;
610 EXPORT_SYMBOL_HDA(snd_hda_bus_new);
612 #ifdef CONFIG_SND_HDA_GENERIC
613 #define is_generic_config(codec) \
614 (codec->modelname && !strcmp(codec->modelname, "generic"))
615 #else
616 #define is_generic_config(codec) 0
617 #endif
619 #ifdef MODULE
620 #define HDA_MODREQ_MAX_COUNT 2 /* two request_modules()'s */
621 #else
622 #define HDA_MODREQ_MAX_COUNT 0 /* all presets are statically linked */
623 #endif
626 * find a matching codec preset
628 static const struct hda_codec_preset *
629 find_codec_preset(struct hda_codec *codec)
631 struct hda_codec_preset_list *tbl;
632 const struct hda_codec_preset *preset;
633 int mod_requested = 0;
635 if (is_generic_config(codec))
636 return NULL; /* use the generic parser */
638 again:
639 mutex_lock(&preset_mutex);
640 list_for_each_entry(tbl, &hda_preset_tables, list) {
641 if (!try_module_get(tbl->owner)) {
642 snd_printk(KERN_ERR "hda_codec: cannot module_get\n");
643 continue;
645 for (preset = tbl->preset; preset->id; preset++) {
646 u32 mask = preset->mask;
647 if (preset->afg && preset->afg != codec->afg)
648 continue;
649 if (preset->mfg && preset->mfg != codec->mfg)
650 continue;
651 if (!mask)
652 mask = ~0;
653 if (preset->id == (codec->vendor_id & mask) &&
654 (!preset->rev ||
655 preset->rev == codec->revision_id)) {
656 mutex_unlock(&preset_mutex);
657 codec->owner = tbl->owner;
658 return preset;
661 module_put(tbl->owner);
663 mutex_unlock(&preset_mutex);
665 if (mod_requested < HDA_MODREQ_MAX_COUNT) {
666 char name[32];
667 if (!mod_requested)
668 snprintf(name, sizeof(name), "snd-hda-codec-id:%08x",
669 codec->vendor_id);
670 else
671 snprintf(name, sizeof(name), "snd-hda-codec-id:%04x*",
672 (codec->vendor_id >> 16) & 0xffff);
673 request_module(name);
674 mod_requested++;
675 goto again;
677 return NULL;
681 * get_codec_name - store the codec name
683 static int get_codec_name(struct hda_codec *codec)
685 const struct hda_vendor_id *c;
686 const char *vendor = NULL;
687 u16 vendor_id = codec->vendor_id >> 16;
688 char tmp[16];
690 if (codec->vendor_name)
691 goto get_chip_name;
693 for (c = hda_vendor_ids; c->id; c++) {
694 if (c->id == vendor_id) {
695 vendor = c->name;
696 break;
699 if (!vendor) {
700 sprintf(tmp, "Generic %04x", vendor_id);
701 vendor = tmp;
703 codec->vendor_name = kstrdup(vendor, GFP_KERNEL);
704 if (!codec->vendor_name)
705 return -ENOMEM;
707 get_chip_name:
708 if (codec->chip_name)
709 return 0;
711 if (codec->preset && codec->preset->name)
712 codec->chip_name = kstrdup(codec->preset->name, GFP_KERNEL);
713 else {
714 sprintf(tmp, "ID %x", codec->vendor_id & 0xffff);
715 codec->chip_name = kstrdup(tmp, GFP_KERNEL);
717 if (!codec->chip_name)
718 return -ENOMEM;
719 return 0;
723 * look for an AFG and MFG nodes
725 static void /*__devinit*/ setup_fg_nodes(struct hda_codec *codec)
727 int i, total_nodes, function_id;
728 hda_nid_t nid;
730 total_nodes = snd_hda_get_sub_nodes(codec, AC_NODE_ROOT, &nid);
731 for (i = 0; i < total_nodes; i++, nid++) {
732 function_id = snd_hda_param_read(codec, nid,
733 AC_PAR_FUNCTION_TYPE) & 0xff;
734 switch (function_id) {
735 case AC_GRP_AUDIO_FUNCTION:
736 codec->afg = nid;
737 codec->function_id = function_id;
738 break;
739 case AC_GRP_MODEM_FUNCTION:
740 codec->mfg = nid;
741 codec->function_id = function_id;
742 break;
743 default:
744 break;
750 * read widget caps for each widget and store in cache
752 static int read_widget_caps(struct hda_codec *codec, hda_nid_t fg_node)
754 int i;
755 hda_nid_t nid;
757 codec->num_nodes = snd_hda_get_sub_nodes(codec, fg_node,
758 &codec->start_nid);
759 codec->wcaps = kmalloc(codec->num_nodes * 4, GFP_KERNEL);
760 if (!codec->wcaps)
761 return -ENOMEM;
762 nid = codec->start_nid;
763 for (i = 0; i < codec->num_nodes; i++, nid++)
764 codec->wcaps[i] = snd_hda_param_read(codec, nid,
765 AC_PAR_AUDIO_WIDGET_CAP);
766 return 0;
769 /* read all pin default configurations and save codec->init_pins */
770 static int read_pin_defaults(struct hda_codec *codec)
772 int i;
773 hda_nid_t nid = codec->start_nid;
775 for (i = 0; i < codec->num_nodes; i++, nid++) {
776 struct hda_pincfg *pin;
777 unsigned int wcaps = get_wcaps(codec, nid);
778 unsigned int wid_type = get_wcaps_type(wcaps);
779 if (wid_type != AC_WID_PIN)
780 continue;
781 pin = snd_array_new(&codec->init_pins);
782 if (!pin)
783 return -ENOMEM;
784 pin->nid = nid;
785 pin->cfg = snd_hda_codec_read(codec, nid, 0,
786 AC_VERB_GET_CONFIG_DEFAULT, 0);
788 return 0;
791 /* look up the given pin config list and return the item matching with NID */
792 static struct hda_pincfg *look_up_pincfg(struct hda_codec *codec,
793 struct snd_array *array,
794 hda_nid_t nid)
796 int i;
797 for (i = 0; i < array->used; i++) {
798 struct hda_pincfg *pin = snd_array_elem(array, i);
799 if (pin->nid == nid)
800 return pin;
802 return NULL;
805 /* write a config value for the given NID */
806 static void set_pincfg(struct hda_codec *codec, hda_nid_t nid,
807 unsigned int cfg)
809 int i;
810 for (i = 0; i < 4; i++) {
811 snd_hda_codec_write(codec, nid, 0,
812 AC_VERB_SET_CONFIG_DEFAULT_BYTES_0 + i,
813 cfg & 0xff);
814 cfg >>= 8;
818 /* set the current pin config value for the given NID.
819 * the value is cached, and read via snd_hda_codec_get_pincfg()
821 int snd_hda_add_pincfg(struct hda_codec *codec, struct snd_array *list,
822 hda_nid_t nid, unsigned int cfg)
824 struct hda_pincfg *pin;
825 unsigned int oldcfg;
827 if (get_wcaps_type(get_wcaps(codec, nid)) != AC_WID_PIN)
828 return -EINVAL;
830 oldcfg = snd_hda_codec_get_pincfg(codec, nid);
831 pin = look_up_pincfg(codec, list, nid);
832 if (!pin) {
833 pin = snd_array_new(list);
834 if (!pin)
835 return -ENOMEM;
836 pin->nid = nid;
838 pin->cfg = cfg;
840 /* change only when needed; e.g. if the pincfg is already present
841 * in user_pins[], don't write it
843 cfg = snd_hda_codec_get_pincfg(codec, nid);
844 if (oldcfg != cfg)
845 set_pincfg(codec, nid, cfg);
846 return 0;
850 * snd_hda_codec_set_pincfg - Override a pin default configuration
851 * @codec: the HDA codec
852 * @nid: NID to set the pin config
853 * @cfg: the pin default config value
855 * Override a pin default configuration value in the cache.
856 * This value can be read by snd_hda_codec_get_pincfg() in a higher
857 * priority than the real hardware value.
859 int snd_hda_codec_set_pincfg(struct hda_codec *codec,
860 hda_nid_t nid, unsigned int cfg)
862 return snd_hda_add_pincfg(codec, &codec->driver_pins, nid, cfg);
864 EXPORT_SYMBOL_HDA(snd_hda_codec_set_pincfg);
867 * snd_hda_codec_get_pincfg - Obtain a pin-default configuration
868 * @codec: the HDA codec
869 * @nid: NID to get the pin config
871 * Get the current pin config value of the given pin NID.
872 * If the pincfg value is cached or overridden via sysfs or driver,
873 * returns the cached value.
875 unsigned int snd_hda_codec_get_pincfg(struct hda_codec *codec, hda_nid_t nid)
877 struct hda_pincfg *pin;
879 #ifdef CONFIG_SND_HDA_HWDEP
880 pin = look_up_pincfg(codec, &codec->user_pins, nid);
881 if (pin)
882 return pin->cfg;
883 #endif
884 pin = look_up_pincfg(codec, &codec->driver_pins, nid);
885 if (pin)
886 return pin->cfg;
887 pin = look_up_pincfg(codec, &codec->init_pins, nid);
888 if (pin)
889 return pin->cfg;
890 return 0;
892 EXPORT_SYMBOL_HDA(snd_hda_codec_get_pincfg);
894 /* restore all current pin configs */
895 static void restore_pincfgs(struct hda_codec *codec)
897 int i;
898 for (i = 0; i < codec->init_pins.used; i++) {
899 struct hda_pincfg *pin = snd_array_elem(&codec->init_pins, i);
900 set_pincfg(codec, pin->nid,
901 snd_hda_codec_get_pincfg(codec, pin->nid));
906 * snd_hda_shutup_pins - Shut up all pins
907 * @codec: the HDA codec
909 * Clear all pin controls to shup up before suspend for avoiding click noise.
910 * The controls aren't cached so that they can be resumed properly.
912 void snd_hda_shutup_pins(struct hda_codec *codec)
914 int i;
915 for (i = 0; i < codec->init_pins.used; i++) {
916 struct hda_pincfg *pin = snd_array_elem(&codec->init_pins, i);
917 /* use read here for syncing after issuing each verb */
918 snd_hda_codec_read(codec, pin->nid, 0,
919 AC_VERB_SET_PIN_WIDGET_CONTROL, 0);
922 EXPORT_SYMBOL_HDA(snd_hda_shutup_pins);
924 static void init_hda_cache(struct hda_cache_rec *cache,
925 unsigned int record_size);
926 static void free_hda_cache(struct hda_cache_rec *cache);
928 /* restore the initial pin cfgs and release all pincfg lists */
929 static void restore_init_pincfgs(struct hda_codec *codec)
931 /* first free driver_pins and user_pins, then call restore_pincfg
932 * so that only the values in init_pins are restored
934 snd_array_free(&codec->driver_pins);
935 #ifdef CONFIG_SND_HDA_HWDEP
936 snd_array_free(&codec->user_pins);
937 #endif
938 restore_pincfgs(codec);
939 snd_array_free(&codec->init_pins);
943 * codec destructor
945 static void snd_hda_codec_free(struct hda_codec *codec)
947 if (!codec)
948 return;
949 restore_init_pincfgs(codec);
950 #ifdef CONFIG_SND_HDA_POWER_SAVE
951 cancel_delayed_work(&codec->power_work);
952 flush_workqueue(codec->bus->workq);
953 #endif
954 list_del(&codec->list);
955 snd_array_free(&codec->mixers);
956 snd_array_free(&codec->nids);
957 codec->bus->caddr_tbl[codec->addr] = NULL;
958 if (codec->patch_ops.free)
959 codec->patch_ops.free(codec);
960 module_put(codec->owner);
961 free_hda_cache(&codec->amp_cache);
962 free_hda_cache(&codec->cmd_cache);
963 kfree(codec->vendor_name);
964 kfree(codec->chip_name);
965 kfree(codec->modelname);
966 kfree(codec->wcaps);
967 kfree(codec);
970 static void hda_set_power_state(struct hda_codec *codec, hda_nid_t fg,
971 unsigned int power_state);
974 * snd_hda_codec_new - create a HDA codec
975 * @bus: the bus to assign
976 * @codec_addr: the codec address
977 * @codecp: the pointer to store the generated codec
979 * Returns 0 if successful, or a negative error code.
981 int /*__devinit*/ snd_hda_codec_new(struct hda_bus *bus,
982 unsigned int codec_addr,
983 struct hda_codec **codecp)
985 struct hda_codec *codec;
986 char component[31];
987 int err;
989 if (snd_BUG_ON(!bus))
990 return -EINVAL;
991 if (snd_BUG_ON(codec_addr > HDA_MAX_CODEC_ADDRESS))
992 return -EINVAL;
994 if (bus->caddr_tbl[codec_addr]) {
995 snd_printk(KERN_ERR "hda_codec: "
996 "address 0x%x is already occupied\n", codec_addr);
997 return -EBUSY;
1000 codec = kzalloc(sizeof(*codec), GFP_KERNEL);
1001 if (codec == NULL) {
1002 snd_printk(KERN_ERR "can't allocate struct hda_codec\n");
1003 return -ENOMEM;
1006 codec->bus = bus;
1007 codec->addr = codec_addr;
1008 mutex_init(&codec->spdif_mutex);
1009 mutex_init(&codec->control_mutex);
1010 init_hda_cache(&codec->amp_cache, sizeof(struct hda_amp_info));
1011 init_hda_cache(&codec->cmd_cache, sizeof(struct hda_cache_head));
1012 snd_array_init(&codec->mixers, sizeof(struct hda_nid_item), 32);
1013 snd_array_init(&codec->nids, sizeof(struct hda_nid_item), 32);
1014 snd_array_init(&codec->init_pins, sizeof(struct hda_pincfg), 16);
1015 snd_array_init(&codec->driver_pins, sizeof(struct hda_pincfg), 16);
1016 if (codec->bus->modelname) {
1017 codec->modelname = kstrdup(codec->bus->modelname, GFP_KERNEL);
1018 if (!codec->modelname) {
1019 snd_hda_codec_free(codec);
1020 return -ENODEV;
1024 #ifdef CONFIG_SND_HDA_POWER_SAVE
1025 INIT_DELAYED_WORK(&codec->power_work, hda_power_work);
1026 /* snd_hda_codec_new() marks the codec as power-up, and leave it as is.
1027 * the caller has to power down appropriatley after initialization
1028 * phase.
1030 hda_keep_power_on(codec);
1031 #endif
1033 list_add_tail(&codec->list, &bus->codec_list);
1034 bus->caddr_tbl[codec_addr] = codec;
1036 codec->vendor_id = snd_hda_param_read(codec, AC_NODE_ROOT,
1037 AC_PAR_VENDOR_ID);
1038 if (codec->vendor_id == -1)
1039 /* read again, hopefully the access method was corrected
1040 * in the last read...
1042 codec->vendor_id = snd_hda_param_read(codec, AC_NODE_ROOT,
1043 AC_PAR_VENDOR_ID);
1044 codec->subsystem_id = snd_hda_param_read(codec, AC_NODE_ROOT,
1045 AC_PAR_SUBSYSTEM_ID);
1046 codec->revision_id = snd_hda_param_read(codec, AC_NODE_ROOT,
1047 AC_PAR_REV_ID);
1049 setup_fg_nodes(codec);
1050 if (!codec->afg && !codec->mfg) {
1051 snd_printdd("hda_codec: no AFG or MFG node found\n");
1052 err = -ENODEV;
1053 goto error;
1056 err = read_widget_caps(codec, codec->afg ? codec->afg : codec->mfg);
1057 if (err < 0) {
1058 snd_printk(KERN_ERR "hda_codec: cannot malloc\n");
1059 goto error;
1061 err = read_pin_defaults(codec);
1062 if (err < 0)
1063 goto error;
1065 if (!codec->subsystem_id) {
1066 hda_nid_t nid = codec->afg ? codec->afg : codec->mfg;
1067 codec->subsystem_id =
1068 snd_hda_codec_read(codec, nid, 0,
1069 AC_VERB_GET_SUBSYSTEM_ID, 0);
1072 /* power-up all before initialization */
1073 hda_set_power_state(codec,
1074 codec->afg ? codec->afg : codec->mfg,
1075 AC_PWRST_D0);
1077 snd_hda_codec_proc_new(codec);
1079 snd_hda_create_hwdep(codec);
1081 sprintf(component, "HDA:%08x,%08x,%08x", codec->vendor_id,
1082 codec->subsystem_id, codec->revision_id);
1083 snd_component_add(codec->bus->card, component);
1085 if (codecp)
1086 *codecp = codec;
1087 return 0;
1089 error:
1090 snd_hda_codec_free(codec);
1091 return err;
1093 EXPORT_SYMBOL_HDA(snd_hda_codec_new);
1096 * snd_hda_codec_configure - (Re-)configure the HD-audio codec
1097 * @codec: the HDA codec
1099 * Start parsing of the given codec tree and (re-)initialize the whole
1100 * patch instance.
1102 * Returns 0 if successful or a negative error code.
1104 int snd_hda_codec_configure(struct hda_codec *codec)
1106 int err;
1108 codec->preset = find_codec_preset(codec);
1109 if (!codec->vendor_name || !codec->chip_name) {
1110 err = get_codec_name(codec);
1111 if (err < 0)
1112 return err;
1115 if (is_generic_config(codec)) {
1116 err = snd_hda_parse_generic_codec(codec);
1117 goto patched;
1119 if (codec->preset && codec->preset->patch) {
1120 err = codec->preset->patch(codec);
1121 goto patched;
1124 /* call the default parser */
1125 err = snd_hda_parse_generic_codec(codec);
1126 if (err < 0)
1127 printk(KERN_ERR "hda-codec: No codec parser is available\n");
1129 patched:
1130 if (!err && codec->patch_ops.unsol_event)
1131 err = init_unsol_queue(codec->bus);
1132 /* audio codec should override the mixer name */
1133 if (!err && (codec->afg || !*codec->bus->card->mixername))
1134 snprintf(codec->bus->card->mixername,
1135 sizeof(codec->bus->card->mixername),
1136 "%s %s", codec->vendor_name, codec->chip_name);
1137 return err;
1139 EXPORT_SYMBOL_HDA(snd_hda_codec_configure);
1142 * snd_hda_codec_setup_stream - set up the codec for streaming
1143 * @codec: the CODEC to set up
1144 * @nid: the NID to set up
1145 * @stream_tag: stream tag to pass, it's between 0x1 and 0xf.
1146 * @channel_id: channel id to pass, zero based.
1147 * @format: stream format.
1149 void snd_hda_codec_setup_stream(struct hda_codec *codec, hda_nid_t nid,
1150 u32 stream_tag,
1151 int channel_id, int format)
1153 if (!nid)
1154 return;
1156 snd_printdd("hda_codec_setup_stream: "
1157 "NID=0x%x, stream=0x%x, channel=%d, format=0x%x\n",
1158 nid, stream_tag, channel_id, format);
1159 snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_CHANNEL_STREAMID,
1160 (stream_tag << 4) | channel_id);
1161 msleep(1);
1162 snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_STREAM_FORMAT, format);
1164 EXPORT_SYMBOL_HDA(snd_hda_codec_setup_stream);
1167 * snd_hda_codec_cleanup_stream - clean up the codec for closing
1168 * @codec: the CODEC to clean up
1169 * @nid: the NID to clean up
1171 void snd_hda_codec_cleanup_stream(struct hda_codec *codec, hda_nid_t nid)
1173 if (!nid)
1174 return;
1176 snd_printdd("hda_codec_cleanup_stream: NID=0x%x\n", nid);
1177 snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_CHANNEL_STREAMID, 0);
1178 #if 0 /* keep the format */
1179 msleep(1);
1180 snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_STREAM_FORMAT, 0);
1181 #endif
1183 EXPORT_SYMBOL_HDA(snd_hda_codec_cleanup_stream);
1186 * amp access functions
1189 /* FIXME: more better hash key? */
1190 #define HDA_HASH_KEY(nid, dir, idx) (u32)((nid) + ((idx) << 16) + ((dir) << 24))
1191 #define HDA_HASH_PINCAP_KEY(nid) (u32)((nid) + (0x02 << 24))
1192 #define HDA_HASH_PARPCM_KEY(nid) (u32)((nid) + (0x03 << 24))
1193 #define HDA_HASH_PARSTR_KEY(nid) (u32)((nid) + (0x04 << 24))
1194 #define INFO_AMP_CAPS (1<<0)
1195 #define INFO_AMP_VOL(ch) (1 << (1 + (ch)))
1197 /* initialize the hash table */
1198 static void /*__devinit*/ init_hda_cache(struct hda_cache_rec *cache,
1199 unsigned int record_size)
1201 memset(cache, 0, sizeof(*cache));
1202 memset(cache->hash, 0xff, sizeof(cache->hash));
1203 snd_array_init(&cache->buf, record_size, 64);
1206 static void free_hda_cache(struct hda_cache_rec *cache)
1208 snd_array_free(&cache->buf);
1211 /* query the hash. allocate an entry if not found. */
1212 static struct hda_cache_head *get_alloc_hash(struct hda_cache_rec *cache,
1213 u32 key)
1215 u16 idx = key % (u16)ARRAY_SIZE(cache->hash);
1216 u16 cur = cache->hash[idx];
1217 struct hda_cache_head *info;
1219 while (cur != 0xffff) {
1220 info = snd_array_elem(&cache->buf, cur);
1221 if (info->key == key)
1222 return info;
1223 cur = info->next;
1226 /* add a new hash entry */
1227 info = snd_array_new(&cache->buf);
1228 if (!info)
1229 return NULL;
1230 cur = snd_array_index(&cache->buf, info);
1231 info->key = key;
1232 info->val = 0;
1233 info->next = cache->hash[idx];
1234 cache->hash[idx] = cur;
1236 return info;
1239 /* query and allocate an amp hash entry */
1240 static inline struct hda_amp_info *
1241 get_alloc_amp_hash(struct hda_codec *codec, u32 key)
1243 return (struct hda_amp_info *)get_alloc_hash(&codec->amp_cache, key);
1247 * query_amp_caps - query AMP capabilities
1248 * @codec: the HD-auio codec
1249 * @nid: the NID to query
1250 * @direction: either #HDA_INPUT or #HDA_OUTPUT
1252 * Query AMP capabilities for the given widget and direction.
1253 * Returns the obtained capability bits.
1255 * When cap bits have been already read, this doesn't read again but
1256 * returns the cached value.
1258 u32 query_amp_caps(struct hda_codec *codec, hda_nid_t nid, int direction)
1260 struct hda_amp_info *info;
1262 info = get_alloc_amp_hash(codec, HDA_HASH_KEY(nid, direction, 0));
1263 if (!info)
1264 return 0;
1265 if (!(info->head.val & INFO_AMP_CAPS)) {
1266 if (!(get_wcaps(codec, nid) & AC_WCAP_AMP_OVRD))
1267 nid = codec->afg;
1268 info->amp_caps = snd_hda_param_read(codec, nid,
1269 direction == HDA_OUTPUT ?
1270 AC_PAR_AMP_OUT_CAP :
1271 AC_PAR_AMP_IN_CAP);
1272 if (info->amp_caps)
1273 info->head.val |= INFO_AMP_CAPS;
1275 return info->amp_caps;
1277 EXPORT_SYMBOL_HDA(query_amp_caps);
1280 * snd_hda_override_amp_caps - Override the AMP capabilities
1281 * @codec: the CODEC to clean up
1282 * @nid: the NID to clean up
1283 * @direction: either #HDA_INPUT or #HDA_OUTPUT
1284 * @caps: the capability bits to set
1286 * Override the cached AMP caps bits value by the given one.
1287 * This function is useful if the driver needs to adjust the AMP ranges,
1288 * e.g. limit to 0dB, etc.
1290 * Returns zero if successful or a negative error code.
1292 int snd_hda_override_amp_caps(struct hda_codec *codec, hda_nid_t nid, int dir,
1293 unsigned int caps)
1295 struct hda_amp_info *info;
1297 info = get_alloc_amp_hash(codec, HDA_HASH_KEY(nid, dir, 0));
1298 if (!info)
1299 return -EINVAL;
1300 info->amp_caps = caps;
1301 info->head.val |= INFO_AMP_CAPS;
1302 return 0;
1304 EXPORT_SYMBOL_HDA(snd_hda_override_amp_caps);
1306 static unsigned int
1307 query_caps_hash(struct hda_codec *codec, hda_nid_t nid, u32 key,
1308 unsigned int (*func)(struct hda_codec *, hda_nid_t))
1310 struct hda_amp_info *info;
1312 info = get_alloc_amp_hash(codec, key);
1313 if (!info)
1314 return 0;
1315 if (!info->head.val) {
1316 info->head.val |= INFO_AMP_CAPS;
1317 info->amp_caps = func(codec, nid);
1319 return info->amp_caps;
1322 static unsigned int read_pin_cap(struct hda_codec *codec, hda_nid_t nid)
1324 return snd_hda_param_read(codec, nid, AC_PAR_PIN_CAP);
1328 * snd_hda_query_pin_caps - Query PIN capabilities
1329 * @codec: the HD-auio codec
1330 * @nid: the NID to query
1332 * Query PIN capabilities for the given widget.
1333 * Returns the obtained capability bits.
1335 * When cap bits have been already read, this doesn't read again but
1336 * returns the cached value.
1338 u32 snd_hda_query_pin_caps(struct hda_codec *codec, hda_nid_t nid)
1340 return query_caps_hash(codec, nid, HDA_HASH_PINCAP_KEY(nid),
1341 read_pin_cap);
1343 EXPORT_SYMBOL_HDA(snd_hda_query_pin_caps);
1346 * snd_hda_pin_sense - execute pin sense measurement
1347 * @codec: the CODEC to sense
1348 * @nid: the pin NID to sense
1350 * Execute necessary pin sense measurement and return its Presence Detect,
1351 * Impedance, ELD Valid etc. status bits.
1353 u32 snd_hda_pin_sense(struct hda_codec *codec, hda_nid_t nid)
1355 u32 pincap;
1357 if (!codec->no_trigger_sense) {
1358 pincap = snd_hda_query_pin_caps(codec, nid);
1359 if (pincap & AC_PINCAP_TRIG_REQ) /* need trigger? */
1360 snd_hda_codec_read(codec, nid, 0,
1361 AC_VERB_SET_PIN_SENSE, 0);
1363 return snd_hda_codec_read(codec, nid, 0,
1364 AC_VERB_GET_PIN_SENSE, 0);
1366 EXPORT_SYMBOL_HDA(snd_hda_pin_sense);
1369 * snd_hda_jack_detect - query pin Presence Detect status
1370 * @codec: the CODEC to sense
1371 * @nid: the pin NID to sense
1373 * Query and return the pin's Presence Detect status.
1375 int snd_hda_jack_detect(struct hda_codec *codec, hda_nid_t nid)
1377 u32 sense = snd_hda_pin_sense(codec, nid);
1378 return !!(sense & AC_PINSENSE_PRESENCE);
1380 EXPORT_SYMBOL_HDA(snd_hda_jack_detect);
1383 * read the current volume to info
1384 * if the cache exists, read the cache value.
1386 static unsigned int get_vol_mute(struct hda_codec *codec,
1387 struct hda_amp_info *info, hda_nid_t nid,
1388 int ch, int direction, int index)
1390 u32 val, parm;
1392 if (info->head.val & INFO_AMP_VOL(ch))
1393 return info->vol[ch];
1395 parm = ch ? AC_AMP_GET_RIGHT : AC_AMP_GET_LEFT;
1396 parm |= direction == HDA_OUTPUT ? AC_AMP_GET_OUTPUT : AC_AMP_GET_INPUT;
1397 parm |= index;
1398 val = snd_hda_codec_read(codec, nid, 0,
1399 AC_VERB_GET_AMP_GAIN_MUTE, parm);
1400 info->vol[ch] = val & 0xff;
1401 info->head.val |= INFO_AMP_VOL(ch);
1402 return info->vol[ch];
1406 * write the current volume in info to the h/w and update the cache
1408 static void put_vol_mute(struct hda_codec *codec, struct hda_amp_info *info,
1409 hda_nid_t nid, int ch, int direction, int index,
1410 int val)
1412 u32 parm;
1414 parm = ch ? AC_AMP_SET_RIGHT : AC_AMP_SET_LEFT;
1415 parm |= direction == HDA_OUTPUT ? AC_AMP_SET_OUTPUT : AC_AMP_SET_INPUT;
1416 parm |= index << AC_AMP_SET_INDEX_SHIFT;
1417 parm |= val;
1418 snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_AMP_GAIN_MUTE, parm);
1419 info->vol[ch] = val;
1423 * snd_hda_codec_amp_read - Read AMP value
1424 * @codec: HD-audio codec
1425 * @nid: NID to read the AMP value
1426 * @ch: channel (left=0 or right=1)
1427 * @direction: #HDA_INPUT or #HDA_OUTPUT
1428 * @index: the index value (only for input direction)
1430 * Read AMP value. The volume is between 0 to 0x7f, 0x80 = mute bit.
1432 int snd_hda_codec_amp_read(struct hda_codec *codec, hda_nid_t nid, int ch,
1433 int direction, int index)
1435 struct hda_amp_info *info;
1436 info = get_alloc_amp_hash(codec, HDA_HASH_KEY(nid, direction, index));
1437 if (!info)
1438 return 0;
1439 return get_vol_mute(codec, info, nid, ch, direction, index);
1441 EXPORT_SYMBOL_HDA(snd_hda_codec_amp_read);
1444 * snd_hda_codec_amp_update - update the AMP value
1445 * @codec: HD-audio codec
1446 * @nid: NID to read the AMP value
1447 * @ch: channel (left=0 or right=1)
1448 * @direction: #HDA_INPUT or #HDA_OUTPUT
1449 * @idx: the index value (only for input direction)
1450 * @mask: bit mask to set
1451 * @val: the bits value to set
1453 * Update the AMP value with a bit mask.
1454 * Returns 0 if the value is unchanged, 1 if changed.
1456 int snd_hda_codec_amp_update(struct hda_codec *codec, hda_nid_t nid, int ch,
1457 int direction, int idx, int mask, int val)
1459 struct hda_amp_info *info;
1461 info = get_alloc_amp_hash(codec, HDA_HASH_KEY(nid, direction, idx));
1462 if (!info)
1463 return 0;
1464 val &= mask;
1465 val |= get_vol_mute(codec, info, nid, ch, direction, idx) & ~mask;
1466 if (info->vol[ch] == val)
1467 return 0;
1468 put_vol_mute(codec, info, nid, ch, direction, idx, val);
1469 return 1;
1471 EXPORT_SYMBOL_HDA(snd_hda_codec_amp_update);
1474 * snd_hda_codec_amp_stereo - update the AMP stereo values
1475 * @codec: HD-audio codec
1476 * @nid: NID to read the AMP value
1477 * @direction: #HDA_INPUT or #HDA_OUTPUT
1478 * @idx: the index value (only for input direction)
1479 * @mask: bit mask to set
1480 * @val: the bits value to set
1482 * Update the AMP values like snd_hda_codec_amp_update(), but for a
1483 * stereo widget with the same mask and value.
1485 int snd_hda_codec_amp_stereo(struct hda_codec *codec, hda_nid_t nid,
1486 int direction, int idx, int mask, int val)
1488 int ch, ret = 0;
1489 for (ch = 0; ch < 2; ch++)
1490 ret |= snd_hda_codec_amp_update(codec, nid, ch, direction,
1491 idx, mask, val);
1492 return ret;
1494 EXPORT_SYMBOL_HDA(snd_hda_codec_amp_stereo);
1496 #ifdef SND_HDA_NEEDS_RESUME
1498 * snd_hda_codec_resume_amp - Resume all AMP commands from the cache
1499 * @codec: HD-audio codec
1501 * Resume the all amp commands from the cache.
1503 void snd_hda_codec_resume_amp(struct hda_codec *codec)
1505 struct hda_amp_info *buffer = codec->amp_cache.buf.list;
1506 int i;
1508 for (i = 0; i < codec->amp_cache.buf.used; i++, buffer++) {
1509 u32 key = buffer->head.key;
1510 hda_nid_t nid;
1511 unsigned int idx, dir, ch;
1512 if (!key)
1513 continue;
1514 nid = key & 0xff;
1515 idx = (key >> 16) & 0xff;
1516 dir = (key >> 24) & 0xff;
1517 for (ch = 0; ch < 2; ch++) {
1518 if (!(buffer->head.val & INFO_AMP_VOL(ch)))
1519 continue;
1520 put_vol_mute(codec, buffer, nid, ch, dir, idx,
1521 buffer->vol[ch]);
1525 EXPORT_SYMBOL_HDA(snd_hda_codec_resume_amp);
1526 #endif /* SND_HDA_NEEDS_RESUME */
1529 * snd_hda_mixer_amp_volume_info - Info callback for a standard AMP mixer
1531 * The control element is supposed to have the private_value field
1532 * set up via HDA_COMPOSE_AMP_VAL*() or related macros.
1534 int snd_hda_mixer_amp_volume_info(struct snd_kcontrol *kcontrol,
1535 struct snd_ctl_elem_info *uinfo)
1537 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1538 u16 nid = get_amp_nid(kcontrol);
1539 u8 chs = get_amp_channels(kcontrol);
1540 int dir = get_amp_direction(kcontrol);
1541 unsigned int ofs = get_amp_offset(kcontrol);
1542 u32 caps;
1544 caps = query_amp_caps(codec, nid, dir);
1545 /* num steps */
1546 caps = (caps & AC_AMPCAP_NUM_STEPS) >> AC_AMPCAP_NUM_STEPS_SHIFT;
1547 if (!caps) {
1548 printk(KERN_WARNING "hda_codec: "
1549 "num_steps = 0 for NID=0x%x (ctl = %s)\n", nid,
1550 kcontrol->id.name);
1551 return -EINVAL;
1553 if (ofs < caps)
1554 caps -= ofs;
1555 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
1556 uinfo->count = chs == 3 ? 2 : 1;
1557 uinfo->value.integer.min = 0;
1558 uinfo->value.integer.max = caps;
1559 return 0;
1561 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_volume_info);
1564 static inline unsigned int
1565 read_amp_value(struct hda_codec *codec, hda_nid_t nid,
1566 int ch, int dir, int idx, unsigned int ofs)
1568 unsigned int val;
1569 val = snd_hda_codec_amp_read(codec, nid, ch, dir, idx);
1570 val &= HDA_AMP_VOLMASK;
1571 if (val >= ofs)
1572 val -= ofs;
1573 else
1574 val = 0;
1575 return val;
1578 static inline int
1579 update_amp_value(struct hda_codec *codec, hda_nid_t nid,
1580 int ch, int dir, int idx, unsigned int ofs,
1581 unsigned int val)
1583 if (val > 0)
1584 val += ofs;
1585 return snd_hda_codec_amp_update(codec, nid, ch, dir, idx,
1586 HDA_AMP_VOLMASK, val);
1590 * snd_hda_mixer_amp_volume_get - Get callback for a standard AMP mixer volume
1592 * The control element is supposed to have the private_value field
1593 * set up via HDA_COMPOSE_AMP_VAL*() or related macros.
1595 int snd_hda_mixer_amp_volume_get(struct snd_kcontrol *kcontrol,
1596 struct snd_ctl_elem_value *ucontrol)
1598 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1599 hda_nid_t nid = get_amp_nid(kcontrol);
1600 int chs = get_amp_channels(kcontrol);
1601 int dir = get_amp_direction(kcontrol);
1602 int idx = get_amp_index(kcontrol);
1603 unsigned int ofs = get_amp_offset(kcontrol);
1604 long *valp = ucontrol->value.integer.value;
1606 if (chs & 1)
1607 *valp++ = read_amp_value(codec, nid, 0, dir, idx, ofs);
1608 if (chs & 2)
1609 *valp = read_amp_value(codec, nid, 1, dir, idx, ofs);
1610 return 0;
1612 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_volume_get);
1615 * snd_hda_mixer_amp_volume_put - Put callback for a standard AMP mixer volume
1617 * The control element is supposed to have the private_value field
1618 * set up via HDA_COMPOSE_AMP_VAL*() or related macros.
1620 int snd_hda_mixer_amp_volume_put(struct snd_kcontrol *kcontrol,
1621 struct snd_ctl_elem_value *ucontrol)
1623 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1624 hda_nid_t nid = get_amp_nid(kcontrol);
1625 int chs = get_amp_channels(kcontrol);
1626 int dir = get_amp_direction(kcontrol);
1627 int idx = get_amp_index(kcontrol);
1628 unsigned int ofs = get_amp_offset(kcontrol);
1629 long *valp = ucontrol->value.integer.value;
1630 int change = 0;
1632 snd_hda_power_up(codec);
1633 if (chs & 1) {
1634 change = update_amp_value(codec, nid, 0, dir, idx, ofs, *valp);
1635 valp++;
1637 if (chs & 2)
1638 change |= update_amp_value(codec, nid, 1, dir, idx, ofs, *valp);
1639 snd_hda_power_down(codec);
1640 return change;
1642 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_volume_put);
1645 * snd_hda_mixer_amp_volume_put - TLV callback for a standard AMP mixer volume
1647 * The control element is supposed to have the private_value field
1648 * set up via HDA_COMPOSE_AMP_VAL*() or related macros.
1650 int snd_hda_mixer_amp_tlv(struct snd_kcontrol *kcontrol, int op_flag,
1651 unsigned int size, unsigned int __user *_tlv)
1653 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1654 hda_nid_t nid = get_amp_nid(kcontrol);
1655 int dir = get_amp_direction(kcontrol);
1656 unsigned int ofs = get_amp_offset(kcontrol);
1657 u32 caps, val1, val2;
1659 if (size < 4 * sizeof(unsigned int))
1660 return -ENOMEM;
1661 caps = query_amp_caps(codec, nid, dir);
1662 val2 = (caps & AC_AMPCAP_STEP_SIZE) >> AC_AMPCAP_STEP_SIZE_SHIFT;
1663 val2 = (val2 + 1) * 25;
1664 val1 = -((caps & AC_AMPCAP_OFFSET) >> AC_AMPCAP_OFFSET_SHIFT);
1665 val1 += ofs;
1666 val1 = ((int)val1) * ((int)val2);
1667 if (put_user(SNDRV_CTL_TLVT_DB_SCALE, _tlv))
1668 return -EFAULT;
1669 if (put_user(2 * sizeof(unsigned int), _tlv + 1))
1670 return -EFAULT;
1671 if (put_user(val1, _tlv + 2))
1672 return -EFAULT;
1673 if (put_user(val2, _tlv + 3))
1674 return -EFAULT;
1675 return 0;
1677 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_tlv);
1680 * snd_hda_set_vmaster_tlv - Set TLV for a virtual master control
1681 * @codec: HD-audio codec
1682 * @nid: NID of a reference widget
1683 * @dir: #HDA_INPUT or #HDA_OUTPUT
1684 * @tlv: TLV data to be stored, at least 4 elements
1686 * Set (static) TLV data for a virtual master volume using the AMP caps
1687 * obtained from the reference NID.
1688 * The volume range is recalculated as if the max volume is 0dB.
1690 void snd_hda_set_vmaster_tlv(struct hda_codec *codec, hda_nid_t nid, int dir,
1691 unsigned int *tlv)
1693 u32 caps;
1694 int nums, step;
1696 caps = query_amp_caps(codec, nid, dir);
1697 nums = (caps & AC_AMPCAP_NUM_STEPS) >> AC_AMPCAP_NUM_STEPS_SHIFT;
1698 step = (caps & AC_AMPCAP_STEP_SIZE) >> AC_AMPCAP_STEP_SIZE_SHIFT;
1699 step = (step + 1) * 25;
1700 tlv[0] = SNDRV_CTL_TLVT_DB_SCALE;
1701 tlv[1] = 2 * sizeof(unsigned int);
1702 tlv[2] = -nums * step;
1703 tlv[3] = step;
1705 EXPORT_SYMBOL_HDA(snd_hda_set_vmaster_tlv);
1707 /* find a mixer control element with the given name */
1708 static struct snd_kcontrol *
1709 _snd_hda_find_mixer_ctl(struct hda_codec *codec,
1710 const char *name, int idx)
1712 struct snd_ctl_elem_id id;
1713 memset(&id, 0, sizeof(id));
1714 id.iface = SNDRV_CTL_ELEM_IFACE_MIXER;
1715 id.index = idx;
1716 if (snd_BUG_ON(strlen(name) >= sizeof(id.name)))
1717 return NULL;
1718 strcpy(id.name, name);
1719 return snd_ctl_find_id(codec->bus->card, &id);
1723 * snd_hda_find_mixer_ctl - Find a mixer control element with the given name
1724 * @codec: HD-audio codec
1725 * @name: ctl id name string
1727 * Get the control element with the given id string and IFACE_MIXER.
1729 struct snd_kcontrol *snd_hda_find_mixer_ctl(struct hda_codec *codec,
1730 const char *name)
1732 return _snd_hda_find_mixer_ctl(codec, name, 0);
1734 EXPORT_SYMBOL_HDA(snd_hda_find_mixer_ctl);
1737 * snd_hda_ctl_add - Add a control element and assign to the codec
1738 * @codec: HD-audio codec
1739 * @nid: corresponding NID (optional)
1740 * @kctl: the control element to assign
1742 * Add the given control element to an array inside the codec instance.
1743 * All control elements belonging to a codec are supposed to be added
1744 * by this function so that a proper clean-up works at the free or
1745 * reconfiguration time.
1747 * If non-zero @nid is passed, the NID is assigned to the control element.
1748 * The assignment is shown in the codec proc file.
1750 * snd_hda_ctl_add() checks the control subdev id field whether
1751 * #HDA_SUBDEV_NID_FLAG bit is set. If set (and @nid is zero), the lower
1752 * bits value is taken as the NID to assign. The #HDA_NID_ITEM_AMP bit
1753 * specifies if kctl->private_value is a HDA amplifier value.
1755 int snd_hda_ctl_add(struct hda_codec *codec, hda_nid_t nid,
1756 struct snd_kcontrol *kctl)
1758 int err;
1759 unsigned short flags = 0;
1760 struct hda_nid_item *item;
1762 if (kctl->id.subdevice & HDA_SUBDEV_AMP_FLAG) {
1763 flags |= HDA_NID_ITEM_AMP;
1764 if (nid == 0)
1765 nid = get_amp_nid_(kctl->private_value);
1767 if ((kctl->id.subdevice & HDA_SUBDEV_NID_FLAG) != 0 && nid == 0)
1768 nid = kctl->id.subdevice & 0xffff;
1769 if (kctl->id.subdevice & (HDA_SUBDEV_NID_FLAG|HDA_SUBDEV_AMP_FLAG))
1770 kctl->id.subdevice = 0;
1771 err = snd_ctl_add(codec->bus->card, kctl);
1772 if (err < 0)
1773 return err;
1774 item = snd_array_new(&codec->mixers);
1775 if (!item)
1776 return -ENOMEM;
1777 item->kctl = kctl;
1778 item->nid = nid;
1779 item->flags = flags;
1780 return 0;
1782 EXPORT_SYMBOL_HDA(snd_hda_ctl_add);
1785 * snd_hda_add_nid - Assign a NID to a control element
1786 * @codec: HD-audio codec
1787 * @nid: corresponding NID (optional)
1788 * @kctl: the control element to assign
1789 * @index: index to kctl
1791 * Add the given control element to an array inside the codec instance.
1792 * This function is used when #snd_hda_ctl_add cannot be used for 1:1
1793 * NID:KCTL mapping - for example "Capture Source" selector.
1795 int snd_hda_add_nid(struct hda_codec *codec, struct snd_kcontrol *kctl,
1796 unsigned int index, hda_nid_t nid)
1798 struct hda_nid_item *item;
1800 if (nid > 0) {
1801 item = snd_array_new(&codec->nids);
1802 if (!item)
1803 return -ENOMEM;
1804 item->kctl = kctl;
1805 item->index = index;
1806 item->nid = nid;
1807 return 0;
1809 printk(KERN_ERR "hda-codec: no NID for mapping control %s:%d:%d\n",
1810 kctl->id.name, kctl->id.index, index);
1811 return -EINVAL;
1813 EXPORT_SYMBOL_HDA(snd_hda_add_nid);
1816 * snd_hda_ctls_clear - Clear all controls assigned to the given codec
1817 * @codec: HD-audio codec
1819 void snd_hda_ctls_clear(struct hda_codec *codec)
1821 int i;
1822 struct hda_nid_item *items = codec->mixers.list;
1823 for (i = 0; i < codec->mixers.used; i++)
1824 snd_ctl_remove(codec->bus->card, items[i].kctl);
1825 snd_array_free(&codec->mixers);
1826 snd_array_free(&codec->nids);
1829 /* pseudo device locking
1830 * toggle card->shutdown to allow/disallow the device access (as a hack)
1832 static int hda_lock_devices(struct snd_card *card)
1834 spin_lock(&card->files_lock);
1835 if (card->shutdown) {
1836 spin_unlock(&card->files_lock);
1837 return -EINVAL;
1839 card->shutdown = 1;
1840 spin_unlock(&card->files_lock);
1841 return 0;
1844 static void hda_unlock_devices(struct snd_card *card)
1846 spin_lock(&card->files_lock);
1847 card->shutdown = 0;
1848 spin_unlock(&card->files_lock);
1852 * snd_hda_codec_reset - Clear all objects assigned to the codec
1853 * @codec: HD-audio codec
1855 * This frees the all PCM and control elements assigned to the codec, and
1856 * clears the caches and restores the pin default configurations.
1858 * When a device is being used, it returns -EBSY. If successfully freed,
1859 * returns zero.
1861 int snd_hda_codec_reset(struct hda_codec *codec)
1863 struct snd_card *card = codec->bus->card;
1864 int i, pcm;
1866 if (hda_lock_devices(card) < 0)
1867 return -EBUSY;
1868 /* check whether the codec isn't used by any mixer or PCM streams */
1869 if (!list_empty(&card->ctl_files)) {
1870 hda_unlock_devices(card);
1871 return -EBUSY;
1873 for (pcm = 0; pcm < codec->num_pcms; pcm++) {
1874 struct hda_pcm *cpcm = &codec->pcm_info[pcm];
1875 if (!cpcm->pcm)
1876 continue;
1877 if (cpcm->pcm->streams[0].substream_opened ||
1878 cpcm->pcm->streams[1].substream_opened) {
1879 hda_unlock_devices(card);
1880 return -EBUSY;
1884 /* OK, let it free */
1886 #ifdef CONFIG_SND_HDA_POWER_SAVE
1887 cancel_delayed_work(&codec->power_work);
1888 flush_workqueue(codec->bus->workq);
1889 #endif
1890 snd_hda_ctls_clear(codec);
1891 /* relase PCMs */
1892 for (i = 0; i < codec->num_pcms; i++) {
1893 if (codec->pcm_info[i].pcm) {
1894 snd_device_free(card, codec->pcm_info[i].pcm);
1895 clear_bit(codec->pcm_info[i].device,
1896 codec->bus->pcm_dev_bits);
1899 if (codec->patch_ops.free)
1900 codec->patch_ops.free(codec);
1901 codec->proc_widget_hook = NULL;
1902 codec->spec = NULL;
1903 free_hda_cache(&codec->amp_cache);
1904 free_hda_cache(&codec->cmd_cache);
1905 init_hda_cache(&codec->amp_cache, sizeof(struct hda_amp_info));
1906 init_hda_cache(&codec->cmd_cache, sizeof(struct hda_cache_head));
1907 /* free only driver_pins so that init_pins + user_pins are restored */
1908 snd_array_free(&codec->driver_pins);
1909 restore_pincfgs(codec);
1910 codec->num_pcms = 0;
1911 codec->pcm_info = NULL;
1912 codec->preset = NULL;
1913 memset(&codec->patch_ops, 0, sizeof(codec->patch_ops));
1914 codec->slave_dig_outs = NULL;
1915 codec->spdif_status_reset = 0;
1916 module_put(codec->owner);
1917 codec->owner = NULL;
1919 /* allow device access again */
1920 hda_unlock_devices(card);
1921 return 0;
1925 * snd_hda_add_vmaster - create a virtual master control and add slaves
1926 * @codec: HD-audio codec
1927 * @name: vmaster control name
1928 * @tlv: TLV data (optional)
1929 * @slaves: slave control names (optional)
1931 * Create a virtual master control with the given name. The TLV data
1932 * must be either NULL or a valid data.
1934 * @slaves is a NULL-terminated array of strings, each of which is a
1935 * slave control name. All controls with these names are assigned to
1936 * the new virtual master control.
1938 * This function returns zero if successful or a negative error code.
1940 int snd_hda_add_vmaster(struct hda_codec *codec, char *name,
1941 unsigned int *tlv, const char **slaves)
1943 struct snd_kcontrol *kctl;
1944 const char **s;
1945 int err;
1947 for (s = slaves; *s && !snd_hda_find_mixer_ctl(codec, *s); s++)
1949 if (!*s) {
1950 snd_printdd("No slave found for %s\n", name);
1951 return 0;
1953 kctl = snd_ctl_make_virtual_master(name, tlv);
1954 if (!kctl)
1955 return -ENOMEM;
1956 err = snd_hda_ctl_add(codec, 0, kctl);
1957 if (err < 0)
1958 return err;
1960 for (s = slaves; *s; s++) {
1961 struct snd_kcontrol *sctl;
1962 int i = 0;
1963 for (;;) {
1964 sctl = _snd_hda_find_mixer_ctl(codec, *s, i);
1965 if (!sctl) {
1966 if (!i)
1967 snd_printdd("Cannot find slave %s, "
1968 "skipped\n", *s);
1969 break;
1971 err = snd_ctl_add_slave(kctl, sctl);
1972 if (err < 0)
1973 return err;
1974 i++;
1977 return 0;
1979 EXPORT_SYMBOL_HDA(snd_hda_add_vmaster);
1982 * snd_hda_mixer_amp_switch_info - Info callback for a standard AMP mixer switch
1984 * The control element is supposed to have the private_value field
1985 * set up via HDA_COMPOSE_AMP_VAL*() or related macros.
1987 int snd_hda_mixer_amp_switch_info(struct snd_kcontrol *kcontrol,
1988 struct snd_ctl_elem_info *uinfo)
1990 int chs = get_amp_channels(kcontrol);
1992 uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
1993 uinfo->count = chs == 3 ? 2 : 1;
1994 uinfo->value.integer.min = 0;
1995 uinfo->value.integer.max = 1;
1996 return 0;
1998 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_switch_info);
2001 * snd_hda_mixer_amp_switch_get - Get callback for a standard AMP mixer switch
2003 * The control element is supposed to have the private_value field
2004 * set up via HDA_COMPOSE_AMP_VAL*() or related macros.
2006 int snd_hda_mixer_amp_switch_get(struct snd_kcontrol *kcontrol,
2007 struct snd_ctl_elem_value *ucontrol)
2009 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2010 hda_nid_t nid = get_amp_nid(kcontrol);
2011 int chs = get_amp_channels(kcontrol);
2012 int dir = get_amp_direction(kcontrol);
2013 int idx = get_amp_index(kcontrol);
2014 long *valp = ucontrol->value.integer.value;
2016 if (chs & 1)
2017 *valp++ = (snd_hda_codec_amp_read(codec, nid, 0, dir, idx) &
2018 HDA_AMP_MUTE) ? 0 : 1;
2019 if (chs & 2)
2020 *valp = (snd_hda_codec_amp_read(codec, nid, 1, dir, idx) &
2021 HDA_AMP_MUTE) ? 0 : 1;
2022 return 0;
2024 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_switch_get);
2027 * snd_hda_mixer_amp_switch_put - Put callback for a standard AMP mixer switch
2029 * The control element is supposed to have the private_value field
2030 * set up via HDA_COMPOSE_AMP_VAL*() or related macros.
2032 int snd_hda_mixer_amp_switch_put(struct snd_kcontrol *kcontrol,
2033 struct snd_ctl_elem_value *ucontrol)
2035 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2036 hda_nid_t nid = get_amp_nid(kcontrol);
2037 int chs = get_amp_channels(kcontrol);
2038 int dir = get_amp_direction(kcontrol);
2039 int idx = get_amp_index(kcontrol);
2040 long *valp = ucontrol->value.integer.value;
2041 int change = 0;
2043 snd_hda_power_up(codec);
2044 if (chs & 1) {
2045 change = snd_hda_codec_amp_update(codec, nid, 0, dir, idx,
2046 HDA_AMP_MUTE,
2047 *valp ? 0 : HDA_AMP_MUTE);
2048 valp++;
2050 if (chs & 2)
2051 change |= snd_hda_codec_amp_update(codec, nid, 1, dir, idx,
2052 HDA_AMP_MUTE,
2053 *valp ? 0 : HDA_AMP_MUTE);
2054 #ifdef CONFIG_SND_HDA_POWER_SAVE
2055 if (codec->patch_ops.check_power_status)
2056 codec->patch_ops.check_power_status(codec, nid);
2057 #endif
2058 snd_hda_power_down(codec);
2059 return change;
2061 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_switch_put);
2063 #ifdef CONFIG_SND_HDA_INPUT_BEEP
2065 * snd_hda_mixer_amp_switch_put_beep - Put callback for a beep AMP switch
2067 * This function calls snd_hda_enable_beep_device(), which behaves differently
2068 * depending on beep_mode option.
2070 int snd_hda_mixer_amp_switch_put_beep(struct snd_kcontrol *kcontrol,
2071 struct snd_ctl_elem_value *ucontrol)
2073 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2074 long *valp = ucontrol->value.integer.value;
2076 snd_hda_enable_beep_device(codec, *valp);
2077 return snd_hda_mixer_amp_switch_put(kcontrol, ucontrol);
2079 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_switch_put_beep);
2080 #endif /* CONFIG_SND_HDA_INPUT_BEEP */
2083 * bound volume controls
2085 * bind multiple volumes (# indices, from 0)
2088 #define AMP_VAL_IDX_SHIFT 19
2089 #define AMP_VAL_IDX_MASK (0x0f<<19)
2092 * snd_hda_mixer_bind_switch_get - Get callback for a bound volume control
2094 * The control element is supposed to have the private_value field
2095 * set up via HDA_BIND_MUTE*() macros.
2097 int snd_hda_mixer_bind_switch_get(struct snd_kcontrol *kcontrol,
2098 struct snd_ctl_elem_value *ucontrol)
2100 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2101 unsigned long pval;
2102 int err;
2104 mutex_lock(&codec->control_mutex);
2105 pval = kcontrol->private_value;
2106 kcontrol->private_value = pval & ~AMP_VAL_IDX_MASK; /* index 0 */
2107 err = snd_hda_mixer_amp_switch_get(kcontrol, ucontrol);
2108 kcontrol->private_value = pval;
2109 mutex_unlock(&codec->control_mutex);
2110 return err;
2112 EXPORT_SYMBOL_HDA(snd_hda_mixer_bind_switch_get);
2115 * snd_hda_mixer_bind_switch_put - Put callback for a bound volume control
2117 * The control element is supposed to have the private_value field
2118 * set up via HDA_BIND_MUTE*() macros.
2120 int snd_hda_mixer_bind_switch_put(struct snd_kcontrol *kcontrol,
2121 struct snd_ctl_elem_value *ucontrol)
2123 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2124 unsigned long pval;
2125 int i, indices, err = 0, change = 0;
2127 mutex_lock(&codec->control_mutex);
2128 pval = kcontrol->private_value;
2129 indices = (pval & AMP_VAL_IDX_MASK) >> AMP_VAL_IDX_SHIFT;
2130 for (i = 0; i < indices; i++) {
2131 kcontrol->private_value = (pval & ~AMP_VAL_IDX_MASK) |
2132 (i << AMP_VAL_IDX_SHIFT);
2133 err = snd_hda_mixer_amp_switch_put(kcontrol, ucontrol);
2134 if (err < 0)
2135 break;
2136 change |= err;
2138 kcontrol->private_value = pval;
2139 mutex_unlock(&codec->control_mutex);
2140 return err < 0 ? err : change;
2142 EXPORT_SYMBOL_HDA(snd_hda_mixer_bind_switch_put);
2145 * snd_hda_mixer_bind_ctls_info - Info callback for a generic bound control
2147 * The control element is supposed to have the private_value field
2148 * set up via HDA_BIND_VOL() or HDA_BIND_SW() macros.
2150 int snd_hda_mixer_bind_ctls_info(struct snd_kcontrol *kcontrol,
2151 struct snd_ctl_elem_info *uinfo)
2153 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2154 struct hda_bind_ctls *c;
2155 int err;
2157 mutex_lock(&codec->control_mutex);
2158 c = (struct hda_bind_ctls *)kcontrol->private_value;
2159 kcontrol->private_value = *c->values;
2160 err = c->ops->info(kcontrol, uinfo);
2161 kcontrol->private_value = (long)c;
2162 mutex_unlock(&codec->control_mutex);
2163 return err;
2165 EXPORT_SYMBOL_HDA(snd_hda_mixer_bind_ctls_info);
2168 * snd_hda_mixer_bind_ctls_get - Get callback for a generic bound control
2170 * The control element is supposed to have the private_value field
2171 * set up via HDA_BIND_VOL() or HDA_BIND_SW() macros.
2173 int snd_hda_mixer_bind_ctls_get(struct snd_kcontrol *kcontrol,
2174 struct snd_ctl_elem_value *ucontrol)
2176 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2177 struct hda_bind_ctls *c;
2178 int err;
2180 mutex_lock(&codec->control_mutex);
2181 c = (struct hda_bind_ctls *)kcontrol->private_value;
2182 kcontrol->private_value = *c->values;
2183 err = c->ops->get(kcontrol, ucontrol);
2184 kcontrol->private_value = (long)c;
2185 mutex_unlock(&codec->control_mutex);
2186 return err;
2188 EXPORT_SYMBOL_HDA(snd_hda_mixer_bind_ctls_get);
2191 * snd_hda_mixer_bind_ctls_put - Put callback for a generic bound control
2193 * The control element is supposed to have the private_value field
2194 * set up via HDA_BIND_VOL() or HDA_BIND_SW() macros.
2196 int snd_hda_mixer_bind_ctls_put(struct snd_kcontrol *kcontrol,
2197 struct snd_ctl_elem_value *ucontrol)
2199 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2200 struct hda_bind_ctls *c;
2201 unsigned long *vals;
2202 int err = 0, change = 0;
2204 mutex_lock(&codec->control_mutex);
2205 c = (struct hda_bind_ctls *)kcontrol->private_value;
2206 for (vals = c->values; *vals; vals++) {
2207 kcontrol->private_value = *vals;
2208 err = c->ops->put(kcontrol, ucontrol);
2209 if (err < 0)
2210 break;
2211 change |= err;
2213 kcontrol->private_value = (long)c;
2214 mutex_unlock(&codec->control_mutex);
2215 return err < 0 ? err : change;
2217 EXPORT_SYMBOL_HDA(snd_hda_mixer_bind_ctls_put);
2220 * snd_hda_mixer_bind_tlv - TLV callback for a generic bound control
2222 * The control element is supposed to have the private_value field
2223 * set up via HDA_BIND_VOL() macro.
2225 int snd_hda_mixer_bind_tlv(struct snd_kcontrol *kcontrol, int op_flag,
2226 unsigned int size, unsigned int __user *tlv)
2228 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2229 struct hda_bind_ctls *c;
2230 int err;
2232 mutex_lock(&codec->control_mutex);
2233 c = (struct hda_bind_ctls *)kcontrol->private_value;
2234 kcontrol->private_value = *c->values;
2235 err = c->ops->tlv(kcontrol, op_flag, size, tlv);
2236 kcontrol->private_value = (long)c;
2237 mutex_unlock(&codec->control_mutex);
2238 return err;
2240 EXPORT_SYMBOL_HDA(snd_hda_mixer_bind_tlv);
2242 struct hda_ctl_ops snd_hda_bind_vol = {
2243 .info = snd_hda_mixer_amp_volume_info,
2244 .get = snd_hda_mixer_amp_volume_get,
2245 .put = snd_hda_mixer_amp_volume_put,
2246 .tlv = snd_hda_mixer_amp_tlv
2248 EXPORT_SYMBOL_HDA(snd_hda_bind_vol);
2250 struct hda_ctl_ops snd_hda_bind_sw = {
2251 .info = snd_hda_mixer_amp_switch_info,
2252 .get = snd_hda_mixer_amp_switch_get,
2253 .put = snd_hda_mixer_amp_switch_put,
2254 .tlv = snd_hda_mixer_amp_tlv
2256 EXPORT_SYMBOL_HDA(snd_hda_bind_sw);
2259 * SPDIF out controls
2262 static int snd_hda_spdif_mask_info(struct snd_kcontrol *kcontrol,
2263 struct snd_ctl_elem_info *uinfo)
2265 uinfo->type = SNDRV_CTL_ELEM_TYPE_IEC958;
2266 uinfo->count = 1;
2267 return 0;
2270 static int snd_hda_spdif_cmask_get(struct snd_kcontrol *kcontrol,
2271 struct snd_ctl_elem_value *ucontrol)
2273 ucontrol->value.iec958.status[0] = IEC958_AES0_PROFESSIONAL |
2274 IEC958_AES0_NONAUDIO |
2275 IEC958_AES0_CON_EMPHASIS_5015 |
2276 IEC958_AES0_CON_NOT_COPYRIGHT;
2277 ucontrol->value.iec958.status[1] = IEC958_AES1_CON_CATEGORY |
2278 IEC958_AES1_CON_ORIGINAL;
2279 return 0;
2282 static int snd_hda_spdif_pmask_get(struct snd_kcontrol *kcontrol,
2283 struct snd_ctl_elem_value *ucontrol)
2285 ucontrol->value.iec958.status[0] = IEC958_AES0_PROFESSIONAL |
2286 IEC958_AES0_NONAUDIO |
2287 IEC958_AES0_PRO_EMPHASIS_5015;
2288 return 0;
2291 static int snd_hda_spdif_default_get(struct snd_kcontrol *kcontrol,
2292 struct snd_ctl_elem_value *ucontrol)
2294 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2296 ucontrol->value.iec958.status[0] = codec->spdif_status & 0xff;
2297 ucontrol->value.iec958.status[1] = (codec->spdif_status >> 8) & 0xff;
2298 ucontrol->value.iec958.status[2] = (codec->spdif_status >> 16) & 0xff;
2299 ucontrol->value.iec958.status[3] = (codec->spdif_status >> 24) & 0xff;
2301 return 0;
2304 /* convert from SPDIF status bits to HDA SPDIF bits
2305 * bit 0 (DigEn) is always set zero (to be filled later)
2307 static unsigned short convert_from_spdif_status(unsigned int sbits)
2309 unsigned short val = 0;
2311 if (sbits & IEC958_AES0_PROFESSIONAL)
2312 val |= AC_DIG1_PROFESSIONAL;
2313 if (sbits & IEC958_AES0_NONAUDIO)
2314 val |= AC_DIG1_NONAUDIO;
2315 if (sbits & IEC958_AES0_PROFESSIONAL) {
2316 if ((sbits & IEC958_AES0_PRO_EMPHASIS) ==
2317 IEC958_AES0_PRO_EMPHASIS_5015)
2318 val |= AC_DIG1_EMPHASIS;
2319 } else {
2320 if ((sbits & IEC958_AES0_CON_EMPHASIS) ==
2321 IEC958_AES0_CON_EMPHASIS_5015)
2322 val |= AC_DIG1_EMPHASIS;
2323 if (!(sbits & IEC958_AES0_CON_NOT_COPYRIGHT))
2324 val |= AC_DIG1_COPYRIGHT;
2325 if (sbits & (IEC958_AES1_CON_ORIGINAL << 8))
2326 val |= AC_DIG1_LEVEL;
2327 val |= sbits & (IEC958_AES1_CON_CATEGORY << 8);
2329 return val;
2332 /* convert to SPDIF status bits from HDA SPDIF bits
2334 static unsigned int convert_to_spdif_status(unsigned short val)
2336 unsigned int sbits = 0;
2338 if (val & AC_DIG1_NONAUDIO)
2339 sbits |= IEC958_AES0_NONAUDIO;
2340 if (val & AC_DIG1_PROFESSIONAL)
2341 sbits |= IEC958_AES0_PROFESSIONAL;
2342 if (sbits & IEC958_AES0_PROFESSIONAL) {
2343 if (sbits & AC_DIG1_EMPHASIS)
2344 sbits |= IEC958_AES0_PRO_EMPHASIS_5015;
2345 } else {
2346 if (val & AC_DIG1_EMPHASIS)
2347 sbits |= IEC958_AES0_CON_EMPHASIS_5015;
2348 if (!(val & AC_DIG1_COPYRIGHT))
2349 sbits |= IEC958_AES0_CON_NOT_COPYRIGHT;
2350 if (val & AC_DIG1_LEVEL)
2351 sbits |= (IEC958_AES1_CON_ORIGINAL << 8);
2352 sbits |= val & (0x7f << 8);
2354 return sbits;
2357 /* set digital convert verbs both for the given NID and its slaves */
2358 static void set_dig_out(struct hda_codec *codec, hda_nid_t nid,
2359 int verb, int val)
2361 hda_nid_t *d;
2363 snd_hda_codec_write_cache(codec, nid, 0, verb, val);
2364 d = codec->slave_dig_outs;
2365 if (!d)
2366 return;
2367 for (; *d; d++)
2368 snd_hda_codec_write_cache(codec, *d, 0, verb, val);
2371 static inline void set_dig_out_convert(struct hda_codec *codec, hda_nid_t nid,
2372 int dig1, int dig2)
2374 if (dig1 != -1)
2375 set_dig_out(codec, nid, AC_VERB_SET_DIGI_CONVERT_1, dig1);
2376 if (dig2 != -1)
2377 set_dig_out(codec, nid, AC_VERB_SET_DIGI_CONVERT_2, dig2);
2380 static int snd_hda_spdif_default_put(struct snd_kcontrol *kcontrol,
2381 struct snd_ctl_elem_value *ucontrol)
2383 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2384 hda_nid_t nid = kcontrol->private_value;
2385 unsigned short val;
2386 int change;
2388 mutex_lock(&codec->spdif_mutex);
2389 codec->spdif_status = ucontrol->value.iec958.status[0] |
2390 ((unsigned int)ucontrol->value.iec958.status[1] << 8) |
2391 ((unsigned int)ucontrol->value.iec958.status[2] << 16) |
2392 ((unsigned int)ucontrol->value.iec958.status[3] << 24);
2393 val = convert_from_spdif_status(codec->spdif_status);
2394 val |= codec->spdif_ctls & 1;
2395 change = codec->spdif_ctls != val;
2396 codec->spdif_ctls = val;
2398 if (change)
2399 set_dig_out_convert(codec, nid, val & 0xff, (val >> 8) & 0xff);
2401 mutex_unlock(&codec->spdif_mutex);
2402 return change;
2405 #define snd_hda_spdif_out_switch_info snd_ctl_boolean_mono_info
2407 static int snd_hda_spdif_out_switch_get(struct snd_kcontrol *kcontrol,
2408 struct snd_ctl_elem_value *ucontrol)
2410 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2412 ucontrol->value.integer.value[0] = codec->spdif_ctls & AC_DIG1_ENABLE;
2413 return 0;
2416 static int snd_hda_spdif_out_switch_put(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 = kcontrol->private_value;
2421 unsigned short val;
2422 int change;
2424 mutex_lock(&codec->spdif_mutex);
2425 val = codec->spdif_ctls & ~AC_DIG1_ENABLE;
2426 if (ucontrol->value.integer.value[0])
2427 val |= AC_DIG1_ENABLE;
2428 change = codec->spdif_ctls != val;
2429 if (change) {
2430 codec->spdif_ctls = val;
2431 set_dig_out_convert(codec, nid, val & 0xff, -1);
2432 /* unmute amp switch (if any) */
2433 if ((get_wcaps(codec, nid) & AC_WCAP_OUT_AMP) &&
2434 (val & AC_DIG1_ENABLE))
2435 snd_hda_codec_amp_stereo(codec, nid, HDA_OUTPUT, 0,
2436 HDA_AMP_MUTE, 0);
2438 mutex_unlock(&codec->spdif_mutex);
2439 return change;
2442 static struct snd_kcontrol_new dig_mixes[] = {
2444 .access = SNDRV_CTL_ELEM_ACCESS_READ,
2445 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2446 .name = SNDRV_CTL_NAME_IEC958("", PLAYBACK, CON_MASK),
2447 .info = snd_hda_spdif_mask_info,
2448 .get = snd_hda_spdif_cmask_get,
2451 .access = SNDRV_CTL_ELEM_ACCESS_READ,
2452 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2453 .name = SNDRV_CTL_NAME_IEC958("", PLAYBACK, PRO_MASK),
2454 .info = snd_hda_spdif_mask_info,
2455 .get = snd_hda_spdif_pmask_get,
2458 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2459 .name = SNDRV_CTL_NAME_IEC958("", PLAYBACK, DEFAULT),
2460 .info = snd_hda_spdif_mask_info,
2461 .get = snd_hda_spdif_default_get,
2462 .put = snd_hda_spdif_default_put,
2465 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2466 .name = SNDRV_CTL_NAME_IEC958("", PLAYBACK, SWITCH),
2467 .info = snd_hda_spdif_out_switch_info,
2468 .get = snd_hda_spdif_out_switch_get,
2469 .put = snd_hda_spdif_out_switch_put,
2471 { } /* end */
2474 #define SPDIF_MAX_IDX 4 /* 4 instances should be enough to probe */
2477 * snd_hda_create_spdif_out_ctls - create Output SPDIF-related controls
2478 * @codec: the HDA codec
2479 * @nid: audio out widget NID
2481 * Creates controls related with the SPDIF output.
2482 * Called from each patch supporting the SPDIF out.
2484 * Returns 0 if successful, or a negative error code.
2486 int snd_hda_create_spdif_out_ctls(struct hda_codec *codec, hda_nid_t nid)
2488 int err;
2489 struct snd_kcontrol *kctl;
2490 struct snd_kcontrol_new *dig_mix;
2491 int idx;
2493 for (idx = 0; idx < SPDIF_MAX_IDX; idx++) {
2494 if (!_snd_hda_find_mixer_ctl(codec, "IEC958 Playback Switch",
2495 idx))
2496 break;
2498 if (idx >= SPDIF_MAX_IDX) {
2499 printk(KERN_ERR "hda_codec: too many IEC958 outputs\n");
2500 return -EBUSY;
2502 for (dig_mix = dig_mixes; dig_mix->name; dig_mix++) {
2503 kctl = snd_ctl_new1(dig_mix, codec);
2504 if (!kctl)
2505 return -ENOMEM;
2506 kctl->id.index = idx;
2507 kctl->private_value = nid;
2508 err = snd_hda_ctl_add(codec, nid, kctl);
2509 if (err < 0)
2510 return err;
2512 codec->spdif_ctls =
2513 snd_hda_codec_read(codec, nid, 0,
2514 AC_VERB_GET_DIGI_CONVERT_1, 0);
2515 codec->spdif_status = convert_to_spdif_status(codec->spdif_ctls);
2516 return 0;
2518 EXPORT_SYMBOL_HDA(snd_hda_create_spdif_out_ctls);
2521 * SPDIF sharing with analog output
2523 static int spdif_share_sw_get(struct snd_kcontrol *kcontrol,
2524 struct snd_ctl_elem_value *ucontrol)
2526 struct hda_multi_out *mout = snd_kcontrol_chip(kcontrol);
2527 ucontrol->value.integer.value[0] = mout->share_spdif;
2528 return 0;
2531 static int spdif_share_sw_put(struct snd_kcontrol *kcontrol,
2532 struct snd_ctl_elem_value *ucontrol)
2534 struct hda_multi_out *mout = snd_kcontrol_chip(kcontrol);
2535 mout->share_spdif = !!ucontrol->value.integer.value[0];
2536 return 0;
2539 static struct snd_kcontrol_new spdif_share_sw = {
2540 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2541 .name = "IEC958 Default PCM Playback Switch",
2542 .info = snd_ctl_boolean_mono_info,
2543 .get = spdif_share_sw_get,
2544 .put = spdif_share_sw_put,
2548 * snd_hda_create_spdif_share_sw - create Default PCM switch
2549 * @codec: the HDA codec
2550 * @mout: multi-out instance
2552 int snd_hda_create_spdif_share_sw(struct hda_codec *codec,
2553 struct hda_multi_out *mout)
2555 if (!mout->dig_out_nid)
2556 return 0;
2557 /* ATTENTION: here mout is passed as private_data, instead of codec */
2558 return snd_hda_ctl_add(codec, mout->dig_out_nid,
2559 snd_ctl_new1(&spdif_share_sw, mout));
2561 EXPORT_SYMBOL_HDA(snd_hda_create_spdif_share_sw);
2564 * SPDIF input
2567 #define snd_hda_spdif_in_switch_info snd_hda_spdif_out_switch_info
2569 static int snd_hda_spdif_in_switch_get(struct snd_kcontrol *kcontrol,
2570 struct snd_ctl_elem_value *ucontrol)
2572 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2574 ucontrol->value.integer.value[0] = codec->spdif_in_enable;
2575 return 0;
2578 static int snd_hda_spdif_in_switch_put(struct snd_kcontrol *kcontrol,
2579 struct snd_ctl_elem_value *ucontrol)
2581 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2582 hda_nid_t nid = kcontrol->private_value;
2583 unsigned int val = !!ucontrol->value.integer.value[0];
2584 int change;
2586 mutex_lock(&codec->spdif_mutex);
2587 change = codec->spdif_in_enable != val;
2588 if (change) {
2589 codec->spdif_in_enable = val;
2590 snd_hda_codec_write_cache(codec, nid, 0,
2591 AC_VERB_SET_DIGI_CONVERT_1, val);
2593 mutex_unlock(&codec->spdif_mutex);
2594 return change;
2597 static int snd_hda_spdif_in_status_get(struct snd_kcontrol *kcontrol,
2598 struct snd_ctl_elem_value *ucontrol)
2600 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2601 hda_nid_t nid = kcontrol->private_value;
2602 unsigned short val;
2603 unsigned int sbits;
2605 val = snd_hda_codec_read(codec, nid, 0, AC_VERB_GET_DIGI_CONVERT_1, 0);
2606 sbits = convert_to_spdif_status(val);
2607 ucontrol->value.iec958.status[0] = sbits;
2608 ucontrol->value.iec958.status[1] = sbits >> 8;
2609 ucontrol->value.iec958.status[2] = sbits >> 16;
2610 ucontrol->value.iec958.status[3] = sbits >> 24;
2611 return 0;
2614 static struct snd_kcontrol_new dig_in_ctls[] = {
2616 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2617 .name = SNDRV_CTL_NAME_IEC958("", CAPTURE, SWITCH),
2618 .info = snd_hda_spdif_in_switch_info,
2619 .get = snd_hda_spdif_in_switch_get,
2620 .put = snd_hda_spdif_in_switch_put,
2623 .access = SNDRV_CTL_ELEM_ACCESS_READ,
2624 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2625 .name = SNDRV_CTL_NAME_IEC958("", CAPTURE, DEFAULT),
2626 .info = snd_hda_spdif_mask_info,
2627 .get = snd_hda_spdif_in_status_get,
2629 { } /* end */
2633 * snd_hda_create_spdif_in_ctls - create Input SPDIF-related controls
2634 * @codec: the HDA codec
2635 * @nid: audio in widget NID
2637 * Creates controls related with the SPDIF input.
2638 * Called from each patch supporting the SPDIF in.
2640 * Returns 0 if successful, or a negative error code.
2642 int snd_hda_create_spdif_in_ctls(struct hda_codec *codec, hda_nid_t nid)
2644 int err;
2645 struct snd_kcontrol *kctl;
2646 struct snd_kcontrol_new *dig_mix;
2647 int idx;
2649 for (idx = 0; idx < SPDIF_MAX_IDX; idx++) {
2650 if (!_snd_hda_find_mixer_ctl(codec, "IEC958 Capture Switch",
2651 idx))
2652 break;
2654 if (idx >= SPDIF_MAX_IDX) {
2655 printk(KERN_ERR "hda_codec: too many IEC958 inputs\n");
2656 return -EBUSY;
2658 for (dig_mix = dig_in_ctls; dig_mix->name; dig_mix++) {
2659 kctl = snd_ctl_new1(dig_mix, codec);
2660 if (!kctl)
2661 return -ENOMEM;
2662 kctl->private_value = nid;
2663 err = snd_hda_ctl_add(codec, nid, kctl);
2664 if (err < 0)
2665 return err;
2667 codec->spdif_in_enable =
2668 snd_hda_codec_read(codec, nid, 0,
2669 AC_VERB_GET_DIGI_CONVERT_1, 0) &
2670 AC_DIG1_ENABLE;
2671 return 0;
2673 EXPORT_SYMBOL_HDA(snd_hda_create_spdif_in_ctls);
2675 #ifdef SND_HDA_NEEDS_RESUME
2677 * command cache
2680 /* build a 32bit cache key with the widget id and the command parameter */
2681 #define build_cmd_cache_key(nid, verb) ((verb << 8) | nid)
2682 #define get_cmd_cache_nid(key) ((key) & 0xff)
2683 #define get_cmd_cache_cmd(key) (((key) >> 8) & 0xffff)
2686 * snd_hda_codec_write_cache - send a single command with caching
2687 * @codec: the HDA codec
2688 * @nid: NID to send the command
2689 * @direct: direct flag
2690 * @verb: the verb to send
2691 * @parm: the parameter for the verb
2693 * Send a single command without waiting for response.
2695 * Returns 0 if successful, or a negative error code.
2697 int snd_hda_codec_write_cache(struct hda_codec *codec, hda_nid_t nid,
2698 int direct, unsigned int verb, unsigned int parm)
2700 int err = snd_hda_codec_write(codec, nid, direct, verb, parm);
2701 struct hda_cache_head *c;
2702 u32 key;
2704 if (err < 0)
2705 return err;
2706 /* parm may contain the verb stuff for get/set amp */
2707 verb = verb | (parm >> 8);
2708 parm &= 0xff;
2709 key = build_cmd_cache_key(nid, verb);
2710 mutex_lock(&codec->bus->cmd_mutex);
2711 c = get_alloc_hash(&codec->cmd_cache, key);
2712 if (c)
2713 c->val = parm;
2714 mutex_unlock(&codec->bus->cmd_mutex);
2715 return 0;
2717 EXPORT_SYMBOL_HDA(snd_hda_codec_write_cache);
2720 * snd_hda_codec_resume_cache - Resume the all commands from the cache
2721 * @codec: HD-audio codec
2723 * Execute all verbs recorded in the command caches to resume.
2725 void snd_hda_codec_resume_cache(struct hda_codec *codec)
2727 struct hda_cache_head *buffer = codec->cmd_cache.buf.list;
2728 int i;
2730 for (i = 0; i < codec->cmd_cache.buf.used; i++, buffer++) {
2731 u32 key = buffer->key;
2732 if (!key)
2733 continue;
2734 snd_hda_codec_write(codec, get_cmd_cache_nid(key), 0,
2735 get_cmd_cache_cmd(key), buffer->val);
2738 EXPORT_SYMBOL_HDA(snd_hda_codec_resume_cache);
2741 * snd_hda_sequence_write_cache - sequence writes with caching
2742 * @codec: the HDA codec
2743 * @seq: VERB array to send
2745 * Send the commands sequentially from the given array.
2746 * Thte commands are recorded on cache for power-save and resume.
2747 * The array must be terminated with NID=0.
2749 void snd_hda_sequence_write_cache(struct hda_codec *codec,
2750 const struct hda_verb *seq)
2752 for (; seq->nid; seq++)
2753 snd_hda_codec_write_cache(codec, seq->nid, 0, seq->verb,
2754 seq->param);
2756 EXPORT_SYMBOL_HDA(snd_hda_sequence_write_cache);
2757 #endif /* SND_HDA_NEEDS_RESUME */
2760 * set power state of the codec
2762 static void hda_set_power_state(struct hda_codec *codec, hda_nid_t fg,
2763 unsigned int power_state)
2765 hda_nid_t nid;
2766 int i;
2768 /* this delay seems necessary to avoid click noise at power-down */
2769 if (power_state == AC_PWRST_D3)
2770 msleep(100);
2771 snd_hda_codec_read(codec, fg, 0, AC_VERB_SET_POWER_STATE,
2772 power_state);
2773 /* partial workaround for "azx_get_response timeout" */
2774 if (power_state == AC_PWRST_D0 &&
2775 (codec->vendor_id & 0xffff0000) == 0x14f10000)
2776 msleep(10);
2778 nid = codec->start_nid;
2779 for (i = 0; i < codec->num_nodes; i++, nid++) {
2780 unsigned int wcaps = get_wcaps(codec, nid);
2781 if (wcaps & AC_WCAP_POWER) {
2782 unsigned int wid_type = get_wcaps_type(wcaps);
2783 if (power_state == AC_PWRST_D3 &&
2784 wid_type == AC_WID_PIN) {
2785 unsigned int pincap;
2787 * don't power down the widget if it controls
2788 * eapd and EAPD_BTLENABLE is set.
2790 pincap = snd_hda_query_pin_caps(codec, nid);
2791 if (pincap & AC_PINCAP_EAPD) {
2792 int eapd = snd_hda_codec_read(codec,
2793 nid, 0,
2794 AC_VERB_GET_EAPD_BTLENABLE, 0);
2795 eapd &= 0x02;
2796 if (eapd)
2797 continue;
2800 snd_hda_codec_write(codec, nid, 0,
2801 AC_VERB_SET_POWER_STATE,
2802 power_state);
2806 if (power_state == AC_PWRST_D0) {
2807 unsigned long end_time;
2808 int state;
2809 /* wait until the codec reachs to D0 */
2810 end_time = jiffies + msecs_to_jiffies(500);
2811 do {
2812 state = snd_hda_codec_read(codec, fg, 0,
2813 AC_VERB_GET_POWER_STATE, 0);
2814 if (state == power_state)
2815 break;
2816 msleep(1);
2817 } while (time_after_eq(end_time, jiffies));
2821 #ifdef CONFIG_SND_HDA_HWDEP
2822 /* execute additional init verbs */
2823 static void hda_exec_init_verbs(struct hda_codec *codec)
2825 if (codec->init_verbs.list)
2826 snd_hda_sequence_write(codec, codec->init_verbs.list);
2828 #else
2829 static inline void hda_exec_init_verbs(struct hda_codec *codec) {}
2830 #endif
2832 #ifdef SND_HDA_NEEDS_RESUME
2834 * call suspend and power-down; used both from PM and power-save
2836 static void hda_call_codec_suspend(struct hda_codec *codec)
2838 if (codec->patch_ops.suspend)
2839 codec->patch_ops.suspend(codec, PMSG_SUSPEND);
2840 hda_set_power_state(codec,
2841 codec->afg ? codec->afg : codec->mfg,
2842 AC_PWRST_D3);
2843 #ifdef CONFIG_SND_HDA_POWER_SAVE
2844 snd_hda_update_power_acct(codec);
2845 cancel_delayed_work(&codec->power_work);
2846 codec->power_on = 0;
2847 codec->power_transition = 0;
2848 codec->power_jiffies = jiffies;
2849 #endif
2853 * kick up codec; used both from PM and power-save
2855 static void hda_call_codec_resume(struct hda_codec *codec)
2857 hda_set_power_state(codec,
2858 codec->afg ? codec->afg : codec->mfg,
2859 AC_PWRST_D0);
2860 restore_pincfgs(codec); /* restore all current pin configs */
2861 hda_exec_init_verbs(codec);
2862 if (codec->patch_ops.resume)
2863 codec->patch_ops.resume(codec);
2864 else {
2865 if (codec->patch_ops.init)
2866 codec->patch_ops.init(codec);
2867 snd_hda_codec_resume_amp(codec);
2868 snd_hda_codec_resume_cache(codec);
2871 #endif /* SND_HDA_NEEDS_RESUME */
2875 * snd_hda_build_controls - build mixer controls
2876 * @bus: the BUS
2878 * Creates mixer controls for each codec included in the bus.
2880 * Returns 0 if successful, otherwise a negative error code.
2882 int /*__devinit*/ snd_hda_build_controls(struct hda_bus *bus)
2884 struct hda_codec *codec;
2886 list_for_each_entry(codec, &bus->codec_list, list) {
2887 int err = snd_hda_codec_build_controls(codec);
2888 if (err < 0) {
2889 printk(KERN_ERR "hda_codec: cannot build controls "
2890 "for #%d (error %d)\n", codec->addr, err);
2891 err = snd_hda_codec_reset(codec);
2892 if (err < 0) {
2893 printk(KERN_ERR
2894 "hda_codec: cannot revert codec\n");
2895 return err;
2899 return 0;
2901 EXPORT_SYMBOL_HDA(snd_hda_build_controls);
2903 int snd_hda_codec_build_controls(struct hda_codec *codec)
2905 int err = 0;
2906 hda_exec_init_verbs(codec);
2907 /* continue to initialize... */
2908 if (codec->patch_ops.init)
2909 err = codec->patch_ops.init(codec);
2910 if (!err && codec->patch_ops.build_controls)
2911 err = codec->patch_ops.build_controls(codec);
2912 if (err < 0)
2913 return err;
2914 return 0;
2918 * stream formats
2920 struct hda_rate_tbl {
2921 unsigned int hz;
2922 unsigned int alsa_bits;
2923 unsigned int hda_fmt;
2926 static struct hda_rate_tbl rate_bits[] = {
2927 /* rate in Hz, ALSA rate bitmask, HDA format value */
2929 /* autodetected value used in snd_hda_query_supported_pcm */
2930 { 8000, SNDRV_PCM_RATE_8000, 0x0500 }, /* 1/6 x 48 */
2931 { 11025, SNDRV_PCM_RATE_11025, 0x4300 }, /* 1/4 x 44 */
2932 { 16000, SNDRV_PCM_RATE_16000, 0x0200 }, /* 1/3 x 48 */
2933 { 22050, SNDRV_PCM_RATE_22050, 0x4100 }, /* 1/2 x 44 */
2934 { 32000, SNDRV_PCM_RATE_32000, 0x0a00 }, /* 2/3 x 48 */
2935 { 44100, SNDRV_PCM_RATE_44100, 0x4000 }, /* 44 */
2936 { 48000, SNDRV_PCM_RATE_48000, 0x0000 }, /* 48 */
2937 { 88200, SNDRV_PCM_RATE_88200, 0x4800 }, /* 2 x 44 */
2938 { 96000, SNDRV_PCM_RATE_96000, 0x0800 }, /* 2 x 48 */
2939 { 176400, SNDRV_PCM_RATE_176400, 0x5800 },/* 4 x 44 */
2940 { 192000, SNDRV_PCM_RATE_192000, 0x1800 }, /* 4 x 48 */
2941 #define AC_PAR_PCM_RATE_BITS 11
2942 /* up to bits 10, 384kHZ isn't supported properly */
2944 /* not autodetected value */
2945 { 9600, SNDRV_PCM_RATE_KNOT, 0x0400 }, /* 1/5 x 48 */
2947 { 0 } /* terminator */
2951 * snd_hda_calc_stream_format - calculate format bitset
2952 * @rate: the sample rate
2953 * @channels: the number of channels
2954 * @format: the PCM format (SNDRV_PCM_FORMAT_XXX)
2955 * @maxbps: the max. bps
2957 * Calculate the format bitset from the given rate, channels and th PCM format.
2959 * Return zero if invalid.
2961 unsigned int snd_hda_calc_stream_format(unsigned int rate,
2962 unsigned int channels,
2963 unsigned int format,
2964 unsigned int maxbps)
2966 int i;
2967 unsigned int val = 0;
2969 for (i = 0; rate_bits[i].hz; i++)
2970 if (rate_bits[i].hz == rate) {
2971 val = rate_bits[i].hda_fmt;
2972 break;
2974 if (!rate_bits[i].hz) {
2975 snd_printdd("invalid rate %d\n", rate);
2976 return 0;
2979 if (channels == 0 || channels > 8) {
2980 snd_printdd("invalid channels %d\n", channels);
2981 return 0;
2983 val |= channels - 1;
2985 switch (snd_pcm_format_width(format)) {
2986 case 8:
2987 val |= 0x00;
2988 break;
2989 case 16:
2990 val |= 0x10;
2991 break;
2992 case 20:
2993 case 24:
2994 case 32:
2995 if (maxbps >= 32 || format == SNDRV_PCM_FORMAT_FLOAT_LE)
2996 val |= 0x40;
2997 else if (maxbps >= 24)
2998 val |= 0x30;
2999 else
3000 val |= 0x20;
3001 break;
3002 default:
3003 snd_printdd("invalid format width %d\n",
3004 snd_pcm_format_width(format));
3005 return 0;
3008 return val;
3010 EXPORT_SYMBOL_HDA(snd_hda_calc_stream_format);
3012 static unsigned int get_pcm_param(struct hda_codec *codec, hda_nid_t nid)
3014 unsigned int val = 0;
3015 if (nid != codec->afg &&
3016 (get_wcaps(codec, nid) & AC_WCAP_FORMAT_OVRD))
3017 val = snd_hda_param_read(codec, nid, AC_PAR_PCM);
3018 if (!val || val == -1)
3019 val = snd_hda_param_read(codec, codec->afg, AC_PAR_PCM);
3020 if (!val || val == -1)
3021 return 0;
3022 return val;
3025 static unsigned int query_pcm_param(struct hda_codec *codec, hda_nid_t nid)
3027 return query_caps_hash(codec, nid, HDA_HASH_PARPCM_KEY(nid),
3028 get_pcm_param);
3031 static unsigned int get_stream_param(struct hda_codec *codec, hda_nid_t nid)
3033 unsigned int streams = snd_hda_param_read(codec, nid, AC_PAR_STREAM);
3034 if (!streams || streams == -1)
3035 streams = snd_hda_param_read(codec, codec->afg, AC_PAR_STREAM);
3036 if (!streams || streams == -1)
3037 return 0;
3038 return streams;
3041 static unsigned int query_stream_param(struct hda_codec *codec, hda_nid_t nid)
3043 return query_caps_hash(codec, nid, HDA_HASH_PARSTR_KEY(nid),
3044 get_stream_param);
3048 * snd_hda_query_supported_pcm - query the supported PCM rates and formats
3049 * @codec: the HDA codec
3050 * @nid: NID to query
3051 * @ratesp: the pointer to store the detected rate bitflags
3052 * @formatsp: the pointer to store the detected formats
3053 * @bpsp: the pointer to store the detected format widths
3055 * Queries the supported PCM rates and formats. The NULL @ratesp, @formatsp
3056 * or @bsps argument is ignored.
3058 * Returns 0 if successful, otherwise a negative error code.
3060 static int snd_hda_query_supported_pcm(struct hda_codec *codec, hda_nid_t nid,
3061 u32 *ratesp, u64 *formatsp, unsigned int *bpsp)
3063 unsigned int i, val, wcaps;
3065 wcaps = get_wcaps(codec, nid);
3066 val = query_pcm_param(codec, nid);
3068 if (ratesp) {
3069 u32 rates = 0;
3070 for (i = 0; i < AC_PAR_PCM_RATE_BITS; i++) {
3071 if (val & (1 << i))
3072 rates |= rate_bits[i].alsa_bits;
3074 if (rates == 0) {
3075 snd_printk(KERN_ERR "hda_codec: rates == 0 "
3076 "(nid=0x%x, val=0x%x, ovrd=%i)\n",
3077 nid, val,
3078 (wcaps & AC_WCAP_FORMAT_OVRD) ? 1 : 0);
3079 return -EIO;
3081 *ratesp = rates;
3084 if (formatsp || bpsp) {
3085 u64 formats = 0;
3086 unsigned int streams, bps;
3088 streams = query_stream_param(codec, nid);
3089 if (!streams)
3090 return -EIO;
3092 bps = 0;
3093 if (streams & AC_SUPFMT_PCM) {
3094 if (val & AC_SUPPCM_BITS_8) {
3095 formats |= SNDRV_PCM_FMTBIT_U8;
3096 bps = 8;
3098 if (val & AC_SUPPCM_BITS_16) {
3099 formats |= SNDRV_PCM_FMTBIT_S16_LE;
3100 bps = 16;
3102 if (wcaps & AC_WCAP_DIGITAL) {
3103 if (val & AC_SUPPCM_BITS_32)
3104 formats |= SNDRV_PCM_FMTBIT_IEC958_SUBFRAME_LE;
3105 if (val & (AC_SUPPCM_BITS_20|AC_SUPPCM_BITS_24))
3106 formats |= SNDRV_PCM_FMTBIT_S32_LE;
3107 if (val & AC_SUPPCM_BITS_24)
3108 bps = 24;
3109 else if (val & AC_SUPPCM_BITS_20)
3110 bps = 20;
3111 } else if (val & (AC_SUPPCM_BITS_20|AC_SUPPCM_BITS_24|
3112 AC_SUPPCM_BITS_32)) {
3113 formats |= SNDRV_PCM_FMTBIT_S32_LE;
3114 if (val & AC_SUPPCM_BITS_32)
3115 bps = 32;
3116 else if (val & AC_SUPPCM_BITS_24)
3117 bps = 24;
3118 else if (val & AC_SUPPCM_BITS_20)
3119 bps = 20;
3122 if (streams & AC_SUPFMT_FLOAT32) {
3123 formats |= SNDRV_PCM_FMTBIT_FLOAT_LE;
3124 if (!bps)
3125 bps = 32;
3127 if (streams == AC_SUPFMT_AC3) {
3128 /* should be exclusive */
3129 /* temporary hack: we have still no proper support
3130 * for the direct AC3 stream...
3132 formats |= SNDRV_PCM_FMTBIT_U8;
3133 bps = 8;
3135 if (formats == 0) {
3136 snd_printk(KERN_ERR "hda_codec: formats == 0 "
3137 "(nid=0x%x, val=0x%x, ovrd=%i, "
3138 "streams=0x%x)\n",
3139 nid, val,
3140 (wcaps & AC_WCAP_FORMAT_OVRD) ? 1 : 0,
3141 streams);
3142 return -EIO;
3144 if (formatsp)
3145 *formatsp = formats;
3146 if (bpsp)
3147 *bpsp = bps;
3150 return 0;
3154 * snd_hda_is_supported_format - Check the validity of the format
3155 * @codec: HD-audio codec
3156 * @nid: NID to check
3157 * @format: the HD-audio format value to check
3159 * Check whether the given node supports the format value.
3161 * Returns 1 if supported, 0 if not.
3163 int snd_hda_is_supported_format(struct hda_codec *codec, hda_nid_t nid,
3164 unsigned int format)
3166 int i;
3167 unsigned int val = 0, rate, stream;
3169 val = query_pcm_param(codec, nid);
3170 if (!val)
3171 return 0;
3173 rate = format & 0xff00;
3174 for (i = 0; i < AC_PAR_PCM_RATE_BITS; i++)
3175 if (rate_bits[i].hda_fmt == rate) {
3176 if (val & (1 << i))
3177 break;
3178 return 0;
3180 if (i >= AC_PAR_PCM_RATE_BITS)
3181 return 0;
3183 stream = query_stream_param(codec, nid);
3184 if (!stream)
3185 return 0;
3187 if (stream & AC_SUPFMT_PCM) {
3188 switch (format & 0xf0) {
3189 case 0x00:
3190 if (!(val & AC_SUPPCM_BITS_8))
3191 return 0;
3192 break;
3193 case 0x10:
3194 if (!(val & AC_SUPPCM_BITS_16))
3195 return 0;
3196 break;
3197 case 0x20:
3198 if (!(val & AC_SUPPCM_BITS_20))
3199 return 0;
3200 break;
3201 case 0x30:
3202 if (!(val & AC_SUPPCM_BITS_24))
3203 return 0;
3204 break;
3205 case 0x40:
3206 if (!(val & AC_SUPPCM_BITS_32))
3207 return 0;
3208 break;
3209 default:
3210 return 0;
3212 } else {
3213 /* FIXME: check for float32 and AC3? */
3216 return 1;
3218 EXPORT_SYMBOL_HDA(snd_hda_is_supported_format);
3221 * PCM stuff
3223 static int hda_pcm_default_open_close(struct hda_pcm_stream *hinfo,
3224 struct hda_codec *codec,
3225 struct snd_pcm_substream *substream)
3227 return 0;
3230 static int hda_pcm_default_prepare(struct hda_pcm_stream *hinfo,
3231 struct hda_codec *codec,
3232 unsigned int stream_tag,
3233 unsigned int format,
3234 struct snd_pcm_substream *substream)
3236 snd_hda_codec_setup_stream(codec, hinfo->nid, stream_tag, 0, format);
3237 return 0;
3240 static int hda_pcm_default_cleanup(struct hda_pcm_stream *hinfo,
3241 struct hda_codec *codec,
3242 struct snd_pcm_substream *substream)
3244 snd_hda_codec_cleanup_stream(codec, hinfo->nid);
3245 return 0;
3248 static int set_pcm_default_values(struct hda_codec *codec,
3249 struct hda_pcm_stream *info)
3251 int err;
3253 /* query support PCM information from the given NID */
3254 if (info->nid && (!info->rates || !info->formats)) {
3255 err = snd_hda_query_supported_pcm(codec, info->nid,
3256 info->rates ? NULL : &info->rates,
3257 info->formats ? NULL : &info->formats,
3258 info->maxbps ? NULL : &info->maxbps);
3259 if (err < 0)
3260 return err;
3262 if (info->ops.open == NULL)
3263 info->ops.open = hda_pcm_default_open_close;
3264 if (info->ops.close == NULL)
3265 info->ops.close = hda_pcm_default_open_close;
3266 if (info->ops.prepare == NULL) {
3267 if (snd_BUG_ON(!info->nid))
3268 return -EINVAL;
3269 info->ops.prepare = hda_pcm_default_prepare;
3271 if (info->ops.cleanup == NULL) {
3272 if (snd_BUG_ON(!info->nid))
3273 return -EINVAL;
3274 info->ops.cleanup = hda_pcm_default_cleanup;
3276 return 0;
3279 /* global */
3280 const char *snd_hda_pcm_type_name[HDA_PCM_NTYPES] = {
3281 "Audio", "SPDIF", "HDMI", "Modem"
3285 * get the empty PCM device number to assign
3287 * note the max device number is limited by HDA_MAX_PCMS, currently 10
3289 static int get_empty_pcm_device(struct hda_bus *bus, int type)
3291 /* audio device indices; not linear to keep compatibility */
3292 static int audio_idx[HDA_PCM_NTYPES][5] = {
3293 [HDA_PCM_TYPE_AUDIO] = { 0, 2, 4, 5, -1 },
3294 [HDA_PCM_TYPE_SPDIF] = { 1, -1 },
3295 [HDA_PCM_TYPE_HDMI] = { 3, 7, 8, 9, -1 },
3296 [HDA_PCM_TYPE_MODEM] = { 6, -1 },
3298 int i;
3300 if (type >= HDA_PCM_NTYPES) {
3301 snd_printk(KERN_WARNING "Invalid PCM type %d\n", type);
3302 return -EINVAL;
3305 for (i = 0; audio_idx[type][i] >= 0 ; i++)
3306 if (!test_and_set_bit(audio_idx[type][i], bus->pcm_dev_bits))
3307 return audio_idx[type][i];
3309 snd_printk(KERN_WARNING "Too many %s devices\n",
3310 snd_hda_pcm_type_name[type]);
3311 return -EAGAIN;
3315 * attach a new PCM stream
3317 static int snd_hda_attach_pcm(struct hda_codec *codec, struct hda_pcm *pcm)
3319 struct hda_bus *bus = codec->bus;
3320 struct hda_pcm_stream *info;
3321 int stream, err;
3323 if (snd_BUG_ON(!pcm->name))
3324 return -EINVAL;
3325 for (stream = 0; stream < 2; stream++) {
3326 info = &pcm->stream[stream];
3327 if (info->substreams) {
3328 err = set_pcm_default_values(codec, info);
3329 if (err < 0)
3330 return err;
3333 return bus->ops.attach_pcm(bus, codec, pcm);
3336 /* assign all PCMs of the given codec */
3337 int snd_hda_codec_build_pcms(struct hda_codec *codec)
3339 unsigned int pcm;
3340 int err;
3342 if (!codec->num_pcms) {
3343 if (!codec->patch_ops.build_pcms)
3344 return 0;
3345 err = codec->patch_ops.build_pcms(codec);
3346 if (err < 0) {
3347 printk(KERN_ERR "hda_codec: cannot build PCMs"
3348 "for #%d (error %d)\n", codec->addr, err);
3349 err = snd_hda_codec_reset(codec);
3350 if (err < 0) {
3351 printk(KERN_ERR
3352 "hda_codec: cannot revert codec\n");
3353 return err;
3357 for (pcm = 0; pcm < codec->num_pcms; pcm++) {
3358 struct hda_pcm *cpcm = &codec->pcm_info[pcm];
3359 int dev;
3361 if (!cpcm->stream[0].substreams && !cpcm->stream[1].substreams)
3362 continue; /* no substreams assigned */
3364 if (!cpcm->pcm) {
3365 dev = get_empty_pcm_device(codec->bus, cpcm->pcm_type);
3366 if (dev < 0)
3367 continue; /* no fatal error */
3368 cpcm->device = dev;
3369 err = snd_hda_attach_pcm(codec, cpcm);
3370 if (err < 0) {
3371 printk(KERN_ERR "hda_codec: cannot attach "
3372 "PCM stream %d for codec #%d\n",
3373 dev, codec->addr);
3374 continue; /* no fatal error */
3378 return 0;
3382 * snd_hda_build_pcms - build PCM information
3383 * @bus: the BUS
3385 * Create PCM information for each codec included in the bus.
3387 * The build_pcms codec patch is requested to set up codec->num_pcms and
3388 * codec->pcm_info properly. The array is referred by the top-level driver
3389 * to create its PCM instances.
3390 * The allocated codec->pcm_info should be released in codec->patch_ops.free
3391 * callback.
3393 * At least, substreams, channels_min and channels_max must be filled for
3394 * each stream. substreams = 0 indicates that the stream doesn't exist.
3395 * When rates and/or formats are zero, the supported values are queried
3396 * from the given nid. The nid is used also by the default ops.prepare
3397 * and ops.cleanup callbacks.
3399 * The driver needs to call ops.open in its open callback. Similarly,
3400 * ops.close is supposed to be called in the close callback.
3401 * ops.prepare should be called in the prepare or hw_params callback
3402 * with the proper parameters for set up.
3403 * ops.cleanup should be called in hw_free for clean up of streams.
3405 * This function returns 0 if successfull, or a negative error code.
3407 int __devinit snd_hda_build_pcms(struct hda_bus *bus)
3409 struct hda_codec *codec;
3411 list_for_each_entry(codec, &bus->codec_list, list) {
3412 int err = snd_hda_codec_build_pcms(codec);
3413 if (err < 0)
3414 return err;
3416 return 0;
3418 EXPORT_SYMBOL_HDA(snd_hda_build_pcms);
3421 * snd_hda_check_board_config - compare the current codec with the config table
3422 * @codec: the HDA codec
3423 * @num_configs: number of config enums
3424 * @models: array of model name strings
3425 * @tbl: configuration table, terminated by null entries
3427 * Compares the modelname or PCI subsystem id of the current codec with the
3428 * given configuration table. If a matching entry is found, returns its
3429 * config value (supposed to be 0 or positive).
3431 * If no entries are matching, the function returns a negative value.
3433 int snd_hda_check_board_config(struct hda_codec *codec,
3434 int num_configs, const char **models,
3435 const struct snd_pci_quirk *tbl)
3437 if (codec->modelname && models) {
3438 int i;
3439 for (i = 0; i < num_configs; i++) {
3440 if (models[i] &&
3441 !strcmp(codec->modelname, models[i])) {
3442 snd_printd(KERN_INFO "hda_codec: model '%s' is "
3443 "selected\n", models[i]);
3444 return i;
3449 if (!codec->bus->pci || !tbl)
3450 return -1;
3452 tbl = snd_pci_quirk_lookup(codec->bus->pci, tbl);
3453 if (!tbl)
3454 return -1;
3455 if (tbl->value >= 0 && tbl->value < num_configs) {
3456 #ifdef CONFIG_SND_DEBUG_VERBOSE
3457 char tmp[10];
3458 const char *model = NULL;
3459 if (models)
3460 model = models[tbl->value];
3461 if (!model) {
3462 sprintf(tmp, "#%d", tbl->value);
3463 model = tmp;
3465 snd_printdd(KERN_INFO "hda_codec: model '%s' is selected "
3466 "for config %x:%x (%s)\n",
3467 model, tbl->subvendor, tbl->subdevice,
3468 (tbl->name ? tbl->name : "Unknown device"));
3469 #endif
3470 return tbl->value;
3472 return -1;
3474 EXPORT_SYMBOL_HDA(snd_hda_check_board_config);
3477 * snd_hda_check_board_codec_sid_config - compare the current codec
3478 subsystem ID with the
3479 config table
3481 This is important for Gateway notebooks with SB450 HDA Audio
3482 where the vendor ID of the PCI device is:
3483 ATI Technologies Inc SB450 HDA Audio [1002:437b]
3484 and the vendor/subvendor are found only at the codec.
3486 * @codec: the HDA codec
3487 * @num_configs: number of config enums
3488 * @models: array of model name strings
3489 * @tbl: configuration table, terminated by null entries
3491 * Compares the modelname or PCI subsystem id of the current codec with the
3492 * given configuration table. If a matching entry is found, returns its
3493 * config value (supposed to be 0 or positive).
3495 * If no entries are matching, the function returns a negative value.
3497 int snd_hda_check_board_codec_sid_config(struct hda_codec *codec,
3498 int num_configs, const char **models,
3499 const struct snd_pci_quirk *tbl)
3501 const struct snd_pci_quirk *q;
3503 /* Search for codec ID */
3504 for (q = tbl; q->subvendor; q++) {
3505 unsigned long vendorid = (q->subdevice) | (q->subvendor << 16);
3507 if (vendorid == codec->subsystem_id)
3508 break;
3511 if (!q->subvendor)
3512 return -1;
3514 tbl = q;
3516 if (tbl->value >= 0 && tbl->value < num_configs) {
3517 #ifdef CONFIG_SND_DEBUG_VERBOSE
3518 char tmp[10];
3519 const char *model = NULL;
3520 if (models)
3521 model = models[tbl->value];
3522 if (!model) {
3523 sprintf(tmp, "#%d", tbl->value);
3524 model = tmp;
3526 snd_printdd(KERN_INFO "hda_codec: model '%s' is selected "
3527 "for config %x:%x (%s)\n",
3528 model, tbl->subvendor, tbl->subdevice,
3529 (tbl->name ? tbl->name : "Unknown device"));
3530 #endif
3531 return tbl->value;
3533 return -1;
3535 EXPORT_SYMBOL_HDA(snd_hda_check_board_codec_sid_config);
3538 * snd_hda_add_new_ctls - create controls from the array
3539 * @codec: the HDA codec
3540 * @knew: the array of struct snd_kcontrol_new
3542 * This helper function creates and add new controls in the given array.
3543 * The array must be terminated with an empty entry as terminator.
3545 * Returns 0 if successful, or a negative error code.
3547 int snd_hda_add_new_ctls(struct hda_codec *codec, struct snd_kcontrol_new *knew)
3549 int err;
3551 for (; knew->name; knew++) {
3552 struct snd_kcontrol *kctl;
3553 if (knew->iface == -1) /* skip this codec private value */
3554 continue;
3555 kctl = snd_ctl_new1(knew, codec);
3556 if (!kctl)
3557 return -ENOMEM;
3558 err = snd_hda_ctl_add(codec, 0, kctl);
3559 if (err < 0) {
3560 if (!codec->addr)
3561 return err;
3562 kctl = snd_ctl_new1(knew, codec);
3563 if (!kctl)
3564 return -ENOMEM;
3565 kctl->id.device = codec->addr;
3566 err = snd_hda_ctl_add(codec, 0, kctl);
3567 if (err < 0)
3568 return err;
3571 return 0;
3573 EXPORT_SYMBOL_HDA(snd_hda_add_new_ctls);
3575 #ifdef CONFIG_SND_HDA_POWER_SAVE
3576 static void hda_set_power_state(struct hda_codec *codec, hda_nid_t fg,
3577 unsigned int power_state);
3579 static void hda_power_work(struct work_struct *work)
3581 struct hda_codec *codec =
3582 container_of(work, struct hda_codec, power_work.work);
3583 struct hda_bus *bus = codec->bus;
3585 if (!codec->power_on || codec->power_count) {
3586 codec->power_transition = 0;
3587 return;
3590 hda_call_codec_suspend(codec);
3591 if (bus->ops.pm_notify)
3592 bus->ops.pm_notify(bus);
3595 static void hda_keep_power_on(struct hda_codec *codec)
3597 codec->power_count++;
3598 codec->power_on = 1;
3599 codec->power_jiffies = jiffies;
3602 /* update the power on/off account with the current jiffies */
3603 void snd_hda_update_power_acct(struct hda_codec *codec)
3605 unsigned long delta = jiffies - codec->power_jiffies;
3606 if (codec->power_on)
3607 codec->power_on_acct += delta;
3608 else
3609 codec->power_off_acct += delta;
3610 codec->power_jiffies += delta;
3614 * snd_hda_power_up - Power-up the codec
3615 * @codec: HD-audio codec
3617 * Increment the power-up counter and power up the hardware really when
3618 * not turned on yet.
3620 void snd_hda_power_up(struct hda_codec *codec)
3622 struct hda_bus *bus = codec->bus;
3624 codec->power_count++;
3625 if (codec->power_on || codec->power_transition)
3626 return;
3628 snd_hda_update_power_acct(codec);
3629 codec->power_on = 1;
3630 codec->power_jiffies = jiffies;
3631 if (bus->ops.pm_notify)
3632 bus->ops.pm_notify(bus);
3633 hda_call_codec_resume(codec);
3634 cancel_delayed_work(&codec->power_work);
3635 codec->power_transition = 0;
3637 EXPORT_SYMBOL_HDA(snd_hda_power_up);
3639 #define power_save(codec) \
3640 ((codec)->bus->power_save ? *(codec)->bus->power_save : 0)
3643 * snd_hda_power_down - Power-down the codec
3644 * @codec: HD-audio codec
3646 * Decrement the power-up counter and schedules the power-off work if
3647 * the counter rearches to zero.
3649 void snd_hda_power_down(struct hda_codec *codec)
3651 --codec->power_count;
3652 if (!codec->power_on || codec->power_count || codec->power_transition)
3653 return;
3654 if (power_save(codec)) {
3655 codec->power_transition = 1; /* avoid reentrance */
3656 queue_delayed_work(codec->bus->workq, &codec->power_work,
3657 msecs_to_jiffies(power_save(codec) * 1000));
3660 EXPORT_SYMBOL_HDA(snd_hda_power_down);
3663 * snd_hda_check_amp_list_power - Check the amp list and update the power
3664 * @codec: HD-audio codec
3665 * @check: the object containing an AMP list and the status
3666 * @nid: NID to check / update
3668 * Check whether the given NID is in the amp list. If it's in the list,
3669 * check the current AMP status, and update the the power-status according
3670 * to the mute status.
3672 * This function is supposed to be set or called from the check_power_status
3673 * patch ops.
3675 int snd_hda_check_amp_list_power(struct hda_codec *codec,
3676 struct hda_loopback_check *check,
3677 hda_nid_t nid)
3679 struct hda_amp_list *p;
3680 int ch, v;
3682 if (!check->amplist)
3683 return 0;
3684 for (p = check->amplist; p->nid; p++) {
3685 if (p->nid == nid)
3686 break;
3688 if (!p->nid)
3689 return 0; /* nothing changed */
3691 for (p = check->amplist; p->nid; p++) {
3692 for (ch = 0; ch < 2; ch++) {
3693 v = snd_hda_codec_amp_read(codec, p->nid, ch, p->dir,
3694 p->idx);
3695 if (!(v & HDA_AMP_MUTE) && v > 0) {
3696 if (!check->power_on) {
3697 check->power_on = 1;
3698 snd_hda_power_up(codec);
3700 return 1;
3704 if (check->power_on) {
3705 check->power_on = 0;
3706 snd_hda_power_down(codec);
3708 return 0;
3710 EXPORT_SYMBOL_HDA(snd_hda_check_amp_list_power);
3711 #endif
3714 * Channel mode helper
3718 * snd_hda_ch_mode_info - Info callback helper for the channel mode enum
3720 int snd_hda_ch_mode_info(struct hda_codec *codec,
3721 struct snd_ctl_elem_info *uinfo,
3722 const struct hda_channel_mode *chmode,
3723 int num_chmodes)
3725 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
3726 uinfo->count = 1;
3727 uinfo->value.enumerated.items = num_chmodes;
3728 if (uinfo->value.enumerated.item >= num_chmodes)
3729 uinfo->value.enumerated.item = num_chmodes - 1;
3730 sprintf(uinfo->value.enumerated.name, "%dch",
3731 chmode[uinfo->value.enumerated.item].channels);
3732 return 0;
3734 EXPORT_SYMBOL_HDA(snd_hda_ch_mode_info);
3737 * snd_hda_ch_mode_get - Get callback helper for the channel mode enum
3739 int snd_hda_ch_mode_get(struct hda_codec *codec,
3740 struct snd_ctl_elem_value *ucontrol,
3741 const struct hda_channel_mode *chmode,
3742 int num_chmodes,
3743 int max_channels)
3745 int i;
3747 for (i = 0; i < num_chmodes; i++) {
3748 if (max_channels == chmode[i].channels) {
3749 ucontrol->value.enumerated.item[0] = i;
3750 break;
3753 return 0;
3755 EXPORT_SYMBOL_HDA(snd_hda_ch_mode_get);
3758 * snd_hda_ch_mode_put - Put callback helper for the channel mode enum
3760 int snd_hda_ch_mode_put(struct hda_codec *codec,
3761 struct snd_ctl_elem_value *ucontrol,
3762 const struct hda_channel_mode *chmode,
3763 int num_chmodes,
3764 int *max_channelsp)
3766 unsigned int mode;
3768 mode = ucontrol->value.enumerated.item[0];
3769 if (mode >= num_chmodes)
3770 return -EINVAL;
3771 if (*max_channelsp == chmode[mode].channels)
3772 return 0;
3773 /* change the current channel setting */
3774 *max_channelsp = chmode[mode].channels;
3775 if (chmode[mode].sequence)
3776 snd_hda_sequence_write_cache(codec, chmode[mode].sequence);
3777 return 1;
3779 EXPORT_SYMBOL_HDA(snd_hda_ch_mode_put);
3782 * input MUX helper
3786 * snd_hda_input_mux_info_info - Info callback helper for the input-mux enum
3788 int snd_hda_input_mux_info(const struct hda_input_mux *imux,
3789 struct snd_ctl_elem_info *uinfo)
3791 unsigned int index;
3793 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
3794 uinfo->count = 1;
3795 uinfo->value.enumerated.items = imux->num_items;
3796 if (!imux->num_items)
3797 return 0;
3798 index = uinfo->value.enumerated.item;
3799 if (index >= imux->num_items)
3800 index = imux->num_items - 1;
3801 strcpy(uinfo->value.enumerated.name, imux->items[index].label);
3802 return 0;
3804 EXPORT_SYMBOL_HDA(snd_hda_input_mux_info);
3807 * snd_hda_input_mux_info_put - Put callback helper for the input-mux enum
3809 int snd_hda_input_mux_put(struct hda_codec *codec,
3810 const struct hda_input_mux *imux,
3811 struct snd_ctl_elem_value *ucontrol,
3812 hda_nid_t nid,
3813 unsigned int *cur_val)
3815 unsigned int idx;
3817 if (!imux->num_items)
3818 return 0;
3819 idx = ucontrol->value.enumerated.item[0];
3820 if (idx >= imux->num_items)
3821 idx = imux->num_items - 1;
3822 if (*cur_val == idx)
3823 return 0;
3824 snd_hda_codec_write_cache(codec, nid, 0, AC_VERB_SET_CONNECT_SEL,
3825 imux->items[idx].index);
3826 *cur_val = idx;
3827 return 1;
3829 EXPORT_SYMBOL_HDA(snd_hda_input_mux_put);
3833 * Multi-channel / digital-out PCM helper functions
3836 /* setup SPDIF output stream */
3837 static void setup_dig_out_stream(struct hda_codec *codec, hda_nid_t nid,
3838 unsigned int stream_tag, unsigned int format)
3840 /* turn off SPDIF once; otherwise the IEC958 bits won't be updated */
3841 if (codec->spdif_status_reset && (codec->spdif_ctls & AC_DIG1_ENABLE))
3842 set_dig_out_convert(codec, nid,
3843 codec->spdif_ctls & ~AC_DIG1_ENABLE & 0xff,
3844 -1);
3845 snd_hda_codec_setup_stream(codec, nid, stream_tag, 0, format);
3846 if (codec->slave_dig_outs) {
3847 hda_nid_t *d;
3848 for (d = codec->slave_dig_outs; *d; d++)
3849 snd_hda_codec_setup_stream(codec, *d, stream_tag, 0,
3850 format);
3852 /* turn on again (if needed) */
3853 if (codec->spdif_status_reset && (codec->spdif_ctls & AC_DIG1_ENABLE))
3854 set_dig_out_convert(codec, nid,
3855 codec->spdif_ctls & 0xff, -1);
3858 static void cleanup_dig_out_stream(struct hda_codec *codec, hda_nid_t nid)
3860 snd_hda_codec_cleanup_stream(codec, nid);
3861 if (codec->slave_dig_outs) {
3862 hda_nid_t *d;
3863 for (d = codec->slave_dig_outs; *d; d++)
3864 snd_hda_codec_cleanup_stream(codec, *d);
3869 * snd_hda_bus_reboot_notify - call the reboot notifier of each codec
3870 * @bus: HD-audio bus
3872 void snd_hda_bus_reboot_notify(struct hda_bus *bus)
3874 struct hda_codec *codec;
3876 if (!bus)
3877 return;
3878 list_for_each_entry(codec, &bus->codec_list, list) {
3879 #ifdef CONFIG_SND_HDA_POWER_SAVE
3880 if (!codec->power_on)
3881 continue;
3882 #endif
3883 if (codec->patch_ops.reboot_notify)
3884 codec->patch_ops.reboot_notify(codec);
3887 EXPORT_SYMBOL_HDA(snd_hda_bus_reboot_notify);
3890 * snd_hda_multi_out_dig_open - open the digital out in the exclusive mode
3892 int snd_hda_multi_out_dig_open(struct hda_codec *codec,
3893 struct hda_multi_out *mout)
3895 mutex_lock(&codec->spdif_mutex);
3896 if (mout->dig_out_used == HDA_DIG_ANALOG_DUP)
3897 /* already opened as analog dup; reset it once */
3898 cleanup_dig_out_stream(codec, mout->dig_out_nid);
3899 mout->dig_out_used = HDA_DIG_EXCLUSIVE;
3900 mutex_unlock(&codec->spdif_mutex);
3901 return 0;
3903 EXPORT_SYMBOL_HDA(snd_hda_multi_out_dig_open);
3906 * snd_hda_multi_out_dig_prepare - prepare the digital out stream
3908 int snd_hda_multi_out_dig_prepare(struct hda_codec *codec,
3909 struct hda_multi_out *mout,
3910 unsigned int stream_tag,
3911 unsigned int format,
3912 struct snd_pcm_substream *substream)
3914 mutex_lock(&codec->spdif_mutex);
3915 setup_dig_out_stream(codec, mout->dig_out_nid, stream_tag, format);
3916 mutex_unlock(&codec->spdif_mutex);
3917 return 0;
3919 EXPORT_SYMBOL_HDA(snd_hda_multi_out_dig_prepare);
3922 * snd_hda_multi_out_dig_cleanup - clean-up the digital out stream
3924 int snd_hda_multi_out_dig_cleanup(struct hda_codec *codec,
3925 struct hda_multi_out *mout)
3927 mutex_lock(&codec->spdif_mutex);
3928 cleanup_dig_out_stream(codec, mout->dig_out_nid);
3929 mutex_unlock(&codec->spdif_mutex);
3930 return 0;
3932 EXPORT_SYMBOL_HDA(snd_hda_multi_out_dig_cleanup);
3935 * snd_hda_multi_out_dig_close - release the digital out stream
3937 int snd_hda_multi_out_dig_close(struct hda_codec *codec,
3938 struct hda_multi_out *mout)
3940 mutex_lock(&codec->spdif_mutex);
3941 mout->dig_out_used = 0;
3942 mutex_unlock(&codec->spdif_mutex);
3943 return 0;
3945 EXPORT_SYMBOL_HDA(snd_hda_multi_out_dig_close);
3948 * snd_hda_multi_out_analog_open - open analog outputs
3950 * Open analog outputs and set up the hw-constraints.
3951 * If the digital outputs can be opened as slave, open the digital
3952 * outputs, too.
3954 int snd_hda_multi_out_analog_open(struct hda_codec *codec,
3955 struct hda_multi_out *mout,
3956 struct snd_pcm_substream *substream,
3957 struct hda_pcm_stream *hinfo)
3959 struct snd_pcm_runtime *runtime = substream->runtime;
3960 runtime->hw.channels_max = mout->max_channels;
3961 if (mout->dig_out_nid) {
3962 if (!mout->analog_rates) {
3963 mout->analog_rates = hinfo->rates;
3964 mout->analog_formats = hinfo->formats;
3965 mout->analog_maxbps = hinfo->maxbps;
3966 } else {
3967 runtime->hw.rates = mout->analog_rates;
3968 runtime->hw.formats = mout->analog_formats;
3969 hinfo->maxbps = mout->analog_maxbps;
3971 if (!mout->spdif_rates) {
3972 snd_hda_query_supported_pcm(codec, mout->dig_out_nid,
3973 &mout->spdif_rates,
3974 &mout->spdif_formats,
3975 &mout->spdif_maxbps);
3977 mutex_lock(&codec->spdif_mutex);
3978 if (mout->share_spdif) {
3979 if ((runtime->hw.rates & mout->spdif_rates) &&
3980 (runtime->hw.formats & mout->spdif_formats)) {
3981 runtime->hw.rates &= mout->spdif_rates;
3982 runtime->hw.formats &= mout->spdif_formats;
3983 if (mout->spdif_maxbps < hinfo->maxbps)
3984 hinfo->maxbps = mout->spdif_maxbps;
3985 } else {
3986 mout->share_spdif = 0;
3987 /* FIXME: need notify? */
3990 mutex_unlock(&codec->spdif_mutex);
3992 return snd_pcm_hw_constraint_step(substream->runtime, 0,
3993 SNDRV_PCM_HW_PARAM_CHANNELS, 2);
3995 EXPORT_SYMBOL_HDA(snd_hda_multi_out_analog_open);
3998 * snd_hda_multi_out_analog_prepare - Preapre the analog outputs.
4000 * Set up the i/o for analog out.
4001 * When the digital out is available, copy the front out to digital out, too.
4003 int snd_hda_multi_out_analog_prepare(struct hda_codec *codec,
4004 struct hda_multi_out *mout,
4005 unsigned int stream_tag,
4006 unsigned int format,
4007 struct snd_pcm_substream *substream)
4009 hda_nid_t *nids = mout->dac_nids;
4010 int chs = substream->runtime->channels;
4011 int i;
4013 mutex_lock(&codec->spdif_mutex);
4014 if (mout->dig_out_nid && mout->share_spdif &&
4015 mout->dig_out_used != HDA_DIG_EXCLUSIVE) {
4016 if (chs == 2 &&
4017 snd_hda_is_supported_format(codec, mout->dig_out_nid,
4018 format) &&
4019 !(codec->spdif_status & IEC958_AES0_NONAUDIO)) {
4020 mout->dig_out_used = HDA_DIG_ANALOG_DUP;
4021 setup_dig_out_stream(codec, mout->dig_out_nid,
4022 stream_tag, format);
4023 } else {
4024 mout->dig_out_used = 0;
4025 cleanup_dig_out_stream(codec, mout->dig_out_nid);
4028 mutex_unlock(&codec->spdif_mutex);
4030 /* front */
4031 snd_hda_codec_setup_stream(codec, nids[HDA_FRONT], stream_tag,
4032 0, format);
4033 if (!mout->no_share_stream &&
4034 mout->hp_nid && mout->hp_nid != nids[HDA_FRONT])
4035 /* headphone out will just decode front left/right (stereo) */
4036 snd_hda_codec_setup_stream(codec, mout->hp_nid, stream_tag,
4037 0, format);
4038 /* extra outputs copied from front */
4039 for (i = 0; i < ARRAY_SIZE(mout->extra_out_nid); i++)
4040 if (!mout->no_share_stream && mout->extra_out_nid[i])
4041 snd_hda_codec_setup_stream(codec,
4042 mout->extra_out_nid[i],
4043 stream_tag, 0, format);
4045 /* surrounds */
4046 for (i = 1; i < mout->num_dacs; i++) {
4047 if (chs >= (i + 1) * 2) /* independent out */
4048 snd_hda_codec_setup_stream(codec, nids[i], stream_tag,
4049 i * 2, format);
4050 else if (!mout->no_share_stream) /* copy front */
4051 snd_hda_codec_setup_stream(codec, nids[i], stream_tag,
4052 0, format);
4054 return 0;
4056 EXPORT_SYMBOL_HDA(snd_hda_multi_out_analog_prepare);
4059 * snd_hda_multi_out_analog_cleanup - clean up the setting for analog out
4061 int snd_hda_multi_out_analog_cleanup(struct hda_codec *codec,
4062 struct hda_multi_out *mout)
4064 hda_nid_t *nids = mout->dac_nids;
4065 int i;
4067 for (i = 0; i < mout->num_dacs; i++)
4068 snd_hda_codec_cleanup_stream(codec, nids[i]);
4069 if (mout->hp_nid)
4070 snd_hda_codec_cleanup_stream(codec, mout->hp_nid);
4071 for (i = 0; i < ARRAY_SIZE(mout->extra_out_nid); i++)
4072 if (mout->extra_out_nid[i])
4073 snd_hda_codec_cleanup_stream(codec,
4074 mout->extra_out_nid[i]);
4075 mutex_lock(&codec->spdif_mutex);
4076 if (mout->dig_out_nid && mout->dig_out_used == HDA_DIG_ANALOG_DUP) {
4077 cleanup_dig_out_stream(codec, mout->dig_out_nid);
4078 mout->dig_out_used = 0;
4080 mutex_unlock(&codec->spdif_mutex);
4081 return 0;
4083 EXPORT_SYMBOL_HDA(snd_hda_multi_out_analog_cleanup);
4086 * Helper for automatic pin configuration
4089 static int is_in_nid_list(hda_nid_t nid, hda_nid_t *list)
4091 for (; *list; list++)
4092 if (*list == nid)
4093 return 1;
4094 return 0;
4099 * Sort an associated group of pins according to their sequence numbers.
4101 static void sort_pins_by_sequence(hda_nid_t *pins, short *sequences,
4102 int num_pins)
4104 int i, j;
4105 short seq;
4106 hda_nid_t nid;
4108 for (i = 0; i < num_pins; i++) {
4109 for (j = i + 1; j < num_pins; j++) {
4110 if (sequences[i] > sequences[j]) {
4111 seq = sequences[i];
4112 sequences[i] = sequences[j];
4113 sequences[j] = seq;
4114 nid = pins[i];
4115 pins[i] = pins[j];
4116 pins[j] = nid;
4124 * Parse all pin widgets and store the useful pin nids to cfg
4126 * The number of line-outs or any primary output is stored in line_outs,
4127 * and the corresponding output pins are assigned to line_out_pins[],
4128 * in the order of front, rear, CLFE, side, ...
4130 * If more extra outputs (speaker and headphone) are found, the pins are
4131 * assisnged to hp_pins[] and speaker_pins[], respectively. If no line-out jack
4132 * is detected, one of speaker of HP pins is assigned as the primary
4133 * output, i.e. to line_out_pins[0]. So, line_outs is always positive
4134 * if any analog output exists.
4136 * The analog input pins are assigned to input_pins array.
4137 * The digital input/output pins are assigned to dig_in_pin and dig_out_pin,
4138 * respectively.
4140 int snd_hda_parse_pin_def_config(struct hda_codec *codec,
4141 struct auto_pin_cfg *cfg,
4142 hda_nid_t *ignore_nids)
4144 hda_nid_t nid, end_nid;
4145 short seq, assoc_line_out, assoc_speaker;
4146 short sequences_line_out[ARRAY_SIZE(cfg->line_out_pins)];
4147 short sequences_speaker[ARRAY_SIZE(cfg->speaker_pins)];
4148 short sequences_hp[ARRAY_SIZE(cfg->hp_pins)];
4150 memset(cfg, 0, sizeof(*cfg));
4152 memset(sequences_line_out, 0, sizeof(sequences_line_out));
4153 memset(sequences_speaker, 0, sizeof(sequences_speaker));
4154 memset(sequences_hp, 0, sizeof(sequences_hp));
4155 assoc_line_out = assoc_speaker = 0;
4157 end_nid = codec->start_nid + codec->num_nodes;
4158 for (nid = codec->start_nid; nid < end_nid; nid++) {
4159 unsigned int wid_caps = get_wcaps(codec, nid);
4160 unsigned int wid_type = get_wcaps_type(wid_caps);
4161 unsigned int def_conf;
4162 short assoc, loc;
4164 /* read all default configuration for pin complex */
4165 if (wid_type != AC_WID_PIN)
4166 continue;
4167 /* ignore the given nids (e.g. pc-beep returns error) */
4168 if (ignore_nids && is_in_nid_list(nid, ignore_nids))
4169 continue;
4171 def_conf = snd_hda_codec_get_pincfg(codec, nid);
4172 if (get_defcfg_connect(def_conf) == AC_JACK_PORT_NONE)
4173 continue;
4174 loc = get_defcfg_location(def_conf);
4175 switch (get_defcfg_device(def_conf)) {
4176 case AC_JACK_LINE_OUT:
4177 seq = get_defcfg_sequence(def_conf);
4178 assoc = get_defcfg_association(def_conf);
4180 if (!(wid_caps & AC_WCAP_STEREO))
4181 if (!cfg->mono_out_pin)
4182 cfg->mono_out_pin = nid;
4183 if (!assoc)
4184 continue;
4185 if (!assoc_line_out)
4186 assoc_line_out = assoc;
4187 else if (assoc_line_out != assoc)
4188 continue;
4189 if (cfg->line_outs >= ARRAY_SIZE(cfg->line_out_pins))
4190 continue;
4191 cfg->line_out_pins[cfg->line_outs] = nid;
4192 sequences_line_out[cfg->line_outs] = seq;
4193 cfg->line_outs++;
4194 break;
4195 case AC_JACK_SPEAKER:
4196 seq = get_defcfg_sequence(def_conf);
4197 assoc = get_defcfg_association(def_conf);
4198 if (!assoc)
4199 continue;
4200 if (!assoc_speaker)
4201 assoc_speaker = assoc;
4202 else if (assoc_speaker != assoc)
4203 continue;
4204 if (cfg->speaker_outs >= ARRAY_SIZE(cfg->speaker_pins))
4205 continue;
4206 cfg->speaker_pins[cfg->speaker_outs] = nid;
4207 sequences_speaker[cfg->speaker_outs] = seq;
4208 cfg->speaker_outs++;
4209 break;
4210 case AC_JACK_HP_OUT:
4211 seq = get_defcfg_sequence(def_conf);
4212 assoc = get_defcfg_association(def_conf);
4213 if (cfg->hp_outs >= ARRAY_SIZE(cfg->hp_pins))
4214 continue;
4215 cfg->hp_pins[cfg->hp_outs] = nid;
4216 sequences_hp[cfg->hp_outs] = (assoc << 4) | seq;
4217 cfg->hp_outs++;
4218 break;
4219 case AC_JACK_MIC_IN: {
4220 int preferred, alt;
4221 if (loc == AC_JACK_LOC_FRONT) {
4222 preferred = AUTO_PIN_FRONT_MIC;
4223 alt = AUTO_PIN_MIC;
4224 } else {
4225 preferred = AUTO_PIN_MIC;
4226 alt = AUTO_PIN_FRONT_MIC;
4228 if (!cfg->input_pins[preferred])
4229 cfg->input_pins[preferred] = nid;
4230 else if (!cfg->input_pins[alt])
4231 cfg->input_pins[alt] = nid;
4232 break;
4234 case AC_JACK_LINE_IN:
4235 if (loc == AC_JACK_LOC_FRONT)
4236 cfg->input_pins[AUTO_PIN_FRONT_LINE] = nid;
4237 else
4238 cfg->input_pins[AUTO_PIN_LINE] = nid;
4239 break;
4240 case AC_JACK_CD:
4241 cfg->input_pins[AUTO_PIN_CD] = nid;
4242 break;
4243 case AC_JACK_AUX:
4244 cfg->input_pins[AUTO_PIN_AUX] = nid;
4245 break;
4246 case AC_JACK_SPDIF_OUT:
4247 case AC_JACK_DIG_OTHER_OUT:
4248 if (cfg->dig_outs >= ARRAY_SIZE(cfg->dig_out_pins))
4249 continue;
4250 cfg->dig_out_pins[cfg->dig_outs] = nid;
4251 cfg->dig_out_type[cfg->dig_outs] =
4252 (loc == AC_JACK_LOC_HDMI) ?
4253 HDA_PCM_TYPE_HDMI : HDA_PCM_TYPE_SPDIF;
4254 cfg->dig_outs++;
4255 break;
4256 case AC_JACK_SPDIF_IN:
4257 case AC_JACK_DIG_OTHER_IN:
4258 cfg->dig_in_pin = nid;
4259 if (loc == AC_JACK_LOC_HDMI)
4260 cfg->dig_in_type = HDA_PCM_TYPE_HDMI;
4261 else
4262 cfg->dig_in_type = HDA_PCM_TYPE_SPDIF;
4263 break;
4267 /* FIX-UP:
4268 * If no line-out is defined but multiple HPs are found,
4269 * some of them might be the real line-outs.
4271 if (!cfg->line_outs && cfg->hp_outs > 1) {
4272 int i = 0;
4273 while (i < cfg->hp_outs) {
4274 /* The real HPs should have the sequence 0x0f */
4275 if ((sequences_hp[i] & 0x0f) == 0x0f) {
4276 i++;
4277 continue;
4279 /* Move it to the line-out table */
4280 cfg->line_out_pins[cfg->line_outs] = cfg->hp_pins[i];
4281 sequences_line_out[cfg->line_outs] = sequences_hp[i];
4282 cfg->line_outs++;
4283 cfg->hp_outs--;
4284 memmove(cfg->hp_pins + i, cfg->hp_pins + i + 1,
4285 sizeof(cfg->hp_pins[0]) * (cfg->hp_outs - i));
4286 memmove(sequences_hp + i - 1, sequences_hp + i,
4287 sizeof(sequences_hp[0]) * (cfg->hp_outs - i));
4291 /* sort by sequence */
4292 sort_pins_by_sequence(cfg->line_out_pins, sequences_line_out,
4293 cfg->line_outs);
4294 sort_pins_by_sequence(cfg->speaker_pins, sequences_speaker,
4295 cfg->speaker_outs);
4296 sort_pins_by_sequence(cfg->hp_pins, sequences_hp,
4297 cfg->hp_outs);
4299 /* if we have only one mic, make it AUTO_PIN_MIC */
4300 if (!cfg->input_pins[AUTO_PIN_MIC] &&
4301 cfg->input_pins[AUTO_PIN_FRONT_MIC]) {
4302 cfg->input_pins[AUTO_PIN_MIC] =
4303 cfg->input_pins[AUTO_PIN_FRONT_MIC];
4304 cfg->input_pins[AUTO_PIN_FRONT_MIC] = 0;
4306 /* ditto for line-in */
4307 if (!cfg->input_pins[AUTO_PIN_LINE] &&
4308 cfg->input_pins[AUTO_PIN_FRONT_LINE]) {
4309 cfg->input_pins[AUTO_PIN_LINE] =
4310 cfg->input_pins[AUTO_PIN_FRONT_LINE];
4311 cfg->input_pins[AUTO_PIN_FRONT_LINE] = 0;
4315 * FIX-UP: if no line-outs are detected, try to use speaker or HP pin
4316 * as a primary output
4318 if (!cfg->line_outs) {
4319 if (cfg->speaker_outs) {
4320 cfg->line_outs = cfg->speaker_outs;
4321 memcpy(cfg->line_out_pins, cfg->speaker_pins,
4322 sizeof(cfg->speaker_pins));
4323 cfg->speaker_outs = 0;
4324 memset(cfg->speaker_pins, 0, sizeof(cfg->speaker_pins));
4325 cfg->line_out_type = AUTO_PIN_SPEAKER_OUT;
4326 } else if (cfg->hp_outs) {
4327 cfg->line_outs = cfg->hp_outs;
4328 memcpy(cfg->line_out_pins, cfg->hp_pins,
4329 sizeof(cfg->hp_pins));
4330 cfg->hp_outs = 0;
4331 memset(cfg->hp_pins, 0, sizeof(cfg->hp_pins));
4332 cfg->line_out_type = AUTO_PIN_HP_OUT;
4336 /* Reorder the surround channels
4337 * ALSA sequence is front/surr/clfe/side
4338 * HDA sequence is:
4339 * 4-ch: front/surr => OK as it is
4340 * 6-ch: front/clfe/surr
4341 * 8-ch: front/clfe/rear/side|fc
4343 switch (cfg->line_outs) {
4344 case 3:
4345 case 4:
4346 nid = cfg->line_out_pins[1];
4347 cfg->line_out_pins[1] = cfg->line_out_pins[2];
4348 cfg->line_out_pins[2] = nid;
4349 break;
4353 * debug prints of the parsed results
4355 snd_printd("autoconfig: line_outs=%d (0x%x/0x%x/0x%x/0x%x/0x%x)\n",
4356 cfg->line_outs, cfg->line_out_pins[0], cfg->line_out_pins[1],
4357 cfg->line_out_pins[2], cfg->line_out_pins[3],
4358 cfg->line_out_pins[4]);
4359 snd_printd(" speaker_outs=%d (0x%x/0x%x/0x%x/0x%x/0x%x)\n",
4360 cfg->speaker_outs, cfg->speaker_pins[0],
4361 cfg->speaker_pins[1], cfg->speaker_pins[2],
4362 cfg->speaker_pins[3], cfg->speaker_pins[4]);
4363 snd_printd(" hp_outs=%d (0x%x/0x%x/0x%x/0x%x/0x%x)\n",
4364 cfg->hp_outs, cfg->hp_pins[0],
4365 cfg->hp_pins[1], cfg->hp_pins[2],
4366 cfg->hp_pins[3], cfg->hp_pins[4]);
4367 snd_printd(" mono: mono_out=0x%x\n", cfg->mono_out_pin);
4368 if (cfg->dig_outs)
4369 snd_printd(" dig-out=0x%x/0x%x\n",
4370 cfg->dig_out_pins[0], cfg->dig_out_pins[1]);
4371 snd_printd(" inputs: mic=0x%x, fmic=0x%x, line=0x%x, fline=0x%x,"
4372 " cd=0x%x, aux=0x%x\n",
4373 cfg->input_pins[AUTO_PIN_MIC],
4374 cfg->input_pins[AUTO_PIN_FRONT_MIC],
4375 cfg->input_pins[AUTO_PIN_LINE],
4376 cfg->input_pins[AUTO_PIN_FRONT_LINE],
4377 cfg->input_pins[AUTO_PIN_CD],
4378 cfg->input_pins[AUTO_PIN_AUX]);
4379 if (cfg->dig_in_pin)
4380 snd_printd(" dig-in=0x%x\n", cfg->dig_in_pin);
4382 return 0;
4384 EXPORT_SYMBOL_HDA(snd_hda_parse_pin_def_config);
4386 /* labels for input pins */
4387 const char *auto_pin_cfg_labels[AUTO_PIN_LAST] = {
4388 "Mic", "Front Mic", "Line", "Front Line", "CD", "Aux"
4390 EXPORT_SYMBOL_HDA(auto_pin_cfg_labels);
4393 #ifdef CONFIG_PM
4395 * power management
4399 * snd_hda_suspend - suspend the codecs
4400 * @bus: the HDA bus
4402 * Returns 0 if successful.
4404 int snd_hda_suspend(struct hda_bus *bus)
4406 struct hda_codec *codec;
4408 list_for_each_entry(codec, &bus->codec_list, list) {
4409 #ifdef CONFIG_SND_HDA_POWER_SAVE
4410 if (!codec->power_on)
4411 continue;
4412 #endif
4413 hda_call_codec_suspend(codec);
4415 return 0;
4417 EXPORT_SYMBOL_HDA(snd_hda_suspend);
4420 * snd_hda_resume - resume the codecs
4421 * @bus: the HDA bus
4423 * Returns 0 if successful.
4425 * This fucntion is defined only when POWER_SAVE isn't set.
4426 * In the power-save mode, the codec is resumed dynamically.
4428 int snd_hda_resume(struct hda_bus *bus)
4430 struct hda_codec *codec;
4432 list_for_each_entry(codec, &bus->codec_list, list) {
4433 if (snd_hda_codec_needs_resume(codec))
4434 hda_call_codec_resume(codec);
4436 return 0;
4438 EXPORT_SYMBOL_HDA(snd_hda_resume);
4439 #endif /* CONFIG_PM */
4442 * generic arrays
4446 * snd_array_new - get a new element from the given array
4447 * @array: the array object
4449 * Get a new element from the given array. If it exceeds the
4450 * pre-allocated array size, re-allocate the array.
4452 * Returns NULL if allocation failed.
4454 void *snd_array_new(struct snd_array *array)
4456 if (array->used >= array->alloced) {
4457 int num = array->alloced + array->alloc_align;
4458 void *nlist;
4459 if (snd_BUG_ON(num >= 4096))
4460 return NULL;
4461 nlist = kcalloc(num + 1, array->elem_size, GFP_KERNEL);
4462 if (!nlist)
4463 return NULL;
4464 if (array->list) {
4465 memcpy(nlist, array->list,
4466 array->elem_size * array->alloced);
4467 kfree(array->list);
4469 array->list = nlist;
4470 array->alloced = num;
4472 return snd_array_elem(array, array->used++);
4474 EXPORT_SYMBOL_HDA(snd_array_new);
4477 * snd_array_free - free the given array elements
4478 * @array: the array object
4480 void snd_array_free(struct snd_array *array)
4482 kfree(array->list);
4483 array->used = 0;
4484 array->alloced = 0;
4485 array->list = NULL;
4487 EXPORT_SYMBOL_HDA(snd_array_free);
4490 * snd_print_pcm_rates - Print the supported PCM rates to the string buffer
4491 * @pcm: PCM caps bits
4492 * @buf: the string buffer to write
4493 * @buflen: the max buffer length
4495 * used by hda_proc.c and hda_eld.c
4497 void snd_print_pcm_rates(int pcm, char *buf, int buflen)
4499 static unsigned int rates[] = {
4500 8000, 11025, 16000, 22050, 32000, 44100, 48000, 88200,
4501 96000, 176400, 192000, 384000
4503 int i, j;
4505 for (i = 0, j = 0; i < ARRAY_SIZE(rates); i++)
4506 if (pcm & (1 << i))
4507 j += snprintf(buf + j, buflen - j, " %d", rates[i]);
4509 buf[j] = '\0'; /* necessary when j == 0 */
4511 EXPORT_SYMBOL_HDA(snd_print_pcm_rates);
4514 * snd_print_pcm_bits - Print the supported PCM fmt bits to the string buffer
4515 * @pcm: PCM caps bits
4516 * @buf: the string buffer to write
4517 * @buflen: the max buffer length
4519 * used by hda_proc.c and hda_eld.c
4521 void snd_print_pcm_bits(int pcm, char *buf, int buflen)
4523 static unsigned int bits[] = { 8, 16, 20, 24, 32 };
4524 int i, j;
4526 for (i = 0, j = 0; i < ARRAY_SIZE(bits); i++)
4527 if (pcm & (AC_SUPPCM_BITS_8 << i))
4528 j += snprintf(buf + j, buflen - j, " %d", bits[i]);
4530 buf[j] = '\0'; /* necessary when j == 0 */
4532 EXPORT_SYMBOL_HDA(snd_print_pcm_bits);
4534 MODULE_DESCRIPTION("HDA codec core");
4535 MODULE_LICENSE("GPL");