ALSA: hda - Fix unused warnings when !SND_HDA_NEEDS_RESUME
[linux-2.6/next.git] / sound / pci / hda / hda_codec.c
blobd7d94460308bf75398748a5afed5553ae9c842a9
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 <sound/jack.h>
33 #include "hda_local.h"
34 #include "hda_beep.h"
35 #include <sound/hda_hwdep.h>
38 * vendor / preset table
41 struct hda_vendor_id {
42 unsigned int id;
43 const char *name;
46 /* codec vendor labels */
47 static struct hda_vendor_id hda_vendor_ids[] = {
48 { 0x1002, "ATI" },
49 { 0x1013, "Cirrus Logic" },
50 { 0x1057, "Motorola" },
51 { 0x1095, "Silicon Image" },
52 { 0x10de, "Nvidia" },
53 { 0x10ec, "Realtek" },
54 { 0x1102, "Creative" },
55 { 0x1106, "VIA" },
56 { 0x111d, "IDT" },
57 { 0x11c1, "LSI" },
58 { 0x11d4, "Analog Devices" },
59 { 0x13f6, "C-Media" },
60 { 0x14f1, "Conexant" },
61 { 0x17e8, "Chrontel" },
62 { 0x1854, "LG" },
63 { 0x1aec, "Wolfson Microelectronics" },
64 { 0x434d, "C-Media" },
65 { 0x8086, "Intel" },
66 { 0x8384, "SigmaTel" },
67 {} /* terminator */
70 static DEFINE_MUTEX(preset_mutex);
71 static LIST_HEAD(hda_preset_tables);
73 int snd_hda_add_codec_preset(struct hda_codec_preset_list *preset)
75 mutex_lock(&preset_mutex);
76 list_add_tail(&preset->list, &hda_preset_tables);
77 mutex_unlock(&preset_mutex);
78 return 0;
80 EXPORT_SYMBOL_HDA(snd_hda_add_codec_preset);
82 int snd_hda_delete_codec_preset(struct hda_codec_preset_list *preset)
84 mutex_lock(&preset_mutex);
85 list_del(&preset->list);
86 mutex_unlock(&preset_mutex);
87 return 0;
89 EXPORT_SYMBOL_HDA(snd_hda_delete_codec_preset);
91 #ifdef CONFIG_SND_HDA_POWER_SAVE
92 static void hda_power_work(struct work_struct *work);
93 static void hda_keep_power_on(struct hda_codec *codec);
94 #else
95 static inline void hda_keep_power_on(struct hda_codec *codec) {}
96 #endif
98 /**
99 * snd_hda_get_jack_location - Give a location string of the jack
100 * @cfg: pin default config value
102 * Parse the pin default config value and returns the string of the
103 * jack location, e.g. "Rear", "Front", etc.
105 const char *snd_hda_get_jack_location(u32 cfg)
107 static char *bases[7] = {
108 "N/A", "Rear", "Front", "Left", "Right", "Top", "Bottom",
110 static unsigned char specials_idx[] = {
111 0x07, 0x08,
112 0x17, 0x18, 0x19,
113 0x37, 0x38
115 static char *specials[] = {
116 "Rear Panel", "Drive Bar",
117 "Riser", "HDMI", "ATAPI",
118 "Mobile-In", "Mobile-Out"
120 int i;
121 cfg = (cfg & AC_DEFCFG_LOCATION) >> AC_DEFCFG_LOCATION_SHIFT;
122 if ((cfg & 0x0f) < 7)
123 return bases[cfg & 0x0f];
124 for (i = 0; i < ARRAY_SIZE(specials_idx); i++) {
125 if (cfg == specials_idx[i])
126 return specials[i];
128 return "UNKNOWN";
130 EXPORT_SYMBOL_HDA(snd_hda_get_jack_location);
133 * snd_hda_get_jack_connectivity - Give a connectivity string of the jack
134 * @cfg: pin default config value
136 * Parse the pin default config value and returns the string of the
137 * jack connectivity, i.e. external or internal connection.
139 const char *snd_hda_get_jack_connectivity(u32 cfg)
141 static char *jack_locations[4] = { "Ext", "Int", "Sep", "Oth" };
143 return jack_locations[(cfg >> (AC_DEFCFG_LOCATION_SHIFT + 4)) & 3];
145 EXPORT_SYMBOL_HDA(snd_hda_get_jack_connectivity);
148 * snd_hda_get_jack_type - Give a type string of the jack
149 * @cfg: pin default config value
151 * Parse the pin default config value and returns the string of the
152 * jack type, i.e. the purpose of the jack, such as Line-Out or CD.
154 const char *snd_hda_get_jack_type(u32 cfg)
156 static char *jack_types[16] = {
157 "Line Out", "Speaker", "HP Out", "CD",
158 "SPDIF Out", "Digital Out", "Modem Line", "Modem Hand",
159 "Line In", "Aux", "Mic", "Telephony",
160 "SPDIF In", "Digitial In", "Reserved", "Other"
163 return jack_types[(cfg & AC_DEFCFG_DEVICE)
164 >> AC_DEFCFG_DEVICE_SHIFT];
166 EXPORT_SYMBOL_HDA(snd_hda_get_jack_type);
169 * Compose a 32bit command word to be sent to the HD-audio controller
171 static inline unsigned int
172 make_codec_cmd(struct hda_codec *codec, hda_nid_t nid, int direct,
173 unsigned int verb, unsigned int parm)
175 u32 val;
177 if ((codec->addr & ~0xf) || (direct & ~1) || (nid & ~0x7f) ||
178 (verb & ~0xfff) || (parm & ~0xffff)) {
179 printk(KERN_ERR "hda-codec: out of range cmd %x:%x:%x:%x:%x\n",
180 codec->addr, direct, nid, verb, parm);
181 return ~0;
184 val = (u32)codec->addr << 28;
185 val |= (u32)direct << 27;
186 val |= (u32)nid << 20;
187 val |= verb << 8;
188 val |= parm;
189 return val;
193 * Send and receive a verb
195 static int codec_exec_verb(struct hda_codec *codec, unsigned int cmd,
196 unsigned int *res)
198 struct hda_bus *bus = codec->bus;
199 int err;
201 if (cmd == ~0)
202 return -1;
204 if (res)
205 *res = -1;
206 again:
207 snd_hda_power_up(codec);
208 mutex_lock(&bus->cmd_mutex);
209 err = bus->ops.command(bus, cmd);
210 if (!err && res)
211 *res = bus->ops.get_response(bus, codec->addr);
212 mutex_unlock(&bus->cmd_mutex);
213 snd_hda_power_down(codec);
214 if (res && *res == -1 && bus->rirb_error) {
215 if (bus->response_reset) {
216 snd_printd("hda_codec: resetting BUS due to "
217 "fatal communication error\n");
218 bus->ops.bus_reset(bus);
220 goto again;
222 /* clear reset-flag when the communication gets recovered */
223 if (!err)
224 bus->response_reset = 0;
225 return err;
229 * snd_hda_codec_read - send a command and get the response
230 * @codec: the HDA codec
231 * @nid: NID to send the command
232 * @direct: direct flag
233 * @verb: the verb to send
234 * @parm: the parameter for the verb
236 * Send a single command and read the corresponding response.
238 * Returns the obtained response value, or -1 for an error.
240 unsigned int snd_hda_codec_read(struct hda_codec *codec, hda_nid_t nid,
241 int direct,
242 unsigned int verb, unsigned int parm)
244 unsigned cmd = make_codec_cmd(codec, nid, direct, verb, parm);
245 unsigned int res;
246 codec_exec_verb(codec, cmd, &res);
247 return res;
249 EXPORT_SYMBOL_HDA(snd_hda_codec_read);
252 * snd_hda_codec_write - send a single command without waiting for response
253 * @codec: the HDA codec
254 * @nid: NID to send the command
255 * @direct: direct flag
256 * @verb: the verb to send
257 * @parm: the parameter for the verb
259 * Send a single command without waiting for response.
261 * Returns 0 if successful, or a negative error code.
263 int snd_hda_codec_write(struct hda_codec *codec, hda_nid_t nid, int direct,
264 unsigned int verb, unsigned int parm)
266 unsigned int cmd = make_codec_cmd(codec, nid, direct, verb, parm);
267 unsigned int res;
268 return codec_exec_verb(codec, cmd,
269 codec->bus->sync_write ? &res : NULL);
271 EXPORT_SYMBOL_HDA(snd_hda_codec_write);
274 * snd_hda_sequence_write - sequence writes
275 * @codec: the HDA codec
276 * @seq: VERB array to send
278 * Send the commands sequentially from the given array.
279 * The array must be terminated with NID=0.
281 void snd_hda_sequence_write(struct hda_codec *codec, const struct hda_verb *seq)
283 for (; seq->nid; seq++)
284 snd_hda_codec_write(codec, seq->nid, 0, seq->verb, seq->param);
286 EXPORT_SYMBOL_HDA(snd_hda_sequence_write);
289 * snd_hda_get_sub_nodes - get the range of sub nodes
290 * @codec: the HDA codec
291 * @nid: NID to parse
292 * @start_id: the pointer to store the start NID
294 * Parse the NID and store the start NID of its sub-nodes.
295 * Returns the number of sub-nodes.
297 int snd_hda_get_sub_nodes(struct hda_codec *codec, hda_nid_t nid,
298 hda_nid_t *start_id)
300 unsigned int parm;
302 parm = snd_hda_param_read(codec, nid, AC_PAR_NODE_COUNT);
303 if (parm == -1)
304 return 0;
305 *start_id = (parm >> 16) & 0x7fff;
306 return (int)(parm & 0x7fff);
308 EXPORT_SYMBOL_HDA(snd_hda_get_sub_nodes);
311 * snd_hda_get_connections - get connection list
312 * @codec: the HDA codec
313 * @nid: NID to parse
314 * @conn_list: connection list array
315 * @max_conns: max. number of connections to store
317 * Parses the connection list of the given widget and stores the list
318 * of NIDs.
320 * Returns the number of connections, or a negative error code.
322 int snd_hda_get_connections(struct hda_codec *codec, hda_nid_t nid,
323 hda_nid_t *conn_list, int max_conns)
325 unsigned int parm;
326 int i, conn_len, conns;
327 unsigned int shift, num_elems, mask;
328 unsigned int wcaps;
329 hda_nid_t prev_nid;
331 if (snd_BUG_ON(!conn_list || max_conns <= 0))
332 return -EINVAL;
334 wcaps = get_wcaps(codec, nid);
335 if (!(wcaps & AC_WCAP_CONN_LIST) &&
336 get_wcaps_type(wcaps) != AC_WID_VOL_KNB) {
337 snd_printk(KERN_WARNING "hda_codec: "
338 "connection list not available for 0x%x\n", nid);
339 return -EINVAL;
342 parm = snd_hda_param_read(codec, nid, AC_PAR_CONNLIST_LEN);
343 if (parm & AC_CLIST_LONG) {
344 /* long form */
345 shift = 16;
346 num_elems = 2;
347 } else {
348 /* short form */
349 shift = 8;
350 num_elems = 4;
352 conn_len = parm & AC_CLIST_LENGTH;
353 mask = (1 << (shift-1)) - 1;
355 if (!conn_len)
356 return 0; /* no connection */
358 if (conn_len == 1) {
359 /* single connection */
360 parm = snd_hda_codec_read(codec, nid, 0,
361 AC_VERB_GET_CONNECT_LIST, 0);
362 if (parm == -1 && codec->bus->rirb_error)
363 return -EIO;
364 conn_list[0] = parm & mask;
365 return 1;
368 /* multi connection */
369 conns = 0;
370 prev_nid = 0;
371 for (i = 0; i < conn_len; i++) {
372 int range_val;
373 hda_nid_t val, n;
375 if (i % num_elems == 0) {
376 parm = snd_hda_codec_read(codec, nid, 0,
377 AC_VERB_GET_CONNECT_LIST, i);
378 if (parm == -1 && codec->bus->rirb_error)
379 return -EIO;
381 range_val = !!(parm & (1 << (shift-1))); /* ranges */
382 val = parm & mask;
383 if (val == 0) {
384 snd_printk(KERN_WARNING "hda_codec: "
385 "invalid CONNECT_LIST verb %x[%i]:%x\n",
386 nid, i, parm);
387 return 0;
389 parm >>= shift;
390 if (range_val) {
391 /* ranges between the previous and this one */
392 if (!prev_nid || prev_nid >= val) {
393 snd_printk(KERN_WARNING "hda_codec: "
394 "invalid dep_range_val %x:%x\n",
395 prev_nid, val);
396 continue;
398 for (n = prev_nid + 1; n <= val; n++) {
399 if (conns >= max_conns) {
400 snd_printk(KERN_ERR "hda_codec: "
401 "Too many connections %d for NID 0x%x\n",
402 conns, nid);
403 return -EINVAL;
405 conn_list[conns++] = n;
407 } else {
408 if (conns >= max_conns) {
409 snd_printk(KERN_ERR "hda_codec: "
410 "Too many connections %d for NID 0x%x\n",
411 conns, nid);
412 return -EINVAL;
414 conn_list[conns++] = val;
416 prev_nid = val;
418 return conns;
420 EXPORT_SYMBOL_HDA(snd_hda_get_connections);
424 * snd_hda_queue_unsol_event - add an unsolicited event to queue
425 * @bus: the BUS
426 * @res: unsolicited event (lower 32bit of RIRB entry)
427 * @res_ex: codec addr and flags (upper 32bit or RIRB entry)
429 * Adds the given event to the queue. The events are processed in
430 * the workqueue asynchronously. Call this function in the interrupt
431 * hanlder when RIRB receives an unsolicited event.
433 * Returns 0 if successful, or a negative error code.
435 int snd_hda_queue_unsol_event(struct hda_bus *bus, u32 res, u32 res_ex)
437 struct hda_bus_unsolicited *unsol;
438 unsigned int wp;
440 unsol = bus->unsol;
441 if (!unsol)
442 return 0;
444 wp = (unsol->wp + 1) % HDA_UNSOL_QUEUE_SIZE;
445 unsol->wp = wp;
447 wp <<= 1;
448 unsol->queue[wp] = res;
449 unsol->queue[wp + 1] = res_ex;
451 queue_work(bus->workq, &unsol->work);
453 return 0;
455 EXPORT_SYMBOL_HDA(snd_hda_queue_unsol_event);
458 * process queued unsolicited events
460 static void process_unsol_events(struct work_struct *work)
462 struct hda_bus_unsolicited *unsol =
463 container_of(work, struct hda_bus_unsolicited, work);
464 struct hda_bus *bus = unsol->bus;
465 struct hda_codec *codec;
466 unsigned int rp, caddr, res;
468 while (unsol->rp != unsol->wp) {
469 rp = (unsol->rp + 1) % HDA_UNSOL_QUEUE_SIZE;
470 unsol->rp = rp;
471 rp <<= 1;
472 res = unsol->queue[rp];
473 caddr = unsol->queue[rp + 1];
474 if (!(caddr & (1 << 4))) /* no unsolicited event? */
475 continue;
476 codec = bus->caddr_tbl[caddr & 0x0f];
477 if (codec && codec->patch_ops.unsol_event)
478 codec->patch_ops.unsol_event(codec, res);
483 * initialize unsolicited queue
485 static int init_unsol_queue(struct hda_bus *bus)
487 struct hda_bus_unsolicited *unsol;
489 if (bus->unsol) /* already initialized */
490 return 0;
492 unsol = kzalloc(sizeof(*unsol), GFP_KERNEL);
493 if (!unsol) {
494 snd_printk(KERN_ERR "hda_codec: "
495 "can't allocate unsolicited queue\n");
496 return -ENOMEM;
498 INIT_WORK(&unsol->work, process_unsol_events);
499 unsol->bus = bus;
500 bus->unsol = unsol;
501 return 0;
505 * destructor
507 static void snd_hda_codec_free(struct hda_codec *codec);
509 static int snd_hda_bus_free(struct hda_bus *bus)
511 struct hda_codec *codec, *n;
513 if (!bus)
514 return 0;
515 if (bus->workq)
516 flush_workqueue(bus->workq);
517 if (bus->unsol)
518 kfree(bus->unsol);
519 list_for_each_entry_safe(codec, n, &bus->codec_list, list) {
520 snd_hda_codec_free(codec);
522 if (bus->ops.private_free)
523 bus->ops.private_free(bus);
524 if (bus->workq)
525 destroy_workqueue(bus->workq);
526 kfree(bus);
527 return 0;
530 static int snd_hda_bus_dev_free(struct snd_device *device)
532 struct hda_bus *bus = device->device_data;
533 bus->shutdown = 1;
534 return snd_hda_bus_free(bus);
537 #ifdef CONFIG_SND_HDA_HWDEP
538 static int snd_hda_bus_dev_register(struct snd_device *device)
540 struct hda_bus *bus = device->device_data;
541 struct hda_codec *codec;
542 list_for_each_entry(codec, &bus->codec_list, list) {
543 snd_hda_hwdep_add_sysfs(codec);
544 snd_hda_hwdep_add_power_sysfs(codec);
546 return 0;
548 #else
549 #define snd_hda_bus_dev_register NULL
550 #endif
553 * snd_hda_bus_new - create a HDA bus
554 * @card: the card entry
555 * @temp: the template for hda_bus information
556 * @busp: the pointer to store the created bus instance
558 * Returns 0 if successful, or a negative error code.
560 int /*__devinit*/ snd_hda_bus_new(struct snd_card *card,
561 const struct hda_bus_template *temp,
562 struct hda_bus **busp)
564 struct hda_bus *bus;
565 int err;
566 static struct snd_device_ops dev_ops = {
567 .dev_register = snd_hda_bus_dev_register,
568 .dev_free = snd_hda_bus_dev_free,
571 if (snd_BUG_ON(!temp))
572 return -EINVAL;
573 if (snd_BUG_ON(!temp->ops.command || !temp->ops.get_response))
574 return -EINVAL;
576 if (busp)
577 *busp = NULL;
579 bus = kzalloc(sizeof(*bus), GFP_KERNEL);
580 if (bus == NULL) {
581 snd_printk(KERN_ERR "can't allocate struct hda_bus\n");
582 return -ENOMEM;
585 bus->card = card;
586 bus->private_data = temp->private_data;
587 bus->pci = temp->pci;
588 bus->modelname = temp->modelname;
589 bus->power_save = temp->power_save;
590 bus->ops = temp->ops;
592 mutex_init(&bus->cmd_mutex);
593 mutex_init(&bus->prepare_mutex);
594 INIT_LIST_HEAD(&bus->codec_list);
596 snprintf(bus->workq_name, sizeof(bus->workq_name),
597 "hd-audio%d", card->number);
598 bus->workq = create_singlethread_workqueue(bus->workq_name);
599 if (!bus->workq) {
600 snd_printk(KERN_ERR "cannot create workqueue %s\n",
601 bus->workq_name);
602 kfree(bus);
603 return -ENOMEM;
606 err = snd_device_new(card, SNDRV_DEV_BUS, bus, &dev_ops);
607 if (err < 0) {
608 snd_hda_bus_free(bus);
609 return err;
611 if (busp)
612 *busp = bus;
613 return 0;
615 EXPORT_SYMBOL_HDA(snd_hda_bus_new);
617 #ifdef CONFIG_SND_HDA_GENERIC
618 #define is_generic_config(codec) \
619 (codec->modelname && !strcmp(codec->modelname, "generic"))
620 #else
621 #define is_generic_config(codec) 0
622 #endif
624 #ifdef MODULE
625 #define HDA_MODREQ_MAX_COUNT 2 /* two request_modules()'s */
626 #else
627 #define HDA_MODREQ_MAX_COUNT 0 /* all presets are statically linked */
628 #endif
631 * find a matching codec preset
633 static const struct hda_codec_preset *
634 find_codec_preset(struct hda_codec *codec)
636 struct hda_codec_preset_list *tbl;
637 const struct hda_codec_preset *preset;
638 int mod_requested = 0;
640 if (is_generic_config(codec))
641 return NULL; /* use the generic parser */
643 again:
644 mutex_lock(&preset_mutex);
645 list_for_each_entry(tbl, &hda_preset_tables, list) {
646 if (!try_module_get(tbl->owner)) {
647 snd_printk(KERN_ERR "hda_codec: cannot module_get\n");
648 continue;
650 for (preset = tbl->preset; preset->id; preset++) {
651 u32 mask = preset->mask;
652 if (preset->afg && preset->afg != codec->afg)
653 continue;
654 if (preset->mfg && preset->mfg != codec->mfg)
655 continue;
656 if (!mask)
657 mask = ~0;
658 if (preset->id == (codec->vendor_id & mask) &&
659 (!preset->rev ||
660 preset->rev == codec->revision_id)) {
661 mutex_unlock(&preset_mutex);
662 codec->owner = tbl->owner;
663 return preset;
666 module_put(tbl->owner);
668 mutex_unlock(&preset_mutex);
670 if (mod_requested < HDA_MODREQ_MAX_COUNT) {
671 char name[32];
672 if (!mod_requested)
673 snprintf(name, sizeof(name), "snd-hda-codec-id:%08x",
674 codec->vendor_id);
675 else
676 snprintf(name, sizeof(name), "snd-hda-codec-id:%04x*",
677 (codec->vendor_id >> 16) & 0xffff);
678 request_module(name);
679 mod_requested++;
680 goto again;
682 return NULL;
686 * get_codec_name - store the codec name
688 static int get_codec_name(struct hda_codec *codec)
690 const struct hda_vendor_id *c;
691 const char *vendor = NULL;
692 u16 vendor_id = codec->vendor_id >> 16;
693 char tmp[16];
695 if (codec->vendor_name)
696 goto get_chip_name;
698 for (c = hda_vendor_ids; c->id; c++) {
699 if (c->id == vendor_id) {
700 vendor = c->name;
701 break;
704 if (!vendor) {
705 sprintf(tmp, "Generic %04x", vendor_id);
706 vendor = tmp;
708 codec->vendor_name = kstrdup(vendor, GFP_KERNEL);
709 if (!codec->vendor_name)
710 return -ENOMEM;
712 get_chip_name:
713 if (codec->chip_name)
714 return 0;
716 if (codec->preset && codec->preset->name)
717 codec->chip_name = kstrdup(codec->preset->name, GFP_KERNEL);
718 else {
719 sprintf(tmp, "ID %x", codec->vendor_id & 0xffff);
720 codec->chip_name = kstrdup(tmp, GFP_KERNEL);
722 if (!codec->chip_name)
723 return -ENOMEM;
724 return 0;
728 * look for an AFG and MFG nodes
730 static void /*__devinit*/ setup_fg_nodes(struct hda_codec *codec)
732 int i, total_nodes, function_id;
733 hda_nid_t nid;
735 total_nodes = snd_hda_get_sub_nodes(codec, AC_NODE_ROOT, &nid);
736 for (i = 0; i < total_nodes; i++, nid++) {
737 function_id = snd_hda_param_read(codec, nid,
738 AC_PAR_FUNCTION_TYPE);
739 switch (function_id & 0xff) {
740 case AC_GRP_AUDIO_FUNCTION:
741 codec->afg = nid;
742 codec->afg_function_id = function_id & 0xff;
743 codec->afg_unsol = (function_id >> 8) & 1;
744 break;
745 case AC_GRP_MODEM_FUNCTION:
746 codec->mfg = nid;
747 codec->mfg_function_id = function_id & 0xff;
748 codec->mfg_unsol = (function_id >> 8) & 1;
749 break;
750 default:
751 break;
757 * read widget caps for each widget and store in cache
759 static int read_widget_caps(struct hda_codec *codec, hda_nid_t fg_node)
761 int i;
762 hda_nid_t nid;
764 codec->num_nodes = snd_hda_get_sub_nodes(codec, fg_node,
765 &codec->start_nid);
766 codec->wcaps = kmalloc(codec->num_nodes * 4, GFP_KERNEL);
767 if (!codec->wcaps)
768 return -ENOMEM;
769 nid = codec->start_nid;
770 for (i = 0; i < codec->num_nodes; i++, nid++)
771 codec->wcaps[i] = snd_hda_param_read(codec, nid,
772 AC_PAR_AUDIO_WIDGET_CAP);
773 return 0;
776 /* read all pin default configurations and save codec->init_pins */
777 static int read_pin_defaults(struct hda_codec *codec)
779 int i;
780 hda_nid_t nid = codec->start_nid;
782 for (i = 0; i < codec->num_nodes; i++, nid++) {
783 struct hda_pincfg *pin;
784 unsigned int wcaps = get_wcaps(codec, nid);
785 unsigned int wid_type = get_wcaps_type(wcaps);
786 if (wid_type != AC_WID_PIN)
787 continue;
788 pin = snd_array_new(&codec->init_pins);
789 if (!pin)
790 return -ENOMEM;
791 pin->nid = nid;
792 pin->cfg = snd_hda_codec_read(codec, nid, 0,
793 AC_VERB_GET_CONFIG_DEFAULT, 0);
794 pin->ctrl = snd_hda_codec_read(codec, nid, 0,
795 AC_VERB_GET_PIN_WIDGET_CONTROL,
798 return 0;
801 /* look up the given pin config list and return the item matching with NID */
802 static struct hda_pincfg *look_up_pincfg(struct hda_codec *codec,
803 struct snd_array *array,
804 hda_nid_t nid)
806 int i;
807 for (i = 0; i < array->used; i++) {
808 struct hda_pincfg *pin = snd_array_elem(array, i);
809 if (pin->nid == nid)
810 return pin;
812 return NULL;
815 /* write a config value for the given NID */
816 static void set_pincfg(struct hda_codec *codec, hda_nid_t nid,
817 unsigned int cfg)
819 int i;
820 for (i = 0; i < 4; i++) {
821 snd_hda_codec_write(codec, nid, 0,
822 AC_VERB_SET_CONFIG_DEFAULT_BYTES_0 + i,
823 cfg & 0xff);
824 cfg >>= 8;
828 /* set the current pin config value for the given NID.
829 * the value is cached, and read via snd_hda_codec_get_pincfg()
831 int snd_hda_add_pincfg(struct hda_codec *codec, struct snd_array *list,
832 hda_nid_t nid, unsigned int cfg)
834 struct hda_pincfg *pin;
835 unsigned int oldcfg;
837 if (get_wcaps_type(get_wcaps(codec, nid)) != AC_WID_PIN)
838 return -EINVAL;
840 oldcfg = snd_hda_codec_get_pincfg(codec, nid);
841 pin = look_up_pincfg(codec, list, nid);
842 if (!pin) {
843 pin = snd_array_new(list);
844 if (!pin)
845 return -ENOMEM;
846 pin->nid = nid;
848 pin->cfg = cfg;
850 /* change only when needed; e.g. if the pincfg is already present
851 * in user_pins[], don't write it
853 cfg = snd_hda_codec_get_pincfg(codec, nid);
854 if (oldcfg != cfg)
855 set_pincfg(codec, nid, cfg);
856 return 0;
860 * snd_hda_codec_set_pincfg - Override a pin default configuration
861 * @codec: the HDA codec
862 * @nid: NID to set the pin config
863 * @cfg: the pin default config value
865 * Override a pin default configuration value in the cache.
866 * This value can be read by snd_hda_codec_get_pincfg() in a higher
867 * priority than the real hardware value.
869 int snd_hda_codec_set_pincfg(struct hda_codec *codec,
870 hda_nid_t nid, unsigned int cfg)
872 return snd_hda_add_pincfg(codec, &codec->driver_pins, nid, cfg);
874 EXPORT_SYMBOL_HDA(snd_hda_codec_set_pincfg);
877 * snd_hda_codec_get_pincfg - Obtain a pin-default configuration
878 * @codec: the HDA codec
879 * @nid: NID to get the pin config
881 * Get the current pin config value of the given pin NID.
882 * If the pincfg value is cached or overridden via sysfs or driver,
883 * returns the cached value.
885 unsigned int snd_hda_codec_get_pincfg(struct hda_codec *codec, hda_nid_t nid)
887 struct hda_pincfg *pin;
889 #ifdef CONFIG_SND_HDA_HWDEP
890 pin = look_up_pincfg(codec, &codec->user_pins, nid);
891 if (pin)
892 return pin->cfg;
893 #endif
894 pin = look_up_pincfg(codec, &codec->driver_pins, nid);
895 if (pin)
896 return pin->cfg;
897 pin = look_up_pincfg(codec, &codec->init_pins, nid);
898 if (pin)
899 return pin->cfg;
900 return 0;
902 EXPORT_SYMBOL_HDA(snd_hda_codec_get_pincfg);
904 /* restore all current pin configs */
905 static void restore_pincfgs(struct hda_codec *codec)
907 int i;
908 for (i = 0; i < codec->init_pins.used; i++) {
909 struct hda_pincfg *pin = snd_array_elem(&codec->init_pins, i);
910 set_pincfg(codec, pin->nid,
911 snd_hda_codec_get_pincfg(codec, pin->nid));
916 * snd_hda_shutup_pins - Shut up all pins
917 * @codec: the HDA codec
919 * Clear all pin controls to shup up before suspend for avoiding click noise.
920 * The controls aren't cached so that they can be resumed properly.
922 void snd_hda_shutup_pins(struct hda_codec *codec)
924 int i;
925 /* don't shut up pins when unloading the driver; otherwise it breaks
926 * the default pin setup at the next load of the driver
928 if (codec->bus->shutdown)
929 return;
930 for (i = 0; i < codec->init_pins.used; i++) {
931 struct hda_pincfg *pin = snd_array_elem(&codec->init_pins, i);
932 /* use read here for syncing after issuing each verb */
933 snd_hda_codec_read(codec, pin->nid, 0,
934 AC_VERB_SET_PIN_WIDGET_CONTROL, 0);
936 codec->pins_shutup = 1;
938 EXPORT_SYMBOL_HDA(snd_hda_shutup_pins);
940 #ifdef SND_HDA_NEEDS_RESUME
941 /* Restore the pin controls cleared previously via snd_hda_shutup_pins() */
942 static void restore_shutup_pins(struct hda_codec *codec)
944 int i;
945 if (!codec->pins_shutup)
946 return;
947 if (codec->bus->shutdown)
948 return;
949 for (i = 0; i < codec->init_pins.used; i++) {
950 struct hda_pincfg *pin = snd_array_elem(&codec->init_pins, i);
951 snd_hda_codec_write(codec, pin->nid, 0,
952 AC_VERB_SET_PIN_WIDGET_CONTROL,
953 pin->ctrl);
955 codec->pins_shutup = 0;
957 #endif
959 static void init_hda_cache(struct hda_cache_rec *cache,
960 unsigned int record_size);
961 static void free_hda_cache(struct hda_cache_rec *cache);
963 /* restore the initial pin cfgs and release all pincfg lists */
964 static void restore_init_pincfgs(struct hda_codec *codec)
966 /* first free driver_pins and user_pins, then call restore_pincfg
967 * so that only the values in init_pins are restored
969 snd_array_free(&codec->driver_pins);
970 #ifdef CONFIG_SND_HDA_HWDEP
971 snd_array_free(&codec->user_pins);
972 #endif
973 restore_pincfgs(codec);
974 snd_array_free(&codec->init_pins);
978 * audio-converter setup caches
980 struct hda_cvt_setup {
981 hda_nid_t nid;
982 u8 stream_tag;
983 u8 channel_id;
984 u16 format_id;
985 unsigned char active; /* cvt is currently used */
986 unsigned char dirty; /* setups should be cleared */
989 /* get or create a cache entry for the given audio converter NID */
990 static struct hda_cvt_setup *
991 get_hda_cvt_setup(struct hda_codec *codec, hda_nid_t nid)
993 struct hda_cvt_setup *p;
994 int i;
996 for (i = 0; i < codec->cvt_setups.used; i++) {
997 p = snd_array_elem(&codec->cvt_setups, i);
998 if (p->nid == nid)
999 return p;
1001 p = snd_array_new(&codec->cvt_setups);
1002 if (p)
1003 p->nid = nid;
1004 return p;
1008 * codec destructor
1010 static void snd_hda_codec_free(struct hda_codec *codec)
1012 if (!codec)
1013 return;
1014 restore_init_pincfgs(codec);
1015 #ifdef CONFIG_SND_HDA_POWER_SAVE
1016 cancel_delayed_work(&codec->power_work);
1017 flush_workqueue(codec->bus->workq);
1018 #endif
1019 list_del(&codec->list);
1020 snd_array_free(&codec->mixers);
1021 snd_array_free(&codec->nids);
1022 codec->bus->caddr_tbl[codec->addr] = NULL;
1023 if (codec->patch_ops.free)
1024 codec->patch_ops.free(codec);
1025 module_put(codec->owner);
1026 free_hda_cache(&codec->amp_cache);
1027 free_hda_cache(&codec->cmd_cache);
1028 kfree(codec->vendor_name);
1029 kfree(codec->chip_name);
1030 kfree(codec->modelname);
1031 kfree(codec->wcaps);
1032 kfree(codec);
1035 static void hda_set_power_state(struct hda_codec *codec, hda_nid_t fg,
1036 unsigned int power_state);
1039 * snd_hda_codec_new - create a HDA codec
1040 * @bus: the bus to assign
1041 * @codec_addr: the codec address
1042 * @codecp: the pointer to store the generated codec
1044 * Returns 0 if successful, or a negative error code.
1046 int /*__devinit*/ snd_hda_codec_new(struct hda_bus *bus,
1047 unsigned int codec_addr,
1048 struct hda_codec **codecp)
1050 struct hda_codec *codec;
1051 char component[31];
1052 int err;
1054 if (snd_BUG_ON(!bus))
1055 return -EINVAL;
1056 if (snd_BUG_ON(codec_addr > HDA_MAX_CODEC_ADDRESS))
1057 return -EINVAL;
1059 if (bus->caddr_tbl[codec_addr]) {
1060 snd_printk(KERN_ERR "hda_codec: "
1061 "address 0x%x is already occupied\n", codec_addr);
1062 return -EBUSY;
1065 codec = kzalloc(sizeof(*codec), GFP_KERNEL);
1066 if (codec == NULL) {
1067 snd_printk(KERN_ERR "can't allocate struct hda_codec\n");
1068 return -ENOMEM;
1071 codec->bus = bus;
1072 codec->addr = codec_addr;
1073 mutex_init(&codec->spdif_mutex);
1074 mutex_init(&codec->control_mutex);
1075 init_hda_cache(&codec->amp_cache, sizeof(struct hda_amp_info));
1076 init_hda_cache(&codec->cmd_cache, sizeof(struct hda_cache_head));
1077 snd_array_init(&codec->mixers, sizeof(struct hda_nid_item), 32);
1078 snd_array_init(&codec->nids, sizeof(struct hda_nid_item), 32);
1079 snd_array_init(&codec->init_pins, sizeof(struct hda_pincfg), 16);
1080 snd_array_init(&codec->driver_pins, sizeof(struct hda_pincfg), 16);
1081 snd_array_init(&codec->cvt_setups, sizeof(struct hda_cvt_setup), 8);
1082 if (codec->bus->modelname) {
1083 codec->modelname = kstrdup(codec->bus->modelname, GFP_KERNEL);
1084 if (!codec->modelname) {
1085 snd_hda_codec_free(codec);
1086 return -ENODEV;
1090 #ifdef CONFIG_SND_HDA_POWER_SAVE
1091 INIT_DELAYED_WORK(&codec->power_work, hda_power_work);
1092 /* snd_hda_codec_new() marks the codec as power-up, and leave it as is.
1093 * the caller has to power down appropriatley after initialization
1094 * phase.
1096 hda_keep_power_on(codec);
1097 #endif
1099 list_add_tail(&codec->list, &bus->codec_list);
1100 bus->caddr_tbl[codec_addr] = codec;
1102 codec->vendor_id = snd_hda_param_read(codec, AC_NODE_ROOT,
1103 AC_PAR_VENDOR_ID);
1104 if (codec->vendor_id == -1)
1105 /* read again, hopefully the access method was corrected
1106 * in the last read...
1108 codec->vendor_id = snd_hda_param_read(codec, AC_NODE_ROOT,
1109 AC_PAR_VENDOR_ID);
1110 codec->subsystem_id = snd_hda_param_read(codec, AC_NODE_ROOT,
1111 AC_PAR_SUBSYSTEM_ID);
1112 codec->revision_id = snd_hda_param_read(codec, AC_NODE_ROOT,
1113 AC_PAR_REV_ID);
1115 setup_fg_nodes(codec);
1116 if (!codec->afg && !codec->mfg) {
1117 snd_printdd("hda_codec: no AFG or MFG node found\n");
1118 err = -ENODEV;
1119 goto error;
1122 err = read_widget_caps(codec, codec->afg ? codec->afg : codec->mfg);
1123 if (err < 0) {
1124 snd_printk(KERN_ERR "hda_codec: cannot malloc\n");
1125 goto error;
1127 err = read_pin_defaults(codec);
1128 if (err < 0)
1129 goto error;
1131 if (!codec->subsystem_id) {
1132 hda_nid_t nid = codec->afg ? codec->afg : codec->mfg;
1133 codec->subsystem_id =
1134 snd_hda_codec_read(codec, nid, 0,
1135 AC_VERB_GET_SUBSYSTEM_ID, 0);
1138 /* power-up all before initialization */
1139 hda_set_power_state(codec,
1140 codec->afg ? codec->afg : codec->mfg,
1141 AC_PWRST_D0);
1143 snd_hda_codec_proc_new(codec);
1145 snd_hda_create_hwdep(codec);
1147 sprintf(component, "HDA:%08x,%08x,%08x", codec->vendor_id,
1148 codec->subsystem_id, codec->revision_id);
1149 snd_component_add(codec->bus->card, component);
1151 if (codecp)
1152 *codecp = codec;
1153 return 0;
1155 error:
1156 snd_hda_codec_free(codec);
1157 return err;
1159 EXPORT_SYMBOL_HDA(snd_hda_codec_new);
1162 * snd_hda_codec_configure - (Re-)configure the HD-audio codec
1163 * @codec: the HDA codec
1165 * Start parsing of the given codec tree and (re-)initialize the whole
1166 * patch instance.
1168 * Returns 0 if successful or a negative error code.
1170 int snd_hda_codec_configure(struct hda_codec *codec)
1172 int err;
1174 codec->preset = find_codec_preset(codec);
1175 if (!codec->vendor_name || !codec->chip_name) {
1176 err = get_codec_name(codec);
1177 if (err < 0)
1178 return err;
1181 if (is_generic_config(codec)) {
1182 err = snd_hda_parse_generic_codec(codec);
1183 goto patched;
1185 if (codec->preset && codec->preset->patch) {
1186 err = codec->preset->patch(codec);
1187 goto patched;
1190 /* call the default parser */
1191 err = snd_hda_parse_generic_codec(codec);
1192 if (err < 0)
1193 printk(KERN_ERR "hda-codec: No codec parser is available\n");
1195 patched:
1196 if (!err && codec->patch_ops.unsol_event)
1197 err = init_unsol_queue(codec->bus);
1198 /* audio codec should override the mixer name */
1199 if (!err && (codec->afg || !*codec->bus->card->mixername))
1200 snprintf(codec->bus->card->mixername,
1201 sizeof(codec->bus->card->mixername),
1202 "%s %s", codec->vendor_name, codec->chip_name);
1203 return err;
1205 EXPORT_SYMBOL_HDA(snd_hda_codec_configure);
1208 * snd_hda_codec_setup_stream - set up the codec for streaming
1209 * @codec: the CODEC to set up
1210 * @nid: the NID to set up
1211 * @stream_tag: stream tag to pass, it's between 0x1 and 0xf.
1212 * @channel_id: channel id to pass, zero based.
1213 * @format: stream format.
1215 void snd_hda_codec_setup_stream(struct hda_codec *codec, hda_nid_t nid,
1216 u32 stream_tag,
1217 int channel_id, int format)
1219 struct hda_codec *c;
1220 struct hda_cvt_setup *p;
1221 unsigned int oldval, newval;
1222 int type;
1223 int i;
1225 if (!nid)
1226 return;
1228 snd_printdd("hda_codec_setup_stream: "
1229 "NID=0x%x, stream=0x%x, channel=%d, format=0x%x\n",
1230 nid, stream_tag, channel_id, format);
1231 p = get_hda_cvt_setup(codec, nid);
1232 if (!p)
1233 return;
1234 /* update the stream-id if changed */
1235 if (p->stream_tag != stream_tag || p->channel_id != channel_id) {
1236 oldval = snd_hda_codec_read(codec, nid, 0, AC_VERB_GET_CONV, 0);
1237 newval = (stream_tag << 4) | channel_id;
1238 if (oldval != newval)
1239 snd_hda_codec_write(codec, nid, 0,
1240 AC_VERB_SET_CHANNEL_STREAMID,
1241 newval);
1242 p->stream_tag = stream_tag;
1243 p->channel_id = channel_id;
1245 /* update the format-id if changed */
1246 if (p->format_id != format) {
1247 oldval = snd_hda_codec_read(codec, nid, 0,
1248 AC_VERB_GET_STREAM_FORMAT, 0);
1249 if (oldval != format) {
1250 msleep(1);
1251 snd_hda_codec_write(codec, nid, 0,
1252 AC_VERB_SET_STREAM_FORMAT,
1253 format);
1255 p->format_id = format;
1257 p->active = 1;
1258 p->dirty = 0;
1260 /* make other inactive cvts with the same stream-tag dirty */
1261 type = get_wcaps_type(get_wcaps(codec, nid));
1262 list_for_each_entry(c, &codec->bus->codec_list, list) {
1263 for (i = 0; i < c->cvt_setups.used; i++) {
1264 p = snd_array_elem(&c->cvt_setups, i);
1265 if (!p->active && p->stream_tag == stream_tag &&
1266 get_wcaps_type(get_wcaps(codec, p->nid)) == type)
1267 p->dirty = 1;
1271 EXPORT_SYMBOL_HDA(snd_hda_codec_setup_stream);
1273 static void really_cleanup_stream(struct hda_codec *codec,
1274 struct hda_cvt_setup *q);
1277 * __snd_hda_codec_cleanup_stream - clean up the codec for closing
1278 * @codec: the CODEC to clean up
1279 * @nid: the NID to clean up
1280 * @do_now: really clean up the stream instead of clearing the active flag
1282 void __snd_hda_codec_cleanup_stream(struct hda_codec *codec, hda_nid_t nid,
1283 int do_now)
1285 struct hda_cvt_setup *p;
1287 if (!nid)
1288 return;
1290 if (codec->no_sticky_stream)
1291 do_now = 1;
1293 snd_printdd("hda_codec_cleanup_stream: NID=0x%x\n", nid);
1294 p = get_hda_cvt_setup(codec, nid);
1295 if (p) {
1296 /* here we just clear the active flag when do_now isn't set;
1297 * actual clean-ups will be done later in
1298 * purify_inactive_streams() called from snd_hda_codec_prpapre()
1300 if (do_now)
1301 really_cleanup_stream(codec, p);
1302 else
1303 p->active = 0;
1306 EXPORT_SYMBOL_HDA(__snd_hda_codec_cleanup_stream);
1308 static void really_cleanup_stream(struct hda_codec *codec,
1309 struct hda_cvt_setup *q)
1311 hda_nid_t nid = q->nid;
1312 snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_CHANNEL_STREAMID, 0);
1313 snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_STREAM_FORMAT, 0);
1314 memset(q, 0, sizeof(*q));
1315 q->nid = nid;
1318 /* clean up the all conflicting obsolete streams */
1319 static void purify_inactive_streams(struct hda_codec *codec)
1321 struct hda_codec *c;
1322 int i;
1324 list_for_each_entry(c, &codec->bus->codec_list, list) {
1325 for (i = 0; i < c->cvt_setups.used; i++) {
1326 struct hda_cvt_setup *p;
1327 p = snd_array_elem(&c->cvt_setups, i);
1328 if (p->dirty)
1329 really_cleanup_stream(c, p);
1334 #ifdef SND_HDA_NEEDS_RESUME
1335 /* clean up all streams; called from suspend */
1336 static void hda_cleanup_all_streams(struct hda_codec *codec)
1338 int i;
1340 for (i = 0; i < codec->cvt_setups.used; i++) {
1341 struct hda_cvt_setup *p = snd_array_elem(&codec->cvt_setups, i);
1342 if (p->stream_tag)
1343 really_cleanup_stream(codec, p);
1346 #endif
1349 * amp access functions
1352 /* FIXME: more better hash key? */
1353 #define HDA_HASH_KEY(nid, dir, idx) (u32)((nid) + ((idx) << 16) + ((dir) << 24))
1354 #define HDA_HASH_PINCAP_KEY(nid) (u32)((nid) + (0x02 << 24))
1355 #define HDA_HASH_PARPCM_KEY(nid) (u32)((nid) + (0x03 << 24))
1356 #define HDA_HASH_PARSTR_KEY(nid) (u32)((nid) + (0x04 << 24))
1357 #define INFO_AMP_CAPS (1<<0)
1358 #define INFO_AMP_VOL(ch) (1 << (1 + (ch)))
1360 /* initialize the hash table */
1361 static void /*__devinit*/ init_hda_cache(struct hda_cache_rec *cache,
1362 unsigned int record_size)
1364 memset(cache, 0, sizeof(*cache));
1365 memset(cache->hash, 0xff, sizeof(cache->hash));
1366 snd_array_init(&cache->buf, record_size, 64);
1369 static void free_hda_cache(struct hda_cache_rec *cache)
1371 snd_array_free(&cache->buf);
1374 /* query the hash. allocate an entry if not found. */
1375 static struct hda_cache_head *get_hash(struct hda_cache_rec *cache, u32 key)
1377 u16 idx = key % (u16)ARRAY_SIZE(cache->hash);
1378 u16 cur = cache->hash[idx];
1379 struct hda_cache_head *info;
1381 while (cur != 0xffff) {
1382 info = snd_array_elem(&cache->buf, cur);
1383 if (info->key == key)
1384 return info;
1385 cur = info->next;
1387 return NULL;
1390 /* query the hash. allocate an entry if not found. */
1391 static struct hda_cache_head *get_alloc_hash(struct hda_cache_rec *cache,
1392 u32 key)
1394 struct hda_cache_head *info = get_hash(cache, key);
1395 if (!info) {
1396 u16 idx, cur;
1397 /* add a new hash entry */
1398 info = snd_array_new(&cache->buf);
1399 if (!info)
1400 return NULL;
1401 cur = snd_array_index(&cache->buf, info);
1402 info->key = key;
1403 info->val = 0;
1404 idx = key % (u16)ARRAY_SIZE(cache->hash);
1405 info->next = cache->hash[idx];
1406 cache->hash[idx] = cur;
1408 return info;
1411 /* query and allocate an amp hash entry */
1412 static inline struct hda_amp_info *
1413 get_alloc_amp_hash(struct hda_codec *codec, u32 key)
1415 return (struct hda_amp_info *)get_alloc_hash(&codec->amp_cache, key);
1419 * query_amp_caps - query AMP capabilities
1420 * @codec: the HD-auio codec
1421 * @nid: the NID to query
1422 * @direction: either #HDA_INPUT or #HDA_OUTPUT
1424 * Query AMP capabilities for the given widget and direction.
1425 * Returns the obtained capability bits.
1427 * When cap bits have been already read, this doesn't read again but
1428 * returns the cached value.
1430 u32 query_amp_caps(struct hda_codec *codec, hda_nid_t nid, int direction)
1432 struct hda_amp_info *info;
1434 info = get_alloc_amp_hash(codec, HDA_HASH_KEY(nid, direction, 0));
1435 if (!info)
1436 return 0;
1437 if (!(info->head.val & INFO_AMP_CAPS)) {
1438 if (!(get_wcaps(codec, nid) & AC_WCAP_AMP_OVRD))
1439 nid = codec->afg;
1440 info->amp_caps = snd_hda_param_read(codec, nid,
1441 direction == HDA_OUTPUT ?
1442 AC_PAR_AMP_OUT_CAP :
1443 AC_PAR_AMP_IN_CAP);
1444 if (info->amp_caps)
1445 info->head.val |= INFO_AMP_CAPS;
1447 return info->amp_caps;
1449 EXPORT_SYMBOL_HDA(query_amp_caps);
1452 * snd_hda_override_amp_caps - Override the AMP capabilities
1453 * @codec: the CODEC to clean up
1454 * @nid: the NID to clean up
1455 * @direction: either #HDA_INPUT or #HDA_OUTPUT
1456 * @caps: the capability bits to set
1458 * Override the cached AMP caps bits value by the given one.
1459 * This function is useful if the driver needs to adjust the AMP ranges,
1460 * e.g. limit to 0dB, etc.
1462 * Returns zero if successful or a negative error code.
1464 int snd_hda_override_amp_caps(struct hda_codec *codec, hda_nid_t nid, int dir,
1465 unsigned int caps)
1467 struct hda_amp_info *info;
1469 info = get_alloc_amp_hash(codec, HDA_HASH_KEY(nid, dir, 0));
1470 if (!info)
1471 return -EINVAL;
1472 info->amp_caps = caps;
1473 info->head.val |= INFO_AMP_CAPS;
1474 return 0;
1476 EXPORT_SYMBOL_HDA(snd_hda_override_amp_caps);
1478 static unsigned int
1479 query_caps_hash(struct hda_codec *codec, hda_nid_t nid, u32 key,
1480 unsigned int (*func)(struct hda_codec *, hda_nid_t))
1482 struct hda_amp_info *info;
1484 info = get_alloc_amp_hash(codec, key);
1485 if (!info)
1486 return 0;
1487 if (!info->head.val) {
1488 info->head.val |= INFO_AMP_CAPS;
1489 info->amp_caps = func(codec, nid);
1491 return info->amp_caps;
1494 static unsigned int read_pin_cap(struct hda_codec *codec, hda_nid_t nid)
1496 return snd_hda_param_read(codec, nid, AC_PAR_PIN_CAP);
1500 * snd_hda_query_pin_caps - Query PIN capabilities
1501 * @codec: the HD-auio codec
1502 * @nid: the NID to query
1504 * Query PIN capabilities for the given widget.
1505 * Returns the obtained capability bits.
1507 * When cap bits have been already read, this doesn't read again but
1508 * returns the cached value.
1510 u32 snd_hda_query_pin_caps(struct hda_codec *codec, hda_nid_t nid)
1512 return query_caps_hash(codec, nid, HDA_HASH_PINCAP_KEY(nid),
1513 read_pin_cap);
1515 EXPORT_SYMBOL_HDA(snd_hda_query_pin_caps);
1518 * snd_hda_pin_sense - execute pin sense measurement
1519 * @codec: the CODEC to sense
1520 * @nid: the pin NID to sense
1522 * Execute necessary pin sense measurement and return its Presence Detect,
1523 * Impedance, ELD Valid etc. status bits.
1525 u32 snd_hda_pin_sense(struct hda_codec *codec, hda_nid_t nid)
1527 u32 pincap;
1529 if (!codec->no_trigger_sense) {
1530 pincap = snd_hda_query_pin_caps(codec, nid);
1531 if (pincap & AC_PINCAP_TRIG_REQ) /* need trigger? */
1532 snd_hda_codec_read(codec, nid, 0,
1533 AC_VERB_SET_PIN_SENSE, 0);
1535 return snd_hda_codec_read(codec, nid, 0,
1536 AC_VERB_GET_PIN_SENSE, 0);
1538 EXPORT_SYMBOL_HDA(snd_hda_pin_sense);
1541 * snd_hda_jack_detect - query pin Presence Detect status
1542 * @codec: the CODEC to sense
1543 * @nid: the pin NID to sense
1545 * Query and return the pin's Presence Detect status.
1547 int snd_hda_jack_detect(struct hda_codec *codec, hda_nid_t nid)
1549 u32 sense = snd_hda_pin_sense(codec, nid);
1550 return !!(sense & AC_PINSENSE_PRESENCE);
1552 EXPORT_SYMBOL_HDA(snd_hda_jack_detect);
1555 * read the current volume to info
1556 * if the cache exists, read the cache value.
1558 static unsigned int get_vol_mute(struct hda_codec *codec,
1559 struct hda_amp_info *info, hda_nid_t nid,
1560 int ch, int direction, int index)
1562 u32 val, parm;
1564 if (info->head.val & INFO_AMP_VOL(ch))
1565 return info->vol[ch];
1567 parm = ch ? AC_AMP_GET_RIGHT : AC_AMP_GET_LEFT;
1568 parm |= direction == HDA_OUTPUT ? AC_AMP_GET_OUTPUT : AC_AMP_GET_INPUT;
1569 parm |= index;
1570 val = snd_hda_codec_read(codec, nid, 0,
1571 AC_VERB_GET_AMP_GAIN_MUTE, parm);
1572 info->vol[ch] = val & 0xff;
1573 info->head.val |= INFO_AMP_VOL(ch);
1574 return info->vol[ch];
1578 * write the current volume in info to the h/w and update the cache
1580 static void put_vol_mute(struct hda_codec *codec, struct hda_amp_info *info,
1581 hda_nid_t nid, int ch, int direction, int index,
1582 int val)
1584 u32 parm;
1586 parm = ch ? AC_AMP_SET_RIGHT : AC_AMP_SET_LEFT;
1587 parm |= direction == HDA_OUTPUT ? AC_AMP_SET_OUTPUT : AC_AMP_SET_INPUT;
1588 parm |= index << AC_AMP_SET_INDEX_SHIFT;
1589 parm |= val;
1590 snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_AMP_GAIN_MUTE, parm);
1591 info->vol[ch] = val;
1595 * snd_hda_codec_amp_read - Read AMP value
1596 * @codec: HD-audio codec
1597 * @nid: NID to read the AMP value
1598 * @ch: channel (left=0 or right=1)
1599 * @direction: #HDA_INPUT or #HDA_OUTPUT
1600 * @index: the index value (only for input direction)
1602 * Read AMP value. The volume is between 0 to 0x7f, 0x80 = mute bit.
1604 int snd_hda_codec_amp_read(struct hda_codec *codec, hda_nid_t nid, int ch,
1605 int direction, int index)
1607 struct hda_amp_info *info;
1608 info = get_alloc_amp_hash(codec, HDA_HASH_KEY(nid, direction, index));
1609 if (!info)
1610 return 0;
1611 return get_vol_mute(codec, info, nid, ch, direction, index);
1613 EXPORT_SYMBOL_HDA(snd_hda_codec_amp_read);
1616 * snd_hda_codec_amp_update - update the AMP value
1617 * @codec: HD-audio codec
1618 * @nid: NID to read the AMP value
1619 * @ch: channel (left=0 or right=1)
1620 * @direction: #HDA_INPUT or #HDA_OUTPUT
1621 * @idx: the index value (only for input direction)
1622 * @mask: bit mask to set
1623 * @val: the bits value to set
1625 * Update the AMP value with a bit mask.
1626 * Returns 0 if the value is unchanged, 1 if changed.
1628 int snd_hda_codec_amp_update(struct hda_codec *codec, hda_nid_t nid, int ch,
1629 int direction, int idx, int mask, int val)
1631 struct hda_amp_info *info;
1633 info = get_alloc_amp_hash(codec, HDA_HASH_KEY(nid, direction, idx));
1634 if (!info)
1635 return 0;
1636 if (snd_BUG_ON(mask & ~0xff))
1637 mask &= 0xff;
1638 val &= mask;
1639 val |= get_vol_mute(codec, info, nid, ch, direction, idx) & ~mask;
1640 if (info->vol[ch] == val)
1641 return 0;
1642 put_vol_mute(codec, info, nid, ch, direction, idx, val);
1643 return 1;
1645 EXPORT_SYMBOL_HDA(snd_hda_codec_amp_update);
1648 * snd_hda_codec_amp_stereo - update the AMP stereo values
1649 * @codec: HD-audio codec
1650 * @nid: NID to read the AMP value
1651 * @direction: #HDA_INPUT or #HDA_OUTPUT
1652 * @idx: the index value (only for input direction)
1653 * @mask: bit mask to set
1654 * @val: the bits value to set
1656 * Update the AMP values like snd_hda_codec_amp_update(), but for a
1657 * stereo widget with the same mask and value.
1659 int snd_hda_codec_amp_stereo(struct hda_codec *codec, hda_nid_t nid,
1660 int direction, int idx, int mask, int val)
1662 int ch, ret = 0;
1664 if (snd_BUG_ON(mask & ~0xff))
1665 mask &= 0xff;
1666 for (ch = 0; ch < 2; ch++)
1667 ret |= snd_hda_codec_amp_update(codec, nid, ch, direction,
1668 idx, mask, val);
1669 return ret;
1671 EXPORT_SYMBOL_HDA(snd_hda_codec_amp_stereo);
1673 #ifdef SND_HDA_NEEDS_RESUME
1675 * snd_hda_codec_resume_amp - Resume all AMP commands from the cache
1676 * @codec: HD-audio codec
1678 * Resume the all amp commands from the cache.
1680 void snd_hda_codec_resume_amp(struct hda_codec *codec)
1682 struct hda_amp_info *buffer = codec->amp_cache.buf.list;
1683 int i;
1685 for (i = 0; i < codec->amp_cache.buf.used; i++, buffer++) {
1686 u32 key = buffer->head.key;
1687 hda_nid_t nid;
1688 unsigned int idx, dir, ch;
1689 if (!key)
1690 continue;
1691 nid = key & 0xff;
1692 idx = (key >> 16) & 0xff;
1693 dir = (key >> 24) & 0xff;
1694 for (ch = 0; ch < 2; ch++) {
1695 if (!(buffer->head.val & INFO_AMP_VOL(ch)))
1696 continue;
1697 put_vol_mute(codec, buffer, nid, ch, dir, idx,
1698 buffer->vol[ch]);
1702 EXPORT_SYMBOL_HDA(snd_hda_codec_resume_amp);
1703 #endif /* SND_HDA_NEEDS_RESUME */
1705 static u32 get_amp_max_value(struct hda_codec *codec, hda_nid_t nid, int dir,
1706 unsigned int ofs)
1708 u32 caps = query_amp_caps(codec, nid, dir);
1709 /* get num steps */
1710 caps = (caps & AC_AMPCAP_NUM_STEPS) >> AC_AMPCAP_NUM_STEPS_SHIFT;
1711 if (ofs < caps)
1712 caps -= ofs;
1713 return caps;
1717 * snd_hda_mixer_amp_volume_info - Info callback for a standard AMP mixer
1719 * The control element is supposed to have the private_value field
1720 * set up via HDA_COMPOSE_AMP_VAL*() or related macros.
1722 int snd_hda_mixer_amp_volume_info(struct snd_kcontrol *kcontrol,
1723 struct snd_ctl_elem_info *uinfo)
1725 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1726 u16 nid = get_amp_nid(kcontrol);
1727 u8 chs = get_amp_channels(kcontrol);
1728 int dir = get_amp_direction(kcontrol);
1729 unsigned int ofs = get_amp_offset(kcontrol);
1731 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
1732 uinfo->count = chs == 3 ? 2 : 1;
1733 uinfo->value.integer.min = 0;
1734 uinfo->value.integer.max = get_amp_max_value(codec, nid, dir, ofs);
1735 if (!uinfo->value.integer.max) {
1736 printk(KERN_WARNING "hda_codec: "
1737 "num_steps = 0 for NID=0x%x (ctl = %s)\n", nid,
1738 kcontrol->id.name);
1739 return -EINVAL;
1741 return 0;
1743 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_volume_info);
1746 static inline unsigned int
1747 read_amp_value(struct hda_codec *codec, hda_nid_t nid,
1748 int ch, int dir, int idx, unsigned int ofs)
1750 unsigned int val;
1751 val = snd_hda_codec_amp_read(codec, nid, ch, dir, idx);
1752 val &= HDA_AMP_VOLMASK;
1753 if (val >= ofs)
1754 val -= ofs;
1755 else
1756 val = 0;
1757 return val;
1760 static inline int
1761 update_amp_value(struct hda_codec *codec, hda_nid_t nid,
1762 int ch, int dir, int idx, unsigned int ofs,
1763 unsigned int val)
1765 unsigned int maxval;
1767 if (val > 0)
1768 val += ofs;
1769 /* ofs = 0: raw max value */
1770 maxval = get_amp_max_value(codec, nid, dir, 0);
1771 if (val > maxval)
1772 val = maxval;
1773 return snd_hda_codec_amp_update(codec, nid, ch, dir, idx,
1774 HDA_AMP_VOLMASK, val);
1778 * snd_hda_mixer_amp_volume_get - Get callback for a standard AMP mixer volume
1780 * The control element is supposed to have the private_value field
1781 * set up via HDA_COMPOSE_AMP_VAL*() or related macros.
1783 int snd_hda_mixer_amp_volume_get(struct snd_kcontrol *kcontrol,
1784 struct snd_ctl_elem_value *ucontrol)
1786 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1787 hda_nid_t nid = get_amp_nid(kcontrol);
1788 int chs = get_amp_channels(kcontrol);
1789 int dir = get_amp_direction(kcontrol);
1790 int idx = get_amp_index(kcontrol);
1791 unsigned int ofs = get_amp_offset(kcontrol);
1792 long *valp = ucontrol->value.integer.value;
1794 if (chs & 1)
1795 *valp++ = read_amp_value(codec, nid, 0, dir, idx, ofs);
1796 if (chs & 2)
1797 *valp = read_amp_value(codec, nid, 1, dir, idx, ofs);
1798 return 0;
1800 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_volume_get);
1803 * snd_hda_mixer_amp_volume_put - Put callback for a standard AMP mixer volume
1805 * The control element is supposed to have the private_value field
1806 * set up via HDA_COMPOSE_AMP_VAL*() or related macros.
1808 int snd_hda_mixer_amp_volume_put(struct snd_kcontrol *kcontrol,
1809 struct snd_ctl_elem_value *ucontrol)
1811 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1812 hda_nid_t nid = get_amp_nid(kcontrol);
1813 int chs = get_amp_channels(kcontrol);
1814 int dir = get_amp_direction(kcontrol);
1815 int idx = get_amp_index(kcontrol);
1816 unsigned int ofs = get_amp_offset(kcontrol);
1817 long *valp = ucontrol->value.integer.value;
1818 int change = 0;
1820 snd_hda_power_up(codec);
1821 if (chs & 1) {
1822 change = update_amp_value(codec, nid, 0, dir, idx, ofs, *valp);
1823 valp++;
1825 if (chs & 2)
1826 change |= update_amp_value(codec, nid, 1, dir, idx, ofs, *valp);
1827 snd_hda_power_down(codec);
1828 return change;
1830 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_volume_put);
1833 * snd_hda_mixer_amp_volume_put - TLV callback for a standard AMP mixer volume
1835 * The control element is supposed to have the private_value field
1836 * set up via HDA_COMPOSE_AMP_VAL*() or related macros.
1838 int snd_hda_mixer_amp_tlv(struct snd_kcontrol *kcontrol, int op_flag,
1839 unsigned int size, unsigned int __user *_tlv)
1841 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1842 hda_nid_t nid = get_amp_nid(kcontrol);
1843 int dir = get_amp_direction(kcontrol);
1844 unsigned int ofs = get_amp_offset(kcontrol);
1845 bool min_mute = get_amp_min_mute(kcontrol);
1846 u32 caps, val1, val2;
1848 if (size < 4 * sizeof(unsigned int))
1849 return -ENOMEM;
1850 caps = query_amp_caps(codec, nid, dir);
1851 val2 = (caps & AC_AMPCAP_STEP_SIZE) >> AC_AMPCAP_STEP_SIZE_SHIFT;
1852 val2 = (val2 + 1) * 25;
1853 val1 = -((caps & AC_AMPCAP_OFFSET) >> AC_AMPCAP_OFFSET_SHIFT);
1854 val1 += ofs;
1855 val1 = ((int)val1) * ((int)val2);
1856 if (min_mute)
1857 val2 |= TLV_DB_SCALE_MUTE;
1858 if (put_user(SNDRV_CTL_TLVT_DB_SCALE, _tlv))
1859 return -EFAULT;
1860 if (put_user(2 * sizeof(unsigned int), _tlv + 1))
1861 return -EFAULT;
1862 if (put_user(val1, _tlv + 2))
1863 return -EFAULT;
1864 if (put_user(val2, _tlv + 3))
1865 return -EFAULT;
1866 return 0;
1868 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_tlv);
1871 * snd_hda_set_vmaster_tlv - Set TLV for a virtual master control
1872 * @codec: HD-audio codec
1873 * @nid: NID of a reference widget
1874 * @dir: #HDA_INPUT or #HDA_OUTPUT
1875 * @tlv: TLV data to be stored, at least 4 elements
1877 * Set (static) TLV data for a virtual master volume using the AMP caps
1878 * obtained from the reference NID.
1879 * The volume range is recalculated as if the max volume is 0dB.
1881 void snd_hda_set_vmaster_tlv(struct hda_codec *codec, hda_nid_t nid, int dir,
1882 unsigned int *tlv)
1884 u32 caps;
1885 int nums, step;
1887 caps = query_amp_caps(codec, nid, dir);
1888 nums = (caps & AC_AMPCAP_NUM_STEPS) >> AC_AMPCAP_NUM_STEPS_SHIFT;
1889 step = (caps & AC_AMPCAP_STEP_SIZE) >> AC_AMPCAP_STEP_SIZE_SHIFT;
1890 step = (step + 1) * 25;
1891 tlv[0] = SNDRV_CTL_TLVT_DB_SCALE;
1892 tlv[1] = 2 * sizeof(unsigned int);
1893 tlv[2] = -nums * step;
1894 tlv[3] = step;
1896 EXPORT_SYMBOL_HDA(snd_hda_set_vmaster_tlv);
1898 /* find a mixer control element with the given name */
1899 static struct snd_kcontrol *
1900 _snd_hda_find_mixer_ctl(struct hda_codec *codec,
1901 const char *name, int idx)
1903 struct snd_ctl_elem_id id;
1904 memset(&id, 0, sizeof(id));
1905 id.iface = SNDRV_CTL_ELEM_IFACE_MIXER;
1906 id.index = idx;
1907 if (snd_BUG_ON(strlen(name) >= sizeof(id.name)))
1908 return NULL;
1909 strcpy(id.name, name);
1910 return snd_ctl_find_id(codec->bus->card, &id);
1914 * snd_hda_find_mixer_ctl - Find a mixer control element with the given name
1915 * @codec: HD-audio codec
1916 * @name: ctl id name string
1918 * Get the control element with the given id string and IFACE_MIXER.
1920 struct snd_kcontrol *snd_hda_find_mixer_ctl(struct hda_codec *codec,
1921 const char *name)
1923 return _snd_hda_find_mixer_ctl(codec, name, 0);
1925 EXPORT_SYMBOL_HDA(snd_hda_find_mixer_ctl);
1927 static int find_empty_mixer_ctl_idx(struct hda_codec *codec, const char *name)
1929 int idx;
1930 for (idx = 0; idx < 16; idx++) { /* 16 ctlrs should be large enough */
1931 if (!_snd_hda_find_mixer_ctl(codec, name, idx))
1932 return idx;
1934 return -EBUSY;
1938 * snd_hda_ctl_add - Add a control element and assign to the codec
1939 * @codec: HD-audio codec
1940 * @nid: corresponding NID (optional)
1941 * @kctl: the control element to assign
1943 * Add the given control element to an array inside the codec instance.
1944 * All control elements belonging to a codec are supposed to be added
1945 * by this function so that a proper clean-up works at the free or
1946 * reconfiguration time.
1948 * If non-zero @nid is passed, the NID is assigned to the control element.
1949 * The assignment is shown in the codec proc file.
1951 * snd_hda_ctl_add() checks the control subdev id field whether
1952 * #HDA_SUBDEV_NID_FLAG bit is set. If set (and @nid is zero), the lower
1953 * bits value is taken as the NID to assign. The #HDA_NID_ITEM_AMP bit
1954 * specifies if kctl->private_value is a HDA amplifier value.
1956 int snd_hda_ctl_add(struct hda_codec *codec, hda_nid_t nid,
1957 struct snd_kcontrol *kctl)
1959 int err;
1960 unsigned short flags = 0;
1961 struct hda_nid_item *item;
1963 if (kctl->id.subdevice & HDA_SUBDEV_AMP_FLAG) {
1964 flags |= HDA_NID_ITEM_AMP;
1965 if (nid == 0)
1966 nid = get_amp_nid_(kctl->private_value);
1968 if ((kctl->id.subdevice & HDA_SUBDEV_NID_FLAG) != 0 && nid == 0)
1969 nid = kctl->id.subdevice & 0xffff;
1970 if (kctl->id.subdevice & (HDA_SUBDEV_NID_FLAG|HDA_SUBDEV_AMP_FLAG))
1971 kctl->id.subdevice = 0;
1972 err = snd_ctl_add(codec->bus->card, kctl);
1973 if (err < 0)
1974 return err;
1975 item = snd_array_new(&codec->mixers);
1976 if (!item)
1977 return -ENOMEM;
1978 item->kctl = kctl;
1979 item->nid = nid;
1980 item->flags = flags;
1981 return 0;
1983 EXPORT_SYMBOL_HDA(snd_hda_ctl_add);
1986 * snd_hda_add_nid - Assign a NID to a control element
1987 * @codec: HD-audio codec
1988 * @nid: corresponding NID (optional)
1989 * @kctl: the control element to assign
1990 * @index: index to kctl
1992 * Add the given control element to an array inside the codec instance.
1993 * This function is used when #snd_hda_ctl_add cannot be used for 1:1
1994 * NID:KCTL mapping - for example "Capture Source" selector.
1996 int snd_hda_add_nid(struct hda_codec *codec, struct snd_kcontrol *kctl,
1997 unsigned int index, hda_nid_t nid)
1999 struct hda_nid_item *item;
2001 if (nid > 0) {
2002 item = snd_array_new(&codec->nids);
2003 if (!item)
2004 return -ENOMEM;
2005 item->kctl = kctl;
2006 item->index = index;
2007 item->nid = nid;
2008 return 0;
2010 printk(KERN_ERR "hda-codec: no NID for mapping control %s:%d:%d\n",
2011 kctl->id.name, kctl->id.index, index);
2012 return -EINVAL;
2014 EXPORT_SYMBOL_HDA(snd_hda_add_nid);
2017 * snd_hda_ctls_clear - Clear all controls assigned to the given codec
2018 * @codec: HD-audio codec
2020 void snd_hda_ctls_clear(struct hda_codec *codec)
2022 int i;
2023 struct hda_nid_item *items = codec->mixers.list;
2024 for (i = 0; i < codec->mixers.used; i++)
2025 snd_ctl_remove(codec->bus->card, items[i].kctl);
2026 snd_array_free(&codec->mixers);
2027 snd_array_free(&codec->nids);
2030 /* pseudo device locking
2031 * toggle card->shutdown to allow/disallow the device access (as a hack)
2033 static int hda_lock_devices(struct snd_card *card)
2035 spin_lock(&card->files_lock);
2036 if (card->shutdown) {
2037 spin_unlock(&card->files_lock);
2038 return -EINVAL;
2040 card->shutdown = 1;
2041 spin_unlock(&card->files_lock);
2042 return 0;
2045 static void hda_unlock_devices(struct snd_card *card)
2047 spin_lock(&card->files_lock);
2048 card->shutdown = 0;
2049 spin_unlock(&card->files_lock);
2053 * snd_hda_codec_reset - Clear all objects assigned to the codec
2054 * @codec: HD-audio codec
2056 * This frees the all PCM and control elements assigned to the codec, and
2057 * clears the caches and restores the pin default configurations.
2059 * When a device is being used, it returns -EBSY. If successfully freed,
2060 * returns zero.
2062 int snd_hda_codec_reset(struct hda_codec *codec)
2064 struct snd_card *card = codec->bus->card;
2065 int i, pcm;
2067 if (hda_lock_devices(card) < 0)
2068 return -EBUSY;
2069 /* check whether the codec isn't used by any mixer or PCM streams */
2070 if (!list_empty(&card->ctl_files)) {
2071 hda_unlock_devices(card);
2072 return -EBUSY;
2074 for (pcm = 0; pcm < codec->num_pcms; pcm++) {
2075 struct hda_pcm *cpcm = &codec->pcm_info[pcm];
2076 if (!cpcm->pcm)
2077 continue;
2078 if (cpcm->pcm->streams[0].substream_opened ||
2079 cpcm->pcm->streams[1].substream_opened) {
2080 hda_unlock_devices(card);
2081 return -EBUSY;
2085 /* OK, let it free */
2087 #ifdef CONFIG_SND_HDA_POWER_SAVE
2088 cancel_delayed_work(&codec->power_work);
2089 flush_workqueue(codec->bus->workq);
2090 #endif
2091 snd_hda_ctls_clear(codec);
2092 /* relase PCMs */
2093 for (i = 0; i < codec->num_pcms; i++) {
2094 if (codec->pcm_info[i].pcm) {
2095 snd_device_free(card, codec->pcm_info[i].pcm);
2096 clear_bit(codec->pcm_info[i].device,
2097 codec->bus->pcm_dev_bits);
2100 if (codec->patch_ops.free)
2101 codec->patch_ops.free(codec);
2102 codec->proc_widget_hook = NULL;
2103 codec->spec = NULL;
2104 free_hda_cache(&codec->amp_cache);
2105 free_hda_cache(&codec->cmd_cache);
2106 init_hda_cache(&codec->amp_cache, sizeof(struct hda_amp_info));
2107 init_hda_cache(&codec->cmd_cache, sizeof(struct hda_cache_head));
2108 /* free only driver_pins so that init_pins + user_pins are restored */
2109 snd_array_free(&codec->driver_pins);
2110 restore_pincfgs(codec);
2111 codec->num_pcms = 0;
2112 codec->pcm_info = NULL;
2113 codec->preset = NULL;
2114 memset(&codec->patch_ops, 0, sizeof(codec->patch_ops));
2115 codec->slave_dig_outs = NULL;
2116 codec->spdif_status_reset = 0;
2117 module_put(codec->owner);
2118 codec->owner = NULL;
2120 /* allow device access again */
2121 hda_unlock_devices(card);
2122 return 0;
2126 * snd_hda_add_vmaster - create a virtual master control and add slaves
2127 * @codec: HD-audio codec
2128 * @name: vmaster control name
2129 * @tlv: TLV data (optional)
2130 * @slaves: slave control names (optional)
2132 * Create a virtual master control with the given name. The TLV data
2133 * must be either NULL or a valid data.
2135 * @slaves is a NULL-terminated array of strings, each of which is a
2136 * slave control name. All controls with these names are assigned to
2137 * the new virtual master control.
2139 * This function returns zero if successful or a negative error code.
2141 int snd_hda_add_vmaster(struct hda_codec *codec, char *name,
2142 unsigned int *tlv, const char * const *slaves)
2144 struct snd_kcontrol *kctl;
2145 const char * const *s;
2146 int err;
2148 for (s = slaves; *s && !snd_hda_find_mixer_ctl(codec, *s); s++)
2150 if (!*s) {
2151 snd_printdd("No slave found for %s\n", name);
2152 return 0;
2154 kctl = snd_ctl_make_virtual_master(name, tlv);
2155 if (!kctl)
2156 return -ENOMEM;
2157 err = snd_hda_ctl_add(codec, 0, kctl);
2158 if (err < 0)
2159 return err;
2161 for (s = slaves; *s; s++) {
2162 struct snd_kcontrol *sctl;
2163 int i = 0;
2164 for (;;) {
2165 sctl = _snd_hda_find_mixer_ctl(codec, *s, i);
2166 if (!sctl) {
2167 if (!i)
2168 snd_printdd("Cannot find slave %s, "
2169 "skipped\n", *s);
2170 break;
2172 err = snd_ctl_add_slave(kctl, sctl);
2173 if (err < 0)
2174 return err;
2175 i++;
2178 return 0;
2180 EXPORT_SYMBOL_HDA(snd_hda_add_vmaster);
2183 * snd_hda_mixer_amp_switch_info - Info callback for a standard AMP mixer switch
2185 * The control element is supposed to have the private_value field
2186 * set up via HDA_COMPOSE_AMP_VAL*() or related macros.
2188 int snd_hda_mixer_amp_switch_info(struct snd_kcontrol *kcontrol,
2189 struct snd_ctl_elem_info *uinfo)
2191 int chs = get_amp_channels(kcontrol);
2193 uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
2194 uinfo->count = chs == 3 ? 2 : 1;
2195 uinfo->value.integer.min = 0;
2196 uinfo->value.integer.max = 1;
2197 return 0;
2199 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_switch_info);
2202 * snd_hda_mixer_amp_switch_get - Get callback for a standard AMP mixer switch
2204 * The control element is supposed to have the private_value field
2205 * set up via HDA_COMPOSE_AMP_VAL*() or related macros.
2207 int snd_hda_mixer_amp_switch_get(struct snd_kcontrol *kcontrol,
2208 struct snd_ctl_elem_value *ucontrol)
2210 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2211 hda_nid_t nid = get_amp_nid(kcontrol);
2212 int chs = get_amp_channels(kcontrol);
2213 int dir = get_amp_direction(kcontrol);
2214 int idx = get_amp_index(kcontrol);
2215 long *valp = ucontrol->value.integer.value;
2217 if (chs & 1)
2218 *valp++ = (snd_hda_codec_amp_read(codec, nid, 0, dir, idx) &
2219 HDA_AMP_MUTE) ? 0 : 1;
2220 if (chs & 2)
2221 *valp = (snd_hda_codec_amp_read(codec, nid, 1, dir, idx) &
2222 HDA_AMP_MUTE) ? 0 : 1;
2223 return 0;
2225 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_switch_get);
2228 * snd_hda_mixer_amp_switch_put - Put callback for a standard AMP mixer switch
2230 * The control element is supposed to have the private_value field
2231 * set up via HDA_COMPOSE_AMP_VAL*() or related macros.
2233 int snd_hda_mixer_amp_switch_put(struct snd_kcontrol *kcontrol,
2234 struct snd_ctl_elem_value *ucontrol)
2236 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2237 hda_nid_t nid = get_amp_nid(kcontrol);
2238 int chs = get_amp_channels(kcontrol);
2239 int dir = get_amp_direction(kcontrol);
2240 int idx = get_amp_index(kcontrol);
2241 long *valp = ucontrol->value.integer.value;
2242 int change = 0;
2244 snd_hda_power_up(codec);
2245 if (chs & 1) {
2246 change = snd_hda_codec_amp_update(codec, nid, 0, dir, idx,
2247 HDA_AMP_MUTE,
2248 *valp ? 0 : HDA_AMP_MUTE);
2249 valp++;
2251 if (chs & 2)
2252 change |= snd_hda_codec_amp_update(codec, nid, 1, dir, idx,
2253 HDA_AMP_MUTE,
2254 *valp ? 0 : HDA_AMP_MUTE);
2255 hda_call_check_power_status(codec, nid);
2256 snd_hda_power_down(codec);
2257 return change;
2259 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_switch_put);
2261 #ifdef CONFIG_SND_HDA_INPUT_BEEP
2263 * snd_hda_mixer_amp_switch_put_beep - Put callback for a beep AMP switch
2265 * This function calls snd_hda_enable_beep_device(), which behaves differently
2266 * depending on beep_mode option.
2268 int snd_hda_mixer_amp_switch_put_beep(struct snd_kcontrol *kcontrol,
2269 struct snd_ctl_elem_value *ucontrol)
2271 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2272 long *valp = ucontrol->value.integer.value;
2274 snd_hda_enable_beep_device(codec, *valp);
2275 return snd_hda_mixer_amp_switch_put(kcontrol, ucontrol);
2277 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_switch_put_beep);
2278 #endif /* CONFIG_SND_HDA_INPUT_BEEP */
2281 * bound volume controls
2283 * bind multiple volumes (# indices, from 0)
2286 #define AMP_VAL_IDX_SHIFT 19
2287 #define AMP_VAL_IDX_MASK (0x0f<<19)
2290 * snd_hda_mixer_bind_switch_get - Get callback for a bound volume control
2292 * The control element is supposed to have the private_value field
2293 * set up via HDA_BIND_MUTE*() macros.
2295 int snd_hda_mixer_bind_switch_get(struct snd_kcontrol *kcontrol,
2296 struct snd_ctl_elem_value *ucontrol)
2298 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2299 unsigned long pval;
2300 int err;
2302 mutex_lock(&codec->control_mutex);
2303 pval = kcontrol->private_value;
2304 kcontrol->private_value = pval & ~AMP_VAL_IDX_MASK; /* index 0 */
2305 err = snd_hda_mixer_amp_switch_get(kcontrol, ucontrol);
2306 kcontrol->private_value = pval;
2307 mutex_unlock(&codec->control_mutex);
2308 return err;
2310 EXPORT_SYMBOL_HDA(snd_hda_mixer_bind_switch_get);
2313 * snd_hda_mixer_bind_switch_put - Put callback for a bound volume control
2315 * The control element is supposed to have the private_value field
2316 * set up via HDA_BIND_MUTE*() macros.
2318 int snd_hda_mixer_bind_switch_put(struct snd_kcontrol *kcontrol,
2319 struct snd_ctl_elem_value *ucontrol)
2321 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2322 unsigned long pval;
2323 int i, indices, err = 0, change = 0;
2325 mutex_lock(&codec->control_mutex);
2326 pval = kcontrol->private_value;
2327 indices = (pval & AMP_VAL_IDX_MASK) >> AMP_VAL_IDX_SHIFT;
2328 for (i = 0; i < indices; i++) {
2329 kcontrol->private_value = (pval & ~AMP_VAL_IDX_MASK) |
2330 (i << AMP_VAL_IDX_SHIFT);
2331 err = snd_hda_mixer_amp_switch_put(kcontrol, ucontrol);
2332 if (err < 0)
2333 break;
2334 change |= err;
2336 kcontrol->private_value = pval;
2337 mutex_unlock(&codec->control_mutex);
2338 return err < 0 ? err : change;
2340 EXPORT_SYMBOL_HDA(snd_hda_mixer_bind_switch_put);
2343 * snd_hda_mixer_bind_ctls_info - Info callback for a generic bound control
2345 * The control element is supposed to have the private_value field
2346 * set up via HDA_BIND_VOL() or HDA_BIND_SW() macros.
2348 int snd_hda_mixer_bind_ctls_info(struct snd_kcontrol *kcontrol,
2349 struct snd_ctl_elem_info *uinfo)
2351 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2352 struct hda_bind_ctls *c;
2353 int err;
2355 mutex_lock(&codec->control_mutex);
2356 c = (struct hda_bind_ctls *)kcontrol->private_value;
2357 kcontrol->private_value = *c->values;
2358 err = c->ops->info(kcontrol, uinfo);
2359 kcontrol->private_value = (long)c;
2360 mutex_unlock(&codec->control_mutex);
2361 return err;
2363 EXPORT_SYMBOL_HDA(snd_hda_mixer_bind_ctls_info);
2366 * snd_hda_mixer_bind_ctls_get - Get callback for a generic bound control
2368 * The control element is supposed to have the private_value field
2369 * set up via HDA_BIND_VOL() or HDA_BIND_SW() macros.
2371 int snd_hda_mixer_bind_ctls_get(struct snd_kcontrol *kcontrol,
2372 struct snd_ctl_elem_value *ucontrol)
2374 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2375 struct hda_bind_ctls *c;
2376 int err;
2378 mutex_lock(&codec->control_mutex);
2379 c = (struct hda_bind_ctls *)kcontrol->private_value;
2380 kcontrol->private_value = *c->values;
2381 err = c->ops->get(kcontrol, ucontrol);
2382 kcontrol->private_value = (long)c;
2383 mutex_unlock(&codec->control_mutex);
2384 return err;
2386 EXPORT_SYMBOL_HDA(snd_hda_mixer_bind_ctls_get);
2389 * snd_hda_mixer_bind_ctls_put - Put callback for a generic bound control
2391 * The control element is supposed to have the private_value field
2392 * set up via HDA_BIND_VOL() or HDA_BIND_SW() macros.
2394 int snd_hda_mixer_bind_ctls_put(struct snd_kcontrol *kcontrol,
2395 struct snd_ctl_elem_value *ucontrol)
2397 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2398 struct hda_bind_ctls *c;
2399 unsigned long *vals;
2400 int err = 0, change = 0;
2402 mutex_lock(&codec->control_mutex);
2403 c = (struct hda_bind_ctls *)kcontrol->private_value;
2404 for (vals = c->values; *vals; vals++) {
2405 kcontrol->private_value = *vals;
2406 err = c->ops->put(kcontrol, ucontrol);
2407 if (err < 0)
2408 break;
2409 change |= err;
2411 kcontrol->private_value = (long)c;
2412 mutex_unlock(&codec->control_mutex);
2413 return err < 0 ? err : change;
2415 EXPORT_SYMBOL_HDA(snd_hda_mixer_bind_ctls_put);
2418 * snd_hda_mixer_bind_tlv - TLV callback for a generic bound control
2420 * The control element is supposed to have the private_value field
2421 * set up via HDA_BIND_VOL() macro.
2423 int snd_hda_mixer_bind_tlv(struct snd_kcontrol *kcontrol, int op_flag,
2424 unsigned int size, unsigned int __user *tlv)
2426 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2427 struct hda_bind_ctls *c;
2428 int err;
2430 mutex_lock(&codec->control_mutex);
2431 c = (struct hda_bind_ctls *)kcontrol->private_value;
2432 kcontrol->private_value = *c->values;
2433 err = c->ops->tlv(kcontrol, op_flag, size, tlv);
2434 kcontrol->private_value = (long)c;
2435 mutex_unlock(&codec->control_mutex);
2436 return err;
2438 EXPORT_SYMBOL_HDA(snd_hda_mixer_bind_tlv);
2440 struct hda_ctl_ops snd_hda_bind_vol = {
2441 .info = snd_hda_mixer_amp_volume_info,
2442 .get = snd_hda_mixer_amp_volume_get,
2443 .put = snd_hda_mixer_amp_volume_put,
2444 .tlv = snd_hda_mixer_amp_tlv
2446 EXPORT_SYMBOL_HDA(snd_hda_bind_vol);
2448 struct hda_ctl_ops snd_hda_bind_sw = {
2449 .info = snd_hda_mixer_amp_switch_info,
2450 .get = snd_hda_mixer_amp_switch_get,
2451 .put = snd_hda_mixer_amp_switch_put,
2452 .tlv = snd_hda_mixer_amp_tlv
2454 EXPORT_SYMBOL_HDA(snd_hda_bind_sw);
2457 * SPDIF out controls
2460 static int snd_hda_spdif_mask_info(struct snd_kcontrol *kcontrol,
2461 struct snd_ctl_elem_info *uinfo)
2463 uinfo->type = SNDRV_CTL_ELEM_TYPE_IEC958;
2464 uinfo->count = 1;
2465 return 0;
2468 static int snd_hda_spdif_cmask_get(struct snd_kcontrol *kcontrol,
2469 struct snd_ctl_elem_value *ucontrol)
2471 ucontrol->value.iec958.status[0] = IEC958_AES0_PROFESSIONAL |
2472 IEC958_AES0_NONAUDIO |
2473 IEC958_AES0_CON_EMPHASIS_5015 |
2474 IEC958_AES0_CON_NOT_COPYRIGHT;
2475 ucontrol->value.iec958.status[1] = IEC958_AES1_CON_CATEGORY |
2476 IEC958_AES1_CON_ORIGINAL;
2477 return 0;
2480 static int snd_hda_spdif_pmask_get(struct snd_kcontrol *kcontrol,
2481 struct snd_ctl_elem_value *ucontrol)
2483 ucontrol->value.iec958.status[0] = IEC958_AES0_PROFESSIONAL |
2484 IEC958_AES0_NONAUDIO |
2485 IEC958_AES0_PRO_EMPHASIS_5015;
2486 return 0;
2489 static int snd_hda_spdif_default_get(struct snd_kcontrol *kcontrol,
2490 struct snd_ctl_elem_value *ucontrol)
2492 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2494 ucontrol->value.iec958.status[0] = codec->spdif_status & 0xff;
2495 ucontrol->value.iec958.status[1] = (codec->spdif_status >> 8) & 0xff;
2496 ucontrol->value.iec958.status[2] = (codec->spdif_status >> 16) & 0xff;
2497 ucontrol->value.iec958.status[3] = (codec->spdif_status >> 24) & 0xff;
2499 return 0;
2502 /* convert from SPDIF status bits to HDA SPDIF bits
2503 * bit 0 (DigEn) is always set zero (to be filled later)
2505 static unsigned short convert_from_spdif_status(unsigned int sbits)
2507 unsigned short val = 0;
2509 if (sbits & IEC958_AES0_PROFESSIONAL)
2510 val |= AC_DIG1_PROFESSIONAL;
2511 if (sbits & IEC958_AES0_NONAUDIO)
2512 val |= AC_DIG1_NONAUDIO;
2513 if (sbits & IEC958_AES0_PROFESSIONAL) {
2514 if ((sbits & IEC958_AES0_PRO_EMPHASIS) ==
2515 IEC958_AES0_PRO_EMPHASIS_5015)
2516 val |= AC_DIG1_EMPHASIS;
2517 } else {
2518 if ((sbits & IEC958_AES0_CON_EMPHASIS) ==
2519 IEC958_AES0_CON_EMPHASIS_5015)
2520 val |= AC_DIG1_EMPHASIS;
2521 if (!(sbits & IEC958_AES0_CON_NOT_COPYRIGHT))
2522 val |= AC_DIG1_COPYRIGHT;
2523 if (sbits & (IEC958_AES1_CON_ORIGINAL << 8))
2524 val |= AC_DIG1_LEVEL;
2525 val |= sbits & (IEC958_AES1_CON_CATEGORY << 8);
2527 return val;
2530 /* convert to SPDIF status bits from HDA SPDIF bits
2532 static unsigned int convert_to_spdif_status(unsigned short val)
2534 unsigned int sbits = 0;
2536 if (val & AC_DIG1_NONAUDIO)
2537 sbits |= IEC958_AES0_NONAUDIO;
2538 if (val & AC_DIG1_PROFESSIONAL)
2539 sbits |= IEC958_AES0_PROFESSIONAL;
2540 if (sbits & IEC958_AES0_PROFESSIONAL) {
2541 if (sbits & AC_DIG1_EMPHASIS)
2542 sbits |= IEC958_AES0_PRO_EMPHASIS_5015;
2543 } else {
2544 if (val & AC_DIG1_EMPHASIS)
2545 sbits |= IEC958_AES0_CON_EMPHASIS_5015;
2546 if (!(val & AC_DIG1_COPYRIGHT))
2547 sbits |= IEC958_AES0_CON_NOT_COPYRIGHT;
2548 if (val & AC_DIG1_LEVEL)
2549 sbits |= (IEC958_AES1_CON_ORIGINAL << 8);
2550 sbits |= val & (0x7f << 8);
2552 return sbits;
2555 /* set digital convert verbs both for the given NID and its slaves */
2556 static void set_dig_out(struct hda_codec *codec, hda_nid_t nid,
2557 int verb, int val)
2559 hda_nid_t *d;
2561 snd_hda_codec_write_cache(codec, nid, 0, verb, val);
2562 d = codec->slave_dig_outs;
2563 if (!d)
2564 return;
2565 for (; *d; d++)
2566 snd_hda_codec_write_cache(codec, *d, 0, verb, val);
2569 static inline void set_dig_out_convert(struct hda_codec *codec, hda_nid_t nid,
2570 int dig1, int dig2)
2572 if (dig1 != -1)
2573 set_dig_out(codec, nid, AC_VERB_SET_DIGI_CONVERT_1, dig1);
2574 if (dig2 != -1)
2575 set_dig_out(codec, nid, AC_VERB_SET_DIGI_CONVERT_2, dig2);
2578 static int snd_hda_spdif_default_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 short val;
2584 int change;
2586 mutex_lock(&codec->spdif_mutex);
2587 codec->spdif_status = ucontrol->value.iec958.status[0] |
2588 ((unsigned int)ucontrol->value.iec958.status[1] << 8) |
2589 ((unsigned int)ucontrol->value.iec958.status[2] << 16) |
2590 ((unsigned int)ucontrol->value.iec958.status[3] << 24);
2591 val = convert_from_spdif_status(codec->spdif_status);
2592 val |= codec->spdif_ctls & 1;
2593 change = codec->spdif_ctls != val;
2594 codec->spdif_ctls = val;
2596 if (change)
2597 set_dig_out_convert(codec, nid, val & 0xff, (val >> 8) & 0xff);
2599 mutex_unlock(&codec->spdif_mutex);
2600 return change;
2603 #define snd_hda_spdif_out_switch_info snd_ctl_boolean_mono_info
2605 static int snd_hda_spdif_out_switch_get(struct snd_kcontrol *kcontrol,
2606 struct snd_ctl_elem_value *ucontrol)
2608 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2610 ucontrol->value.integer.value[0] = codec->spdif_ctls & AC_DIG1_ENABLE;
2611 return 0;
2614 static int snd_hda_spdif_out_switch_put(struct snd_kcontrol *kcontrol,
2615 struct snd_ctl_elem_value *ucontrol)
2617 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2618 hda_nid_t nid = kcontrol->private_value;
2619 unsigned short val;
2620 int change;
2622 mutex_lock(&codec->spdif_mutex);
2623 val = codec->spdif_ctls & ~AC_DIG1_ENABLE;
2624 if (ucontrol->value.integer.value[0])
2625 val |= AC_DIG1_ENABLE;
2626 change = codec->spdif_ctls != val;
2627 if (change) {
2628 codec->spdif_ctls = val;
2629 set_dig_out_convert(codec, nid, val & 0xff, -1);
2630 /* unmute amp switch (if any) */
2631 if ((get_wcaps(codec, nid) & AC_WCAP_OUT_AMP) &&
2632 (val & AC_DIG1_ENABLE))
2633 snd_hda_codec_amp_stereo(codec, nid, HDA_OUTPUT, 0,
2634 HDA_AMP_MUTE, 0);
2636 mutex_unlock(&codec->spdif_mutex);
2637 return change;
2640 static struct snd_kcontrol_new dig_mixes[] = {
2642 .access = SNDRV_CTL_ELEM_ACCESS_READ,
2643 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2644 .name = SNDRV_CTL_NAME_IEC958("", PLAYBACK, CON_MASK),
2645 .info = snd_hda_spdif_mask_info,
2646 .get = snd_hda_spdif_cmask_get,
2649 .access = SNDRV_CTL_ELEM_ACCESS_READ,
2650 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2651 .name = SNDRV_CTL_NAME_IEC958("", PLAYBACK, PRO_MASK),
2652 .info = snd_hda_spdif_mask_info,
2653 .get = snd_hda_spdif_pmask_get,
2656 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2657 .name = SNDRV_CTL_NAME_IEC958("", PLAYBACK, DEFAULT),
2658 .info = snd_hda_spdif_mask_info,
2659 .get = snd_hda_spdif_default_get,
2660 .put = snd_hda_spdif_default_put,
2663 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2664 .name = SNDRV_CTL_NAME_IEC958("", PLAYBACK, SWITCH),
2665 .info = snd_hda_spdif_out_switch_info,
2666 .get = snd_hda_spdif_out_switch_get,
2667 .put = snd_hda_spdif_out_switch_put,
2669 { } /* end */
2673 * snd_hda_create_spdif_out_ctls - create Output SPDIF-related controls
2674 * @codec: the HDA codec
2675 * @nid: audio out widget NID
2677 * Creates controls related with the SPDIF output.
2678 * Called from each patch supporting the SPDIF out.
2680 * Returns 0 if successful, or a negative error code.
2682 int snd_hda_create_spdif_out_ctls(struct hda_codec *codec, hda_nid_t nid)
2684 int err;
2685 struct snd_kcontrol *kctl;
2686 struct snd_kcontrol_new *dig_mix;
2687 int idx;
2689 idx = find_empty_mixer_ctl_idx(codec, "IEC958 Playback Switch");
2690 if (idx < 0) {
2691 printk(KERN_ERR "hda_codec: too many IEC958 outputs\n");
2692 return -EBUSY;
2694 for (dig_mix = dig_mixes; dig_mix->name; dig_mix++) {
2695 kctl = snd_ctl_new1(dig_mix, codec);
2696 if (!kctl)
2697 return -ENOMEM;
2698 kctl->id.index = idx;
2699 kctl->private_value = nid;
2700 err = snd_hda_ctl_add(codec, nid, kctl);
2701 if (err < 0)
2702 return err;
2704 codec->spdif_ctls =
2705 snd_hda_codec_read(codec, nid, 0,
2706 AC_VERB_GET_DIGI_CONVERT_1, 0);
2707 codec->spdif_status = convert_to_spdif_status(codec->spdif_ctls);
2708 return 0;
2710 EXPORT_SYMBOL_HDA(snd_hda_create_spdif_out_ctls);
2713 * SPDIF sharing with analog output
2715 static int spdif_share_sw_get(struct snd_kcontrol *kcontrol,
2716 struct snd_ctl_elem_value *ucontrol)
2718 struct hda_multi_out *mout = snd_kcontrol_chip(kcontrol);
2719 ucontrol->value.integer.value[0] = mout->share_spdif;
2720 return 0;
2723 static int spdif_share_sw_put(struct snd_kcontrol *kcontrol,
2724 struct snd_ctl_elem_value *ucontrol)
2726 struct hda_multi_out *mout = snd_kcontrol_chip(kcontrol);
2727 mout->share_spdif = !!ucontrol->value.integer.value[0];
2728 return 0;
2731 static struct snd_kcontrol_new spdif_share_sw = {
2732 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2733 .name = "IEC958 Default PCM Playback Switch",
2734 .info = snd_ctl_boolean_mono_info,
2735 .get = spdif_share_sw_get,
2736 .put = spdif_share_sw_put,
2740 * snd_hda_create_spdif_share_sw - create Default PCM switch
2741 * @codec: the HDA codec
2742 * @mout: multi-out instance
2744 int snd_hda_create_spdif_share_sw(struct hda_codec *codec,
2745 struct hda_multi_out *mout)
2747 if (!mout->dig_out_nid)
2748 return 0;
2749 /* ATTENTION: here mout is passed as private_data, instead of codec */
2750 return snd_hda_ctl_add(codec, mout->dig_out_nid,
2751 snd_ctl_new1(&spdif_share_sw, mout));
2753 EXPORT_SYMBOL_HDA(snd_hda_create_spdif_share_sw);
2756 * SPDIF input
2759 #define snd_hda_spdif_in_switch_info snd_hda_spdif_out_switch_info
2761 static int snd_hda_spdif_in_switch_get(struct snd_kcontrol *kcontrol,
2762 struct snd_ctl_elem_value *ucontrol)
2764 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2766 ucontrol->value.integer.value[0] = codec->spdif_in_enable;
2767 return 0;
2770 static int snd_hda_spdif_in_switch_put(struct snd_kcontrol *kcontrol,
2771 struct snd_ctl_elem_value *ucontrol)
2773 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2774 hda_nid_t nid = kcontrol->private_value;
2775 unsigned int val = !!ucontrol->value.integer.value[0];
2776 int change;
2778 mutex_lock(&codec->spdif_mutex);
2779 change = codec->spdif_in_enable != val;
2780 if (change) {
2781 codec->spdif_in_enable = val;
2782 snd_hda_codec_write_cache(codec, nid, 0,
2783 AC_VERB_SET_DIGI_CONVERT_1, val);
2785 mutex_unlock(&codec->spdif_mutex);
2786 return change;
2789 static int snd_hda_spdif_in_status_get(struct snd_kcontrol *kcontrol,
2790 struct snd_ctl_elem_value *ucontrol)
2792 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2793 hda_nid_t nid = kcontrol->private_value;
2794 unsigned short val;
2795 unsigned int sbits;
2797 val = snd_hda_codec_read(codec, nid, 0, AC_VERB_GET_DIGI_CONVERT_1, 0);
2798 sbits = convert_to_spdif_status(val);
2799 ucontrol->value.iec958.status[0] = sbits;
2800 ucontrol->value.iec958.status[1] = sbits >> 8;
2801 ucontrol->value.iec958.status[2] = sbits >> 16;
2802 ucontrol->value.iec958.status[3] = sbits >> 24;
2803 return 0;
2806 static struct snd_kcontrol_new dig_in_ctls[] = {
2808 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2809 .name = SNDRV_CTL_NAME_IEC958("", CAPTURE, SWITCH),
2810 .info = snd_hda_spdif_in_switch_info,
2811 .get = snd_hda_spdif_in_switch_get,
2812 .put = snd_hda_spdif_in_switch_put,
2815 .access = SNDRV_CTL_ELEM_ACCESS_READ,
2816 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2817 .name = SNDRV_CTL_NAME_IEC958("", CAPTURE, DEFAULT),
2818 .info = snd_hda_spdif_mask_info,
2819 .get = snd_hda_spdif_in_status_get,
2821 { } /* end */
2825 * snd_hda_create_spdif_in_ctls - create Input SPDIF-related controls
2826 * @codec: the HDA codec
2827 * @nid: audio in widget NID
2829 * Creates controls related with the SPDIF input.
2830 * Called from each patch supporting the SPDIF in.
2832 * Returns 0 if successful, or a negative error code.
2834 int snd_hda_create_spdif_in_ctls(struct hda_codec *codec, hda_nid_t nid)
2836 int err;
2837 struct snd_kcontrol *kctl;
2838 struct snd_kcontrol_new *dig_mix;
2839 int idx;
2841 idx = find_empty_mixer_ctl_idx(codec, "IEC958 Capture Switch");
2842 if (idx < 0) {
2843 printk(KERN_ERR "hda_codec: too many IEC958 inputs\n");
2844 return -EBUSY;
2846 for (dig_mix = dig_in_ctls; dig_mix->name; dig_mix++) {
2847 kctl = snd_ctl_new1(dig_mix, codec);
2848 if (!kctl)
2849 return -ENOMEM;
2850 kctl->private_value = nid;
2851 err = snd_hda_ctl_add(codec, nid, kctl);
2852 if (err < 0)
2853 return err;
2855 codec->spdif_in_enable =
2856 snd_hda_codec_read(codec, nid, 0,
2857 AC_VERB_GET_DIGI_CONVERT_1, 0) &
2858 AC_DIG1_ENABLE;
2859 return 0;
2861 EXPORT_SYMBOL_HDA(snd_hda_create_spdif_in_ctls);
2863 #ifdef SND_HDA_NEEDS_RESUME
2865 * command cache
2868 /* build a 32bit cache key with the widget id and the command parameter */
2869 #define build_cmd_cache_key(nid, verb) ((verb << 8) | nid)
2870 #define get_cmd_cache_nid(key) ((key) & 0xff)
2871 #define get_cmd_cache_cmd(key) (((key) >> 8) & 0xffff)
2874 * snd_hda_codec_write_cache - send a single command with caching
2875 * @codec: the HDA codec
2876 * @nid: NID to send the command
2877 * @direct: direct flag
2878 * @verb: the verb to send
2879 * @parm: the parameter for the verb
2881 * Send a single command without waiting for response.
2883 * Returns 0 if successful, or a negative error code.
2885 int snd_hda_codec_write_cache(struct hda_codec *codec, hda_nid_t nid,
2886 int direct, unsigned int verb, unsigned int parm)
2888 int err = snd_hda_codec_write(codec, nid, direct, verb, parm);
2889 struct hda_cache_head *c;
2890 u32 key;
2892 if (err < 0)
2893 return err;
2894 /* parm may contain the verb stuff for get/set amp */
2895 verb = verb | (parm >> 8);
2896 parm &= 0xff;
2897 key = build_cmd_cache_key(nid, verb);
2898 mutex_lock(&codec->bus->cmd_mutex);
2899 c = get_alloc_hash(&codec->cmd_cache, key);
2900 if (c)
2901 c->val = parm;
2902 mutex_unlock(&codec->bus->cmd_mutex);
2903 return 0;
2905 EXPORT_SYMBOL_HDA(snd_hda_codec_write_cache);
2908 * snd_hda_codec_update_cache - check cache and write the cmd only when needed
2909 * @codec: the HDA codec
2910 * @nid: NID to send the command
2911 * @direct: direct flag
2912 * @verb: the verb to send
2913 * @parm: the parameter for the verb
2915 * This function works like snd_hda_codec_write_cache(), but it doesn't send
2916 * command if the parameter is already identical with the cached value.
2917 * If not, it sends the command and refreshes the cache.
2919 * Returns 0 if successful, or a negative error code.
2921 int snd_hda_codec_update_cache(struct hda_codec *codec, hda_nid_t nid,
2922 int direct, unsigned int verb, unsigned int parm)
2924 struct hda_cache_head *c;
2925 u32 key;
2927 /* parm may contain the verb stuff for get/set amp */
2928 verb = verb | (parm >> 8);
2929 parm &= 0xff;
2930 key = build_cmd_cache_key(nid, verb);
2931 mutex_lock(&codec->bus->cmd_mutex);
2932 c = get_hash(&codec->cmd_cache, key);
2933 if (c && c->val == parm) {
2934 mutex_unlock(&codec->bus->cmd_mutex);
2935 return 0;
2937 mutex_unlock(&codec->bus->cmd_mutex);
2938 return snd_hda_codec_write_cache(codec, nid, direct, verb, parm);
2940 EXPORT_SYMBOL_HDA(snd_hda_codec_update_cache);
2943 * snd_hda_codec_resume_cache - Resume the all commands from the cache
2944 * @codec: HD-audio codec
2946 * Execute all verbs recorded in the command caches to resume.
2948 void snd_hda_codec_resume_cache(struct hda_codec *codec)
2950 struct hda_cache_head *buffer = codec->cmd_cache.buf.list;
2951 int i;
2953 for (i = 0; i < codec->cmd_cache.buf.used; i++, buffer++) {
2954 u32 key = buffer->key;
2955 if (!key)
2956 continue;
2957 snd_hda_codec_write(codec, get_cmd_cache_nid(key), 0,
2958 get_cmd_cache_cmd(key), buffer->val);
2961 EXPORT_SYMBOL_HDA(snd_hda_codec_resume_cache);
2964 * snd_hda_sequence_write_cache - sequence writes with caching
2965 * @codec: the HDA codec
2966 * @seq: VERB array to send
2968 * Send the commands sequentially from the given array.
2969 * Thte commands are recorded on cache for power-save and resume.
2970 * The array must be terminated with NID=0.
2972 void snd_hda_sequence_write_cache(struct hda_codec *codec,
2973 const struct hda_verb *seq)
2975 for (; seq->nid; seq++)
2976 snd_hda_codec_write_cache(codec, seq->nid, 0, seq->verb,
2977 seq->param);
2979 EXPORT_SYMBOL_HDA(snd_hda_sequence_write_cache);
2980 #endif /* SND_HDA_NEEDS_RESUME */
2983 * set power state of the codec
2985 static void hda_set_power_state(struct hda_codec *codec, hda_nid_t fg,
2986 unsigned int power_state)
2988 hda_nid_t nid;
2989 int i;
2991 /* this delay seems necessary to avoid click noise at power-down */
2992 if (power_state == AC_PWRST_D3)
2993 msleep(100);
2994 snd_hda_codec_read(codec, fg, 0, AC_VERB_SET_POWER_STATE,
2995 power_state);
2996 /* partial workaround for "azx_get_response timeout" */
2997 if (power_state == AC_PWRST_D0 &&
2998 (codec->vendor_id & 0xffff0000) == 0x14f10000)
2999 msleep(10);
3001 nid = codec->start_nid;
3002 for (i = 0; i < codec->num_nodes; i++, nid++) {
3003 unsigned int wcaps = get_wcaps(codec, nid);
3004 if (wcaps & AC_WCAP_POWER) {
3005 unsigned int wid_type = get_wcaps_type(wcaps);
3006 if (power_state == AC_PWRST_D3 &&
3007 wid_type == AC_WID_PIN) {
3008 unsigned int pincap;
3010 * don't power down the widget if it controls
3011 * eapd and EAPD_BTLENABLE is set.
3013 pincap = snd_hda_query_pin_caps(codec, nid);
3014 if (pincap & AC_PINCAP_EAPD) {
3015 int eapd = snd_hda_codec_read(codec,
3016 nid, 0,
3017 AC_VERB_GET_EAPD_BTLENABLE, 0);
3018 eapd &= 0x02;
3019 if (eapd)
3020 continue;
3023 snd_hda_codec_write(codec, nid, 0,
3024 AC_VERB_SET_POWER_STATE,
3025 power_state);
3029 if (power_state == AC_PWRST_D0) {
3030 unsigned long end_time;
3031 int state;
3032 /* wait until the codec reachs to D0 */
3033 end_time = jiffies + msecs_to_jiffies(500);
3034 do {
3035 state = snd_hda_codec_read(codec, fg, 0,
3036 AC_VERB_GET_POWER_STATE, 0);
3037 if (state == power_state)
3038 break;
3039 msleep(1);
3040 } while (time_after_eq(end_time, jiffies));
3044 #ifdef CONFIG_SND_HDA_HWDEP
3045 /* execute additional init verbs */
3046 static void hda_exec_init_verbs(struct hda_codec *codec)
3048 if (codec->init_verbs.list)
3049 snd_hda_sequence_write(codec, codec->init_verbs.list);
3051 #else
3052 static inline void hda_exec_init_verbs(struct hda_codec *codec) {}
3053 #endif
3055 #ifdef SND_HDA_NEEDS_RESUME
3057 * call suspend and power-down; used both from PM and power-save
3059 static void hda_call_codec_suspend(struct hda_codec *codec)
3061 if (codec->patch_ops.suspend)
3062 codec->patch_ops.suspend(codec, PMSG_SUSPEND);
3063 hda_cleanup_all_streams(codec);
3064 hda_set_power_state(codec,
3065 codec->afg ? codec->afg : codec->mfg,
3066 AC_PWRST_D3);
3067 #ifdef CONFIG_SND_HDA_POWER_SAVE
3068 snd_hda_update_power_acct(codec);
3069 cancel_delayed_work(&codec->power_work);
3070 codec->power_on = 0;
3071 codec->power_transition = 0;
3072 codec->power_jiffies = jiffies;
3073 #endif
3077 * kick up codec; used both from PM and power-save
3079 static void hda_call_codec_resume(struct hda_codec *codec)
3081 hda_set_power_state(codec,
3082 codec->afg ? codec->afg : codec->mfg,
3083 AC_PWRST_D0);
3084 restore_pincfgs(codec); /* restore all current pin configs */
3085 restore_shutup_pins(codec);
3086 hda_exec_init_verbs(codec);
3087 if (codec->patch_ops.resume)
3088 codec->patch_ops.resume(codec);
3089 else {
3090 if (codec->patch_ops.init)
3091 codec->patch_ops.init(codec);
3092 snd_hda_codec_resume_amp(codec);
3093 snd_hda_codec_resume_cache(codec);
3096 #endif /* SND_HDA_NEEDS_RESUME */
3100 * snd_hda_build_controls - build mixer controls
3101 * @bus: the BUS
3103 * Creates mixer controls for each codec included in the bus.
3105 * Returns 0 if successful, otherwise a negative error code.
3107 int /*__devinit*/ snd_hda_build_controls(struct hda_bus *bus)
3109 struct hda_codec *codec;
3111 list_for_each_entry(codec, &bus->codec_list, list) {
3112 int err = snd_hda_codec_build_controls(codec);
3113 if (err < 0) {
3114 printk(KERN_ERR "hda_codec: cannot build controls "
3115 "for #%d (error %d)\n", codec->addr, err);
3116 err = snd_hda_codec_reset(codec);
3117 if (err < 0) {
3118 printk(KERN_ERR
3119 "hda_codec: cannot revert codec\n");
3120 return err;
3124 return 0;
3126 EXPORT_SYMBOL_HDA(snd_hda_build_controls);
3128 int snd_hda_codec_build_controls(struct hda_codec *codec)
3130 int err = 0;
3131 hda_exec_init_verbs(codec);
3132 /* continue to initialize... */
3133 if (codec->patch_ops.init)
3134 err = codec->patch_ops.init(codec);
3135 if (!err && codec->patch_ops.build_controls)
3136 err = codec->patch_ops.build_controls(codec);
3137 if (err < 0)
3138 return err;
3139 return 0;
3143 * stream formats
3145 struct hda_rate_tbl {
3146 unsigned int hz;
3147 unsigned int alsa_bits;
3148 unsigned int hda_fmt;
3151 /* rate = base * mult / div */
3152 #define HDA_RATE(base, mult, div) \
3153 (AC_FMT_BASE_##base##K | (((mult) - 1) << AC_FMT_MULT_SHIFT) | \
3154 (((div) - 1) << AC_FMT_DIV_SHIFT))
3156 static struct hda_rate_tbl rate_bits[] = {
3157 /* rate in Hz, ALSA rate bitmask, HDA format value */
3159 /* autodetected value used in snd_hda_query_supported_pcm */
3160 { 8000, SNDRV_PCM_RATE_8000, HDA_RATE(48, 1, 6) },
3161 { 11025, SNDRV_PCM_RATE_11025, HDA_RATE(44, 1, 4) },
3162 { 16000, SNDRV_PCM_RATE_16000, HDA_RATE(48, 1, 3) },
3163 { 22050, SNDRV_PCM_RATE_22050, HDA_RATE(44, 1, 2) },
3164 { 32000, SNDRV_PCM_RATE_32000, HDA_RATE(48, 2, 3) },
3165 { 44100, SNDRV_PCM_RATE_44100, HDA_RATE(44, 1, 1) },
3166 { 48000, SNDRV_PCM_RATE_48000, HDA_RATE(48, 1, 1) },
3167 { 88200, SNDRV_PCM_RATE_88200, HDA_RATE(44, 2, 1) },
3168 { 96000, SNDRV_PCM_RATE_96000, HDA_RATE(48, 2, 1) },
3169 { 176400, SNDRV_PCM_RATE_176400, HDA_RATE(44, 4, 1) },
3170 { 192000, SNDRV_PCM_RATE_192000, HDA_RATE(48, 4, 1) },
3171 #define AC_PAR_PCM_RATE_BITS 11
3172 /* up to bits 10, 384kHZ isn't supported properly */
3174 /* not autodetected value */
3175 { 9600, SNDRV_PCM_RATE_KNOT, HDA_RATE(48, 1, 5) },
3177 { 0 } /* terminator */
3181 * snd_hda_calc_stream_format - calculate format bitset
3182 * @rate: the sample rate
3183 * @channels: the number of channels
3184 * @format: the PCM format (SNDRV_PCM_FORMAT_XXX)
3185 * @maxbps: the max. bps
3187 * Calculate the format bitset from the given rate, channels and th PCM format.
3189 * Return zero if invalid.
3191 unsigned int snd_hda_calc_stream_format(unsigned int rate,
3192 unsigned int channels,
3193 unsigned int format,
3194 unsigned int maxbps,
3195 unsigned short spdif_ctls)
3197 int i;
3198 unsigned int val = 0;
3200 for (i = 0; rate_bits[i].hz; i++)
3201 if (rate_bits[i].hz == rate) {
3202 val = rate_bits[i].hda_fmt;
3203 break;
3205 if (!rate_bits[i].hz) {
3206 snd_printdd("invalid rate %d\n", rate);
3207 return 0;
3210 if (channels == 0 || channels > 8) {
3211 snd_printdd("invalid channels %d\n", channels);
3212 return 0;
3214 val |= channels - 1;
3216 switch (snd_pcm_format_width(format)) {
3217 case 8:
3218 val |= AC_FMT_BITS_8;
3219 break;
3220 case 16:
3221 val |= AC_FMT_BITS_16;
3222 break;
3223 case 20:
3224 case 24:
3225 case 32:
3226 if (maxbps >= 32 || format == SNDRV_PCM_FORMAT_FLOAT_LE)
3227 val |= AC_FMT_BITS_32;
3228 else if (maxbps >= 24)
3229 val |= AC_FMT_BITS_24;
3230 else
3231 val |= AC_FMT_BITS_20;
3232 break;
3233 default:
3234 snd_printdd("invalid format width %d\n",
3235 snd_pcm_format_width(format));
3236 return 0;
3239 if (spdif_ctls & AC_DIG1_NONAUDIO)
3240 val |= AC_FMT_TYPE_NON_PCM;
3242 return val;
3244 EXPORT_SYMBOL_HDA(snd_hda_calc_stream_format);
3246 static unsigned int get_pcm_param(struct hda_codec *codec, hda_nid_t nid)
3248 unsigned int val = 0;
3249 if (nid != codec->afg &&
3250 (get_wcaps(codec, nid) & AC_WCAP_FORMAT_OVRD))
3251 val = snd_hda_param_read(codec, nid, AC_PAR_PCM);
3252 if (!val || val == -1)
3253 val = snd_hda_param_read(codec, codec->afg, AC_PAR_PCM);
3254 if (!val || val == -1)
3255 return 0;
3256 return val;
3259 static unsigned int query_pcm_param(struct hda_codec *codec, hda_nid_t nid)
3261 return query_caps_hash(codec, nid, HDA_HASH_PARPCM_KEY(nid),
3262 get_pcm_param);
3265 static unsigned int get_stream_param(struct hda_codec *codec, hda_nid_t nid)
3267 unsigned int streams = snd_hda_param_read(codec, nid, AC_PAR_STREAM);
3268 if (!streams || streams == -1)
3269 streams = snd_hda_param_read(codec, codec->afg, AC_PAR_STREAM);
3270 if (!streams || streams == -1)
3271 return 0;
3272 return streams;
3275 static unsigned int query_stream_param(struct hda_codec *codec, hda_nid_t nid)
3277 return query_caps_hash(codec, nid, HDA_HASH_PARSTR_KEY(nid),
3278 get_stream_param);
3282 * snd_hda_query_supported_pcm - query the supported PCM rates and formats
3283 * @codec: the HDA codec
3284 * @nid: NID to query
3285 * @ratesp: the pointer to store the detected rate bitflags
3286 * @formatsp: the pointer to store the detected formats
3287 * @bpsp: the pointer to store the detected format widths
3289 * Queries the supported PCM rates and formats. The NULL @ratesp, @formatsp
3290 * or @bsps argument is ignored.
3292 * Returns 0 if successful, otherwise a negative error code.
3294 static int snd_hda_query_supported_pcm(struct hda_codec *codec, hda_nid_t nid,
3295 u32 *ratesp, u64 *formatsp, unsigned int *bpsp)
3297 unsigned int i, val, wcaps;
3299 wcaps = get_wcaps(codec, nid);
3300 val = query_pcm_param(codec, nid);
3302 if (ratesp) {
3303 u32 rates = 0;
3304 for (i = 0; i < AC_PAR_PCM_RATE_BITS; i++) {
3305 if (val & (1 << i))
3306 rates |= rate_bits[i].alsa_bits;
3308 if (rates == 0) {
3309 snd_printk(KERN_ERR "hda_codec: rates == 0 "
3310 "(nid=0x%x, val=0x%x, ovrd=%i)\n",
3311 nid, val,
3312 (wcaps & AC_WCAP_FORMAT_OVRD) ? 1 : 0);
3313 return -EIO;
3315 *ratesp = rates;
3318 if (formatsp || bpsp) {
3319 u64 formats = 0;
3320 unsigned int streams, bps;
3322 streams = query_stream_param(codec, nid);
3323 if (!streams)
3324 return -EIO;
3326 bps = 0;
3327 if (streams & AC_SUPFMT_PCM) {
3328 if (val & AC_SUPPCM_BITS_8) {
3329 formats |= SNDRV_PCM_FMTBIT_U8;
3330 bps = 8;
3332 if (val & AC_SUPPCM_BITS_16) {
3333 formats |= SNDRV_PCM_FMTBIT_S16_LE;
3334 bps = 16;
3336 if (wcaps & AC_WCAP_DIGITAL) {
3337 if (val & AC_SUPPCM_BITS_32)
3338 formats |= SNDRV_PCM_FMTBIT_IEC958_SUBFRAME_LE;
3339 if (val & (AC_SUPPCM_BITS_20|AC_SUPPCM_BITS_24))
3340 formats |= SNDRV_PCM_FMTBIT_S32_LE;
3341 if (val & AC_SUPPCM_BITS_24)
3342 bps = 24;
3343 else if (val & AC_SUPPCM_BITS_20)
3344 bps = 20;
3345 } else if (val & (AC_SUPPCM_BITS_20|AC_SUPPCM_BITS_24|
3346 AC_SUPPCM_BITS_32)) {
3347 formats |= SNDRV_PCM_FMTBIT_S32_LE;
3348 if (val & AC_SUPPCM_BITS_32)
3349 bps = 32;
3350 else if (val & AC_SUPPCM_BITS_24)
3351 bps = 24;
3352 else if (val & AC_SUPPCM_BITS_20)
3353 bps = 20;
3356 if (streams & AC_SUPFMT_FLOAT32) {
3357 formats |= SNDRV_PCM_FMTBIT_FLOAT_LE;
3358 if (!bps)
3359 bps = 32;
3361 if (streams == AC_SUPFMT_AC3) {
3362 /* should be exclusive */
3363 /* temporary hack: we have still no proper support
3364 * for the direct AC3 stream...
3366 formats |= SNDRV_PCM_FMTBIT_U8;
3367 bps = 8;
3369 if (formats == 0) {
3370 snd_printk(KERN_ERR "hda_codec: formats == 0 "
3371 "(nid=0x%x, val=0x%x, ovrd=%i, "
3372 "streams=0x%x)\n",
3373 nid, val,
3374 (wcaps & AC_WCAP_FORMAT_OVRD) ? 1 : 0,
3375 streams);
3376 return -EIO;
3378 if (formatsp)
3379 *formatsp = formats;
3380 if (bpsp)
3381 *bpsp = bps;
3384 return 0;
3388 * snd_hda_is_supported_format - Check the validity of the format
3389 * @codec: HD-audio codec
3390 * @nid: NID to check
3391 * @format: the HD-audio format value to check
3393 * Check whether the given node supports the format value.
3395 * Returns 1 if supported, 0 if not.
3397 int snd_hda_is_supported_format(struct hda_codec *codec, hda_nid_t nid,
3398 unsigned int format)
3400 int i;
3401 unsigned int val = 0, rate, stream;
3403 val = query_pcm_param(codec, nid);
3404 if (!val)
3405 return 0;
3407 rate = format & 0xff00;
3408 for (i = 0; i < AC_PAR_PCM_RATE_BITS; i++)
3409 if (rate_bits[i].hda_fmt == rate) {
3410 if (val & (1 << i))
3411 break;
3412 return 0;
3414 if (i >= AC_PAR_PCM_RATE_BITS)
3415 return 0;
3417 stream = query_stream_param(codec, nid);
3418 if (!stream)
3419 return 0;
3421 if (stream & AC_SUPFMT_PCM) {
3422 switch (format & 0xf0) {
3423 case 0x00:
3424 if (!(val & AC_SUPPCM_BITS_8))
3425 return 0;
3426 break;
3427 case 0x10:
3428 if (!(val & AC_SUPPCM_BITS_16))
3429 return 0;
3430 break;
3431 case 0x20:
3432 if (!(val & AC_SUPPCM_BITS_20))
3433 return 0;
3434 break;
3435 case 0x30:
3436 if (!(val & AC_SUPPCM_BITS_24))
3437 return 0;
3438 break;
3439 case 0x40:
3440 if (!(val & AC_SUPPCM_BITS_32))
3441 return 0;
3442 break;
3443 default:
3444 return 0;
3446 } else {
3447 /* FIXME: check for float32 and AC3? */
3450 return 1;
3452 EXPORT_SYMBOL_HDA(snd_hda_is_supported_format);
3455 * PCM stuff
3457 static int hda_pcm_default_open_close(struct hda_pcm_stream *hinfo,
3458 struct hda_codec *codec,
3459 struct snd_pcm_substream *substream)
3461 return 0;
3464 static int hda_pcm_default_prepare(struct hda_pcm_stream *hinfo,
3465 struct hda_codec *codec,
3466 unsigned int stream_tag,
3467 unsigned int format,
3468 struct snd_pcm_substream *substream)
3470 snd_hda_codec_setup_stream(codec, hinfo->nid, stream_tag, 0, format);
3471 return 0;
3474 static int hda_pcm_default_cleanup(struct hda_pcm_stream *hinfo,
3475 struct hda_codec *codec,
3476 struct snd_pcm_substream *substream)
3478 snd_hda_codec_cleanup_stream(codec, hinfo->nid);
3479 return 0;
3482 static int set_pcm_default_values(struct hda_codec *codec,
3483 struct hda_pcm_stream *info)
3485 int err;
3487 /* query support PCM information from the given NID */
3488 if (info->nid && (!info->rates || !info->formats)) {
3489 err = snd_hda_query_supported_pcm(codec, info->nid,
3490 info->rates ? NULL : &info->rates,
3491 info->formats ? NULL : &info->formats,
3492 info->maxbps ? NULL : &info->maxbps);
3493 if (err < 0)
3494 return err;
3496 if (info->ops.open == NULL)
3497 info->ops.open = hda_pcm_default_open_close;
3498 if (info->ops.close == NULL)
3499 info->ops.close = hda_pcm_default_open_close;
3500 if (info->ops.prepare == NULL) {
3501 if (snd_BUG_ON(!info->nid))
3502 return -EINVAL;
3503 info->ops.prepare = hda_pcm_default_prepare;
3505 if (info->ops.cleanup == NULL) {
3506 if (snd_BUG_ON(!info->nid))
3507 return -EINVAL;
3508 info->ops.cleanup = hda_pcm_default_cleanup;
3510 return 0;
3514 * codec prepare/cleanup entries
3516 int snd_hda_codec_prepare(struct hda_codec *codec,
3517 struct hda_pcm_stream *hinfo,
3518 unsigned int stream,
3519 unsigned int format,
3520 struct snd_pcm_substream *substream)
3522 int ret;
3523 mutex_lock(&codec->bus->prepare_mutex);
3524 ret = hinfo->ops.prepare(hinfo, codec, stream, format, substream);
3525 if (ret >= 0)
3526 purify_inactive_streams(codec);
3527 mutex_unlock(&codec->bus->prepare_mutex);
3528 return ret;
3530 EXPORT_SYMBOL_HDA(snd_hda_codec_prepare);
3532 void snd_hda_codec_cleanup(struct hda_codec *codec,
3533 struct hda_pcm_stream *hinfo,
3534 struct snd_pcm_substream *substream)
3536 mutex_lock(&codec->bus->prepare_mutex);
3537 hinfo->ops.cleanup(hinfo, codec, substream);
3538 mutex_unlock(&codec->bus->prepare_mutex);
3540 EXPORT_SYMBOL_HDA(snd_hda_codec_cleanup);
3542 /* global */
3543 const char *snd_hda_pcm_type_name[HDA_PCM_NTYPES] = {
3544 "Audio", "SPDIF", "HDMI", "Modem"
3548 * get the empty PCM device number to assign
3550 * note the max device number is limited by HDA_MAX_PCMS, currently 10
3552 static int get_empty_pcm_device(struct hda_bus *bus, int type)
3554 /* audio device indices; not linear to keep compatibility */
3555 static int audio_idx[HDA_PCM_NTYPES][5] = {
3556 [HDA_PCM_TYPE_AUDIO] = { 0, 2, 4, 5, -1 },
3557 [HDA_PCM_TYPE_SPDIF] = { 1, -1 },
3558 [HDA_PCM_TYPE_HDMI] = { 3, 7, 8, 9, -1 },
3559 [HDA_PCM_TYPE_MODEM] = { 6, -1 },
3561 int i;
3563 if (type >= HDA_PCM_NTYPES) {
3564 snd_printk(KERN_WARNING "Invalid PCM type %d\n", type);
3565 return -EINVAL;
3568 for (i = 0; audio_idx[type][i] >= 0 ; i++)
3569 if (!test_and_set_bit(audio_idx[type][i], bus->pcm_dev_bits))
3570 return audio_idx[type][i];
3572 snd_printk(KERN_WARNING "Too many %s devices\n",
3573 snd_hda_pcm_type_name[type]);
3574 return -EAGAIN;
3578 * attach a new PCM stream
3580 static int snd_hda_attach_pcm(struct hda_codec *codec, struct hda_pcm *pcm)
3582 struct hda_bus *bus = codec->bus;
3583 struct hda_pcm_stream *info;
3584 int stream, err;
3586 if (snd_BUG_ON(!pcm->name))
3587 return -EINVAL;
3588 for (stream = 0; stream < 2; stream++) {
3589 info = &pcm->stream[stream];
3590 if (info->substreams) {
3591 err = set_pcm_default_values(codec, info);
3592 if (err < 0)
3593 return err;
3596 return bus->ops.attach_pcm(bus, codec, pcm);
3599 /* assign all PCMs of the given codec */
3600 int snd_hda_codec_build_pcms(struct hda_codec *codec)
3602 unsigned int pcm;
3603 int err;
3605 if (!codec->num_pcms) {
3606 if (!codec->patch_ops.build_pcms)
3607 return 0;
3608 err = codec->patch_ops.build_pcms(codec);
3609 if (err < 0) {
3610 printk(KERN_ERR "hda_codec: cannot build PCMs"
3611 "for #%d (error %d)\n", codec->addr, err);
3612 err = snd_hda_codec_reset(codec);
3613 if (err < 0) {
3614 printk(KERN_ERR
3615 "hda_codec: cannot revert codec\n");
3616 return err;
3620 for (pcm = 0; pcm < codec->num_pcms; pcm++) {
3621 struct hda_pcm *cpcm = &codec->pcm_info[pcm];
3622 int dev;
3624 if (!cpcm->stream[0].substreams && !cpcm->stream[1].substreams)
3625 continue; /* no substreams assigned */
3627 if (!cpcm->pcm) {
3628 dev = get_empty_pcm_device(codec->bus, cpcm->pcm_type);
3629 if (dev < 0)
3630 continue; /* no fatal error */
3631 cpcm->device = dev;
3632 err = snd_hda_attach_pcm(codec, cpcm);
3633 if (err < 0) {
3634 printk(KERN_ERR "hda_codec: cannot attach "
3635 "PCM stream %d for codec #%d\n",
3636 dev, codec->addr);
3637 continue; /* no fatal error */
3641 return 0;
3645 * snd_hda_build_pcms - build PCM information
3646 * @bus: the BUS
3648 * Create PCM information for each codec included in the bus.
3650 * The build_pcms codec patch is requested to set up codec->num_pcms and
3651 * codec->pcm_info properly. The array is referred by the top-level driver
3652 * to create its PCM instances.
3653 * The allocated codec->pcm_info should be released in codec->patch_ops.free
3654 * callback.
3656 * At least, substreams, channels_min and channels_max must be filled for
3657 * each stream. substreams = 0 indicates that the stream doesn't exist.
3658 * When rates and/or formats are zero, the supported values are queried
3659 * from the given nid. The nid is used also by the default ops.prepare
3660 * and ops.cleanup callbacks.
3662 * The driver needs to call ops.open in its open callback. Similarly,
3663 * ops.close is supposed to be called in the close callback.
3664 * ops.prepare should be called in the prepare or hw_params callback
3665 * with the proper parameters for set up.
3666 * ops.cleanup should be called in hw_free for clean up of streams.
3668 * This function returns 0 if successfull, or a negative error code.
3670 int __devinit snd_hda_build_pcms(struct hda_bus *bus)
3672 struct hda_codec *codec;
3674 list_for_each_entry(codec, &bus->codec_list, list) {
3675 int err = snd_hda_codec_build_pcms(codec);
3676 if (err < 0)
3677 return err;
3679 return 0;
3681 EXPORT_SYMBOL_HDA(snd_hda_build_pcms);
3684 * snd_hda_check_board_config - compare the current codec with the config table
3685 * @codec: the HDA codec
3686 * @num_configs: number of config enums
3687 * @models: array of model name strings
3688 * @tbl: configuration table, terminated by null entries
3690 * Compares the modelname or PCI subsystem id of the current codec with the
3691 * given configuration table. If a matching entry is found, returns its
3692 * config value (supposed to be 0 or positive).
3694 * If no entries are matching, the function returns a negative value.
3696 int snd_hda_check_board_config(struct hda_codec *codec,
3697 int num_configs, const char * const *models,
3698 const struct snd_pci_quirk *tbl)
3700 if (codec->modelname && models) {
3701 int i;
3702 for (i = 0; i < num_configs; i++) {
3703 if (models[i] &&
3704 !strcmp(codec->modelname, models[i])) {
3705 snd_printd(KERN_INFO "hda_codec: model '%s' is "
3706 "selected\n", models[i]);
3707 return i;
3712 if (!codec->bus->pci || !tbl)
3713 return -1;
3715 tbl = snd_pci_quirk_lookup(codec->bus->pci, tbl);
3716 if (!tbl)
3717 return -1;
3718 if (tbl->value >= 0 && tbl->value < num_configs) {
3719 #ifdef CONFIG_SND_DEBUG_VERBOSE
3720 char tmp[10];
3721 const char *model = NULL;
3722 if (models)
3723 model = models[tbl->value];
3724 if (!model) {
3725 sprintf(tmp, "#%d", tbl->value);
3726 model = tmp;
3728 snd_printdd(KERN_INFO "hda_codec: model '%s' is selected "
3729 "for config %x:%x (%s)\n",
3730 model, tbl->subvendor, tbl->subdevice,
3731 (tbl->name ? tbl->name : "Unknown device"));
3732 #endif
3733 return tbl->value;
3735 return -1;
3737 EXPORT_SYMBOL_HDA(snd_hda_check_board_config);
3740 * snd_hda_check_board_codec_sid_config - compare the current codec
3741 subsystem ID with the
3742 config table
3744 This is important for Gateway notebooks with SB450 HDA Audio
3745 where the vendor ID of the PCI device is:
3746 ATI Technologies Inc SB450 HDA Audio [1002:437b]
3747 and the vendor/subvendor are found only at the codec.
3749 * @codec: the HDA codec
3750 * @num_configs: number of config enums
3751 * @models: array of model name strings
3752 * @tbl: configuration table, terminated by null entries
3754 * Compares the modelname or PCI subsystem id of the current codec with the
3755 * given configuration table. If a matching entry is found, returns its
3756 * config value (supposed to be 0 or positive).
3758 * If no entries are matching, the function returns a negative value.
3760 int snd_hda_check_board_codec_sid_config(struct hda_codec *codec,
3761 int num_configs, const char * const *models,
3762 const struct snd_pci_quirk *tbl)
3764 const struct snd_pci_quirk *q;
3766 /* Search for codec ID */
3767 for (q = tbl; q->subvendor; q++) {
3768 unsigned long vendorid = (q->subdevice) | (q->subvendor << 16);
3770 if (vendorid == codec->subsystem_id)
3771 break;
3774 if (!q->subvendor)
3775 return -1;
3777 tbl = q;
3779 if (tbl->value >= 0 && tbl->value < num_configs) {
3780 #ifdef CONFIG_SND_DEBUG_VERBOSE
3781 char tmp[10];
3782 const char *model = NULL;
3783 if (models)
3784 model = models[tbl->value];
3785 if (!model) {
3786 sprintf(tmp, "#%d", tbl->value);
3787 model = tmp;
3789 snd_printdd(KERN_INFO "hda_codec: model '%s' is selected "
3790 "for config %x:%x (%s)\n",
3791 model, tbl->subvendor, tbl->subdevice,
3792 (tbl->name ? tbl->name : "Unknown device"));
3793 #endif
3794 return tbl->value;
3796 return -1;
3798 EXPORT_SYMBOL_HDA(snd_hda_check_board_codec_sid_config);
3801 * snd_hda_add_new_ctls - create controls from the array
3802 * @codec: the HDA codec
3803 * @knew: the array of struct snd_kcontrol_new
3805 * This helper function creates and add new controls in the given array.
3806 * The array must be terminated with an empty entry as terminator.
3808 * Returns 0 if successful, or a negative error code.
3810 int snd_hda_add_new_ctls(struct hda_codec *codec, struct snd_kcontrol_new *knew)
3812 int err;
3814 for (; knew->name; knew++) {
3815 struct snd_kcontrol *kctl;
3816 int addr = 0, idx = 0;
3817 if (knew->iface == -1) /* skip this codec private value */
3818 continue;
3819 for (;;) {
3820 kctl = snd_ctl_new1(knew, codec);
3821 if (!kctl)
3822 return -ENOMEM;
3823 if (addr > 0)
3824 kctl->id.device = addr;
3825 if (idx > 0)
3826 kctl->id.index = idx;
3827 err = snd_hda_ctl_add(codec, 0, kctl);
3828 if (!err)
3829 break;
3830 /* try first with another device index corresponding to
3831 * the codec addr; if it still fails (or it's the
3832 * primary codec), then try another control index
3834 if (!addr && codec->addr)
3835 addr = codec->addr;
3836 else if (!idx && !knew->index) {
3837 idx = find_empty_mixer_ctl_idx(codec,
3838 knew->name);
3839 if (idx <= 0)
3840 return err;
3841 } else
3842 return err;
3845 return 0;
3847 EXPORT_SYMBOL_HDA(snd_hda_add_new_ctls);
3849 #ifdef CONFIG_SND_HDA_POWER_SAVE
3850 static void hda_set_power_state(struct hda_codec *codec, hda_nid_t fg,
3851 unsigned int power_state);
3853 static void hda_power_work(struct work_struct *work)
3855 struct hda_codec *codec =
3856 container_of(work, struct hda_codec, power_work.work);
3857 struct hda_bus *bus = codec->bus;
3859 if (!codec->power_on || codec->power_count) {
3860 codec->power_transition = 0;
3861 return;
3864 hda_call_codec_suspend(codec);
3865 if (bus->ops.pm_notify)
3866 bus->ops.pm_notify(bus);
3869 static void hda_keep_power_on(struct hda_codec *codec)
3871 codec->power_count++;
3872 codec->power_on = 1;
3873 codec->power_jiffies = jiffies;
3876 /* update the power on/off account with the current jiffies */
3877 void snd_hda_update_power_acct(struct hda_codec *codec)
3879 unsigned long delta = jiffies - codec->power_jiffies;
3880 if (codec->power_on)
3881 codec->power_on_acct += delta;
3882 else
3883 codec->power_off_acct += delta;
3884 codec->power_jiffies += delta;
3888 * snd_hda_power_up - Power-up the codec
3889 * @codec: HD-audio codec
3891 * Increment the power-up counter and power up the hardware really when
3892 * not turned on yet.
3894 void snd_hda_power_up(struct hda_codec *codec)
3896 struct hda_bus *bus = codec->bus;
3898 codec->power_count++;
3899 if (codec->power_on || codec->power_transition)
3900 return;
3902 snd_hda_update_power_acct(codec);
3903 codec->power_on = 1;
3904 codec->power_jiffies = jiffies;
3905 if (bus->ops.pm_notify)
3906 bus->ops.pm_notify(bus);
3907 hda_call_codec_resume(codec);
3908 cancel_delayed_work(&codec->power_work);
3909 codec->power_transition = 0;
3911 EXPORT_SYMBOL_HDA(snd_hda_power_up);
3913 #define power_save(codec) \
3914 ((codec)->bus->power_save ? *(codec)->bus->power_save : 0)
3917 * snd_hda_power_down - Power-down the codec
3918 * @codec: HD-audio codec
3920 * Decrement the power-up counter and schedules the power-off work if
3921 * the counter rearches to zero.
3923 void snd_hda_power_down(struct hda_codec *codec)
3925 --codec->power_count;
3926 if (!codec->power_on || codec->power_count || codec->power_transition)
3927 return;
3928 if (power_save(codec)) {
3929 codec->power_transition = 1; /* avoid reentrance */
3930 queue_delayed_work(codec->bus->workq, &codec->power_work,
3931 msecs_to_jiffies(power_save(codec) * 1000));
3934 EXPORT_SYMBOL_HDA(snd_hda_power_down);
3937 * snd_hda_check_amp_list_power - Check the amp list and update the power
3938 * @codec: HD-audio codec
3939 * @check: the object containing an AMP list and the status
3940 * @nid: NID to check / update
3942 * Check whether the given NID is in the amp list. If it's in the list,
3943 * check the current AMP status, and update the the power-status according
3944 * to the mute status.
3946 * This function is supposed to be set or called from the check_power_status
3947 * patch ops.
3949 int snd_hda_check_amp_list_power(struct hda_codec *codec,
3950 struct hda_loopback_check *check,
3951 hda_nid_t nid)
3953 struct hda_amp_list *p;
3954 int ch, v;
3956 if (!check->amplist)
3957 return 0;
3958 for (p = check->amplist; p->nid; p++) {
3959 if (p->nid == nid)
3960 break;
3962 if (!p->nid)
3963 return 0; /* nothing changed */
3965 for (p = check->amplist; p->nid; p++) {
3966 for (ch = 0; ch < 2; ch++) {
3967 v = snd_hda_codec_amp_read(codec, p->nid, ch, p->dir,
3968 p->idx);
3969 if (!(v & HDA_AMP_MUTE) && v > 0) {
3970 if (!check->power_on) {
3971 check->power_on = 1;
3972 snd_hda_power_up(codec);
3974 return 1;
3978 if (check->power_on) {
3979 check->power_on = 0;
3980 snd_hda_power_down(codec);
3982 return 0;
3984 EXPORT_SYMBOL_HDA(snd_hda_check_amp_list_power);
3985 #endif
3988 * Channel mode helper
3992 * snd_hda_ch_mode_info - Info callback helper for the channel mode enum
3994 int snd_hda_ch_mode_info(struct hda_codec *codec,
3995 struct snd_ctl_elem_info *uinfo,
3996 const struct hda_channel_mode *chmode,
3997 int num_chmodes)
3999 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
4000 uinfo->count = 1;
4001 uinfo->value.enumerated.items = num_chmodes;
4002 if (uinfo->value.enumerated.item >= num_chmodes)
4003 uinfo->value.enumerated.item = num_chmodes - 1;
4004 sprintf(uinfo->value.enumerated.name, "%dch",
4005 chmode[uinfo->value.enumerated.item].channels);
4006 return 0;
4008 EXPORT_SYMBOL_HDA(snd_hda_ch_mode_info);
4011 * snd_hda_ch_mode_get - Get callback helper for the channel mode enum
4013 int snd_hda_ch_mode_get(struct hda_codec *codec,
4014 struct snd_ctl_elem_value *ucontrol,
4015 const struct hda_channel_mode *chmode,
4016 int num_chmodes,
4017 int max_channels)
4019 int i;
4021 for (i = 0; i < num_chmodes; i++) {
4022 if (max_channels == chmode[i].channels) {
4023 ucontrol->value.enumerated.item[0] = i;
4024 break;
4027 return 0;
4029 EXPORT_SYMBOL_HDA(snd_hda_ch_mode_get);
4032 * snd_hda_ch_mode_put - Put callback helper for the channel mode enum
4034 int snd_hda_ch_mode_put(struct hda_codec *codec,
4035 struct snd_ctl_elem_value *ucontrol,
4036 const struct hda_channel_mode *chmode,
4037 int num_chmodes,
4038 int *max_channelsp)
4040 unsigned int mode;
4042 mode = ucontrol->value.enumerated.item[0];
4043 if (mode >= num_chmodes)
4044 return -EINVAL;
4045 if (*max_channelsp == chmode[mode].channels)
4046 return 0;
4047 /* change the current channel setting */
4048 *max_channelsp = chmode[mode].channels;
4049 if (chmode[mode].sequence)
4050 snd_hda_sequence_write_cache(codec, chmode[mode].sequence);
4051 return 1;
4053 EXPORT_SYMBOL_HDA(snd_hda_ch_mode_put);
4056 * input MUX helper
4060 * snd_hda_input_mux_info_info - Info callback helper for the input-mux enum
4062 int snd_hda_input_mux_info(const struct hda_input_mux *imux,
4063 struct snd_ctl_elem_info *uinfo)
4065 unsigned int index;
4067 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
4068 uinfo->count = 1;
4069 uinfo->value.enumerated.items = imux->num_items;
4070 if (!imux->num_items)
4071 return 0;
4072 index = uinfo->value.enumerated.item;
4073 if (index >= imux->num_items)
4074 index = imux->num_items - 1;
4075 strcpy(uinfo->value.enumerated.name, imux->items[index].label);
4076 return 0;
4078 EXPORT_SYMBOL_HDA(snd_hda_input_mux_info);
4081 * snd_hda_input_mux_info_put - Put callback helper for the input-mux enum
4083 int snd_hda_input_mux_put(struct hda_codec *codec,
4084 const struct hda_input_mux *imux,
4085 struct snd_ctl_elem_value *ucontrol,
4086 hda_nid_t nid,
4087 unsigned int *cur_val)
4089 unsigned int idx;
4091 if (!imux->num_items)
4092 return 0;
4093 idx = ucontrol->value.enumerated.item[0];
4094 if (idx >= imux->num_items)
4095 idx = imux->num_items - 1;
4096 if (*cur_val == idx)
4097 return 0;
4098 snd_hda_codec_write_cache(codec, nid, 0, AC_VERB_SET_CONNECT_SEL,
4099 imux->items[idx].index);
4100 *cur_val = idx;
4101 return 1;
4103 EXPORT_SYMBOL_HDA(snd_hda_input_mux_put);
4107 * Multi-channel / digital-out PCM helper functions
4110 /* setup SPDIF output stream */
4111 static void setup_dig_out_stream(struct hda_codec *codec, hda_nid_t nid,
4112 unsigned int stream_tag, unsigned int format)
4114 /* turn off SPDIF once; otherwise the IEC958 bits won't be updated */
4115 if (codec->spdif_status_reset && (codec->spdif_ctls & AC_DIG1_ENABLE))
4116 set_dig_out_convert(codec, nid,
4117 codec->spdif_ctls & ~AC_DIG1_ENABLE & 0xff,
4118 -1);
4119 snd_hda_codec_setup_stream(codec, nid, stream_tag, 0, format);
4120 if (codec->slave_dig_outs) {
4121 hda_nid_t *d;
4122 for (d = codec->slave_dig_outs; *d; d++)
4123 snd_hda_codec_setup_stream(codec, *d, stream_tag, 0,
4124 format);
4126 /* turn on again (if needed) */
4127 if (codec->spdif_status_reset && (codec->spdif_ctls & AC_DIG1_ENABLE))
4128 set_dig_out_convert(codec, nid,
4129 codec->spdif_ctls & 0xff, -1);
4132 static void cleanup_dig_out_stream(struct hda_codec *codec, hda_nid_t nid)
4134 snd_hda_codec_cleanup_stream(codec, nid);
4135 if (codec->slave_dig_outs) {
4136 hda_nid_t *d;
4137 for (d = codec->slave_dig_outs; *d; d++)
4138 snd_hda_codec_cleanup_stream(codec, *d);
4143 * snd_hda_bus_reboot_notify - call the reboot notifier of each codec
4144 * @bus: HD-audio bus
4146 void snd_hda_bus_reboot_notify(struct hda_bus *bus)
4148 struct hda_codec *codec;
4150 if (!bus)
4151 return;
4152 list_for_each_entry(codec, &bus->codec_list, list) {
4153 #ifdef CONFIG_SND_HDA_POWER_SAVE
4154 if (!codec->power_on)
4155 continue;
4156 #endif
4157 if (codec->patch_ops.reboot_notify)
4158 codec->patch_ops.reboot_notify(codec);
4161 EXPORT_SYMBOL_HDA(snd_hda_bus_reboot_notify);
4164 * snd_hda_multi_out_dig_open - open the digital out in the exclusive mode
4166 int snd_hda_multi_out_dig_open(struct hda_codec *codec,
4167 struct hda_multi_out *mout)
4169 mutex_lock(&codec->spdif_mutex);
4170 if (mout->dig_out_used == HDA_DIG_ANALOG_DUP)
4171 /* already opened as analog dup; reset it once */
4172 cleanup_dig_out_stream(codec, mout->dig_out_nid);
4173 mout->dig_out_used = HDA_DIG_EXCLUSIVE;
4174 mutex_unlock(&codec->spdif_mutex);
4175 return 0;
4177 EXPORT_SYMBOL_HDA(snd_hda_multi_out_dig_open);
4180 * snd_hda_multi_out_dig_prepare - prepare the digital out stream
4182 int snd_hda_multi_out_dig_prepare(struct hda_codec *codec,
4183 struct hda_multi_out *mout,
4184 unsigned int stream_tag,
4185 unsigned int format,
4186 struct snd_pcm_substream *substream)
4188 mutex_lock(&codec->spdif_mutex);
4189 setup_dig_out_stream(codec, mout->dig_out_nid, stream_tag, format);
4190 mutex_unlock(&codec->spdif_mutex);
4191 return 0;
4193 EXPORT_SYMBOL_HDA(snd_hda_multi_out_dig_prepare);
4196 * snd_hda_multi_out_dig_cleanup - clean-up the digital out stream
4198 int snd_hda_multi_out_dig_cleanup(struct hda_codec *codec,
4199 struct hda_multi_out *mout)
4201 mutex_lock(&codec->spdif_mutex);
4202 cleanup_dig_out_stream(codec, mout->dig_out_nid);
4203 mutex_unlock(&codec->spdif_mutex);
4204 return 0;
4206 EXPORT_SYMBOL_HDA(snd_hda_multi_out_dig_cleanup);
4209 * snd_hda_multi_out_dig_close - release the digital out stream
4211 int snd_hda_multi_out_dig_close(struct hda_codec *codec,
4212 struct hda_multi_out *mout)
4214 mutex_lock(&codec->spdif_mutex);
4215 mout->dig_out_used = 0;
4216 mutex_unlock(&codec->spdif_mutex);
4217 return 0;
4219 EXPORT_SYMBOL_HDA(snd_hda_multi_out_dig_close);
4222 * snd_hda_multi_out_analog_open - open analog outputs
4224 * Open analog outputs and set up the hw-constraints.
4225 * If the digital outputs can be opened as slave, open the digital
4226 * outputs, too.
4228 int snd_hda_multi_out_analog_open(struct hda_codec *codec,
4229 struct hda_multi_out *mout,
4230 struct snd_pcm_substream *substream,
4231 struct hda_pcm_stream *hinfo)
4233 struct snd_pcm_runtime *runtime = substream->runtime;
4234 runtime->hw.channels_max = mout->max_channels;
4235 if (mout->dig_out_nid) {
4236 if (!mout->analog_rates) {
4237 mout->analog_rates = hinfo->rates;
4238 mout->analog_formats = hinfo->formats;
4239 mout->analog_maxbps = hinfo->maxbps;
4240 } else {
4241 runtime->hw.rates = mout->analog_rates;
4242 runtime->hw.formats = mout->analog_formats;
4243 hinfo->maxbps = mout->analog_maxbps;
4245 if (!mout->spdif_rates) {
4246 snd_hda_query_supported_pcm(codec, mout->dig_out_nid,
4247 &mout->spdif_rates,
4248 &mout->spdif_formats,
4249 &mout->spdif_maxbps);
4251 mutex_lock(&codec->spdif_mutex);
4252 if (mout->share_spdif) {
4253 if ((runtime->hw.rates & mout->spdif_rates) &&
4254 (runtime->hw.formats & mout->spdif_formats)) {
4255 runtime->hw.rates &= mout->spdif_rates;
4256 runtime->hw.formats &= mout->spdif_formats;
4257 if (mout->spdif_maxbps < hinfo->maxbps)
4258 hinfo->maxbps = mout->spdif_maxbps;
4259 } else {
4260 mout->share_spdif = 0;
4261 /* FIXME: need notify? */
4264 mutex_unlock(&codec->spdif_mutex);
4266 return snd_pcm_hw_constraint_step(substream->runtime, 0,
4267 SNDRV_PCM_HW_PARAM_CHANNELS, 2);
4269 EXPORT_SYMBOL_HDA(snd_hda_multi_out_analog_open);
4272 * snd_hda_multi_out_analog_prepare - Preapre the analog outputs.
4274 * Set up the i/o for analog out.
4275 * When the digital out is available, copy the front out to digital out, too.
4277 int snd_hda_multi_out_analog_prepare(struct hda_codec *codec,
4278 struct hda_multi_out *mout,
4279 unsigned int stream_tag,
4280 unsigned int format,
4281 struct snd_pcm_substream *substream)
4283 hda_nid_t *nids = mout->dac_nids;
4284 int chs = substream->runtime->channels;
4285 int i;
4287 mutex_lock(&codec->spdif_mutex);
4288 if (mout->dig_out_nid && mout->share_spdif &&
4289 mout->dig_out_used != HDA_DIG_EXCLUSIVE) {
4290 if (chs == 2 &&
4291 snd_hda_is_supported_format(codec, mout->dig_out_nid,
4292 format) &&
4293 !(codec->spdif_status & IEC958_AES0_NONAUDIO)) {
4294 mout->dig_out_used = HDA_DIG_ANALOG_DUP;
4295 setup_dig_out_stream(codec, mout->dig_out_nid,
4296 stream_tag, format);
4297 } else {
4298 mout->dig_out_used = 0;
4299 cleanup_dig_out_stream(codec, mout->dig_out_nid);
4302 mutex_unlock(&codec->spdif_mutex);
4304 /* front */
4305 snd_hda_codec_setup_stream(codec, nids[HDA_FRONT], stream_tag,
4306 0, format);
4307 if (!mout->no_share_stream &&
4308 mout->hp_nid && mout->hp_nid != nids[HDA_FRONT])
4309 /* headphone out will just decode front left/right (stereo) */
4310 snd_hda_codec_setup_stream(codec, mout->hp_nid, stream_tag,
4311 0, format);
4312 /* extra outputs copied from front */
4313 for (i = 0; i < ARRAY_SIZE(mout->extra_out_nid); i++)
4314 if (!mout->no_share_stream && mout->extra_out_nid[i])
4315 snd_hda_codec_setup_stream(codec,
4316 mout->extra_out_nid[i],
4317 stream_tag, 0, format);
4319 /* surrounds */
4320 for (i = 1; i < mout->num_dacs; i++) {
4321 if (chs >= (i + 1) * 2) /* independent out */
4322 snd_hda_codec_setup_stream(codec, nids[i], stream_tag,
4323 i * 2, format);
4324 else if (!mout->no_share_stream) /* copy front */
4325 snd_hda_codec_setup_stream(codec, nids[i], stream_tag,
4326 0, format);
4328 return 0;
4330 EXPORT_SYMBOL_HDA(snd_hda_multi_out_analog_prepare);
4333 * snd_hda_multi_out_analog_cleanup - clean up the setting for analog out
4335 int snd_hda_multi_out_analog_cleanup(struct hda_codec *codec,
4336 struct hda_multi_out *mout)
4338 hda_nid_t *nids = mout->dac_nids;
4339 int i;
4341 for (i = 0; i < mout->num_dacs; i++)
4342 snd_hda_codec_cleanup_stream(codec, nids[i]);
4343 if (mout->hp_nid)
4344 snd_hda_codec_cleanup_stream(codec, mout->hp_nid);
4345 for (i = 0; i < ARRAY_SIZE(mout->extra_out_nid); i++)
4346 if (mout->extra_out_nid[i])
4347 snd_hda_codec_cleanup_stream(codec,
4348 mout->extra_out_nid[i]);
4349 mutex_lock(&codec->spdif_mutex);
4350 if (mout->dig_out_nid && mout->dig_out_used == HDA_DIG_ANALOG_DUP) {
4351 cleanup_dig_out_stream(codec, mout->dig_out_nid);
4352 mout->dig_out_used = 0;
4354 mutex_unlock(&codec->spdif_mutex);
4355 return 0;
4357 EXPORT_SYMBOL_HDA(snd_hda_multi_out_analog_cleanup);
4360 * Helper for automatic pin configuration
4363 static int is_in_nid_list(hda_nid_t nid, hda_nid_t *list)
4365 for (; *list; list++)
4366 if (*list == nid)
4367 return 1;
4368 return 0;
4373 * Sort an associated group of pins according to their sequence numbers.
4375 static void sort_pins_by_sequence(hda_nid_t *pins, short *sequences,
4376 int num_pins)
4378 int i, j;
4379 short seq;
4380 hda_nid_t nid;
4382 for (i = 0; i < num_pins; i++) {
4383 for (j = i + 1; j < num_pins; j++) {
4384 if (sequences[i] > sequences[j]) {
4385 seq = sequences[i];
4386 sequences[i] = sequences[j];
4387 sequences[j] = seq;
4388 nid = pins[i];
4389 pins[i] = pins[j];
4390 pins[j] = nid;
4397 /* add the found input-pin to the cfg->inputs[] table */
4398 static void add_auto_cfg_input_pin(struct auto_pin_cfg *cfg, hda_nid_t nid,
4399 int type)
4401 if (cfg->num_inputs < AUTO_CFG_MAX_INS) {
4402 cfg->inputs[cfg->num_inputs].pin = nid;
4403 cfg->inputs[cfg->num_inputs].type = type;
4404 cfg->num_inputs++;
4408 /* sort inputs in the order of AUTO_PIN_* type */
4409 static void sort_autocfg_input_pins(struct auto_pin_cfg *cfg)
4411 int i, j;
4413 for (i = 0; i < cfg->num_inputs; i++) {
4414 for (j = i + 1; j < cfg->num_inputs; j++) {
4415 if (cfg->inputs[i].type > cfg->inputs[j].type) {
4416 struct auto_pin_cfg_item tmp;
4417 tmp = cfg->inputs[i];
4418 cfg->inputs[i] = cfg->inputs[j];
4419 cfg->inputs[j] = tmp;
4426 * Parse all pin widgets and store the useful pin nids to cfg
4428 * The number of line-outs or any primary output is stored in line_outs,
4429 * and the corresponding output pins are assigned to line_out_pins[],
4430 * in the order of front, rear, CLFE, side, ...
4432 * If more extra outputs (speaker and headphone) are found, the pins are
4433 * assisnged to hp_pins[] and speaker_pins[], respectively. If no line-out jack
4434 * is detected, one of speaker of HP pins is assigned as the primary
4435 * output, i.e. to line_out_pins[0]. So, line_outs is always positive
4436 * if any analog output exists.
4438 * The analog input pins are assigned to inputs array.
4439 * The digital input/output pins are assigned to dig_in_pin and dig_out_pin,
4440 * respectively.
4442 int snd_hda_parse_pin_def_config(struct hda_codec *codec,
4443 struct auto_pin_cfg *cfg,
4444 hda_nid_t *ignore_nids)
4446 hda_nid_t nid, end_nid;
4447 short seq, assoc_line_out, assoc_speaker;
4448 short sequences_line_out[ARRAY_SIZE(cfg->line_out_pins)];
4449 short sequences_speaker[ARRAY_SIZE(cfg->speaker_pins)];
4450 short sequences_hp[ARRAY_SIZE(cfg->hp_pins)];
4451 int i;
4453 memset(cfg, 0, sizeof(*cfg));
4455 memset(sequences_line_out, 0, sizeof(sequences_line_out));
4456 memset(sequences_speaker, 0, sizeof(sequences_speaker));
4457 memset(sequences_hp, 0, sizeof(sequences_hp));
4458 assoc_line_out = assoc_speaker = 0;
4460 end_nid = codec->start_nid + codec->num_nodes;
4461 for (nid = codec->start_nid; nid < end_nid; nid++) {
4462 unsigned int wid_caps = get_wcaps(codec, nid);
4463 unsigned int wid_type = get_wcaps_type(wid_caps);
4464 unsigned int def_conf;
4465 short assoc, loc;
4467 /* read all default configuration for pin complex */
4468 if (wid_type != AC_WID_PIN)
4469 continue;
4470 /* ignore the given nids (e.g. pc-beep returns error) */
4471 if (ignore_nids && is_in_nid_list(nid, ignore_nids))
4472 continue;
4474 def_conf = snd_hda_codec_get_pincfg(codec, nid);
4475 if (get_defcfg_connect(def_conf) == AC_JACK_PORT_NONE)
4476 continue;
4477 loc = get_defcfg_location(def_conf);
4478 switch (get_defcfg_device(def_conf)) {
4479 case AC_JACK_LINE_OUT:
4480 seq = get_defcfg_sequence(def_conf);
4481 assoc = get_defcfg_association(def_conf);
4483 if (!(wid_caps & AC_WCAP_STEREO))
4484 if (!cfg->mono_out_pin)
4485 cfg->mono_out_pin = nid;
4486 if (!assoc)
4487 continue;
4488 if (!assoc_line_out)
4489 assoc_line_out = assoc;
4490 else if (assoc_line_out != assoc)
4491 continue;
4492 if (cfg->line_outs >= ARRAY_SIZE(cfg->line_out_pins))
4493 continue;
4494 cfg->line_out_pins[cfg->line_outs] = nid;
4495 sequences_line_out[cfg->line_outs] = seq;
4496 cfg->line_outs++;
4497 break;
4498 case AC_JACK_SPEAKER:
4499 seq = get_defcfg_sequence(def_conf);
4500 assoc = get_defcfg_association(def_conf);
4501 if (!assoc)
4502 continue;
4503 if (!assoc_speaker)
4504 assoc_speaker = assoc;
4505 else if (assoc_speaker != assoc)
4506 continue;
4507 if (cfg->speaker_outs >= ARRAY_SIZE(cfg->speaker_pins))
4508 continue;
4509 cfg->speaker_pins[cfg->speaker_outs] = nid;
4510 sequences_speaker[cfg->speaker_outs] = seq;
4511 cfg->speaker_outs++;
4512 break;
4513 case AC_JACK_HP_OUT:
4514 seq = get_defcfg_sequence(def_conf);
4515 assoc = get_defcfg_association(def_conf);
4516 if (cfg->hp_outs >= ARRAY_SIZE(cfg->hp_pins))
4517 continue;
4518 cfg->hp_pins[cfg->hp_outs] = nid;
4519 sequences_hp[cfg->hp_outs] = (assoc << 4) | seq;
4520 cfg->hp_outs++;
4521 break;
4522 case AC_JACK_MIC_IN:
4523 add_auto_cfg_input_pin(cfg, nid, AUTO_PIN_MIC);
4524 break;
4525 case AC_JACK_LINE_IN:
4526 add_auto_cfg_input_pin(cfg, nid, AUTO_PIN_LINE_IN);
4527 break;
4528 case AC_JACK_CD:
4529 add_auto_cfg_input_pin(cfg, nid, AUTO_PIN_CD);
4530 break;
4531 case AC_JACK_AUX:
4532 add_auto_cfg_input_pin(cfg, nid, AUTO_PIN_AUX);
4533 break;
4534 case AC_JACK_SPDIF_OUT:
4535 case AC_JACK_DIG_OTHER_OUT:
4536 if (cfg->dig_outs >= ARRAY_SIZE(cfg->dig_out_pins))
4537 continue;
4538 cfg->dig_out_pins[cfg->dig_outs] = nid;
4539 cfg->dig_out_type[cfg->dig_outs] =
4540 (loc == AC_JACK_LOC_HDMI) ?
4541 HDA_PCM_TYPE_HDMI : HDA_PCM_TYPE_SPDIF;
4542 cfg->dig_outs++;
4543 break;
4544 case AC_JACK_SPDIF_IN:
4545 case AC_JACK_DIG_OTHER_IN:
4546 cfg->dig_in_pin = nid;
4547 if (loc == AC_JACK_LOC_HDMI)
4548 cfg->dig_in_type = HDA_PCM_TYPE_HDMI;
4549 else
4550 cfg->dig_in_type = HDA_PCM_TYPE_SPDIF;
4551 break;
4555 /* FIX-UP:
4556 * If no line-out is defined but multiple HPs are found,
4557 * some of them might be the real line-outs.
4559 if (!cfg->line_outs && cfg->hp_outs > 1) {
4560 int i = 0;
4561 while (i < cfg->hp_outs) {
4562 /* The real HPs should have the sequence 0x0f */
4563 if ((sequences_hp[i] & 0x0f) == 0x0f) {
4564 i++;
4565 continue;
4567 /* Move it to the line-out table */
4568 cfg->line_out_pins[cfg->line_outs] = cfg->hp_pins[i];
4569 sequences_line_out[cfg->line_outs] = sequences_hp[i];
4570 cfg->line_outs++;
4571 cfg->hp_outs--;
4572 memmove(cfg->hp_pins + i, cfg->hp_pins + i + 1,
4573 sizeof(cfg->hp_pins[0]) * (cfg->hp_outs - i));
4574 memmove(sequences_hp + i, sequences_hp + i + 1,
4575 sizeof(sequences_hp[0]) * (cfg->hp_outs - i));
4577 memset(cfg->hp_pins + cfg->hp_outs, 0,
4578 sizeof(hda_nid_t) * (AUTO_CFG_MAX_OUTS - cfg->hp_outs));
4579 if (!cfg->hp_outs)
4580 cfg->line_out_type = AUTO_PIN_HP_OUT;
4584 /* sort by sequence */
4585 sort_pins_by_sequence(cfg->line_out_pins, sequences_line_out,
4586 cfg->line_outs);
4587 sort_pins_by_sequence(cfg->speaker_pins, sequences_speaker,
4588 cfg->speaker_outs);
4589 sort_pins_by_sequence(cfg->hp_pins, sequences_hp,
4590 cfg->hp_outs);
4593 * FIX-UP: if no line-outs are detected, try to use speaker or HP pin
4594 * as a primary output
4596 if (!cfg->line_outs) {
4597 if (cfg->speaker_outs) {
4598 cfg->line_outs = cfg->speaker_outs;
4599 memcpy(cfg->line_out_pins, cfg->speaker_pins,
4600 sizeof(cfg->speaker_pins));
4601 cfg->speaker_outs = 0;
4602 memset(cfg->speaker_pins, 0, sizeof(cfg->speaker_pins));
4603 cfg->line_out_type = AUTO_PIN_SPEAKER_OUT;
4604 } else if (cfg->hp_outs) {
4605 cfg->line_outs = cfg->hp_outs;
4606 memcpy(cfg->line_out_pins, cfg->hp_pins,
4607 sizeof(cfg->hp_pins));
4608 cfg->hp_outs = 0;
4609 memset(cfg->hp_pins, 0, sizeof(cfg->hp_pins));
4610 cfg->line_out_type = AUTO_PIN_HP_OUT;
4614 /* Reorder the surround channels
4615 * ALSA sequence is front/surr/clfe/side
4616 * HDA sequence is:
4617 * 4-ch: front/surr => OK as it is
4618 * 6-ch: front/clfe/surr
4619 * 8-ch: front/clfe/rear/side|fc
4621 switch (cfg->line_outs) {
4622 case 3:
4623 case 4:
4624 nid = cfg->line_out_pins[1];
4625 cfg->line_out_pins[1] = cfg->line_out_pins[2];
4626 cfg->line_out_pins[2] = nid;
4627 break;
4630 sort_autocfg_input_pins(cfg);
4633 * debug prints of the parsed results
4635 snd_printd("autoconfig: line_outs=%d (0x%x/0x%x/0x%x/0x%x/0x%x)\n",
4636 cfg->line_outs, cfg->line_out_pins[0], cfg->line_out_pins[1],
4637 cfg->line_out_pins[2], cfg->line_out_pins[3],
4638 cfg->line_out_pins[4]);
4639 snd_printd(" speaker_outs=%d (0x%x/0x%x/0x%x/0x%x/0x%x)\n",
4640 cfg->speaker_outs, cfg->speaker_pins[0],
4641 cfg->speaker_pins[1], cfg->speaker_pins[2],
4642 cfg->speaker_pins[3], cfg->speaker_pins[4]);
4643 snd_printd(" hp_outs=%d (0x%x/0x%x/0x%x/0x%x/0x%x)\n",
4644 cfg->hp_outs, cfg->hp_pins[0],
4645 cfg->hp_pins[1], cfg->hp_pins[2],
4646 cfg->hp_pins[3], cfg->hp_pins[4]);
4647 snd_printd(" mono: mono_out=0x%x\n", cfg->mono_out_pin);
4648 if (cfg->dig_outs)
4649 snd_printd(" dig-out=0x%x/0x%x\n",
4650 cfg->dig_out_pins[0], cfg->dig_out_pins[1]);
4651 snd_printd(" inputs:");
4652 for (i = 0; i < cfg->num_inputs; i++) {
4653 snd_printdd(" %s=0x%x",
4654 hda_get_autocfg_input_label(codec, cfg, i),
4655 cfg->inputs[i].pin);
4657 snd_printd("\n");
4658 if (cfg->dig_in_pin)
4659 snd_printd(" dig-in=0x%x\n", cfg->dig_in_pin);
4661 return 0;
4663 EXPORT_SYMBOL_HDA(snd_hda_parse_pin_def_config);
4665 int snd_hda_get_input_pin_attr(unsigned int def_conf)
4667 unsigned int loc = get_defcfg_location(def_conf);
4668 unsigned int conn = get_defcfg_connect(def_conf);
4669 if (conn == AC_JACK_PORT_NONE)
4670 return INPUT_PIN_ATTR_UNUSED;
4671 /* Windows may claim the internal mic to be BOTH, too */
4672 if (conn == AC_JACK_PORT_FIXED || conn == AC_JACK_PORT_BOTH)
4673 return INPUT_PIN_ATTR_INT;
4674 if ((loc & 0x30) == AC_JACK_LOC_INTERNAL)
4675 return INPUT_PIN_ATTR_INT;
4676 if ((loc & 0x30) == AC_JACK_LOC_SEPARATE)
4677 return INPUT_PIN_ATTR_DOCK;
4678 if (loc == AC_JACK_LOC_REAR)
4679 return INPUT_PIN_ATTR_REAR;
4680 if (loc == AC_JACK_LOC_FRONT)
4681 return INPUT_PIN_ATTR_FRONT;
4682 return INPUT_PIN_ATTR_NORMAL;
4684 EXPORT_SYMBOL_HDA(snd_hda_get_input_pin_attr);
4687 * hda_get_input_pin_label - Give a label for the given input pin
4689 * When check_location is true, the function checks the pin location
4690 * for mic and line-in pins, and set an appropriate prefix like "Front",
4691 * "Rear", "Internal".
4694 const char *hda_get_input_pin_label(struct hda_codec *codec, hda_nid_t pin,
4695 int check_location)
4697 unsigned int def_conf;
4698 static const char * const mic_names[] = {
4699 "Internal Mic", "Dock Mic", "Mic", "Front Mic", "Rear Mic",
4701 int attr;
4703 def_conf = snd_hda_codec_get_pincfg(codec, pin);
4705 switch (get_defcfg_device(def_conf)) {
4706 case AC_JACK_MIC_IN:
4707 if (!check_location)
4708 return "Mic";
4709 attr = snd_hda_get_input_pin_attr(def_conf);
4710 if (!attr)
4711 return "None";
4712 return mic_names[attr - 1];
4713 case AC_JACK_LINE_IN:
4714 if (!check_location)
4715 return "Line";
4716 attr = snd_hda_get_input_pin_attr(def_conf);
4717 if (!attr)
4718 return "None";
4719 if (attr == INPUT_PIN_ATTR_DOCK)
4720 return "Dock Line";
4721 return "Line";
4722 case AC_JACK_AUX:
4723 return "Aux";
4724 case AC_JACK_CD:
4725 return "CD";
4726 case AC_JACK_SPDIF_IN:
4727 return "SPDIF In";
4728 case AC_JACK_DIG_OTHER_IN:
4729 return "Digital In";
4730 default:
4731 return "Misc";
4734 EXPORT_SYMBOL_HDA(hda_get_input_pin_label);
4736 /* Check whether the location prefix needs to be added to the label.
4737 * If all mic-jacks are in the same location (e.g. rear panel), we don't
4738 * have to put "Front" prefix to each label. In such a case, returns false.
4740 static int check_mic_location_need(struct hda_codec *codec,
4741 const struct auto_pin_cfg *cfg,
4742 int input)
4744 unsigned int defc;
4745 int i, attr, attr2;
4747 defc = snd_hda_codec_get_pincfg(codec, cfg->inputs[input].pin);
4748 attr = snd_hda_get_input_pin_attr(defc);
4749 /* for internal or docking mics, we need locations */
4750 if (attr <= INPUT_PIN_ATTR_NORMAL)
4751 return 1;
4753 attr = 0;
4754 for (i = 0; i < cfg->num_inputs; i++) {
4755 defc = snd_hda_codec_get_pincfg(codec, cfg->inputs[i].pin);
4756 attr2 = snd_hda_get_input_pin_attr(defc);
4757 if (attr2 >= INPUT_PIN_ATTR_NORMAL) {
4758 if (attr && attr != attr2)
4759 return 1; /* different locations found */
4760 attr = attr2;
4763 return 0;
4767 * hda_get_autocfg_input_label - Get a label for the given input
4769 * Get a label for the given input pin defined by the autocfg item.
4770 * Unlike hda_get_input_pin_label(), this function checks all inputs
4771 * defined in autocfg and avoids the redundant mic/line prefix as much as
4772 * possible.
4774 const char *hda_get_autocfg_input_label(struct hda_codec *codec,
4775 const struct auto_pin_cfg *cfg,
4776 int input)
4778 int type = cfg->inputs[input].type;
4779 int has_multiple_pins = 0;
4781 if ((input > 0 && cfg->inputs[input - 1].type == type) ||
4782 (input < cfg->num_inputs - 1 && cfg->inputs[input + 1].type == type))
4783 has_multiple_pins = 1;
4784 if (has_multiple_pins && type == AUTO_PIN_MIC)
4785 has_multiple_pins &= check_mic_location_need(codec, cfg, input);
4786 return hda_get_input_pin_label(codec, cfg->inputs[input].pin,
4787 has_multiple_pins);
4789 EXPORT_SYMBOL_HDA(hda_get_autocfg_input_label);
4792 * snd_hda_add_imux_item - Add an item to input_mux
4794 * When the same label is used already in the existing items, the number
4795 * suffix is appended to the label. This label index number is stored
4796 * to type_idx when non-NULL pointer is given.
4798 int snd_hda_add_imux_item(struct hda_input_mux *imux, const char *label,
4799 int index, int *type_idx)
4801 int i, label_idx = 0;
4802 if (imux->num_items >= HDA_MAX_NUM_INPUTS) {
4803 snd_printd(KERN_ERR "hda_codec: Too many imux items!\n");
4804 return -EINVAL;
4806 for (i = 0; i < imux->num_items; i++) {
4807 if (!strncmp(label, imux->items[i].label, strlen(label)))
4808 label_idx++;
4810 if (type_idx)
4811 *type_idx = label_idx;
4812 if (label_idx > 0)
4813 snprintf(imux->items[imux->num_items].label,
4814 sizeof(imux->items[imux->num_items].label),
4815 "%s %d", label, label_idx);
4816 else
4817 strlcpy(imux->items[imux->num_items].label, label,
4818 sizeof(imux->items[imux->num_items].label));
4819 imux->items[imux->num_items].index = index;
4820 imux->num_items++;
4821 return 0;
4823 EXPORT_SYMBOL_HDA(snd_hda_add_imux_item);
4826 #ifdef CONFIG_PM
4828 * power management
4832 * snd_hda_suspend - suspend the codecs
4833 * @bus: the HDA bus
4835 * Returns 0 if successful.
4837 int snd_hda_suspend(struct hda_bus *bus)
4839 struct hda_codec *codec;
4841 list_for_each_entry(codec, &bus->codec_list, list) {
4842 #ifdef CONFIG_SND_HDA_POWER_SAVE
4843 if (!codec->power_on)
4844 continue;
4845 #endif
4846 hda_call_codec_suspend(codec);
4848 return 0;
4850 EXPORT_SYMBOL_HDA(snd_hda_suspend);
4853 * snd_hda_resume - resume the codecs
4854 * @bus: the HDA bus
4856 * Returns 0 if successful.
4858 * This fucntion is defined only when POWER_SAVE isn't set.
4859 * In the power-save mode, the codec is resumed dynamically.
4861 int snd_hda_resume(struct hda_bus *bus)
4863 struct hda_codec *codec;
4865 list_for_each_entry(codec, &bus->codec_list, list) {
4866 if (snd_hda_codec_needs_resume(codec))
4867 hda_call_codec_resume(codec);
4869 return 0;
4871 EXPORT_SYMBOL_HDA(snd_hda_resume);
4872 #endif /* CONFIG_PM */
4875 * generic arrays
4879 * snd_array_new - get a new element from the given array
4880 * @array: the array object
4882 * Get a new element from the given array. If it exceeds the
4883 * pre-allocated array size, re-allocate the array.
4885 * Returns NULL if allocation failed.
4887 void *snd_array_new(struct snd_array *array)
4889 if (array->used >= array->alloced) {
4890 int num = array->alloced + array->alloc_align;
4891 void *nlist;
4892 if (snd_BUG_ON(num >= 4096))
4893 return NULL;
4894 nlist = kcalloc(num + 1, array->elem_size, GFP_KERNEL);
4895 if (!nlist)
4896 return NULL;
4897 if (array->list) {
4898 memcpy(nlist, array->list,
4899 array->elem_size * array->alloced);
4900 kfree(array->list);
4902 array->list = nlist;
4903 array->alloced = num;
4905 return snd_array_elem(array, array->used++);
4907 EXPORT_SYMBOL_HDA(snd_array_new);
4910 * snd_array_free - free the given array elements
4911 * @array: the array object
4913 void snd_array_free(struct snd_array *array)
4915 kfree(array->list);
4916 array->used = 0;
4917 array->alloced = 0;
4918 array->list = NULL;
4920 EXPORT_SYMBOL_HDA(snd_array_free);
4923 * snd_print_pcm_rates - Print the supported PCM rates to the string buffer
4924 * @pcm: PCM caps bits
4925 * @buf: the string buffer to write
4926 * @buflen: the max buffer length
4928 * used by hda_proc.c and hda_eld.c
4930 void snd_print_pcm_rates(int pcm, char *buf, int buflen)
4932 static unsigned int rates[] = {
4933 8000, 11025, 16000, 22050, 32000, 44100, 48000, 88200,
4934 96000, 176400, 192000, 384000
4936 int i, j;
4938 for (i = 0, j = 0; i < ARRAY_SIZE(rates); i++)
4939 if (pcm & (1 << i))
4940 j += snprintf(buf + j, buflen - j, " %d", rates[i]);
4942 buf[j] = '\0'; /* necessary when j == 0 */
4944 EXPORT_SYMBOL_HDA(snd_print_pcm_rates);
4947 * snd_print_pcm_bits - Print the supported PCM fmt bits to the string buffer
4948 * @pcm: PCM caps bits
4949 * @buf: the string buffer to write
4950 * @buflen: the max buffer length
4952 * used by hda_proc.c and hda_eld.c
4954 void snd_print_pcm_bits(int pcm, char *buf, int buflen)
4956 static unsigned int bits[] = { 8, 16, 20, 24, 32 };
4957 int i, j;
4959 for (i = 0, j = 0; i < ARRAY_SIZE(bits); i++)
4960 if (pcm & (AC_SUPPCM_BITS_8 << i))
4961 j += snprintf(buf + j, buflen - j, " %d", bits[i]);
4963 buf[j] = '\0'; /* necessary when j == 0 */
4965 EXPORT_SYMBOL_HDA(snd_print_pcm_bits);
4967 #ifdef CONFIG_SND_HDA_INPUT_JACK
4969 * Input-jack notification support
4971 struct hda_jack_item {
4972 hda_nid_t nid;
4973 int type;
4974 struct snd_jack *jack;
4977 static const char *get_jack_default_name(struct hda_codec *codec, hda_nid_t nid,
4978 int type)
4980 switch (type) {
4981 case SND_JACK_HEADPHONE:
4982 return "Headphone";
4983 case SND_JACK_MICROPHONE:
4984 return "Mic";
4985 case SND_JACK_LINEOUT:
4986 return "Line-out";
4987 case SND_JACK_HEADSET:
4988 return "Headset";
4989 default:
4990 return "Misc";
4994 static void hda_free_jack_priv(struct snd_jack *jack)
4996 struct hda_jack_item *jacks = jack->private_data;
4997 jacks->nid = 0;
4998 jacks->jack = NULL;
5001 int snd_hda_input_jack_add(struct hda_codec *codec, hda_nid_t nid, int type,
5002 const char *name)
5004 struct hda_jack_item *jack;
5005 int err;
5007 snd_array_init(&codec->jacks, sizeof(*jack), 32);
5008 jack = snd_array_new(&codec->jacks);
5009 if (!jack)
5010 return -ENOMEM;
5012 jack->nid = nid;
5013 jack->type = type;
5014 if (!name)
5015 name = get_jack_default_name(codec, nid, type);
5016 err = snd_jack_new(codec->bus->card, name, type, &jack->jack);
5017 if (err < 0) {
5018 jack->nid = 0;
5019 return err;
5021 jack->jack->private_data = jack;
5022 jack->jack->private_free = hda_free_jack_priv;
5023 return 0;
5025 EXPORT_SYMBOL_HDA(snd_hda_input_jack_add);
5027 void snd_hda_input_jack_report(struct hda_codec *codec, hda_nid_t nid)
5029 struct hda_jack_item *jacks = codec->jacks.list;
5030 int i;
5032 if (!jacks)
5033 return;
5035 for (i = 0; i < codec->jacks.used; i++, jacks++) {
5036 unsigned int pin_ctl;
5037 unsigned int present;
5038 int type;
5040 if (jacks->nid != nid)
5041 continue;
5042 present = snd_hda_jack_detect(codec, nid);
5043 type = jacks->type;
5044 if (type == (SND_JACK_HEADPHONE | SND_JACK_LINEOUT)) {
5045 pin_ctl = snd_hda_codec_read(codec, nid, 0,
5046 AC_VERB_GET_PIN_WIDGET_CONTROL, 0);
5047 type = (pin_ctl & AC_PINCTL_HP_EN) ?
5048 SND_JACK_HEADPHONE : SND_JACK_LINEOUT;
5050 snd_jack_report(jacks->jack, present ? type : 0);
5053 EXPORT_SYMBOL_HDA(snd_hda_input_jack_report);
5055 /* free jack instances manually when clearing/reconfiguring */
5056 void snd_hda_input_jack_free(struct hda_codec *codec)
5058 if (!codec->bus->shutdown && codec->jacks.list) {
5059 struct hda_jack_item *jacks = codec->jacks.list;
5060 int i;
5061 for (i = 0; i < codec->jacks.used; i++, jacks++) {
5062 if (jacks->jack)
5063 snd_device_free(codec->bus->card, jacks->jack);
5066 snd_array_free(&codec->jacks);
5068 EXPORT_SYMBOL_HDA(snd_hda_input_jack_free);
5069 #endif /* CONFIG_SND_HDA_INPUT_JACK */
5071 MODULE_DESCRIPTION("HDA codec core");
5072 MODULE_LICENSE("GPL");