2 * Universal Interface for Intel High Definition Audio Codec
4 * Copyright (c) 2004 Takashi Iwai <tiwai@suse.de>
7 * This driver is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
12 * This driver is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22 #include <linux/init.h>
23 #include <linux/delay.h>
24 #include <linux/slab.h>
25 #include <linux/pci.h>
26 #include <linux/mutex.h>
27 #include <sound/core.h>
28 #include "hda_codec.h"
29 #include <sound/asoundef.h>
30 #include <sound/tlv.h>
31 #include <sound/initval.h>
32 #include "hda_local.h"
33 #include <sound/hda_hwdep.h>
36 * vendor / preset table
39 struct hda_vendor_id {
44 /* codec vendor labels */
45 static struct hda_vendor_id hda_vendor_ids[] = {
47 { 0x1013, "Cirrus Logic" },
48 { 0x1057, "Motorola" },
49 { 0x1095, "Silicon Image" },
51 { 0x10ec, "Realtek" },
52 { 0x1102, "Creative" },
56 { 0x11d4, "Analog Devices" },
57 { 0x13f6, "C-Media" },
58 { 0x14f1, "Conexant" },
59 { 0x17e8, "Chrontel" },
61 { 0x1aec, "Wolfson Microelectronics" },
62 { 0x434d, "C-Media" },
64 { 0x8384, "SigmaTel" },
68 static DEFINE_MUTEX(preset_mutex);
69 static LIST_HEAD(hda_preset_tables);
71 int snd_hda_add_codec_preset(struct hda_codec_preset_list *preset)
73 mutex_lock(&preset_mutex);
74 list_add_tail(&preset->list, &hda_preset_tables);
75 mutex_unlock(&preset_mutex);
78 EXPORT_SYMBOL_HDA(snd_hda_add_codec_preset);
80 int snd_hda_delete_codec_preset(struct hda_codec_preset_list *preset)
82 mutex_lock(&preset_mutex);
83 list_del(&preset->list);
84 mutex_unlock(&preset_mutex);
87 EXPORT_SYMBOL_HDA(snd_hda_delete_codec_preset);
89 #ifdef CONFIG_SND_HDA_POWER_SAVE
90 static void hda_power_work(struct work_struct *work);
91 static void hda_keep_power_on(struct hda_codec *codec);
93 static inline void hda_keep_power_on(struct hda_codec *codec) {}
96 const char *snd_hda_get_jack_location(u32 cfg)
98 static char *bases[7] = {
99 "N/A", "Rear", "Front", "Left", "Right", "Top", "Bottom",
101 static unsigned char specials_idx[] = {
106 static char *specials[] = {
107 "Rear Panel", "Drive Bar",
108 "Riser", "HDMI", "ATAPI",
109 "Mobile-In", "Mobile-Out"
112 cfg = (cfg & AC_DEFCFG_LOCATION) >> AC_DEFCFG_LOCATION_SHIFT;
113 if ((cfg & 0x0f) < 7)
114 return bases[cfg & 0x0f];
115 for (i = 0; i < ARRAY_SIZE(specials_idx); i++) {
116 if (cfg == specials_idx[i])
121 EXPORT_SYMBOL_HDA(snd_hda_get_jack_location);
123 const char *snd_hda_get_jack_connectivity(u32 cfg)
125 static char *jack_locations[4] = { "Ext", "Int", "Sep", "Oth" };
127 return jack_locations[(cfg >> (AC_DEFCFG_LOCATION_SHIFT + 4)) & 3];
129 EXPORT_SYMBOL_HDA(snd_hda_get_jack_connectivity);
131 const char *snd_hda_get_jack_type(u32 cfg)
133 static char *jack_types[16] = {
134 "Line Out", "Speaker", "HP Out", "CD",
135 "SPDIF Out", "Digital Out", "Modem Line", "Modem Hand",
136 "Line In", "Aux", "Mic", "Telephony",
137 "SPDIF In", "Digitial In", "Reserved", "Other"
140 return jack_types[(cfg & AC_DEFCFG_DEVICE)
141 >> AC_DEFCFG_DEVICE_SHIFT];
143 EXPORT_SYMBOL_HDA(snd_hda_get_jack_type);
146 * Compose a 32bit command word to be sent to the HD-audio controller
148 static inline unsigned int
149 make_codec_cmd(struct hda_codec *codec, hda_nid_t nid, int direct,
150 unsigned int verb, unsigned int parm)
154 if ((codec->addr & ~0xf) || (direct & ~1) || (nid & ~0x7f) ||
155 (verb & ~0xfff) || (parm & ~0xffff)) {
156 printk(KERN_ERR "hda-codec: out of range cmd %x:%x:%x:%x:%x\n",
157 codec->addr, direct, nid, verb, parm);
161 val = (u32)codec->addr << 28;
162 val |= (u32)direct << 27;
163 val |= (u32)nid << 20;
170 * Send and receive a verb
172 static int codec_exec_verb(struct hda_codec *codec, unsigned int cmd,
175 struct hda_bus *bus = codec->bus;
184 snd_hda_power_up(codec);
185 mutex_lock(&bus->cmd_mutex);
186 err = bus->ops.command(bus, cmd);
188 *res = bus->ops.get_response(bus, codec->addr);
189 mutex_unlock(&bus->cmd_mutex);
190 snd_hda_power_down(codec);
191 if (res && *res == -1 && bus->rirb_error) {
192 if (bus->response_reset) {
193 snd_printd("hda_codec: resetting BUS due to "
194 "fatal communication error\n");
195 bus->ops.bus_reset(bus);
199 /* clear reset-flag when the communication gets recovered */
201 bus->response_reset = 0;
206 * snd_hda_codec_read - send a command and get the response
207 * @codec: the HDA codec
208 * @nid: NID to send the command
209 * @direct: direct flag
210 * @verb: the verb to send
211 * @parm: the parameter for the verb
213 * Send a single command and read the corresponding response.
215 * Returns the obtained response value, or -1 for an error.
217 unsigned int snd_hda_codec_read(struct hda_codec *codec, hda_nid_t nid,
219 unsigned int verb, unsigned int parm)
221 unsigned cmd = make_codec_cmd(codec, nid, direct, verb, parm);
223 codec_exec_verb(codec, cmd, &res);
226 EXPORT_SYMBOL_HDA(snd_hda_codec_read);
229 * snd_hda_codec_write - send a single command without waiting for 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 without waiting for response.
238 * Returns 0 if successful, or a negative error code.
240 int snd_hda_codec_write(struct hda_codec *codec, hda_nid_t nid, int direct,
241 unsigned int verb, unsigned int parm)
243 unsigned int cmd = make_codec_cmd(codec, nid, direct, verb, parm);
245 return codec_exec_verb(codec, cmd,
246 codec->bus->sync_write ? &res : NULL);
248 EXPORT_SYMBOL_HDA(snd_hda_codec_write);
251 * snd_hda_sequence_write - sequence writes
252 * @codec: the HDA codec
253 * @seq: VERB array to send
255 * Send the commands sequentially from the given array.
256 * The array must be terminated with NID=0.
258 void snd_hda_sequence_write(struct hda_codec *codec, const struct hda_verb *seq)
260 for (; seq->nid; seq++)
261 snd_hda_codec_write(codec, seq->nid, 0, seq->verb, seq->param);
263 EXPORT_SYMBOL_HDA(snd_hda_sequence_write);
266 * snd_hda_get_sub_nodes - get the range of sub nodes
267 * @codec: the HDA codec
269 * @start_id: the pointer to store the start NID
271 * Parse the NID and store the start NID of its sub-nodes.
272 * Returns the number of sub-nodes.
274 int snd_hda_get_sub_nodes(struct hda_codec *codec, hda_nid_t nid,
279 parm = snd_hda_param_read(codec, nid, AC_PAR_NODE_COUNT);
282 *start_id = (parm >> 16) & 0x7fff;
283 return (int)(parm & 0x7fff);
285 EXPORT_SYMBOL_HDA(snd_hda_get_sub_nodes);
288 * snd_hda_get_connections - get connection list
289 * @codec: the HDA codec
291 * @conn_list: connection list array
292 * @max_conns: max. number of connections to store
294 * Parses the connection list of the given widget and stores the list
297 * Returns the number of connections, or a negative error code.
299 int snd_hda_get_connections(struct hda_codec *codec, hda_nid_t nid,
300 hda_nid_t *conn_list, int max_conns)
303 int i, conn_len, conns;
304 unsigned int shift, num_elems, mask;
308 if (snd_BUG_ON(!conn_list || max_conns <= 0))
311 wcaps = get_wcaps(codec, nid);
312 if (!(wcaps & AC_WCAP_CONN_LIST) &&
313 get_wcaps_type(wcaps) != AC_WID_VOL_KNB) {
314 snd_printk(KERN_WARNING "hda_codec: "
315 "connection list not available for 0x%x\n", nid);
319 parm = snd_hda_param_read(codec, nid, AC_PAR_CONNLIST_LEN);
320 if (parm & AC_CLIST_LONG) {
329 conn_len = parm & AC_CLIST_LENGTH;
330 mask = (1 << (shift-1)) - 1;
333 return 0; /* no connection */
336 /* single connection */
337 parm = snd_hda_codec_read(codec, nid, 0,
338 AC_VERB_GET_CONNECT_LIST, 0);
339 if (parm == -1 && codec->bus->rirb_error)
341 conn_list[0] = parm & mask;
345 /* multi connection */
348 for (i = 0; i < conn_len; i++) {
352 if (i % num_elems == 0) {
353 parm = snd_hda_codec_read(codec, nid, 0,
354 AC_VERB_GET_CONNECT_LIST, i);
355 if (parm == -1 && codec->bus->rirb_error)
358 range_val = !!(parm & (1 << (shift-1))); /* ranges */
361 snd_printk(KERN_WARNING "hda_codec: "
362 "invalid CONNECT_LIST verb %x[%i]:%x\n",
368 /* ranges between the previous and this one */
369 if (!prev_nid || prev_nid >= val) {
370 snd_printk(KERN_WARNING "hda_codec: "
371 "invalid dep_range_val %x:%x\n",
375 for (n = prev_nid + 1; n <= val; n++) {
376 if (conns >= max_conns) {
378 "Too many connections\n");
381 conn_list[conns++] = n;
384 if (conns >= max_conns) {
385 snd_printk(KERN_ERR "Too many connections\n");
388 conn_list[conns++] = val;
394 EXPORT_SYMBOL_HDA(snd_hda_get_connections);
398 * snd_hda_queue_unsol_event - add an unsolicited event to queue
400 * @res: unsolicited event (lower 32bit of RIRB entry)
401 * @res_ex: codec addr and flags (upper 32bit or RIRB entry)
403 * Adds the given event to the queue. The events are processed in
404 * the workqueue asynchronously. Call this function in the interrupt
405 * hanlder when RIRB receives an unsolicited event.
407 * Returns 0 if successful, or a negative error code.
409 int snd_hda_queue_unsol_event(struct hda_bus *bus, u32 res, u32 res_ex)
411 struct hda_bus_unsolicited *unsol;
418 wp = (unsol->wp + 1) % HDA_UNSOL_QUEUE_SIZE;
422 unsol->queue[wp] = res;
423 unsol->queue[wp + 1] = res_ex;
425 queue_work(bus->workq, &unsol->work);
429 EXPORT_SYMBOL_HDA(snd_hda_queue_unsol_event);
432 * process queued unsolicited events
434 static void process_unsol_events(struct work_struct *work)
436 struct hda_bus_unsolicited *unsol =
437 container_of(work, struct hda_bus_unsolicited, work);
438 struct hda_bus *bus = unsol->bus;
439 struct hda_codec *codec;
440 unsigned int rp, caddr, res;
442 while (unsol->rp != unsol->wp) {
443 rp = (unsol->rp + 1) % HDA_UNSOL_QUEUE_SIZE;
446 res = unsol->queue[rp];
447 caddr = unsol->queue[rp + 1];
448 if (!(caddr & (1 << 4))) /* no unsolicited event? */
450 codec = bus->caddr_tbl[caddr & 0x0f];
451 if (codec && codec->patch_ops.unsol_event)
452 codec->patch_ops.unsol_event(codec, res);
457 * initialize unsolicited queue
459 static int init_unsol_queue(struct hda_bus *bus)
461 struct hda_bus_unsolicited *unsol;
463 if (bus->unsol) /* already initialized */
466 unsol = kzalloc(sizeof(*unsol), GFP_KERNEL);
468 snd_printk(KERN_ERR "hda_codec: "
469 "can't allocate unsolicited queue\n");
472 INIT_WORK(&unsol->work, process_unsol_events);
481 static void snd_hda_codec_free(struct hda_codec *codec);
483 static int snd_hda_bus_free(struct hda_bus *bus)
485 struct hda_codec *codec, *n;
490 flush_workqueue(bus->workq);
493 list_for_each_entry_safe(codec, n, &bus->codec_list, list) {
494 snd_hda_codec_free(codec);
496 if (bus->ops.private_free)
497 bus->ops.private_free(bus);
499 destroy_workqueue(bus->workq);
504 static int snd_hda_bus_dev_free(struct snd_device *device)
506 struct hda_bus *bus = device->device_data;
508 return snd_hda_bus_free(bus);
511 #ifdef CONFIG_SND_HDA_HWDEP
512 static int snd_hda_bus_dev_register(struct snd_device *device)
514 struct hda_bus *bus = device->device_data;
515 struct hda_codec *codec;
516 list_for_each_entry(codec, &bus->codec_list, list) {
517 snd_hda_hwdep_add_sysfs(codec);
518 snd_hda_hwdep_add_power_sysfs(codec);
523 #define snd_hda_bus_dev_register NULL
527 * snd_hda_bus_new - create a HDA bus
528 * @card: the card entry
529 * @temp: the template for hda_bus information
530 * @busp: the pointer to store the created bus instance
532 * Returns 0 if successful, or a negative error code.
534 int /*__devinit*/ snd_hda_bus_new(struct snd_card *card,
535 const struct hda_bus_template *temp,
536 struct hda_bus **busp)
540 static struct snd_device_ops dev_ops = {
541 .dev_register = snd_hda_bus_dev_register,
542 .dev_free = snd_hda_bus_dev_free,
545 if (snd_BUG_ON(!temp))
547 if (snd_BUG_ON(!temp->ops.command || !temp->ops.get_response))
553 bus = kzalloc(sizeof(*bus), GFP_KERNEL);
555 snd_printk(KERN_ERR "can't allocate struct hda_bus\n");
560 bus->private_data = temp->private_data;
561 bus->pci = temp->pci;
562 bus->modelname = temp->modelname;
563 bus->power_save = temp->power_save;
564 bus->ops = temp->ops;
566 mutex_init(&bus->cmd_mutex);
567 INIT_LIST_HEAD(&bus->codec_list);
569 snprintf(bus->workq_name, sizeof(bus->workq_name),
570 "hd-audio%d", card->number);
571 bus->workq = create_singlethread_workqueue(bus->workq_name);
573 snd_printk(KERN_ERR "cannot create workqueue %s\n",
579 err = snd_device_new(card, SNDRV_DEV_BUS, bus, &dev_ops);
581 snd_hda_bus_free(bus);
588 EXPORT_SYMBOL_HDA(snd_hda_bus_new);
590 #ifdef CONFIG_SND_HDA_GENERIC
591 #define is_generic_config(codec) \
592 (codec->modelname && !strcmp(codec->modelname, "generic"))
594 #define is_generic_config(codec) 0
598 #define HDA_MODREQ_MAX_COUNT 2 /* two request_modules()'s */
600 #define HDA_MODREQ_MAX_COUNT 0 /* all presets are statically linked */
604 * find a matching codec preset
606 static const struct hda_codec_preset *
607 find_codec_preset(struct hda_codec *codec)
609 struct hda_codec_preset_list *tbl;
610 const struct hda_codec_preset *preset;
611 int mod_requested = 0;
613 if (is_generic_config(codec))
614 return NULL; /* use the generic parser */
617 mutex_lock(&preset_mutex);
618 list_for_each_entry(tbl, &hda_preset_tables, list) {
619 if (!try_module_get(tbl->owner)) {
620 snd_printk(KERN_ERR "hda_codec: cannot module_get\n");
623 for (preset = tbl->preset; preset->id; preset++) {
624 u32 mask = preset->mask;
625 if (preset->afg && preset->afg != codec->afg)
627 if (preset->mfg && preset->mfg != codec->mfg)
631 if (preset->id == (codec->vendor_id & mask) &&
633 preset->rev == codec->revision_id)) {
634 mutex_unlock(&preset_mutex);
635 codec->owner = tbl->owner;
639 module_put(tbl->owner);
641 mutex_unlock(&preset_mutex);
643 if (mod_requested < HDA_MODREQ_MAX_COUNT) {
646 snprintf(name, sizeof(name), "snd-hda-codec-id:%08x",
649 snprintf(name, sizeof(name), "snd-hda-codec-id:%04x*",
650 (codec->vendor_id >> 16) & 0xffff);
651 request_module(name);
659 * get_codec_name - store the codec name
661 static int get_codec_name(struct hda_codec *codec)
663 const struct hda_vendor_id *c;
664 const char *vendor = NULL;
665 u16 vendor_id = codec->vendor_id >> 16;
668 if (codec->vendor_name)
671 for (c = hda_vendor_ids; c->id; c++) {
672 if (c->id == vendor_id) {
678 sprintf(tmp, "Generic %04x", vendor_id);
681 codec->vendor_name = kstrdup(vendor, GFP_KERNEL);
682 if (!codec->vendor_name)
686 if (codec->chip_name)
689 if (codec->preset && codec->preset->name)
690 codec->chip_name = kstrdup(codec->preset->name, GFP_KERNEL);
692 sprintf(tmp, "ID %x", codec->vendor_id & 0xffff);
693 codec->chip_name = kstrdup(tmp, GFP_KERNEL);
695 if (!codec->chip_name)
701 * look for an AFG and MFG nodes
703 static void /*__devinit*/ setup_fg_nodes(struct hda_codec *codec)
705 int i, total_nodes, function_id;
708 total_nodes = snd_hda_get_sub_nodes(codec, AC_NODE_ROOT, &nid);
709 for (i = 0; i < total_nodes; i++, nid++) {
710 function_id = snd_hda_param_read(codec, nid,
711 AC_PAR_FUNCTION_TYPE) & 0xff;
712 switch (function_id) {
713 case AC_GRP_AUDIO_FUNCTION:
715 codec->function_id = function_id;
717 case AC_GRP_MODEM_FUNCTION:
719 codec->function_id = function_id;
728 * read widget caps for each widget and store in cache
730 static int read_widget_caps(struct hda_codec *codec, hda_nid_t fg_node)
735 codec->num_nodes = snd_hda_get_sub_nodes(codec, fg_node,
737 codec->wcaps = kmalloc(codec->num_nodes * 4, GFP_KERNEL);
740 nid = codec->start_nid;
741 for (i = 0; i < codec->num_nodes; i++, nid++)
742 codec->wcaps[i] = snd_hda_param_read(codec, nid,
743 AC_PAR_AUDIO_WIDGET_CAP);
747 /* read all pin default configurations and save codec->init_pins */
748 static int read_pin_defaults(struct hda_codec *codec)
751 hda_nid_t nid = codec->start_nid;
753 for (i = 0; i < codec->num_nodes; i++, nid++) {
754 struct hda_pincfg *pin;
755 unsigned int wcaps = get_wcaps(codec, nid);
756 unsigned int wid_type = get_wcaps_type(wcaps);
757 if (wid_type != AC_WID_PIN)
759 pin = snd_array_new(&codec->init_pins);
763 pin->cfg = snd_hda_codec_read(codec, nid, 0,
764 AC_VERB_GET_CONFIG_DEFAULT, 0);
769 /* look up the given pin config list and return the item matching with NID */
770 static struct hda_pincfg *look_up_pincfg(struct hda_codec *codec,
771 struct snd_array *array,
775 for (i = 0; i < array->used; i++) {
776 struct hda_pincfg *pin = snd_array_elem(array, i);
783 /* write a config value for the given NID */
784 static void set_pincfg(struct hda_codec *codec, hda_nid_t nid,
788 for (i = 0; i < 4; i++) {
789 snd_hda_codec_write(codec, nid, 0,
790 AC_VERB_SET_CONFIG_DEFAULT_BYTES_0 + i,
796 /* set the current pin config value for the given NID.
797 * the value is cached, and read via snd_hda_codec_get_pincfg()
799 int snd_hda_add_pincfg(struct hda_codec *codec, struct snd_array *list,
800 hda_nid_t nid, unsigned int cfg)
802 struct hda_pincfg *pin;
805 oldcfg = snd_hda_codec_get_pincfg(codec, nid);
806 pin = look_up_pincfg(codec, list, nid);
808 pin = snd_array_new(list);
815 /* change only when needed; e.g. if the pincfg is already present
816 * in user_pins[], don't write it
818 cfg = snd_hda_codec_get_pincfg(codec, nid);
820 set_pincfg(codec, nid, cfg);
824 int snd_hda_codec_set_pincfg(struct hda_codec *codec,
825 hda_nid_t nid, unsigned int cfg)
827 return snd_hda_add_pincfg(codec, &codec->driver_pins, nid, cfg);
829 EXPORT_SYMBOL_HDA(snd_hda_codec_set_pincfg);
831 /* get the current pin config value of the given pin NID */
832 unsigned int snd_hda_codec_get_pincfg(struct hda_codec *codec, hda_nid_t nid)
834 struct hda_pincfg *pin;
836 #ifdef CONFIG_SND_HDA_HWDEP
837 pin = look_up_pincfg(codec, &codec->user_pins, nid);
841 pin = look_up_pincfg(codec, &codec->driver_pins, nid);
844 pin = look_up_pincfg(codec, &codec->init_pins, nid);
849 EXPORT_SYMBOL_HDA(snd_hda_codec_get_pincfg);
851 /* restore all current pin configs */
852 static void restore_pincfgs(struct hda_codec *codec)
855 for (i = 0; i < codec->init_pins.used; i++) {
856 struct hda_pincfg *pin = snd_array_elem(&codec->init_pins, i);
857 set_pincfg(codec, pin->nid,
858 snd_hda_codec_get_pincfg(codec, pin->nid));
862 static void init_hda_cache(struct hda_cache_rec *cache,
863 unsigned int record_size);
864 static void free_hda_cache(struct hda_cache_rec *cache);
866 /* restore the initial pin cfgs and release all pincfg lists */
867 static void restore_init_pincfgs(struct hda_codec *codec)
869 /* first free driver_pins and user_pins, then call restore_pincfg
870 * so that only the values in init_pins are restored
872 snd_array_free(&codec->driver_pins);
873 #ifdef CONFIG_SND_HDA_HWDEP
874 snd_array_free(&codec->user_pins);
876 restore_pincfgs(codec);
877 snd_array_free(&codec->init_pins);
883 static void snd_hda_codec_free(struct hda_codec *codec)
887 restore_init_pincfgs(codec);
888 #ifdef CONFIG_SND_HDA_POWER_SAVE
889 cancel_delayed_work(&codec->power_work);
890 flush_workqueue(codec->bus->workq);
892 list_del(&codec->list);
893 snd_array_free(&codec->mixers);
894 codec->bus->caddr_tbl[codec->addr] = NULL;
895 if (codec->patch_ops.free)
896 codec->patch_ops.free(codec);
897 module_put(codec->owner);
898 free_hda_cache(&codec->amp_cache);
899 free_hda_cache(&codec->cmd_cache);
900 kfree(codec->vendor_name);
901 kfree(codec->chip_name);
902 kfree(codec->modelname);
907 static void hda_set_power_state(struct hda_codec *codec, hda_nid_t fg,
908 unsigned int power_state);
911 * snd_hda_codec_new - create a HDA codec
912 * @bus: the bus to assign
913 * @codec_addr: the codec address
914 * @codecp: the pointer to store the generated codec
916 * Returns 0 if successful, or a negative error code.
918 int /*__devinit*/ snd_hda_codec_new(struct hda_bus *bus, unsigned int codec_addr,
919 struct hda_codec **codecp)
921 struct hda_codec *codec;
925 if (snd_BUG_ON(!bus))
927 if (snd_BUG_ON(codec_addr > HDA_MAX_CODEC_ADDRESS))
930 if (bus->caddr_tbl[codec_addr]) {
931 snd_printk(KERN_ERR "hda_codec: "
932 "address 0x%x is already occupied\n", codec_addr);
936 codec = kzalloc(sizeof(*codec), GFP_KERNEL);
938 snd_printk(KERN_ERR "can't allocate struct hda_codec\n");
943 codec->addr = codec_addr;
944 mutex_init(&codec->spdif_mutex);
945 mutex_init(&codec->control_mutex);
946 init_hda_cache(&codec->amp_cache, sizeof(struct hda_amp_info));
947 init_hda_cache(&codec->cmd_cache, sizeof(struct hda_cache_head));
948 snd_array_init(&codec->mixers, sizeof(struct snd_kcontrol *), 32);
949 snd_array_init(&codec->init_pins, sizeof(struct hda_pincfg), 16);
950 snd_array_init(&codec->driver_pins, sizeof(struct hda_pincfg), 16);
951 if (codec->bus->modelname) {
952 codec->modelname = kstrdup(codec->bus->modelname, GFP_KERNEL);
953 if (!codec->modelname) {
954 snd_hda_codec_free(codec);
959 #ifdef CONFIG_SND_HDA_POWER_SAVE
960 INIT_DELAYED_WORK(&codec->power_work, hda_power_work);
961 /* snd_hda_codec_new() marks the codec as power-up, and leave it as is.
962 * the caller has to power down appropriatley after initialization
965 hda_keep_power_on(codec);
968 list_add_tail(&codec->list, &bus->codec_list);
969 bus->caddr_tbl[codec_addr] = codec;
971 codec->vendor_id = snd_hda_param_read(codec, AC_NODE_ROOT,
973 if (codec->vendor_id == -1)
974 /* read again, hopefully the access method was corrected
975 * in the last read...
977 codec->vendor_id = snd_hda_param_read(codec, AC_NODE_ROOT,
979 codec->subsystem_id = snd_hda_param_read(codec, AC_NODE_ROOT,
980 AC_PAR_SUBSYSTEM_ID);
981 codec->revision_id = snd_hda_param_read(codec, AC_NODE_ROOT,
984 setup_fg_nodes(codec);
985 if (!codec->afg && !codec->mfg) {
986 snd_printdd("hda_codec: no AFG or MFG node found\n");
991 err = read_widget_caps(codec, codec->afg ? codec->afg : codec->mfg);
993 snd_printk(KERN_ERR "hda_codec: cannot malloc\n");
996 err = read_pin_defaults(codec);
1000 if (!codec->subsystem_id) {
1001 hda_nid_t nid = codec->afg ? codec->afg : codec->mfg;
1002 codec->subsystem_id =
1003 snd_hda_codec_read(codec, nid, 0,
1004 AC_VERB_GET_SUBSYSTEM_ID, 0);
1007 /* power-up all before initialization */
1008 hda_set_power_state(codec,
1009 codec->afg ? codec->afg : codec->mfg,
1012 snd_hda_codec_proc_new(codec);
1014 snd_hda_create_hwdep(codec);
1016 sprintf(component, "HDA:%08x,%08x,%08x", codec->vendor_id,
1017 codec->subsystem_id, codec->revision_id);
1018 snd_component_add(codec->bus->card, component);
1025 snd_hda_codec_free(codec);
1028 EXPORT_SYMBOL_HDA(snd_hda_codec_new);
1030 int snd_hda_codec_configure(struct hda_codec *codec)
1034 codec->preset = find_codec_preset(codec);
1035 if (!codec->vendor_name || !codec->chip_name) {
1036 err = get_codec_name(codec);
1040 /* audio codec should override the mixer name */
1041 if (codec->afg || !*codec->bus->card->mixername)
1042 snprintf(codec->bus->card->mixername,
1043 sizeof(codec->bus->card->mixername),
1044 "%s %s", codec->vendor_name, codec->chip_name);
1046 if (is_generic_config(codec)) {
1047 err = snd_hda_parse_generic_codec(codec);
1050 if (codec->preset && codec->preset->patch) {
1051 err = codec->preset->patch(codec);
1055 /* call the default parser */
1056 err = snd_hda_parse_generic_codec(codec);
1058 printk(KERN_ERR "hda-codec: No codec parser is available\n");
1061 if (!err && codec->patch_ops.unsol_event)
1062 err = init_unsol_queue(codec->bus);
1065 EXPORT_SYMBOL_HDA(snd_hda_codec_configure);
1068 * snd_hda_codec_setup_stream - set up the codec for streaming
1069 * @codec: the CODEC to set up
1070 * @nid: the NID to set up
1071 * @stream_tag: stream tag to pass, it's between 0x1 and 0xf.
1072 * @channel_id: channel id to pass, zero based.
1073 * @format: stream format.
1075 void snd_hda_codec_setup_stream(struct hda_codec *codec, hda_nid_t nid,
1077 int channel_id, int format)
1082 snd_printdd("hda_codec_setup_stream: "
1083 "NID=0x%x, stream=0x%x, channel=%d, format=0x%x\n",
1084 nid, stream_tag, channel_id, format);
1085 snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_CHANNEL_STREAMID,
1086 (stream_tag << 4) | channel_id);
1088 snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_STREAM_FORMAT, format);
1090 EXPORT_SYMBOL_HDA(snd_hda_codec_setup_stream);
1092 void snd_hda_codec_cleanup_stream(struct hda_codec *codec, hda_nid_t nid)
1097 snd_printdd("hda_codec_cleanup_stream: NID=0x%x\n", nid);
1098 snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_CHANNEL_STREAMID, 0);
1099 #if 0 /* keep the format */
1101 snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_STREAM_FORMAT, 0);
1104 EXPORT_SYMBOL_HDA(snd_hda_codec_cleanup_stream);
1107 * amp access functions
1110 /* FIXME: more better hash key? */
1111 #define HDA_HASH_KEY(nid,dir,idx) (u32)((nid) + ((idx) << 16) + ((dir) << 24))
1112 #define HDA_HASH_PINCAP_KEY(nid) (u32)((nid) + (0x02 << 24))
1113 #define HDA_HASH_PARPCM_KEY(nid) (u32)((nid) + (0x03 << 24))
1114 #define HDA_HASH_PARSTR_KEY(nid) (u32)((nid) + (0x04 << 24))
1115 #define INFO_AMP_CAPS (1<<0)
1116 #define INFO_AMP_VOL(ch) (1 << (1 + (ch)))
1118 /* initialize the hash table */
1119 static void /*__devinit*/ init_hda_cache(struct hda_cache_rec *cache,
1120 unsigned int record_size)
1122 memset(cache, 0, sizeof(*cache));
1123 memset(cache->hash, 0xff, sizeof(cache->hash));
1124 snd_array_init(&cache->buf, record_size, 64);
1127 static void free_hda_cache(struct hda_cache_rec *cache)
1129 snd_array_free(&cache->buf);
1132 /* query the hash. allocate an entry if not found. */
1133 static struct hda_cache_head *get_alloc_hash(struct hda_cache_rec *cache,
1136 u16 idx = key % (u16)ARRAY_SIZE(cache->hash);
1137 u16 cur = cache->hash[idx];
1138 struct hda_cache_head *info;
1140 while (cur != 0xffff) {
1141 info = snd_array_elem(&cache->buf, cur);
1142 if (info->key == key)
1147 /* add a new hash entry */
1148 info = snd_array_new(&cache->buf);
1151 cur = snd_array_index(&cache->buf, info);
1154 info->next = cache->hash[idx];
1155 cache->hash[idx] = cur;
1160 /* query and allocate an amp hash entry */
1161 static inline struct hda_amp_info *
1162 get_alloc_amp_hash(struct hda_codec *codec, u32 key)
1164 return (struct hda_amp_info *)get_alloc_hash(&codec->amp_cache, key);
1168 * query AMP capabilities for the given widget and direction
1170 u32 query_amp_caps(struct hda_codec *codec, hda_nid_t nid, int direction)
1172 struct hda_amp_info *info;
1174 info = get_alloc_amp_hash(codec, HDA_HASH_KEY(nid, direction, 0));
1177 if (!(info->head.val & INFO_AMP_CAPS)) {
1178 if (!(get_wcaps(codec, nid) & AC_WCAP_AMP_OVRD))
1180 info->amp_caps = snd_hda_param_read(codec, nid,
1181 direction == HDA_OUTPUT ?
1182 AC_PAR_AMP_OUT_CAP :
1185 info->head.val |= INFO_AMP_CAPS;
1187 return info->amp_caps;
1189 EXPORT_SYMBOL_HDA(query_amp_caps);
1191 int snd_hda_override_amp_caps(struct hda_codec *codec, hda_nid_t nid, int dir,
1194 struct hda_amp_info *info;
1196 info = get_alloc_amp_hash(codec, HDA_HASH_KEY(nid, dir, 0));
1199 info->amp_caps = caps;
1200 info->head.val |= INFO_AMP_CAPS;
1203 EXPORT_SYMBOL_HDA(snd_hda_override_amp_caps);
1206 query_caps_hash(struct hda_codec *codec, hda_nid_t nid, u32 key,
1207 unsigned int (*func)(struct hda_codec *, hda_nid_t))
1209 struct hda_amp_info *info;
1211 info = get_alloc_amp_hash(codec, key);
1214 if (!info->head.val) {
1215 info->head.val |= INFO_AMP_CAPS;
1216 info->amp_caps = func(codec, nid);
1218 return info->amp_caps;
1221 static unsigned int read_pin_cap(struct hda_codec *codec, hda_nid_t nid)
1223 return snd_hda_param_read(codec, nid, AC_PAR_PIN_CAP);
1226 u32 snd_hda_query_pin_caps(struct hda_codec *codec, hda_nid_t nid)
1228 return query_caps_hash(codec, nid, HDA_HASH_PINCAP_KEY(nid),
1231 EXPORT_SYMBOL_HDA(snd_hda_query_pin_caps);
1234 * read the current volume to info
1235 * if the cache exists, read the cache value.
1237 static unsigned int get_vol_mute(struct hda_codec *codec,
1238 struct hda_amp_info *info, hda_nid_t nid,
1239 int ch, int direction, int index)
1243 if (info->head.val & INFO_AMP_VOL(ch))
1244 return info->vol[ch];
1246 parm = ch ? AC_AMP_GET_RIGHT : AC_AMP_GET_LEFT;
1247 parm |= direction == HDA_OUTPUT ? AC_AMP_GET_OUTPUT : AC_AMP_GET_INPUT;
1249 val = snd_hda_codec_read(codec, nid, 0,
1250 AC_VERB_GET_AMP_GAIN_MUTE, parm);
1251 info->vol[ch] = val & 0xff;
1252 info->head.val |= INFO_AMP_VOL(ch);
1253 return info->vol[ch];
1257 * write the current volume in info to the h/w and update the cache
1259 static void put_vol_mute(struct hda_codec *codec, struct hda_amp_info *info,
1260 hda_nid_t nid, int ch, int direction, int index,
1265 parm = ch ? AC_AMP_SET_RIGHT : AC_AMP_SET_LEFT;
1266 parm |= direction == HDA_OUTPUT ? AC_AMP_SET_OUTPUT : AC_AMP_SET_INPUT;
1267 parm |= index << AC_AMP_SET_INDEX_SHIFT;
1269 snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_AMP_GAIN_MUTE, parm);
1270 info->vol[ch] = val;
1274 * read AMP value. The volume is between 0 to 0x7f, 0x80 = mute bit.
1276 int snd_hda_codec_amp_read(struct hda_codec *codec, hda_nid_t nid, int ch,
1277 int direction, int index)
1279 struct hda_amp_info *info;
1280 info = get_alloc_amp_hash(codec, HDA_HASH_KEY(nid, direction, index));
1283 return get_vol_mute(codec, info, nid, ch, direction, index);
1285 EXPORT_SYMBOL_HDA(snd_hda_codec_amp_read);
1288 * update the AMP value, mask = bit mask to set, val = the value
1290 int snd_hda_codec_amp_update(struct hda_codec *codec, hda_nid_t nid, int ch,
1291 int direction, int idx, int mask, int val)
1293 struct hda_amp_info *info;
1295 info = get_alloc_amp_hash(codec, HDA_HASH_KEY(nid, direction, idx));
1299 val |= get_vol_mute(codec, info, nid, ch, direction, idx) & ~mask;
1300 if (info->vol[ch] == val)
1302 put_vol_mute(codec, info, nid, ch, direction, idx, val);
1305 EXPORT_SYMBOL_HDA(snd_hda_codec_amp_update);
1308 * update the AMP stereo with the same mask and value
1310 int snd_hda_codec_amp_stereo(struct hda_codec *codec, hda_nid_t nid,
1311 int direction, int idx, int mask, int val)
1314 for (ch = 0; ch < 2; ch++)
1315 ret |= snd_hda_codec_amp_update(codec, nid, ch, direction,
1319 EXPORT_SYMBOL_HDA(snd_hda_codec_amp_stereo);
1321 #ifdef SND_HDA_NEEDS_RESUME
1322 /* resume the all amp commands from the cache */
1323 void snd_hda_codec_resume_amp(struct hda_codec *codec)
1325 struct hda_amp_info *buffer = codec->amp_cache.buf.list;
1328 for (i = 0; i < codec->amp_cache.buf.used; i++, buffer++) {
1329 u32 key = buffer->head.key;
1331 unsigned int idx, dir, ch;
1335 idx = (key >> 16) & 0xff;
1336 dir = (key >> 24) & 0xff;
1337 for (ch = 0; ch < 2; ch++) {
1338 if (!(buffer->head.val & INFO_AMP_VOL(ch)))
1340 put_vol_mute(codec, buffer, nid, ch, dir, idx,
1345 EXPORT_SYMBOL_HDA(snd_hda_codec_resume_amp);
1346 #endif /* SND_HDA_NEEDS_RESUME */
1349 int snd_hda_mixer_amp_volume_info(struct snd_kcontrol *kcontrol,
1350 struct snd_ctl_elem_info *uinfo)
1352 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1353 u16 nid = get_amp_nid(kcontrol);
1354 u8 chs = get_amp_channels(kcontrol);
1355 int dir = get_amp_direction(kcontrol);
1356 unsigned int ofs = get_amp_offset(kcontrol);
1359 caps = query_amp_caps(codec, nid, dir);
1361 caps = (caps & AC_AMPCAP_NUM_STEPS) >> AC_AMPCAP_NUM_STEPS_SHIFT;
1363 printk(KERN_WARNING "hda_codec: "
1364 "num_steps = 0 for NID=0x%x (ctl = %s)\n", nid,
1370 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
1371 uinfo->count = chs == 3 ? 2 : 1;
1372 uinfo->value.integer.min = 0;
1373 uinfo->value.integer.max = caps;
1376 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_volume_info);
1379 static inline unsigned int
1380 read_amp_value(struct hda_codec *codec, hda_nid_t nid,
1381 int ch, int dir, int idx, unsigned int ofs)
1384 val = snd_hda_codec_amp_read(codec, nid, ch, dir, idx);
1385 val &= HDA_AMP_VOLMASK;
1394 update_amp_value(struct hda_codec *codec, hda_nid_t nid,
1395 int ch, int dir, int idx, unsigned int ofs,
1400 return snd_hda_codec_amp_update(codec, nid, ch, dir, idx,
1401 HDA_AMP_VOLMASK, val);
1404 int snd_hda_mixer_amp_volume_get(struct snd_kcontrol *kcontrol,
1405 struct snd_ctl_elem_value *ucontrol)
1407 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1408 hda_nid_t nid = get_amp_nid(kcontrol);
1409 int chs = get_amp_channels(kcontrol);
1410 int dir = get_amp_direction(kcontrol);
1411 int idx = get_amp_index(kcontrol);
1412 unsigned int ofs = get_amp_offset(kcontrol);
1413 long *valp = ucontrol->value.integer.value;
1416 *valp++ = read_amp_value(codec, nid, 0, dir, idx, ofs);
1418 *valp = read_amp_value(codec, nid, 1, dir, idx, ofs);
1421 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_volume_get);
1423 int snd_hda_mixer_amp_volume_put(struct snd_kcontrol *kcontrol,
1424 struct snd_ctl_elem_value *ucontrol)
1426 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1427 hda_nid_t nid = get_amp_nid(kcontrol);
1428 int chs = get_amp_channels(kcontrol);
1429 int dir = get_amp_direction(kcontrol);
1430 int idx = get_amp_index(kcontrol);
1431 unsigned int ofs = get_amp_offset(kcontrol);
1432 long *valp = ucontrol->value.integer.value;
1435 snd_hda_power_up(codec);
1437 change = update_amp_value(codec, nid, 0, dir, idx, ofs, *valp);
1441 change |= update_amp_value(codec, nid, 1, dir, idx, ofs, *valp);
1442 snd_hda_power_down(codec);
1445 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_volume_put);
1447 int snd_hda_mixer_amp_tlv(struct snd_kcontrol *kcontrol, int op_flag,
1448 unsigned int size, unsigned int __user *_tlv)
1450 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1451 hda_nid_t nid = get_amp_nid(kcontrol);
1452 int dir = get_amp_direction(kcontrol);
1453 unsigned int ofs = get_amp_offset(kcontrol);
1454 u32 caps, val1, val2;
1456 if (size < 4 * sizeof(unsigned int))
1458 caps = query_amp_caps(codec, nid, dir);
1459 val2 = (caps & AC_AMPCAP_STEP_SIZE) >> AC_AMPCAP_STEP_SIZE_SHIFT;
1460 val2 = (val2 + 1) * 25;
1461 val1 = -((caps & AC_AMPCAP_OFFSET) >> AC_AMPCAP_OFFSET_SHIFT);
1463 val1 = ((int)val1) * ((int)val2);
1464 if (put_user(SNDRV_CTL_TLVT_DB_SCALE, _tlv))
1466 if (put_user(2 * sizeof(unsigned int), _tlv + 1))
1468 if (put_user(val1, _tlv + 2))
1470 if (put_user(val2, _tlv + 3))
1474 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_tlv);
1477 * set (static) TLV for virtual master volume; recalculated as max 0dB
1479 void snd_hda_set_vmaster_tlv(struct hda_codec *codec, hda_nid_t nid, int dir,
1485 caps = query_amp_caps(codec, nid, dir);
1486 nums = (caps & AC_AMPCAP_NUM_STEPS) >> AC_AMPCAP_NUM_STEPS_SHIFT;
1487 step = (caps & AC_AMPCAP_STEP_SIZE) >> AC_AMPCAP_STEP_SIZE_SHIFT;
1488 step = (step + 1) * 25;
1489 tlv[0] = SNDRV_CTL_TLVT_DB_SCALE;
1490 tlv[1] = 2 * sizeof(unsigned int);
1491 tlv[2] = -nums * step;
1494 EXPORT_SYMBOL_HDA(snd_hda_set_vmaster_tlv);
1496 /* find a mixer control element with the given name */
1497 static struct snd_kcontrol *
1498 _snd_hda_find_mixer_ctl(struct hda_codec *codec,
1499 const char *name, int idx)
1501 struct snd_ctl_elem_id id;
1502 memset(&id, 0, sizeof(id));
1503 id.iface = SNDRV_CTL_ELEM_IFACE_MIXER;
1505 if (snd_BUG_ON(strlen(name) >= sizeof(id.name)))
1507 strcpy(id.name, name);
1508 return snd_ctl_find_id(codec->bus->card, &id);
1511 struct snd_kcontrol *snd_hda_find_mixer_ctl(struct hda_codec *codec,
1514 return _snd_hda_find_mixer_ctl(codec, name, 0);
1516 EXPORT_SYMBOL_HDA(snd_hda_find_mixer_ctl);
1518 /* Add a control element and assign to the codec */
1519 int snd_hda_ctl_add(struct hda_codec *codec, struct snd_kcontrol *kctl)
1522 struct snd_kcontrol **knewp;
1524 err = snd_ctl_add(codec->bus->card, kctl);
1527 knewp = snd_array_new(&codec->mixers);
1533 EXPORT_SYMBOL_HDA(snd_hda_ctl_add);
1535 /* Clear all controls assigned to the given codec */
1536 void snd_hda_ctls_clear(struct hda_codec *codec)
1539 struct snd_kcontrol **kctls = codec->mixers.list;
1540 for (i = 0; i < codec->mixers.used; i++)
1541 snd_ctl_remove(codec->bus->card, kctls[i]);
1542 snd_array_free(&codec->mixers);
1545 /* pseudo device locking
1546 * toggle card->shutdown to allow/disallow the device access (as a hack)
1548 static int hda_lock_devices(struct snd_card *card)
1550 spin_lock(&card->files_lock);
1551 if (card->shutdown) {
1552 spin_unlock(&card->files_lock);
1556 spin_unlock(&card->files_lock);
1560 static void hda_unlock_devices(struct snd_card *card)
1562 spin_lock(&card->files_lock);
1564 spin_unlock(&card->files_lock);
1567 int snd_hda_codec_reset(struct hda_codec *codec)
1569 struct snd_card *card = codec->bus->card;
1572 if (hda_lock_devices(card) < 0)
1574 /* check whether the codec isn't used by any mixer or PCM streams */
1575 if (!list_empty(&card->ctl_files)) {
1576 hda_unlock_devices(card);
1579 for (pcm = 0; pcm < codec->num_pcms; pcm++) {
1580 struct hda_pcm *cpcm = &codec->pcm_info[pcm];
1583 if (cpcm->pcm->streams[0].substream_opened ||
1584 cpcm->pcm->streams[1].substream_opened) {
1585 hda_unlock_devices(card);
1590 /* OK, let it free */
1592 #ifdef CONFIG_SND_HDA_POWER_SAVE
1593 cancel_delayed_work(&codec->power_work);
1594 flush_workqueue(codec->bus->workq);
1596 snd_hda_ctls_clear(codec);
1598 for (i = 0; i < codec->num_pcms; i++) {
1599 if (codec->pcm_info[i].pcm) {
1600 snd_device_free(card, codec->pcm_info[i].pcm);
1601 clear_bit(codec->pcm_info[i].device,
1602 codec->bus->pcm_dev_bits);
1605 if (codec->patch_ops.free)
1606 codec->patch_ops.free(codec);
1607 codec->proc_widget_hook = NULL;
1609 free_hda_cache(&codec->amp_cache);
1610 free_hda_cache(&codec->cmd_cache);
1611 init_hda_cache(&codec->amp_cache, sizeof(struct hda_amp_info));
1612 init_hda_cache(&codec->cmd_cache, sizeof(struct hda_cache_head));
1613 /* free only driver_pins so that init_pins + user_pins are restored */
1614 snd_array_free(&codec->driver_pins);
1615 restore_pincfgs(codec);
1616 codec->num_pcms = 0;
1617 codec->pcm_info = NULL;
1618 codec->preset = NULL;
1619 memset(&codec->patch_ops, 0, sizeof(codec->patch_ops));
1620 codec->slave_dig_outs = NULL;
1621 codec->spdif_status_reset = 0;
1622 module_put(codec->owner);
1623 codec->owner = NULL;
1625 /* allow device access again */
1626 hda_unlock_devices(card);
1630 /* create a virtual master control and add slaves */
1631 int snd_hda_add_vmaster(struct hda_codec *codec, char *name,
1632 unsigned int *tlv, const char **slaves)
1634 struct snd_kcontrol *kctl;
1638 for (s = slaves; *s && !snd_hda_find_mixer_ctl(codec, *s); s++)
1641 snd_printdd("No slave found for %s\n", name);
1644 kctl = snd_ctl_make_virtual_master(name, tlv);
1647 err = snd_hda_ctl_add(codec, kctl);
1651 for (s = slaves; *s; s++) {
1652 struct snd_kcontrol *sctl;
1655 sctl = _snd_hda_find_mixer_ctl(codec, *s, i);
1658 snd_printdd("Cannot find slave %s, "
1662 err = snd_ctl_add_slave(kctl, sctl);
1670 EXPORT_SYMBOL_HDA(snd_hda_add_vmaster);
1673 int snd_hda_mixer_amp_switch_info(struct snd_kcontrol *kcontrol,
1674 struct snd_ctl_elem_info *uinfo)
1676 int chs = get_amp_channels(kcontrol);
1678 uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
1679 uinfo->count = chs == 3 ? 2 : 1;
1680 uinfo->value.integer.min = 0;
1681 uinfo->value.integer.max = 1;
1684 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_switch_info);
1686 int snd_hda_mixer_amp_switch_get(struct snd_kcontrol *kcontrol,
1687 struct snd_ctl_elem_value *ucontrol)
1689 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1690 hda_nid_t nid = get_amp_nid(kcontrol);
1691 int chs = get_amp_channels(kcontrol);
1692 int dir = get_amp_direction(kcontrol);
1693 int idx = get_amp_index(kcontrol);
1694 long *valp = ucontrol->value.integer.value;
1697 *valp++ = (snd_hda_codec_amp_read(codec, nid, 0, dir, idx) &
1698 HDA_AMP_MUTE) ? 0 : 1;
1700 *valp = (snd_hda_codec_amp_read(codec, nid, 1, dir, idx) &
1701 HDA_AMP_MUTE) ? 0 : 1;
1704 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_switch_get);
1706 int snd_hda_mixer_amp_switch_put(struct snd_kcontrol *kcontrol,
1707 struct snd_ctl_elem_value *ucontrol)
1709 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1710 hda_nid_t nid = get_amp_nid(kcontrol);
1711 int chs = get_amp_channels(kcontrol);
1712 int dir = get_amp_direction(kcontrol);
1713 int idx = get_amp_index(kcontrol);
1714 long *valp = ucontrol->value.integer.value;
1717 snd_hda_power_up(codec);
1719 change = snd_hda_codec_amp_update(codec, nid, 0, dir, idx,
1721 *valp ? 0 : HDA_AMP_MUTE);
1725 change |= snd_hda_codec_amp_update(codec, nid, 1, dir, idx,
1727 *valp ? 0 : HDA_AMP_MUTE);
1728 #ifdef CONFIG_SND_HDA_POWER_SAVE
1729 if (codec->patch_ops.check_power_status)
1730 codec->patch_ops.check_power_status(codec, nid);
1732 snd_hda_power_down(codec);
1735 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_switch_put);
1738 * bound volume controls
1740 * bind multiple volumes (# indices, from 0)
1743 #define AMP_VAL_IDX_SHIFT 19
1744 #define AMP_VAL_IDX_MASK (0x0f<<19)
1746 int snd_hda_mixer_bind_switch_get(struct snd_kcontrol *kcontrol,
1747 struct snd_ctl_elem_value *ucontrol)
1749 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1753 mutex_lock(&codec->control_mutex);
1754 pval = kcontrol->private_value;
1755 kcontrol->private_value = pval & ~AMP_VAL_IDX_MASK; /* index 0 */
1756 err = snd_hda_mixer_amp_switch_get(kcontrol, ucontrol);
1757 kcontrol->private_value = pval;
1758 mutex_unlock(&codec->control_mutex);
1761 EXPORT_SYMBOL_HDA(snd_hda_mixer_bind_switch_get);
1763 int snd_hda_mixer_bind_switch_put(struct snd_kcontrol *kcontrol,
1764 struct snd_ctl_elem_value *ucontrol)
1766 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1768 int i, indices, err = 0, change = 0;
1770 mutex_lock(&codec->control_mutex);
1771 pval = kcontrol->private_value;
1772 indices = (pval & AMP_VAL_IDX_MASK) >> AMP_VAL_IDX_SHIFT;
1773 for (i = 0; i < indices; i++) {
1774 kcontrol->private_value = (pval & ~AMP_VAL_IDX_MASK) |
1775 (i << AMP_VAL_IDX_SHIFT);
1776 err = snd_hda_mixer_amp_switch_put(kcontrol, ucontrol);
1781 kcontrol->private_value = pval;
1782 mutex_unlock(&codec->control_mutex);
1783 return err < 0 ? err : change;
1785 EXPORT_SYMBOL_HDA(snd_hda_mixer_bind_switch_put);
1788 * generic bound volume/swtich controls
1790 int snd_hda_mixer_bind_ctls_info(struct snd_kcontrol *kcontrol,
1791 struct snd_ctl_elem_info *uinfo)
1793 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1794 struct hda_bind_ctls *c;
1797 mutex_lock(&codec->control_mutex);
1798 c = (struct hda_bind_ctls *)kcontrol->private_value;
1799 kcontrol->private_value = *c->values;
1800 err = c->ops->info(kcontrol, uinfo);
1801 kcontrol->private_value = (long)c;
1802 mutex_unlock(&codec->control_mutex);
1805 EXPORT_SYMBOL_HDA(snd_hda_mixer_bind_ctls_info);
1807 int snd_hda_mixer_bind_ctls_get(struct snd_kcontrol *kcontrol,
1808 struct snd_ctl_elem_value *ucontrol)
1810 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1811 struct hda_bind_ctls *c;
1814 mutex_lock(&codec->control_mutex);
1815 c = (struct hda_bind_ctls *)kcontrol->private_value;
1816 kcontrol->private_value = *c->values;
1817 err = c->ops->get(kcontrol, ucontrol);
1818 kcontrol->private_value = (long)c;
1819 mutex_unlock(&codec->control_mutex);
1822 EXPORT_SYMBOL_HDA(snd_hda_mixer_bind_ctls_get);
1824 int snd_hda_mixer_bind_ctls_put(struct snd_kcontrol *kcontrol,
1825 struct snd_ctl_elem_value *ucontrol)
1827 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1828 struct hda_bind_ctls *c;
1829 unsigned long *vals;
1830 int err = 0, change = 0;
1832 mutex_lock(&codec->control_mutex);
1833 c = (struct hda_bind_ctls *)kcontrol->private_value;
1834 for (vals = c->values; *vals; vals++) {
1835 kcontrol->private_value = *vals;
1836 err = c->ops->put(kcontrol, ucontrol);
1841 kcontrol->private_value = (long)c;
1842 mutex_unlock(&codec->control_mutex);
1843 return err < 0 ? err : change;
1845 EXPORT_SYMBOL_HDA(snd_hda_mixer_bind_ctls_put);
1847 int snd_hda_mixer_bind_tlv(struct snd_kcontrol *kcontrol, int op_flag,
1848 unsigned int size, unsigned int __user *tlv)
1850 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1851 struct hda_bind_ctls *c;
1854 mutex_lock(&codec->control_mutex);
1855 c = (struct hda_bind_ctls *)kcontrol->private_value;
1856 kcontrol->private_value = *c->values;
1857 err = c->ops->tlv(kcontrol, op_flag, size, tlv);
1858 kcontrol->private_value = (long)c;
1859 mutex_unlock(&codec->control_mutex);
1862 EXPORT_SYMBOL_HDA(snd_hda_mixer_bind_tlv);
1864 struct hda_ctl_ops snd_hda_bind_vol = {
1865 .info = snd_hda_mixer_amp_volume_info,
1866 .get = snd_hda_mixer_amp_volume_get,
1867 .put = snd_hda_mixer_amp_volume_put,
1868 .tlv = snd_hda_mixer_amp_tlv
1870 EXPORT_SYMBOL_HDA(snd_hda_bind_vol);
1872 struct hda_ctl_ops snd_hda_bind_sw = {
1873 .info = snd_hda_mixer_amp_switch_info,
1874 .get = snd_hda_mixer_amp_switch_get,
1875 .put = snd_hda_mixer_amp_switch_put,
1876 .tlv = snd_hda_mixer_amp_tlv
1878 EXPORT_SYMBOL_HDA(snd_hda_bind_sw);
1881 * SPDIF out controls
1884 static int snd_hda_spdif_mask_info(struct snd_kcontrol *kcontrol,
1885 struct snd_ctl_elem_info *uinfo)
1887 uinfo->type = SNDRV_CTL_ELEM_TYPE_IEC958;
1892 static int snd_hda_spdif_cmask_get(struct snd_kcontrol *kcontrol,
1893 struct snd_ctl_elem_value *ucontrol)
1895 ucontrol->value.iec958.status[0] = IEC958_AES0_PROFESSIONAL |
1896 IEC958_AES0_NONAUDIO |
1897 IEC958_AES0_CON_EMPHASIS_5015 |
1898 IEC958_AES0_CON_NOT_COPYRIGHT;
1899 ucontrol->value.iec958.status[1] = IEC958_AES1_CON_CATEGORY |
1900 IEC958_AES1_CON_ORIGINAL;
1904 static int snd_hda_spdif_pmask_get(struct snd_kcontrol *kcontrol,
1905 struct snd_ctl_elem_value *ucontrol)
1907 ucontrol->value.iec958.status[0] = IEC958_AES0_PROFESSIONAL |
1908 IEC958_AES0_NONAUDIO |
1909 IEC958_AES0_PRO_EMPHASIS_5015;
1913 static int snd_hda_spdif_default_get(struct snd_kcontrol *kcontrol,
1914 struct snd_ctl_elem_value *ucontrol)
1916 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1918 ucontrol->value.iec958.status[0] = codec->spdif_status & 0xff;
1919 ucontrol->value.iec958.status[1] = (codec->spdif_status >> 8) & 0xff;
1920 ucontrol->value.iec958.status[2] = (codec->spdif_status >> 16) & 0xff;
1921 ucontrol->value.iec958.status[3] = (codec->spdif_status >> 24) & 0xff;
1926 /* convert from SPDIF status bits to HDA SPDIF bits
1927 * bit 0 (DigEn) is always set zero (to be filled later)
1929 static unsigned short convert_from_spdif_status(unsigned int sbits)
1931 unsigned short val = 0;
1933 if (sbits & IEC958_AES0_PROFESSIONAL)
1934 val |= AC_DIG1_PROFESSIONAL;
1935 if (sbits & IEC958_AES0_NONAUDIO)
1936 val |= AC_DIG1_NONAUDIO;
1937 if (sbits & IEC958_AES0_PROFESSIONAL) {
1938 if ((sbits & IEC958_AES0_PRO_EMPHASIS) ==
1939 IEC958_AES0_PRO_EMPHASIS_5015)
1940 val |= AC_DIG1_EMPHASIS;
1942 if ((sbits & IEC958_AES0_CON_EMPHASIS) ==
1943 IEC958_AES0_CON_EMPHASIS_5015)
1944 val |= AC_DIG1_EMPHASIS;
1945 if (!(sbits & IEC958_AES0_CON_NOT_COPYRIGHT))
1946 val |= AC_DIG1_COPYRIGHT;
1947 if (sbits & (IEC958_AES1_CON_ORIGINAL << 8))
1948 val |= AC_DIG1_LEVEL;
1949 val |= sbits & (IEC958_AES1_CON_CATEGORY << 8);
1954 /* convert to SPDIF status bits from HDA SPDIF bits
1956 static unsigned int convert_to_spdif_status(unsigned short val)
1958 unsigned int sbits = 0;
1960 if (val & AC_DIG1_NONAUDIO)
1961 sbits |= IEC958_AES0_NONAUDIO;
1962 if (val & AC_DIG1_PROFESSIONAL)
1963 sbits |= IEC958_AES0_PROFESSIONAL;
1964 if (sbits & IEC958_AES0_PROFESSIONAL) {
1965 if (sbits & AC_DIG1_EMPHASIS)
1966 sbits |= IEC958_AES0_PRO_EMPHASIS_5015;
1968 if (val & AC_DIG1_EMPHASIS)
1969 sbits |= IEC958_AES0_CON_EMPHASIS_5015;
1970 if (!(val & AC_DIG1_COPYRIGHT))
1971 sbits |= IEC958_AES0_CON_NOT_COPYRIGHT;
1972 if (val & AC_DIG1_LEVEL)
1973 sbits |= (IEC958_AES1_CON_ORIGINAL << 8);
1974 sbits |= val & (0x7f << 8);
1979 /* set digital convert verbs both for the given NID and its slaves */
1980 static void set_dig_out(struct hda_codec *codec, hda_nid_t nid,
1985 snd_hda_codec_write_cache(codec, nid, 0, verb, val);
1986 d = codec->slave_dig_outs;
1990 snd_hda_codec_write_cache(codec, *d, 0, verb, val);
1993 static inline void set_dig_out_convert(struct hda_codec *codec, hda_nid_t nid,
1997 set_dig_out(codec, nid, AC_VERB_SET_DIGI_CONVERT_1, dig1);
1999 set_dig_out(codec, nid, AC_VERB_SET_DIGI_CONVERT_2, dig2);
2002 static int snd_hda_spdif_default_put(struct snd_kcontrol *kcontrol,
2003 struct snd_ctl_elem_value *ucontrol)
2005 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2006 hda_nid_t nid = kcontrol->private_value;
2010 mutex_lock(&codec->spdif_mutex);
2011 codec->spdif_status = ucontrol->value.iec958.status[0] |
2012 ((unsigned int)ucontrol->value.iec958.status[1] << 8) |
2013 ((unsigned int)ucontrol->value.iec958.status[2] << 16) |
2014 ((unsigned int)ucontrol->value.iec958.status[3] << 24);
2015 val = convert_from_spdif_status(codec->spdif_status);
2016 val |= codec->spdif_ctls & 1;
2017 change = codec->spdif_ctls != val;
2018 codec->spdif_ctls = val;
2021 set_dig_out_convert(codec, nid, val & 0xff, (val >> 8) & 0xff);
2023 mutex_unlock(&codec->spdif_mutex);
2027 #define snd_hda_spdif_out_switch_info snd_ctl_boolean_mono_info
2029 static int snd_hda_spdif_out_switch_get(struct snd_kcontrol *kcontrol,
2030 struct snd_ctl_elem_value *ucontrol)
2032 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2034 ucontrol->value.integer.value[0] = codec->spdif_ctls & AC_DIG1_ENABLE;
2038 static int snd_hda_spdif_out_switch_put(struct snd_kcontrol *kcontrol,
2039 struct snd_ctl_elem_value *ucontrol)
2041 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2042 hda_nid_t nid = kcontrol->private_value;
2046 mutex_lock(&codec->spdif_mutex);
2047 val = codec->spdif_ctls & ~AC_DIG1_ENABLE;
2048 if (ucontrol->value.integer.value[0])
2049 val |= AC_DIG1_ENABLE;
2050 change = codec->spdif_ctls != val;
2052 codec->spdif_ctls = val;
2053 set_dig_out_convert(codec, nid, val & 0xff, -1);
2054 /* unmute amp switch (if any) */
2055 if ((get_wcaps(codec, nid) & AC_WCAP_OUT_AMP) &&
2056 (val & AC_DIG1_ENABLE))
2057 snd_hda_codec_amp_stereo(codec, nid, HDA_OUTPUT, 0,
2060 mutex_unlock(&codec->spdif_mutex);
2064 static struct snd_kcontrol_new dig_mixes[] = {
2066 .access = SNDRV_CTL_ELEM_ACCESS_READ,
2067 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2068 .name = SNDRV_CTL_NAME_IEC958("",PLAYBACK,CON_MASK),
2069 .info = snd_hda_spdif_mask_info,
2070 .get = snd_hda_spdif_cmask_get,
2073 .access = SNDRV_CTL_ELEM_ACCESS_READ,
2074 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2075 .name = SNDRV_CTL_NAME_IEC958("",PLAYBACK,PRO_MASK),
2076 .info = snd_hda_spdif_mask_info,
2077 .get = snd_hda_spdif_pmask_get,
2080 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2081 .name = SNDRV_CTL_NAME_IEC958("",PLAYBACK,DEFAULT),
2082 .info = snd_hda_spdif_mask_info,
2083 .get = snd_hda_spdif_default_get,
2084 .put = snd_hda_spdif_default_put,
2087 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2088 .name = SNDRV_CTL_NAME_IEC958("",PLAYBACK,SWITCH),
2089 .info = snd_hda_spdif_out_switch_info,
2090 .get = snd_hda_spdif_out_switch_get,
2091 .put = snd_hda_spdif_out_switch_put,
2096 #define SPDIF_MAX_IDX 4 /* 4 instances should be enough to probe */
2099 * snd_hda_create_spdif_out_ctls - create Output SPDIF-related controls
2100 * @codec: the HDA codec
2101 * @nid: audio out widget NID
2103 * Creates controls related with the SPDIF output.
2104 * Called from each patch supporting the SPDIF out.
2106 * Returns 0 if successful, or a negative error code.
2108 int snd_hda_create_spdif_out_ctls(struct hda_codec *codec, hda_nid_t nid)
2111 struct snd_kcontrol *kctl;
2112 struct snd_kcontrol_new *dig_mix;
2115 for (idx = 0; idx < SPDIF_MAX_IDX; idx++) {
2116 if (!_snd_hda_find_mixer_ctl(codec, "IEC958 Playback Switch",
2120 if (idx >= SPDIF_MAX_IDX) {
2121 printk(KERN_ERR "hda_codec: too many IEC958 outputs\n");
2124 for (dig_mix = dig_mixes; dig_mix->name; dig_mix++) {
2125 kctl = snd_ctl_new1(dig_mix, codec);
2128 kctl->id.index = idx;
2129 kctl->private_value = nid;
2130 err = snd_hda_ctl_add(codec, kctl);
2135 snd_hda_codec_read(codec, nid, 0,
2136 AC_VERB_GET_DIGI_CONVERT_1, 0);
2137 codec->spdif_status = convert_to_spdif_status(codec->spdif_ctls);
2140 EXPORT_SYMBOL_HDA(snd_hda_create_spdif_out_ctls);
2143 * SPDIF sharing with analog output
2145 static int spdif_share_sw_get(struct snd_kcontrol *kcontrol,
2146 struct snd_ctl_elem_value *ucontrol)
2148 struct hda_multi_out *mout = snd_kcontrol_chip(kcontrol);
2149 ucontrol->value.integer.value[0] = mout->share_spdif;
2153 static int spdif_share_sw_put(struct snd_kcontrol *kcontrol,
2154 struct snd_ctl_elem_value *ucontrol)
2156 struct hda_multi_out *mout = snd_kcontrol_chip(kcontrol);
2157 mout->share_spdif = !!ucontrol->value.integer.value[0];
2161 static struct snd_kcontrol_new spdif_share_sw = {
2162 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2163 .name = "IEC958 Default PCM Playback Switch",
2164 .info = snd_ctl_boolean_mono_info,
2165 .get = spdif_share_sw_get,
2166 .put = spdif_share_sw_put,
2169 int snd_hda_create_spdif_share_sw(struct hda_codec *codec,
2170 struct hda_multi_out *mout)
2172 if (!mout->dig_out_nid)
2174 /* ATTENTION: here mout is passed as private_data, instead of codec */
2175 return snd_hda_ctl_add(codec,
2176 snd_ctl_new1(&spdif_share_sw, mout));
2178 EXPORT_SYMBOL_HDA(snd_hda_create_spdif_share_sw);
2184 #define snd_hda_spdif_in_switch_info snd_hda_spdif_out_switch_info
2186 static int snd_hda_spdif_in_switch_get(struct snd_kcontrol *kcontrol,
2187 struct snd_ctl_elem_value *ucontrol)
2189 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2191 ucontrol->value.integer.value[0] = codec->spdif_in_enable;
2195 static int snd_hda_spdif_in_switch_put(struct snd_kcontrol *kcontrol,
2196 struct snd_ctl_elem_value *ucontrol)
2198 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2199 hda_nid_t nid = kcontrol->private_value;
2200 unsigned int val = !!ucontrol->value.integer.value[0];
2203 mutex_lock(&codec->spdif_mutex);
2204 change = codec->spdif_in_enable != val;
2206 codec->spdif_in_enable = val;
2207 snd_hda_codec_write_cache(codec, nid, 0,
2208 AC_VERB_SET_DIGI_CONVERT_1, val);
2210 mutex_unlock(&codec->spdif_mutex);
2214 static int snd_hda_spdif_in_status_get(struct snd_kcontrol *kcontrol,
2215 struct snd_ctl_elem_value *ucontrol)
2217 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2218 hda_nid_t nid = kcontrol->private_value;
2222 val = snd_hda_codec_read(codec, nid, 0, AC_VERB_GET_DIGI_CONVERT_1, 0);
2223 sbits = convert_to_spdif_status(val);
2224 ucontrol->value.iec958.status[0] = sbits;
2225 ucontrol->value.iec958.status[1] = sbits >> 8;
2226 ucontrol->value.iec958.status[2] = sbits >> 16;
2227 ucontrol->value.iec958.status[3] = sbits >> 24;
2231 static struct snd_kcontrol_new dig_in_ctls[] = {
2233 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2234 .name = SNDRV_CTL_NAME_IEC958("",CAPTURE,SWITCH),
2235 .info = snd_hda_spdif_in_switch_info,
2236 .get = snd_hda_spdif_in_switch_get,
2237 .put = snd_hda_spdif_in_switch_put,
2240 .access = SNDRV_CTL_ELEM_ACCESS_READ,
2241 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2242 .name = SNDRV_CTL_NAME_IEC958("",CAPTURE,DEFAULT),
2243 .info = snd_hda_spdif_mask_info,
2244 .get = snd_hda_spdif_in_status_get,
2250 * snd_hda_create_spdif_in_ctls - create Input SPDIF-related controls
2251 * @codec: the HDA codec
2252 * @nid: audio in widget NID
2254 * Creates controls related with the SPDIF input.
2255 * Called from each patch supporting the SPDIF in.
2257 * Returns 0 if successful, or a negative error code.
2259 int snd_hda_create_spdif_in_ctls(struct hda_codec *codec, hda_nid_t nid)
2262 struct snd_kcontrol *kctl;
2263 struct snd_kcontrol_new *dig_mix;
2266 for (idx = 0; idx < SPDIF_MAX_IDX; idx++) {
2267 if (!_snd_hda_find_mixer_ctl(codec, "IEC958 Capture Switch",
2271 if (idx >= SPDIF_MAX_IDX) {
2272 printk(KERN_ERR "hda_codec: too many IEC958 inputs\n");
2275 for (dig_mix = dig_in_ctls; dig_mix->name; dig_mix++) {
2276 kctl = snd_ctl_new1(dig_mix, codec);
2279 kctl->private_value = nid;
2280 err = snd_hda_ctl_add(codec, kctl);
2284 codec->spdif_in_enable =
2285 snd_hda_codec_read(codec, nid, 0,
2286 AC_VERB_GET_DIGI_CONVERT_1, 0) &
2290 EXPORT_SYMBOL_HDA(snd_hda_create_spdif_in_ctls);
2292 #ifdef SND_HDA_NEEDS_RESUME
2297 /* build a 32bit cache key with the widget id and the command parameter */
2298 #define build_cmd_cache_key(nid, verb) ((verb << 8) | nid)
2299 #define get_cmd_cache_nid(key) ((key) & 0xff)
2300 #define get_cmd_cache_cmd(key) (((key) >> 8) & 0xffff)
2303 * snd_hda_codec_write_cache - send a single command with caching
2304 * @codec: the HDA codec
2305 * @nid: NID to send the command
2306 * @direct: direct flag
2307 * @verb: the verb to send
2308 * @parm: the parameter for the verb
2310 * Send a single command without waiting for response.
2312 * Returns 0 if successful, or a negative error code.
2314 int snd_hda_codec_write_cache(struct hda_codec *codec, hda_nid_t nid,
2315 int direct, unsigned int verb, unsigned int parm)
2317 int err = snd_hda_codec_write(codec, nid, direct, verb, parm);
2318 struct hda_cache_head *c;
2323 /* parm may contain the verb stuff for get/set amp */
2324 verb = verb | (parm >> 8);
2326 key = build_cmd_cache_key(nid, verb);
2327 mutex_lock(&codec->bus->cmd_mutex);
2328 c = get_alloc_hash(&codec->cmd_cache, key);
2331 mutex_unlock(&codec->bus->cmd_mutex);
2334 EXPORT_SYMBOL_HDA(snd_hda_codec_write_cache);
2336 /* resume the all commands from the cache */
2337 void snd_hda_codec_resume_cache(struct hda_codec *codec)
2339 struct hda_cache_head *buffer = codec->cmd_cache.buf.list;
2342 for (i = 0; i < codec->cmd_cache.buf.used; i++, buffer++) {
2343 u32 key = buffer->key;
2346 snd_hda_codec_write(codec, get_cmd_cache_nid(key), 0,
2347 get_cmd_cache_cmd(key), buffer->val);
2350 EXPORT_SYMBOL_HDA(snd_hda_codec_resume_cache);
2353 * snd_hda_sequence_write_cache - sequence writes with caching
2354 * @codec: the HDA codec
2355 * @seq: VERB array to send
2357 * Send the commands sequentially from the given array.
2358 * Thte commands are recorded on cache for power-save and resume.
2359 * The array must be terminated with NID=0.
2361 void snd_hda_sequence_write_cache(struct hda_codec *codec,
2362 const struct hda_verb *seq)
2364 for (; seq->nid; seq++)
2365 snd_hda_codec_write_cache(codec, seq->nid, 0, seq->verb,
2368 EXPORT_SYMBOL_HDA(snd_hda_sequence_write_cache);
2369 #endif /* SND_HDA_NEEDS_RESUME */
2372 * set power state of the codec
2374 static void hda_set_power_state(struct hda_codec *codec, hda_nid_t fg,
2375 unsigned int power_state)
2380 /* this delay seems necessary to avoid click noise at power-down */
2381 if (power_state == AC_PWRST_D3)
2383 snd_hda_codec_read(codec, fg, 0, AC_VERB_SET_POWER_STATE,
2385 /* partial workaround for "azx_get_response timeout" */
2386 if (power_state == AC_PWRST_D0)
2389 nid = codec->start_nid;
2390 for (i = 0; i < codec->num_nodes; i++, nid++) {
2391 unsigned int wcaps = get_wcaps(codec, nid);
2392 if (wcaps & AC_WCAP_POWER) {
2393 unsigned int wid_type = get_wcaps_type(wcaps);
2394 if (power_state == AC_PWRST_D3 &&
2395 wid_type == AC_WID_PIN) {
2396 unsigned int pincap;
2398 * don't power down the widget if it controls
2399 * eapd and EAPD_BTLENABLE is set.
2401 pincap = snd_hda_query_pin_caps(codec, nid);
2402 if (pincap & AC_PINCAP_EAPD) {
2403 int eapd = snd_hda_codec_read(codec,
2405 AC_VERB_GET_EAPD_BTLENABLE, 0);
2411 snd_hda_codec_write(codec, nid, 0,
2412 AC_VERB_SET_POWER_STATE,
2417 if (power_state == AC_PWRST_D0) {
2418 unsigned long end_time;
2421 /* wait until the codec reachs to D0 */
2422 end_time = jiffies + msecs_to_jiffies(500);
2424 state = snd_hda_codec_read(codec, fg, 0,
2425 AC_VERB_GET_POWER_STATE, 0);
2426 if (state == power_state)
2429 } while (time_after_eq(end_time, jiffies));
2433 #ifdef CONFIG_SND_HDA_HWDEP
2434 /* execute additional init verbs */
2435 static void hda_exec_init_verbs(struct hda_codec *codec)
2437 if (codec->init_verbs.list)
2438 snd_hda_sequence_write(codec, codec->init_verbs.list);
2441 static inline void hda_exec_init_verbs(struct hda_codec *codec) {}
2444 #ifdef SND_HDA_NEEDS_RESUME
2446 * call suspend and power-down; used both from PM and power-save
2448 static void hda_call_codec_suspend(struct hda_codec *codec)
2450 if (codec->patch_ops.suspend)
2451 codec->patch_ops.suspend(codec, PMSG_SUSPEND);
2452 hda_set_power_state(codec,
2453 codec->afg ? codec->afg : codec->mfg,
2455 #ifdef CONFIG_SND_HDA_POWER_SAVE
2456 snd_hda_update_power_acct(codec);
2457 cancel_delayed_work(&codec->power_work);
2458 codec->power_on = 0;
2459 codec->power_transition = 0;
2460 codec->power_jiffies = jiffies;
2465 * kick up codec; used both from PM and power-save
2467 static void hda_call_codec_resume(struct hda_codec *codec)
2469 hda_set_power_state(codec,
2470 codec->afg ? codec->afg : codec->mfg,
2472 restore_pincfgs(codec); /* restore all current pin configs */
2473 hda_exec_init_verbs(codec);
2474 if (codec->patch_ops.resume)
2475 codec->patch_ops.resume(codec);
2477 if (codec->patch_ops.init)
2478 codec->patch_ops.init(codec);
2479 snd_hda_codec_resume_amp(codec);
2480 snd_hda_codec_resume_cache(codec);
2483 #endif /* SND_HDA_NEEDS_RESUME */
2487 * snd_hda_build_controls - build mixer controls
2490 * Creates mixer controls for each codec included in the bus.
2492 * Returns 0 if successful, otherwise a negative error code.
2494 int /*__devinit*/ snd_hda_build_controls(struct hda_bus *bus)
2496 struct hda_codec *codec;
2498 list_for_each_entry(codec, &bus->codec_list, list) {
2499 int err = snd_hda_codec_build_controls(codec);
2501 printk(KERN_ERR "hda_codec: cannot build controls"
2502 "for #%d (error %d)\n", codec->addr, err);
2503 err = snd_hda_codec_reset(codec);
2506 "hda_codec: cannot revert codec\n");
2513 EXPORT_SYMBOL_HDA(snd_hda_build_controls);
2515 int snd_hda_codec_build_controls(struct hda_codec *codec)
2518 hda_exec_init_verbs(codec);
2519 /* continue to initialize... */
2520 if (codec->patch_ops.init)
2521 err = codec->patch_ops.init(codec);
2522 if (!err && codec->patch_ops.build_controls)
2523 err = codec->patch_ops.build_controls(codec);
2532 struct hda_rate_tbl {
2534 unsigned int alsa_bits;
2535 unsigned int hda_fmt;
2538 static struct hda_rate_tbl rate_bits[] = {
2539 /* rate in Hz, ALSA rate bitmask, HDA format value */
2541 /* autodetected value used in snd_hda_query_supported_pcm */
2542 { 8000, SNDRV_PCM_RATE_8000, 0x0500 }, /* 1/6 x 48 */
2543 { 11025, SNDRV_PCM_RATE_11025, 0x4300 }, /* 1/4 x 44 */
2544 { 16000, SNDRV_PCM_RATE_16000, 0x0200 }, /* 1/3 x 48 */
2545 { 22050, SNDRV_PCM_RATE_22050, 0x4100 }, /* 1/2 x 44 */
2546 { 32000, SNDRV_PCM_RATE_32000, 0x0a00 }, /* 2/3 x 48 */
2547 { 44100, SNDRV_PCM_RATE_44100, 0x4000 }, /* 44 */
2548 { 48000, SNDRV_PCM_RATE_48000, 0x0000 }, /* 48 */
2549 { 88200, SNDRV_PCM_RATE_88200, 0x4800 }, /* 2 x 44 */
2550 { 96000, SNDRV_PCM_RATE_96000, 0x0800 }, /* 2 x 48 */
2551 { 176400, SNDRV_PCM_RATE_176400, 0x5800 },/* 4 x 44 */
2552 { 192000, SNDRV_PCM_RATE_192000, 0x1800 }, /* 4 x 48 */
2553 #define AC_PAR_PCM_RATE_BITS 11
2554 /* up to bits 10, 384kHZ isn't supported properly */
2556 /* not autodetected value */
2557 { 9600, SNDRV_PCM_RATE_KNOT, 0x0400 }, /* 1/5 x 48 */
2559 { 0 } /* terminator */
2563 * snd_hda_calc_stream_format - calculate format bitset
2564 * @rate: the sample rate
2565 * @channels: the number of channels
2566 * @format: the PCM format (SNDRV_PCM_FORMAT_XXX)
2567 * @maxbps: the max. bps
2569 * Calculate the format bitset from the given rate, channels and th PCM format.
2571 * Return zero if invalid.
2573 unsigned int snd_hda_calc_stream_format(unsigned int rate,
2574 unsigned int channels,
2575 unsigned int format,
2576 unsigned int maxbps)
2579 unsigned int val = 0;
2581 for (i = 0; rate_bits[i].hz; i++)
2582 if (rate_bits[i].hz == rate) {
2583 val = rate_bits[i].hda_fmt;
2586 if (!rate_bits[i].hz) {
2587 snd_printdd("invalid rate %d\n", rate);
2591 if (channels == 0 || channels > 8) {
2592 snd_printdd("invalid channels %d\n", channels);
2595 val |= channels - 1;
2597 switch (snd_pcm_format_width(format)) {
2598 case 8: val |= 0x00; break;
2599 case 16: val |= 0x10; break;
2603 if (maxbps >= 32 || format == SNDRV_PCM_FORMAT_FLOAT_LE)
2605 else if (maxbps >= 24)
2611 snd_printdd("invalid format width %d\n",
2612 snd_pcm_format_width(format));
2618 EXPORT_SYMBOL_HDA(snd_hda_calc_stream_format);
2620 static unsigned int get_pcm_param(struct hda_codec *codec, hda_nid_t nid)
2622 unsigned int val = 0;
2623 if (nid != codec->afg &&
2624 (get_wcaps(codec, nid) & AC_WCAP_FORMAT_OVRD))
2625 val = snd_hda_param_read(codec, nid, AC_PAR_PCM);
2626 if (!val || val == -1)
2627 val = snd_hda_param_read(codec, codec->afg, AC_PAR_PCM);
2628 if (!val || val == -1)
2633 static unsigned int query_pcm_param(struct hda_codec *codec, hda_nid_t nid)
2635 return query_caps_hash(codec, nid, HDA_HASH_PARPCM_KEY(nid),
2639 static unsigned int get_stream_param(struct hda_codec *codec, hda_nid_t nid)
2641 unsigned int streams = snd_hda_param_read(codec, nid, AC_PAR_STREAM);
2642 if (!streams || streams == -1)
2643 streams = snd_hda_param_read(codec, codec->afg, AC_PAR_STREAM);
2644 if (!streams || streams == -1)
2649 static unsigned int query_stream_param(struct hda_codec *codec, hda_nid_t nid)
2651 return query_caps_hash(codec, nid, HDA_HASH_PARSTR_KEY(nid),
2656 * snd_hda_query_supported_pcm - query the supported PCM rates and formats
2657 * @codec: the HDA codec
2658 * @nid: NID to query
2659 * @ratesp: the pointer to store the detected rate bitflags
2660 * @formatsp: the pointer to store the detected formats
2661 * @bpsp: the pointer to store the detected format widths
2663 * Queries the supported PCM rates and formats. The NULL @ratesp, @formatsp
2664 * or @bsps argument is ignored.
2666 * Returns 0 if successful, otherwise a negative error code.
2668 static int snd_hda_query_supported_pcm(struct hda_codec *codec, hda_nid_t nid,
2669 u32 *ratesp, u64 *formatsp, unsigned int *bpsp)
2671 unsigned int i, val, wcaps;
2673 wcaps = get_wcaps(codec, nid);
2674 val = query_pcm_param(codec, nid);
2678 for (i = 0; i < AC_PAR_PCM_RATE_BITS; i++) {
2680 rates |= rate_bits[i].alsa_bits;
2683 snd_printk(KERN_ERR "hda_codec: rates == 0 "
2684 "(nid=0x%x, val=0x%x, ovrd=%i)\n",
2686 (wcaps & AC_WCAP_FORMAT_OVRD) ? 1 : 0);
2692 if (formatsp || bpsp) {
2694 unsigned int streams, bps;
2696 streams = query_stream_param(codec, nid);
2701 if (streams & AC_SUPFMT_PCM) {
2702 if (val & AC_SUPPCM_BITS_8) {
2703 formats |= SNDRV_PCM_FMTBIT_U8;
2706 if (val & AC_SUPPCM_BITS_16) {
2707 formats |= SNDRV_PCM_FMTBIT_S16_LE;
2710 if (wcaps & AC_WCAP_DIGITAL) {
2711 if (val & AC_SUPPCM_BITS_32)
2712 formats |= SNDRV_PCM_FMTBIT_IEC958_SUBFRAME_LE;
2713 if (val & (AC_SUPPCM_BITS_20|AC_SUPPCM_BITS_24))
2714 formats |= SNDRV_PCM_FMTBIT_S32_LE;
2715 if (val & AC_SUPPCM_BITS_24)
2717 else if (val & AC_SUPPCM_BITS_20)
2719 } else if (val & (AC_SUPPCM_BITS_20|AC_SUPPCM_BITS_24|
2720 AC_SUPPCM_BITS_32)) {
2721 formats |= SNDRV_PCM_FMTBIT_S32_LE;
2722 if (val & AC_SUPPCM_BITS_32)
2724 else if (val & AC_SUPPCM_BITS_24)
2726 else if (val & AC_SUPPCM_BITS_20)
2730 if (streams & AC_SUPFMT_FLOAT32) {
2731 formats |= SNDRV_PCM_FMTBIT_FLOAT_LE;
2735 if (streams == AC_SUPFMT_AC3) {
2736 /* should be exclusive */
2737 /* temporary hack: we have still no proper support
2738 * for the direct AC3 stream...
2740 formats |= SNDRV_PCM_FMTBIT_U8;
2744 snd_printk(KERN_ERR "hda_codec: formats == 0 "
2745 "(nid=0x%x, val=0x%x, ovrd=%i, "
2748 (wcaps & AC_WCAP_FORMAT_OVRD) ? 1 : 0,
2753 *formatsp = formats;
2762 * snd_hda_is_supported_format - check whether the given node supports
2765 * Returns 1 if supported, 0 if not.
2767 int snd_hda_is_supported_format(struct hda_codec *codec, hda_nid_t nid,
2768 unsigned int format)
2771 unsigned int val = 0, rate, stream;
2773 val = query_pcm_param(codec, nid);
2777 rate = format & 0xff00;
2778 for (i = 0; i < AC_PAR_PCM_RATE_BITS; i++)
2779 if (rate_bits[i].hda_fmt == rate) {
2784 if (i >= AC_PAR_PCM_RATE_BITS)
2787 stream = query_stream_param(codec, nid);
2791 if (stream & AC_SUPFMT_PCM) {
2792 switch (format & 0xf0) {
2794 if (!(val & AC_SUPPCM_BITS_8))
2798 if (!(val & AC_SUPPCM_BITS_16))
2802 if (!(val & AC_SUPPCM_BITS_20))
2806 if (!(val & AC_SUPPCM_BITS_24))
2810 if (!(val & AC_SUPPCM_BITS_32))
2817 /* FIXME: check for float32 and AC3? */
2822 EXPORT_SYMBOL_HDA(snd_hda_is_supported_format);
2827 static int hda_pcm_default_open_close(struct hda_pcm_stream *hinfo,
2828 struct hda_codec *codec,
2829 struct snd_pcm_substream *substream)
2834 static int hda_pcm_default_prepare(struct hda_pcm_stream *hinfo,
2835 struct hda_codec *codec,
2836 unsigned int stream_tag,
2837 unsigned int format,
2838 struct snd_pcm_substream *substream)
2840 snd_hda_codec_setup_stream(codec, hinfo->nid, stream_tag, 0, format);
2844 static int hda_pcm_default_cleanup(struct hda_pcm_stream *hinfo,
2845 struct hda_codec *codec,
2846 struct snd_pcm_substream *substream)
2848 snd_hda_codec_cleanup_stream(codec, hinfo->nid);
2852 static int set_pcm_default_values(struct hda_codec *codec,
2853 struct hda_pcm_stream *info)
2857 /* query support PCM information from the given NID */
2858 if (info->nid && (!info->rates || !info->formats)) {
2859 err = snd_hda_query_supported_pcm(codec, info->nid,
2860 info->rates ? NULL : &info->rates,
2861 info->formats ? NULL : &info->formats,
2862 info->maxbps ? NULL : &info->maxbps);
2866 if (info->ops.open == NULL)
2867 info->ops.open = hda_pcm_default_open_close;
2868 if (info->ops.close == NULL)
2869 info->ops.close = hda_pcm_default_open_close;
2870 if (info->ops.prepare == NULL) {
2871 if (snd_BUG_ON(!info->nid))
2873 info->ops.prepare = hda_pcm_default_prepare;
2875 if (info->ops.cleanup == NULL) {
2876 if (snd_BUG_ON(!info->nid))
2878 info->ops.cleanup = hda_pcm_default_cleanup;
2883 const char *snd_hda_pcm_type_name[HDA_PCM_NTYPES] = {
2884 "Audio", "SPDIF", "HDMI", "Modem"
2888 * get the empty PCM device number to assign
2890 static int get_empty_pcm_device(struct hda_bus *bus, int type)
2892 /* audio device indices; not linear to keep compatibility */
2893 static int audio_idx[HDA_PCM_NTYPES][5] = {
2894 [HDA_PCM_TYPE_AUDIO] = { 0, 2, 4, 5, -1 },
2895 [HDA_PCM_TYPE_SPDIF] = { 1, -1 },
2896 [HDA_PCM_TYPE_HDMI] = { 3, 7, 8, 9, -1 },
2897 [HDA_PCM_TYPE_MODEM] = { 6, -1 },
2901 if (type >= HDA_PCM_NTYPES) {
2902 snd_printk(KERN_WARNING "Invalid PCM type %d\n", type);
2906 for (i = 0; audio_idx[type][i] >= 0 ; i++)
2907 if (!test_and_set_bit(audio_idx[type][i], bus->pcm_dev_bits))
2908 return audio_idx[type][i];
2910 snd_printk(KERN_WARNING "Too many %s devices\n", snd_hda_pcm_type_name[type]);
2915 * attach a new PCM stream
2917 static int snd_hda_attach_pcm(struct hda_codec *codec, struct hda_pcm *pcm)
2919 struct hda_bus *bus = codec->bus;
2920 struct hda_pcm_stream *info;
2923 if (snd_BUG_ON(!pcm->name))
2925 for (stream = 0; stream < 2; stream++) {
2926 info = &pcm->stream[stream];
2927 if (info->substreams) {
2928 err = set_pcm_default_values(codec, info);
2933 return bus->ops.attach_pcm(bus, codec, pcm);
2936 /* assign all PCMs of the given codec */
2937 int snd_hda_codec_build_pcms(struct hda_codec *codec)
2942 if (!codec->num_pcms) {
2943 if (!codec->patch_ops.build_pcms)
2945 err = codec->patch_ops.build_pcms(codec);
2947 printk(KERN_ERR "hda_codec: cannot build PCMs"
2948 "for #%d (error %d)\n", codec->addr, err);
2949 err = snd_hda_codec_reset(codec);
2952 "hda_codec: cannot revert codec\n");
2957 for (pcm = 0; pcm < codec->num_pcms; pcm++) {
2958 struct hda_pcm *cpcm = &codec->pcm_info[pcm];
2961 if (!cpcm->stream[0].substreams && !cpcm->stream[1].substreams)
2962 continue; /* no substreams assigned */
2965 dev = get_empty_pcm_device(codec->bus, cpcm->pcm_type);
2967 continue; /* no fatal error */
2969 err = snd_hda_attach_pcm(codec, cpcm);
2971 printk(KERN_ERR "hda_codec: cannot attach "
2972 "PCM stream %d for codec #%d\n",
2974 continue; /* no fatal error */
2982 * snd_hda_build_pcms - build PCM information
2985 * Create PCM information for each codec included in the bus.
2987 * The build_pcms codec patch is requested to set up codec->num_pcms and
2988 * codec->pcm_info properly. The array is referred by the top-level driver
2989 * to create its PCM instances.
2990 * The allocated codec->pcm_info should be released in codec->patch_ops.free
2993 * At least, substreams, channels_min and channels_max must be filled for
2994 * each stream. substreams = 0 indicates that the stream doesn't exist.
2995 * When rates and/or formats are zero, the supported values are queried
2996 * from the given nid. The nid is used also by the default ops.prepare
2997 * and ops.cleanup callbacks.
2999 * The driver needs to call ops.open in its open callback. Similarly,
3000 * ops.close is supposed to be called in the close callback.
3001 * ops.prepare should be called in the prepare or hw_params callback
3002 * with the proper parameters for set up.
3003 * ops.cleanup should be called in hw_free for clean up of streams.
3005 * This function returns 0 if successfull, or a negative error code.
3007 int __devinit snd_hda_build_pcms(struct hda_bus *bus)
3009 struct hda_codec *codec;
3011 list_for_each_entry(codec, &bus->codec_list, list) {
3012 int err = snd_hda_codec_build_pcms(codec);
3018 EXPORT_SYMBOL_HDA(snd_hda_build_pcms);
3021 * snd_hda_check_board_config - compare the current codec with the config table
3022 * @codec: the HDA codec
3023 * @num_configs: number of config enums
3024 * @models: array of model name strings
3025 * @tbl: configuration table, terminated by null entries
3027 * Compares the modelname or PCI subsystem id of the current codec with the
3028 * given configuration table. If a matching entry is found, returns its
3029 * config value (supposed to be 0 or positive).
3031 * If no entries are matching, the function returns a negative value.
3033 int snd_hda_check_board_config(struct hda_codec *codec,
3034 int num_configs, const char **models,
3035 const struct snd_pci_quirk *tbl)
3037 if (codec->modelname && models) {
3039 for (i = 0; i < num_configs; i++) {
3041 !strcmp(codec->modelname, models[i])) {
3042 snd_printd(KERN_INFO "hda_codec: model '%s' is "
3043 "selected\n", models[i]);
3049 if (!codec->bus->pci || !tbl)
3052 tbl = snd_pci_quirk_lookup(codec->bus->pci, tbl);
3055 if (tbl->value >= 0 && tbl->value < num_configs) {
3056 #ifdef CONFIG_SND_DEBUG_VERBOSE
3058 const char *model = NULL;
3060 model = models[tbl->value];
3062 sprintf(tmp, "#%d", tbl->value);
3065 snd_printdd(KERN_INFO "hda_codec: model '%s' is selected "
3066 "for config %x:%x (%s)\n",
3067 model, tbl->subvendor, tbl->subdevice,
3068 (tbl->name ? tbl->name : "Unknown device"));
3074 EXPORT_SYMBOL_HDA(snd_hda_check_board_config);
3077 * snd_hda_check_board_codec_sid_config - compare the current codec
3078 subsystem ID with the
3081 This is important for Gateway notebooks with SB450 HDA Audio
3082 where the vendor ID of the PCI device is:
3083 ATI Technologies Inc SB450 HDA Audio [1002:437b]
3084 and the vendor/subvendor are found only at the codec.
3086 * @codec: the HDA codec
3087 * @num_configs: number of config enums
3088 * @models: array of model name strings
3089 * @tbl: configuration table, terminated by null entries
3091 * Compares the modelname or PCI subsystem id of the current codec with the
3092 * given configuration table. If a matching entry is found, returns its
3093 * config value (supposed to be 0 or positive).
3095 * If no entries are matching, the function returns a negative value.
3097 int snd_hda_check_board_codec_sid_config(struct hda_codec *codec,
3098 int num_configs, const char **models,
3099 const struct snd_pci_quirk *tbl)
3101 const struct snd_pci_quirk *q;
3103 /* Search for codec ID */
3104 for (q = tbl; q->subvendor; q++) {
3105 unsigned long vendorid = (q->subdevice) | (q->subvendor << 16);
3107 if (vendorid == codec->subsystem_id)
3116 if (tbl->value >= 0 && tbl->value < num_configs) {
3117 #ifdef CONFIG_SND_DEBUG_VERBOSE
3119 const char *model = NULL;
3121 model = models[tbl->value];
3123 sprintf(tmp, "#%d", tbl->value);
3126 snd_printdd(KERN_INFO "hda_codec: model '%s' is selected "
3127 "for config %x:%x (%s)\n",
3128 model, tbl->subvendor, tbl->subdevice,
3129 (tbl->name ? tbl->name : "Unknown device"));
3135 EXPORT_SYMBOL_HDA(snd_hda_check_board_codec_sid_config);
3138 * snd_hda_add_new_ctls - create controls from the array
3139 * @codec: the HDA codec
3140 * @knew: the array of struct snd_kcontrol_new
3142 * This helper function creates and add new controls in the given array.
3143 * The array must be terminated with an empty entry as terminator.
3145 * Returns 0 if successful, or a negative error code.
3147 int snd_hda_add_new_ctls(struct hda_codec *codec, struct snd_kcontrol_new *knew)
3151 for (; knew->name; knew++) {
3152 struct snd_kcontrol *kctl;
3153 kctl = snd_ctl_new1(knew, codec);
3156 err = snd_hda_ctl_add(codec, kctl);
3160 kctl = snd_ctl_new1(knew, codec);
3163 kctl->id.device = codec->addr;
3164 err = snd_hda_ctl_add(codec, kctl);
3171 EXPORT_SYMBOL_HDA(snd_hda_add_new_ctls);
3173 #ifdef CONFIG_SND_HDA_POWER_SAVE
3174 static void hda_set_power_state(struct hda_codec *codec, hda_nid_t fg,
3175 unsigned int power_state);
3177 static void hda_power_work(struct work_struct *work)
3179 struct hda_codec *codec =
3180 container_of(work, struct hda_codec, power_work.work);
3181 struct hda_bus *bus = codec->bus;
3183 if (!codec->power_on || codec->power_count) {
3184 codec->power_transition = 0;
3188 hda_call_codec_suspend(codec);
3189 if (bus->ops.pm_notify)
3190 bus->ops.pm_notify(bus);
3193 static void hda_keep_power_on(struct hda_codec *codec)
3195 codec->power_count++;
3196 codec->power_on = 1;
3197 codec->power_jiffies = jiffies;
3200 void snd_hda_update_power_acct(struct hda_codec *codec)
3202 unsigned long delta = jiffies - codec->power_jiffies;
3203 if (codec->power_on)
3204 codec->power_on_acct += delta;
3206 codec->power_off_acct += delta;
3207 codec->power_jiffies += delta;
3210 void snd_hda_power_up(struct hda_codec *codec)
3212 struct hda_bus *bus = codec->bus;
3214 codec->power_count++;
3215 if (codec->power_on || codec->power_transition)
3218 snd_hda_update_power_acct(codec);
3219 codec->power_on = 1;
3220 codec->power_jiffies = jiffies;
3221 if (bus->ops.pm_notify)
3222 bus->ops.pm_notify(bus);
3223 hda_call_codec_resume(codec);
3224 cancel_delayed_work(&codec->power_work);
3225 codec->power_transition = 0;
3227 EXPORT_SYMBOL_HDA(snd_hda_power_up);
3229 #define power_save(codec) \
3230 ((codec)->bus->power_save ? *(codec)->bus->power_save : 0)
3232 #define power_save(codec) \
3233 ((codec)->bus->power_save ? *(codec)->bus->power_save : 0)
3235 void snd_hda_power_down(struct hda_codec *codec)
3237 --codec->power_count;
3238 if (!codec->power_on || codec->power_count || codec->power_transition)
3240 if (power_save(codec)) {
3241 codec->power_transition = 1; /* avoid reentrance */
3242 queue_delayed_work(codec->bus->workq, &codec->power_work,
3243 msecs_to_jiffies(power_save(codec) * 1000));
3246 EXPORT_SYMBOL_HDA(snd_hda_power_down);
3248 int snd_hda_check_amp_list_power(struct hda_codec *codec,
3249 struct hda_loopback_check *check,
3252 struct hda_amp_list *p;
3255 if (!check->amplist)
3257 for (p = check->amplist; p->nid; p++) {
3262 return 0; /* nothing changed */
3264 for (p = check->amplist; p->nid; p++) {
3265 for (ch = 0; ch < 2; ch++) {
3266 v = snd_hda_codec_amp_read(codec, p->nid, ch, p->dir,
3268 if (!(v & HDA_AMP_MUTE) && v > 0) {
3269 if (!check->power_on) {
3270 check->power_on = 1;
3271 snd_hda_power_up(codec);
3277 if (check->power_on) {
3278 check->power_on = 0;
3279 snd_hda_power_down(codec);
3283 EXPORT_SYMBOL_HDA(snd_hda_check_amp_list_power);
3287 * Channel mode helper
3289 int snd_hda_ch_mode_info(struct hda_codec *codec,
3290 struct snd_ctl_elem_info *uinfo,
3291 const struct hda_channel_mode *chmode,
3294 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
3296 uinfo->value.enumerated.items = num_chmodes;
3297 if (uinfo->value.enumerated.item >= num_chmodes)
3298 uinfo->value.enumerated.item = num_chmodes - 1;
3299 sprintf(uinfo->value.enumerated.name, "%dch",
3300 chmode[uinfo->value.enumerated.item].channels);
3303 EXPORT_SYMBOL_HDA(snd_hda_ch_mode_info);
3305 int snd_hda_ch_mode_get(struct hda_codec *codec,
3306 struct snd_ctl_elem_value *ucontrol,
3307 const struct hda_channel_mode *chmode,
3313 for (i = 0; i < num_chmodes; i++) {
3314 if (max_channels == chmode[i].channels) {
3315 ucontrol->value.enumerated.item[0] = i;
3321 EXPORT_SYMBOL_HDA(snd_hda_ch_mode_get);
3323 int snd_hda_ch_mode_put(struct hda_codec *codec,
3324 struct snd_ctl_elem_value *ucontrol,
3325 const struct hda_channel_mode *chmode,
3331 mode = ucontrol->value.enumerated.item[0];
3332 if (mode >= num_chmodes)
3334 if (*max_channelsp == chmode[mode].channels)
3336 /* change the current channel setting */
3337 *max_channelsp = chmode[mode].channels;
3338 if (chmode[mode].sequence)
3339 snd_hda_sequence_write_cache(codec, chmode[mode].sequence);
3342 EXPORT_SYMBOL_HDA(snd_hda_ch_mode_put);
3347 int snd_hda_input_mux_info(const struct hda_input_mux *imux,
3348 struct snd_ctl_elem_info *uinfo)
3352 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
3354 uinfo->value.enumerated.items = imux->num_items;
3355 if (!imux->num_items)
3357 index = uinfo->value.enumerated.item;
3358 if (index >= imux->num_items)
3359 index = imux->num_items - 1;
3360 strcpy(uinfo->value.enumerated.name, imux->items[index].label);
3363 EXPORT_SYMBOL_HDA(snd_hda_input_mux_info);
3365 int snd_hda_input_mux_put(struct hda_codec *codec,
3366 const struct hda_input_mux *imux,
3367 struct snd_ctl_elem_value *ucontrol,
3369 unsigned int *cur_val)
3373 if (!imux->num_items)
3375 idx = ucontrol->value.enumerated.item[0];
3376 if (idx >= imux->num_items)
3377 idx = imux->num_items - 1;
3378 if (*cur_val == idx)
3380 snd_hda_codec_write_cache(codec, nid, 0, AC_VERB_SET_CONNECT_SEL,
3381 imux->items[idx].index);
3385 EXPORT_SYMBOL_HDA(snd_hda_input_mux_put);
3389 * Multi-channel / digital-out PCM helper functions
3392 /* setup SPDIF output stream */
3393 static void setup_dig_out_stream(struct hda_codec *codec, hda_nid_t nid,
3394 unsigned int stream_tag, unsigned int format)
3396 /* turn off SPDIF once; otherwise the IEC958 bits won't be updated */
3397 if (codec->spdif_status_reset && (codec->spdif_ctls & AC_DIG1_ENABLE))
3398 set_dig_out_convert(codec, nid,
3399 codec->spdif_ctls & ~AC_DIG1_ENABLE & 0xff,
3401 snd_hda_codec_setup_stream(codec, nid, stream_tag, 0, format);
3402 if (codec->slave_dig_outs) {
3404 for (d = codec->slave_dig_outs; *d; d++)
3405 snd_hda_codec_setup_stream(codec, *d, stream_tag, 0,
3408 /* turn on again (if needed) */
3409 if (codec->spdif_status_reset && (codec->spdif_ctls & AC_DIG1_ENABLE))
3410 set_dig_out_convert(codec, nid,
3411 codec->spdif_ctls & 0xff, -1);
3414 static void cleanup_dig_out_stream(struct hda_codec *codec, hda_nid_t nid)
3416 snd_hda_codec_cleanup_stream(codec, nid);
3417 if (codec->slave_dig_outs) {
3419 for (d = codec->slave_dig_outs; *d; d++)
3420 snd_hda_codec_cleanup_stream(codec, *d);
3424 /* call each reboot notifier */
3425 void snd_hda_bus_reboot_notify(struct hda_bus *bus)
3427 struct hda_codec *codec;
3431 list_for_each_entry(codec, &bus->codec_list, list) {
3432 #ifdef CONFIG_SND_HDA_POWER_SAVE
3433 if (!codec->power_on)
3436 if (codec->patch_ops.reboot_notify)
3437 codec->patch_ops.reboot_notify(codec);
3440 EXPORT_SYMBOL_HDA(snd_hda_bus_reboot_notify);
3443 * open the digital out in the exclusive mode
3445 int snd_hda_multi_out_dig_open(struct hda_codec *codec,
3446 struct hda_multi_out *mout)
3448 mutex_lock(&codec->spdif_mutex);
3449 if (mout->dig_out_used == HDA_DIG_ANALOG_DUP)
3450 /* already opened as analog dup; reset it once */
3451 cleanup_dig_out_stream(codec, mout->dig_out_nid);
3452 mout->dig_out_used = HDA_DIG_EXCLUSIVE;
3453 mutex_unlock(&codec->spdif_mutex);
3456 EXPORT_SYMBOL_HDA(snd_hda_multi_out_dig_open);
3458 int snd_hda_multi_out_dig_prepare(struct hda_codec *codec,
3459 struct hda_multi_out *mout,
3460 unsigned int stream_tag,
3461 unsigned int format,
3462 struct snd_pcm_substream *substream)
3464 mutex_lock(&codec->spdif_mutex);
3465 setup_dig_out_stream(codec, mout->dig_out_nid, stream_tag, format);
3466 mutex_unlock(&codec->spdif_mutex);
3469 EXPORT_SYMBOL_HDA(snd_hda_multi_out_dig_prepare);
3471 int snd_hda_multi_out_dig_cleanup(struct hda_codec *codec,
3472 struct hda_multi_out *mout)
3474 mutex_lock(&codec->spdif_mutex);
3475 cleanup_dig_out_stream(codec, mout->dig_out_nid);
3476 mutex_unlock(&codec->spdif_mutex);
3479 EXPORT_SYMBOL_HDA(snd_hda_multi_out_dig_cleanup);
3482 * release the digital out
3484 int snd_hda_multi_out_dig_close(struct hda_codec *codec,
3485 struct hda_multi_out *mout)
3487 mutex_lock(&codec->spdif_mutex);
3488 mout->dig_out_used = 0;
3489 mutex_unlock(&codec->spdif_mutex);
3492 EXPORT_SYMBOL_HDA(snd_hda_multi_out_dig_close);
3495 * set up more restrictions for analog out
3497 int snd_hda_multi_out_analog_open(struct hda_codec *codec,
3498 struct hda_multi_out *mout,
3499 struct snd_pcm_substream *substream,
3500 struct hda_pcm_stream *hinfo)
3502 struct snd_pcm_runtime *runtime = substream->runtime;
3503 runtime->hw.channels_max = mout->max_channels;
3504 if (mout->dig_out_nid) {
3505 if (!mout->analog_rates) {
3506 mout->analog_rates = hinfo->rates;
3507 mout->analog_formats = hinfo->formats;
3508 mout->analog_maxbps = hinfo->maxbps;
3510 runtime->hw.rates = mout->analog_rates;
3511 runtime->hw.formats = mout->analog_formats;
3512 hinfo->maxbps = mout->analog_maxbps;
3514 if (!mout->spdif_rates) {
3515 snd_hda_query_supported_pcm(codec, mout->dig_out_nid,
3517 &mout->spdif_formats,
3518 &mout->spdif_maxbps);
3520 mutex_lock(&codec->spdif_mutex);
3521 if (mout->share_spdif) {
3522 if ((runtime->hw.rates & mout->spdif_rates) &&
3523 (runtime->hw.formats & mout->spdif_formats)) {
3524 runtime->hw.rates &= mout->spdif_rates;
3525 runtime->hw.formats &= mout->spdif_formats;
3526 if (mout->spdif_maxbps < hinfo->maxbps)
3527 hinfo->maxbps = mout->spdif_maxbps;
3529 mout->share_spdif = 0;
3530 /* FIXME: need notify? */
3533 mutex_unlock(&codec->spdif_mutex);
3535 return snd_pcm_hw_constraint_step(substream->runtime, 0,
3536 SNDRV_PCM_HW_PARAM_CHANNELS, 2);
3538 EXPORT_SYMBOL_HDA(snd_hda_multi_out_analog_open);
3541 * set up the i/o for analog out
3542 * when the digital out is available, copy the front out to digital out, too.
3544 int snd_hda_multi_out_analog_prepare(struct hda_codec *codec,
3545 struct hda_multi_out *mout,
3546 unsigned int stream_tag,
3547 unsigned int format,
3548 struct snd_pcm_substream *substream)
3550 hda_nid_t *nids = mout->dac_nids;
3551 int chs = substream->runtime->channels;
3554 mutex_lock(&codec->spdif_mutex);
3555 if (mout->dig_out_nid && mout->share_spdif &&
3556 mout->dig_out_used != HDA_DIG_EXCLUSIVE) {
3558 snd_hda_is_supported_format(codec, mout->dig_out_nid,
3560 !(codec->spdif_status & IEC958_AES0_NONAUDIO)) {
3561 mout->dig_out_used = HDA_DIG_ANALOG_DUP;
3562 setup_dig_out_stream(codec, mout->dig_out_nid,
3563 stream_tag, format);
3565 mout->dig_out_used = 0;
3566 cleanup_dig_out_stream(codec, mout->dig_out_nid);
3569 mutex_unlock(&codec->spdif_mutex);
3572 snd_hda_codec_setup_stream(codec, nids[HDA_FRONT], stream_tag,
3574 if (!mout->no_share_stream &&
3575 mout->hp_nid && mout->hp_nid != nids[HDA_FRONT])
3576 /* headphone out will just decode front left/right (stereo) */
3577 snd_hda_codec_setup_stream(codec, mout->hp_nid, stream_tag,
3579 /* extra outputs copied from front */
3580 for (i = 0; i < ARRAY_SIZE(mout->extra_out_nid); i++)
3581 if (!mout->no_share_stream && mout->extra_out_nid[i])
3582 snd_hda_codec_setup_stream(codec,
3583 mout->extra_out_nid[i],
3584 stream_tag, 0, format);
3587 for (i = 1; i < mout->num_dacs; i++) {
3588 if (chs >= (i + 1) * 2) /* independent out */
3589 snd_hda_codec_setup_stream(codec, nids[i], stream_tag,
3591 else if (!mout->no_share_stream) /* copy front */
3592 snd_hda_codec_setup_stream(codec, nids[i], stream_tag,
3597 EXPORT_SYMBOL_HDA(snd_hda_multi_out_analog_prepare);
3600 * clean up the setting for analog out
3602 int snd_hda_multi_out_analog_cleanup(struct hda_codec *codec,
3603 struct hda_multi_out *mout)
3605 hda_nid_t *nids = mout->dac_nids;
3608 for (i = 0; i < mout->num_dacs; i++)
3609 snd_hda_codec_cleanup_stream(codec, nids[i]);
3611 snd_hda_codec_cleanup_stream(codec, mout->hp_nid);
3612 for (i = 0; i < ARRAY_SIZE(mout->extra_out_nid); i++)
3613 if (mout->extra_out_nid[i])
3614 snd_hda_codec_cleanup_stream(codec,
3615 mout->extra_out_nid[i]);
3616 mutex_lock(&codec->spdif_mutex);
3617 if (mout->dig_out_nid && mout->dig_out_used == HDA_DIG_ANALOG_DUP) {
3618 cleanup_dig_out_stream(codec, mout->dig_out_nid);
3619 mout->dig_out_used = 0;
3621 mutex_unlock(&codec->spdif_mutex);
3624 EXPORT_SYMBOL_HDA(snd_hda_multi_out_analog_cleanup);
3627 * Helper for automatic pin configuration
3630 static int is_in_nid_list(hda_nid_t nid, hda_nid_t *list)
3632 for (; *list; list++)
3640 * Sort an associated group of pins according to their sequence numbers.
3642 static void sort_pins_by_sequence(hda_nid_t * pins, short * sequences,
3649 for (i = 0; i < num_pins; i++) {
3650 for (j = i + 1; j < num_pins; j++) {
3651 if (sequences[i] > sequences[j]) {
3653 sequences[i] = sequences[j];
3665 * Parse all pin widgets and store the useful pin nids to cfg
3667 * The number of line-outs or any primary output is stored in line_outs,
3668 * and the corresponding output pins are assigned to line_out_pins[],
3669 * in the order of front, rear, CLFE, side, ...
3671 * If more extra outputs (speaker and headphone) are found, the pins are
3672 * assisnged to hp_pins[] and speaker_pins[], respectively. If no line-out jack
3673 * is detected, one of speaker of HP pins is assigned as the primary
3674 * output, i.e. to line_out_pins[0]. So, line_outs is always positive
3675 * if any analog output exists.
3677 * The analog input pins are assigned to input_pins array.
3678 * The digital input/output pins are assigned to dig_in_pin and dig_out_pin,
3681 int snd_hda_parse_pin_def_config(struct hda_codec *codec,
3682 struct auto_pin_cfg *cfg,
3683 hda_nid_t *ignore_nids)
3685 hda_nid_t nid, end_nid;
3686 short seq, assoc_line_out, assoc_speaker;
3687 short sequences_line_out[ARRAY_SIZE(cfg->line_out_pins)];
3688 short sequences_speaker[ARRAY_SIZE(cfg->speaker_pins)];
3689 short sequences_hp[ARRAY_SIZE(cfg->hp_pins)];
3691 memset(cfg, 0, sizeof(*cfg));
3693 memset(sequences_line_out, 0, sizeof(sequences_line_out));
3694 memset(sequences_speaker, 0, sizeof(sequences_speaker));
3695 memset(sequences_hp, 0, sizeof(sequences_hp));
3696 assoc_line_out = assoc_speaker = 0;
3698 end_nid = codec->start_nid + codec->num_nodes;
3699 for (nid = codec->start_nid; nid < end_nid; nid++) {
3700 unsigned int wid_caps = get_wcaps(codec, nid);
3701 unsigned int wid_type = get_wcaps_type(wid_caps);
3702 unsigned int def_conf;
3705 /* read all default configuration for pin complex */
3706 if (wid_type != AC_WID_PIN)
3708 /* ignore the given nids (e.g. pc-beep returns error) */
3709 if (ignore_nids && is_in_nid_list(nid, ignore_nids))
3712 def_conf = snd_hda_codec_get_pincfg(codec, nid);
3713 if (get_defcfg_connect(def_conf) == AC_JACK_PORT_NONE)
3715 loc = get_defcfg_location(def_conf);
3716 switch (get_defcfg_device(def_conf)) {
3717 case AC_JACK_LINE_OUT:
3718 seq = get_defcfg_sequence(def_conf);
3719 assoc = get_defcfg_association(def_conf);
3721 if (!(wid_caps & AC_WCAP_STEREO))
3722 if (!cfg->mono_out_pin)
3723 cfg->mono_out_pin = nid;
3726 if (!assoc_line_out)
3727 assoc_line_out = assoc;
3728 else if (assoc_line_out != assoc)
3730 if (cfg->line_outs >= ARRAY_SIZE(cfg->line_out_pins))
3732 cfg->line_out_pins[cfg->line_outs] = nid;
3733 sequences_line_out[cfg->line_outs] = seq;
3736 case AC_JACK_SPEAKER:
3737 seq = get_defcfg_sequence(def_conf);
3738 assoc = get_defcfg_association(def_conf);
3741 if (! assoc_speaker)
3742 assoc_speaker = assoc;
3743 else if (assoc_speaker != assoc)
3745 if (cfg->speaker_outs >= ARRAY_SIZE(cfg->speaker_pins))
3747 cfg->speaker_pins[cfg->speaker_outs] = nid;
3748 sequences_speaker[cfg->speaker_outs] = seq;
3749 cfg->speaker_outs++;
3751 case AC_JACK_HP_OUT:
3752 seq = get_defcfg_sequence(def_conf);
3753 assoc = get_defcfg_association(def_conf);
3754 if (cfg->hp_outs >= ARRAY_SIZE(cfg->hp_pins))
3756 cfg->hp_pins[cfg->hp_outs] = nid;
3757 sequences_hp[cfg->hp_outs] = (assoc << 4) | seq;
3760 case AC_JACK_MIC_IN: {
3762 if (loc == AC_JACK_LOC_FRONT) {
3763 preferred = AUTO_PIN_FRONT_MIC;
3766 preferred = AUTO_PIN_MIC;
3767 alt = AUTO_PIN_FRONT_MIC;
3769 if (!cfg->input_pins[preferred])
3770 cfg->input_pins[preferred] = nid;
3771 else if (!cfg->input_pins[alt])
3772 cfg->input_pins[alt] = nid;
3775 case AC_JACK_LINE_IN:
3776 if (loc == AC_JACK_LOC_FRONT)
3777 cfg->input_pins[AUTO_PIN_FRONT_LINE] = nid;
3779 cfg->input_pins[AUTO_PIN_LINE] = nid;
3782 cfg->input_pins[AUTO_PIN_CD] = nid;
3785 cfg->input_pins[AUTO_PIN_AUX] = nid;
3787 case AC_JACK_SPDIF_OUT:
3788 case AC_JACK_DIG_OTHER_OUT:
3789 if (cfg->dig_outs >= ARRAY_SIZE(cfg->dig_out_pins))
3791 cfg->dig_out_pins[cfg->dig_outs] = nid;
3792 cfg->dig_out_type[cfg->dig_outs] =
3793 (loc == AC_JACK_LOC_HDMI) ?
3794 HDA_PCM_TYPE_HDMI : HDA_PCM_TYPE_SPDIF;
3797 case AC_JACK_SPDIF_IN:
3798 case AC_JACK_DIG_OTHER_IN:
3799 cfg->dig_in_pin = nid;
3800 if (loc == AC_JACK_LOC_HDMI)
3801 cfg->dig_in_type = HDA_PCM_TYPE_HDMI;
3803 cfg->dig_in_type = HDA_PCM_TYPE_SPDIF;
3809 * If no line-out is defined but multiple HPs are found,
3810 * some of them might be the real line-outs.
3812 if (!cfg->line_outs && cfg->hp_outs > 1) {
3814 while (i < cfg->hp_outs) {
3815 /* The real HPs should have the sequence 0x0f */
3816 if ((sequences_hp[i] & 0x0f) == 0x0f) {
3820 /* Move it to the line-out table */
3821 cfg->line_out_pins[cfg->line_outs] = cfg->hp_pins[i];
3822 sequences_line_out[cfg->line_outs] = sequences_hp[i];
3825 memmove(cfg->hp_pins + i, cfg->hp_pins + i + 1,
3826 sizeof(cfg->hp_pins[0]) * (cfg->hp_outs - i));
3827 memmove(sequences_hp + i - 1, sequences_hp + i,
3828 sizeof(sequences_hp[0]) * (cfg->hp_outs - i));
3832 /* sort by sequence */
3833 sort_pins_by_sequence(cfg->line_out_pins, sequences_line_out,
3835 sort_pins_by_sequence(cfg->speaker_pins, sequences_speaker,
3837 sort_pins_by_sequence(cfg->hp_pins, sequences_hp,
3840 /* if we have only one mic, make it AUTO_PIN_MIC */
3841 if (!cfg->input_pins[AUTO_PIN_MIC] &&
3842 cfg->input_pins[AUTO_PIN_FRONT_MIC]) {
3843 cfg->input_pins[AUTO_PIN_MIC] =
3844 cfg->input_pins[AUTO_PIN_FRONT_MIC];
3845 cfg->input_pins[AUTO_PIN_FRONT_MIC] = 0;
3847 /* ditto for line-in */
3848 if (!cfg->input_pins[AUTO_PIN_LINE] &&
3849 cfg->input_pins[AUTO_PIN_FRONT_LINE]) {
3850 cfg->input_pins[AUTO_PIN_LINE] =
3851 cfg->input_pins[AUTO_PIN_FRONT_LINE];
3852 cfg->input_pins[AUTO_PIN_FRONT_LINE] = 0;
3856 * FIX-UP: if no line-outs are detected, try to use speaker or HP pin
3857 * as a primary output
3859 if (!cfg->line_outs) {
3860 if (cfg->speaker_outs) {
3861 cfg->line_outs = cfg->speaker_outs;
3862 memcpy(cfg->line_out_pins, cfg->speaker_pins,
3863 sizeof(cfg->speaker_pins));
3864 cfg->speaker_outs = 0;
3865 memset(cfg->speaker_pins, 0, sizeof(cfg->speaker_pins));
3866 cfg->line_out_type = AUTO_PIN_SPEAKER_OUT;
3867 } else if (cfg->hp_outs) {
3868 cfg->line_outs = cfg->hp_outs;
3869 memcpy(cfg->line_out_pins, cfg->hp_pins,
3870 sizeof(cfg->hp_pins));
3872 memset(cfg->hp_pins, 0, sizeof(cfg->hp_pins));
3873 cfg->line_out_type = AUTO_PIN_HP_OUT;
3877 /* Reorder the surround channels
3878 * ALSA sequence is front/surr/clfe/side
3880 * 4-ch: front/surr => OK as it is
3881 * 6-ch: front/clfe/surr
3882 * 8-ch: front/clfe/rear/side|fc
3884 switch (cfg->line_outs) {
3887 nid = cfg->line_out_pins[1];
3888 cfg->line_out_pins[1] = cfg->line_out_pins[2];
3889 cfg->line_out_pins[2] = nid;
3894 * debug prints of the parsed results
3896 snd_printd("autoconfig: line_outs=%d (0x%x/0x%x/0x%x/0x%x/0x%x)\n",
3897 cfg->line_outs, cfg->line_out_pins[0], cfg->line_out_pins[1],
3898 cfg->line_out_pins[2], cfg->line_out_pins[3],
3899 cfg->line_out_pins[4]);
3900 snd_printd(" speaker_outs=%d (0x%x/0x%x/0x%x/0x%x/0x%x)\n",
3901 cfg->speaker_outs, cfg->speaker_pins[0],
3902 cfg->speaker_pins[1], cfg->speaker_pins[2],
3903 cfg->speaker_pins[3], cfg->speaker_pins[4]);
3904 snd_printd(" hp_outs=%d (0x%x/0x%x/0x%x/0x%x/0x%x)\n",
3905 cfg->hp_outs, cfg->hp_pins[0],
3906 cfg->hp_pins[1], cfg->hp_pins[2],
3907 cfg->hp_pins[3], cfg->hp_pins[4]);
3908 snd_printd(" mono: mono_out=0x%x\n", cfg->mono_out_pin);
3910 snd_printd(" dig-out=0x%x/0x%x\n",
3911 cfg->dig_out_pins[0], cfg->dig_out_pins[1]);
3912 snd_printd(" inputs: mic=0x%x, fmic=0x%x, line=0x%x, fline=0x%x,"
3913 " cd=0x%x, aux=0x%x\n",
3914 cfg->input_pins[AUTO_PIN_MIC],
3915 cfg->input_pins[AUTO_PIN_FRONT_MIC],
3916 cfg->input_pins[AUTO_PIN_LINE],
3917 cfg->input_pins[AUTO_PIN_FRONT_LINE],
3918 cfg->input_pins[AUTO_PIN_CD],
3919 cfg->input_pins[AUTO_PIN_AUX]);
3920 if (cfg->dig_in_pin)
3921 snd_printd(" dig-in=0x%x\n", cfg->dig_in_pin);
3925 EXPORT_SYMBOL_HDA(snd_hda_parse_pin_def_config);
3927 /* labels for input pins */
3928 const char *auto_pin_cfg_labels[AUTO_PIN_LAST] = {
3929 "Mic", "Front Mic", "Line", "Front Line", "CD", "Aux"
3931 EXPORT_SYMBOL_HDA(auto_pin_cfg_labels);
3940 * snd_hda_suspend - suspend the codecs
3943 * Returns 0 if successful.
3945 int snd_hda_suspend(struct hda_bus *bus)
3947 struct hda_codec *codec;
3949 list_for_each_entry(codec, &bus->codec_list, list) {
3950 #ifdef CONFIG_SND_HDA_POWER_SAVE
3951 if (!codec->power_on)
3954 hda_call_codec_suspend(codec);
3958 EXPORT_SYMBOL_HDA(snd_hda_suspend);
3961 * snd_hda_resume - resume the codecs
3964 * Returns 0 if successful.
3966 * This fucntion is defined only when POWER_SAVE isn't set.
3967 * In the power-save mode, the codec is resumed dynamically.
3969 int snd_hda_resume(struct hda_bus *bus)
3971 struct hda_codec *codec;
3973 list_for_each_entry(codec, &bus->codec_list, list) {
3974 if (snd_hda_codec_needs_resume(codec))
3975 hda_call_codec_resume(codec);
3979 EXPORT_SYMBOL_HDA(snd_hda_resume);
3980 #endif /* CONFIG_PM */
3986 /* get a new element from the given array
3987 * if it exceeds the pre-allocated array size, re-allocate the array
3989 void *snd_array_new(struct snd_array *array)
3991 if (array->used >= array->alloced) {
3992 int num = array->alloced + array->alloc_align;
3994 if (snd_BUG_ON(num >= 4096))
3996 nlist = kcalloc(num + 1, array->elem_size, GFP_KERNEL);
4000 memcpy(nlist, array->list,
4001 array->elem_size * array->alloced);
4004 array->list = nlist;
4005 array->alloced = num;
4007 return snd_array_elem(array, array->used++);
4009 EXPORT_SYMBOL_HDA(snd_array_new);
4011 /* free the given array elements */
4012 void snd_array_free(struct snd_array *array)
4019 EXPORT_SYMBOL_HDA(snd_array_free);
4022 * used by hda_proc.c and hda_eld.c
4024 void snd_print_pcm_rates(int pcm, char *buf, int buflen)
4026 static unsigned int rates[] = {
4027 8000, 11025, 16000, 22050, 32000, 44100, 48000, 88200,
4028 96000, 176400, 192000, 384000
4032 for (i = 0, j = 0; i < ARRAY_SIZE(rates); i++)
4034 j += snprintf(buf + j, buflen - j, " %d", rates[i]);
4036 buf[j] = '\0'; /* necessary when j == 0 */
4038 EXPORT_SYMBOL_HDA(snd_print_pcm_rates);
4040 void snd_print_pcm_bits(int pcm, char *buf, int buflen)
4042 static unsigned int bits[] = { 8, 16, 20, 24, 32 };
4045 for (i = 0, j = 0; i < ARRAY_SIZE(bits); i++)
4046 if (pcm & (AC_SUPPCM_BITS_8 << i))
4047 j += snprintf(buf + j, buflen - j, " %d", bits[i]);
4049 buf[j] = '\0'; /* necessary when j == 0 */
4051 EXPORT_SYMBOL_HDA(snd_print_pcm_bits);
4053 MODULE_DESCRIPTION("HDA codec core");
4054 MODULE_LICENSE("GPL");