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 { 0x1057, "Motorola" },
48 { 0x1095, "Silicon Image" },
50 { 0x10ec, "Realtek" },
54 { 0x11d4, "Analog Devices" },
55 { 0x13f6, "C-Media" },
56 { 0x14f1, "Conexant" },
57 { 0x17e8, "Chrontel" },
59 { 0x1aec, "Wolfson Microelectronics" },
60 { 0x434d, "C-Media" },
62 { 0x8384, "SigmaTel" },
66 static DEFINE_MUTEX(preset_mutex);
67 static LIST_HEAD(hda_preset_tables);
69 int snd_hda_add_codec_preset(struct hda_codec_preset_list *preset)
71 mutex_lock(&preset_mutex);
72 list_add_tail(&preset->list, &hda_preset_tables);
73 mutex_unlock(&preset_mutex);
76 EXPORT_SYMBOL_HDA(snd_hda_add_codec_preset);
78 int snd_hda_delete_codec_preset(struct hda_codec_preset_list *preset)
80 mutex_lock(&preset_mutex);
81 list_del(&preset->list);
82 mutex_unlock(&preset_mutex);
85 EXPORT_SYMBOL_HDA(snd_hda_delete_codec_preset);
87 #ifdef CONFIG_SND_HDA_POWER_SAVE
88 static void hda_power_work(struct work_struct *work);
89 static void hda_keep_power_on(struct hda_codec *codec);
91 static inline void hda_keep_power_on(struct hda_codec *codec) {}
94 const char *snd_hda_get_jack_location(u32 cfg)
96 static char *bases[7] = {
97 "N/A", "Rear", "Front", "Left", "Right", "Top", "Bottom",
99 static unsigned char specials_idx[] = {
104 static char *specials[] = {
105 "Rear Panel", "Drive Bar",
106 "Riser", "HDMI", "ATAPI",
107 "Mobile-In", "Mobile-Out"
110 cfg = (cfg & AC_DEFCFG_LOCATION) >> AC_DEFCFG_LOCATION_SHIFT;
111 if ((cfg & 0x0f) < 7)
112 return bases[cfg & 0x0f];
113 for (i = 0; i < ARRAY_SIZE(specials_idx); i++) {
114 if (cfg == specials_idx[i])
119 EXPORT_SYMBOL_HDA(snd_hda_get_jack_location);
121 const char *snd_hda_get_jack_connectivity(u32 cfg)
123 static char *jack_locations[4] = { "Ext", "Int", "Sep", "Oth" };
125 return jack_locations[(cfg >> (AC_DEFCFG_LOCATION_SHIFT + 4)) & 3];
127 EXPORT_SYMBOL_HDA(snd_hda_get_jack_connectivity);
129 const char *snd_hda_get_jack_type(u32 cfg)
131 static char *jack_types[16] = {
132 "Line Out", "Speaker", "HP Out", "CD",
133 "SPDIF Out", "Digital Out", "Modem Line", "Modem Hand",
134 "Line In", "Aux", "Mic", "Telephony",
135 "SPDIF In", "Digitial In", "Reserved", "Other"
138 return jack_types[(cfg & AC_DEFCFG_DEVICE)
139 >> AC_DEFCFG_DEVICE_SHIFT];
141 EXPORT_SYMBOL_HDA(snd_hda_get_jack_type);
144 * Compose a 32bit command word to be sent to the HD-audio controller
146 static inline unsigned int
147 make_codec_cmd(struct hda_codec *codec, hda_nid_t nid, int direct,
148 unsigned int verb, unsigned int parm)
152 val = (u32)(codec->addr & 0x0f) << 28;
153 val |= (u32)direct << 27;
154 val |= (u32)nid << 20;
161 * snd_hda_codec_read - send a command and get the response
162 * @codec: the HDA codec
163 * @nid: NID to send the command
164 * @direct: direct flag
165 * @verb: the verb to send
166 * @parm: the parameter for the verb
168 * Send a single command and read the corresponding response.
170 * Returns the obtained response value, or -1 for an error.
172 unsigned int snd_hda_codec_read(struct hda_codec *codec, hda_nid_t nid,
174 unsigned int verb, unsigned int parm)
176 struct hda_bus *bus = codec->bus;
179 res = make_codec_cmd(codec, nid, direct, verb, parm);
180 snd_hda_power_up(codec);
181 mutex_lock(&bus->cmd_mutex);
182 if (!bus->ops.command(bus, res))
183 res = bus->ops.get_response(bus);
185 res = (unsigned int)-1;
186 mutex_unlock(&bus->cmd_mutex);
187 snd_hda_power_down(codec);
190 EXPORT_SYMBOL_HDA(snd_hda_codec_read);
193 * snd_hda_codec_write - send a single command without waiting for response
194 * @codec: the HDA codec
195 * @nid: NID to send the command
196 * @direct: direct flag
197 * @verb: the verb to send
198 * @parm: the parameter for the verb
200 * Send a single command without waiting for response.
202 * Returns 0 if successful, or a negative error code.
204 int snd_hda_codec_write(struct hda_codec *codec, hda_nid_t nid, int direct,
205 unsigned int verb, unsigned int parm)
207 struct hda_bus *bus = codec->bus;
211 res = make_codec_cmd(codec, nid, direct, verb, parm);
212 snd_hda_power_up(codec);
213 mutex_lock(&bus->cmd_mutex);
214 err = bus->ops.command(bus, res);
215 mutex_unlock(&bus->cmd_mutex);
216 snd_hda_power_down(codec);
219 EXPORT_SYMBOL_HDA(snd_hda_codec_write);
222 * snd_hda_sequence_write - sequence writes
223 * @codec: the HDA codec
224 * @seq: VERB array to send
226 * Send the commands sequentially from the given array.
227 * The array must be terminated with NID=0.
229 void snd_hda_sequence_write(struct hda_codec *codec, const struct hda_verb *seq)
231 for (; seq->nid; seq++)
232 snd_hda_codec_write(codec, seq->nid, 0, seq->verb, seq->param);
234 EXPORT_SYMBOL_HDA(snd_hda_sequence_write);
237 * snd_hda_get_sub_nodes - get the range of sub nodes
238 * @codec: the HDA codec
240 * @start_id: the pointer to store the start NID
242 * Parse the NID and store the start NID of its sub-nodes.
243 * Returns the number of sub-nodes.
245 int snd_hda_get_sub_nodes(struct hda_codec *codec, hda_nid_t nid,
250 parm = snd_hda_param_read(codec, nid, AC_PAR_NODE_COUNT);
253 *start_id = (parm >> 16) & 0x7fff;
254 return (int)(parm & 0x7fff);
256 EXPORT_SYMBOL_HDA(snd_hda_get_sub_nodes);
259 * snd_hda_get_connections - get connection list
260 * @codec: the HDA codec
262 * @conn_list: connection list array
263 * @max_conns: max. number of connections to store
265 * Parses the connection list of the given widget and stores the list
268 * Returns the number of connections, or a negative error code.
270 int snd_hda_get_connections(struct hda_codec *codec, hda_nid_t nid,
271 hda_nid_t *conn_list, int max_conns)
274 int i, conn_len, conns;
275 unsigned int shift, num_elems, mask;
278 if (snd_BUG_ON(!conn_list || max_conns <= 0))
281 parm = snd_hda_param_read(codec, nid, AC_PAR_CONNLIST_LEN);
282 if (parm & AC_CLIST_LONG) {
291 conn_len = parm & AC_CLIST_LENGTH;
292 mask = (1 << (shift-1)) - 1;
295 return 0; /* no connection */
298 /* single connection */
299 parm = snd_hda_codec_read(codec, nid, 0,
300 AC_VERB_GET_CONNECT_LIST, 0);
301 conn_list[0] = parm & mask;
305 /* multi connection */
308 for (i = 0; i < conn_len; i++) {
312 if (i % num_elems == 0)
313 parm = snd_hda_codec_read(codec, nid, 0,
314 AC_VERB_GET_CONNECT_LIST, i);
315 range_val = !!(parm & (1 << (shift-1))); /* ranges */
319 /* ranges between the previous and this one */
320 if (!prev_nid || prev_nid >= val) {
321 snd_printk(KERN_WARNING "hda_codec: "
322 "invalid dep_range_val %x:%x\n",
326 for (n = prev_nid + 1; n <= val; n++) {
327 if (conns >= max_conns) {
329 "Too many connections\n");
332 conn_list[conns++] = n;
335 if (conns >= max_conns) {
336 snd_printk(KERN_ERR "Too many connections\n");
339 conn_list[conns++] = val;
345 EXPORT_SYMBOL_HDA(snd_hda_get_connections);
349 * snd_hda_queue_unsol_event - add an unsolicited event to queue
351 * @res: unsolicited event (lower 32bit of RIRB entry)
352 * @res_ex: codec addr and flags (upper 32bit or RIRB entry)
354 * Adds the given event to the queue. The events are processed in
355 * the workqueue asynchronously. Call this function in the interrupt
356 * hanlder when RIRB receives an unsolicited event.
358 * Returns 0 if successful, or a negative error code.
360 int snd_hda_queue_unsol_event(struct hda_bus *bus, u32 res, u32 res_ex)
362 struct hda_bus_unsolicited *unsol;
369 wp = (unsol->wp + 1) % HDA_UNSOL_QUEUE_SIZE;
373 unsol->queue[wp] = res;
374 unsol->queue[wp + 1] = res_ex;
376 queue_work(bus->workq, &unsol->work);
380 EXPORT_SYMBOL_HDA(snd_hda_queue_unsol_event);
383 * process queued unsolicited events
385 static void process_unsol_events(struct work_struct *work)
387 struct hda_bus_unsolicited *unsol =
388 container_of(work, struct hda_bus_unsolicited, work);
389 struct hda_bus *bus = unsol->bus;
390 struct hda_codec *codec;
391 unsigned int rp, caddr, res;
393 while (unsol->rp != unsol->wp) {
394 rp = (unsol->rp + 1) % HDA_UNSOL_QUEUE_SIZE;
397 res = unsol->queue[rp];
398 caddr = unsol->queue[rp + 1];
399 if (!(caddr & (1 << 4))) /* no unsolicited event? */
401 codec = bus->caddr_tbl[caddr & 0x0f];
402 if (codec && codec->patch_ops.unsol_event)
403 codec->patch_ops.unsol_event(codec, res);
408 * initialize unsolicited queue
410 static int init_unsol_queue(struct hda_bus *bus)
412 struct hda_bus_unsolicited *unsol;
414 if (bus->unsol) /* already initialized */
417 unsol = kzalloc(sizeof(*unsol), GFP_KERNEL);
419 snd_printk(KERN_ERR "hda_codec: "
420 "can't allocate unsolicited queue\n");
423 INIT_WORK(&unsol->work, process_unsol_events);
432 static void snd_hda_codec_free(struct hda_codec *codec);
434 static int snd_hda_bus_free(struct hda_bus *bus)
436 struct hda_codec *codec, *n;
441 flush_workqueue(bus->workq);
444 list_for_each_entry_safe(codec, n, &bus->codec_list, list) {
445 snd_hda_codec_free(codec);
447 if (bus->ops.private_free)
448 bus->ops.private_free(bus);
450 destroy_workqueue(bus->workq);
455 static int snd_hda_bus_dev_free(struct snd_device *device)
457 struct hda_bus *bus = device->device_data;
459 return snd_hda_bus_free(bus);
462 #ifdef CONFIG_SND_HDA_HWDEP
463 static int snd_hda_bus_dev_register(struct snd_device *device)
465 struct hda_bus *bus = device->device_data;
466 struct hda_codec *codec;
467 list_for_each_entry(codec, &bus->codec_list, list) {
468 snd_hda_hwdep_add_sysfs(codec);
473 #define snd_hda_bus_dev_register NULL
477 * snd_hda_bus_new - create a HDA bus
478 * @card: the card entry
479 * @temp: the template for hda_bus information
480 * @busp: the pointer to store the created bus instance
482 * Returns 0 if successful, or a negative error code.
484 int /*__devinit*/ snd_hda_bus_new(struct snd_card *card,
485 const struct hda_bus_template *temp,
486 struct hda_bus **busp)
491 static struct snd_device_ops dev_ops = {
492 .dev_register = snd_hda_bus_dev_register,
493 .dev_free = snd_hda_bus_dev_free,
496 if (snd_BUG_ON(!temp))
498 if (snd_BUG_ON(!temp->ops.command || !temp->ops.get_response))
504 bus = kzalloc(sizeof(*bus), GFP_KERNEL);
506 snd_printk(KERN_ERR "can't allocate struct hda_bus\n");
511 bus->private_data = temp->private_data;
512 bus->pci = temp->pci;
513 bus->modelname = temp->modelname;
514 bus->power_save = temp->power_save;
515 bus->ops = temp->ops;
517 mutex_init(&bus->cmd_mutex);
518 INIT_LIST_HEAD(&bus->codec_list);
520 snprintf(qname, sizeof(qname), "hda%d", card->number);
521 bus->workq = create_workqueue(qname);
523 snd_printk(KERN_ERR "cannot create workqueue %s\n", qname);
528 err = snd_device_new(card, SNDRV_DEV_BUS, bus, &dev_ops);
530 snd_hda_bus_free(bus);
537 EXPORT_SYMBOL_HDA(snd_hda_bus_new);
539 #ifdef CONFIG_SND_HDA_GENERIC
540 #define is_generic_config(codec) \
541 (codec->modelname && !strcmp(codec->modelname, "generic"))
543 #define is_generic_config(codec) 0
547 #define HDA_MODREQ_MAX_COUNT 2 /* two request_modules()'s */
549 #define HDA_MODREQ_MAX_COUNT 0 /* all presets are statically linked */
553 * find a matching codec preset
555 static const struct hda_codec_preset *
556 find_codec_preset(struct hda_codec *codec)
558 struct hda_codec_preset_list *tbl;
559 const struct hda_codec_preset *preset;
560 int mod_requested = 0;
562 if (is_generic_config(codec))
563 return NULL; /* use the generic parser */
566 mutex_lock(&preset_mutex);
567 list_for_each_entry(tbl, &hda_preset_tables, list) {
568 if (!try_module_get(tbl->owner)) {
569 snd_printk(KERN_ERR "hda_codec: cannot module_get\n");
572 for (preset = tbl->preset; preset->id; preset++) {
573 u32 mask = preset->mask;
574 if (preset->afg && preset->afg != codec->afg)
576 if (preset->mfg && preset->mfg != codec->mfg)
580 if (preset->id == (codec->vendor_id & mask) &&
582 preset->rev == codec->revision_id)) {
583 mutex_unlock(&preset_mutex);
584 codec->owner = tbl->owner;
588 module_put(tbl->owner);
590 mutex_unlock(&preset_mutex);
592 if (mod_requested < HDA_MODREQ_MAX_COUNT) {
595 snprintf(name, sizeof(name), "snd-hda-codec-id:%08x",
598 snprintf(name, sizeof(name), "snd-hda-codec-id:%04x*",
599 (codec->vendor_id >> 16) & 0xffff);
600 request_module(name);
608 * get_codec_name - store the codec name
610 static int get_codec_name(struct hda_codec *codec)
612 const struct hda_vendor_id *c;
613 const char *vendor = NULL;
614 u16 vendor_id = codec->vendor_id >> 16;
615 char tmp[16], name[32];
617 for (c = hda_vendor_ids; c->id; c++) {
618 if (c->id == vendor_id) {
624 sprintf(tmp, "Generic %04x", vendor_id);
627 if (codec->preset && codec->preset->name)
628 snprintf(name, sizeof(name), "%s %s", vendor,
629 codec->preset->name);
631 snprintf(name, sizeof(name), "%s ID %x", vendor,
632 codec->vendor_id & 0xffff);
633 codec->name = kstrdup(name, GFP_KERNEL);
640 * look for an AFG and MFG nodes
642 static void /*__devinit*/ setup_fg_nodes(struct hda_codec *codec)
647 total_nodes = snd_hda_get_sub_nodes(codec, AC_NODE_ROOT, &nid);
648 for (i = 0; i < total_nodes; i++, nid++) {
650 func = snd_hda_param_read(codec, nid, AC_PAR_FUNCTION_TYPE);
651 switch (func & 0xff) {
652 case AC_GRP_AUDIO_FUNCTION:
655 case AC_GRP_MODEM_FUNCTION:
665 * read widget caps for each widget and store in cache
667 static int read_widget_caps(struct hda_codec *codec, hda_nid_t fg_node)
672 codec->num_nodes = snd_hda_get_sub_nodes(codec, fg_node,
674 codec->wcaps = kmalloc(codec->num_nodes * 4, GFP_KERNEL);
677 nid = codec->start_nid;
678 for (i = 0; i < codec->num_nodes; i++, nid++)
679 codec->wcaps[i] = snd_hda_param_read(codec, nid,
680 AC_PAR_AUDIO_WIDGET_CAP);
685 static void init_hda_cache(struct hda_cache_rec *cache,
686 unsigned int record_size);
687 static void free_hda_cache(struct hda_cache_rec *cache);
692 static void snd_hda_codec_free(struct hda_codec *codec)
696 #ifdef CONFIG_SND_HDA_POWER_SAVE
697 cancel_delayed_work(&codec->power_work);
698 flush_workqueue(codec->bus->workq);
700 list_del(&codec->list);
701 snd_array_free(&codec->mixers);
702 codec->bus->caddr_tbl[codec->addr] = NULL;
703 if (codec->patch_ops.free)
704 codec->patch_ops.free(codec);
705 module_put(codec->owner);
706 free_hda_cache(&codec->amp_cache);
707 free_hda_cache(&codec->cmd_cache);
709 kfree(codec->modelname);
715 * snd_hda_codec_new - create a HDA codec
716 * @bus: the bus to assign
717 * @codec_addr: the codec address
718 * @codecp: the pointer to store the generated codec
720 * Returns 0 if successful, or a negative error code.
722 int /*__devinit*/ snd_hda_codec_new(struct hda_bus *bus, unsigned int codec_addr,
723 int do_init, struct hda_codec **codecp)
725 struct hda_codec *codec;
729 if (snd_BUG_ON(!bus))
731 if (snd_BUG_ON(codec_addr > HDA_MAX_CODEC_ADDRESS))
734 if (bus->caddr_tbl[codec_addr]) {
735 snd_printk(KERN_ERR "hda_codec: "
736 "address 0x%x is already occupied\n", codec_addr);
740 codec = kzalloc(sizeof(*codec), GFP_KERNEL);
742 snd_printk(KERN_ERR "can't allocate struct hda_codec\n");
747 codec->addr = codec_addr;
748 mutex_init(&codec->spdif_mutex);
749 mutex_init(&codec->control_mutex);
750 init_hda_cache(&codec->amp_cache, sizeof(struct hda_amp_info));
751 init_hda_cache(&codec->cmd_cache, sizeof(struct hda_cache_head));
752 snd_array_init(&codec->mixers, sizeof(struct snd_kcontrol *), 32);
753 if (codec->bus->modelname) {
754 codec->modelname = kstrdup(codec->bus->modelname, GFP_KERNEL);
755 if (!codec->modelname) {
756 snd_hda_codec_free(codec);
761 #ifdef CONFIG_SND_HDA_POWER_SAVE
762 INIT_DELAYED_WORK(&codec->power_work, hda_power_work);
763 /* snd_hda_codec_new() marks the codec as power-up, and leave it as is.
764 * the caller has to power down appropriatley after initialization
767 hda_keep_power_on(codec);
770 list_add_tail(&codec->list, &bus->codec_list);
771 bus->caddr_tbl[codec_addr] = codec;
773 codec->vendor_id = snd_hda_param_read(codec, AC_NODE_ROOT,
775 if (codec->vendor_id == -1)
776 /* read again, hopefully the access method was corrected
777 * in the last read...
779 codec->vendor_id = snd_hda_param_read(codec, AC_NODE_ROOT,
781 codec->subsystem_id = snd_hda_param_read(codec, AC_NODE_ROOT,
782 AC_PAR_SUBSYSTEM_ID);
783 codec->revision_id = snd_hda_param_read(codec, AC_NODE_ROOT,
786 setup_fg_nodes(codec);
787 if (!codec->afg && !codec->mfg) {
788 snd_printdd("hda_codec: no AFG or MFG node found\n");
789 snd_hda_codec_free(codec);
793 if (read_widget_caps(codec, codec->afg ? codec->afg : codec->mfg) < 0) {
794 snd_printk(KERN_ERR "hda_codec: cannot malloc\n");
795 snd_hda_codec_free(codec);
799 if (!codec->subsystem_id) {
800 hda_nid_t nid = codec->afg ? codec->afg : codec->mfg;
801 codec->subsystem_id =
802 snd_hda_codec_read(codec, nid, 0,
803 AC_VERB_GET_SUBSYSTEM_ID, 0);
806 codec->modelname = kstrdup(bus->modelname, GFP_KERNEL);
809 err = snd_hda_codec_configure(codec);
811 snd_hda_codec_free(codec);
815 snd_hda_codec_proc_new(codec);
817 snd_hda_create_hwdep(codec);
819 sprintf(component, "HDA:%08x,%08x,%08x", codec->vendor_id,
820 codec->subsystem_id, codec->revision_id);
821 snd_component_add(codec->bus->card, component);
827 EXPORT_SYMBOL_HDA(snd_hda_codec_new);
829 int snd_hda_codec_configure(struct hda_codec *codec)
833 codec->preset = find_codec_preset(codec);
835 err = get_codec_name(codec);
839 /* audio codec should override the mixer name */
840 if (codec->afg || !*codec->bus->card->mixername)
841 strlcpy(codec->bus->card->mixername, codec->name,
842 sizeof(codec->bus->card->mixername));
844 if (is_generic_config(codec)) {
845 err = snd_hda_parse_generic_codec(codec);
848 if (codec->preset && codec->preset->patch) {
849 err = codec->preset->patch(codec);
853 /* call the default parser */
854 err = snd_hda_parse_generic_codec(codec);
856 printk(KERN_ERR "hda-codec: No codec parser is available\n");
859 if (!err && codec->patch_ops.unsol_event)
860 err = init_unsol_queue(codec->bus);
865 * snd_hda_codec_setup_stream - set up the codec for streaming
866 * @codec: the CODEC to set up
867 * @nid: the NID to set up
868 * @stream_tag: stream tag to pass, it's between 0x1 and 0xf.
869 * @channel_id: channel id to pass, zero based.
870 * @format: stream format.
872 void snd_hda_codec_setup_stream(struct hda_codec *codec, hda_nid_t nid,
874 int channel_id, int format)
879 snd_printdd("hda_codec_setup_stream: "
880 "NID=0x%x, stream=0x%x, channel=%d, format=0x%x\n",
881 nid, stream_tag, channel_id, format);
882 snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_CHANNEL_STREAMID,
883 (stream_tag << 4) | channel_id);
885 snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_STREAM_FORMAT, format);
887 EXPORT_SYMBOL_HDA(snd_hda_codec_setup_stream);
889 void snd_hda_codec_cleanup_stream(struct hda_codec *codec, hda_nid_t nid)
894 snd_printdd("hda_codec_cleanup_stream: NID=0x%x\n", nid);
895 snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_CHANNEL_STREAMID, 0);
896 #if 0 /* keep the format */
898 snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_STREAM_FORMAT, 0);
901 EXPORT_SYMBOL_HDA(snd_hda_codec_cleanup_stream);
904 * amp access functions
907 /* FIXME: more better hash key? */
908 #define HDA_HASH_KEY(nid,dir,idx) (u32)((nid) + ((idx) << 16) + ((dir) << 24))
909 #define INFO_AMP_CAPS (1<<0)
910 #define INFO_AMP_VOL(ch) (1 << (1 + (ch)))
912 /* initialize the hash table */
913 static void /*__devinit*/ init_hda_cache(struct hda_cache_rec *cache,
914 unsigned int record_size)
916 memset(cache, 0, sizeof(*cache));
917 memset(cache->hash, 0xff, sizeof(cache->hash));
918 snd_array_init(&cache->buf, record_size, 64);
921 static void free_hda_cache(struct hda_cache_rec *cache)
923 snd_array_free(&cache->buf);
926 /* query the hash. allocate an entry if not found. */
927 static struct hda_cache_head *get_alloc_hash(struct hda_cache_rec *cache,
930 u16 idx = key % (u16)ARRAY_SIZE(cache->hash);
931 u16 cur = cache->hash[idx];
932 struct hda_cache_head *info;
934 while (cur != 0xffff) {
935 info = snd_array_elem(&cache->buf, cur);
936 if (info->key == key)
941 /* add a new hash entry */
942 info = snd_array_new(&cache->buf);
945 cur = snd_array_index(&cache->buf, info);
948 info->next = cache->hash[idx];
949 cache->hash[idx] = cur;
954 /* query and allocate an amp hash entry */
955 static inline struct hda_amp_info *
956 get_alloc_amp_hash(struct hda_codec *codec, u32 key)
958 return (struct hda_amp_info *)get_alloc_hash(&codec->amp_cache, key);
962 * query AMP capabilities for the given widget and direction
964 u32 query_amp_caps(struct hda_codec *codec, hda_nid_t nid, int direction)
966 struct hda_amp_info *info;
968 info = get_alloc_amp_hash(codec, HDA_HASH_KEY(nid, direction, 0));
971 if (!(info->head.val & INFO_AMP_CAPS)) {
972 if (!(get_wcaps(codec, nid) & AC_WCAP_AMP_OVRD))
974 info->amp_caps = snd_hda_param_read(codec, nid,
975 direction == HDA_OUTPUT ?
979 info->head.val |= INFO_AMP_CAPS;
981 return info->amp_caps;
983 EXPORT_SYMBOL_HDA(query_amp_caps);
985 int snd_hda_override_amp_caps(struct hda_codec *codec, hda_nid_t nid, int dir,
988 struct hda_amp_info *info;
990 info = get_alloc_amp_hash(codec, HDA_HASH_KEY(nid, dir, 0));
993 info->amp_caps = caps;
994 info->head.val |= INFO_AMP_CAPS;
997 EXPORT_SYMBOL_HDA(snd_hda_override_amp_caps);
1000 * read the current volume to info
1001 * if the cache exists, read the cache value.
1003 static unsigned int get_vol_mute(struct hda_codec *codec,
1004 struct hda_amp_info *info, hda_nid_t nid,
1005 int ch, int direction, int index)
1009 if (info->head.val & INFO_AMP_VOL(ch))
1010 return info->vol[ch];
1012 parm = ch ? AC_AMP_GET_RIGHT : AC_AMP_GET_LEFT;
1013 parm |= direction == HDA_OUTPUT ? AC_AMP_GET_OUTPUT : AC_AMP_GET_INPUT;
1015 val = snd_hda_codec_read(codec, nid, 0,
1016 AC_VERB_GET_AMP_GAIN_MUTE, parm);
1017 info->vol[ch] = val & 0xff;
1018 info->head.val |= INFO_AMP_VOL(ch);
1019 return info->vol[ch];
1023 * write the current volume in info to the h/w and update the cache
1025 static void put_vol_mute(struct hda_codec *codec, struct hda_amp_info *info,
1026 hda_nid_t nid, int ch, int direction, int index,
1031 parm = ch ? AC_AMP_SET_RIGHT : AC_AMP_SET_LEFT;
1032 parm |= direction == HDA_OUTPUT ? AC_AMP_SET_OUTPUT : AC_AMP_SET_INPUT;
1033 parm |= index << AC_AMP_SET_INDEX_SHIFT;
1035 snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_AMP_GAIN_MUTE, parm);
1036 info->vol[ch] = val;
1040 * read AMP value. The volume is between 0 to 0x7f, 0x80 = mute bit.
1042 int snd_hda_codec_amp_read(struct hda_codec *codec, hda_nid_t nid, int ch,
1043 int direction, int index)
1045 struct hda_amp_info *info;
1046 info = get_alloc_amp_hash(codec, HDA_HASH_KEY(nid, direction, index));
1049 return get_vol_mute(codec, info, nid, ch, direction, index);
1051 EXPORT_SYMBOL_HDA(snd_hda_codec_amp_read);
1054 * update the AMP value, mask = bit mask to set, val = the value
1056 int snd_hda_codec_amp_update(struct hda_codec *codec, hda_nid_t nid, int ch,
1057 int direction, int idx, int mask, int val)
1059 struct hda_amp_info *info;
1061 info = get_alloc_amp_hash(codec, HDA_HASH_KEY(nid, direction, idx));
1065 val |= get_vol_mute(codec, info, nid, ch, direction, idx) & ~mask;
1066 if (info->vol[ch] == val)
1068 put_vol_mute(codec, info, nid, ch, direction, idx, val);
1071 EXPORT_SYMBOL_HDA(snd_hda_codec_amp_update);
1074 * update the AMP stereo with the same mask and value
1076 int snd_hda_codec_amp_stereo(struct hda_codec *codec, hda_nid_t nid,
1077 int direction, int idx, int mask, int val)
1080 for (ch = 0; ch < 2; ch++)
1081 ret |= snd_hda_codec_amp_update(codec, nid, ch, direction,
1085 EXPORT_SYMBOL_HDA(snd_hda_codec_amp_stereo);
1087 #ifdef SND_HDA_NEEDS_RESUME
1088 /* resume the all amp commands from the cache */
1089 void snd_hda_codec_resume_amp(struct hda_codec *codec)
1091 struct hda_amp_info *buffer = codec->amp_cache.buf.list;
1094 for (i = 0; i < codec->amp_cache.buf.used; i++, buffer++) {
1095 u32 key = buffer->head.key;
1097 unsigned int idx, dir, ch;
1101 idx = (key >> 16) & 0xff;
1102 dir = (key >> 24) & 0xff;
1103 for (ch = 0; ch < 2; ch++) {
1104 if (!(buffer->head.val & INFO_AMP_VOL(ch)))
1106 put_vol_mute(codec, buffer, nid, ch, dir, idx,
1111 EXPORT_SYMBOL_HDA(snd_hda_codec_resume_amp);
1112 #endif /* SND_HDA_NEEDS_RESUME */
1115 int snd_hda_mixer_amp_volume_info(struct snd_kcontrol *kcontrol,
1116 struct snd_ctl_elem_info *uinfo)
1118 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1119 u16 nid = get_amp_nid(kcontrol);
1120 u8 chs = get_amp_channels(kcontrol);
1121 int dir = get_amp_direction(kcontrol);
1124 caps = query_amp_caps(codec, nid, dir);
1126 caps = (caps & AC_AMPCAP_NUM_STEPS) >> AC_AMPCAP_NUM_STEPS_SHIFT;
1128 printk(KERN_WARNING "hda_codec: "
1129 "num_steps = 0 for NID=0x%x (ctl = %s)\n", nid,
1133 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
1134 uinfo->count = chs == 3 ? 2 : 1;
1135 uinfo->value.integer.min = 0;
1136 uinfo->value.integer.max = caps;
1139 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_volume_info);
1141 int snd_hda_mixer_amp_volume_get(struct snd_kcontrol *kcontrol,
1142 struct snd_ctl_elem_value *ucontrol)
1144 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1145 hda_nid_t nid = get_amp_nid(kcontrol);
1146 int chs = get_amp_channels(kcontrol);
1147 int dir = get_amp_direction(kcontrol);
1148 int idx = get_amp_index(kcontrol);
1149 long *valp = ucontrol->value.integer.value;
1152 *valp++ = snd_hda_codec_amp_read(codec, nid, 0, dir, idx)
1155 *valp = snd_hda_codec_amp_read(codec, nid, 1, dir, idx)
1159 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_volume_get);
1161 int snd_hda_mixer_amp_volume_put(struct snd_kcontrol *kcontrol,
1162 struct snd_ctl_elem_value *ucontrol)
1164 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1165 hda_nid_t nid = get_amp_nid(kcontrol);
1166 int chs = get_amp_channels(kcontrol);
1167 int dir = get_amp_direction(kcontrol);
1168 int idx = get_amp_index(kcontrol);
1169 long *valp = ucontrol->value.integer.value;
1172 snd_hda_power_up(codec);
1174 change = snd_hda_codec_amp_update(codec, nid, 0, dir, idx,
1179 change |= snd_hda_codec_amp_update(codec, nid, 1, dir, idx,
1181 snd_hda_power_down(codec);
1184 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_volume_put);
1186 int snd_hda_mixer_amp_tlv(struct snd_kcontrol *kcontrol, int op_flag,
1187 unsigned int size, unsigned int __user *_tlv)
1189 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1190 hda_nid_t nid = get_amp_nid(kcontrol);
1191 int dir = get_amp_direction(kcontrol);
1192 u32 caps, val1, val2;
1194 if (size < 4 * sizeof(unsigned int))
1196 caps = query_amp_caps(codec, nid, dir);
1197 val2 = (caps & AC_AMPCAP_STEP_SIZE) >> AC_AMPCAP_STEP_SIZE_SHIFT;
1198 val2 = (val2 + 1) * 25;
1199 val1 = -((caps & AC_AMPCAP_OFFSET) >> AC_AMPCAP_OFFSET_SHIFT);
1200 val1 = ((int)val1) * ((int)val2);
1201 if (put_user(SNDRV_CTL_TLVT_DB_SCALE, _tlv))
1203 if (put_user(2 * sizeof(unsigned int), _tlv + 1))
1205 if (put_user(val1, _tlv + 2))
1207 if (put_user(val2, _tlv + 3))
1211 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_tlv);
1214 * set (static) TLV for virtual master volume; recalculated as max 0dB
1216 void snd_hda_set_vmaster_tlv(struct hda_codec *codec, hda_nid_t nid, int dir,
1222 caps = query_amp_caps(codec, nid, dir);
1223 nums = (caps & AC_AMPCAP_NUM_STEPS) >> AC_AMPCAP_NUM_STEPS_SHIFT;
1224 step = (caps & AC_AMPCAP_STEP_SIZE) >> AC_AMPCAP_STEP_SIZE_SHIFT;
1225 step = (step + 1) * 25;
1226 tlv[0] = SNDRV_CTL_TLVT_DB_SCALE;
1227 tlv[1] = 2 * sizeof(unsigned int);
1228 tlv[2] = -nums * step;
1231 EXPORT_SYMBOL_HDA(snd_hda_set_vmaster_tlv);
1233 /* find a mixer control element with the given name */
1234 static struct snd_kcontrol *
1235 _snd_hda_find_mixer_ctl(struct hda_codec *codec,
1236 const char *name, int idx)
1238 struct snd_ctl_elem_id id;
1239 memset(&id, 0, sizeof(id));
1240 id.iface = SNDRV_CTL_ELEM_IFACE_MIXER;
1242 strcpy(id.name, name);
1243 return snd_ctl_find_id(codec->bus->card, &id);
1246 struct snd_kcontrol *snd_hda_find_mixer_ctl(struct hda_codec *codec,
1249 return _snd_hda_find_mixer_ctl(codec, name, 0);
1251 EXPORT_SYMBOL_HDA(snd_hda_find_mixer_ctl);
1253 /* Add a control element and assign to the codec */
1254 int snd_hda_ctl_add(struct hda_codec *codec, struct snd_kcontrol *kctl)
1257 struct snd_kcontrol **knewp;
1259 err = snd_ctl_add(codec->bus->card, kctl);
1262 knewp = snd_array_new(&codec->mixers);
1268 EXPORT_SYMBOL_HDA(snd_hda_ctl_add);
1270 #ifdef CONFIG_SND_HDA_RECONFIG
1271 /* Clear all controls assigned to the given codec */
1272 void snd_hda_ctls_clear(struct hda_codec *codec)
1275 struct snd_kcontrol **kctls = codec->mixers.list;
1276 for (i = 0; i < codec->mixers.used; i++)
1277 snd_ctl_remove(codec->bus->card, kctls[i]);
1278 snd_array_free(&codec->mixers);
1281 void snd_hda_codec_reset(struct hda_codec *codec)
1285 #ifdef CONFIG_SND_HDA_POWER_SAVE
1286 cancel_delayed_work(&codec->power_work);
1287 flush_workqueue(codec->bus->workq);
1289 snd_hda_ctls_clear(codec);
1291 for (i = 0; i < codec->num_pcms; i++) {
1292 if (codec->pcm_info[i].pcm) {
1293 snd_device_free(codec->bus->card,
1294 codec->pcm_info[i].pcm);
1295 clear_bit(codec->pcm_info[i].device,
1296 codec->bus->pcm_dev_bits);
1299 if (codec->patch_ops.free)
1300 codec->patch_ops.free(codec);
1301 codec->proc_widget_hook = NULL;
1303 free_hda_cache(&codec->amp_cache);
1304 free_hda_cache(&codec->cmd_cache);
1305 init_hda_cache(&codec->amp_cache, sizeof(struct hda_amp_info));
1306 init_hda_cache(&codec->cmd_cache, sizeof(struct hda_cache_head));
1307 codec->num_pcms = 0;
1308 codec->pcm_info = NULL;
1309 codec->preset = NULL;
1310 module_put(codec->owner);
1311 codec->owner = NULL;
1313 #endif /* CONFIG_SND_HDA_RECONFIG */
1315 /* create a virtual master control and add slaves */
1316 int snd_hda_add_vmaster(struct hda_codec *codec, char *name,
1317 unsigned int *tlv, const char **slaves)
1319 struct snd_kcontrol *kctl;
1323 for (s = slaves; *s && !snd_hda_find_mixer_ctl(codec, *s); s++)
1326 snd_printdd("No slave found for %s\n", name);
1329 kctl = snd_ctl_make_virtual_master(name, tlv);
1332 err = snd_hda_ctl_add(codec, kctl);
1336 for (s = slaves; *s; s++) {
1337 struct snd_kcontrol *sctl;
1339 sctl = snd_hda_find_mixer_ctl(codec, *s);
1341 snd_printdd("Cannot find slave %s, skipped\n", *s);
1344 err = snd_ctl_add_slave(kctl, sctl);
1350 EXPORT_SYMBOL_HDA(snd_hda_add_vmaster);
1353 int snd_hda_mixer_amp_switch_info(struct snd_kcontrol *kcontrol,
1354 struct snd_ctl_elem_info *uinfo)
1356 int chs = get_amp_channels(kcontrol);
1358 uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
1359 uinfo->count = chs == 3 ? 2 : 1;
1360 uinfo->value.integer.min = 0;
1361 uinfo->value.integer.max = 1;
1364 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_switch_info);
1366 int snd_hda_mixer_amp_switch_get(struct snd_kcontrol *kcontrol,
1367 struct snd_ctl_elem_value *ucontrol)
1369 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1370 hda_nid_t nid = get_amp_nid(kcontrol);
1371 int chs = get_amp_channels(kcontrol);
1372 int dir = get_amp_direction(kcontrol);
1373 int idx = get_amp_index(kcontrol);
1374 long *valp = ucontrol->value.integer.value;
1377 *valp++ = (snd_hda_codec_amp_read(codec, nid, 0, dir, idx) &
1378 HDA_AMP_MUTE) ? 0 : 1;
1380 *valp = (snd_hda_codec_amp_read(codec, nid, 1, dir, idx) &
1381 HDA_AMP_MUTE) ? 0 : 1;
1384 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_switch_get);
1386 int snd_hda_mixer_amp_switch_put(struct snd_kcontrol *kcontrol,
1387 struct snd_ctl_elem_value *ucontrol)
1389 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1390 hda_nid_t nid = get_amp_nid(kcontrol);
1391 int chs = get_amp_channels(kcontrol);
1392 int dir = get_amp_direction(kcontrol);
1393 int idx = get_amp_index(kcontrol);
1394 long *valp = ucontrol->value.integer.value;
1397 snd_hda_power_up(codec);
1399 change = snd_hda_codec_amp_update(codec, nid, 0, dir, idx,
1401 *valp ? 0 : HDA_AMP_MUTE);
1405 change |= snd_hda_codec_amp_update(codec, nid, 1, dir, idx,
1407 *valp ? 0 : HDA_AMP_MUTE);
1408 #ifdef CONFIG_SND_HDA_POWER_SAVE
1409 if (codec->patch_ops.check_power_status)
1410 codec->patch_ops.check_power_status(codec, nid);
1412 snd_hda_power_down(codec);
1415 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_switch_put);
1418 * bound volume controls
1420 * bind multiple volumes (# indices, from 0)
1423 #define AMP_VAL_IDX_SHIFT 19
1424 #define AMP_VAL_IDX_MASK (0x0f<<19)
1426 int snd_hda_mixer_bind_switch_get(struct snd_kcontrol *kcontrol,
1427 struct snd_ctl_elem_value *ucontrol)
1429 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1433 mutex_lock(&codec->control_mutex);
1434 pval = kcontrol->private_value;
1435 kcontrol->private_value = pval & ~AMP_VAL_IDX_MASK; /* index 0 */
1436 err = snd_hda_mixer_amp_switch_get(kcontrol, ucontrol);
1437 kcontrol->private_value = pval;
1438 mutex_unlock(&codec->control_mutex);
1441 EXPORT_SYMBOL_HDA(snd_hda_mixer_bind_switch_get);
1443 int snd_hda_mixer_bind_switch_put(struct snd_kcontrol *kcontrol,
1444 struct snd_ctl_elem_value *ucontrol)
1446 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1448 int i, indices, err = 0, change = 0;
1450 mutex_lock(&codec->control_mutex);
1451 pval = kcontrol->private_value;
1452 indices = (pval & AMP_VAL_IDX_MASK) >> AMP_VAL_IDX_SHIFT;
1453 for (i = 0; i < indices; i++) {
1454 kcontrol->private_value = (pval & ~AMP_VAL_IDX_MASK) |
1455 (i << AMP_VAL_IDX_SHIFT);
1456 err = snd_hda_mixer_amp_switch_put(kcontrol, ucontrol);
1461 kcontrol->private_value = pval;
1462 mutex_unlock(&codec->control_mutex);
1463 return err < 0 ? err : change;
1465 EXPORT_SYMBOL_HDA(snd_hda_mixer_bind_switch_put);
1468 * generic bound volume/swtich controls
1470 int snd_hda_mixer_bind_ctls_info(struct snd_kcontrol *kcontrol,
1471 struct snd_ctl_elem_info *uinfo)
1473 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1474 struct hda_bind_ctls *c;
1477 mutex_lock(&codec->control_mutex);
1478 c = (struct hda_bind_ctls *)kcontrol->private_value;
1479 kcontrol->private_value = *c->values;
1480 err = c->ops->info(kcontrol, uinfo);
1481 kcontrol->private_value = (long)c;
1482 mutex_unlock(&codec->control_mutex);
1485 EXPORT_SYMBOL_HDA(snd_hda_mixer_bind_ctls_info);
1487 int snd_hda_mixer_bind_ctls_get(struct snd_kcontrol *kcontrol,
1488 struct snd_ctl_elem_value *ucontrol)
1490 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1491 struct hda_bind_ctls *c;
1494 mutex_lock(&codec->control_mutex);
1495 c = (struct hda_bind_ctls *)kcontrol->private_value;
1496 kcontrol->private_value = *c->values;
1497 err = c->ops->get(kcontrol, ucontrol);
1498 kcontrol->private_value = (long)c;
1499 mutex_unlock(&codec->control_mutex);
1502 EXPORT_SYMBOL_HDA(snd_hda_mixer_bind_ctls_get);
1504 int snd_hda_mixer_bind_ctls_put(struct snd_kcontrol *kcontrol,
1505 struct snd_ctl_elem_value *ucontrol)
1507 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1508 struct hda_bind_ctls *c;
1509 unsigned long *vals;
1510 int err = 0, change = 0;
1512 mutex_lock(&codec->control_mutex);
1513 c = (struct hda_bind_ctls *)kcontrol->private_value;
1514 for (vals = c->values; *vals; vals++) {
1515 kcontrol->private_value = *vals;
1516 err = c->ops->put(kcontrol, ucontrol);
1521 kcontrol->private_value = (long)c;
1522 mutex_unlock(&codec->control_mutex);
1523 return err < 0 ? err : change;
1525 EXPORT_SYMBOL_HDA(snd_hda_mixer_bind_ctls_put);
1527 int snd_hda_mixer_bind_tlv(struct snd_kcontrol *kcontrol, int op_flag,
1528 unsigned int size, unsigned int __user *tlv)
1530 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1531 struct hda_bind_ctls *c;
1534 mutex_lock(&codec->control_mutex);
1535 c = (struct hda_bind_ctls *)kcontrol->private_value;
1536 kcontrol->private_value = *c->values;
1537 err = c->ops->tlv(kcontrol, op_flag, size, tlv);
1538 kcontrol->private_value = (long)c;
1539 mutex_unlock(&codec->control_mutex);
1542 EXPORT_SYMBOL_HDA(snd_hda_mixer_bind_tlv);
1544 struct hda_ctl_ops snd_hda_bind_vol = {
1545 .info = snd_hda_mixer_amp_volume_info,
1546 .get = snd_hda_mixer_amp_volume_get,
1547 .put = snd_hda_mixer_amp_volume_put,
1548 .tlv = snd_hda_mixer_amp_tlv
1550 EXPORT_SYMBOL_HDA(snd_hda_bind_vol);
1552 struct hda_ctl_ops snd_hda_bind_sw = {
1553 .info = snd_hda_mixer_amp_switch_info,
1554 .get = snd_hda_mixer_amp_switch_get,
1555 .put = snd_hda_mixer_amp_switch_put,
1556 .tlv = snd_hda_mixer_amp_tlv
1558 EXPORT_SYMBOL_HDA(snd_hda_bind_sw);
1561 * SPDIF out controls
1564 static int snd_hda_spdif_mask_info(struct snd_kcontrol *kcontrol,
1565 struct snd_ctl_elem_info *uinfo)
1567 uinfo->type = SNDRV_CTL_ELEM_TYPE_IEC958;
1572 static int snd_hda_spdif_cmask_get(struct snd_kcontrol *kcontrol,
1573 struct snd_ctl_elem_value *ucontrol)
1575 ucontrol->value.iec958.status[0] = IEC958_AES0_PROFESSIONAL |
1576 IEC958_AES0_NONAUDIO |
1577 IEC958_AES0_CON_EMPHASIS_5015 |
1578 IEC958_AES0_CON_NOT_COPYRIGHT;
1579 ucontrol->value.iec958.status[1] = IEC958_AES1_CON_CATEGORY |
1580 IEC958_AES1_CON_ORIGINAL;
1584 static int snd_hda_spdif_pmask_get(struct snd_kcontrol *kcontrol,
1585 struct snd_ctl_elem_value *ucontrol)
1587 ucontrol->value.iec958.status[0] = IEC958_AES0_PROFESSIONAL |
1588 IEC958_AES0_NONAUDIO |
1589 IEC958_AES0_PRO_EMPHASIS_5015;
1593 static int snd_hda_spdif_default_get(struct snd_kcontrol *kcontrol,
1594 struct snd_ctl_elem_value *ucontrol)
1596 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1598 ucontrol->value.iec958.status[0] = codec->spdif_status & 0xff;
1599 ucontrol->value.iec958.status[1] = (codec->spdif_status >> 8) & 0xff;
1600 ucontrol->value.iec958.status[2] = (codec->spdif_status >> 16) & 0xff;
1601 ucontrol->value.iec958.status[3] = (codec->spdif_status >> 24) & 0xff;
1606 /* convert from SPDIF status bits to HDA SPDIF bits
1607 * bit 0 (DigEn) is always set zero (to be filled later)
1609 static unsigned short convert_from_spdif_status(unsigned int sbits)
1611 unsigned short val = 0;
1613 if (sbits & IEC958_AES0_PROFESSIONAL)
1614 val |= AC_DIG1_PROFESSIONAL;
1615 if (sbits & IEC958_AES0_NONAUDIO)
1616 val |= AC_DIG1_NONAUDIO;
1617 if (sbits & IEC958_AES0_PROFESSIONAL) {
1618 if ((sbits & IEC958_AES0_PRO_EMPHASIS) ==
1619 IEC958_AES0_PRO_EMPHASIS_5015)
1620 val |= AC_DIG1_EMPHASIS;
1622 if ((sbits & IEC958_AES0_CON_EMPHASIS) ==
1623 IEC958_AES0_CON_EMPHASIS_5015)
1624 val |= AC_DIG1_EMPHASIS;
1625 if (!(sbits & IEC958_AES0_CON_NOT_COPYRIGHT))
1626 val |= AC_DIG1_COPYRIGHT;
1627 if (sbits & (IEC958_AES1_CON_ORIGINAL << 8))
1628 val |= AC_DIG1_LEVEL;
1629 val |= sbits & (IEC958_AES1_CON_CATEGORY << 8);
1634 /* convert to SPDIF status bits from HDA SPDIF bits
1636 static unsigned int convert_to_spdif_status(unsigned short val)
1638 unsigned int sbits = 0;
1640 if (val & AC_DIG1_NONAUDIO)
1641 sbits |= IEC958_AES0_NONAUDIO;
1642 if (val & AC_DIG1_PROFESSIONAL)
1643 sbits |= IEC958_AES0_PROFESSIONAL;
1644 if (sbits & IEC958_AES0_PROFESSIONAL) {
1645 if (sbits & AC_DIG1_EMPHASIS)
1646 sbits |= IEC958_AES0_PRO_EMPHASIS_5015;
1648 if (val & AC_DIG1_EMPHASIS)
1649 sbits |= IEC958_AES0_CON_EMPHASIS_5015;
1650 if (!(val & AC_DIG1_COPYRIGHT))
1651 sbits |= IEC958_AES0_CON_NOT_COPYRIGHT;
1652 if (val & AC_DIG1_LEVEL)
1653 sbits |= (IEC958_AES1_CON_ORIGINAL << 8);
1654 sbits |= val & (0x7f << 8);
1659 /* set digital convert verbs both for the given NID and its slaves */
1660 static void set_dig_out(struct hda_codec *codec, hda_nid_t nid,
1665 snd_hda_codec_write_cache(codec, nid, 0, verb, val);
1666 d = codec->slave_dig_outs;
1670 snd_hda_codec_write_cache(codec, *d, 0, verb, val);
1673 static inline void set_dig_out_convert(struct hda_codec *codec, hda_nid_t nid,
1677 set_dig_out(codec, nid, AC_VERB_SET_DIGI_CONVERT_1, dig1);
1679 set_dig_out(codec, nid, AC_VERB_SET_DIGI_CONVERT_2, dig2);
1682 static int snd_hda_spdif_default_put(struct snd_kcontrol *kcontrol,
1683 struct snd_ctl_elem_value *ucontrol)
1685 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1686 hda_nid_t nid = kcontrol->private_value;
1690 mutex_lock(&codec->spdif_mutex);
1691 codec->spdif_status = ucontrol->value.iec958.status[0] |
1692 ((unsigned int)ucontrol->value.iec958.status[1] << 8) |
1693 ((unsigned int)ucontrol->value.iec958.status[2] << 16) |
1694 ((unsigned int)ucontrol->value.iec958.status[3] << 24);
1695 val = convert_from_spdif_status(codec->spdif_status);
1696 val |= codec->spdif_ctls & 1;
1697 change = codec->spdif_ctls != val;
1698 codec->spdif_ctls = val;
1701 set_dig_out_convert(codec, nid, val & 0xff, (val >> 8) & 0xff);
1703 mutex_unlock(&codec->spdif_mutex);
1707 #define snd_hda_spdif_out_switch_info snd_ctl_boolean_mono_info
1709 static int snd_hda_spdif_out_switch_get(struct snd_kcontrol *kcontrol,
1710 struct snd_ctl_elem_value *ucontrol)
1712 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1714 ucontrol->value.integer.value[0] = codec->spdif_ctls & AC_DIG1_ENABLE;
1718 static int snd_hda_spdif_out_switch_put(struct snd_kcontrol *kcontrol,
1719 struct snd_ctl_elem_value *ucontrol)
1721 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1722 hda_nid_t nid = kcontrol->private_value;
1726 mutex_lock(&codec->spdif_mutex);
1727 val = codec->spdif_ctls & ~AC_DIG1_ENABLE;
1728 if (ucontrol->value.integer.value[0])
1729 val |= AC_DIG1_ENABLE;
1730 change = codec->spdif_ctls != val;
1732 codec->spdif_ctls = val;
1733 set_dig_out_convert(codec, nid, val & 0xff, -1);
1734 /* unmute amp switch (if any) */
1735 if ((get_wcaps(codec, nid) & AC_WCAP_OUT_AMP) &&
1736 (val & AC_DIG1_ENABLE))
1737 snd_hda_codec_amp_stereo(codec, nid, HDA_OUTPUT, 0,
1740 mutex_unlock(&codec->spdif_mutex);
1744 static struct snd_kcontrol_new dig_mixes[] = {
1746 .access = SNDRV_CTL_ELEM_ACCESS_READ,
1747 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
1748 .name = SNDRV_CTL_NAME_IEC958("",PLAYBACK,CON_MASK),
1749 .info = snd_hda_spdif_mask_info,
1750 .get = snd_hda_spdif_cmask_get,
1753 .access = SNDRV_CTL_ELEM_ACCESS_READ,
1754 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
1755 .name = SNDRV_CTL_NAME_IEC958("",PLAYBACK,PRO_MASK),
1756 .info = snd_hda_spdif_mask_info,
1757 .get = snd_hda_spdif_pmask_get,
1760 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
1761 .name = SNDRV_CTL_NAME_IEC958("",PLAYBACK,DEFAULT),
1762 .info = snd_hda_spdif_mask_info,
1763 .get = snd_hda_spdif_default_get,
1764 .put = snd_hda_spdif_default_put,
1767 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
1768 .name = SNDRV_CTL_NAME_IEC958("",PLAYBACK,SWITCH),
1769 .info = snd_hda_spdif_out_switch_info,
1770 .get = snd_hda_spdif_out_switch_get,
1771 .put = snd_hda_spdif_out_switch_put,
1776 #define SPDIF_MAX_IDX 4 /* 4 instances should be enough to probe */
1779 * snd_hda_create_spdif_out_ctls - create Output SPDIF-related controls
1780 * @codec: the HDA codec
1781 * @nid: audio out widget NID
1783 * Creates controls related with the SPDIF output.
1784 * Called from each patch supporting the SPDIF out.
1786 * Returns 0 if successful, or a negative error code.
1788 int snd_hda_create_spdif_out_ctls(struct hda_codec *codec, hda_nid_t nid)
1791 struct snd_kcontrol *kctl;
1792 struct snd_kcontrol_new *dig_mix;
1795 for (idx = 0; idx < SPDIF_MAX_IDX; idx++) {
1796 if (!_snd_hda_find_mixer_ctl(codec, "IEC958 Playback Switch",
1800 if (idx >= SPDIF_MAX_IDX) {
1801 printk(KERN_ERR "hda_codec: too many IEC958 outputs\n");
1804 for (dig_mix = dig_mixes; dig_mix->name; dig_mix++) {
1805 kctl = snd_ctl_new1(dig_mix, codec);
1808 kctl->id.index = idx;
1809 kctl->private_value = nid;
1810 err = snd_hda_ctl_add(codec, kctl);
1815 snd_hda_codec_read(codec, nid, 0,
1816 AC_VERB_GET_DIGI_CONVERT_1, 0);
1817 codec->spdif_status = convert_to_spdif_status(codec->spdif_ctls);
1820 EXPORT_SYMBOL_HDA(snd_hda_create_spdif_out_ctls);
1823 * SPDIF sharing with analog output
1825 static int spdif_share_sw_get(struct snd_kcontrol *kcontrol,
1826 struct snd_ctl_elem_value *ucontrol)
1828 struct hda_multi_out *mout = snd_kcontrol_chip(kcontrol);
1829 ucontrol->value.integer.value[0] = mout->share_spdif;
1833 static int spdif_share_sw_put(struct snd_kcontrol *kcontrol,
1834 struct snd_ctl_elem_value *ucontrol)
1836 struct hda_multi_out *mout = snd_kcontrol_chip(kcontrol);
1837 mout->share_spdif = !!ucontrol->value.integer.value[0];
1841 static struct snd_kcontrol_new spdif_share_sw = {
1842 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
1843 .name = "IEC958 Default PCM Playback Switch",
1844 .info = snd_ctl_boolean_mono_info,
1845 .get = spdif_share_sw_get,
1846 .put = spdif_share_sw_put,
1849 int snd_hda_create_spdif_share_sw(struct hda_codec *codec,
1850 struct hda_multi_out *mout)
1852 if (!mout->dig_out_nid)
1854 /* ATTENTION: here mout is passed as private_data, instead of codec */
1855 return snd_hda_ctl_add(codec,
1856 snd_ctl_new1(&spdif_share_sw, mout));
1858 EXPORT_SYMBOL_HDA(snd_hda_create_spdif_share_sw);
1864 #define snd_hda_spdif_in_switch_info snd_hda_spdif_out_switch_info
1866 static int snd_hda_spdif_in_switch_get(struct snd_kcontrol *kcontrol,
1867 struct snd_ctl_elem_value *ucontrol)
1869 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1871 ucontrol->value.integer.value[0] = codec->spdif_in_enable;
1875 static int snd_hda_spdif_in_switch_put(struct snd_kcontrol *kcontrol,
1876 struct snd_ctl_elem_value *ucontrol)
1878 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1879 hda_nid_t nid = kcontrol->private_value;
1880 unsigned int val = !!ucontrol->value.integer.value[0];
1883 mutex_lock(&codec->spdif_mutex);
1884 change = codec->spdif_in_enable != val;
1886 codec->spdif_in_enable = val;
1887 snd_hda_codec_write_cache(codec, nid, 0,
1888 AC_VERB_SET_DIGI_CONVERT_1, val);
1890 mutex_unlock(&codec->spdif_mutex);
1894 static int snd_hda_spdif_in_status_get(struct snd_kcontrol *kcontrol,
1895 struct snd_ctl_elem_value *ucontrol)
1897 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1898 hda_nid_t nid = kcontrol->private_value;
1902 val = snd_hda_codec_read(codec, nid, 0, AC_VERB_GET_DIGI_CONVERT_1, 0);
1903 sbits = convert_to_spdif_status(val);
1904 ucontrol->value.iec958.status[0] = sbits;
1905 ucontrol->value.iec958.status[1] = sbits >> 8;
1906 ucontrol->value.iec958.status[2] = sbits >> 16;
1907 ucontrol->value.iec958.status[3] = sbits >> 24;
1911 static struct snd_kcontrol_new dig_in_ctls[] = {
1913 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
1914 .name = SNDRV_CTL_NAME_IEC958("",CAPTURE,SWITCH),
1915 .info = snd_hda_spdif_in_switch_info,
1916 .get = snd_hda_spdif_in_switch_get,
1917 .put = snd_hda_spdif_in_switch_put,
1920 .access = SNDRV_CTL_ELEM_ACCESS_READ,
1921 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
1922 .name = SNDRV_CTL_NAME_IEC958("",CAPTURE,DEFAULT),
1923 .info = snd_hda_spdif_mask_info,
1924 .get = snd_hda_spdif_in_status_get,
1930 * snd_hda_create_spdif_in_ctls - create Input SPDIF-related controls
1931 * @codec: the HDA codec
1932 * @nid: audio in widget NID
1934 * Creates controls related with the SPDIF input.
1935 * Called from each patch supporting the SPDIF in.
1937 * Returns 0 if successful, or a negative error code.
1939 int snd_hda_create_spdif_in_ctls(struct hda_codec *codec, hda_nid_t nid)
1942 struct snd_kcontrol *kctl;
1943 struct snd_kcontrol_new *dig_mix;
1946 for (idx = 0; idx < SPDIF_MAX_IDX; idx++) {
1947 if (!_snd_hda_find_mixer_ctl(codec, "IEC958 Capture Switch",
1951 if (idx >= SPDIF_MAX_IDX) {
1952 printk(KERN_ERR "hda_codec: too many IEC958 inputs\n");
1955 for (dig_mix = dig_in_ctls; dig_mix->name; dig_mix++) {
1956 kctl = snd_ctl_new1(dig_mix, codec);
1957 kctl->private_value = nid;
1958 err = snd_hda_ctl_add(codec, kctl);
1962 codec->spdif_in_enable =
1963 snd_hda_codec_read(codec, nid, 0,
1964 AC_VERB_GET_DIGI_CONVERT_1, 0) &
1968 EXPORT_SYMBOL_HDA(snd_hda_create_spdif_in_ctls);
1970 #ifdef SND_HDA_NEEDS_RESUME
1975 /* build a 32bit cache key with the widget id and the command parameter */
1976 #define build_cmd_cache_key(nid, verb) ((verb << 8) | nid)
1977 #define get_cmd_cache_nid(key) ((key) & 0xff)
1978 #define get_cmd_cache_cmd(key) (((key) >> 8) & 0xffff)
1981 * snd_hda_codec_write_cache - send a single command with caching
1982 * @codec: the HDA codec
1983 * @nid: NID to send the command
1984 * @direct: direct flag
1985 * @verb: the verb to send
1986 * @parm: the parameter for the verb
1988 * Send a single command without waiting for response.
1990 * Returns 0 if successful, or a negative error code.
1992 int snd_hda_codec_write_cache(struct hda_codec *codec, hda_nid_t nid,
1993 int direct, unsigned int verb, unsigned int parm)
1995 struct hda_bus *bus = codec->bus;
1999 res = make_codec_cmd(codec, nid, direct, verb, parm);
2000 snd_hda_power_up(codec);
2001 mutex_lock(&bus->cmd_mutex);
2002 err = bus->ops.command(bus, res);
2004 struct hda_cache_head *c;
2005 u32 key = build_cmd_cache_key(nid, verb);
2006 c = get_alloc_hash(&codec->cmd_cache, key);
2010 mutex_unlock(&bus->cmd_mutex);
2011 snd_hda_power_down(codec);
2014 EXPORT_SYMBOL_HDA(snd_hda_codec_write_cache);
2016 /* resume the all commands from the cache */
2017 void snd_hda_codec_resume_cache(struct hda_codec *codec)
2019 struct hda_cache_head *buffer = codec->cmd_cache.buf.list;
2022 for (i = 0; i < codec->cmd_cache.buf.used; i++, buffer++) {
2023 u32 key = buffer->key;
2026 snd_hda_codec_write(codec, get_cmd_cache_nid(key), 0,
2027 get_cmd_cache_cmd(key), buffer->val);
2030 EXPORT_SYMBOL_HDA(snd_hda_codec_resume_cache);
2033 * snd_hda_sequence_write_cache - sequence writes with caching
2034 * @codec: the HDA codec
2035 * @seq: VERB array to send
2037 * Send the commands sequentially from the given array.
2038 * Thte commands are recorded on cache for power-save and resume.
2039 * The array must be terminated with NID=0.
2041 void snd_hda_sequence_write_cache(struct hda_codec *codec,
2042 const struct hda_verb *seq)
2044 for (; seq->nid; seq++)
2045 snd_hda_codec_write_cache(codec, seq->nid, 0, seq->verb,
2048 EXPORT_SYMBOL_HDA(snd_hda_sequence_write_cache);
2049 #endif /* SND_HDA_NEEDS_RESUME */
2052 * set power state of the codec
2054 static void hda_set_power_state(struct hda_codec *codec, hda_nid_t fg,
2055 unsigned int power_state)
2060 snd_hda_codec_write(codec, fg, 0, AC_VERB_SET_POWER_STATE,
2062 msleep(10); /* partial workaround for "azx_get_response timeout" */
2064 nid = codec->start_nid;
2065 for (i = 0; i < codec->num_nodes; i++, nid++) {
2066 unsigned int wcaps = get_wcaps(codec, nid);
2067 if (wcaps & AC_WCAP_POWER) {
2068 unsigned int wid_type = (wcaps & AC_WCAP_TYPE) >>
2070 if (wid_type == AC_WID_PIN) {
2071 unsigned int pincap;
2073 * don't power down the widget if it controls
2074 * eapd and EAPD_BTLENABLE is set.
2076 pincap = snd_hda_param_read(codec, nid,
2078 if (pincap & AC_PINCAP_EAPD) {
2079 int eapd = snd_hda_codec_read(codec,
2081 AC_VERB_GET_EAPD_BTLENABLE, 0);
2083 if (power_state == AC_PWRST_D3 && eapd)
2087 snd_hda_codec_write(codec, nid, 0,
2088 AC_VERB_SET_POWER_STATE,
2093 if (power_state == AC_PWRST_D0) {
2094 unsigned long end_time;
2097 /* wait until the codec reachs to D0 */
2098 end_time = jiffies + msecs_to_jiffies(500);
2100 state = snd_hda_codec_read(codec, fg, 0,
2101 AC_VERB_GET_POWER_STATE, 0);
2102 if (state == power_state)
2105 } while (time_after_eq(end_time, jiffies));
2109 #ifdef CONFIG_SND_HDA_HWDEP
2110 /* execute additional init verbs */
2111 static void hda_exec_init_verbs(struct hda_codec *codec)
2113 if (codec->init_verbs.list)
2114 snd_hda_sequence_write(codec, codec->init_verbs.list);
2117 static inline void hda_exec_init_verbs(struct hda_codec *codec) {}
2120 #ifdef SND_HDA_NEEDS_RESUME
2122 * call suspend and power-down; used both from PM and power-save
2124 static void hda_call_codec_suspend(struct hda_codec *codec)
2126 if (codec->patch_ops.suspend)
2127 codec->patch_ops.suspend(codec, PMSG_SUSPEND);
2128 hda_set_power_state(codec,
2129 codec->afg ? codec->afg : codec->mfg,
2131 #ifdef CONFIG_SND_HDA_POWER_SAVE
2132 cancel_delayed_work(&codec->power_work);
2133 codec->power_on = 0;
2134 codec->power_transition = 0;
2139 * kick up codec; used both from PM and power-save
2141 static void hda_call_codec_resume(struct hda_codec *codec)
2143 hda_set_power_state(codec,
2144 codec->afg ? codec->afg : codec->mfg,
2146 hda_exec_init_verbs(codec);
2147 if (codec->patch_ops.resume)
2148 codec->patch_ops.resume(codec);
2150 if (codec->patch_ops.init)
2151 codec->patch_ops.init(codec);
2152 snd_hda_codec_resume_amp(codec);
2153 snd_hda_codec_resume_cache(codec);
2156 #endif /* SND_HDA_NEEDS_RESUME */
2160 * snd_hda_build_controls - build mixer controls
2163 * Creates mixer controls for each codec included in the bus.
2165 * Returns 0 if successful, otherwise a negative error code.
2167 int /*__devinit*/ snd_hda_build_controls(struct hda_bus *bus)
2169 struct hda_codec *codec;
2171 list_for_each_entry(codec, &bus->codec_list, list) {
2172 int err = snd_hda_codec_build_controls(codec);
2178 EXPORT_SYMBOL_HDA(snd_hda_build_controls);
2180 int snd_hda_codec_build_controls(struct hda_codec *codec)
2183 /* fake as if already powered-on */
2184 hda_keep_power_on(codec);
2186 hda_set_power_state(codec,
2187 codec->afg ? codec->afg : codec->mfg,
2189 hda_exec_init_verbs(codec);
2190 /* continue to initialize... */
2191 if (codec->patch_ops.init)
2192 err = codec->patch_ops.init(codec);
2193 if (!err && codec->patch_ops.build_controls)
2194 err = codec->patch_ops.build_controls(codec);
2195 snd_hda_power_down(codec);
2204 struct hda_rate_tbl {
2206 unsigned int alsa_bits;
2207 unsigned int hda_fmt;
2210 static struct hda_rate_tbl rate_bits[] = {
2211 /* rate in Hz, ALSA rate bitmask, HDA format value */
2213 /* autodetected value used in snd_hda_query_supported_pcm */
2214 { 8000, SNDRV_PCM_RATE_8000, 0x0500 }, /* 1/6 x 48 */
2215 { 11025, SNDRV_PCM_RATE_11025, 0x4300 }, /* 1/4 x 44 */
2216 { 16000, SNDRV_PCM_RATE_16000, 0x0200 }, /* 1/3 x 48 */
2217 { 22050, SNDRV_PCM_RATE_22050, 0x4100 }, /* 1/2 x 44 */
2218 { 32000, SNDRV_PCM_RATE_32000, 0x0a00 }, /* 2/3 x 48 */
2219 { 44100, SNDRV_PCM_RATE_44100, 0x4000 }, /* 44 */
2220 { 48000, SNDRV_PCM_RATE_48000, 0x0000 }, /* 48 */
2221 { 88200, SNDRV_PCM_RATE_88200, 0x4800 }, /* 2 x 44 */
2222 { 96000, SNDRV_PCM_RATE_96000, 0x0800 }, /* 2 x 48 */
2223 { 176400, SNDRV_PCM_RATE_176400, 0x5800 },/* 4 x 44 */
2224 { 192000, SNDRV_PCM_RATE_192000, 0x1800 }, /* 4 x 48 */
2225 #define AC_PAR_PCM_RATE_BITS 11
2226 /* up to bits 10, 384kHZ isn't supported properly */
2228 /* not autodetected value */
2229 { 9600, SNDRV_PCM_RATE_KNOT, 0x0400 }, /* 1/5 x 48 */
2231 { 0 } /* terminator */
2235 * snd_hda_calc_stream_format - calculate format bitset
2236 * @rate: the sample rate
2237 * @channels: the number of channels
2238 * @format: the PCM format (SNDRV_PCM_FORMAT_XXX)
2239 * @maxbps: the max. bps
2241 * Calculate the format bitset from the given rate, channels and th PCM format.
2243 * Return zero if invalid.
2245 unsigned int snd_hda_calc_stream_format(unsigned int rate,
2246 unsigned int channels,
2247 unsigned int format,
2248 unsigned int maxbps)
2251 unsigned int val = 0;
2253 for (i = 0; rate_bits[i].hz; i++)
2254 if (rate_bits[i].hz == rate) {
2255 val = rate_bits[i].hda_fmt;
2258 if (!rate_bits[i].hz) {
2259 snd_printdd("invalid rate %d\n", rate);
2263 if (channels == 0 || channels > 8) {
2264 snd_printdd("invalid channels %d\n", channels);
2267 val |= channels - 1;
2269 switch (snd_pcm_format_width(format)) {
2270 case 8: val |= 0x00; break;
2271 case 16: val |= 0x10; break;
2277 else if (maxbps >= 24)
2283 snd_printdd("invalid format width %d\n",
2284 snd_pcm_format_width(format));
2290 EXPORT_SYMBOL_HDA(snd_hda_calc_stream_format);
2293 * snd_hda_query_supported_pcm - query the supported PCM rates and formats
2294 * @codec: the HDA codec
2295 * @nid: NID to query
2296 * @ratesp: the pointer to store the detected rate bitflags
2297 * @formatsp: the pointer to store the detected formats
2298 * @bpsp: the pointer to store the detected format widths
2300 * Queries the supported PCM rates and formats. The NULL @ratesp, @formatsp
2301 * or @bsps argument is ignored.
2303 * Returns 0 if successful, otherwise a negative error code.
2305 static int snd_hda_query_supported_pcm(struct hda_codec *codec, hda_nid_t nid,
2306 u32 *ratesp, u64 *formatsp, unsigned int *bpsp)
2309 unsigned int val, streams;
2312 if (nid != codec->afg &&
2313 (get_wcaps(codec, nid) & AC_WCAP_FORMAT_OVRD)) {
2314 val = snd_hda_param_read(codec, nid, AC_PAR_PCM);
2319 val = snd_hda_param_read(codec, codec->afg, AC_PAR_PCM);
2323 for (i = 0; i < AC_PAR_PCM_RATE_BITS; i++) {
2325 rates |= rate_bits[i].alsa_bits;
2330 if (formatsp || bpsp) {
2335 wcaps = get_wcaps(codec, nid);
2336 streams = snd_hda_param_read(codec, nid, AC_PAR_STREAM);
2340 streams = snd_hda_param_read(codec, codec->afg,
2347 if (streams & AC_SUPFMT_PCM) {
2348 if (val & AC_SUPPCM_BITS_8) {
2349 formats |= SNDRV_PCM_FMTBIT_U8;
2352 if (val & AC_SUPPCM_BITS_16) {
2353 formats |= SNDRV_PCM_FMTBIT_S16_LE;
2356 if (wcaps & AC_WCAP_DIGITAL) {
2357 if (val & AC_SUPPCM_BITS_32)
2358 formats |= SNDRV_PCM_FMTBIT_IEC958_SUBFRAME_LE;
2359 if (val & (AC_SUPPCM_BITS_20|AC_SUPPCM_BITS_24))
2360 formats |= SNDRV_PCM_FMTBIT_S32_LE;
2361 if (val & AC_SUPPCM_BITS_24)
2363 else if (val & AC_SUPPCM_BITS_20)
2365 } else if (val & (AC_SUPPCM_BITS_20|AC_SUPPCM_BITS_24|
2366 AC_SUPPCM_BITS_32)) {
2367 formats |= SNDRV_PCM_FMTBIT_S32_LE;
2368 if (val & AC_SUPPCM_BITS_32)
2370 else if (val & AC_SUPPCM_BITS_24)
2372 else if (val & AC_SUPPCM_BITS_20)
2376 else if (streams == AC_SUPFMT_FLOAT32) {
2377 /* should be exclusive */
2378 formats |= SNDRV_PCM_FMTBIT_FLOAT_LE;
2380 } else if (streams == AC_SUPFMT_AC3) {
2381 /* should be exclusive */
2382 /* temporary hack: we have still no proper support
2383 * for the direct AC3 stream...
2385 formats |= SNDRV_PCM_FMTBIT_U8;
2389 *formatsp = formats;
2398 * snd_hda_is_supported_format - check whether the given node supports
2401 * Returns 1 if supported, 0 if not.
2403 int snd_hda_is_supported_format(struct hda_codec *codec, hda_nid_t nid,
2404 unsigned int format)
2407 unsigned int val = 0, rate, stream;
2409 if (nid != codec->afg &&
2410 (get_wcaps(codec, nid) & AC_WCAP_FORMAT_OVRD)) {
2411 val = snd_hda_param_read(codec, nid, AC_PAR_PCM);
2416 val = snd_hda_param_read(codec, codec->afg, AC_PAR_PCM);
2421 rate = format & 0xff00;
2422 for (i = 0; i < AC_PAR_PCM_RATE_BITS; i++)
2423 if (rate_bits[i].hda_fmt == rate) {
2428 if (i >= AC_PAR_PCM_RATE_BITS)
2431 stream = snd_hda_param_read(codec, nid, AC_PAR_STREAM);
2434 if (!stream && nid != codec->afg)
2435 stream = snd_hda_param_read(codec, codec->afg, AC_PAR_STREAM);
2436 if (!stream || stream == -1)
2439 if (stream & AC_SUPFMT_PCM) {
2440 switch (format & 0xf0) {
2442 if (!(val & AC_SUPPCM_BITS_8))
2446 if (!(val & AC_SUPPCM_BITS_16))
2450 if (!(val & AC_SUPPCM_BITS_20))
2454 if (!(val & AC_SUPPCM_BITS_24))
2458 if (!(val & AC_SUPPCM_BITS_32))
2465 /* FIXME: check for float32 and AC3? */
2470 EXPORT_SYMBOL_HDA(snd_hda_is_supported_format);
2475 static int hda_pcm_default_open_close(struct hda_pcm_stream *hinfo,
2476 struct hda_codec *codec,
2477 struct snd_pcm_substream *substream)
2482 static int hda_pcm_default_prepare(struct hda_pcm_stream *hinfo,
2483 struct hda_codec *codec,
2484 unsigned int stream_tag,
2485 unsigned int format,
2486 struct snd_pcm_substream *substream)
2488 snd_hda_codec_setup_stream(codec, hinfo->nid, stream_tag, 0, format);
2492 static int hda_pcm_default_cleanup(struct hda_pcm_stream *hinfo,
2493 struct hda_codec *codec,
2494 struct snd_pcm_substream *substream)
2496 snd_hda_codec_cleanup_stream(codec, hinfo->nid);
2500 static int set_pcm_default_values(struct hda_codec *codec,
2501 struct hda_pcm_stream *info)
2503 /* query support PCM information from the given NID */
2504 if (info->nid && (!info->rates || !info->formats)) {
2505 snd_hda_query_supported_pcm(codec, info->nid,
2506 info->rates ? NULL : &info->rates,
2507 info->formats ? NULL : &info->formats,
2508 info->maxbps ? NULL : &info->maxbps);
2510 if (info->ops.open == NULL)
2511 info->ops.open = hda_pcm_default_open_close;
2512 if (info->ops.close == NULL)
2513 info->ops.close = hda_pcm_default_open_close;
2514 if (info->ops.prepare == NULL) {
2515 if (snd_BUG_ON(!info->nid))
2517 info->ops.prepare = hda_pcm_default_prepare;
2519 if (info->ops.cleanup == NULL) {
2520 if (snd_BUG_ON(!info->nid))
2522 info->ops.cleanup = hda_pcm_default_cleanup;
2528 * get the empty PCM device number to assign
2530 static int get_empty_pcm_device(struct hda_bus *bus, int type)
2532 static const char *dev_name[HDA_PCM_NTYPES] = {
2533 "Audio", "SPDIF", "HDMI", "Modem"
2535 /* starting device index for each PCM type */
2536 static int dev_idx[HDA_PCM_NTYPES] = {
2537 [HDA_PCM_TYPE_AUDIO] = 0,
2538 [HDA_PCM_TYPE_SPDIF] = 1,
2539 [HDA_PCM_TYPE_HDMI] = 3,
2540 [HDA_PCM_TYPE_MODEM] = 6
2542 /* normal audio device indices; not linear to keep compatibility */
2543 static int audio_idx[4] = { 0, 2, 4, 5 };
2547 case HDA_PCM_TYPE_AUDIO:
2548 for (i = 0; i < ARRAY_SIZE(audio_idx); i++) {
2550 if (!test_bit(dev, bus->pcm_dev_bits))
2553 if (i >= ARRAY_SIZE(audio_idx)) {
2554 snd_printk(KERN_WARNING "Too many audio devices\n");
2558 case HDA_PCM_TYPE_SPDIF:
2559 case HDA_PCM_TYPE_HDMI:
2560 case HDA_PCM_TYPE_MODEM:
2561 dev = dev_idx[type];
2562 if (test_bit(dev, bus->pcm_dev_bits)) {
2563 snd_printk(KERN_WARNING "%s already defined\n",
2569 snd_printk(KERN_WARNING "Invalid PCM type %d\n", type);
2572 set_bit(dev, bus->pcm_dev_bits);
2577 * attach a new PCM stream
2579 static int snd_hda_attach_pcm(struct hda_codec *codec, struct hda_pcm *pcm)
2581 struct hda_bus *bus = codec->bus;
2582 struct hda_pcm_stream *info;
2585 if (snd_BUG_ON(!pcm->name))
2587 for (stream = 0; stream < 2; stream++) {
2588 info = &pcm->stream[stream];
2589 if (info->substreams) {
2590 err = set_pcm_default_values(codec, info);
2595 return bus->ops.attach_pcm(bus, codec, pcm);
2598 /* assign all PCMs of the given codec */
2599 int snd_hda_codec_build_pcms(struct hda_codec *codec)
2604 if (!codec->num_pcms) {
2605 if (!codec->patch_ops.build_pcms)
2607 err = codec->patch_ops.build_pcms(codec);
2611 for (pcm = 0; pcm < codec->num_pcms; pcm++) {
2612 struct hda_pcm *cpcm = &codec->pcm_info[pcm];
2615 if (!cpcm->stream[0].substreams && !cpcm->stream[1].substreams)
2616 return 0; /* no substreams assigned */
2619 dev = get_empty_pcm_device(codec->bus, cpcm->pcm_type);
2623 err = snd_hda_attach_pcm(codec, cpcm);
2632 * snd_hda_build_pcms - build PCM information
2635 * Create PCM information for each codec included in the bus.
2637 * The build_pcms codec patch is requested to set up codec->num_pcms and
2638 * codec->pcm_info properly. The array is referred by the top-level driver
2639 * to create its PCM instances.
2640 * The allocated codec->pcm_info should be released in codec->patch_ops.free
2643 * At least, substreams, channels_min and channels_max must be filled for
2644 * each stream. substreams = 0 indicates that the stream doesn't exist.
2645 * When rates and/or formats are zero, the supported values are queried
2646 * from the given nid. The nid is used also by the default ops.prepare
2647 * and ops.cleanup callbacks.
2649 * The driver needs to call ops.open in its open callback. Similarly,
2650 * ops.close is supposed to be called in the close callback.
2651 * ops.prepare should be called in the prepare or hw_params callback
2652 * with the proper parameters for set up.
2653 * ops.cleanup should be called in hw_free for clean up of streams.
2655 * This function returns 0 if successfull, or a negative error code.
2657 int __devinit snd_hda_build_pcms(struct hda_bus *bus)
2659 struct hda_codec *codec;
2661 list_for_each_entry(codec, &bus->codec_list, list) {
2662 int err = snd_hda_codec_build_pcms(codec);
2668 EXPORT_SYMBOL_HDA(snd_hda_build_pcms);
2671 * snd_hda_check_board_config - compare the current codec with the config table
2672 * @codec: the HDA codec
2673 * @num_configs: number of config enums
2674 * @models: array of model name strings
2675 * @tbl: configuration table, terminated by null entries
2677 * Compares the modelname or PCI subsystem id of the current codec with the
2678 * given configuration table. If a matching entry is found, returns its
2679 * config value (supposed to be 0 or positive).
2681 * If no entries are matching, the function returns a negative value.
2683 int snd_hda_check_board_config(struct hda_codec *codec,
2684 int num_configs, const char **models,
2685 const struct snd_pci_quirk *tbl)
2687 if (codec->modelname && models) {
2689 for (i = 0; i < num_configs; i++) {
2691 !strcmp(codec->modelname, models[i])) {
2692 snd_printd(KERN_INFO "hda_codec: model '%s' is "
2693 "selected\n", models[i]);
2699 if (!codec->bus->pci || !tbl)
2702 tbl = snd_pci_quirk_lookup(codec->bus->pci, tbl);
2705 if (tbl->value >= 0 && tbl->value < num_configs) {
2706 #ifdef CONFIG_SND_DEBUG_VERBOSE
2708 const char *model = NULL;
2710 model = models[tbl->value];
2712 sprintf(tmp, "#%d", tbl->value);
2715 snd_printdd(KERN_INFO "hda_codec: model '%s' is selected "
2716 "for config %x:%x (%s)\n",
2717 model, tbl->subvendor, tbl->subdevice,
2718 (tbl->name ? tbl->name : "Unknown device"));
2724 EXPORT_SYMBOL_HDA(snd_hda_check_board_config);
2727 * snd_hda_add_new_ctls - create controls from the array
2728 * @codec: the HDA codec
2729 * @knew: the array of struct snd_kcontrol_new
2731 * This helper function creates and add new controls in the given array.
2732 * The array must be terminated with an empty entry as terminator.
2734 * Returns 0 if successful, or a negative error code.
2736 int snd_hda_add_new_ctls(struct hda_codec *codec, struct snd_kcontrol_new *knew)
2740 for (; knew->name; knew++) {
2741 struct snd_kcontrol *kctl;
2742 kctl = snd_ctl_new1(knew, codec);
2745 err = snd_hda_ctl_add(codec, kctl);
2749 kctl = snd_ctl_new1(knew, codec);
2752 kctl->id.device = codec->addr;
2753 err = snd_hda_ctl_add(codec, kctl);
2760 EXPORT_SYMBOL_HDA(snd_hda_add_new_ctls);
2762 #ifdef CONFIG_SND_HDA_POWER_SAVE
2763 static void hda_set_power_state(struct hda_codec *codec, hda_nid_t fg,
2764 unsigned int power_state);
2766 static void hda_power_work(struct work_struct *work)
2768 struct hda_codec *codec =
2769 container_of(work, struct hda_codec, power_work.work);
2770 struct hda_bus *bus = codec->bus;
2772 if (!codec->power_on || codec->power_count) {
2773 codec->power_transition = 0;
2777 hda_call_codec_suspend(codec);
2778 if (bus->ops.pm_notify)
2779 bus->ops.pm_notify(bus);
2782 static void hda_keep_power_on(struct hda_codec *codec)
2784 codec->power_count++;
2785 codec->power_on = 1;
2788 void snd_hda_power_up(struct hda_codec *codec)
2790 struct hda_bus *bus = codec->bus;
2792 codec->power_count++;
2793 if (codec->power_on || codec->power_transition)
2796 codec->power_on = 1;
2797 if (bus->ops.pm_notify)
2798 bus->ops.pm_notify(bus);
2799 hda_call_codec_resume(codec);
2800 cancel_delayed_work(&codec->power_work);
2801 codec->power_transition = 0;
2803 EXPORT_SYMBOL_HDA(snd_hda_power_up);
2805 #define power_save(codec) \
2806 ((codec)->bus->power_save ? *(codec)->bus->power_save : 0)
2808 #define power_save(codec) \
2809 ((codec)->bus->power_save ? *(codec)->bus->power_save : 0)
2811 void snd_hda_power_down(struct hda_codec *codec)
2813 --codec->power_count;
2814 if (!codec->power_on || codec->power_count || codec->power_transition)
2816 if (power_save(codec)) {
2817 codec->power_transition = 1; /* avoid reentrance */
2818 schedule_delayed_work(&codec->power_work,
2819 msecs_to_jiffies(power_save(codec) * 1000));
2822 EXPORT_SYMBOL_HDA(snd_hda_power_down);
2824 int snd_hda_check_amp_list_power(struct hda_codec *codec,
2825 struct hda_loopback_check *check,
2828 struct hda_amp_list *p;
2831 if (!check->amplist)
2833 for (p = check->amplist; p->nid; p++) {
2838 return 0; /* nothing changed */
2840 for (p = check->amplist; p->nid; p++) {
2841 for (ch = 0; ch < 2; ch++) {
2842 v = snd_hda_codec_amp_read(codec, p->nid, ch, p->dir,
2844 if (!(v & HDA_AMP_MUTE) && v > 0) {
2845 if (!check->power_on) {
2846 check->power_on = 1;
2847 snd_hda_power_up(codec);
2853 if (check->power_on) {
2854 check->power_on = 0;
2855 snd_hda_power_down(codec);
2859 EXPORT_SYMBOL_HDA(snd_hda_check_amp_list_power);
2863 * Channel mode helper
2865 int snd_hda_ch_mode_info(struct hda_codec *codec,
2866 struct snd_ctl_elem_info *uinfo,
2867 const struct hda_channel_mode *chmode,
2870 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
2872 uinfo->value.enumerated.items = num_chmodes;
2873 if (uinfo->value.enumerated.item >= num_chmodes)
2874 uinfo->value.enumerated.item = num_chmodes - 1;
2875 sprintf(uinfo->value.enumerated.name, "%dch",
2876 chmode[uinfo->value.enumerated.item].channels);
2879 EXPORT_SYMBOL_HDA(snd_hda_ch_mode_info);
2881 int snd_hda_ch_mode_get(struct hda_codec *codec,
2882 struct snd_ctl_elem_value *ucontrol,
2883 const struct hda_channel_mode *chmode,
2889 for (i = 0; i < num_chmodes; i++) {
2890 if (max_channels == chmode[i].channels) {
2891 ucontrol->value.enumerated.item[0] = i;
2897 EXPORT_SYMBOL_HDA(snd_hda_ch_mode_get);
2899 int snd_hda_ch_mode_put(struct hda_codec *codec,
2900 struct snd_ctl_elem_value *ucontrol,
2901 const struct hda_channel_mode *chmode,
2907 mode = ucontrol->value.enumerated.item[0];
2908 if (mode >= num_chmodes)
2910 if (*max_channelsp == chmode[mode].channels)
2912 /* change the current channel setting */
2913 *max_channelsp = chmode[mode].channels;
2914 if (chmode[mode].sequence)
2915 snd_hda_sequence_write_cache(codec, chmode[mode].sequence);
2918 EXPORT_SYMBOL_HDA(snd_hda_ch_mode_put);
2923 int snd_hda_input_mux_info(const struct hda_input_mux *imux,
2924 struct snd_ctl_elem_info *uinfo)
2928 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
2930 uinfo->value.enumerated.items = imux->num_items;
2931 if (!imux->num_items)
2933 index = uinfo->value.enumerated.item;
2934 if (index >= imux->num_items)
2935 index = imux->num_items - 1;
2936 strcpy(uinfo->value.enumerated.name, imux->items[index].label);
2939 EXPORT_SYMBOL_HDA(snd_hda_input_mux_info);
2941 int snd_hda_input_mux_put(struct hda_codec *codec,
2942 const struct hda_input_mux *imux,
2943 struct snd_ctl_elem_value *ucontrol,
2945 unsigned int *cur_val)
2949 if (!imux->num_items)
2951 idx = ucontrol->value.enumerated.item[0];
2952 if (idx >= imux->num_items)
2953 idx = imux->num_items - 1;
2954 if (*cur_val == idx)
2956 snd_hda_codec_write_cache(codec, nid, 0, AC_VERB_SET_CONNECT_SEL,
2957 imux->items[idx].index);
2961 EXPORT_SYMBOL_HDA(snd_hda_input_mux_put);
2965 * Multi-channel / digital-out PCM helper functions
2968 /* setup SPDIF output stream */
2969 static void setup_dig_out_stream(struct hda_codec *codec, hda_nid_t nid,
2970 unsigned int stream_tag, unsigned int format)
2972 /* turn off SPDIF once; otherwise the IEC958 bits won't be updated */
2973 if (codec->spdif_status_reset && (codec->spdif_ctls & AC_DIG1_ENABLE))
2974 set_dig_out_convert(codec, nid,
2975 codec->spdif_ctls & ~AC_DIG1_ENABLE & 0xff,
2977 snd_hda_codec_setup_stream(codec, nid, stream_tag, 0, format);
2978 if (codec->slave_dig_outs) {
2980 for (d = codec->slave_dig_outs; *d; d++)
2981 snd_hda_codec_setup_stream(codec, *d, stream_tag, 0,
2984 /* turn on again (if needed) */
2985 if (codec->spdif_status_reset && (codec->spdif_ctls & AC_DIG1_ENABLE))
2986 set_dig_out_convert(codec, nid,
2987 codec->spdif_ctls & 0xff, -1);
2990 static void cleanup_dig_out_stream(struct hda_codec *codec, hda_nid_t nid)
2992 snd_hda_codec_cleanup_stream(codec, nid);
2993 if (codec->slave_dig_outs) {
2995 for (d = codec->slave_dig_outs; *d; d++)
2996 snd_hda_codec_cleanup_stream(codec, *d);
3001 * open the digital out in the exclusive mode
3003 int snd_hda_multi_out_dig_open(struct hda_codec *codec,
3004 struct hda_multi_out *mout)
3006 mutex_lock(&codec->spdif_mutex);
3007 if (mout->dig_out_used == HDA_DIG_ANALOG_DUP)
3008 /* already opened as analog dup; reset it once */
3009 cleanup_dig_out_stream(codec, mout->dig_out_nid);
3010 mout->dig_out_used = HDA_DIG_EXCLUSIVE;
3011 mutex_unlock(&codec->spdif_mutex);
3014 EXPORT_SYMBOL_HDA(snd_hda_multi_out_dig_open);
3016 int snd_hda_multi_out_dig_prepare(struct hda_codec *codec,
3017 struct hda_multi_out *mout,
3018 unsigned int stream_tag,
3019 unsigned int format,
3020 struct snd_pcm_substream *substream)
3022 mutex_lock(&codec->spdif_mutex);
3023 setup_dig_out_stream(codec, mout->dig_out_nid, stream_tag, format);
3024 mutex_unlock(&codec->spdif_mutex);
3027 EXPORT_SYMBOL_HDA(snd_hda_multi_out_dig_prepare);
3030 * release the digital out
3032 int snd_hda_multi_out_dig_close(struct hda_codec *codec,
3033 struct hda_multi_out *mout)
3035 mutex_lock(&codec->spdif_mutex);
3036 mout->dig_out_used = 0;
3037 mutex_unlock(&codec->spdif_mutex);
3040 EXPORT_SYMBOL_HDA(snd_hda_multi_out_dig_close);
3043 * set up more restrictions for analog out
3045 int snd_hda_multi_out_analog_open(struct hda_codec *codec,
3046 struct hda_multi_out *mout,
3047 struct snd_pcm_substream *substream,
3048 struct hda_pcm_stream *hinfo)
3050 struct snd_pcm_runtime *runtime = substream->runtime;
3051 runtime->hw.channels_max = mout->max_channels;
3052 if (mout->dig_out_nid) {
3053 if (!mout->analog_rates) {
3054 mout->analog_rates = hinfo->rates;
3055 mout->analog_formats = hinfo->formats;
3056 mout->analog_maxbps = hinfo->maxbps;
3058 runtime->hw.rates = mout->analog_rates;
3059 runtime->hw.formats = mout->analog_formats;
3060 hinfo->maxbps = mout->analog_maxbps;
3062 if (!mout->spdif_rates) {
3063 snd_hda_query_supported_pcm(codec, mout->dig_out_nid,
3065 &mout->spdif_formats,
3066 &mout->spdif_maxbps);
3068 mutex_lock(&codec->spdif_mutex);
3069 if (mout->share_spdif) {
3070 runtime->hw.rates &= mout->spdif_rates;
3071 runtime->hw.formats &= mout->spdif_formats;
3072 if (mout->spdif_maxbps < hinfo->maxbps)
3073 hinfo->maxbps = mout->spdif_maxbps;
3075 mutex_unlock(&codec->spdif_mutex);
3077 return snd_pcm_hw_constraint_step(substream->runtime, 0,
3078 SNDRV_PCM_HW_PARAM_CHANNELS, 2);
3080 EXPORT_SYMBOL_HDA(snd_hda_multi_out_analog_open);
3083 * set up the i/o for analog out
3084 * when the digital out is available, copy the front out to digital out, too.
3086 int snd_hda_multi_out_analog_prepare(struct hda_codec *codec,
3087 struct hda_multi_out *mout,
3088 unsigned int stream_tag,
3089 unsigned int format,
3090 struct snd_pcm_substream *substream)
3092 hda_nid_t *nids = mout->dac_nids;
3093 int chs = substream->runtime->channels;
3096 mutex_lock(&codec->spdif_mutex);
3097 if (mout->dig_out_nid && mout->share_spdif &&
3098 mout->dig_out_used != HDA_DIG_EXCLUSIVE) {
3100 snd_hda_is_supported_format(codec, mout->dig_out_nid,
3102 !(codec->spdif_status & IEC958_AES0_NONAUDIO)) {
3103 mout->dig_out_used = HDA_DIG_ANALOG_DUP;
3104 setup_dig_out_stream(codec, mout->dig_out_nid,
3105 stream_tag, format);
3107 mout->dig_out_used = 0;
3108 cleanup_dig_out_stream(codec, mout->dig_out_nid);
3111 mutex_unlock(&codec->spdif_mutex);
3114 snd_hda_codec_setup_stream(codec, nids[HDA_FRONT], stream_tag,
3116 if (!mout->no_share_stream &&
3117 mout->hp_nid && mout->hp_nid != nids[HDA_FRONT])
3118 /* headphone out will just decode front left/right (stereo) */
3119 snd_hda_codec_setup_stream(codec, mout->hp_nid, stream_tag,
3121 /* extra outputs copied from front */
3122 for (i = 0; i < ARRAY_SIZE(mout->extra_out_nid); i++)
3123 if (!mout->no_share_stream && mout->extra_out_nid[i])
3124 snd_hda_codec_setup_stream(codec,
3125 mout->extra_out_nid[i],
3126 stream_tag, 0, format);
3129 for (i = 1; i < mout->num_dacs; i++) {
3130 if (chs >= (i + 1) * 2) /* independent out */
3131 snd_hda_codec_setup_stream(codec, nids[i], stream_tag,
3133 else if (!mout->no_share_stream) /* copy front */
3134 snd_hda_codec_setup_stream(codec, nids[i], stream_tag,
3139 EXPORT_SYMBOL_HDA(snd_hda_multi_out_analog_prepare);
3142 * clean up the setting for analog out
3144 int snd_hda_multi_out_analog_cleanup(struct hda_codec *codec,
3145 struct hda_multi_out *mout)
3147 hda_nid_t *nids = mout->dac_nids;
3150 for (i = 0; i < mout->num_dacs; i++)
3151 snd_hda_codec_cleanup_stream(codec, nids[i]);
3153 snd_hda_codec_cleanup_stream(codec, mout->hp_nid);
3154 for (i = 0; i < ARRAY_SIZE(mout->extra_out_nid); i++)
3155 if (mout->extra_out_nid[i])
3156 snd_hda_codec_cleanup_stream(codec,
3157 mout->extra_out_nid[i]);
3158 mutex_lock(&codec->spdif_mutex);
3159 if (mout->dig_out_nid && mout->dig_out_used == HDA_DIG_ANALOG_DUP) {
3160 cleanup_dig_out_stream(codec, mout->dig_out_nid);
3161 mout->dig_out_used = 0;
3163 mutex_unlock(&codec->spdif_mutex);
3166 EXPORT_SYMBOL_HDA(snd_hda_multi_out_analog_cleanup);
3169 * Helper for automatic pin configuration
3172 static int is_in_nid_list(hda_nid_t nid, hda_nid_t *list)
3174 for (; *list; list++)
3182 * Sort an associated group of pins according to their sequence numbers.
3184 static void sort_pins_by_sequence(hda_nid_t * pins, short * sequences,
3191 for (i = 0; i < num_pins; i++) {
3192 for (j = i + 1; j < num_pins; j++) {
3193 if (sequences[i] > sequences[j]) {
3195 sequences[i] = sequences[j];
3207 * Parse all pin widgets and store the useful pin nids to cfg
3209 * The number of line-outs or any primary output is stored in line_outs,
3210 * and the corresponding output pins are assigned to line_out_pins[],
3211 * in the order of front, rear, CLFE, side, ...
3213 * If more extra outputs (speaker and headphone) are found, the pins are
3214 * assisnged to hp_pins[] and speaker_pins[], respectively. If no line-out jack
3215 * is detected, one of speaker of HP pins is assigned as the primary
3216 * output, i.e. to line_out_pins[0]. So, line_outs is always positive
3217 * if any analog output exists.
3219 * The analog input pins are assigned to input_pins array.
3220 * The digital input/output pins are assigned to dig_in_pin and dig_out_pin,
3223 int snd_hda_parse_pin_def_config(struct hda_codec *codec,
3224 struct auto_pin_cfg *cfg,
3225 hda_nid_t *ignore_nids)
3227 hda_nid_t nid, end_nid;
3228 short seq, assoc_line_out, assoc_speaker;
3229 short sequences_line_out[ARRAY_SIZE(cfg->line_out_pins)];
3230 short sequences_speaker[ARRAY_SIZE(cfg->speaker_pins)];
3231 short sequences_hp[ARRAY_SIZE(cfg->hp_pins)];
3233 memset(cfg, 0, sizeof(*cfg));
3235 memset(sequences_line_out, 0, sizeof(sequences_line_out));
3236 memset(sequences_speaker, 0, sizeof(sequences_speaker));
3237 memset(sequences_hp, 0, sizeof(sequences_hp));
3238 assoc_line_out = assoc_speaker = 0;
3240 end_nid = codec->start_nid + codec->num_nodes;
3241 for (nid = codec->start_nid; nid < end_nid; nid++) {
3242 unsigned int wid_caps = get_wcaps(codec, nid);
3243 unsigned int wid_type =
3244 (wid_caps & AC_WCAP_TYPE) >> AC_WCAP_TYPE_SHIFT;
3245 unsigned int def_conf;
3248 /* read all default configuration for pin complex */
3249 if (wid_type != AC_WID_PIN)
3251 /* ignore the given nids (e.g. pc-beep returns error) */
3252 if (ignore_nids && is_in_nid_list(nid, ignore_nids))
3255 def_conf = snd_hda_codec_read(codec, nid, 0,
3256 AC_VERB_GET_CONFIG_DEFAULT, 0);
3257 if (get_defcfg_connect(def_conf) == AC_JACK_PORT_NONE)
3259 loc = get_defcfg_location(def_conf);
3260 switch (get_defcfg_device(def_conf)) {
3261 case AC_JACK_LINE_OUT:
3262 seq = get_defcfg_sequence(def_conf);
3263 assoc = get_defcfg_association(def_conf);
3265 if (!(wid_caps & AC_WCAP_STEREO))
3266 if (!cfg->mono_out_pin)
3267 cfg->mono_out_pin = nid;
3270 if (!assoc_line_out)
3271 assoc_line_out = assoc;
3272 else if (assoc_line_out != assoc)
3274 if (cfg->line_outs >= ARRAY_SIZE(cfg->line_out_pins))
3276 cfg->line_out_pins[cfg->line_outs] = nid;
3277 sequences_line_out[cfg->line_outs] = seq;
3280 case AC_JACK_SPEAKER:
3281 seq = get_defcfg_sequence(def_conf);
3282 assoc = get_defcfg_association(def_conf);
3285 if (! assoc_speaker)
3286 assoc_speaker = assoc;
3287 else if (assoc_speaker != assoc)
3289 if (cfg->speaker_outs >= ARRAY_SIZE(cfg->speaker_pins))
3291 cfg->speaker_pins[cfg->speaker_outs] = nid;
3292 sequences_speaker[cfg->speaker_outs] = seq;
3293 cfg->speaker_outs++;
3295 case AC_JACK_HP_OUT:
3296 seq = get_defcfg_sequence(def_conf);
3297 assoc = get_defcfg_association(def_conf);
3298 if (cfg->hp_outs >= ARRAY_SIZE(cfg->hp_pins))
3300 cfg->hp_pins[cfg->hp_outs] = nid;
3301 sequences_hp[cfg->hp_outs] = (assoc << 4) | seq;
3304 case AC_JACK_MIC_IN: {
3306 if (loc == AC_JACK_LOC_FRONT) {
3307 preferred = AUTO_PIN_FRONT_MIC;
3310 preferred = AUTO_PIN_MIC;
3311 alt = AUTO_PIN_FRONT_MIC;
3313 if (!cfg->input_pins[preferred])
3314 cfg->input_pins[preferred] = nid;
3315 else if (!cfg->input_pins[alt])
3316 cfg->input_pins[alt] = nid;
3319 case AC_JACK_LINE_IN:
3320 if (loc == AC_JACK_LOC_FRONT)
3321 cfg->input_pins[AUTO_PIN_FRONT_LINE] = nid;
3323 cfg->input_pins[AUTO_PIN_LINE] = nid;
3326 cfg->input_pins[AUTO_PIN_CD] = nid;
3329 cfg->input_pins[AUTO_PIN_AUX] = nid;
3331 case AC_JACK_SPDIF_OUT:
3332 cfg->dig_out_pin = nid;
3334 case AC_JACK_SPDIF_IN:
3335 cfg->dig_in_pin = nid;
3341 * If no line-out is defined but multiple HPs are found,
3342 * some of them might be the real line-outs.
3344 if (!cfg->line_outs && cfg->hp_outs > 1) {
3346 while (i < cfg->hp_outs) {
3347 /* The real HPs should have the sequence 0x0f */
3348 if ((sequences_hp[i] & 0x0f) == 0x0f) {
3352 /* Move it to the line-out table */
3353 cfg->line_out_pins[cfg->line_outs] = cfg->hp_pins[i];
3354 sequences_line_out[cfg->line_outs] = sequences_hp[i];
3357 memmove(cfg->hp_pins + i, cfg->hp_pins + i + 1,
3358 sizeof(cfg->hp_pins[0]) * (cfg->hp_outs - i));
3359 memmove(sequences_hp + i - 1, sequences_hp + i,
3360 sizeof(sequences_hp[0]) * (cfg->hp_outs - i));
3364 /* sort by sequence */
3365 sort_pins_by_sequence(cfg->line_out_pins, sequences_line_out,
3367 sort_pins_by_sequence(cfg->speaker_pins, sequences_speaker,
3369 sort_pins_by_sequence(cfg->hp_pins, sequences_hp,
3372 /* if we have only one mic, make it AUTO_PIN_MIC */
3373 if (!cfg->input_pins[AUTO_PIN_MIC] &&
3374 cfg->input_pins[AUTO_PIN_FRONT_MIC]) {
3375 cfg->input_pins[AUTO_PIN_MIC] =
3376 cfg->input_pins[AUTO_PIN_FRONT_MIC];
3377 cfg->input_pins[AUTO_PIN_FRONT_MIC] = 0;
3379 /* ditto for line-in */
3380 if (!cfg->input_pins[AUTO_PIN_LINE] &&
3381 cfg->input_pins[AUTO_PIN_FRONT_LINE]) {
3382 cfg->input_pins[AUTO_PIN_LINE] =
3383 cfg->input_pins[AUTO_PIN_FRONT_LINE];
3384 cfg->input_pins[AUTO_PIN_FRONT_LINE] = 0;
3388 * FIX-UP: if no line-outs are detected, try to use speaker or HP pin
3389 * as a primary output
3391 if (!cfg->line_outs) {
3392 if (cfg->speaker_outs) {
3393 cfg->line_outs = cfg->speaker_outs;
3394 memcpy(cfg->line_out_pins, cfg->speaker_pins,
3395 sizeof(cfg->speaker_pins));
3396 cfg->speaker_outs = 0;
3397 memset(cfg->speaker_pins, 0, sizeof(cfg->speaker_pins));
3398 cfg->line_out_type = AUTO_PIN_SPEAKER_OUT;
3399 } else if (cfg->hp_outs) {
3400 cfg->line_outs = cfg->hp_outs;
3401 memcpy(cfg->line_out_pins, cfg->hp_pins,
3402 sizeof(cfg->hp_pins));
3404 memset(cfg->hp_pins, 0, sizeof(cfg->hp_pins));
3405 cfg->line_out_type = AUTO_PIN_HP_OUT;
3409 /* Reorder the surround channels
3410 * ALSA sequence is front/surr/clfe/side
3412 * 4-ch: front/surr => OK as it is
3413 * 6-ch: front/clfe/surr
3414 * 8-ch: front/clfe/rear/side|fc
3416 switch (cfg->line_outs) {
3419 nid = cfg->line_out_pins[1];
3420 cfg->line_out_pins[1] = cfg->line_out_pins[2];
3421 cfg->line_out_pins[2] = nid;
3426 * debug prints of the parsed results
3428 snd_printd("autoconfig: line_outs=%d (0x%x/0x%x/0x%x/0x%x/0x%x)\n",
3429 cfg->line_outs, cfg->line_out_pins[0], cfg->line_out_pins[1],
3430 cfg->line_out_pins[2], cfg->line_out_pins[3],
3431 cfg->line_out_pins[4]);
3432 snd_printd(" speaker_outs=%d (0x%x/0x%x/0x%x/0x%x/0x%x)\n",
3433 cfg->speaker_outs, cfg->speaker_pins[0],
3434 cfg->speaker_pins[1], cfg->speaker_pins[2],
3435 cfg->speaker_pins[3], cfg->speaker_pins[4]);
3436 snd_printd(" hp_outs=%d (0x%x/0x%x/0x%x/0x%x/0x%x)\n",
3437 cfg->hp_outs, cfg->hp_pins[0],
3438 cfg->hp_pins[1], cfg->hp_pins[2],
3439 cfg->hp_pins[3], cfg->hp_pins[4]);
3440 snd_printd(" mono: mono_out=0x%x\n", cfg->mono_out_pin);
3441 snd_printd(" inputs: mic=0x%x, fmic=0x%x, line=0x%x, fline=0x%x,"
3442 " cd=0x%x, aux=0x%x\n",
3443 cfg->input_pins[AUTO_PIN_MIC],
3444 cfg->input_pins[AUTO_PIN_FRONT_MIC],
3445 cfg->input_pins[AUTO_PIN_LINE],
3446 cfg->input_pins[AUTO_PIN_FRONT_LINE],
3447 cfg->input_pins[AUTO_PIN_CD],
3448 cfg->input_pins[AUTO_PIN_AUX]);
3452 EXPORT_SYMBOL_HDA(snd_hda_parse_pin_def_config);
3454 /* labels for input pins */
3455 const char *auto_pin_cfg_labels[AUTO_PIN_LAST] = {
3456 "Mic", "Front Mic", "Line", "Front Line", "CD", "Aux"
3458 EXPORT_SYMBOL_HDA(auto_pin_cfg_labels);
3467 * snd_hda_suspend - suspend the codecs
3469 * @state: suspsend state
3471 * Returns 0 if successful.
3473 int snd_hda_suspend(struct hda_bus *bus, pm_message_t state)
3475 struct hda_codec *codec;
3477 list_for_each_entry(codec, &bus->codec_list, list) {
3478 #ifdef CONFIG_SND_HDA_POWER_SAVE
3479 if (!codec->power_on)
3482 hda_call_codec_suspend(codec);
3486 EXPORT_SYMBOL_HDA(snd_hda_suspend);
3489 * snd_hda_resume - resume the codecs
3492 * Returns 0 if successful.
3494 * This fucntion is defined only when POWER_SAVE isn't set.
3495 * In the power-save mode, the codec is resumed dynamically.
3497 int snd_hda_resume(struct hda_bus *bus)
3499 struct hda_codec *codec;
3501 list_for_each_entry(codec, &bus->codec_list, list) {
3502 if (snd_hda_codec_needs_resume(codec))
3503 hda_call_codec_resume(codec);
3507 EXPORT_SYMBOL_HDA(snd_hda_resume);
3508 #endif /* CONFIG_PM */
3514 /* get a new element from the given array
3515 * if it exceeds the pre-allocated array size, re-allocate the array
3517 void *snd_array_new(struct snd_array *array)
3519 if (array->used >= array->alloced) {
3520 int num = array->alloced + array->alloc_align;
3522 if (snd_BUG_ON(num >= 4096))
3524 nlist = kcalloc(num + 1, array->elem_size, GFP_KERNEL);
3528 memcpy(nlist, array->list,
3529 array->elem_size * array->alloced);
3532 array->list = nlist;
3533 array->alloced = num;
3535 return snd_array_elem(array, array->used++);
3537 EXPORT_SYMBOL_HDA(snd_array_new);
3539 /* free the given array elements */
3540 void snd_array_free(struct snd_array *array)
3547 EXPORT_SYMBOL_HDA(snd_array_free);
3550 * used by hda_proc.c and hda_eld.c
3552 void snd_print_pcm_rates(int pcm, char *buf, int buflen)
3554 static unsigned int rates[] = {
3555 8000, 11025, 16000, 22050, 32000, 44100, 48000, 88200,
3556 96000, 176400, 192000, 384000
3560 for (i = 0, j = 0; i < ARRAY_SIZE(rates); i++)
3562 j += snprintf(buf + j, buflen - j, " %d", rates[i]);
3564 buf[j] = '\0'; /* necessary when j == 0 */
3566 EXPORT_SYMBOL_HDA(snd_print_pcm_rates);
3568 void snd_print_pcm_bits(int pcm, char *buf, int buflen)
3570 static unsigned int bits[] = { 8, 16, 20, 24, 32 };
3573 for (i = 0, j = 0; i < ARRAY_SIZE(bits); i++)
3574 if (pcm & (AC_SUPPCM_BITS_8 << i))
3575 j += snprintf(buf + j, buflen - j, " %d", bits[i]);
3577 buf[j] = '\0'; /* necessary when j == 0 */
3579 EXPORT_SYMBOL_HDA(snd_print_pcm_bits);
3581 MODULE_DESCRIPTION("HDA codec core");
3582 MODULE_LICENSE("GPL");