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)
490 static struct snd_device_ops dev_ops = {
491 .dev_register = snd_hda_bus_dev_register,
492 .dev_free = snd_hda_bus_dev_free,
495 if (snd_BUG_ON(!temp))
497 if (snd_BUG_ON(!temp->ops.command || !temp->ops.get_response))
503 bus = kzalloc(sizeof(*bus), GFP_KERNEL);
505 snd_printk(KERN_ERR "can't allocate struct hda_bus\n");
510 bus->private_data = temp->private_data;
511 bus->pci = temp->pci;
512 bus->modelname = temp->modelname;
513 bus->power_save = temp->power_save;
514 bus->ops = temp->ops;
516 mutex_init(&bus->cmd_mutex);
517 INIT_LIST_HEAD(&bus->codec_list);
519 snprintf(bus->workq_name, sizeof(bus->workq_name),
520 "hd-audio%d", card->number);
521 bus->workq = create_singlethread_workqueue(bus->workq_name);
523 snd_printk(KERN_ERR "cannot create workqueue %s\n",
529 err = snd_device_new(card, SNDRV_DEV_BUS, bus, &dev_ops);
531 snd_hda_bus_free(bus);
538 EXPORT_SYMBOL_HDA(snd_hda_bus_new);
540 #ifdef CONFIG_SND_HDA_GENERIC
541 #define is_generic_config(codec) \
542 (codec->modelname && !strcmp(codec->modelname, "generic"))
544 #define is_generic_config(codec) 0
548 #define HDA_MODREQ_MAX_COUNT 2 /* two request_modules()'s */
550 #define HDA_MODREQ_MAX_COUNT 0 /* all presets are statically linked */
554 * find a matching codec preset
556 static const struct hda_codec_preset *
557 find_codec_preset(struct hda_codec *codec)
559 struct hda_codec_preset_list *tbl;
560 const struct hda_codec_preset *preset;
561 int mod_requested = 0;
563 if (is_generic_config(codec))
564 return NULL; /* use the generic parser */
567 mutex_lock(&preset_mutex);
568 list_for_each_entry(tbl, &hda_preset_tables, list) {
569 if (!try_module_get(tbl->owner)) {
570 snd_printk(KERN_ERR "hda_codec: cannot module_get\n");
573 for (preset = tbl->preset; preset->id; preset++) {
574 u32 mask = preset->mask;
575 if (preset->afg && preset->afg != codec->afg)
577 if (preset->mfg && preset->mfg != codec->mfg)
581 if (preset->id == (codec->vendor_id & mask) &&
583 preset->rev == codec->revision_id)) {
584 mutex_unlock(&preset_mutex);
585 codec->owner = tbl->owner;
589 module_put(tbl->owner);
591 mutex_unlock(&preset_mutex);
593 if (mod_requested < HDA_MODREQ_MAX_COUNT) {
596 snprintf(name, sizeof(name), "snd-hda-codec-id:%08x",
599 snprintf(name, sizeof(name), "snd-hda-codec-id:%04x*",
600 (codec->vendor_id >> 16) & 0xffff);
601 request_module(name);
609 * get_codec_name - store the codec name
611 static int get_codec_name(struct hda_codec *codec)
613 const struct hda_vendor_id *c;
614 const char *vendor = NULL;
615 u16 vendor_id = codec->vendor_id >> 16;
616 char tmp[16], name[32];
618 for (c = hda_vendor_ids; c->id; c++) {
619 if (c->id == vendor_id) {
625 sprintf(tmp, "Generic %04x", vendor_id);
628 if (codec->preset && codec->preset->name)
629 snprintf(name, sizeof(name), "%s %s", vendor,
630 codec->preset->name);
632 snprintf(name, sizeof(name), "%s ID %x", vendor,
633 codec->vendor_id & 0xffff);
634 codec->name = kstrdup(name, GFP_KERNEL);
641 * look for an AFG and MFG nodes
643 static void /*__devinit*/ setup_fg_nodes(struct hda_codec *codec)
648 total_nodes = snd_hda_get_sub_nodes(codec, AC_NODE_ROOT, &nid);
649 for (i = 0; i < total_nodes; i++, nid++) {
650 codec->function_id = snd_hda_param_read(codec, nid,
651 AC_PAR_FUNCTION_TYPE) & 0xff;
652 switch (codec->function_id) {
653 case AC_GRP_AUDIO_FUNCTION:
656 case AC_GRP_MODEM_FUNCTION:
666 * read widget caps for each widget and store in cache
668 static int read_widget_caps(struct hda_codec *codec, hda_nid_t fg_node)
673 codec->num_nodes = snd_hda_get_sub_nodes(codec, fg_node,
675 codec->wcaps = kmalloc(codec->num_nodes * 4, GFP_KERNEL);
678 nid = codec->start_nid;
679 for (i = 0; i < codec->num_nodes; i++, nid++)
680 codec->wcaps[i] = snd_hda_param_read(codec, nid,
681 AC_PAR_AUDIO_WIDGET_CAP);
685 /* read all pin default configurations and save codec->init_pins */
686 static int read_pin_defaults(struct hda_codec *codec)
689 hda_nid_t nid = codec->start_nid;
691 for (i = 0; i < codec->num_nodes; i++, nid++) {
692 struct hda_pincfg *pin;
693 unsigned int wcaps = get_wcaps(codec, nid);
694 unsigned int wid_type = (wcaps & AC_WCAP_TYPE) >>
696 if (wid_type != AC_WID_PIN)
698 pin = snd_array_new(&codec->init_pins);
702 pin->cfg = snd_hda_codec_read(codec, nid, 0,
703 AC_VERB_GET_CONFIG_DEFAULT, 0);
708 /* look up the given pin config list and return the item matching with NID */
709 static struct hda_pincfg *look_up_pincfg(struct hda_codec *codec,
710 struct snd_array *array,
714 for (i = 0; i < array->used; i++) {
715 struct hda_pincfg *pin = snd_array_elem(array, i);
722 /* write a config value for the given NID */
723 static void set_pincfg(struct hda_codec *codec, hda_nid_t nid,
727 for (i = 0; i < 4; i++) {
728 snd_hda_codec_write(codec, nid, 0,
729 AC_VERB_SET_CONFIG_DEFAULT_BYTES_0 + i,
735 /* set the current pin config value for the given NID.
736 * the value is cached, and read via snd_hda_codec_get_pincfg()
738 int snd_hda_add_pincfg(struct hda_codec *codec, struct snd_array *list,
739 hda_nid_t nid, unsigned int cfg)
741 struct hda_pincfg *pin;
744 oldcfg = snd_hda_codec_get_pincfg(codec, nid);
745 pin = look_up_pincfg(codec, list, nid);
747 pin = snd_array_new(list);
754 /* change only when needed; e.g. if the pincfg is already present
755 * in user_pins[], don't write it
757 cfg = snd_hda_codec_get_pincfg(codec, nid);
759 set_pincfg(codec, nid, cfg);
763 int snd_hda_codec_set_pincfg(struct hda_codec *codec,
764 hda_nid_t nid, unsigned int cfg)
766 return snd_hda_add_pincfg(codec, &codec->driver_pins, nid, cfg);
768 EXPORT_SYMBOL_HDA(snd_hda_codec_set_pincfg);
770 /* get the current pin config value of the given pin NID */
771 unsigned int snd_hda_codec_get_pincfg(struct hda_codec *codec, hda_nid_t nid)
773 struct hda_pincfg *pin;
775 #ifdef CONFIG_SND_HDA_HWDEP
776 pin = look_up_pincfg(codec, &codec->user_pins, nid);
780 pin = look_up_pincfg(codec, &codec->driver_pins, nid);
783 pin = look_up_pincfg(codec, &codec->init_pins, nid);
788 EXPORT_SYMBOL_HDA(snd_hda_codec_get_pincfg);
790 /* restore all current pin configs */
791 static void restore_pincfgs(struct hda_codec *codec)
794 for (i = 0; i < codec->init_pins.used; i++) {
795 struct hda_pincfg *pin = snd_array_elem(&codec->init_pins, i);
796 set_pincfg(codec, pin->nid,
797 snd_hda_codec_get_pincfg(codec, pin->nid));
801 static void init_hda_cache(struct hda_cache_rec *cache,
802 unsigned int record_size);
803 static void free_hda_cache(struct hda_cache_rec *cache);
805 /* restore the initial pin cfgs and release all pincfg lists */
806 static void restore_init_pincfgs(struct hda_codec *codec)
808 /* first free driver_pins and user_pins, then call restore_pincfg
809 * so that only the values in init_pins are restored
811 snd_array_free(&codec->driver_pins);
812 #ifdef CONFIG_SND_HDA_HWDEP
813 snd_array_free(&codec->user_pins);
815 restore_pincfgs(codec);
816 snd_array_free(&codec->init_pins);
822 static void snd_hda_codec_free(struct hda_codec *codec)
826 restore_init_pincfgs(codec);
827 #ifdef CONFIG_SND_HDA_POWER_SAVE
828 cancel_delayed_work(&codec->power_work);
829 flush_workqueue(codec->bus->workq);
831 list_del(&codec->list);
832 snd_array_free(&codec->mixers);
833 codec->bus->caddr_tbl[codec->addr] = NULL;
834 if (codec->patch_ops.free)
835 codec->patch_ops.free(codec);
836 module_put(codec->owner);
837 free_hda_cache(&codec->amp_cache);
838 free_hda_cache(&codec->cmd_cache);
840 kfree(codec->modelname);
845 static void hda_set_power_state(struct hda_codec *codec, hda_nid_t fg,
846 unsigned int power_state);
849 * snd_hda_codec_new - create a HDA codec
850 * @bus: the bus to assign
851 * @codec_addr: the codec address
852 * @codecp: the pointer to store the generated codec
854 * Returns 0 if successful, or a negative error code.
856 int /*__devinit*/ snd_hda_codec_new(struct hda_bus *bus, unsigned int codec_addr,
857 int do_init, struct hda_codec **codecp)
859 struct hda_codec *codec;
863 if (snd_BUG_ON(!bus))
865 if (snd_BUG_ON(codec_addr > HDA_MAX_CODEC_ADDRESS))
868 if (bus->caddr_tbl[codec_addr]) {
869 snd_printk(KERN_ERR "hda_codec: "
870 "address 0x%x is already occupied\n", codec_addr);
874 codec = kzalloc(sizeof(*codec), GFP_KERNEL);
876 snd_printk(KERN_ERR "can't allocate struct hda_codec\n");
881 codec->addr = codec_addr;
882 mutex_init(&codec->spdif_mutex);
883 mutex_init(&codec->control_mutex);
884 init_hda_cache(&codec->amp_cache, sizeof(struct hda_amp_info));
885 init_hda_cache(&codec->cmd_cache, sizeof(struct hda_cache_head));
886 snd_array_init(&codec->mixers, sizeof(struct snd_kcontrol *), 32);
887 snd_array_init(&codec->init_pins, sizeof(struct hda_pincfg), 16);
888 snd_array_init(&codec->driver_pins, sizeof(struct hda_pincfg), 16);
889 if (codec->bus->modelname) {
890 codec->modelname = kstrdup(codec->bus->modelname, GFP_KERNEL);
891 if (!codec->modelname) {
892 snd_hda_codec_free(codec);
897 #ifdef CONFIG_SND_HDA_POWER_SAVE
898 INIT_DELAYED_WORK(&codec->power_work, hda_power_work);
899 /* snd_hda_codec_new() marks the codec as power-up, and leave it as is.
900 * the caller has to power down appropriatley after initialization
903 hda_keep_power_on(codec);
906 list_add_tail(&codec->list, &bus->codec_list);
907 bus->caddr_tbl[codec_addr] = codec;
909 codec->vendor_id = snd_hda_param_read(codec, AC_NODE_ROOT,
911 if (codec->vendor_id == -1)
912 /* read again, hopefully the access method was corrected
913 * in the last read...
915 codec->vendor_id = snd_hda_param_read(codec, AC_NODE_ROOT,
917 codec->subsystem_id = snd_hda_param_read(codec, AC_NODE_ROOT,
918 AC_PAR_SUBSYSTEM_ID);
919 codec->revision_id = snd_hda_param_read(codec, AC_NODE_ROOT,
922 setup_fg_nodes(codec);
923 if (!codec->afg && !codec->mfg) {
924 snd_printdd("hda_codec: no AFG or MFG node found\n");
929 err = read_widget_caps(codec, codec->afg ? codec->afg : codec->mfg);
931 snd_printk(KERN_ERR "hda_codec: cannot malloc\n");
934 err = read_pin_defaults(codec);
938 if (!codec->subsystem_id) {
939 hda_nid_t nid = codec->afg ? codec->afg : codec->mfg;
940 codec->subsystem_id =
941 snd_hda_codec_read(codec, nid, 0,
942 AC_VERB_GET_SUBSYSTEM_ID, 0);
945 codec->modelname = kstrdup(bus->modelname, GFP_KERNEL);
947 /* power-up all before initialization */
948 hda_set_power_state(codec,
949 codec->afg ? codec->afg : codec->mfg,
953 err = snd_hda_codec_configure(codec);
957 snd_hda_codec_proc_new(codec);
959 snd_hda_create_hwdep(codec);
961 sprintf(component, "HDA:%08x,%08x,%08x", codec->vendor_id,
962 codec->subsystem_id, codec->revision_id);
963 snd_component_add(codec->bus->card, component);
970 snd_hda_codec_free(codec);
973 EXPORT_SYMBOL_HDA(snd_hda_codec_new);
975 int snd_hda_codec_configure(struct hda_codec *codec)
979 codec->preset = find_codec_preset(codec);
981 err = get_codec_name(codec);
985 /* audio codec should override the mixer name */
986 if (codec->afg || !*codec->bus->card->mixername)
987 strlcpy(codec->bus->card->mixername, codec->name,
988 sizeof(codec->bus->card->mixername));
990 if (is_generic_config(codec)) {
991 err = snd_hda_parse_generic_codec(codec);
994 if (codec->preset && codec->preset->patch) {
995 err = codec->preset->patch(codec);
999 /* call the default parser */
1000 err = snd_hda_parse_generic_codec(codec);
1002 printk(KERN_ERR "hda-codec: No codec parser is available\n");
1005 if (!err && codec->patch_ops.unsol_event)
1006 err = init_unsol_queue(codec->bus);
1011 * snd_hda_codec_setup_stream - set up the codec for streaming
1012 * @codec: the CODEC to set up
1013 * @nid: the NID to set up
1014 * @stream_tag: stream tag to pass, it's between 0x1 and 0xf.
1015 * @channel_id: channel id to pass, zero based.
1016 * @format: stream format.
1018 void snd_hda_codec_setup_stream(struct hda_codec *codec, hda_nid_t nid,
1020 int channel_id, int format)
1025 snd_printdd("hda_codec_setup_stream: "
1026 "NID=0x%x, stream=0x%x, channel=%d, format=0x%x\n",
1027 nid, stream_tag, channel_id, format);
1028 snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_CHANNEL_STREAMID,
1029 (stream_tag << 4) | channel_id);
1031 snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_STREAM_FORMAT, format);
1033 EXPORT_SYMBOL_HDA(snd_hda_codec_setup_stream);
1035 void snd_hda_codec_cleanup_stream(struct hda_codec *codec, hda_nid_t nid)
1040 snd_printdd("hda_codec_cleanup_stream: NID=0x%x\n", nid);
1041 snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_CHANNEL_STREAMID, 0);
1042 #if 0 /* keep the format */
1044 snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_STREAM_FORMAT, 0);
1047 EXPORT_SYMBOL_HDA(snd_hda_codec_cleanup_stream);
1050 * amp access functions
1053 /* FIXME: more better hash key? */
1054 #define HDA_HASH_KEY(nid,dir,idx) (u32)((nid) + ((idx) << 16) + ((dir) << 24))
1055 #define HDA_HASH_PINCAP_KEY(nid) (u32)((nid) + (0x02 << 24))
1056 #define HDA_HASH_PARPCM_KEY(nid) (u32)((nid) + (0x03 << 24))
1057 #define HDA_HASH_PARSTR_KEY(nid) (u32)((nid) + (0x04 << 24))
1058 #define INFO_AMP_CAPS (1<<0)
1059 #define INFO_AMP_VOL(ch) (1 << (1 + (ch)))
1061 /* initialize the hash table */
1062 static void /*__devinit*/ init_hda_cache(struct hda_cache_rec *cache,
1063 unsigned int record_size)
1065 memset(cache, 0, sizeof(*cache));
1066 memset(cache->hash, 0xff, sizeof(cache->hash));
1067 snd_array_init(&cache->buf, record_size, 64);
1070 static void free_hda_cache(struct hda_cache_rec *cache)
1072 snd_array_free(&cache->buf);
1075 /* query the hash. allocate an entry if not found. */
1076 static struct hda_cache_head *get_alloc_hash(struct hda_cache_rec *cache,
1079 u16 idx = key % (u16)ARRAY_SIZE(cache->hash);
1080 u16 cur = cache->hash[idx];
1081 struct hda_cache_head *info;
1083 while (cur != 0xffff) {
1084 info = snd_array_elem(&cache->buf, cur);
1085 if (info->key == key)
1090 /* add a new hash entry */
1091 info = snd_array_new(&cache->buf);
1094 cur = snd_array_index(&cache->buf, info);
1097 info->next = cache->hash[idx];
1098 cache->hash[idx] = cur;
1103 /* query and allocate an amp hash entry */
1104 static inline struct hda_amp_info *
1105 get_alloc_amp_hash(struct hda_codec *codec, u32 key)
1107 return (struct hda_amp_info *)get_alloc_hash(&codec->amp_cache, key);
1111 * query AMP capabilities for the given widget and direction
1113 u32 query_amp_caps(struct hda_codec *codec, hda_nid_t nid, int direction)
1115 struct hda_amp_info *info;
1117 info = get_alloc_amp_hash(codec, HDA_HASH_KEY(nid, direction, 0));
1120 if (!(info->head.val & INFO_AMP_CAPS)) {
1121 if (!(get_wcaps(codec, nid) & AC_WCAP_AMP_OVRD))
1123 info->amp_caps = snd_hda_param_read(codec, nid,
1124 direction == HDA_OUTPUT ?
1125 AC_PAR_AMP_OUT_CAP :
1128 info->head.val |= INFO_AMP_CAPS;
1130 return info->amp_caps;
1132 EXPORT_SYMBOL_HDA(query_amp_caps);
1134 int snd_hda_override_amp_caps(struct hda_codec *codec, hda_nid_t nid, int dir,
1137 struct hda_amp_info *info;
1139 info = get_alloc_amp_hash(codec, HDA_HASH_KEY(nid, dir, 0));
1142 info->amp_caps = caps;
1143 info->head.val |= INFO_AMP_CAPS;
1146 EXPORT_SYMBOL_HDA(snd_hda_override_amp_caps);
1149 query_caps_hash(struct hda_codec *codec, hda_nid_t nid, u32 key,
1150 unsigned int (*func)(struct hda_codec *, hda_nid_t))
1152 struct hda_amp_info *info;
1154 info = get_alloc_amp_hash(codec, key);
1157 if (!info->head.val) {
1158 info->head.val |= INFO_AMP_CAPS;
1159 info->amp_caps = func(codec, nid);
1161 return info->amp_caps;
1164 static unsigned int read_pin_cap(struct hda_codec *codec, hda_nid_t nid)
1166 return snd_hda_param_read(codec, nid, AC_PAR_PIN_CAP);
1169 u32 snd_hda_query_pin_caps(struct hda_codec *codec, hda_nid_t nid)
1171 return query_caps_hash(codec, nid, HDA_HASH_PINCAP_KEY(nid),
1174 EXPORT_SYMBOL_HDA(snd_hda_query_pin_caps);
1177 * read the current volume to info
1178 * if the cache exists, read the cache value.
1180 static unsigned int get_vol_mute(struct hda_codec *codec,
1181 struct hda_amp_info *info, hda_nid_t nid,
1182 int ch, int direction, int index)
1186 if (info->head.val & INFO_AMP_VOL(ch))
1187 return info->vol[ch];
1189 parm = ch ? AC_AMP_GET_RIGHT : AC_AMP_GET_LEFT;
1190 parm |= direction == HDA_OUTPUT ? AC_AMP_GET_OUTPUT : AC_AMP_GET_INPUT;
1192 val = snd_hda_codec_read(codec, nid, 0,
1193 AC_VERB_GET_AMP_GAIN_MUTE, parm);
1194 info->vol[ch] = val & 0xff;
1195 info->head.val |= INFO_AMP_VOL(ch);
1196 return info->vol[ch];
1200 * write the current volume in info to the h/w and update the cache
1202 static void put_vol_mute(struct hda_codec *codec, struct hda_amp_info *info,
1203 hda_nid_t nid, int ch, int direction, int index,
1208 parm = ch ? AC_AMP_SET_RIGHT : AC_AMP_SET_LEFT;
1209 parm |= direction == HDA_OUTPUT ? AC_AMP_SET_OUTPUT : AC_AMP_SET_INPUT;
1210 parm |= index << AC_AMP_SET_INDEX_SHIFT;
1212 snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_AMP_GAIN_MUTE, parm);
1213 info->vol[ch] = val;
1217 * read AMP value. The volume is between 0 to 0x7f, 0x80 = mute bit.
1219 int snd_hda_codec_amp_read(struct hda_codec *codec, hda_nid_t nid, int ch,
1220 int direction, int index)
1222 struct hda_amp_info *info;
1223 info = get_alloc_amp_hash(codec, HDA_HASH_KEY(nid, direction, index));
1226 return get_vol_mute(codec, info, nid, ch, direction, index);
1228 EXPORT_SYMBOL_HDA(snd_hda_codec_amp_read);
1231 * update the AMP value, mask = bit mask to set, val = the value
1233 int snd_hda_codec_amp_update(struct hda_codec *codec, hda_nid_t nid, int ch,
1234 int direction, int idx, int mask, int val)
1236 struct hda_amp_info *info;
1238 info = get_alloc_amp_hash(codec, HDA_HASH_KEY(nid, direction, idx));
1242 val |= get_vol_mute(codec, info, nid, ch, direction, idx) & ~mask;
1243 if (info->vol[ch] == val)
1245 put_vol_mute(codec, info, nid, ch, direction, idx, val);
1248 EXPORT_SYMBOL_HDA(snd_hda_codec_amp_update);
1251 * update the AMP stereo with the same mask and value
1253 int snd_hda_codec_amp_stereo(struct hda_codec *codec, hda_nid_t nid,
1254 int direction, int idx, int mask, int val)
1257 for (ch = 0; ch < 2; ch++)
1258 ret |= snd_hda_codec_amp_update(codec, nid, ch, direction,
1262 EXPORT_SYMBOL_HDA(snd_hda_codec_amp_stereo);
1264 #ifdef SND_HDA_NEEDS_RESUME
1265 /* resume the all amp commands from the cache */
1266 void snd_hda_codec_resume_amp(struct hda_codec *codec)
1268 struct hda_amp_info *buffer = codec->amp_cache.buf.list;
1271 for (i = 0; i < codec->amp_cache.buf.used; i++, buffer++) {
1272 u32 key = buffer->head.key;
1274 unsigned int idx, dir, ch;
1278 idx = (key >> 16) & 0xff;
1279 dir = (key >> 24) & 0xff;
1280 for (ch = 0; ch < 2; ch++) {
1281 if (!(buffer->head.val & INFO_AMP_VOL(ch)))
1283 put_vol_mute(codec, buffer, nid, ch, dir, idx,
1288 EXPORT_SYMBOL_HDA(snd_hda_codec_resume_amp);
1289 #endif /* SND_HDA_NEEDS_RESUME */
1292 int snd_hda_mixer_amp_volume_info(struct snd_kcontrol *kcontrol,
1293 struct snd_ctl_elem_info *uinfo)
1295 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1296 u16 nid = get_amp_nid(kcontrol);
1297 u8 chs = get_amp_channels(kcontrol);
1298 int dir = get_amp_direction(kcontrol);
1299 unsigned int ofs = get_amp_offset(kcontrol);
1302 caps = query_amp_caps(codec, nid, dir);
1304 caps = (caps & AC_AMPCAP_NUM_STEPS) >> AC_AMPCAP_NUM_STEPS_SHIFT;
1306 printk(KERN_WARNING "hda_codec: "
1307 "num_steps = 0 for NID=0x%x (ctl = %s)\n", nid,
1313 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
1314 uinfo->count = chs == 3 ? 2 : 1;
1315 uinfo->value.integer.min = 0;
1316 uinfo->value.integer.max = caps;
1319 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_volume_info);
1322 static inline unsigned int
1323 read_amp_value(struct hda_codec *codec, hda_nid_t nid,
1324 int ch, int dir, int idx, unsigned int ofs)
1327 val = snd_hda_codec_amp_read(codec, nid, ch, dir, idx);
1328 val &= HDA_AMP_VOLMASK;
1337 update_amp_value(struct hda_codec *codec, hda_nid_t nid,
1338 int ch, int dir, int idx, unsigned int ofs,
1343 return snd_hda_codec_amp_update(codec, nid, ch, dir, idx,
1344 HDA_AMP_VOLMASK, val);
1347 int snd_hda_mixer_amp_volume_get(struct snd_kcontrol *kcontrol,
1348 struct snd_ctl_elem_value *ucontrol)
1350 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1351 hda_nid_t nid = get_amp_nid(kcontrol);
1352 int chs = get_amp_channels(kcontrol);
1353 int dir = get_amp_direction(kcontrol);
1354 int idx = get_amp_index(kcontrol);
1355 unsigned int ofs = get_amp_offset(kcontrol);
1356 long *valp = ucontrol->value.integer.value;
1359 *valp++ = read_amp_value(codec, nid, 0, dir, idx, ofs);
1361 *valp = read_amp_value(codec, nid, 1, dir, idx, ofs);
1364 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_volume_get);
1366 int snd_hda_mixer_amp_volume_put(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 unsigned int ofs = get_amp_offset(kcontrol);
1375 long *valp = ucontrol->value.integer.value;
1378 snd_hda_power_up(codec);
1380 change = update_amp_value(codec, nid, 0, dir, idx, ofs, *valp);
1384 change |= update_amp_value(codec, nid, 1, dir, idx, ofs, *valp);
1385 snd_hda_power_down(codec);
1388 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_volume_put);
1390 int snd_hda_mixer_amp_tlv(struct snd_kcontrol *kcontrol, int op_flag,
1391 unsigned int size, unsigned int __user *_tlv)
1393 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1394 hda_nid_t nid = get_amp_nid(kcontrol);
1395 int dir = get_amp_direction(kcontrol);
1396 unsigned int ofs = get_amp_offset(kcontrol);
1397 u32 caps, val1, val2;
1399 if (size < 4 * sizeof(unsigned int))
1401 caps = query_amp_caps(codec, nid, dir);
1402 val2 = (caps & AC_AMPCAP_STEP_SIZE) >> AC_AMPCAP_STEP_SIZE_SHIFT;
1403 val2 = (val2 + 1) * 25;
1404 val1 = -((caps & AC_AMPCAP_OFFSET) >> AC_AMPCAP_OFFSET_SHIFT);
1406 val1 = ((int)val1) * ((int)val2);
1407 if (put_user(SNDRV_CTL_TLVT_DB_SCALE, _tlv))
1409 if (put_user(2 * sizeof(unsigned int), _tlv + 1))
1411 if (put_user(val1, _tlv + 2))
1413 if (put_user(val2, _tlv + 3))
1417 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_tlv);
1420 * set (static) TLV for virtual master volume; recalculated as max 0dB
1422 void snd_hda_set_vmaster_tlv(struct hda_codec *codec, hda_nid_t nid, int dir,
1428 caps = query_amp_caps(codec, nid, dir);
1429 nums = (caps & AC_AMPCAP_NUM_STEPS) >> AC_AMPCAP_NUM_STEPS_SHIFT;
1430 step = (caps & AC_AMPCAP_STEP_SIZE) >> AC_AMPCAP_STEP_SIZE_SHIFT;
1431 step = (step + 1) * 25;
1432 tlv[0] = SNDRV_CTL_TLVT_DB_SCALE;
1433 tlv[1] = 2 * sizeof(unsigned int);
1434 tlv[2] = -nums * step;
1437 EXPORT_SYMBOL_HDA(snd_hda_set_vmaster_tlv);
1439 /* find a mixer control element with the given name */
1440 static struct snd_kcontrol *
1441 _snd_hda_find_mixer_ctl(struct hda_codec *codec,
1442 const char *name, int idx)
1444 struct snd_ctl_elem_id id;
1445 memset(&id, 0, sizeof(id));
1446 id.iface = SNDRV_CTL_ELEM_IFACE_MIXER;
1448 strcpy(id.name, name);
1449 return snd_ctl_find_id(codec->bus->card, &id);
1452 struct snd_kcontrol *snd_hda_find_mixer_ctl(struct hda_codec *codec,
1455 return _snd_hda_find_mixer_ctl(codec, name, 0);
1457 EXPORT_SYMBOL_HDA(snd_hda_find_mixer_ctl);
1459 /* Add a control element and assign to the codec */
1460 int snd_hda_ctl_add(struct hda_codec *codec, struct snd_kcontrol *kctl)
1463 struct snd_kcontrol **knewp;
1465 err = snd_ctl_add(codec->bus->card, kctl);
1468 knewp = snd_array_new(&codec->mixers);
1474 EXPORT_SYMBOL_HDA(snd_hda_ctl_add);
1476 /* Clear all controls assigned to the given codec */
1477 void snd_hda_ctls_clear(struct hda_codec *codec)
1480 struct snd_kcontrol **kctls = codec->mixers.list;
1481 for (i = 0; i < codec->mixers.used; i++)
1482 snd_ctl_remove(codec->bus->card, kctls[i]);
1483 snd_array_free(&codec->mixers);
1486 /* pseudo device locking
1487 * toggle card->shutdown to allow/disallow the device access (as a hack)
1489 static int hda_lock_devices(struct snd_card *card)
1491 spin_lock(&card->files_lock);
1492 if (card->shutdown) {
1493 spin_unlock(&card->files_lock);
1497 spin_unlock(&card->files_lock);
1501 static void hda_unlock_devices(struct snd_card *card)
1503 spin_lock(&card->files_lock);
1505 spin_unlock(&card->files_lock);
1508 int snd_hda_codec_reset(struct hda_codec *codec)
1510 struct snd_card *card = codec->bus->card;
1513 if (hda_lock_devices(card) < 0)
1515 /* check whether the codec isn't used by any mixer or PCM streams */
1516 if (!list_empty(&card->ctl_files)) {
1517 hda_unlock_devices(card);
1520 for (pcm = 0; pcm < codec->num_pcms; pcm++) {
1521 struct hda_pcm *cpcm = &codec->pcm_info[pcm];
1524 if (cpcm->pcm->streams[0].substream_opened ||
1525 cpcm->pcm->streams[1].substream_opened) {
1526 hda_unlock_devices(card);
1531 /* OK, let it free */
1533 #ifdef CONFIG_SND_HDA_POWER_SAVE
1534 cancel_delayed_work(&codec->power_work);
1535 flush_workqueue(codec->bus->workq);
1537 snd_hda_ctls_clear(codec);
1539 for (i = 0; i < codec->num_pcms; i++) {
1540 if (codec->pcm_info[i].pcm) {
1541 snd_device_free(card, codec->pcm_info[i].pcm);
1542 clear_bit(codec->pcm_info[i].device,
1543 codec->bus->pcm_dev_bits);
1546 if (codec->patch_ops.free)
1547 codec->patch_ops.free(codec);
1548 codec->proc_widget_hook = NULL;
1550 free_hda_cache(&codec->amp_cache);
1551 free_hda_cache(&codec->cmd_cache);
1552 init_hda_cache(&codec->amp_cache, sizeof(struct hda_amp_info));
1553 init_hda_cache(&codec->cmd_cache, sizeof(struct hda_cache_head));
1554 /* free only driver_pins so that init_pins + user_pins are restored */
1555 snd_array_free(&codec->driver_pins);
1556 restore_pincfgs(codec);
1557 codec->num_pcms = 0;
1558 codec->pcm_info = NULL;
1559 codec->preset = NULL;
1560 memset(&codec->patch_ops, 0, sizeof(codec->patch_ops));
1561 codec->slave_dig_outs = NULL;
1562 codec->spdif_status_reset = 0;
1563 module_put(codec->owner);
1564 codec->owner = NULL;
1566 /* allow device access again */
1567 hda_unlock_devices(card);
1571 /* create a virtual master control and add slaves */
1572 int snd_hda_add_vmaster(struct hda_codec *codec, char *name,
1573 unsigned int *tlv, const char **slaves)
1575 struct snd_kcontrol *kctl;
1579 for (s = slaves; *s && !snd_hda_find_mixer_ctl(codec, *s); s++)
1582 snd_printdd("No slave found for %s\n", name);
1585 kctl = snd_ctl_make_virtual_master(name, tlv);
1588 err = snd_hda_ctl_add(codec, kctl);
1592 for (s = slaves; *s; s++) {
1593 struct snd_kcontrol *sctl;
1596 sctl = _snd_hda_find_mixer_ctl(codec, *s, i);
1599 snd_printdd("Cannot find slave %s, "
1603 err = snd_ctl_add_slave(kctl, sctl);
1611 EXPORT_SYMBOL_HDA(snd_hda_add_vmaster);
1614 int snd_hda_mixer_amp_switch_info(struct snd_kcontrol *kcontrol,
1615 struct snd_ctl_elem_info *uinfo)
1617 int chs = get_amp_channels(kcontrol);
1619 uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
1620 uinfo->count = chs == 3 ? 2 : 1;
1621 uinfo->value.integer.min = 0;
1622 uinfo->value.integer.max = 1;
1625 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_switch_info);
1627 int snd_hda_mixer_amp_switch_get(struct snd_kcontrol *kcontrol,
1628 struct snd_ctl_elem_value *ucontrol)
1630 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1631 hda_nid_t nid = get_amp_nid(kcontrol);
1632 int chs = get_amp_channels(kcontrol);
1633 int dir = get_amp_direction(kcontrol);
1634 int idx = get_amp_index(kcontrol);
1635 long *valp = ucontrol->value.integer.value;
1638 *valp++ = (snd_hda_codec_amp_read(codec, nid, 0, dir, idx) &
1639 HDA_AMP_MUTE) ? 0 : 1;
1641 *valp = (snd_hda_codec_amp_read(codec, nid, 1, dir, idx) &
1642 HDA_AMP_MUTE) ? 0 : 1;
1645 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_switch_get);
1647 int snd_hda_mixer_amp_switch_put(struct snd_kcontrol *kcontrol,
1648 struct snd_ctl_elem_value *ucontrol)
1650 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1651 hda_nid_t nid = get_amp_nid(kcontrol);
1652 int chs = get_amp_channels(kcontrol);
1653 int dir = get_amp_direction(kcontrol);
1654 int idx = get_amp_index(kcontrol);
1655 long *valp = ucontrol->value.integer.value;
1658 snd_hda_power_up(codec);
1660 change = snd_hda_codec_amp_update(codec, nid, 0, dir, idx,
1662 *valp ? 0 : HDA_AMP_MUTE);
1666 change |= snd_hda_codec_amp_update(codec, nid, 1, dir, idx,
1668 *valp ? 0 : HDA_AMP_MUTE);
1669 #ifdef CONFIG_SND_HDA_POWER_SAVE
1670 if (codec->patch_ops.check_power_status)
1671 codec->patch_ops.check_power_status(codec, nid);
1673 snd_hda_power_down(codec);
1676 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_switch_put);
1679 * bound volume controls
1681 * bind multiple volumes (# indices, from 0)
1684 #define AMP_VAL_IDX_SHIFT 19
1685 #define AMP_VAL_IDX_MASK (0x0f<<19)
1687 int snd_hda_mixer_bind_switch_get(struct snd_kcontrol *kcontrol,
1688 struct snd_ctl_elem_value *ucontrol)
1690 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1694 mutex_lock(&codec->control_mutex);
1695 pval = kcontrol->private_value;
1696 kcontrol->private_value = pval & ~AMP_VAL_IDX_MASK; /* index 0 */
1697 err = snd_hda_mixer_amp_switch_get(kcontrol, ucontrol);
1698 kcontrol->private_value = pval;
1699 mutex_unlock(&codec->control_mutex);
1702 EXPORT_SYMBOL_HDA(snd_hda_mixer_bind_switch_get);
1704 int snd_hda_mixer_bind_switch_put(struct snd_kcontrol *kcontrol,
1705 struct snd_ctl_elem_value *ucontrol)
1707 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1709 int i, indices, err = 0, change = 0;
1711 mutex_lock(&codec->control_mutex);
1712 pval = kcontrol->private_value;
1713 indices = (pval & AMP_VAL_IDX_MASK) >> AMP_VAL_IDX_SHIFT;
1714 for (i = 0; i < indices; i++) {
1715 kcontrol->private_value = (pval & ~AMP_VAL_IDX_MASK) |
1716 (i << AMP_VAL_IDX_SHIFT);
1717 err = snd_hda_mixer_amp_switch_put(kcontrol, ucontrol);
1722 kcontrol->private_value = pval;
1723 mutex_unlock(&codec->control_mutex);
1724 return err < 0 ? err : change;
1726 EXPORT_SYMBOL_HDA(snd_hda_mixer_bind_switch_put);
1729 * generic bound volume/swtich controls
1731 int snd_hda_mixer_bind_ctls_info(struct snd_kcontrol *kcontrol,
1732 struct snd_ctl_elem_info *uinfo)
1734 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1735 struct hda_bind_ctls *c;
1738 mutex_lock(&codec->control_mutex);
1739 c = (struct hda_bind_ctls *)kcontrol->private_value;
1740 kcontrol->private_value = *c->values;
1741 err = c->ops->info(kcontrol, uinfo);
1742 kcontrol->private_value = (long)c;
1743 mutex_unlock(&codec->control_mutex);
1746 EXPORT_SYMBOL_HDA(snd_hda_mixer_bind_ctls_info);
1748 int snd_hda_mixer_bind_ctls_get(struct snd_kcontrol *kcontrol,
1749 struct snd_ctl_elem_value *ucontrol)
1751 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1752 struct hda_bind_ctls *c;
1755 mutex_lock(&codec->control_mutex);
1756 c = (struct hda_bind_ctls *)kcontrol->private_value;
1757 kcontrol->private_value = *c->values;
1758 err = c->ops->get(kcontrol, ucontrol);
1759 kcontrol->private_value = (long)c;
1760 mutex_unlock(&codec->control_mutex);
1763 EXPORT_SYMBOL_HDA(snd_hda_mixer_bind_ctls_get);
1765 int snd_hda_mixer_bind_ctls_put(struct snd_kcontrol *kcontrol,
1766 struct snd_ctl_elem_value *ucontrol)
1768 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1769 struct hda_bind_ctls *c;
1770 unsigned long *vals;
1771 int err = 0, change = 0;
1773 mutex_lock(&codec->control_mutex);
1774 c = (struct hda_bind_ctls *)kcontrol->private_value;
1775 for (vals = c->values; *vals; vals++) {
1776 kcontrol->private_value = *vals;
1777 err = c->ops->put(kcontrol, ucontrol);
1782 kcontrol->private_value = (long)c;
1783 mutex_unlock(&codec->control_mutex);
1784 return err < 0 ? err : change;
1786 EXPORT_SYMBOL_HDA(snd_hda_mixer_bind_ctls_put);
1788 int snd_hda_mixer_bind_tlv(struct snd_kcontrol *kcontrol, int op_flag,
1789 unsigned int size, unsigned int __user *tlv)
1791 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1792 struct hda_bind_ctls *c;
1795 mutex_lock(&codec->control_mutex);
1796 c = (struct hda_bind_ctls *)kcontrol->private_value;
1797 kcontrol->private_value = *c->values;
1798 err = c->ops->tlv(kcontrol, op_flag, size, tlv);
1799 kcontrol->private_value = (long)c;
1800 mutex_unlock(&codec->control_mutex);
1803 EXPORT_SYMBOL_HDA(snd_hda_mixer_bind_tlv);
1805 struct hda_ctl_ops snd_hda_bind_vol = {
1806 .info = snd_hda_mixer_amp_volume_info,
1807 .get = snd_hda_mixer_amp_volume_get,
1808 .put = snd_hda_mixer_amp_volume_put,
1809 .tlv = snd_hda_mixer_amp_tlv
1811 EXPORT_SYMBOL_HDA(snd_hda_bind_vol);
1813 struct hda_ctl_ops snd_hda_bind_sw = {
1814 .info = snd_hda_mixer_amp_switch_info,
1815 .get = snd_hda_mixer_amp_switch_get,
1816 .put = snd_hda_mixer_amp_switch_put,
1817 .tlv = snd_hda_mixer_amp_tlv
1819 EXPORT_SYMBOL_HDA(snd_hda_bind_sw);
1822 * SPDIF out controls
1825 static int snd_hda_spdif_mask_info(struct snd_kcontrol *kcontrol,
1826 struct snd_ctl_elem_info *uinfo)
1828 uinfo->type = SNDRV_CTL_ELEM_TYPE_IEC958;
1833 static int snd_hda_spdif_cmask_get(struct snd_kcontrol *kcontrol,
1834 struct snd_ctl_elem_value *ucontrol)
1836 ucontrol->value.iec958.status[0] = IEC958_AES0_PROFESSIONAL |
1837 IEC958_AES0_NONAUDIO |
1838 IEC958_AES0_CON_EMPHASIS_5015 |
1839 IEC958_AES0_CON_NOT_COPYRIGHT;
1840 ucontrol->value.iec958.status[1] = IEC958_AES1_CON_CATEGORY |
1841 IEC958_AES1_CON_ORIGINAL;
1845 static int snd_hda_spdif_pmask_get(struct snd_kcontrol *kcontrol,
1846 struct snd_ctl_elem_value *ucontrol)
1848 ucontrol->value.iec958.status[0] = IEC958_AES0_PROFESSIONAL |
1849 IEC958_AES0_NONAUDIO |
1850 IEC958_AES0_PRO_EMPHASIS_5015;
1854 static int snd_hda_spdif_default_get(struct snd_kcontrol *kcontrol,
1855 struct snd_ctl_elem_value *ucontrol)
1857 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1859 ucontrol->value.iec958.status[0] = codec->spdif_status & 0xff;
1860 ucontrol->value.iec958.status[1] = (codec->spdif_status >> 8) & 0xff;
1861 ucontrol->value.iec958.status[2] = (codec->spdif_status >> 16) & 0xff;
1862 ucontrol->value.iec958.status[3] = (codec->spdif_status >> 24) & 0xff;
1867 /* convert from SPDIF status bits to HDA SPDIF bits
1868 * bit 0 (DigEn) is always set zero (to be filled later)
1870 static unsigned short convert_from_spdif_status(unsigned int sbits)
1872 unsigned short val = 0;
1874 if (sbits & IEC958_AES0_PROFESSIONAL)
1875 val |= AC_DIG1_PROFESSIONAL;
1876 if (sbits & IEC958_AES0_NONAUDIO)
1877 val |= AC_DIG1_NONAUDIO;
1878 if (sbits & IEC958_AES0_PROFESSIONAL) {
1879 if ((sbits & IEC958_AES0_PRO_EMPHASIS) ==
1880 IEC958_AES0_PRO_EMPHASIS_5015)
1881 val |= AC_DIG1_EMPHASIS;
1883 if ((sbits & IEC958_AES0_CON_EMPHASIS) ==
1884 IEC958_AES0_CON_EMPHASIS_5015)
1885 val |= AC_DIG1_EMPHASIS;
1886 if (!(sbits & IEC958_AES0_CON_NOT_COPYRIGHT))
1887 val |= AC_DIG1_COPYRIGHT;
1888 if (sbits & (IEC958_AES1_CON_ORIGINAL << 8))
1889 val |= AC_DIG1_LEVEL;
1890 val |= sbits & (IEC958_AES1_CON_CATEGORY << 8);
1895 /* convert to SPDIF status bits from HDA SPDIF bits
1897 static unsigned int convert_to_spdif_status(unsigned short val)
1899 unsigned int sbits = 0;
1901 if (val & AC_DIG1_NONAUDIO)
1902 sbits |= IEC958_AES0_NONAUDIO;
1903 if (val & AC_DIG1_PROFESSIONAL)
1904 sbits |= IEC958_AES0_PROFESSIONAL;
1905 if (sbits & IEC958_AES0_PROFESSIONAL) {
1906 if (sbits & AC_DIG1_EMPHASIS)
1907 sbits |= IEC958_AES0_PRO_EMPHASIS_5015;
1909 if (val & AC_DIG1_EMPHASIS)
1910 sbits |= IEC958_AES0_CON_EMPHASIS_5015;
1911 if (!(val & AC_DIG1_COPYRIGHT))
1912 sbits |= IEC958_AES0_CON_NOT_COPYRIGHT;
1913 if (val & AC_DIG1_LEVEL)
1914 sbits |= (IEC958_AES1_CON_ORIGINAL << 8);
1915 sbits |= val & (0x7f << 8);
1920 /* set digital convert verbs both for the given NID and its slaves */
1921 static void set_dig_out(struct hda_codec *codec, hda_nid_t nid,
1926 snd_hda_codec_write_cache(codec, nid, 0, verb, val);
1927 d = codec->slave_dig_outs;
1931 snd_hda_codec_write_cache(codec, *d, 0, verb, val);
1934 static inline void set_dig_out_convert(struct hda_codec *codec, hda_nid_t nid,
1938 set_dig_out(codec, nid, AC_VERB_SET_DIGI_CONVERT_1, dig1);
1940 set_dig_out(codec, nid, AC_VERB_SET_DIGI_CONVERT_2, dig2);
1943 static int snd_hda_spdif_default_put(struct snd_kcontrol *kcontrol,
1944 struct snd_ctl_elem_value *ucontrol)
1946 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1947 hda_nid_t nid = kcontrol->private_value;
1951 mutex_lock(&codec->spdif_mutex);
1952 codec->spdif_status = ucontrol->value.iec958.status[0] |
1953 ((unsigned int)ucontrol->value.iec958.status[1] << 8) |
1954 ((unsigned int)ucontrol->value.iec958.status[2] << 16) |
1955 ((unsigned int)ucontrol->value.iec958.status[3] << 24);
1956 val = convert_from_spdif_status(codec->spdif_status);
1957 val |= codec->spdif_ctls & 1;
1958 change = codec->spdif_ctls != val;
1959 codec->spdif_ctls = val;
1962 set_dig_out_convert(codec, nid, val & 0xff, (val >> 8) & 0xff);
1964 mutex_unlock(&codec->spdif_mutex);
1968 #define snd_hda_spdif_out_switch_info snd_ctl_boolean_mono_info
1970 static int snd_hda_spdif_out_switch_get(struct snd_kcontrol *kcontrol,
1971 struct snd_ctl_elem_value *ucontrol)
1973 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1975 ucontrol->value.integer.value[0] = codec->spdif_ctls & AC_DIG1_ENABLE;
1979 static int snd_hda_spdif_out_switch_put(struct snd_kcontrol *kcontrol,
1980 struct snd_ctl_elem_value *ucontrol)
1982 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1983 hda_nid_t nid = kcontrol->private_value;
1987 mutex_lock(&codec->spdif_mutex);
1988 val = codec->spdif_ctls & ~AC_DIG1_ENABLE;
1989 if (ucontrol->value.integer.value[0])
1990 val |= AC_DIG1_ENABLE;
1991 change = codec->spdif_ctls != val;
1993 codec->spdif_ctls = val;
1994 set_dig_out_convert(codec, nid, val & 0xff, -1);
1995 /* unmute amp switch (if any) */
1996 if ((get_wcaps(codec, nid) & AC_WCAP_OUT_AMP) &&
1997 (val & AC_DIG1_ENABLE))
1998 snd_hda_codec_amp_stereo(codec, nid, HDA_OUTPUT, 0,
2001 mutex_unlock(&codec->spdif_mutex);
2005 static struct snd_kcontrol_new dig_mixes[] = {
2007 .access = SNDRV_CTL_ELEM_ACCESS_READ,
2008 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2009 .name = SNDRV_CTL_NAME_IEC958("",PLAYBACK,CON_MASK),
2010 .info = snd_hda_spdif_mask_info,
2011 .get = snd_hda_spdif_cmask_get,
2014 .access = SNDRV_CTL_ELEM_ACCESS_READ,
2015 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2016 .name = SNDRV_CTL_NAME_IEC958("",PLAYBACK,PRO_MASK),
2017 .info = snd_hda_spdif_mask_info,
2018 .get = snd_hda_spdif_pmask_get,
2021 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2022 .name = SNDRV_CTL_NAME_IEC958("",PLAYBACK,DEFAULT),
2023 .info = snd_hda_spdif_mask_info,
2024 .get = snd_hda_spdif_default_get,
2025 .put = snd_hda_spdif_default_put,
2028 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2029 .name = SNDRV_CTL_NAME_IEC958("",PLAYBACK,SWITCH),
2030 .info = snd_hda_spdif_out_switch_info,
2031 .get = snd_hda_spdif_out_switch_get,
2032 .put = snd_hda_spdif_out_switch_put,
2037 #define SPDIF_MAX_IDX 4 /* 4 instances should be enough to probe */
2040 * snd_hda_create_spdif_out_ctls - create Output SPDIF-related controls
2041 * @codec: the HDA codec
2042 * @nid: audio out widget NID
2044 * Creates controls related with the SPDIF output.
2045 * Called from each patch supporting the SPDIF out.
2047 * Returns 0 if successful, or a negative error code.
2049 int snd_hda_create_spdif_out_ctls(struct hda_codec *codec, hda_nid_t nid)
2052 struct snd_kcontrol *kctl;
2053 struct snd_kcontrol_new *dig_mix;
2056 for (idx = 0; idx < SPDIF_MAX_IDX; idx++) {
2057 if (!_snd_hda_find_mixer_ctl(codec, "IEC958 Playback Switch",
2061 if (idx >= SPDIF_MAX_IDX) {
2062 printk(KERN_ERR "hda_codec: too many IEC958 outputs\n");
2065 for (dig_mix = dig_mixes; dig_mix->name; dig_mix++) {
2066 kctl = snd_ctl_new1(dig_mix, codec);
2069 kctl->id.index = idx;
2070 kctl->private_value = nid;
2071 err = snd_hda_ctl_add(codec, kctl);
2076 snd_hda_codec_read(codec, nid, 0,
2077 AC_VERB_GET_DIGI_CONVERT_1, 0);
2078 codec->spdif_status = convert_to_spdif_status(codec->spdif_ctls);
2081 EXPORT_SYMBOL_HDA(snd_hda_create_spdif_out_ctls);
2084 * SPDIF sharing with analog output
2086 static int spdif_share_sw_get(struct snd_kcontrol *kcontrol,
2087 struct snd_ctl_elem_value *ucontrol)
2089 struct hda_multi_out *mout = snd_kcontrol_chip(kcontrol);
2090 ucontrol->value.integer.value[0] = mout->share_spdif;
2094 static int spdif_share_sw_put(struct snd_kcontrol *kcontrol,
2095 struct snd_ctl_elem_value *ucontrol)
2097 struct hda_multi_out *mout = snd_kcontrol_chip(kcontrol);
2098 mout->share_spdif = !!ucontrol->value.integer.value[0];
2102 static struct snd_kcontrol_new spdif_share_sw = {
2103 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2104 .name = "IEC958 Default PCM Playback Switch",
2105 .info = snd_ctl_boolean_mono_info,
2106 .get = spdif_share_sw_get,
2107 .put = spdif_share_sw_put,
2110 int snd_hda_create_spdif_share_sw(struct hda_codec *codec,
2111 struct hda_multi_out *mout)
2113 if (!mout->dig_out_nid)
2115 /* ATTENTION: here mout is passed as private_data, instead of codec */
2116 return snd_hda_ctl_add(codec,
2117 snd_ctl_new1(&spdif_share_sw, mout));
2119 EXPORT_SYMBOL_HDA(snd_hda_create_spdif_share_sw);
2125 #define snd_hda_spdif_in_switch_info snd_hda_spdif_out_switch_info
2127 static int snd_hda_spdif_in_switch_get(struct snd_kcontrol *kcontrol,
2128 struct snd_ctl_elem_value *ucontrol)
2130 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2132 ucontrol->value.integer.value[0] = codec->spdif_in_enable;
2136 static int snd_hda_spdif_in_switch_put(struct snd_kcontrol *kcontrol,
2137 struct snd_ctl_elem_value *ucontrol)
2139 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2140 hda_nid_t nid = kcontrol->private_value;
2141 unsigned int val = !!ucontrol->value.integer.value[0];
2144 mutex_lock(&codec->spdif_mutex);
2145 change = codec->spdif_in_enable != val;
2147 codec->spdif_in_enable = val;
2148 snd_hda_codec_write_cache(codec, nid, 0,
2149 AC_VERB_SET_DIGI_CONVERT_1, val);
2151 mutex_unlock(&codec->spdif_mutex);
2155 static int snd_hda_spdif_in_status_get(struct snd_kcontrol *kcontrol,
2156 struct snd_ctl_elem_value *ucontrol)
2158 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2159 hda_nid_t nid = kcontrol->private_value;
2163 val = snd_hda_codec_read(codec, nid, 0, AC_VERB_GET_DIGI_CONVERT_1, 0);
2164 sbits = convert_to_spdif_status(val);
2165 ucontrol->value.iec958.status[0] = sbits;
2166 ucontrol->value.iec958.status[1] = sbits >> 8;
2167 ucontrol->value.iec958.status[2] = sbits >> 16;
2168 ucontrol->value.iec958.status[3] = sbits >> 24;
2172 static struct snd_kcontrol_new dig_in_ctls[] = {
2174 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2175 .name = SNDRV_CTL_NAME_IEC958("",CAPTURE,SWITCH),
2176 .info = snd_hda_spdif_in_switch_info,
2177 .get = snd_hda_spdif_in_switch_get,
2178 .put = snd_hda_spdif_in_switch_put,
2181 .access = SNDRV_CTL_ELEM_ACCESS_READ,
2182 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2183 .name = SNDRV_CTL_NAME_IEC958("",CAPTURE,DEFAULT),
2184 .info = snd_hda_spdif_mask_info,
2185 .get = snd_hda_spdif_in_status_get,
2191 * snd_hda_create_spdif_in_ctls - create Input SPDIF-related controls
2192 * @codec: the HDA codec
2193 * @nid: audio in widget NID
2195 * Creates controls related with the SPDIF input.
2196 * Called from each patch supporting the SPDIF in.
2198 * Returns 0 if successful, or a negative error code.
2200 int snd_hda_create_spdif_in_ctls(struct hda_codec *codec, hda_nid_t nid)
2203 struct snd_kcontrol *kctl;
2204 struct snd_kcontrol_new *dig_mix;
2207 for (idx = 0; idx < SPDIF_MAX_IDX; idx++) {
2208 if (!_snd_hda_find_mixer_ctl(codec, "IEC958 Capture Switch",
2212 if (idx >= SPDIF_MAX_IDX) {
2213 printk(KERN_ERR "hda_codec: too many IEC958 inputs\n");
2216 for (dig_mix = dig_in_ctls; dig_mix->name; dig_mix++) {
2217 kctl = snd_ctl_new1(dig_mix, codec);
2220 kctl->private_value = nid;
2221 err = snd_hda_ctl_add(codec, kctl);
2225 codec->spdif_in_enable =
2226 snd_hda_codec_read(codec, nid, 0,
2227 AC_VERB_GET_DIGI_CONVERT_1, 0) &
2231 EXPORT_SYMBOL_HDA(snd_hda_create_spdif_in_ctls);
2233 #ifdef SND_HDA_NEEDS_RESUME
2238 /* build a 32bit cache key with the widget id and the command parameter */
2239 #define build_cmd_cache_key(nid, verb) ((verb << 8) | nid)
2240 #define get_cmd_cache_nid(key) ((key) & 0xff)
2241 #define get_cmd_cache_cmd(key) (((key) >> 8) & 0xffff)
2244 * snd_hda_codec_write_cache - send a single command with caching
2245 * @codec: the HDA codec
2246 * @nid: NID to send the command
2247 * @direct: direct flag
2248 * @verb: the verb to send
2249 * @parm: the parameter for the verb
2251 * Send a single command without waiting for response.
2253 * Returns 0 if successful, or a negative error code.
2255 int snd_hda_codec_write_cache(struct hda_codec *codec, hda_nid_t nid,
2256 int direct, unsigned int verb, unsigned int parm)
2258 struct hda_bus *bus = codec->bus;
2262 res = make_codec_cmd(codec, nid, direct, verb, parm);
2263 snd_hda_power_up(codec);
2264 mutex_lock(&bus->cmd_mutex);
2265 err = bus->ops.command(bus, res);
2267 struct hda_cache_head *c;
2268 u32 key = build_cmd_cache_key(nid, verb);
2269 c = get_alloc_hash(&codec->cmd_cache, key);
2273 mutex_unlock(&bus->cmd_mutex);
2274 snd_hda_power_down(codec);
2277 EXPORT_SYMBOL_HDA(snd_hda_codec_write_cache);
2279 /* resume the all commands from the cache */
2280 void snd_hda_codec_resume_cache(struct hda_codec *codec)
2282 struct hda_cache_head *buffer = codec->cmd_cache.buf.list;
2285 for (i = 0; i < codec->cmd_cache.buf.used; i++, buffer++) {
2286 u32 key = buffer->key;
2289 snd_hda_codec_write(codec, get_cmd_cache_nid(key), 0,
2290 get_cmd_cache_cmd(key), buffer->val);
2293 EXPORT_SYMBOL_HDA(snd_hda_codec_resume_cache);
2296 * snd_hda_sequence_write_cache - sequence writes with caching
2297 * @codec: the HDA codec
2298 * @seq: VERB array to send
2300 * Send the commands sequentially from the given array.
2301 * Thte commands are recorded on cache for power-save and resume.
2302 * The array must be terminated with NID=0.
2304 void snd_hda_sequence_write_cache(struct hda_codec *codec,
2305 const struct hda_verb *seq)
2307 for (; seq->nid; seq++)
2308 snd_hda_codec_write_cache(codec, seq->nid, 0, seq->verb,
2311 EXPORT_SYMBOL_HDA(snd_hda_sequence_write_cache);
2312 #endif /* SND_HDA_NEEDS_RESUME */
2315 * set power state of the codec
2317 static void hda_set_power_state(struct hda_codec *codec, hda_nid_t fg,
2318 unsigned int power_state)
2323 snd_hda_codec_write(codec, fg, 0, AC_VERB_SET_POWER_STATE,
2325 msleep(10); /* partial workaround for "azx_get_response timeout" */
2327 nid = codec->start_nid;
2328 for (i = 0; i < codec->num_nodes; i++, nid++) {
2329 unsigned int wcaps = get_wcaps(codec, nid);
2330 if (wcaps & AC_WCAP_POWER) {
2331 unsigned int wid_type = (wcaps & AC_WCAP_TYPE) >>
2333 if (wid_type == AC_WID_PIN) {
2334 unsigned int pincap;
2336 * don't power down the widget if it controls
2337 * eapd and EAPD_BTLENABLE is set.
2339 pincap = snd_hda_query_pin_caps(codec, nid);
2340 if (pincap & AC_PINCAP_EAPD) {
2341 int eapd = snd_hda_codec_read(codec,
2343 AC_VERB_GET_EAPD_BTLENABLE, 0);
2345 if (power_state == AC_PWRST_D3 && eapd)
2349 snd_hda_codec_write(codec, nid, 0,
2350 AC_VERB_SET_POWER_STATE,
2355 if (power_state == AC_PWRST_D0) {
2356 unsigned long end_time;
2359 /* wait until the codec reachs to D0 */
2360 end_time = jiffies + msecs_to_jiffies(500);
2362 state = snd_hda_codec_read(codec, fg, 0,
2363 AC_VERB_GET_POWER_STATE, 0);
2364 if (state == power_state)
2367 } while (time_after_eq(end_time, jiffies));
2371 #ifdef CONFIG_SND_HDA_HWDEP
2372 /* execute additional init verbs */
2373 static void hda_exec_init_verbs(struct hda_codec *codec)
2375 if (codec->init_verbs.list)
2376 snd_hda_sequence_write(codec, codec->init_verbs.list);
2379 static inline void hda_exec_init_verbs(struct hda_codec *codec) {}
2382 #ifdef SND_HDA_NEEDS_RESUME
2384 * call suspend and power-down; used both from PM and power-save
2386 static void hda_call_codec_suspend(struct hda_codec *codec)
2388 if (codec->patch_ops.suspend)
2389 codec->patch_ops.suspend(codec, PMSG_SUSPEND);
2390 hda_set_power_state(codec,
2391 codec->afg ? codec->afg : codec->mfg,
2393 #ifdef CONFIG_SND_HDA_POWER_SAVE
2394 cancel_delayed_work(&codec->power_work);
2395 codec->power_on = 0;
2396 codec->power_transition = 0;
2401 * kick up codec; used both from PM and power-save
2403 static void hda_call_codec_resume(struct hda_codec *codec)
2405 hda_set_power_state(codec,
2406 codec->afg ? codec->afg : codec->mfg,
2408 restore_pincfgs(codec); /* restore all current pin configs */
2409 hda_exec_init_verbs(codec);
2410 if (codec->patch_ops.resume)
2411 codec->patch_ops.resume(codec);
2413 if (codec->patch_ops.init)
2414 codec->patch_ops.init(codec);
2415 snd_hda_codec_resume_amp(codec);
2416 snd_hda_codec_resume_cache(codec);
2419 #endif /* SND_HDA_NEEDS_RESUME */
2423 * snd_hda_build_controls - build mixer controls
2426 * Creates mixer controls for each codec included in the bus.
2428 * Returns 0 if successful, otherwise a negative error code.
2430 int /*__devinit*/ snd_hda_build_controls(struct hda_bus *bus)
2432 struct hda_codec *codec;
2434 list_for_each_entry(codec, &bus->codec_list, list) {
2435 int err = snd_hda_codec_build_controls(codec);
2437 printk(KERN_ERR "hda_codec: cannot build controls"
2438 "for #%d (error %d)\n", codec->addr, err);
2439 err = snd_hda_codec_reset(codec);
2442 "hda_codec: cannot revert codec\n");
2449 EXPORT_SYMBOL_HDA(snd_hda_build_controls);
2451 int snd_hda_codec_build_controls(struct hda_codec *codec)
2454 hda_exec_init_verbs(codec);
2455 /* continue to initialize... */
2456 if (codec->patch_ops.init)
2457 err = codec->patch_ops.init(codec);
2458 if (!err && codec->patch_ops.build_controls)
2459 err = codec->patch_ops.build_controls(codec);
2468 struct hda_rate_tbl {
2470 unsigned int alsa_bits;
2471 unsigned int hda_fmt;
2474 static struct hda_rate_tbl rate_bits[] = {
2475 /* rate in Hz, ALSA rate bitmask, HDA format value */
2477 /* autodetected value used in snd_hda_query_supported_pcm */
2478 { 8000, SNDRV_PCM_RATE_8000, 0x0500 }, /* 1/6 x 48 */
2479 { 11025, SNDRV_PCM_RATE_11025, 0x4300 }, /* 1/4 x 44 */
2480 { 16000, SNDRV_PCM_RATE_16000, 0x0200 }, /* 1/3 x 48 */
2481 { 22050, SNDRV_PCM_RATE_22050, 0x4100 }, /* 1/2 x 44 */
2482 { 32000, SNDRV_PCM_RATE_32000, 0x0a00 }, /* 2/3 x 48 */
2483 { 44100, SNDRV_PCM_RATE_44100, 0x4000 }, /* 44 */
2484 { 48000, SNDRV_PCM_RATE_48000, 0x0000 }, /* 48 */
2485 { 88200, SNDRV_PCM_RATE_88200, 0x4800 }, /* 2 x 44 */
2486 { 96000, SNDRV_PCM_RATE_96000, 0x0800 }, /* 2 x 48 */
2487 { 176400, SNDRV_PCM_RATE_176400, 0x5800 },/* 4 x 44 */
2488 { 192000, SNDRV_PCM_RATE_192000, 0x1800 }, /* 4 x 48 */
2489 #define AC_PAR_PCM_RATE_BITS 11
2490 /* up to bits 10, 384kHZ isn't supported properly */
2492 /* not autodetected value */
2493 { 9600, SNDRV_PCM_RATE_KNOT, 0x0400 }, /* 1/5 x 48 */
2495 { 0 } /* terminator */
2499 * snd_hda_calc_stream_format - calculate format bitset
2500 * @rate: the sample rate
2501 * @channels: the number of channels
2502 * @format: the PCM format (SNDRV_PCM_FORMAT_XXX)
2503 * @maxbps: the max. bps
2505 * Calculate the format bitset from the given rate, channels and th PCM format.
2507 * Return zero if invalid.
2509 unsigned int snd_hda_calc_stream_format(unsigned int rate,
2510 unsigned int channels,
2511 unsigned int format,
2512 unsigned int maxbps)
2515 unsigned int val = 0;
2517 for (i = 0; rate_bits[i].hz; i++)
2518 if (rate_bits[i].hz == rate) {
2519 val = rate_bits[i].hda_fmt;
2522 if (!rate_bits[i].hz) {
2523 snd_printdd("invalid rate %d\n", rate);
2527 if (channels == 0 || channels > 8) {
2528 snd_printdd("invalid channels %d\n", channels);
2531 val |= channels - 1;
2533 switch (snd_pcm_format_width(format)) {
2534 case 8: val |= 0x00; break;
2535 case 16: val |= 0x10; break;
2541 else if (maxbps >= 24)
2547 snd_printdd("invalid format width %d\n",
2548 snd_pcm_format_width(format));
2554 EXPORT_SYMBOL_HDA(snd_hda_calc_stream_format);
2556 static unsigned int get_pcm_param(struct hda_codec *codec, hda_nid_t nid)
2558 unsigned int val = 0;
2559 if (nid != codec->afg &&
2560 (get_wcaps(codec, nid) & AC_WCAP_FORMAT_OVRD))
2561 val = snd_hda_param_read(codec, nid, AC_PAR_PCM);
2562 if (!val || val == -1)
2563 val = snd_hda_param_read(codec, codec->afg, AC_PAR_PCM);
2564 if (!val || val == -1)
2569 static unsigned int query_pcm_param(struct hda_codec *codec, hda_nid_t nid)
2571 return query_caps_hash(codec, nid, HDA_HASH_PARPCM_KEY(nid),
2575 static unsigned int get_stream_param(struct hda_codec *codec, hda_nid_t nid)
2577 unsigned int streams = snd_hda_param_read(codec, nid, AC_PAR_STREAM);
2578 if (!streams || streams == -1)
2579 streams = snd_hda_param_read(codec, codec->afg, AC_PAR_STREAM);
2580 if (!streams || streams == -1)
2585 static unsigned int query_stream_param(struct hda_codec *codec, hda_nid_t nid)
2587 return query_caps_hash(codec, nid, HDA_HASH_PARSTR_KEY(nid),
2592 * snd_hda_query_supported_pcm - query the supported PCM rates and formats
2593 * @codec: the HDA codec
2594 * @nid: NID to query
2595 * @ratesp: the pointer to store the detected rate bitflags
2596 * @formatsp: the pointer to store the detected formats
2597 * @bpsp: the pointer to store the detected format widths
2599 * Queries the supported PCM rates and formats. The NULL @ratesp, @formatsp
2600 * or @bsps argument is ignored.
2602 * Returns 0 if successful, otherwise a negative error code.
2604 static int snd_hda_query_supported_pcm(struct hda_codec *codec, hda_nid_t nid,
2605 u32 *ratesp, u64 *formatsp, unsigned int *bpsp)
2607 unsigned int i, val, wcaps;
2609 wcaps = get_wcaps(codec, nid);
2610 val = query_pcm_param(codec, nid);
2614 for (i = 0; i < AC_PAR_PCM_RATE_BITS; i++) {
2616 rates |= rate_bits[i].alsa_bits;
2619 snd_printk(KERN_ERR "hda_codec: rates == 0 "
2620 "(nid=0x%x, val=0x%x, ovrd=%i)\n",
2622 (wcaps & AC_WCAP_FORMAT_OVRD) ? 1 : 0);
2628 if (formatsp || bpsp) {
2630 unsigned int streams, bps;
2632 streams = query_stream_param(codec, nid);
2637 if (streams & AC_SUPFMT_PCM) {
2638 if (val & AC_SUPPCM_BITS_8) {
2639 formats |= SNDRV_PCM_FMTBIT_U8;
2642 if (val & AC_SUPPCM_BITS_16) {
2643 formats |= SNDRV_PCM_FMTBIT_S16_LE;
2646 if (wcaps & AC_WCAP_DIGITAL) {
2647 if (val & AC_SUPPCM_BITS_32)
2648 formats |= SNDRV_PCM_FMTBIT_IEC958_SUBFRAME_LE;
2649 if (val & (AC_SUPPCM_BITS_20|AC_SUPPCM_BITS_24))
2650 formats |= SNDRV_PCM_FMTBIT_S32_LE;
2651 if (val & AC_SUPPCM_BITS_24)
2653 else if (val & AC_SUPPCM_BITS_20)
2655 } else if (val & (AC_SUPPCM_BITS_20|AC_SUPPCM_BITS_24|
2656 AC_SUPPCM_BITS_32)) {
2657 formats |= SNDRV_PCM_FMTBIT_S32_LE;
2658 if (val & AC_SUPPCM_BITS_32)
2660 else if (val & AC_SUPPCM_BITS_24)
2662 else if (val & AC_SUPPCM_BITS_20)
2666 else if (streams == AC_SUPFMT_FLOAT32) {
2667 /* should be exclusive */
2668 formats |= SNDRV_PCM_FMTBIT_FLOAT_LE;
2670 } else if (streams == AC_SUPFMT_AC3) {
2671 /* should be exclusive */
2672 /* temporary hack: we have still no proper support
2673 * for the direct AC3 stream...
2675 formats |= SNDRV_PCM_FMTBIT_U8;
2679 snd_printk(KERN_ERR "hda_codec: formats == 0 "
2680 "(nid=0x%x, val=0x%x, ovrd=%i, "
2683 (wcaps & AC_WCAP_FORMAT_OVRD) ? 1 : 0,
2688 *formatsp = formats;
2697 * snd_hda_is_supported_format - check whether the given node supports
2700 * Returns 1 if supported, 0 if not.
2702 int snd_hda_is_supported_format(struct hda_codec *codec, hda_nid_t nid,
2703 unsigned int format)
2706 unsigned int val = 0, rate, stream;
2708 val = query_pcm_param(codec, nid);
2712 rate = format & 0xff00;
2713 for (i = 0; i < AC_PAR_PCM_RATE_BITS; i++)
2714 if (rate_bits[i].hda_fmt == rate) {
2719 if (i >= AC_PAR_PCM_RATE_BITS)
2722 stream = query_stream_param(codec, nid);
2726 if (stream & AC_SUPFMT_PCM) {
2727 switch (format & 0xf0) {
2729 if (!(val & AC_SUPPCM_BITS_8))
2733 if (!(val & AC_SUPPCM_BITS_16))
2737 if (!(val & AC_SUPPCM_BITS_20))
2741 if (!(val & AC_SUPPCM_BITS_24))
2745 if (!(val & AC_SUPPCM_BITS_32))
2752 /* FIXME: check for float32 and AC3? */
2757 EXPORT_SYMBOL_HDA(snd_hda_is_supported_format);
2762 static int hda_pcm_default_open_close(struct hda_pcm_stream *hinfo,
2763 struct hda_codec *codec,
2764 struct snd_pcm_substream *substream)
2769 static int hda_pcm_default_prepare(struct hda_pcm_stream *hinfo,
2770 struct hda_codec *codec,
2771 unsigned int stream_tag,
2772 unsigned int format,
2773 struct snd_pcm_substream *substream)
2775 snd_hda_codec_setup_stream(codec, hinfo->nid, stream_tag, 0, format);
2779 static int hda_pcm_default_cleanup(struct hda_pcm_stream *hinfo,
2780 struct hda_codec *codec,
2781 struct snd_pcm_substream *substream)
2783 snd_hda_codec_cleanup_stream(codec, hinfo->nid);
2787 static int set_pcm_default_values(struct hda_codec *codec,
2788 struct hda_pcm_stream *info)
2792 /* query support PCM information from the given NID */
2793 if (info->nid && (!info->rates || !info->formats)) {
2794 err = snd_hda_query_supported_pcm(codec, info->nid,
2795 info->rates ? NULL : &info->rates,
2796 info->formats ? NULL : &info->formats,
2797 info->maxbps ? NULL : &info->maxbps);
2801 if (info->ops.open == NULL)
2802 info->ops.open = hda_pcm_default_open_close;
2803 if (info->ops.close == NULL)
2804 info->ops.close = hda_pcm_default_open_close;
2805 if (info->ops.prepare == NULL) {
2806 if (snd_BUG_ON(!info->nid))
2808 info->ops.prepare = hda_pcm_default_prepare;
2810 if (info->ops.cleanup == NULL) {
2811 if (snd_BUG_ON(!info->nid))
2813 info->ops.cleanup = hda_pcm_default_cleanup;
2819 * get the empty PCM device number to assign
2821 static int get_empty_pcm_device(struct hda_bus *bus, int type)
2823 static const char *dev_name[HDA_PCM_NTYPES] = {
2824 "Audio", "SPDIF", "HDMI", "Modem"
2826 /* starting device index for each PCM type */
2827 static int dev_idx[HDA_PCM_NTYPES] = {
2828 [HDA_PCM_TYPE_AUDIO] = 0,
2829 [HDA_PCM_TYPE_SPDIF] = 1,
2830 [HDA_PCM_TYPE_HDMI] = 3,
2831 [HDA_PCM_TYPE_MODEM] = 6
2833 /* normal audio device indices; not linear to keep compatibility */
2834 static int audio_idx[4] = { 0, 2, 4, 5 };
2838 case HDA_PCM_TYPE_AUDIO:
2839 for (i = 0; i < ARRAY_SIZE(audio_idx); i++) {
2841 if (!test_bit(dev, bus->pcm_dev_bits))
2844 snd_printk(KERN_WARNING "Too many audio devices\n");
2846 case HDA_PCM_TYPE_SPDIF:
2847 case HDA_PCM_TYPE_HDMI:
2848 case HDA_PCM_TYPE_MODEM:
2849 dev = dev_idx[type];
2850 if (test_bit(dev, bus->pcm_dev_bits)) {
2851 snd_printk(KERN_WARNING "%s already defined\n",
2857 snd_printk(KERN_WARNING "Invalid PCM type %d\n", type);
2861 set_bit(dev, bus->pcm_dev_bits);
2866 * attach a new PCM stream
2868 static int snd_hda_attach_pcm(struct hda_codec *codec, struct hda_pcm *pcm)
2870 struct hda_bus *bus = codec->bus;
2871 struct hda_pcm_stream *info;
2874 if (snd_BUG_ON(!pcm->name))
2876 for (stream = 0; stream < 2; stream++) {
2877 info = &pcm->stream[stream];
2878 if (info->substreams) {
2879 err = set_pcm_default_values(codec, info);
2884 return bus->ops.attach_pcm(bus, codec, pcm);
2887 /* assign all PCMs of the given codec */
2888 int snd_hda_codec_build_pcms(struct hda_codec *codec)
2893 if (!codec->num_pcms) {
2894 if (!codec->patch_ops.build_pcms)
2896 err = codec->patch_ops.build_pcms(codec);
2898 printk(KERN_ERR "hda_codec: cannot build PCMs"
2899 "for #%d (error %d)\n", codec->addr, err);
2900 err = snd_hda_codec_reset(codec);
2903 "hda_codec: cannot revert codec\n");
2908 for (pcm = 0; pcm < codec->num_pcms; pcm++) {
2909 struct hda_pcm *cpcm = &codec->pcm_info[pcm];
2912 if (!cpcm->stream[0].substreams && !cpcm->stream[1].substreams)
2913 continue; /* no substreams assigned */
2916 dev = get_empty_pcm_device(codec->bus, cpcm->pcm_type);
2918 continue; /* no fatal error */
2920 err = snd_hda_attach_pcm(codec, cpcm);
2922 printk(KERN_ERR "hda_codec: cannot attach "
2923 "PCM stream %d for codec #%d\n",
2925 continue; /* no fatal error */
2933 * snd_hda_build_pcms - build PCM information
2936 * Create PCM information for each codec included in the bus.
2938 * The build_pcms codec patch is requested to set up codec->num_pcms and
2939 * codec->pcm_info properly. The array is referred by the top-level driver
2940 * to create its PCM instances.
2941 * The allocated codec->pcm_info should be released in codec->patch_ops.free
2944 * At least, substreams, channels_min and channels_max must be filled for
2945 * each stream. substreams = 0 indicates that the stream doesn't exist.
2946 * When rates and/or formats are zero, the supported values are queried
2947 * from the given nid. The nid is used also by the default ops.prepare
2948 * and ops.cleanup callbacks.
2950 * The driver needs to call ops.open in its open callback. Similarly,
2951 * ops.close is supposed to be called in the close callback.
2952 * ops.prepare should be called in the prepare or hw_params callback
2953 * with the proper parameters for set up.
2954 * ops.cleanup should be called in hw_free for clean up of streams.
2956 * This function returns 0 if successfull, or a negative error code.
2958 int __devinit snd_hda_build_pcms(struct hda_bus *bus)
2960 struct hda_codec *codec;
2962 list_for_each_entry(codec, &bus->codec_list, list) {
2963 int err = snd_hda_codec_build_pcms(codec);
2969 EXPORT_SYMBOL_HDA(snd_hda_build_pcms);
2972 * snd_hda_check_board_config - compare the current codec with the config table
2973 * @codec: the HDA codec
2974 * @num_configs: number of config enums
2975 * @models: array of model name strings
2976 * @tbl: configuration table, terminated by null entries
2978 * Compares the modelname or PCI subsystem id of the current codec with the
2979 * given configuration table. If a matching entry is found, returns its
2980 * config value (supposed to be 0 or positive).
2982 * If no entries are matching, the function returns a negative value.
2984 int snd_hda_check_board_config(struct hda_codec *codec,
2985 int num_configs, const char **models,
2986 const struct snd_pci_quirk *tbl)
2988 if (codec->modelname && models) {
2990 for (i = 0; i < num_configs; i++) {
2992 !strcmp(codec->modelname, models[i])) {
2993 snd_printd(KERN_INFO "hda_codec: model '%s' is "
2994 "selected\n", models[i]);
3000 if (!codec->bus->pci || !tbl)
3003 tbl = snd_pci_quirk_lookup(codec->bus->pci, tbl);
3006 if (tbl->value >= 0 && tbl->value < num_configs) {
3007 #ifdef CONFIG_SND_DEBUG_VERBOSE
3009 const char *model = NULL;
3011 model = models[tbl->value];
3013 sprintf(tmp, "#%d", tbl->value);
3016 snd_printdd(KERN_INFO "hda_codec: model '%s' is selected "
3017 "for config %x:%x (%s)\n",
3018 model, tbl->subvendor, tbl->subdevice,
3019 (tbl->name ? tbl->name : "Unknown device"));
3025 EXPORT_SYMBOL_HDA(snd_hda_check_board_config);
3028 * snd_hda_check_board_codec_sid_config - compare the current codec
3029 subsystem ID with the
3032 This is important for Gateway notebooks with SB450 HDA Audio
3033 where the vendor ID of the PCI device is:
3034 ATI Technologies Inc SB450 HDA Audio [1002:437b]
3035 and the vendor/subvendor are found only at the codec.
3037 * @codec: the HDA codec
3038 * @num_configs: number of config enums
3039 * @models: array of model name strings
3040 * @tbl: configuration table, terminated by null entries
3042 * Compares the modelname or PCI subsystem id of the current codec with the
3043 * given configuration table. If a matching entry is found, returns its
3044 * config value (supposed to be 0 or positive).
3046 * If no entries are matching, the function returns a negative value.
3048 int snd_hda_check_board_codec_sid_config(struct hda_codec *codec,
3049 int num_configs, const char **models,
3050 const struct snd_pci_quirk *tbl)
3052 const struct snd_pci_quirk *q;
3054 /* Search for codec ID */
3055 for (q = tbl; q->subvendor; q++) {
3056 unsigned long vendorid = (q->subdevice) | (q->subvendor << 16);
3058 if (vendorid == codec->subsystem_id)
3067 if (tbl->value >= 0 && tbl->value < num_configs) {
3068 #ifdef CONFIG_SND_DEBUG_DETECT
3070 const char *model = NULL;
3072 model = models[tbl->value];
3074 sprintf(tmp, "#%d", tbl->value);
3077 snd_printdd(KERN_INFO "hda_codec: model '%s' is selected "
3078 "for config %x:%x (%s)\n",
3079 model, tbl->subvendor, tbl->subdevice,
3080 (tbl->name ? tbl->name : "Unknown device"));
3086 EXPORT_SYMBOL_HDA(snd_hda_check_board_codec_sid_config);
3089 * snd_hda_add_new_ctls - create controls from the array
3090 * @codec: the HDA codec
3091 * @knew: the array of struct snd_kcontrol_new
3093 * This helper function creates and add new controls in the given array.
3094 * The array must be terminated with an empty entry as terminator.
3096 * Returns 0 if successful, or a negative error code.
3098 int snd_hda_add_new_ctls(struct hda_codec *codec, struct snd_kcontrol_new *knew)
3102 for (; knew->name; knew++) {
3103 struct snd_kcontrol *kctl;
3104 kctl = snd_ctl_new1(knew, codec);
3107 err = snd_hda_ctl_add(codec, kctl);
3111 kctl = snd_ctl_new1(knew, codec);
3114 kctl->id.device = codec->addr;
3115 err = snd_hda_ctl_add(codec, kctl);
3122 EXPORT_SYMBOL_HDA(snd_hda_add_new_ctls);
3124 #ifdef CONFIG_SND_HDA_POWER_SAVE
3125 static void hda_set_power_state(struct hda_codec *codec, hda_nid_t fg,
3126 unsigned int power_state);
3128 static void hda_power_work(struct work_struct *work)
3130 struct hda_codec *codec =
3131 container_of(work, struct hda_codec, power_work.work);
3132 struct hda_bus *bus = codec->bus;
3134 if (!codec->power_on || codec->power_count) {
3135 codec->power_transition = 0;
3139 hda_call_codec_suspend(codec);
3140 if (bus->ops.pm_notify)
3141 bus->ops.pm_notify(bus);
3144 static void hda_keep_power_on(struct hda_codec *codec)
3146 codec->power_count++;
3147 codec->power_on = 1;
3150 void snd_hda_power_up(struct hda_codec *codec)
3152 struct hda_bus *bus = codec->bus;
3154 codec->power_count++;
3155 if (codec->power_on || codec->power_transition)
3158 codec->power_on = 1;
3159 if (bus->ops.pm_notify)
3160 bus->ops.pm_notify(bus);
3161 hda_call_codec_resume(codec);
3162 cancel_delayed_work(&codec->power_work);
3163 codec->power_transition = 0;
3165 EXPORT_SYMBOL_HDA(snd_hda_power_up);
3167 #define power_save(codec) \
3168 ((codec)->bus->power_save ? *(codec)->bus->power_save : 0)
3170 #define power_save(codec) \
3171 ((codec)->bus->power_save ? *(codec)->bus->power_save : 0)
3173 void snd_hda_power_down(struct hda_codec *codec)
3175 --codec->power_count;
3176 if (!codec->power_on || codec->power_count || codec->power_transition)
3178 if (power_save(codec)) {
3179 codec->power_transition = 1; /* avoid reentrance */
3180 queue_delayed_work(codec->bus->workq, &codec->power_work,
3181 msecs_to_jiffies(power_save(codec) * 1000));
3184 EXPORT_SYMBOL_HDA(snd_hda_power_down);
3186 int snd_hda_check_amp_list_power(struct hda_codec *codec,
3187 struct hda_loopback_check *check,
3190 struct hda_amp_list *p;
3193 if (!check->amplist)
3195 for (p = check->amplist; p->nid; p++) {
3200 return 0; /* nothing changed */
3202 for (p = check->amplist; p->nid; p++) {
3203 for (ch = 0; ch < 2; ch++) {
3204 v = snd_hda_codec_amp_read(codec, p->nid, ch, p->dir,
3206 if (!(v & HDA_AMP_MUTE) && v > 0) {
3207 if (!check->power_on) {
3208 check->power_on = 1;
3209 snd_hda_power_up(codec);
3215 if (check->power_on) {
3216 check->power_on = 0;
3217 snd_hda_power_down(codec);
3221 EXPORT_SYMBOL_HDA(snd_hda_check_amp_list_power);
3225 * Channel mode helper
3227 int snd_hda_ch_mode_info(struct hda_codec *codec,
3228 struct snd_ctl_elem_info *uinfo,
3229 const struct hda_channel_mode *chmode,
3232 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
3234 uinfo->value.enumerated.items = num_chmodes;
3235 if (uinfo->value.enumerated.item >= num_chmodes)
3236 uinfo->value.enumerated.item = num_chmodes - 1;
3237 sprintf(uinfo->value.enumerated.name, "%dch",
3238 chmode[uinfo->value.enumerated.item].channels);
3241 EXPORT_SYMBOL_HDA(snd_hda_ch_mode_info);
3243 int snd_hda_ch_mode_get(struct hda_codec *codec,
3244 struct snd_ctl_elem_value *ucontrol,
3245 const struct hda_channel_mode *chmode,
3251 for (i = 0; i < num_chmodes; i++) {
3252 if (max_channels == chmode[i].channels) {
3253 ucontrol->value.enumerated.item[0] = i;
3259 EXPORT_SYMBOL_HDA(snd_hda_ch_mode_get);
3261 int snd_hda_ch_mode_put(struct hda_codec *codec,
3262 struct snd_ctl_elem_value *ucontrol,
3263 const struct hda_channel_mode *chmode,
3269 mode = ucontrol->value.enumerated.item[0];
3270 if (mode >= num_chmodes)
3272 if (*max_channelsp == chmode[mode].channels)
3274 /* change the current channel setting */
3275 *max_channelsp = chmode[mode].channels;
3276 if (chmode[mode].sequence)
3277 snd_hda_sequence_write_cache(codec, chmode[mode].sequence);
3280 EXPORT_SYMBOL_HDA(snd_hda_ch_mode_put);
3285 int snd_hda_input_mux_info(const struct hda_input_mux *imux,
3286 struct snd_ctl_elem_info *uinfo)
3290 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
3292 uinfo->value.enumerated.items = imux->num_items;
3293 if (!imux->num_items)
3295 index = uinfo->value.enumerated.item;
3296 if (index >= imux->num_items)
3297 index = imux->num_items - 1;
3298 strcpy(uinfo->value.enumerated.name, imux->items[index].label);
3301 EXPORT_SYMBOL_HDA(snd_hda_input_mux_info);
3303 int snd_hda_input_mux_put(struct hda_codec *codec,
3304 const struct hda_input_mux *imux,
3305 struct snd_ctl_elem_value *ucontrol,
3307 unsigned int *cur_val)
3311 if (!imux->num_items)
3313 idx = ucontrol->value.enumerated.item[0];
3314 if (idx >= imux->num_items)
3315 idx = imux->num_items - 1;
3316 if (*cur_val == idx)
3318 snd_hda_codec_write_cache(codec, nid, 0, AC_VERB_SET_CONNECT_SEL,
3319 imux->items[idx].index);
3323 EXPORT_SYMBOL_HDA(snd_hda_input_mux_put);
3327 * Multi-channel / digital-out PCM helper functions
3330 /* setup SPDIF output stream */
3331 static void setup_dig_out_stream(struct hda_codec *codec, hda_nid_t nid,
3332 unsigned int stream_tag, unsigned int format)
3334 /* turn off SPDIF once; otherwise the IEC958 bits won't be updated */
3335 if (codec->spdif_status_reset && (codec->spdif_ctls & AC_DIG1_ENABLE))
3336 set_dig_out_convert(codec, nid,
3337 codec->spdif_ctls & ~AC_DIG1_ENABLE & 0xff,
3339 snd_hda_codec_setup_stream(codec, nid, stream_tag, 0, format);
3340 if (codec->slave_dig_outs) {
3342 for (d = codec->slave_dig_outs; *d; d++)
3343 snd_hda_codec_setup_stream(codec, *d, stream_tag, 0,
3346 /* turn on again (if needed) */
3347 if (codec->spdif_status_reset && (codec->spdif_ctls & AC_DIG1_ENABLE))
3348 set_dig_out_convert(codec, nid,
3349 codec->spdif_ctls & 0xff, -1);
3352 static void cleanup_dig_out_stream(struct hda_codec *codec, hda_nid_t nid)
3354 snd_hda_codec_cleanup_stream(codec, nid);
3355 if (codec->slave_dig_outs) {
3357 for (d = codec->slave_dig_outs; *d; d++)
3358 snd_hda_codec_cleanup_stream(codec, *d);
3363 * open the digital out in the exclusive mode
3365 int snd_hda_multi_out_dig_open(struct hda_codec *codec,
3366 struct hda_multi_out *mout)
3368 mutex_lock(&codec->spdif_mutex);
3369 if (mout->dig_out_used == HDA_DIG_ANALOG_DUP)
3370 /* already opened as analog dup; reset it once */
3371 cleanup_dig_out_stream(codec, mout->dig_out_nid);
3372 mout->dig_out_used = HDA_DIG_EXCLUSIVE;
3373 mutex_unlock(&codec->spdif_mutex);
3376 EXPORT_SYMBOL_HDA(snd_hda_multi_out_dig_open);
3378 int snd_hda_multi_out_dig_prepare(struct hda_codec *codec,
3379 struct hda_multi_out *mout,
3380 unsigned int stream_tag,
3381 unsigned int format,
3382 struct snd_pcm_substream *substream)
3384 mutex_lock(&codec->spdif_mutex);
3385 setup_dig_out_stream(codec, mout->dig_out_nid, stream_tag, format);
3386 mutex_unlock(&codec->spdif_mutex);
3389 EXPORT_SYMBOL_HDA(snd_hda_multi_out_dig_prepare);
3391 int snd_hda_multi_out_dig_cleanup(struct hda_codec *codec,
3392 struct hda_multi_out *mout)
3394 mutex_lock(&codec->spdif_mutex);
3395 cleanup_dig_out_stream(codec, mout->dig_out_nid);
3396 mutex_unlock(&codec->spdif_mutex);
3399 EXPORT_SYMBOL_HDA(snd_hda_multi_out_dig_cleanup);
3402 * release the digital out
3404 int snd_hda_multi_out_dig_close(struct hda_codec *codec,
3405 struct hda_multi_out *mout)
3407 mutex_lock(&codec->spdif_mutex);
3408 mout->dig_out_used = 0;
3409 mutex_unlock(&codec->spdif_mutex);
3412 EXPORT_SYMBOL_HDA(snd_hda_multi_out_dig_close);
3415 * set up more restrictions for analog out
3417 int snd_hda_multi_out_analog_open(struct hda_codec *codec,
3418 struct hda_multi_out *mout,
3419 struct snd_pcm_substream *substream,
3420 struct hda_pcm_stream *hinfo)
3422 struct snd_pcm_runtime *runtime = substream->runtime;
3423 runtime->hw.channels_max = mout->max_channels;
3424 if (mout->dig_out_nid) {
3425 if (!mout->analog_rates) {
3426 mout->analog_rates = hinfo->rates;
3427 mout->analog_formats = hinfo->formats;
3428 mout->analog_maxbps = hinfo->maxbps;
3430 runtime->hw.rates = mout->analog_rates;
3431 runtime->hw.formats = mout->analog_formats;
3432 hinfo->maxbps = mout->analog_maxbps;
3434 if (!mout->spdif_rates) {
3435 snd_hda_query_supported_pcm(codec, mout->dig_out_nid,
3437 &mout->spdif_formats,
3438 &mout->spdif_maxbps);
3440 mutex_lock(&codec->spdif_mutex);
3441 if (mout->share_spdif) {
3442 runtime->hw.rates &= mout->spdif_rates;
3443 runtime->hw.formats &= mout->spdif_formats;
3444 if (mout->spdif_maxbps < hinfo->maxbps)
3445 hinfo->maxbps = mout->spdif_maxbps;
3447 mutex_unlock(&codec->spdif_mutex);
3449 return snd_pcm_hw_constraint_step(substream->runtime, 0,
3450 SNDRV_PCM_HW_PARAM_CHANNELS, 2);
3452 EXPORT_SYMBOL_HDA(snd_hda_multi_out_analog_open);
3455 * set up the i/o for analog out
3456 * when the digital out is available, copy the front out to digital out, too.
3458 int snd_hda_multi_out_analog_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 hda_nid_t *nids = mout->dac_nids;
3465 int chs = substream->runtime->channels;
3468 mutex_lock(&codec->spdif_mutex);
3469 if (mout->dig_out_nid && mout->share_spdif &&
3470 mout->dig_out_used != HDA_DIG_EXCLUSIVE) {
3472 snd_hda_is_supported_format(codec, mout->dig_out_nid,
3474 !(codec->spdif_status & IEC958_AES0_NONAUDIO)) {
3475 mout->dig_out_used = HDA_DIG_ANALOG_DUP;
3476 setup_dig_out_stream(codec, mout->dig_out_nid,
3477 stream_tag, format);
3479 mout->dig_out_used = 0;
3480 cleanup_dig_out_stream(codec, mout->dig_out_nid);
3483 mutex_unlock(&codec->spdif_mutex);
3486 snd_hda_codec_setup_stream(codec, nids[HDA_FRONT], stream_tag,
3488 if (!mout->no_share_stream &&
3489 mout->hp_nid && mout->hp_nid != nids[HDA_FRONT])
3490 /* headphone out will just decode front left/right (stereo) */
3491 snd_hda_codec_setup_stream(codec, mout->hp_nid, stream_tag,
3493 /* extra outputs copied from front */
3494 for (i = 0; i < ARRAY_SIZE(mout->extra_out_nid); i++)
3495 if (!mout->no_share_stream && mout->extra_out_nid[i])
3496 snd_hda_codec_setup_stream(codec,
3497 mout->extra_out_nid[i],
3498 stream_tag, 0, format);
3501 for (i = 1; i < mout->num_dacs; i++) {
3502 if (chs >= (i + 1) * 2) /* independent out */
3503 snd_hda_codec_setup_stream(codec, nids[i], stream_tag,
3505 else if (!mout->no_share_stream) /* copy front */
3506 snd_hda_codec_setup_stream(codec, nids[i], stream_tag,
3511 EXPORT_SYMBOL_HDA(snd_hda_multi_out_analog_prepare);
3514 * clean up the setting for analog out
3516 int snd_hda_multi_out_analog_cleanup(struct hda_codec *codec,
3517 struct hda_multi_out *mout)
3519 hda_nid_t *nids = mout->dac_nids;
3522 for (i = 0; i < mout->num_dacs; i++)
3523 snd_hda_codec_cleanup_stream(codec, nids[i]);
3525 snd_hda_codec_cleanup_stream(codec, mout->hp_nid);
3526 for (i = 0; i < ARRAY_SIZE(mout->extra_out_nid); i++)
3527 if (mout->extra_out_nid[i])
3528 snd_hda_codec_cleanup_stream(codec,
3529 mout->extra_out_nid[i]);
3530 mutex_lock(&codec->spdif_mutex);
3531 if (mout->dig_out_nid && mout->dig_out_used == HDA_DIG_ANALOG_DUP) {
3532 cleanup_dig_out_stream(codec, mout->dig_out_nid);
3533 mout->dig_out_used = 0;
3535 mutex_unlock(&codec->spdif_mutex);
3538 EXPORT_SYMBOL_HDA(snd_hda_multi_out_analog_cleanup);
3541 * Helper for automatic pin configuration
3544 static int is_in_nid_list(hda_nid_t nid, hda_nid_t *list)
3546 for (; *list; list++)
3554 * Sort an associated group of pins according to their sequence numbers.
3556 static void sort_pins_by_sequence(hda_nid_t * pins, short * sequences,
3563 for (i = 0; i < num_pins; i++) {
3564 for (j = i + 1; j < num_pins; j++) {
3565 if (sequences[i] > sequences[j]) {
3567 sequences[i] = sequences[j];
3579 * Parse all pin widgets and store the useful pin nids to cfg
3581 * The number of line-outs or any primary output is stored in line_outs,
3582 * and the corresponding output pins are assigned to line_out_pins[],
3583 * in the order of front, rear, CLFE, side, ...
3585 * If more extra outputs (speaker and headphone) are found, the pins are
3586 * assisnged to hp_pins[] and speaker_pins[], respectively. If no line-out jack
3587 * is detected, one of speaker of HP pins is assigned as the primary
3588 * output, i.e. to line_out_pins[0]. So, line_outs is always positive
3589 * if any analog output exists.
3591 * The analog input pins are assigned to input_pins array.
3592 * The digital input/output pins are assigned to dig_in_pin and dig_out_pin,
3595 int snd_hda_parse_pin_def_config(struct hda_codec *codec,
3596 struct auto_pin_cfg *cfg,
3597 hda_nid_t *ignore_nids)
3599 hda_nid_t nid, end_nid;
3600 short seq, assoc_line_out, assoc_speaker;
3601 short sequences_line_out[ARRAY_SIZE(cfg->line_out_pins)];
3602 short sequences_speaker[ARRAY_SIZE(cfg->speaker_pins)];
3603 short sequences_hp[ARRAY_SIZE(cfg->hp_pins)];
3605 memset(cfg, 0, sizeof(*cfg));
3607 memset(sequences_line_out, 0, sizeof(sequences_line_out));
3608 memset(sequences_speaker, 0, sizeof(sequences_speaker));
3609 memset(sequences_hp, 0, sizeof(sequences_hp));
3610 assoc_line_out = assoc_speaker = 0;
3612 end_nid = codec->start_nid + codec->num_nodes;
3613 for (nid = codec->start_nid; nid < end_nid; nid++) {
3614 unsigned int wid_caps = get_wcaps(codec, nid);
3615 unsigned int wid_type =
3616 (wid_caps & AC_WCAP_TYPE) >> AC_WCAP_TYPE_SHIFT;
3617 unsigned int def_conf;
3620 /* read all default configuration for pin complex */
3621 if (wid_type != AC_WID_PIN)
3623 /* ignore the given nids (e.g. pc-beep returns error) */
3624 if (ignore_nids && is_in_nid_list(nid, ignore_nids))
3627 def_conf = snd_hda_codec_get_pincfg(codec, nid);
3628 if (get_defcfg_connect(def_conf) == AC_JACK_PORT_NONE)
3630 loc = get_defcfg_location(def_conf);
3631 switch (get_defcfg_device(def_conf)) {
3632 case AC_JACK_LINE_OUT:
3633 seq = get_defcfg_sequence(def_conf);
3634 assoc = get_defcfg_association(def_conf);
3636 if (!(wid_caps & AC_WCAP_STEREO))
3637 if (!cfg->mono_out_pin)
3638 cfg->mono_out_pin = nid;
3641 if (!assoc_line_out)
3642 assoc_line_out = assoc;
3643 else if (assoc_line_out != assoc)
3645 if (cfg->line_outs >= ARRAY_SIZE(cfg->line_out_pins))
3647 cfg->line_out_pins[cfg->line_outs] = nid;
3648 sequences_line_out[cfg->line_outs] = seq;
3651 case AC_JACK_SPEAKER:
3652 seq = get_defcfg_sequence(def_conf);
3653 assoc = get_defcfg_association(def_conf);
3656 if (! assoc_speaker)
3657 assoc_speaker = assoc;
3658 else if (assoc_speaker != assoc)
3660 if (cfg->speaker_outs >= ARRAY_SIZE(cfg->speaker_pins))
3662 cfg->speaker_pins[cfg->speaker_outs] = nid;
3663 sequences_speaker[cfg->speaker_outs] = seq;
3664 cfg->speaker_outs++;
3666 case AC_JACK_HP_OUT:
3667 seq = get_defcfg_sequence(def_conf);
3668 assoc = get_defcfg_association(def_conf);
3669 if (cfg->hp_outs >= ARRAY_SIZE(cfg->hp_pins))
3671 cfg->hp_pins[cfg->hp_outs] = nid;
3672 sequences_hp[cfg->hp_outs] = (assoc << 4) | seq;
3675 case AC_JACK_MIC_IN: {
3677 if (loc == AC_JACK_LOC_FRONT) {
3678 preferred = AUTO_PIN_FRONT_MIC;
3681 preferred = AUTO_PIN_MIC;
3682 alt = AUTO_PIN_FRONT_MIC;
3684 if (!cfg->input_pins[preferred])
3685 cfg->input_pins[preferred] = nid;
3686 else if (!cfg->input_pins[alt])
3687 cfg->input_pins[alt] = nid;
3690 case AC_JACK_LINE_IN:
3691 if (loc == AC_JACK_LOC_FRONT)
3692 cfg->input_pins[AUTO_PIN_FRONT_LINE] = nid;
3694 cfg->input_pins[AUTO_PIN_LINE] = nid;
3697 cfg->input_pins[AUTO_PIN_CD] = nid;
3700 cfg->input_pins[AUTO_PIN_AUX] = nid;
3702 case AC_JACK_SPDIF_OUT:
3703 case AC_JACK_DIG_OTHER_OUT:
3704 if (cfg->dig_outs >= ARRAY_SIZE(cfg->dig_out_pins))
3706 cfg->dig_out_pins[cfg->dig_outs] = nid;
3707 cfg->dig_out_type[cfg->dig_outs] =
3708 (loc == AC_JACK_LOC_HDMI) ?
3709 HDA_PCM_TYPE_HDMI : HDA_PCM_TYPE_SPDIF;
3712 case AC_JACK_SPDIF_IN:
3713 case AC_JACK_DIG_OTHER_IN:
3714 cfg->dig_in_pin = nid;
3715 if (loc == AC_JACK_LOC_HDMI)
3716 cfg->dig_in_type = HDA_PCM_TYPE_HDMI;
3718 cfg->dig_in_type = HDA_PCM_TYPE_SPDIF;
3724 * If no line-out is defined but multiple HPs are found,
3725 * some of them might be the real line-outs.
3727 if (!cfg->line_outs && cfg->hp_outs > 1) {
3729 while (i < cfg->hp_outs) {
3730 /* The real HPs should have the sequence 0x0f */
3731 if ((sequences_hp[i] & 0x0f) == 0x0f) {
3735 /* Move it to the line-out table */
3736 cfg->line_out_pins[cfg->line_outs] = cfg->hp_pins[i];
3737 sequences_line_out[cfg->line_outs] = sequences_hp[i];
3740 memmove(cfg->hp_pins + i, cfg->hp_pins + i + 1,
3741 sizeof(cfg->hp_pins[0]) * (cfg->hp_outs - i));
3742 memmove(sequences_hp + i - 1, sequences_hp + i,
3743 sizeof(sequences_hp[0]) * (cfg->hp_outs - i));
3747 /* sort by sequence */
3748 sort_pins_by_sequence(cfg->line_out_pins, sequences_line_out,
3750 sort_pins_by_sequence(cfg->speaker_pins, sequences_speaker,
3752 sort_pins_by_sequence(cfg->hp_pins, sequences_hp,
3755 /* if we have only one mic, make it AUTO_PIN_MIC */
3756 if (!cfg->input_pins[AUTO_PIN_MIC] &&
3757 cfg->input_pins[AUTO_PIN_FRONT_MIC]) {
3758 cfg->input_pins[AUTO_PIN_MIC] =
3759 cfg->input_pins[AUTO_PIN_FRONT_MIC];
3760 cfg->input_pins[AUTO_PIN_FRONT_MIC] = 0;
3762 /* ditto for line-in */
3763 if (!cfg->input_pins[AUTO_PIN_LINE] &&
3764 cfg->input_pins[AUTO_PIN_FRONT_LINE]) {
3765 cfg->input_pins[AUTO_PIN_LINE] =
3766 cfg->input_pins[AUTO_PIN_FRONT_LINE];
3767 cfg->input_pins[AUTO_PIN_FRONT_LINE] = 0;
3771 * FIX-UP: if no line-outs are detected, try to use speaker or HP pin
3772 * as a primary output
3774 if (!cfg->line_outs) {
3775 if (cfg->speaker_outs) {
3776 cfg->line_outs = cfg->speaker_outs;
3777 memcpy(cfg->line_out_pins, cfg->speaker_pins,
3778 sizeof(cfg->speaker_pins));
3779 cfg->speaker_outs = 0;
3780 memset(cfg->speaker_pins, 0, sizeof(cfg->speaker_pins));
3781 cfg->line_out_type = AUTO_PIN_SPEAKER_OUT;
3782 } else if (cfg->hp_outs) {
3783 cfg->line_outs = cfg->hp_outs;
3784 memcpy(cfg->line_out_pins, cfg->hp_pins,
3785 sizeof(cfg->hp_pins));
3787 memset(cfg->hp_pins, 0, sizeof(cfg->hp_pins));
3788 cfg->line_out_type = AUTO_PIN_HP_OUT;
3792 /* Reorder the surround channels
3793 * ALSA sequence is front/surr/clfe/side
3795 * 4-ch: front/surr => OK as it is
3796 * 6-ch: front/clfe/surr
3797 * 8-ch: front/clfe/rear/side|fc
3799 switch (cfg->line_outs) {
3802 nid = cfg->line_out_pins[1];
3803 cfg->line_out_pins[1] = cfg->line_out_pins[2];
3804 cfg->line_out_pins[2] = nid;
3809 * debug prints of the parsed results
3811 snd_printd("autoconfig: line_outs=%d (0x%x/0x%x/0x%x/0x%x/0x%x)\n",
3812 cfg->line_outs, cfg->line_out_pins[0], cfg->line_out_pins[1],
3813 cfg->line_out_pins[2], cfg->line_out_pins[3],
3814 cfg->line_out_pins[4]);
3815 snd_printd(" speaker_outs=%d (0x%x/0x%x/0x%x/0x%x/0x%x)\n",
3816 cfg->speaker_outs, cfg->speaker_pins[0],
3817 cfg->speaker_pins[1], cfg->speaker_pins[2],
3818 cfg->speaker_pins[3], cfg->speaker_pins[4]);
3819 snd_printd(" hp_outs=%d (0x%x/0x%x/0x%x/0x%x/0x%x)\n",
3820 cfg->hp_outs, cfg->hp_pins[0],
3821 cfg->hp_pins[1], cfg->hp_pins[2],
3822 cfg->hp_pins[3], cfg->hp_pins[4]);
3823 snd_printd(" mono: mono_out=0x%x\n", cfg->mono_out_pin);
3825 snd_printd(" dig-out=0x%x/0x%x\n",
3826 cfg->dig_out_pins[0], cfg->dig_out_pins[1]);
3827 snd_printd(" inputs: mic=0x%x, fmic=0x%x, line=0x%x, fline=0x%x,"
3828 " cd=0x%x, aux=0x%x\n",
3829 cfg->input_pins[AUTO_PIN_MIC],
3830 cfg->input_pins[AUTO_PIN_FRONT_MIC],
3831 cfg->input_pins[AUTO_PIN_LINE],
3832 cfg->input_pins[AUTO_PIN_FRONT_LINE],
3833 cfg->input_pins[AUTO_PIN_CD],
3834 cfg->input_pins[AUTO_PIN_AUX]);
3835 if (cfg->dig_in_pin)
3836 snd_printd(" dig-in=0x%x\n", cfg->dig_in_pin);
3840 EXPORT_SYMBOL_HDA(snd_hda_parse_pin_def_config);
3842 /* labels for input pins */
3843 const char *auto_pin_cfg_labels[AUTO_PIN_LAST] = {
3844 "Mic", "Front Mic", "Line", "Front Line", "CD", "Aux"
3846 EXPORT_SYMBOL_HDA(auto_pin_cfg_labels);
3855 * snd_hda_suspend - suspend the codecs
3857 * @state: suspsend state
3859 * Returns 0 if successful.
3861 int snd_hda_suspend(struct hda_bus *bus, pm_message_t state)
3863 struct hda_codec *codec;
3865 list_for_each_entry(codec, &bus->codec_list, list) {
3866 #ifdef CONFIG_SND_HDA_POWER_SAVE
3867 if (!codec->power_on)
3870 hda_call_codec_suspend(codec);
3874 EXPORT_SYMBOL_HDA(snd_hda_suspend);
3877 * snd_hda_resume - resume the codecs
3880 * Returns 0 if successful.
3882 * This fucntion is defined only when POWER_SAVE isn't set.
3883 * In the power-save mode, the codec is resumed dynamically.
3885 int snd_hda_resume(struct hda_bus *bus)
3887 struct hda_codec *codec;
3889 list_for_each_entry(codec, &bus->codec_list, list) {
3890 if (snd_hda_codec_needs_resume(codec))
3891 hda_call_codec_resume(codec);
3895 EXPORT_SYMBOL_HDA(snd_hda_resume);
3896 #endif /* CONFIG_PM */
3902 /* get a new element from the given array
3903 * if it exceeds the pre-allocated array size, re-allocate the array
3905 void *snd_array_new(struct snd_array *array)
3907 if (array->used >= array->alloced) {
3908 int num = array->alloced + array->alloc_align;
3910 if (snd_BUG_ON(num >= 4096))
3912 nlist = kcalloc(num + 1, array->elem_size, GFP_KERNEL);
3916 memcpy(nlist, array->list,
3917 array->elem_size * array->alloced);
3920 array->list = nlist;
3921 array->alloced = num;
3923 return snd_array_elem(array, array->used++);
3925 EXPORT_SYMBOL_HDA(snd_array_new);
3927 /* free the given array elements */
3928 void snd_array_free(struct snd_array *array)
3935 EXPORT_SYMBOL_HDA(snd_array_free);
3938 * used by hda_proc.c and hda_eld.c
3940 void snd_print_pcm_rates(int pcm, char *buf, int buflen)
3942 static unsigned int rates[] = {
3943 8000, 11025, 16000, 22050, 32000, 44100, 48000, 88200,
3944 96000, 176400, 192000, 384000
3948 for (i = 0, j = 0; i < ARRAY_SIZE(rates); i++)
3950 j += snprintf(buf + j, buflen - j, " %d", rates[i]);
3952 buf[j] = '\0'; /* necessary when j == 0 */
3954 EXPORT_SYMBOL_HDA(snd_print_pcm_rates);
3956 void snd_print_pcm_bits(int pcm, char *buf, int buflen)
3958 static unsigned int bits[] = { 8, 16, 20, 24, 32 };
3961 for (i = 0, j = 0; i < ARRAY_SIZE(bits); i++)
3962 if (pcm & (AC_SUPPCM_BITS_8 << i))
3963 j += snprintf(buf + j, buflen - j, " %d", bits[i]);
3965 buf[j] = '\0'; /* necessary when j == 0 */
3967 EXPORT_SYMBOL_HDA(snd_print_pcm_bits);
3969 MODULE_DESCRIPTION("HDA codec core");
3970 MODULE_LICENSE("GPL");