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)
645 int i, total_nodes, function_id;
648 total_nodes = snd_hda_get_sub_nodes(codec, AC_NODE_ROOT, &nid);
649 for (i = 0; i < total_nodes; i++, nid++) {
650 function_id = snd_hda_param_read(codec, nid,
651 AC_PAR_FUNCTION_TYPE) & 0xff;
652 switch (function_id) {
653 case AC_GRP_AUDIO_FUNCTION:
655 codec->function_id = function_id;
657 case AC_GRP_MODEM_FUNCTION:
659 codec->function_id = function_id;
668 * read widget caps for each widget and store in cache
670 static int read_widget_caps(struct hda_codec *codec, hda_nid_t fg_node)
675 codec->num_nodes = snd_hda_get_sub_nodes(codec, fg_node,
677 codec->wcaps = kmalloc(codec->num_nodes * 4, GFP_KERNEL);
680 nid = codec->start_nid;
681 for (i = 0; i < codec->num_nodes; i++, nid++)
682 codec->wcaps[i] = snd_hda_param_read(codec, nid,
683 AC_PAR_AUDIO_WIDGET_CAP);
687 /* read all pin default configurations and save codec->init_pins */
688 static int read_pin_defaults(struct hda_codec *codec)
691 hda_nid_t nid = codec->start_nid;
693 for (i = 0; i < codec->num_nodes; i++, nid++) {
694 struct hda_pincfg *pin;
695 unsigned int wcaps = get_wcaps(codec, nid);
696 unsigned int wid_type = (wcaps & AC_WCAP_TYPE) >>
698 if (wid_type != AC_WID_PIN)
700 pin = snd_array_new(&codec->init_pins);
704 pin->cfg = snd_hda_codec_read(codec, nid, 0,
705 AC_VERB_GET_CONFIG_DEFAULT, 0);
710 /* look up the given pin config list and return the item matching with NID */
711 static struct hda_pincfg *look_up_pincfg(struct hda_codec *codec,
712 struct snd_array *array,
716 for (i = 0; i < array->used; i++) {
717 struct hda_pincfg *pin = snd_array_elem(array, i);
724 /* write a config value for the given NID */
725 static void set_pincfg(struct hda_codec *codec, hda_nid_t nid,
729 for (i = 0; i < 4; i++) {
730 snd_hda_codec_write(codec, nid, 0,
731 AC_VERB_SET_CONFIG_DEFAULT_BYTES_0 + i,
737 /* set the current pin config value for the given NID.
738 * the value is cached, and read via snd_hda_codec_get_pincfg()
740 int snd_hda_add_pincfg(struct hda_codec *codec, struct snd_array *list,
741 hda_nid_t nid, unsigned int cfg)
743 struct hda_pincfg *pin;
746 oldcfg = snd_hda_codec_get_pincfg(codec, nid);
747 pin = look_up_pincfg(codec, list, nid);
749 pin = snd_array_new(list);
756 /* change only when needed; e.g. if the pincfg is already present
757 * in user_pins[], don't write it
759 cfg = snd_hda_codec_get_pincfg(codec, nid);
761 set_pincfg(codec, nid, cfg);
765 int snd_hda_codec_set_pincfg(struct hda_codec *codec,
766 hda_nid_t nid, unsigned int cfg)
768 return snd_hda_add_pincfg(codec, &codec->driver_pins, nid, cfg);
770 EXPORT_SYMBOL_HDA(snd_hda_codec_set_pincfg);
772 /* get the current pin config value of the given pin NID */
773 unsigned int snd_hda_codec_get_pincfg(struct hda_codec *codec, hda_nid_t nid)
775 struct hda_pincfg *pin;
777 #ifdef CONFIG_SND_HDA_HWDEP
778 pin = look_up_pincfg(codec, &codec->user_pins, nid);
782 pin = look_up_pincfg(codec, &codec->driver_pins, nid);
785 pin = look_up_pincfg(codec, &codec->init_pins, nid);
790 EXPORT_SYMBOL_HDA(snd_hda_codec_get_pincfg);
792 /* restore all current pin configs */
793 static void restore_pincfgs(struct hda_codec *codec)
796 for (i = 0; i < codec->init_pins.used; i++) {
797 struct hda_pincfg *pin = snd_array_elem(&codec->init_pins, i);
798 set_pincfg(codec, pin->nid,
799 snd_hda_codec_get_pincfg(codec, pin->nid));
803 static void init_hda_cache(struct hda_cache_rec *cache,
804 unsigned int record_size);
805 static void free_hda_cache(struct hda_cache_rec *cache);
807 /* restore the initial pin cfgs and release all pincfg lists */
808 static void restore_init_pincfgs(struct hda_codec *codec)
810 /* first free driver_pins and user_pins, then call restore_pincfg
811 * so that only the values in init_pins are restored
813 snd_array_free(&codec->driver_pins);
814 #ifdef CONFIG_SND_HDA_HWDEP
815 snd_array_free(&codec->user_pins);
817 restore_pincfgs(codec);
818 snd_array_free(&codec->init_pins);
824 static void snd_hda_codec_free(struct hda_codec *codec)
828 restore_init_pincfgs(codec);
829 #ifdef CONFIG_SND_HDA_POWER_SAVE
830 cancel_delayed_work(&codec->power_work);
831 flush_workqueue(codec->bus->workq);
833 list_del(&codec->list);
834 snd_array_free(&codec->mixers);
835 codec->bus->caddr_tbl[codec->addr] = NULL;
836 if (codec->patch_ops.free)
837 codec->patch_ops.free(codec);
838 module_put(codec->owner);
839 free_hda_cache(&codec->amp_cache);
840 free_hda_cache(&codec->cmd_cache);
842 kfree(codec->modelname);
847 static void hda_set_power_state(struct hda_codec *codec, hda_nid_t fg,
848 unsigned int power_state);
851 * snd_hda_codec_new - create a HDA codec
852 * @bus: the bus to assign
853 * @codec_addr: the codec address
854 * @codecp: the pointer to store the generated codec
856 * Returns 0 if successful, or a negative error code.
858 int /*__devinit*/ snd_hda_codec_new(struct hda_bus *bus, unsigned int codec_addr,
859 int do_init, struct hda_codec **codecp)
861 struct hda_codec *codec;
865 if (snd_BUG_ON(!bus))
867 if (snd_BUG_ON(codec_addr > HDA_MAX_CODEC_ADDRESS))
870 if (bus->caddr_tbl[codec_addr]) {
871 snd_printk(KERN_ERR "hda_codec: "
872 "address 0x%x is already occupied\n", codec_addr);
876 codec = kzalloc(sizeof(*codec), GFP_KERNEL);
878 snd_printk(KERN_ERR "can't allocate struct hda_codec\n");
883 codec->addr = codec_addr;
884 mutex_init(&codec->spdif_mutex);
885 mutex_init(&codec->control_mutex);
886 init_hda_cache(&codec->amp_cache, sizeof(struct hda_amp_info));
887 init_hda_cache(&codec->cmd_cache, sizeof(struct hda_cache_head));
888 snd_array_init(&codec->mixers, sizeof(struct snd_kcontrol *), 32);
889 snd_array_init(&codec->init_pins, sizeof(struct hda_pincfg), 16);
890 snd_array_init(&codec->driver_pins, sizeof(struct hda_pincfg), 16);
891 if (codec->bus->modelname) {
892 codec->modelname = kstrdup(codec->bus->modelname, GFP_KERNEL);
893 if (!codec->modelname) {
894 snd_hda_codec_free(codec);
899 #ifdef CONFIG_SND_HDA_POWER_SAVE
900 INIT_DELAYED_WORK(&codec->power_work, hda_power_work);
901 /* snd_hda_codec_new() marks the codec as power-up, and leave it as is.
902 * the caller has to power down appropriatley after initialization
905 hda_keep_power_on(codec);
908 list_add_tail(&codec->list, &bus->codec_list);
909 bus->caddr_tbl[codec_addr] = codec;
911 codec->vendor_id = snd_hda_param_read(codec, AC_NODE_ROOT,
913 if (codec->vendor_id == -1)
914 /* read again, hopefully the access method was corrected
915 * in the last read...
917 codec->vendor_id = snd_hda_param_read(codec, AC_NODE_ROOT,
919 codec->subsystem_id = snd_hda_param_read(codec, AC_NODE_ROOT,
920 AC_PAR_SUBSYSTEM_ID);
921 codec->revision_id = snd_hda_param_read(codec, AC_NODE_ROOT,
924 setup_fg_nodes(codec);
925 if (!codec->afg && !codec->mfg) {
926 snd_printdd("hda_codec: no AFG or MFG node found\n");
931 err = read_widget_caps(codec, codec->afg ? codec->afg : codec->mfg);
933 snd_printk(KERN_ERR "hda_codec: cannot malloc\n");
936 err = read_pin_defaults(codec);
940 if (!codec->subsystem_id) {
941 hda_nid_t nid = codec->afg ? codec->afg : codec->mfg;
942 codec->subsystem_id =
943 snd_hda_codec_read(codec, nid, 0,
944 AC_VERB_GET_SUBSYSTEM_ID, 0);
947 codec->modelname = kstrdup(bus->modelname, GFP_KERNEL);
949 /* power-up all before initialization */
950 hda_set_power_state(codec,
951 codec->afg ? codec->afg : codec->mfg,
955 err = snd_hda_codec_configure(codec);
959 snd_hda_codec_proc_new(codec);
961 snd_hda_create_hwdep(codec);
963 sprintf(component, "HDA:%08x,%08x,%08x", codec->vendor_id,
964 codec->subsystem_id, codec->revision_id);
965 snd_component_add(codec->bus->card, component);
972 snd_hda_codec_free(codec);
975 EXPORT_SYMBOL_HDA(snd_hda_codec_new);
977 int snd_hda_codec_configure(struct hda_codec *codec)
981 codec->preset = find_codec_preset(codec);
983 err = get_codec_name(codec);
987 /* audio codec should override the mixer name */
988 if (codec->afg || !*codec->bus->card->mixername)
989 strlcpy(codec->bus->card->mixername, codec->name,
990 sizeof(codec->bus->card->mixername));
992 if (is_generic_config(codec)) {
993 err = snd_hda_parse_generic_codec(codec);
996 if (codec->preset && codec->preset->patch) {
997 err = codec->preset->patch(codec);
1001 /* call the default parser */
1002 err = snd_hda_parse_generic_codec(codec);
1004 printk(KERN_ERR "hda-codec: No codec parser is available\n");
1007 if (!err && codec->patch_ops.unsol_event)
1008 err = init_unsol_queue(codec->bus);
1013 * snd_hda_codec_setup_stream - set up the codec for streaming
1014 * @codec: the CODEC to set up
1015 * @nid: the NID to set up
1016 * @stream_tag: stream tag to pass, it's between 0x1 and 0xf.
1017 * @channel_id: channel id to pass, zero based.
1018 * @format: stream format.
1020 void snd_hda_codec_setup_stream(struct hda_codec *codec, hda_nid_t nid,
1022 int channel_id, int format)
1027 snd_printdd("hda_codec_setup_stream: "
1028 "NID=0x%x, stream=0x%x, channel=%d, format=0x%x\n",
1029 nid, stream_tag, channel_id, format);
1030 snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_CHANNEL_STREAMID,
1031 (stream_tag << 4) | channel_id);
1033 snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_STREAM_FORMAT, format);
1035 EXPORT_SYMBOL_HDA(snd_hda_codec_setup_stream);
1037 void snd_hda_codec_cleanup_stream(struct hda_codec *codec, hda_nid_t nid)
1042 snd_printdd("hda_codec_cleanup_stream: NID=0x%x\n", nid);
1043 snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_CHANNEL_STREAMID, 0);
1044 #if 0 /* keep the format */
1046 snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_STREAM_FORMAT, 0);
1049 EXPORT_SYMBOL_HDA(snd_hda_codec_cleanup_stream);
1052 * amp access functions
1055 /* FIXME: more better hash key? */
1056 #define HDA_HASH_KEY(nid,dir,idx) (u32)((nid) + ((idx) << 16) + ((dir) << 24))
1057 #define HDA_HASH_PINCAP_KEY(nid) (u32)((nid) + (0x02 << 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);
1148 u32 snd_hda_query_pin_caps(struct hda_codec *codec, hda_nid_t nid)
1150 struct hda_amp_info *info;
1152 info = get_alloc_amp_hash(codec, HDA_HASH_PINCAP_KEY(nid));
1155 if (!info->head.val) {
1156 info->amp_caps = snd_hda_param_read(codec, nid, AC_PAR_PIN_CAP);
1157 info->head.val |= INFO_AMP_CAPS;
1159 return info->amp_caps;
1161 EXPORT_SYMBOL_HDA(snd_hda_query_pin_caps);
1164 * read the current volume to info
1165 * if the cache exists, read the cache value.
1167 static unsigned int get_vol_mute(struct hda_codec *codec,
1168 struct hda_amp_info *info, hda_nid_t nid,
1169 int ch, int direction, int index)
1173 if (info->head.val & INFO_AMP_VOL(ch))
1174 return info->vol[ch];
1176 parm = ch ? AC_AMP_GET_RIGHT : AC_AMP_GET_LEFT;
1177 parm |= direction == HDA_OUTPUT ? AC_AMP_GET_OUTPUT : AC_AMP_GET_INPUT;
1179 val = snd_hda_codec_read(codec, nid, 0,
1180 AC_VERB_GET_AMP_GAIN_MUTE, parm);
1181 info->vol[ch] = val & 0xff;
1182 info->head.val |= INFO_AMP_VOL(ch);
1183 return info->vol[ch];
1187 * write the current volume in info to the h/w and update the cache
1189 static void put_vol_mute(struct hda_codec *codec, struct hda_amp_info *info,
1190 hda_nid_t nid, int ch, int direction, int index,
1195 parm = ch ? AC_AMP_SET_RIGHT : AC_AMP_SET_LEFT;
1196 parm |= direction == HDA_OUTPUT ? AC_AMP_SET_OUTPUT : AC_AMP_SET_INPUT;
1197 parm |= index << AC_AMP_SET_INDEX_SHIFT;
1199 snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_AMP_GAIN_MUTE, parm);
1200 info->vol[ch] = val;
1204 * read AMP value. The volume is between 0 to 0x7f, 0x80 = mute bit.
1206 int snd_hda_codec_amp_read(struct hda_codec *codec, hda_nid_t nid, int ch,
1207 int direction, int index)
1209 struct hda_amp_info *info;
1210 info = get_alloc_amp_hash(codec, HDA_HASH_KEY(nid, direction, index));
1213 return get_vol_mute(codec, info, nid, ch, direction, index);
1215 EXPORT_SYMBOL_HDA(snd_hda_codec_amp_read);
1218 * update the AMP value, mask = bit mask to set, val = the value
1220 int snd_hda_codec_amp_update(struct hda_codec *codec, hda_nid_t nid, int ch,
1221 int direction, int idx, int mask, int val)
1223 struct hda_amp_info *info;
1225 info = get_alloc_amp_hash(codec, HDA_HASH_KEY(nid, direction, idx));
1229 val |= get_vol_mute(codec, info, nid, ch, direction, idx) & ~mask;
1230 if (info->vol[ch] == val)
1232 put_vol_mute(codec, info, nid, ch, direction, idx, val);
1235 EXPORT_SYMBOL_HDA(snd_hda_codec_amp_update);
1238 * update the AMP stereo with the same mask and value
1240 int snd_hda_codec_amp_stereo(struct hda_codec *codec, hda_nid_t nid,
1241 int direction, int idx, int mask, int val)
1244 for (ch = 0; ch < 2; ch++)
1245 ret |= snd_hda_codec_amp_update(codec, nid, ch, direction,
1249 EXPORT_SYMBOL_HDA(snd_hda_codec_amp_stereo);
1251 #ifdef SND_HDA_NEEDS_RESUME
1252 /* resume the all amp commands from the cache */
1253 void snd_hda_codec_resume_amp(struct hda_codec *codec)
1255 struct hda_amp_info *buffer = codec->amp_cache.buf.list;
1258 for (i = 0; i < codec->amp_cache.buf.used; i++, buffer++) {
1259 u32 key = buffer->head.key;
1261 unsigned int idx, dir, ch;
1265 idx = (key >> 16) & 0xff;
1266 dir = (key >> 24) & 0xff;
1267 for (ch = 0; ch < 2; ch++) {
1268 if (!(buffer->head.val & INFO_AMP_VOL(ch)))
1270 put_vol_mute(codec, buffer, nid, ch, dir, idx,
1275 EXPORT_SYMBOL_HDA(snd_hda_codec_resume_amp);
1276 #endif /* SND_HDA_NEEDS_RESUME */
1279 int snd_hda_mixer_amp_volume_info(struct snd_kcontrol *kcontrol,
1280 struct snd_ctl_elem_info *uinfo)
1282 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1283 u16 nid = get_amp_nid(kcontrol);
1284 u8 chs = get_amp_channels(kcontrol);
1285 int dir = get_amp_direction(kcontrol);
1286 unsigned int ofs = get_amp_offset(kcontrol);
1289 caps = query_amp_caps(codec, nid, dir);
1291 caps = (caps & AC_AMPCAP_NUM_STEPS) >> AC_AMPCAP_NUM_STEPS_SHIFT;
1293 printk(KERN_WARNING "hda_codec: "
1294 "num_steps = 0 for NID=0x%x (ctl = %s)\n", nid,
1300 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
1301 uinfo->count = chs == 3 ? 2 : 1;
1302 uinfo->value.integer.min = 0;
1303 uinfo->value.integer.max = caps;
1306 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_volume_info);
1309 static inline unsigned int
1310 read_amp_value(struct hda_codec *codec, hda_nid_t nid,
1311 int ch, int dir, int idx, unsigned int ofs)
1314 val = snd_hda_codec_amp_read(codec, nid, ch, dir, idx);
1315 val &= HDA_AMP_VOLMASK;
1324 update_amp_value(struct hda_codec *codec, hda_nid_t nid,
1325 int ch, int dir, int idx, unsigned int ofs,
1330 return snd_hda_codec_amp_update(codec, nid, ch, dir, idx,
1331 HDA_AMP_VOLMASK, val);
1334 int snd_hda_mixer_amp_volume_get(struct snd_kcontrol *kcontrol,
1335 struct snd_ctl_elem_value *ucontrol)
1337 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1338 hda_nid_t nid = get_amp_nid(kcontrol);
1339 int chs = get_amp_channels(kcontrol);
1340 int dir = get_amp_direction(kcontrol);
1341 int idx = get_amp_index(kcontrol);
1342 unsigned int ofs = get_amp_offset(kcontrol);
1343 long *valp = ucontrol->value.integer.value;
1346 *valp++ = read_amp_value(codec, nid, 0, dir, idx, ofs);
1348 *valp = read_amp_value(codec, nid, 1, dir, idx, ofs);
1351 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_volume_get);
1353 int snd_hda_mixer_amp_volume_put(struct snd_kcontrol *kcontrol,
1354 struct snd_ctl_elem_value *ucontrol)
1356 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1357 hda_nid_t nid = get_amp_nid(kcontrol);
1358 int chs = get_amp_channels(kcontrol);
1359 int dir = get_amp_direction(kcontrol);
1360 int idx = get_amp_index(kcontrol);
1361 unsigned int ofs = get_amp_offset(kcontrol);
1362 long *valp = ucontrol->value.integer.value;
1365 snd_hda_power_up(codec);
1367 change = update_amp_value(codec, nid, 0, dir, idx, ofs, *valp);
1371 change |= update_amp_value(codec, nid, 1, dir, idx, ofs, *valp);
1372 snd_hda_power_down(codec);
1375 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_volume_put);
1377 int snd_hda_mixer_amp_tlv(struct snd_kcontrol *kcontrol, int op_flag,
1378 unsigned int size, unsigned int __user *_tlv)
1380 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1381 hda_nid_t nid = get_amp_nid(kcontrol);
1382 int dir = get_amp_direction(kcontrol);
1383 unsigned int ofs = get_amp_offset(kcontrol);
1384 u32 caps, val1, val2;
1386 if (size < 4 * sizeof(unsigned int))
1388 caps = query_amp_caps(codec, nid, dir);
1389 val2 = (caps & AC_AMPCAP_STEP_SIZE) >> AC_AMPCAP_STEP_SIZE_SHIFT;
1390 val2 = (val2 + 1) * 25;
1391 val1 = -((caps & AC_AMPCAP_OFFSET) >> AC_AMPCAP_OFFSET_SHIFT);
1393 val1 = ((int)val1) * ((int)val2);
1394 if (put_user(SNDRV_CTL_TLVT_DB_SCALE, _tlv))
1396 if (put_user(2 * sizeof(unsigned int), _tlv + 1))
1398 if (put_user(val1, _tlv + 2))
1400 if (put_user(val2, _tlv + 3))
1404 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_tlv);
1407 * set (static) TLV for virtual master volume; recalculated as max 0dB
1409 void snd_hda_set_vmaster_tlv(struct hda_codec *codec, hda_nid_t nid, int dir,
1415 caps = query_amp_caps(codec, nid, dir);
1416 nums = (caps & AC_AMPCAP_NUM_STEPS) >> AC_AMPCAP_NUM_STEPS_SHIFT;
1417 step = (caps & AC_AMPCAP_STEP_SIZE) >> AC_AMPCAP_STEP_SIZE_SHIFT;
1418 step = (step + 1) * 25;
1419 tlv[0] = SNDRV_CTL_TLVT_DB_SCALE;
1420 tlv[1] = 2 * sizeof(unsigned int);
1421 tlv[2] = -nums * step;
1424 EXPORT_SYMBOL_HDA(snd_hda_set_vmaster_tlv);
1426 /* find a mixer control element with the given name */
1427 static struct snd_kcontrol *
1428 _snd_hda_find_mixer_ctl(struct hda_codec *codec,
1429 const char *name, int idx)
1431 struct snd_ctl_elem_id id;
1432 memset(&id, 0, sizeof(id));
1433 id.iface = SNDRV_CTL_ELEM_IFACE_MIXER;
1435 strcpy(id.name, name);
1436 return snd_ctl_find_id(codec->bus->card, &id);
1439 struct snd_kcontrol *snd_hda_find_mixer_ctl(struct hda_codec *codec,
1442 return _snd_hda_find_mixer_ctl(codec, name, 0);
1444 EXPORT_SYMBOL_HDA(snd_hda_find_mixer_ctl);
1446 /* Add a control element and assign to the codec */
1447 int snd_hda_ctl_add(struct hda_codec *codec, struct snd_kcontrol *kctl)
1450 struct snd_kcontrol **knewp;
1452 err = snd_ctl_add(codec->bus->card, kctl);
1455 knewp = snd_array_new(&codec->mixers);
1461 EXPORT_SYMBOL_HDA(snd_hda_ctl_add);
1463 /* Clear all controls assigned to the given codec */
1464 void snd_hda_ctls_clear(struct hda_codec *codec)
1467 struct snd_kcontrol **kctls = codec->mixers.list;
1468 for (i = 0; i < codec->mixers.used; i++)
1469 snd_ctl_remove(codec->bus->card, kctls[i]);
1470 snd_array_free(&codec->mixers);
1473 /* pseudo device locking
1474 * toggle card->shutdown to allow/disallow the device access (as a hack)
1476 static int hda_lock_devices(struct snd_card *card)
1478 spin_lock(&card->files_lock);
1479 if (card->shutdown) {
1480 spin_unlock(&card->files_lock);
1484 spin_unlock(&card->files_lock);
1488 static void hda_unlock_devices(struct snd_card *card)
1490 spin_lock(&card->files_lock);
1492 spin_unlock(&card->files_lock);
1495 int snd_hda_codec_reset(struct hda_codec *codec)
1497 struct snd_card *card = codec->bus->card;
1500 if (hda_lock_devices(card) < 0)
1502 /* check whether the codec isn't used by any mixer or PCM streams */
1503 if (!list_empty(&card->ctl_files)) {
1504 hda_unlock_devices(card);
1507 for (pcm = 0; pcm < codec->num_pcms; pcm++) {
1508 struct hda_pcm *cpcm = &codec->pcm_info[pcm];
1511 if (cpcm->pcm->streams[0].substream_opened ||
1512 cpcm->pcm->streams[1].substream_opened) {
1513 hda_unlock_devices(card);
1518 /* OK, let it free */
1520 #ifdef CONFIG_SND_HDA_POWER_SAVE
1521 cancel_delayed_work(&codec->power_work);
1522 flush_workqueue(codec->bus->workq);
1524 snd_hda_ctls_clear(codec);
1526 for (i = 0; i < codec->num_pcms; i++) {
1527 if (codec->pcm_info[i].pcm) {
1528 snd_device_free(card, codec->pcm_info[i].pcm);
1529 clear_bit(codec->pcm_info[i].device,
1530 codec->bus->pcm_dev_bits);
1533 if (codec->patch_ops.free)
1534 codec->patch_ops.free(codec);
1535 codec->proc_widget_hook = NULL;
1537 free_hda_cache(&codec->amp_cache);
1538 free_hda_cache(&codec->cmd_cache);
1539 init_hda_cache(&codec->amp_cache, sizeof(struct hda_amp_info));
1540 init_hda_cache(&codec->cmd_cache, sizeof(struct hda_cache_head));
1541 /* free only driver_pins so that init_pins + user_pins are restored */
1542 snd_array_free(&codec->driver_pins);
1543 restore_pincfgs(codec);
1544 codec->num_pcms = 0;
1545 codec->pcm_info = NULL;
1546 codec->preset = NULL;
1547 memset(&codec->patch_ops, 0, sizeof(codec->patch_ops));
1548 codec->slave_dig_outs = NULL;
1549 codec->spdif_status_reset = 0;
1550 module_put(codec->owner);
1551 codec->owner = NULL;
1553 /* allow device access again */
1554 hda_unlock_devices(card);
1558 /* create a virtual master control and add slaves */
1559 int snd_hda_add_vmaster(struct hda_codec *codec, char *name,
1560 unsigned int *tlv, const char **slaves)
1562 struct snd_kcontrol *kctl;
1566 for (s = slaves; *s && !snd_hda_find_mixer_ctl(codec, *s); s++)
1569 snd_printdd("No slave found for %s\n", name);
1572 kctl = snd_ctl_make_virtual_master(name, tlv);
1575 err = snd_hda_ctl_add(codec, kctl);
1579 for (s = slaves; *s; s++) {
1580 struct snd_kcontrol *sctl;
1583 sctl = _snd_hda_find_mixer_ctl(codec, *s, i);
1586 snd_printdd("Cannot find slave %s, "
1590 err = snd_ctl_add_slave(kctl, sctl);
1598 EXPORT_SYMBOL_HDA(snd_hda_add_vmaster);
1601 int snd_hda_mixer_amp_switch_info(struct snd_kcontrol *kcontrol,
1602 struct snd_ctl_elem_info *uinfo)
1604 int chs = get_amp_channels(kcontrol);
1606 uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
1607 uinfo->count = chs == 3 ? 2 : 1;
1608 uinfo->value.integer.min = 0;
1609 uinfo->value.integer.max = 1;
1612 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_switch_info);
1614 int snd_hda_mixer_amp_switch_get(struct snd_kcontrol *kcontrol,
1615 struct snd_ctl_elem_value *ucontrol)
1617 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1618 hda_nid_t nid = get_amp_nid(kcontrol);
1619 int chs = get_amp_channels(kcontrol);
1620 int dir = get_amp_direction(kcontrol);
1621 int idx = get_amp_index(kcontrol);
1622 long *valp = ucontrol->value.integer.value;
1625 *valp++ = (snd_hda_codec_amp_read(codec, nid, 0, dir, idx) &
1626 HDA_AMP_MUTE) ? 0 : 1;
1628 *valp = (snd_hda_codec_amp_read(codec, nid, 1, dir, idx) &
1629 HDA_AMP_MUTE) ? 0 : 1;
1632 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_switch_get);
1634 int snd_hda_mixer_amp_switch_put(struct snd_kcontrol *kcontrol,
1635 struct snd_ctl_elem_value *ucontrol)
1637 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1638 hda_nid_t nid = get_amp_nid(kcontrol);
1639 int chs = get_amp_channels(kcontrol);
1640 int dir = get_amp_direction(kcontrol);
1641 int idx = get_amp_index(kcontrol);
1642 long *valp = ucontrol->value.integer.value;
1645 snd_hda_power_up(codec);
1647 change = snd_hda_codec_amp_update(codec, nid, 0, dir, idx,
1649 *valp ? 0 : HDA_AMP_MUTE);
1653 change |= snd_hda_codec_amp_update(codec, nid, 1, dir, idx,
1655 *valp ? 0 : HDA_AMP_MUTE);
1656 #ifdef CONFIG_SND_HDA_POWER_SAVE
1657 if (codec->patch_ops.check_power_status)
1658 codec->patch_ops.check_power_status(codec, nid);
1660 snd_hda_power_down(codec);
1663 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_switch_put);
1666 * bound volume controls
1668 * bind multiple volumes (# indices, from 0)
1671 #define AMP_VAL_IDX_SHIFT 19
1672 #define AMP_VAL_IDX_MASK (0x0f<<19)
1674 int snd_hda_mixer_bind_switch_get(struct snd_kcontrol *kcontrol,
1675 struct snd_ctl_elem_value *ucontrol)
1677 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1681 mutex_lock(&codec->control_mutex);
1682 pval = kcontrol->private_value;
1683 kcontrol->private_value = pval & ~AMP_VAL_IDX_MASK; /* index 0 */
1684 err = snd_hda_mixer_amp_switch_get(kcontrol, ucontrol);
1685 kcontrol->private_value = pval;
1686 mutex_unlock(&codec->control_mutex);
1689 EXPORT_SYMBOL_HDA(snd_hda_mixer_bind_switch_get);
1691 int snd_hda_mixer_bind_switch_put(struct snd_kcontrol *kcontrol,
1692 struct snd_ctl_elem_value *ucontrol)
1694 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1696 int i, indices, err = 0, change = 0;
1698 mutex_lock(&codec->control_mutex);
1699 pval = kcontrol->private_value;
1700 indices = (pval & AMP_VAL_IDX_MASK) >> AMP_VAL_IDX_SHIFT;
1701 for (i = 0; i < indices; i++) {
1702 kcontrol->private_value = (pval & ~AMP_VAL_IDX_MASK) |
1703 (i << AMP_VAL_IDX_SHIFT);
1704 err = snd_hda_mixer_amp_switch_put(kcontrol, ucontrol);
1709 kcontrol->private_value = pval;
1710 mutex_unlock(&codec->control_mutex);
1711 return err < 0 ? err : change;
1713 EXPORT_SYMBOL_HDA(snd_hda_mixer_bind_switch_put);
1716 * generic bound volume/swtich controls
1718 int snd_hda_mixer_bind_ctls_info(struct snd_kcontrol *kcontrol,
1719 struct snd_ctl_elem_info *uinfo)
1721 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1722 struct hda_bind_ctls *c;
1725 mutex_lock(&codec->control_mutex);
1726 c = (struct hda_bind_ctls *)kcontrol->private_value;
1727 kcontrol->private_value = *c->values;
1728 err = c->ops->info(kcontrol, uinfo);
1729 kcontrol->private_value = (long)c;
1730 mutex_unlock(&codec->control_mutex);
1733 EXPORT_SYMBOL_HDA(snd_hda_mixer_bind_ctls_info);
1735 int snd_hda_mixer_bind_ctls_get(struct snd_kcontrol *kcontrol,
1736 struct snd_ctl_elem_value *ucontrol)
1738 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1739 struct hda_bind_ctls *c;
1742 mutex_lock(&codec->control_mutex);
1743 c = (struct hda_bind_ctls *)kcontrol->private_value;
1744 kcontrol->private_value = *c->values;
1745 err = c->ops->get(kcontrol, ucontrol);
1746 kcontrol->private_value = (long)c;
1747 mutex_unlock(&codec->control_mutex);
1750 EXPORT_SYMBOL_HDA(snd_hda_mixer_bind_ctls_get);
1752 int snd_hda_mixer_bind_ctls_put(struct snd_kcontrol *kcontrol,
1753 struct snd_ctl_elem_value *ucontrol)
1755 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1756 struct hda_bind_ctls *c;
1757 unsigned long *vals;
1758 int err = 0, change = 0;
1760 mutex_lock(&codec->control_mutex);
1761 c = (struct hda_bind_ctls *)kcontrol->private_value;
1762 for (vals = c->values; *vals; vals++) {
1763 kcontrol->private_value = *vals;
1764 err = c->ops->put(kcontrol, ucontrol);
1769 kcontrol->private_value = (long)c;
1770 mutex_unlock(&codec->control_mutex);
1771 return err < 0 ? err : change;
1773 EXPORT_SYMBOL_HDA(snd_hda_mixer_bind_ctls_put);
1775 int snd_hda_mixer_bind_tlv(struct snd_kcontrol *kcontrol, int op_flag,
1776 unsigned int size, unsigned int __user *tlv)
1778 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1779 struct hda_bind_ctls *c;
1782 mutex_lock(&codec->control_mutex);
1783 c = (struct hda_bind_ctls *)kcontrol->private_value;
1784 kcontrol->private_value = *c->values;
1785 err = c->ops->tlv(kcontrol, op_flag, size, tlv);
1786 kcontrol->private_value = (long)c;
1787 mutex_unlock(&codec->control_mutex);
1790 EXPORT_SYMBOL_HDA(snd_hda_mixer_bind_tlv);
1792 struct hda_ctl_ops snd_hda_bind_vol = {
1793 .info = snd_hda_mixer_amp_volume_info,
1794 .get = snd_hda_mixer_amp_volume_get,
1795 .put = snd_hda_mixer_amp_volume_put,
1796 .tlv = snd_hda_mixer_amp_tlv
1798 EXPORT_SYMBOL_HDA(snd_hda_bind_vol);
1800 struct hda_ctl_ops snd_hda_bind_sw = {
1801 .info = snd_hda_mixer_amp_switch_info,
1802 .get = snd_hda_mixer_amp_switch_get,
1803 .put = snd_hda_mixer_amp_switch_put,
1804 .tlv = snd_hda_mixer_amp_tlv
1806 EXPORT_SYMBOL_HDA(snd_hda_bind_sw);
1809 * SPDIF out controls
1812 static int snd_hda_spdif_mask_info(struct snd_kcontrol *kcontrol,
1813 struct snd_ctl_elem_info *uinfo)
1815 uinfo->type = SNDRV_CTL_ELEM_TYPE_IEC958;
1820 static int snd_hda_spdif_cmask_get(struct snd_kcontrol *kcontrol,
1821 struct snd_ctl_elem_value *ucontrol)
1823 ucontrol->value.iec958.status[0] = IEC958_AES0_PROFESSIONAL |
1824 IEC958_AES0_NONAUDIO |
1825 IEC958_AES0_CON_EMPHASIS_5015 |
1826 IEC958_AES0_CON_NOT_COPYRIGHT;
1827 ucontrol->value.iec958.status[1] = IEC958_AES1_CON_CATEGORY |
1828 IEC958_AES1_CON_ORIGINAL;
1832 static int snd_hda_spdif_pmask_get(struct snd_kcontrol *kcontrol,
1833 struct snd_ctl_elem_value *ucontrol)
1835 ucontrol->value.iec958.status[0] = IEC958_AES0_PROFESSIONAL |
1836 IEC958_AES0_NONAUDIO |
1837 IEC958_AES0_PRO_EMPHASIS_5015;
1841 static int snd_hda_spdif_default_get(struct snd_kcontrol *kcontrol,
1842 struct snd_ctl_elem_value *ucontrol)
1844 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1846 ucontrol->value.iec958.status[0] = codec->spdif_status & 0xff;
1847 ucontrol->value.iec958.status[1] = (codec->spdif_status >> 8) & 0xff;
1848 ucontrol->value.iec958.status[2] = (codec->spdif_status >> 16) & 0xff;
1849 ucontrol->value.iec958.status[3] = (codec->spdif_status >> 24) & 0xff;
1854 /* convert from SPDIF status bits to HDA SPDIF bits
1855 * bit 0 (DigEn) is always set zero (to be filled later)
1857 static unsigned short convert_from_spdif_status(unsigned int sbits)
1859 unsigned short val = 0;
1861 if (sbits & IEC958_AES0_PROFESSIONAL)
1862 val |= AC_DIG1_PROFESSIONAL;
1863 if (sbits & IEC958_AES0_NONAUDIO)
1864 val |= AC_DIG1_NONAUDIO;
1865 if (sbits & IEC958_AES0_PROFESSIONAL) {
1866 if ((sbits & IEC958_AES0_PRO_EMPHASIS) ==
1867 IEC958_AES0_PRO_EMPHASIS_5015)
1868 val |= AC_DIG1_EMPHASIS;
1870 if ((sbits & IEC958_AES0_CON_EMPHASIS) ==
1871 IEC958_AES0_CON_EMPHASIS_5015)
1872 val |= AC_DIG1_EMPHASIS;
1873 if (!(sbits & IEC958_AES0_CON_NOT_COPYRIGHT))
1874 val |= AC_DIG1_COPYRIGHT;
1875 if (sbits & (IEC958_AES1_CON_ORIGINAL << 8))
1876 val |= AC_DIG1_LEVEL;
1877 val |= sbits & (IEC958_AES1_CON_CATEGORY << 8);
1882 /* convert to SPDIF status bits from HDA SPDIF bits
1884 static unsigned int convert_to_spdif_status(unsigned short val)
1886 unsigned int sbits = 0;
1888 if (val & AC_DIG1_NONAUDIO)
1889 sbits |= IEC958_AES0_NONAUDIO;
1890 if (val & AC_DIG1_PROFESSIONAL)
1891 sbits |= IEC958_AES0_PROFESSIONAL;
1892 if (sbits & IEC958_AES0_PROFESSIONAL) {
1893 if (sbits & AC_DIG1_EMPHASIS)
1894 sbits |= IEC958_AES0_PRO_EMPHASIS_5015;
1896 if (val & AC_DIG1_EMPHASIS)
1897 sbits |= IEC958_AES0_CON_EMPHASIS_5015;
1898 if (!(val & AC_DIG1_COPYRIGHT))
1899 sbits |= IEC958_AES0_CON_NOT_COPYRIGHT;
1900 if (val & AC_DIG1_LEVEL)
1901 sbits |= (IEC958_AES1_CON_ORIGINAL << 8);
1902 sbits |= val & (0x7f << 8);
1907 /* set digital convert verbs both for the given NID and its slaves */
1908 static void set_dig_out(struct hda_codec *codec, hda_nid_t nid,
1913 snd_hda_codec_write_cache(codec, nid, 0, verb, val);
1914 d = codec->slave_dig_outs;
1918 snd_hda_codec_write_cache(codec, *d, 0, verb, val);
1921 static inline void set_dig_out_convert(struct hda_codec *codec, hda_nid_t nid,
1925 set_dig_out(codec, nid, AC_VERB_SET_DIGI_CONVERT_1, dig1);
1927 set_dig_out(codec, nid, AC_VERB_SET_DIGI_CONVERT_2, dig2);
1930 static int snd_hda_spdif_default_put(struct snd_kcontrol *kcontrol,
1931 struct snd_ctl_elem_value *ucontrol)
1933 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1934 hda_nid_t nid = kcontrol->private_value;
1938 mutex_lock(&codec->spdif_mutex);
1939 codec->spdif_status = ucontrol->value.iec958.status[0] |
1940 ((unsigned int)ucontrol->value.iec958.status[1] << 8) |
1941 ((unsigned int)ucontrol->value.iec958.status[2] << 16) |
1942 ((unsigned int)ucontrol->value.iec958.status[3] << 24);
1943 val = convert_from_spdif_status(codec->spdif_status);
1944 val |= codec->spdif_ctls & 1;
1945 change = codec->spdif_ctls != val;
1946 codec->spdif_ctls = val;
1949 set_dig_out_convert(codec, nid, val & 0xff, (val >> 8) & 0xff);
1951 mutex_unlock(&codec->spdif_mutex);
1955 #define snd_hda_spdif_out_switch_info snd_ctl_boolean_mono_info
1957 static int snd_hda_spdif_out_switch_get(struct snd_kcontrol *kcontrol,
1958 struct snd_ctl_elem_value *ucontrol)
1960 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1962 ucontrol->value.integer.value[0] = codec->spdif_ctls & AC_DIG1_ENABLE;
1966 static int snd_hda_spdif_out_switch_put(struct snd_kcontrol *kcontrol,
1967 struct snd_ctl_elem_value *ucontrol)
1969 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1970 hda_nid_t nid = kcontrol->private_value;
1974 mutex_lock(&codec->spdif_mutex);
1975 val = codec->spdif_ctls & ~AC_DIG1_ENABLE;
1976 if (ucontrol->value.integer.value[0])
1977 val |= AC_DIG1_ENABLE;
1978 change = codec->spdif_ctls != val;
1980 codec->spdif_ctls = val;
1981 set_dig_out_convert(codec, nid, val & 0xff, -1);
1982 /* unmute amp switch (if any) */
1983 if ((get_wcaps(codec, nid) & AC_WCAP_OUT_AMP) &&
1984 (val & AC_DIG1_ENABLE))
1985 snd_hda_codec_amp_stereo(codec, nid, HDA_OUTPUT, 0,
1988 mutex_unlock(&codec->spdif_mutex);
1992 static struct snd_kcontrol_new dig_mixes[] = {
1994 .access = SNDRV_CTL_ELEM_ACCESS_READ,
1995 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
1996 .name = SNDRV_CTL_NAME_IEC958("",PLAYBACK,CON_MASK),
1997 .info = snd_hda_spdif_mask_info,
1998 .get = snd_hda_spdif_cmask_get,
2001 .access = SNDRV_CTL_ELEM_ACCESS_READ,
2002 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2003 .name = SNDRV_CTL_NAME_IEC958("",PLAYBACK,PRO_MASK),
2004 .info = snd_hda_spdif_mask_info,
2005 .get = snd_hda_spdif_pmask_get,
2008 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2009 .name = SNDRV_CTL_NAME_IEC958("",PLAYBACK,DEFAULT),
2010 .info = snd_hda_spdif_mask_info,
2011 .get = snd_hda_spdif_default_get,
2012 .put = snd_hda_spdif_default_put,
2015 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2016 .name = SNDRV_CTL_NAME_IEC958("",PLAYBACK,SWITCH),
2017 .info = snd_hda_spdif_out_switch_info,
2018 .get = snd_hda_spdif_out_switch_get,
2019 .put = snd_hda_spdif_out_switch_put,
2024 #define SPDIF_MAX_IDX 4 /* 4 instances should be enough to probe */
2027 * snd_hda_create_spdif_out_ctls - create Output SPDIF-related controls
2028 * @codec: the HDA codec
2029 * @nid: audio out widget NID
2031 * Creates controls related with the SPDIF output.
2032 * Called from each patch supporting the SPDIF out.
2034 * Returns 0 if successful, or a negative error code.
2036 int snd_hda_create_spdif_out_ctls(struct hda_codec *codec, hda_nid_t nid)
2039 struct snd_kcontrol *kctl;
2040 struct snd_kcontrol_new *dig_mix;
2043 for (idx = 0; idx < SPDIF_MAX_IDX; idx++) {
2044 if (!_snd_hda_find_mixer_ctl(codec, "IEC958 Playback Switch",
2048 if (idx >= SPDIF_MAX_IDX) {
2049 printk(KERN_ERR "hda_codec: too many IEC958 outputs\n");
2052 for (dig_mix = dig_mixes; dig_mix->name; dig_mix++) {
2053 kctl = snd_ctl_new1(dig_mix, codec);
2056 kctl->id.index = idx;
2057 kctl->private_value = nid;
2058 err = snd_hda_ctl_add(codec, kctl);
2063 snd_hda_codec_read(codec, nid, 0,
2064 AC_VERB_GET_DIGI_CONVERT_1, 0);
2065 codec->spdif_status = convert_to_spdif_status(codec->spdif_ctls);
2068 EXPORT_SYMBOL_HDA(snd_hda_create_spdif_out_ctls);
2071 * SPDIF sharing with analog output
2073 static int spdif_share_sw_get(struct snd_kcontrol *kcontrol,
2074 struct snd_ctl_elem_value *ucontrol)
2076 struct hda_multi_out *mout = snd_kcontrol_chip(kcontrol);
2077 ucontrol->value.integer.value[0] = mout->share_spdif;
2081 static int spdif_share_sw_put(struct snd_kcontrol *kcontrol,
2082 struct snd_ctl_elem_value *ucontrol)
2084 struct hda_multi_out *mout = snd_kcontrol_chip(kcontrol);
2085 mout->share_spdif = !!ucontrol->value.integer.value[0];
2089 static struct snd_kcontrol_new spdif_share_sw = {
2090 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2091 .name = "IEC958 Default PCM Playback Switch",
2092 .info = snd_ctl_boolean_mono_info,
2093 .get = spdif_share_sw_get,
2094 .put = spdif_share_sw_put,
2097 int snd_hda_create_spdif_share_sw(struct hda_codec *codec,
2098 struct hda_multi_out *mout)
2100 if (!mout->dig_out_nid)
2102 /* ATTENTION: here mout is passed as private_data, instead of codec */
2103 return snd_hda_ctl_add(codec,
2104 snd_ctl_new1(&spdif_share_sw, mout));
2106 EXPORT_SYMBOL_HDA(snd_hda_create_spdif_share_sw);
2112 #define snd_hda_spdif_in_switch_info snd_hda_spdif_out_switch_info
2114 static int snd_hda_spdif_in_switch_get(struct snd_kcontrol *kcontrol,
2115 struct snd_ctl_elem_value *ucontrol)
2117 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2119 ucontrol->value.integer.value[0] = codec->spdif_in_enable;
2123 static int snd_hda_spdif_in_switch_put(struct snd_kcontrol *kcontrol,
2124 struct snd_ctl_elem_value *ucontrol)
2126 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2127 hda_nid_t nid = kcontrol->private_value;
2128 unsigned int val = !!ucontrol->value.integer.value[0];
2131 mutex_lock(&codec->spdif_mutex);
2132 change = codec->spdif_in_enable != val;
2134 codec->spdif_in_enable = val;
2135 snd_hda_codec_write_cache(codec, nid, 0,
2136 AC_VERB_SET_DIGI_CONVERT_1, val);
2138 mutex_unlock(&codec->spdif_mutex);
2142 static int snd_hda_spdif_in_status_get(struct snd_kcontrol *kcontrol,
2143 struct snd_ctl_elem_value *ucontrol)
2145 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2146 hda_nid_t nid = kcontrol->private_value;
2150 val = snd_hda_codec_read(codec, nid, 0, AC_VERB_GET_DIGI_CONVERT_1, 0);
2151 sbits = convert_to_spdif_status(val);
2152 ucontrol->value.iec958.status[0] = sbits;
2153 ucontrol->value.iec958.status[1] = sbits >> 8;
2154 ucontrol->value.iec958.status[2] = sbits >> 16;
2155 ucontrol->value.iec958.status[3] = sbits >> 24;
2159 static struct snd_kcontrol_new dig_in_ctls[] = {
2161 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2162 .name = SNDRV_CTL_NAME_IEC958("",CAPTURE,SWITCH),
2163 .info = snd_hda_spdif_in_switch_info,
2164 .get = snd_hda_spdif_in_switch_get,
2165 .put = snd_hda_spdif_in_switch_put,
2168 .access = SNDRV_CTL_ELEM_ACCESS_READ,
2169 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2170 .name = SNDRV_CTL_NAME_IEC958("",CAPTURE,DEFAULT),
2171 .info = snd_hda_spdif_mask_info,
2172 .get = snd_hda_spdif_in_status_get,
2178 * snd_hda_create_spdif_in_ctls - create Input SPDIF-related controls
2179 * @codec: the HDA codec
2180 * @nid: audio in widget NID
2182 * Creates controls related with the SPDIF input.
2183 * Called from each patch supporting the SPDIF in.
2185 * Returns 0 if successful, or a negative error code.
2187 int snd_hda_create_spdif_in_ctls(struct hda_codec *codec, hda_nid_t nid)
2190 struct snd_kcontrol *kctl;
2191 struct snd_kcontrol_new *dig_mix;
2194 for (idx = 0; idx < SPDIF_MAX_IDX; idx++) {
2195 if (!_snd_hda_find_mixer_ctl(codec, "IEC958 Capture Switch",
2199 if (idx >= SPDIF_MAX_IDX) {
2200 printk(KERN_ERR "hda_codec: too many IEC958 inputs\n");
2203 for (dig_mix = dig_in_ctls; dig_mix->name; dig_mix++) {
2204 kctl = snd_ctl_new1(dig_mix, codec);
2207 kctl->private_value = nid;
2208 err = snd_hda_ctl_add(codec, kctl);
2212 codec->spdif_in_enable =
2213 snd_hda_codec_read(codec, nid, 0,
2214 AC_VERB_GET_DIGI_CONVERT_1, 0) &
2218 EXPORT_SYMBOL_HDA(snd_hda_create_spdif_in_ctls);
2220 #ifdef SND_HDA_NEEDS_RESUME
2225 /* build a 32bit cache key with the widget id and the command parameter */
2226 #define build_cmd_cache_key(nid, verb) ((verb << 8) | nid)
2227 #define get_cmd_cache_nid(key) ((key) & 0xff)
2228 #define get_cmd_cache_cmd(key) (((key) >> 8) & 0xffff)
2231 * snd_hda_codec_write_cache - send a single command with caching
2232 * @codec: the HDA codec
2233 * @nid: NID to send the command
2234 * @direct: direct flag
2235 * @verb: the verb to send
2236 * @parm: the parameter for the verb
2238 * Send a single command without waiting for response.
2240 * Returns 0 if successful, or a negative error code.
2242 int snd_hda_codec_write_cache(struct hda_codec *codec, hda_nid_t nid,
2243 int direct, unsigned int verb, unsigned int parm)
2245 struct hda_bus *bus = codec->bus;
2249 res = make_codec_cmd(codec, nid, direct, verb, parm);
2250 snd_hda_power_up(codec);
2251 mutex_lock(&bus->cmd_mutex);
2252 err = bus->ops.command(bus, res);
2254 struct hda_cache_head *c;
2256 /* parm may contain the verb stuff for get/set amp */
2257 verb = verb | (parm >> 8);
2259 key = build_cmd_cache_key(nid, verb);
2260 c = get_alloc_hash(&codec->cmd_cache, key);
2264 mutex_unlock(&bus->cmd_mutex);
2265 snd_hda_power_down(codec);
2268 EXPORT_SYMBOL_HDA(snd_hda_codec_write_cache);
2270 /* resume the all commands from the cache */
2271 void snd_hda_codec_resume_cache(struct hda_codec *codec)
2273 struct hda_cache_head *buffer = codec->cmd_cache.buf.list;
2276 for (i = 0; i < codec->cmd_cache.buf.used; i++, buffer++) {
2277 u32 key = buffer->key;
2280 snd_hda_codec_write(codec, get_cmd_cache_nid(key), 0,
2281 get_cmd_cache_cmd(key), buffer->val);
2284 EXPORT_SYMBOL_HDA(snd_hda_codec_resume_cache);
2287 * snd_hda_sequence_write_cache - sequence writes with caching
2288 * @codec: the HDA codec
2289 * @seq: VERB array to send
2291 * Send the commands sequentially from the given array.
2292 * Thte commands are recorded on cache for power-save and resume.
2293 * The array must be terminated with NID=0.
2295 void snd_hda_sequence_write_cache(struct hda_codec *codec,
2296 const struct hda_verb *seq)
2298 for (; seq->nid; seq++)
2299 snd_hda_codec_write_cache(codec, seq->nid, 0, seq->verb,
2302 EXPORT_SYMBOL_HDA(snd_hda_sequence_write_cache);
2303 #endif /* SND_HDA_NEEDS_RESUME */
2306 * set power state of the codec
2308 static void hda_set_power_state(struct hda_codec *codec, hda_nid_t fg,
2309 unsigned int power_state)
2314 snd_hda_codec_write(codec, fg, 0, AC_VERB_SET_POWER_STATE,
2316 msleep(10); /* partial workaround for "azx_get_response timeout" */
2318 nid = codec->start_nid;
2319 for (i = 0; i < codec->num_nodes; i++, nid++) {
2320 unsigned int wcaps = get_wcaps(codec, nid);
2321 if (wcaps & AC_WCAP_POWER) {
2322 unsigned int wid_type = (wcaps & AC_WCAP_TYPE) >>
2324 if (wid_type == AC_WID_PIN) {
2325 unsigned int pincap;
2327 * don't power down the widget if it controls
2328 * eapd and EAPD_BTLENABLE is set.
2330 pincap = snd_hda_query_pin_caps(codec, nid);
2331 if (pincap & AC_PINCAP_EAPD) {
2332 int eapd = snd_hda_codec_read(codec,
2334 AC_VERB_GET_EAPD_BTLENABLE, 0);
2336 if (power_state == AC_PWRST_D3 && eapd)
2340 snd_hda_codec_write(codec, nid, 0,
2341 AC_VERB_SET_POWER_STATE,
2346 if (power_state == AC_PWRST_D0) {
2347 unsigned long end_time;
2350 /* wait until the codec reachs to D0 */
2351 end_time = jiffies + msecs_to_jiffies(500);
2353 state = snd_hda_codec_read(codec, fg, 0,
2354 AC_VERB_GET_POWER_STATE, 0);
2355 if (state == power_state)
2358 } while (time_after_eq(end_time, jiffies));
2362 #ifdef CONFIG_SND_HDA_HWDEP
2363 /* execute additional init verbs */
2364 static void hda_exec_init_verbs(struct hda_codec *codec)
2366 if (codec->init_verbs.list)
2367 snd_hda_sequence_write(codec, codec->init_verbs.list);
2370 static inline void hda_exec_init_verbs(struct hda_codec *codec) {}
2373 #ifdef SND_HDA_NEEDS_RESUME
2375 * call suspend and power-down; used both from PM and power-save
2377 static void hda_call_codec_suspend(struct hda_codec *codec)
2379 if (codec->patch_ops.suspend)
2380 codec->patch_ops.suspend(codec, PMSG_SUSPEND);
2381 hda_set_power_state(codec,
2382 codec->afg ? codec->afg : codec->mfg,
2384 #ifdef CONFIG_SND_HDA_POWER_SAVE
2385 cancel_delayed_work(&codec->power_work);
2386 codec->power_on = 0;
2387 codec->power_transition = 0;
2392 * kick up codec; used both from PM and power-save
2394 static void hda_call_codec_resume(struct hda_codec *codec)
2396 hda_set_power_state(codec,
2397 codec->afg ? codec->afg : codec->mfg,
2399 restore_pincfgs(codec); /* restore all current pin configs */
2400 hda_exec_init_verbs(codec);
2401 if (codec->patch_ops.resume)
2402 codec->patch_ops.resume(codec);
2404 if (codec->patch_ops.init)
2405 codec->patch_ops.init(codec);
2406 snd_hda_codec_resume_amp(codec);
2407 snd_hda_codec_resume_cache(codec);
2410 #endif /* SND_HDA_NEEDS_RESUME */
2414 * snd_hda_build_controls - build mixer controls
2417 * Creates mixer controls for each codec included in the bus.
2419 * Returns 0 if successful, otherwise a negative error code.
2421 int /*__devinit*/ snd_hda_build_controls(struct hda_bus *bus)
2423 struct hda_codec *codec;
2425 list_for_each_entry(codec, &bus->codec_list, list) {
2426 int err = snd_hda_codec_build_controls(codec);
2428 printk(KERN_ERR "hda_codec: cannot build controls"
2429 "for #%d (error %d)\n", codec->addr, err);
2430 err = snd_hda_codec_reset(codec);
2433 "hda_codec: cannot revert codec\n");
2440 EXPORT_SYMBOL_HDA(snd_hda_build_controls);
2442 int snd_hda_codec_build_controls(struct hda_codec *codec)
2445 hda_exec_init_verbs(codec);
2446 /* continue to initialize... */
2447 if (codec->patch_ops.init)
2448 err = codec->patch_ops.init(codec);
2449 if (!err && codec->patch_ops.build_controls)
2450 err = codec->patch_ops.build_controls(codec);
2459 struct hda_rate_tbl {
2461 unsigned int alsa_bits;
2462 unsigned int hda_fmt;
2465 static struct hda_rate_tbl rate_bits[] = {
2466 /* rate in Hz, ALSA rate bitmask, HDA format value */
2468 /* autodetected value used in snd_hda_query_supported_pcm */
2469 { 8000, SNDRV_PCM_RATE_8000, 0x0500 }, /* 1/6 x 48 */
2470 { 11025, SNDRV_PCM_RATE_11025, 0x4300 }, /* 1/4 x 44 */
2471 { 16000, SNDRV_PCM_RATE_16000, 0x0200 }, /* 1/3 x 48 */
2472 { 22050, SNDRV_PCM_RATE_22050, 0x4100 }, /* 1/2 x 44 */
2473 { 32000, SNDRV_PCM_RATE_32000, 0x0a00 }, /* 2/3 x 48 */
2474 { 44100, SNDRV_PCM_RATE_44100, 0x4000 }, /* 44 */
2475 { 48000, SNDRV_PCM_RATE_48000, 0x0000 }, /* 48 */
2476 { 88200, SNDRV_PCM_RATE_88200, 0x4800 }, /* 2 x 44 */
2477 { 96000, SNDRV_PCM_RATE_96000, 0x0800 }, /* 2 x 48 */
2478 { 176400, SNDRV_PCM_RATE_176400, 0x5800 },/* 4 x 44 */
2479 { 192000, SNDRV_PCM_RATE_192000, 0x1800 }, /* 4 x 48 */
2480 #define AC_PAR_PCM_RATE_BITS 11
2481 /* up to bits 10, 384kHZ isn't supported properly */
2483 /* not autodetected value */
2484 { 9600, SNDRV_PCM_RATE_KNOT, 0x0400 }, /* 1/5 x 48 */
2486 { 0 } /* terminator */
2490 * snd_hda_calc_stream_format - calculate format bitset
2491 * @rate: the sample rate
2492 * @channels: the number of channels
2493 * @format: the PCM format (SNDRV_PCM_FORMAT_XXX)
2494 * @maxbps: the max. bps
2496 * Calculate the format bitset from the given rate, channels and th PCM format.
2498 * Return zero if invalid.
2500 unsigned int snd_hda_calc_stream_format(unsigned int rate,
2501 unsigned int channels,
2502 unsigned int format,
2503 unsigned int maxbps)
2506 unsigned int val = 0;
2508 for (i = 0; rate_bits[i].hz; i++)
2509 if (rate_bits[i].hz == rate) {
2510 val = rate_bits[i].hda_fmt;
2513 if (!rate_bits[i].hz) {
2514 snd_printdd("invalid rate %d\n", rate);
2518 if (channels == 0 || channels > 8) {
2519 snd_printdd("invalid channels %d\n", channels);
2522 val |= channels - 1;
2524 switch (snd_pcm_format_width(format)) {
2525 case 8: val |= 0x00; break;
2526 case 16: val |= 0x10; break;
2532 else if (maxbps >= 24)
2538 snd_printdd("invalid format width %d\n",
2539 snd_pcm_format_width(format));
2545 EXPORT_SYMBOL_HDA(snd_hda_calc_stream_format);
2548 * snd_hda_query_supported_pcm - query the supported PCM rates and formats
2549 * @codec: the HDA codec
2550 * @nid: NID to query
2551 * @ratesp: the pointer to store the detected rate bitflags
2552 * @formatsp: the pointer to store the detected formats
2553 * @bpsp: the pointer to store the detected format widths
2555 * Queries the supported PCM rates and formats. The NULL @ratesp, @formatsp
2556 * or @bsps argument is ignored.
2558 * Returns 0 if successful, otherwise a negative error code.
2560 static int snd_hda_query_supported_pcm(struct hda_codec *codec, hda_nid_t nid,
2561 u32 *ratesp, u64 *formatsp, unsigned int *bpsp)
2563 unsigned int i, val, wcaps;
2566 wcaps = get_wcaps(codec, nid);
2567 if (nid != codec->afg && (wcaps & AC_WCAP_FORMAT_OVRD)) {
2568 val = snd_hda_param_read(codec, nid, AC_PAR_PCM);
2573 val = snd_hda_param_read(codec, codec->afg, AC_PAR_PCM);
2577 for (i = 0; i < AC_PAR_PCM_RATE_BITS; i++) {
2579 rates |= rate_bits[i].alsa_bits;
2582 snd_printk(KERN_ERR "hda_codec: rates == 0 "
2583 "(nid=0x%x, val=0x%x, ovrd=%i)\n",
2585 (wcaps & AC_WCAP_FORMAT_OVRD) ? 1 : 0);
2591 if (formatsp || bpsp) {
2593 unsigned int streams, bps;
2595 streams = snd_hda_param_read(codec, nid, AC_PAR_STREAM);
2599 streams = snd_hda_param_read(codec, codec->afg,
2606 if (streams & AC_SUPFMT_PCM) {
2607 if (val & AC_SUPPCM_BITS_8) {
2608 formats |= SNDRV_PCM_FMTBIT_U8;
2611 if (val & AC_SUPPCM_BITS_16) {
2612 formats |= SNDRV_PCM_FMTBIT_S16_LE;
2615 if (wcaps & AC_WCAP_DIGITAL) {
2616 if (val & AC_SUPPCM_BITS_32)
2617 formats |= SNDRV_PCM_FMTBIT_IEC958_SUBFRAME_LE;
2618 if (val & (AC_SUPPCM_BITS_20|AC_SUPPCM_BITS_24))
2619 formats |= SNDRV_PCM_FMTBIT_S32_LE;
2620 if (val & AC_SUPPCM_BITS_24)
2622 else if (val & AC_SUPPCM_BITS_20)
2624 } else if (val & (AC_SUPPCM_BITS_20|AC_SUPPCM_BITS_24|
2625 AC_SUPPCM_BITS_32)) {
2626 formats |= SNDRV_PCM_FMTBIT_S32_LE;
2627 if (val & AC_SUPPCM_BITS_32)
2629 else if (val & AC_SUPPCM_BITS_24)
2631 else if (val & AC_SUPPCM_BITS_20)
2635 else if (streams == AC_SUPFMT_FLOAT32) {
2636 /* should be exclusive */
2637 formats |= SNDRV_PCM_FMTBIT_FLOAT_LE;
2639 } else if (streams == AC_SUPFMT_AC3) {
2640 /* should be exclusive */
2641 /* temporary hack: we have still no proper support
2642 * for the direct AC3 stream...
2644 formats |= SNDRV_PCM_FMTBIT_U8;
2648 snd_printk(KERN_ERR "hda_codec: formats == 0 "
2649 "(nid=0x%x, val=0x%x, ovrd=%i, "
2652 (wcaps & AC_WCAP_FORMAT_OVRD) ? 1 : 0,
2657 *formatsp = formats;
2666 * snd_hda_is_supported_format - check whether the given node supports
2669 * Returns 1 if supported, 0 if not.
2671 int snd_hda_is_supported_format(struct hda_codec *codec, hda_nid_t nid,
2672 unsigned int format)
2675 unsigned int val = 0, rate, stream;
2677 if (nid != codec->afg &&
2678 (get_wcaps(codec, nid) & AC_WCAP_FORMAT_OVRD)) {
2679 val = snd_hda_param_read(codec, nid, AC_PAR_PCM);
2684 val = snd_hda_param_read(codec, codec->afg, AC_PAR_PCM);
2689 rate = format & 0xff00;
2690 for (i = 0; i < AC_PAR_PCM_RATE_BITS; i++)
2691 if (rate_bits[i].hda_fmt == rate) {
2696 if (i >= AC_PAR_PCM_RATE_BITS)
2699 stream = snd_hda_param_read(codec, nid, AC_PAR_STREAM);
2702 if (!stream && nid != codec->afg)
2703 stream = snd_hda_param_read(codec, codec->afg, AC_PAR_STREAM);
2704 if (!stream || stream == -1)
2707 if (stream & AC_SUPFMT_PCM) {
2708 switch (format & 0xf0) {
2710 if (!(val & AC_SUPPCM_BITS_8))
2714 if (!(val & AC_SUPPCM_BITS_16))
2718 if (!(val & AC_SUPPCM_BITS_20))
2722 if (!(val & AC_SUPPCM_BITS_24))
2726 if (!(val & AC_SUPPCM_BITS_32))
2733 /* FIXME: check for float32 and AC3? */
2738 EXPORT_SYMBOL_HDA(snd_hda_is_supported_format);
2743 static int hda_pcm_default_open_close(struct hda_pcm_stream *hinfo,
2744 struct hda_codec *codec,
2745 struct snd_pcm_substream *substream)
2750 static int hda_pcm_default_prepare(struct hda_pcm_stream *hinfo,
2751 struct hda_codec *codec,
2752 unsigned int stream_tag,
2753 unsigned int format,
2754 struct snd_pcm_substream *substream)
2756 snd_hda_codec_setup_stream(codec, hinfo->nid, stream_tag, 0, format);
2760 static int hda_pcm_default_cleanup(struct hda_pcm_stream *hinfo,
2761 struct hda_codec *codec,
2762 struct snd_pcm_substream *substream)
2764 snd_hda_codec_cleanup_stream(codec, hinfo->nid);
2768 static int set_pcm_default_values(struct hda_codec *codec,
2769 struct hda_pcm_stream *info)
2773 /* query support PCM information from the given NID */
2774 if (info->nid && (!info->rates || !info->formats)) {
2775 err = snd_hda_query_supported_pcm(codec, info->nid,
2776 info->rates ? NULL : &info->rates,
2777 info->formats ? NULL : &info->formats,
2778 info->maxbps ? NULL : &info->maxbps);
2782 if (info->ops.open == NULL)
2783 info->ops.open = hda_pcm_default_open_close;
2784 if (info->ops.close == NULL)
2785 info->ops.close = hda_pcm_default_open_close;
2786 if (info->ops.prepare == NULL) {
2787 if (snd_BUG_ON(!info->nid))
2789 info->ops.prepare = hda_pcm_default_prepare;
2791 if (info->ops.cleanup == NULL) {
2792 if (snd_BUG_ON(!info->nid))
2794 info->ops.cleanup = hda_pcm_default_cleanup;
2800 * get the empty PCM device number to assign
2802 static int get_empty_pcm_device(struct hda_bus *bus, int type)
2804 static const char *dev_name[HDA_PCM_NTYPES] = {
2805 "Audio", "SPDIF", "HDMI", "Modem"
2807 /* starting device index for each PCM type */
2808 static int dev_idx[HDA_PCM_NTYPES] = {
2809 [HDA_PCM_TYPE_AUDIO] = 0,
2810 [HDA_PCM_TYPE_SPDIF] = 1,
2811 [HDA_PCM_TYPE_HDMI] = 3,
2812 [HDA_PCM_TYPE_MODEM] = 6
2814 /* normal audio device indices; not linear to keep compatibility */
2815 static int audio_idx[4] = { 0, 2, 4, 5 };
2819 case HDA_PCM_TYPE_AUDIO:
2820 for (i = 0; i < ARRAY_SIZE(audio_idx); i++) {
2822 if (!test_bit(dev, bus->pcm_dev_bits))
2825 snd_printk(KERN_WARNING "Too many audio devices\n");
2827 case HDA_PCM_TYPE_SPDIF:
2828 case HDA_PCM_TYPE_HDMI:
2829 case HDA_PCM_TYPE_MODEM:
2830 dev = dev_idx[type];
2831 if (test_bit(dev, bus->pcm_dev_bits)) {
2832 snd_printk(KERN_WARNING "%s already defined\n",
2838 snd_printk(KERN_WARNING "Invalid PCM type %d\n", type);
2842 set_bit(dev, bus->pcm_dev_bits);
2847 * attach a new PCM stream
2849 static int snd_hda_attach_pcm(struct hda_codec *codec, struct hda_pcm *pcm)
2851 struct hda_bus *bus = codec->bus;
2852 struct hda_pcm_stream *info;
2855 if (snd_BUG_ON(!pcm->name))
2857 for (stream = 0; stream < 2; stream++) {
2858 info = &pcm->stream[stream];
2859 if (info->substreams) {
2860 err = set_pcm_default_values(codec, info);
2865 return bus->ops.attach_pcm(bus, codec, pcm);
2868 /* assign all PCMs of the given codec */
2869 int snd_hda_codec_build_pcms(struct hda_codec *codec)
2874 if (!codec->num_pcms) {
2875 if (!codec->patch_ops.build_pcms)
2877 err = codec->patch_ops.build_pcms(codec);
2879 printk(KERN_ERR "hda_codec: cannot build PCMs"
2880 "for #%d (error %d)\n", codec->addr, err);
2881 err = snd_hda_codec_reset(codec);
2884 "hda_codec: cannot revert codec\n");
2889 for (pcm = 0; pcm < codec->num_pcms; pcm++) {
2890 struct hda_pcm *cpcm = &codec->pcm_info[pcm];
2893 if (!cpcm->stream[0].substreams && !cpcm->stream[1].substreams)
2894 continue; /* no substreams assigned */
2897 dev = get_empty_pcm_device(codec->bus, cpcm->pcm_type);
2899 continue; /* no fatal error */
2901 err = snd_hda_attach_pcm(codec, cpcm);
2903 printk(KERN_ERR "hda_codec: cannot attach "
2904 "PCM stream %d for codec #%d\n",
2906 continue; /* no fatal error */
2914 * snd_hda_build_pcms - build PCM information
2917 * Create PCM information for each codec included in the bus.
2919 * The build_pcms codec patch is requested to set up codec->num_pcms and
2920 * codec->pcm_info properly. The array is referred by the top-level driver
2921 * to create its PCM instances.
2922 * The allocated codec->pcm_info should be released in codec->patch_ops.free
2925 * At least, substreams, channels_min and channels_max must be filled for
2926 * each stream. substreams = 0 indicates that the stream doesn't exist.
2927 * When rates and/or formats are zero, the supported values are queried
2928 * from the given nid. The nid is used also by the default ops.prepare
2929 * and ops.cleanup callbacks.
2931 * The driver needs to call ops.open in its open callback. Similarly,
2932 * ops.close is supposed to be called in the close callback.
2933 * ops.prepare should be called in the prepare or hw_params callback
2934 * with the proper parameters for set up.
2935 * ops.cleanup should be called in hw_free for clean up of streams.
2937 * This function returns 0 if successfull, or a negative error code.
2939 int __devinit snd_hda_build_pcms(struct hda_bus *bus)
2941 struct hda_codec *codec;
2943 list_for_each_entry(codec, &bus->codec_list, list) {
2944 int err = snd_hda_codec_build_pcms(codec);
2950 EXPORT_SYMBOL_HDA(snd_hda_build_pcms);
2953 * snd_hda_check_board_config - compare the current codec with the config table
2954 * @codec: the HDA codec
2955 * @num_configs: number of config enums
2956 * @models: array of model name strings
2957 * @tbl: configuration table, terminated by null entries
2959 * Compares the modelname or PCI subsystem id of the current codec with the
2960 * given configuration table. If a matching entry is found, returns its
2961 * config value (supposed to be 0 or positive).
2963 * If no entries are matching, the function returns a negative value.
2965 int snd_hda_check_board_config(struct hda_codec *codec,
2966 int num_configs, const char **models,
2967 const struct snd_pci_quirk *tbl)
2969 if (codec->modelname && models) {
2971 for (i = 0; i < num_configs; i++) {
2973 !strcmp(codec->modelname, models[i])) {
2974 snd_printd(KERN_INFO "hda_codec: model '%s' is "
2975 "selected\n", models[i]);
2981 if (!codec->bus->pci || !tbl)
2984 tbl = snd_pci_quirk_lookup(codec->bus->pci, tbl);
2987 if (tbl->value >= 0 && tbl->value < num_configs) {
2988 #ifdef CONFIG_SND_DEBUG_VERBOSE
2990 const char *model = NULL;
2992 model = models[tbl->value];
2994 sprintf(tmp, "#%d", tbl->value);
2997 snd_printdd(KERN_INFO "hda_codec: model '%s' is selected "
2998 "for config %x:%x (%s)\n",
2999 model, tbl->subvendor, tbl->subdevice,
3000 (tbl->name ? tbl->name : "Unknown device"));
3006 EXPORT_SYMBOL_HDA(snd_hda_check_board_config);
3009 * snd_hda_check_board_codec_sid_config - compare the current codec
3010 subsystem ID with the
3013 This is important for Gateway notebooks with SB450 HDA Audio
3014 where the vendor ID of the PCI device is:
3015 ATI Technologies Inc SB450 HDA Audio [1002:437b]
3016 and the vendor/subvendor are found only at the codec.
3018 * @codec: the HDA codec
3019 * @num_configs: number of config enums
3020 * @models: array of model name strings
3021 * @tbl: configuration table, terminated by null entries
3023 * Compares the modelname or PCI subsystem id of the current codec with the
3024 * given configuration table. If a matching entry is found, returns its
3025 * config value (supposed to be 0 or positive).
3027 * If no entries are matching, the function returns a negative value.
3029 int snd_hda_check_board_codec_sid_config(struct hda_codec *codec,
3030 int num_configs, const char **models,
3031 const struct snd_pci_quirk *tbl)
3033 const struct snd_pci_quirk *q;
3035 /* Search for codec ID */
3036 for (q = tbl; q->subvendor; q++) {
3037 unsigned long vendorid = (q->subdevice) | (q->subvendor << 16);
3039 if (vendorid == codec->subsystem_id)
3048 if (tbl->value >= 0 && tbl->value < num_configs) {
3049 #ifdef CONFIG_SND_DEBUG_DETECT
3051 const char *model = NULL;
3053 model = models[tbl->value];
3055 sprintf(tmp, "#%d", tbl->value);
3058 snd_printdd(KERN_INFO "hda_codec: model '%s' is selected "
3059 "for config %x:%x (%s)\n",
3060 model, tbl->subvendor, tbl->subdevice,
3061 (tbl->name ? tbl->name : "Unknown device"));
3067 EXPORT_SYMBOL_HDA(snd_hda_check_board_codec_sid_config);
3070 * snd_hda_add_new_ctls - create controls from the array
3071 * @codec: the HDA codec
3072 * @knew: the array of struct snd_kcontrol_new
3074 * This helper function creates and add new controls in the given array.
3075 * The array must be terminated with an empty entry as terminator.
3077 * Returns 0 if successful, or a negative error code.
3079 int snd_hda_add_new_ctls(struct hda_codec *codec, struct snd_kcontrol_new *knew)
3083 for (; knew->name; knew++) {
3084 struct snd_kcontrol *kctl;
3085 kctl = snd_ctl_new1(knew, codec);
3088 err = snd_hda_ctl_add(codec, kctl);
3092 kctl = snd_ctl_new1(knew, codec);
3095 kctl->id.device = codec->addr;
3096 err = snd_hda_ctl_add(codec, kctl);
3103 EXPORT_SYMBOL_HDA(snd_hda_add_new_ctls);
3105 #ifdef CONFIG_SND_HDA_POWER_SAVE
3106 static void hda_set_power_state(struct hda_codec *codec, hda_nid_t fg,
3107 unsigned int power_state);
3109 static void hda_power_work(struct work_struct *work)
3111 struct hda_codec *codec =
3112 container_of(work, struct hda_codec, power_work.work);
3113 struct hda_bus *bus = codec->bus;
3115 if (!codec->power_on || codec->power_count) {
3116 codec->power_transition = 0;
3120 hda_call_codec_suspend(codec);
3121 if (bus->ops.pm_notify)
3122 bus->ops.pm_notify(bus);
3125 static void hda_keep_power_on(struct hda_codec *codec)
3127 codec->power_count++;
3128 codec->power_on = 1;
3131 void snd_hda_power_up(struct hda_codec *codec)
3133 struct hda_bus *bus = codec->bus;
3135 codec->power_count++;
3136 if (codec->power_on || codec->power_transition)
3139 codec->power_on = 1;
3140 if (bus->ops.pm_notify)
3141 bus->ops.pm_notify(bus);
3142 hda_call_codec_resume(codec);
3143 cancel_delayed_work(&codec->power_work);
3144 codec->power_transition = 0;
3146 EXPORT_SYMBOL_HDA(snd_hda_power_up);
3148 #define power_save(codec) \
3149 ((codec)->bus->power_save ? *(codec)->bus->power_save : 0)
3151 #define power_save(codec) \
3152 ((codec)->bus->power_save ? *(codec)->bus->power_save : 0)
3154 void snd_hda_power_down(struct hda_codec *codec)
3156 --codec->power_count;
3157 if (!codec->power_on || codec->power_count || codec->power_transition)
3159 if (power_save(codec)) {
3160 codec->power_transition = 1; /* avoid reentrance */
3161 queue_delayed_work(codec->bus->workq, &codec->power_work,
3162 msecs_to_jiffies(power_save(codec) * 1000));
3165 EXPORT_SYMBOL_HDA(snd_hda_power_down);
3167 int snd_hda_check_amp_list_power(struct hda_codec *codec,
3168 struct hda_loopback_check *check,
3171 struct hda_amp_list *p;
3174 if (!check->amplist)
3176 for (p = check->amplist; p->nid; p++) {
3181 return 0; /* nothing changed */
3183 for (p = check->amplist; p->nid; p++) {
3184 for (ch = 0; ch < 2; ch++) {
3185 v = snd_hda_codec_amp_read(codec, p->nid, ch, p->dir,
3187 if (!(v & HDA_AMP_MUTE) && v > 0) {
3188 if (!check->power_on) {
3189 check->power_on = 1;
3190 snd_hda_power_up(codec);
3196 if (check->power_on) {
3197 check->power_on = 0;
3198 snd_hda_power_down(codec);
3202 EXPORT_SYMBOL_HDA(snd_hda_check_amp_list_power);
3206 * Channel mode helper
3208 int snd_hda_ch_mode_info(struct hda_codec *codec,
3209 struct snd_ctl_elem_info *uinfo,
3210 const struct hda_channel_mode *chmode,
3213 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
3215 uinfo->value.enumerated.items = num_chmodes;
3216 if (uinfo->value.enumerated.item >= num_chmodes)
3217 uinfo->value.enumerated.item = num_chmodes - 1;
3218 sprintf(uinfo->value.enumerated.name, "%dch",
3219 chmode[uinfo->value.enumerated.item].channels);
3222 EXPORT_SYMBOL_HDA(snd_hda_ch_mode_info);
3224 int snd_hda_ch_mode_get(struct hda_codec *codec,
3225 struct snd_ctl_elem_value *ucontrol,
3226 const struct hda_channel_mode *chmode,
3232 for (i = 0; i < num_chmodes; i++) {
3233 if (max_channels == chmode[i].channels) {
3234 ucontrol->value.enumerated.item[0] = i;
3240 EXPORT_SYMBOL_HDA(snd_hda_ch_mode_get);
3242 int snd_hda_ch_mode_put(struct hda_codec *codec,
3243 struct snd_ctl_elem_value *ucontrol,
3244 const struct hda_channel_mode *chmode,
3250 mode = ucontrol->value.enumerated.item[0];
3251 if (mode >= num_chmodes)
3253 if (*max_channelsp == chmode[mode].channels)
3255 /* change the current channel setting */
3256 *max_channelsp = chmode[mode].channels;
3257 if (chmode[mode].sequence)
3258 snd_hda_sequence_write_cache(codec, chmode[mode].sequence);
3261 EXPORT_SYMBOL_HDA(snd_hda_ch_mode_put);
3266 int snd_hda_input_mux_info(const struct hda_input_mux *imux,
3267 struct snd_ctl_elem_info *uinfo)
3271 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
3273 uinfo->value.enumerated.items = imux->num_items;
3274 if (!imux->num_items)
3276 index = uinfo->value.enumerated.item;
3277 if (index >= imux->num_items)
3278 index = imux->num_items - 1;
3279 strcpy(uinfo->value.enumerated.name, imux->items[index].label);
3282 EXPORT_SYMBOL_HDA(snd_hda_input_mux_info);
3284 int snd_hda_input_mux_put(struct hda_codec *codec,
3285 const struct hda_input_mux *imux,
3286 struct snd_ctl_elem_value *ucontrol,
3288 unsigned int *cur_val)
3292 if (!imux->num_items)
3294 idx = ucontrol->value.enumerated.item[0];
3295 if (idx >= imux->num_items)
3296 idx = imux->num_items - 1;
3297 if (*cur_val == idx)
3299 snd_hda_codec_write_cache(codec, nid, 0, AC_VERB_SET_CONNECT_SEL,
3300 imux->items[idx].index);
3304 EXPORT_SYMBOL_HDA(snd_hda_input_mux_put);
3308 * Multi-channel / digital-out PCM helper functions
3311 /* setup SPDIF output stream */
3312 static void setup_dig_out_stream(struct hda_codec *codec, hda_nid_t nid,
3313 unsigned int stream_tag, unsigned int format)
3315 /* turn off SPDIF once; otherwise the IEC958 bits won't be updated */
3316 if (codec->spdif_status_reset && (codec->spdif_ctls & AC_DIG1_ENABLE))
3317 set_dig_out_convert(codec, nid,
3318 codec->spdif_ctls & ~AC_DIG1_ENABLE & 0xff,
3320 snd_hda_codec_setup_stream(codec, nid, stream_tag, 0, format);
3321 if (codec->slave_dig_outs) {
3323 for (d = codec->slave_dig_outs; *d; d++)
3324 snd_hda_codec_setup_stream(codec, *d, stream_tag, 0,
3327 /* turn on again (if needed) */
3328 if (codec->spdif_status_reset && (codec->spdif_ctls & AC_DIG1_ENABLE))
3329 set_dig_out_convert(codec, nid,
3330 codec->spdif_ctls & 0xff, -1);
3333 static void cleanup_dig_out_stream(struct hda_codec *codec, hda_nid_t nid)
3335 snd_hda_codec_cleanup_stream(codec, nid);
3336 if (codec->slave_dig_outs) {
3338 for (d = codec->slave_dig_outs; *d; d++)
3339 snd_hda_codec_cleanup_stream(codec, *d);
3344 * open the digital out in the exclusive mode
3346 int snd_hda_multi_out_dig_open(struct hda_codec *codec,
3347 struct hda_multi_out *mout)
3349 mutex_lock(&codec->spdif_mutex);
3350 if (mout->dig_out_used == HDA_DIG_ANALOG_DUP)
3351 /* already opened as analog dup; reset it once */
3352 cleanup_dig_out_stream(codec, mout->dig_out_nid);
3353 mout->dig_out_used = HDA_DIG_EXCLUSIVE;
3354 mutex_unlock(&codec->spdif_mutex);
3357 EXPORT_SYMBOL_HDA(snd_hda_multi_out_dig_open);
3359 int snd_hda_multi_out_dig_prepare(struct hda_codec *codec,
3360 struct hda_multi_out *mout,
3361 unsigned int stream_tag,
3362 unsigned int format,
3363 struct snd_pcm_substream *substream)
3365 mutex_lock(&codec->spdif_mutex);
3366 setup_dig_out_stream(codec, mout->dig_out_nid, stream_tag, format);
3367 mutex_unlock(&codec->spdif_mutex);
3370 EXPORT_SYMBOL_HDA(snd_hda_multi_out_dig_prepare);
3372 int snd_hda_multi_out_dig_cleanup(struct hda_codec *codec,
3373 struct hda_multi_out *mout)
3375 mutex_lock(&codec->spdif_mutex);
3376 cleanup_dig_out_stream(codec, mout->dig_out_nid);
3377 mutex_unlock(&codec->spdif_mutex);
3380 EXPORT_SYMBOL_HDA(snd_hda_multi_out_dig_cleanup);
3383 * release the digital out
3385 int snd_hda_multi_out_dig_close(struct hda_codec *codec,
3386 struct hda_multi_out *mout)
3388 mutex_lock(&codec->spdif_mutex);
3389 mout->dig_out_used = 0;
3390 mutex_unlock(&codec->spdif_mutex);
3393 EXPORT_SYMBOL_HDA(snd_hda_multi_out_dig_close);
3396 * set up more restrictions for analog out
3398 int snd_hda_multi_out_analog_open(struct hda_codec *codec,
3399 struct hda_multi_out *mout,
3400 struct snd_pcm_substream *substream,
3401 struct hda_pcm_stream *hinfo)
3403 struct snd_pcm_runtime *runtime = substream->runtime;
3404 runtime->hw.channels_max = mout->max_channels;
3405 if (mout->dig_out_nid) {
3406 if (!mout->analog_rates) {
3407 mout->analog_rates = hinfo->rates;
3408 mout->analog_formats = hinfo->formats;
3409 mout->analog_maxbps = hinfo->maxbps;
3411 runtime->hw.rates = mout->analog_rates;
3412 runtime->hw.formats = mout->analog_formats;
3413 hinfo->maxbps = mout->analog_maxbps;
3415 if (!mout->spdif_rates) {
3416 snd_hda_query_supported_pcm(codec, mout->dig_out_nid,
3418 &mout->spdif_formats,
3419 &mout->spdif_maxbps);
3421 mutex_lock(&codec->spdif_mutex);
3422 if (mout->share_spdif) {
3423 runtime->hw.rates &= mout->spdif_rates;
3424 runtime->hw.formats &= mout->spdif_formats;
3425 if (mout->spdif_maxbps < hinfo->maxbps)
3426 hinfo->maxbps = mout->spdif_maxbps;
3428 mutex_unlock(&codec->spdif_mutex);
3430 return snd_pcm_hw_constraint_step(substream->runtime, 0,
3431 SNDRV_PCM_HW_PARAM_CHANNELS, 2);
3433 EXPORT_SYMBOL_HDA(snd_hda_multi_out_analog_open);
3436 * set up the i/o for analog out
3437 * when the digital out is available, copy the front out to digital out, too.
3439 int snd_hda_multi_out_analog_prepare(struct hda_codec *codec,
3440 struct hda_multi_out *mout,
3441 unsigned int stream_tag,
3442 unsigned int format,
3443 struct snd_pcm_substream *substream)
3445 hda_nid_t *nids = mout->dac_nids;
3446 int chs = substream->runtime->channels;
3449 mutex_lock(&codec->spdif_mutex);
3450 if (mout->dig_out_nid && mout->share_spdif &&
3451 mout->dig_out_used != HDA_DIG_EXCLUSIVE) {
3453 snd_hda_is_supported_format(codec, mout->dig_out_nid,
3455 !(codec->spdif_status & IEC958_AES0_NONAUDIO)) {
3456 mout->dig_out_used = HDA_DIG_ANALOG_DUP;
3457 setup_dig_out_stream(codec, mout->dig_out_nid,
3458 stream_tag, format);
3460 mout->dig_out_used = 0;
3461 cleanup_dig_out_stream(codec, mout->dig_out_nid);
3464 mutex_unlock(&codec->spdif_mutex);
3467 snd_hda_codec_setup_stream(codec, nids[HDA_FRONT], stream_tag,
3469 if (!mout->no_share_stream &&
3470 mout->hp_nid && mout->hp_nid != nids[HDA_FRONT])
3471 /* headphone out will just decode front left/right (stereo) */
3472 snd_hda_codec_setup_stream(codec, mout->hp_nid, stream_tag,
3474 /* extra outputs copied from front */
3475 for (i = 0; i < ARRAY_SIZE(mout->extra_out_nid); i++)
3476 if (!mout->no_share_stream && mout->extra_out_nid[i])
3477 snd_hda_codec_setup_stream(codec,
3478 mout->extra_out_nid[i],
3479 stream_tag, 0, format);
3482 for (i = 1; i < mout->num_dacs; i++) {
3483 if (chs >= (i + 1) * 2) /* independent out */
3484 snd_hda_codec_setup_stream(codec, nids[i], stream_tag,
3486 else if (!mout->no_share_stream) /* copy front */
3487 snd_hda_codec_setup_stream(codec, nids[i], stream_tag,
3492 EXPORT_SYMBOL_HDA(snd_hda_multi_out_analog_prepare);
3495 * clean up the setting for analog out
3497 int snd_hda_multi_out_analog_cleanup(struct hda_codec *codec,
3498 struct hda_multi_out *mout)
3500 hda_nid_t *nids = mout->dac_nids;
3503 for (i = 0; i < mout->num_dacs; i++)
3504 snd_hda_codec_cleanup_stream(codec, nids[i]);
3506 snd_hda_codec_cleanup_stream(codec, mout->hp_nid);
3507 for (i = 0; i < ARRAY_SIZE(mout->extra_out_nid); i++)
3508 if (mout->extra_out_nid[i])
3509 snd_hda_codec_cleanup_stream(codec,
3510 mout->extra_out_nid[i]);
3511 mutex_lock(&codec->spdif_mutex);
3512 if (mout->dig_out_nid && mout->dig_out_used == HDA_DIG_ANALOG_DUP) {
3513 cleanup_dig_out_stream(codec, mout->dig_out_nid);
3514 mout->dig_out_used = 0;
3516 mutex_unlock(&codec->spdif_mutex);
3519 EXPORT_SYMBOL_HDA(snd_hda_multi_out_analog_cleanup);
3522 * Helper for automatic pin configuration
3525 static int is_in_nid_list(hda_nid_t nid, hda_nid_t *list)
3527 for (; *list; list++)
3535 * Sort an associated group of pins according to their sequence numbers.
3537 static void sort_pins_by_sequence(hda_nid_t * pins, short * sequences,
3544 for (i = 0; i < num_pins; i++) {
3545 for (j = i + 1; j < num_pins; j++) {
3546 if (sequences[i] > sequences[j]) {
3548 sequences[i] = sequences[j];
3560 * Parse all pin widgets and store the useful pin nids to cfg
3562 * The number of line-outs or any primary output is stored in line_outs,
3563 * and the corresponding output pins are assigned to line_out_pins[],
3564 * in the order of front, rear, CLFE, side, ...
3566 * If more extra outputs (speaker and headphone) are found, the pins are
3567 * assisnged to hp_pins[] and speaker_pins[], respectively. If no line-out jack
3568 * is detected, one of speaker of HP pins is assigned as the primary
3569 * output, i.e. to line_out_pins[0]. So, line_outs is always positive
3570 * if any analog output exists.
3572 * The analog input pins are assigned to input_pins array.
3573 * The digital input/output pins are assigned to dig_in_pin and dig_out_pin,
3576 int snd_hda_parse_pin_def_config(struct hda_codec *codec,
3577 struct auto_pin_cfg *cfg,
3578 hda_nid_t *ignore_nids)
3580 hda_nid_t nid, end_nid;
3581 short seq, assoc_line_out, assoc_speaker;
3582 short sequences_line_out[ARRAY_SIZE(cfg->line_out_pins)];
3583 short sequences_speaker[ARRAY_SIZE(cfg->speaker_pins)];
3584 short sequences_hp[ARRAY_SIZE(cfg->hp_pins)];
3586 memset(cfg, 0, sizeof(*cfg));
3588 memset(sequences_line_out, 0, sizeof(sequences_line_out));
3589 memset(sequences_speaker, 0, sizeof(sequences_speaker));
3590 memset(sequences_hp, 0, sizeof(sequences_hp));
3591 assoc_line_out = assoc_speaker = 0;
3593 end_nid = codec->start_nid + codec->num_nodes;
3594 for (nid = codec->start_nid; nid < end_nid; nid++) {
3595 unsigned int wid_caps = get_wcaps(codec, nid);
3596 unsigned int wid_type =
3597 (wid_caps & AC_WCAP_TYPE) >> AC_WCAP_TYPE_SHIFT;
3598 unsigned int def_conf;
3601 /* read all default configuration for pin complex */
3602 if (wid_type != AC_WID_PIN)
3604 /* ignore the given nids (e.g. pc-beep returns error) */
3605 if (ignore_nids && is_in_nid_list(nid, ignore_nids))
3608 def_conf = snd_hda_codec_get_pincfg(codec, nid);
3609 if (get_defcfg_connect(def_conf) == AC_JACK_PORT_NONE)
3611 loc = get_defcfg_location(def_conf);
3612 switch (get_defcfg_device(def_conf)) {
3613 case AC_JACK_LINE_OUT:
3614 seq = get_defcfg_sequence(def_conf);
3615 assoc = get_defcfg_association(def_conf);
3617 if (!(wid_caps & AC_WCAP_STEREO))
3618 if (!cfg->mono_out_pin)
3619 cfg->mono_out_pin = nid;
3622 if (!assoc_line_out)
3623 assoc_line_out = assoc;
3624 else if (assoc_line_out != assoc)
3626 if (cfg->line_outs >= ARRAY_SIZE(cfg->line_out_pins))
3628 cfg->line_out_pins[cfg->line_outs] = nid;
3629 sequences_line_out[cfg->line_outs] = seq;
3632 case AC_JACK_SPEAKER:
3633 seq = get_defcfg_sequence(def_conf);
3634 assoc = get_defcfg_association(def_conf);
3637 if (! assoc_speaker)
3638 assoc_speaker = assoc;
3639 else if (assoc_speaker != assoc)
3641 if (cfg->speaker_outs >= ARRAY_SIZE(cfg->speaker_pins))
3643 cfg->speaker_pins[cfg->speaker_outs] = nid;
3644 sequences_speaker[cfg->speaker_outs] = seq;
3645 cfg->speaker_outs++;
3647 case AC_JACK_HP_OUT:
3648 seq = get_defcfg_sequence(def_conf);
3649 assoc = get_defcfg_association(def_conf);
3650 if (cfg->hp_outs >= ARRAY_SIZE(cfg->hp_pins))
3652 cfg->hp_pins[cfg->hp_outs] = nid;
3653 sequences_hp[cfg->hp_outs] = (assoc << 4) | seq;
3656 case AC_JACK_MIC_IN: {
3658 if (loc == AC_JACK_LOC_FRONT) {
3659 preferred = AUTO_PIN_FRONT_MIC;
3662 preferred = AUTO_PIN_MIC;
3663 alt = AUTO_PIN_FRONT_MIC;
3665 if (!cfg->input_pins[preferred])
3666 cfg->input_pins[preferred] = nid;
3667 else if (!cfg->input_pins[alt])
3668 cfg->input_pins[alt] = nid;
3671 case AC_JACK_LINE_IN:
3672 if (loc == AC_JACK_LOC_FRONT)
3673 cfg->input_pins[AUTO_PIN_FRONT_LINE] = nid;
3675 cfg->input_pins[AUTO_PIN_LINE] = nid;
3678 cfg->input_pins[AUTO_PIN_CD] = nid;
3681 cfg->input_pins[AUTO_PIN_AUX] = nid;
3683 case AC_JACK_SPDIF_OUT:
3684 case AC_JACK_DIG_OTHER_OUT:
3685 if (cfg->dig_outs >= ARRAY_SIZE(cfg->dig_out_pins))
3687 cfg->dig_out_pins[cfg->dig_outs] = nid;
3688 cfg->dig_out_type[cfg->dig_outs] =
3689 (loc == AC_JACK_LOC_HDMI) ?
3690 HDA_PCM_TYPE_HDMI : HDA_PCM_TYPE_SPDIF;
3693 case AC_JACK_SPDIF_IN:
3694 case AC_JACK_DIG_OTHER_IN:
3695 cfg->dig_in_pin = nid;
3696 if (loc == AC_JACK_LOC_HDMI)
3697 cfg->dig_in_type = HDA_PCM_TYPE_HDMI;
3699 cfg->dig_in_type = HDA_PCM_TYPE_SPDIF;
3705 * If no line-out is defined but multiple HPs are found,
3706 * some of them might be the real line-outs.
3708 if (!cfg->line_outs && cfg->hp_outs > 1) {
3710 while (i < cfg->hp_outs) {
3711 /* The real HPs should have the sequence 0x0f */
3712 if ((sequences_hp[i] & 0x0f) == 0x0f) {
3716 /* Move it to the line-out table */
3717 cfg->line_out_pins[cfg->line_outs] = cfg->hp_pins[i];
3718 sequences_line_out[cfg->line_outs] = sequences_hp[i];
3721 memmove(cfg->hp_pins + i, cfg->hp_pins + i + 1,
3722 sizeof(cfg->hp_pins[0]) * (cfg->hp_outs - i));
3723 memmove(sequences_hp + i - 1, sequences_hp + i,
3724 sizeof(sequences_hp[0]) * (cfg->hp_outs - i));
3728 /* sort by sequence */
3729 sort_pins_by_sequence(cfg->line_out_pins, sequences_line_out,
3731 sort_pins_by_sequence(cfg->speaker_pins, sequences_speaker,
3733 sort_pins_by_sequence(cfg->hp_pins, sequences_hp,
3736 /* if we have only one mic, make it AUTO_PIN_MIC */
3737 if (!cfg->input_pins[AUTO_PIN_MIC] &&
3738 cfg->input_pins[AUTO_PIN_FRONT_MIC]) {
3739 cfg->input_pins[AUTO_PIN_MIC] =
3740 cfg->input_pins[AUTO_PIN_FRONT_MIC];
3741 cfg->input_pins[AUTO_PIN_FRONT_MIC] = 0;
3743 /* ditto for line-in */
3744 if (!cfg->input_pins[AUTO_PIN_LINE] &&
3745 cfg->input_pins[AUTO_PIN_FRONT_LINE]) {
3746 cfg->input_pins[AUTO_PIN_LINE] =
3747 cfg->input_pins[AUTO_PIN_FRONT_LINE];
3748 cfg->input_pins[AUTO_PIN_FRONT_LINE] = 0;
3752 * FIX-UP: if no line-outs are detected, try to use speaker or HP pin
3753 * as a primary output
3755 if (!cfg->line_outs) {
3756 if (cfg->speaker_outs) {
3757 cfg->line_outs = cfg->speaker_outs;
3758 memcpy(cfg->line_out_pins, cfg->speaker_pins,
3759 sizeof(cfg->speaker_pins));
3760 cfg->speaker_outs = 0;
3761 memset(cfg->speaker_pins, 0, sizeof(cfg->speaker_pins));
3762 cfg->line_out_type = AUTO_PIN_SPEAKER_OUT;
3763 } else if (cfg->hp_outs) {
3764 cfg->line_outs = cfg->hp_outs;
3765 memcpy(cfg->line_out_pins, cfg->hp_pins,
3766 sizeof(cfg->hp_pins));
3768 memset(cfg->hp_pins, 0, sizeof(cfg->hp_pins));
3769 cfg->line_out_type = AUTO_PIN_HP_OUT;
3773 /* Reorder the surround channels
3774 * ALSA sequence is front/surr/clfe/side
3776 * 4-ch: front/surr => OK as it is
3777 * 6-ch: front/clfe/surr
3778 * 8-ch: front/clfe/rear/side|fc
3780 switch (cfg->line_outs) {
3783 nid = cfg->line_out_pins[1];
3784 cfg->line_out_pins[1] = cfg->line_out_pins[2];
3785 cfg->line_out_pins[2] = nid;
3790 * debug prints of the parsed results
3792 snd_printd("autoconfig: line_outs=%d (0x%x/0x%x/0x%x/0x%x/0x%x)\n",
3793 cfg->line_outs, cfg->line_out_pins[0], cfg->line_out_pins[1],
3794 cfg->line_out_pins[2], cfg->line_out_pins[3],
3795 cfg->line_out_pins[4]);
3796 snd_printd(" speaker_outs=%d (0x%x/0x%x/0x%x/0x%x/0x%x)\n",
3797 cfg->speaker_outs, cfg->speaker_pins[0],
3798 cfg->speaker_pins[1], cfg->speaker_pins[2],
3799 cfg->speaker_pins[3], cfg->speaker_pins[4]);
3800 snd_printd(" hp_outs=%d (0x%x/0x%x/0x%x/0x%x/0x%x)\n",
3801 cfg->hp_outs, cfg->hp_pins[0],
3802 cfg->hp_pins[1], cfg->hp_pins[2],
3803 cfg->hp_pins[3], cfg->hp_pins[4]);
3804 snd_printd(" mono: mono_out=0x%x\n", cfg->mono_out_pin);
3806 snd_printd(" dig-out=0x%x/0x%x\n",
3807 cfg->dig_out_pins[0], cfg->dig_out_pins[1]);
3808 snd_printd(" inputs: mic=0x%x, fmic=0x%x, line=0x%x, fline=0x%x,"
3809 " cd=0x%x, aux=0x%x\n",
3810 cfg->input_pins[AUTO_PIN_MIC],
3811 cfg->input_pins[AUTO_PIN_FRONT_MIC],
3812 cfg->input_pins[AUTO_PIN_LINE],
3813 cfg->input_pins[AUTO_PIN_FRONT_LINE],
3814 cfg->input_pins[AUTO_PIN_CD],
3815 cfg->input_pins[AUTO_PIN_AUX]);
3816 if (cfg->dig_in_pin)
3817 snd_printd(" dig-in=0x%x\n", cfg->dig_in_pin);
3821 EXPORT_SYMBOL_HDA(snd_hda_parse_pin_def_config);
3823 /* labels for input pins */
3824 const char *auto_pin_cfg_labels[AUTO_PIN_LAST] = {
3825 "Mic", "Front Mic", "Line", "Front Line", "CD", "Aux"
3827 EXPORT_SYMBOL_HDA(auto_pin_cfg_labels);
3836 * snd_hda_suspend - suspend the codecs
3838 * @state: suspsend state
3840 * Returns 0 if successful.
3842 int snd_hda_suspend(struct hda_bus *bus, pm_message_t state)
3844 struct hda_codec *codec;
3846 list_for_each_entry(codec, &bus->codec_list, list) {
3847 #ifdef CONFIG_SND_HDA_POWER_SAVE
3848 if (!codec->power_on)
3851 hda_call_codec_suspend(codec);
3855 EXPORT_SYMBOL_HDA(snd_hda_suspend);
3858 * snd_hda_resume - resume the codecs
3861 * Returns 0 if successful.
3863 * This fucntion is defined only when POWER_SAVE isn't set.
3864 * In the power-save mode, the codec is resumed dynamically.
3866 int snd_hda_resume(struct hda_bus *bus)
3868 struct hda_codec *codec;
3870 list_for_each_entry(codec, &bus->codec_list, list) {
3871 if (snd_hda_codec_needs_resume(codec))
3872 hda_call_codec_resume(codec);
3876 EXPORT_SYMBOL_HDA(snd_hda_resume);
3877 #endif /* CONFIG_PM */
3883 /* get a new element from the given array
3884 * if it exceeds the pre-allocated array size, re-allocate the array
3886 void *snd_array_new(struct snd_array *array)
3888 if (array->used >= array->alloced) {
3889 int num = array->alloced + array->alloc_align;
3891 if (snd_BUG_ON(num >= 4096))
3893 nlist = kcalloc(num + 1, array->elem_size, GFP_KERNEL);
3897 memcpy(nlist, array->list,
3898 array->elem_size * array->alloced);
3901 array->list = nlist;
3902 array->alloced = num;
3904 return snd_array_elem(array, array->used++);
3906 EXPORT_SYMBOL_HDA(snd_array_new);
3908 /* free the given array elements */
3909 void snd_array_free(struct snd_array *array)
3916 EXPORT_SYMBOL_HDA(snd_array_free);
3919 * used by hda_proc.c and hda_eld.c
3921 void snd_print_pcm_rates(int pcm, char *buf, int buflen)
3923 static unsigned int rates[] = {
3924 8000, 11025, 16000, 22050, 32000, 44100, 48000, 88200,
3925 96000, 176400, 192000, 384000
3929 for (i = 0, j = 0; i < ARRAY_SIZE(rates); i++)
3931 j += snprintf(buf + j, buflen - j, " %d", rates[i]);
3933 buf[j] = '\0'; /* necessary when j == 0 */
3935 EXPORT_SYMBOL_HDA(snd_print_pcm_rates);
3937 void snd_print_pcm_bits(int pcm, char *buf, int buflen)
3939 static unsigned int bits[] = { 8, 16, 20, 24, 32 };
3942 for (i = 0, j = 0; i < ARRAY_SIZE(bits); i++)
3943 if (pcm & (AC_SUPPCM_BITS_8 << i))
3944 j += snprintf(buf + j, buflen - j, " %d", bits[i]);
3946 buf[j] = '\0'; /* necessary when j == 0 */
3948 EXPORT_SYMBOL_HDA(snd_print_pcm_bits);
3950 MODULE_DESCRIPTION("HDA codec core");
3951 MODULE_LICENSE("GPL");