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
23 #include <linux/init.h>
24 #include <linux/delay.h>
25 #include <linux/slab.h>
26 #include <linux/pci.h>
27 #include <linux/mutex.h>
28 #include <linux/module.h>
29 #include <sound/core.h>
30 #include "hda_codec.h"
31 #include <sound/asoundef.h>
32 #include <sound/tlv.h>
33 #include <sound/initval.h>
34 #include <sound/jack.h>
35 #include "hda_local.h"
38 #include <sound/hda_hwdep.h>
40 #define CREATE_TRACE_POINTS
41 #include "hda_trace.h"
44 * vendor / preset table
47 struct hda_vendor_id {
52 /* codec vendor labels */
53 static struct hda_vendor_id hda_vendor_ids[] = {
55 { 0x1013, "Cirrus Logic" },
56 { 0x1057, "Motorola" },
57 { 0x1095, "Silicon Image" },
59 { 0x10ec, "Realtek" },
60 { 0x1102, "Creative" },
64 { 0x11d4, "Analog Devices" },
65 { 0x13f6, "C-Media" },
66 { 0x14f1, "Conexant" },
67 { 0x17e8, "Chrontel" },
69 { 0x1aec, "Wolfson Microelectronics" },
70 { 0x434d, "C-Media" },
72 { 0x8384, "SigmaTel" },
76 static DEFINE_MUTEX(preset_mutex);
77 static LIST_HEAD(hda_preset_tables);
79 int snd_hda_add_codec_preset(struct hda_codec_preset_list *preset)
81 mutex_lock(&preset_mutex);
82 list_add_tail(&preset->list, &hda_preset_tables);
83 mutex_unlock(&preset_mutex);
86 EXPORT_SYMBOL_HDA(snd_hda_add_codec_preset);
88 int snd_hda_delete_codec_preset(struct hda_codec_preset_list *preset)
90 mutex_lock(&preset_mutex);
91 list_del(&preset->list);
92 mutex_unlock(&preset_mutex);
95 EXPORT_SYMBOL_HDA(snd_hda_delete_codec_preset);
98 #define codec_in_pm(codec) ((codec)->in_pm)
99 static void hda_power_work(struct work_struct *work);
100 static void hda_keep_power_on(struct hda_codec *codec);
101 #define hda_codec_is_power_on(codec) ((codec)->power_on)
102 static inline void hda_call_pm_notify(struct hda_bus *bus, bool power_up)
104 if (bus->ops.pm_notify)
105 bus->ops.pm_notify(bus, power_up);
108 #define codec_in_pm(codec) 0
109 static inline void hda_keep_power_on(struct hda_codec *codec) {}
110 #define hda_codec_is_power_on(codec) 1
111 #define hda_call_pm_notify(bus, state) {}
115 * snd_hda_get_jack_location - Give a location string of the jack
116 * @cfg: pin default config value
118 * Parse the pin default config value and returns the string of the
119 * jack location, e.g. "Rear", "Front", etc.
121 const char *snd_hda_get_jack_location(u32 cfg)
123 static char *bases[7] = {
124 "N/A", "Rear", "Front", "Left", "Right", "Top", "Bottom",
126 static unsigned char specials_idx[] = {
131 static char *specials[] = {
132 "Rear Panel", "Drive Bar",
133 "Riser", "HDMI", "ATAPI",
134 "Mobile-In", "Mobile-Out"
137 cfg = (cfg & AC_DEFCFG_LOCATION) >> AC_DEFCFG_LOCATION_SHIFT;
138 if ((cfg & 0x0f) < 7)
139 return bases[cfg & 0x0f];
140 for (i = 0; i < ARRAY_SIZE(specials_idx); i++) {
141 if (cfg == specials_idx[i])
146 EXPORT_SYMBOL_HDA(snd_hda_get_jack_location);
149 * snd_hda_get_jack_connectivity - Give a connectivity string of the jack
150 * @cfg: pin default config value
152 * Parse the pin default config value and returns the string of the
153 * jack connectivity, i.e. external or internal connection.
155 const char *snd_hda_get_jack_connectivity(u32 cfg)
157 static char *jack_locations[4] = { "Ext", "Int", "Sep", "Oth" };
159 return jack_locations[(cfg >> (AC_DEFCFG_LOCATION_SHIFT + 4)) & 3];
161 EXPORT_SYMBOL_HDA(snd_hda_get_jack_connectivity);
164 * snd_hda_get_jack_type - Give a type string of the jack
165 * @cfg: pin default config value
167 * Parse the pin default config value and returns the string of the
168 * jack type, i.e. the purpose of the jack, such as Line-Out or CD.
170 const char *snd_hda_get_jack_type(u32 cfg)
172 static char *jack_types[16] = {
173 "Line Out", "Speaker", "HP Out", "CD",
174 "SPDIF Out", "Digital Out", "Modem Line", "Modem Hand",
175 "Line In", "Aux", "Mic", "Telephony",
176 "SPDIF In", "Digitial In", "Reserved", "Other"
179 return jack_types[(cfg & AC_DEFCFG_DEVICE)
180 >> AC_DEFCFG_DEVICE_SHIFT];
182 EXPORT_SYMBOL_HDA(snd_hda_get_jack_type);
185 * Compose a 32bit command word to be sent to the HD-audio controller
187 static inline unsigned int
188 make_codec_cmd(struct hda_codec *codec, hda_nid_t nid, int direct,
189 unsigned int verb, unsigned int parm)
193 if ((codec->addr & ~0xf) || (direct & ~1) || (nid & ~0x7f) ||
194 (verb & ~0xfff) || (parm & ~0xffff)) {
195 printk(KERN_ERR "hda-codec: out of range cmd %x:%x:%x:%x:%x\n",
196 codec->addr, direct, nid, verb, parm);
200 val = (u32)codec->addr << 28;
201 val |= (u32)direct << 27;
202 val |= (u32)nid << 20;
209 * Send and receive a verb
211 static int codec_exec_verb(struct hda_codec *codec, unsigned int cmd,
214 struct hda_bus *bus = codec->bus;
223 snd_hda_power_up(codec);
224 mutex_lock(&bus->cmd_mutex);
226 trace_hda_send_cmd(codec, cmd);
227 err = bus->ops.command(bus, cmd);
230 /* process pending verbs */
231 bus->ops.get_response(bus, codec->addr);
234 *res = bus->ops.get_response(bus, codec->addr);
235 trace_hda_get_response(codec, *res);
237 mutex_unlock(&bus->cmd_mutex);
238 snd_hda_power_down(codec);
239 if (!codec_in_pm(codec) && res && *res == -1 && bus->rirb_error) {
240 if (bus->response_reset) {
241 snd_printd("hda_codec: resetting BUS due to "
242 "fatal communication error\n");
243 trace_hda_bus_reset(bus);
244 bus->ops.bus_reset(bus);
248 /* clear reset-flag when the communication gets recovered */
249 if (!err || codec_in_pm(codec))
250 bus->response_reset = 0;
255 * snd_hda_codec_read - send a command and get the response
256 * @codec: the HDA codec
257 * @nid: NID to send the command
258 * @direct: direct flag
259 * @verb: the verb to send
260 * @parm: the parameter for the verb
262 * Send a single command and read the corresponding response.
264 * Returns the obtained response value, or -1 for an error.
266 unsigned int snd_hda_codec_read(struct hda_codec *codec, hda_nid_t nid,
268 unsigned int verb, unsigned int parm)
270 unsigned cmd = make_codec_cmd(codec, nid, direct, verb, parm);
272 if (codec_exec_verb(codec, cmd, &res))
276 EXPORT_SYMBOL_HDA(snd_hda_codec_read);
279 * snd_hda_codec_write - send a single command without waiting for response
280 * @codec: the HDA codec
281 * @nid: NID to send the command
282 * @direct: direct flag
283 * @verb: the verb to send
284 * @parm: the parameter for the verb
286 * Send a single command without waiting for response.
288 * Returns 0 if successful, or a negative error code.
290 int snd_hda_codec_write(struct hda_codec *codec, hda_nid_t nid, int direct,
291 unsigned int verb, unsigned int parm)
293 unsigned int cmd = make_codec_cmd(codec, nid, direct, verb, parm);
295 return codec_exec_verb(codec, cmd,
296 codec->bus->sync_write ? &res : NULL);
298 EXPORT_SYMBOL_HDA(snd_hda_codec_write);
301 * snd_hda_sequence_write - sequence writes
302 * @codec: the HDA codec
303 * @seq: VERB array to send
305 * Send the commands sequentially from the given array.
306 * The array must be terminated with NID=0.
308 void snd_hda_sequence_write(struct hda_codec *codec, const struct hda_verb *seq)
310 for (; seq->nid; seq++)
311 snd_hda_codec_write(codec, seq->nid, 0, seq->verb, seq->param);
313 EXPORT_SYMBOL_HDA(snd_hda_sequence_write);
316 * snd_hda_get_sub_nodes - get the range of sub nodes
317 * @codec: the HDA codec
319 * @start_id: the pointer to store the start NID
321 * Parse the NID and store the start NID of its sub-nodes.
322 * Returns the number of sub-nodes.
324 int snd_hda_get_sub_nodes(struct hda_codec *codec, hda_nid_t nid,
329 parm = snd_hda_param_read(codec, nid, AC_PAR_NODE_COUNT);
332 *start_id = (parm >> 16) & 0x7fff;
333 return (int)(parm & 0x7fff);
335 EXPORT_SYMBOL_HDA(snd_hda_get_sub_nodes);
337 /* connection list element */
338 struct hda_conn_list {
339 struct list_head list;
345 /* look up the cached results */
346 static struct hda_conn_list *
347 lookup_conn_list(struct hda_codec *codec, hda_nid_t nid)
349 struct hda_conn_list *p;
350 list_for_each_entry(p, &codec->conn_list, list) {
357 static int add_conn_list(struct hda_codec *codec, hda_nid_t nid, int len,
358 const hda_nid_t *list)
360 struct hda_conn_list *p;
362 p = kmalloc(sizeof(*p) + len * sizeof(hda_nid_t), GFP_KERNEL);
367 memcpy(p->conns, list, len * sizeof(hda_nid_t));
368 list_add(&p->list, &codec->conn_list);
372 static void remove_conn_list(struct hda_codec *codec)
374 while (!list_empty(&codec->conn_list)) {
375 struct hda_conn_list *p;
376 p = list_first_entry(&codec->conn_list, typeof(*p), list);
382 /* read the connection and add to the cache */
383 static int read_and_add_raw_conns(struct hda_codec *codec, hda_nid_t nid)
386 hda_nid_t *result = list;
389 len = snd_hda_get_raw_connections(codec, nid, list, ARRAY_SIZE(list));
390 if (len == -ENOSPC) {
391 len = snd_hda_get_num_raw_conns(codec, nid);
392 result = kmalloc(sizeof(hda_nid_t) * len, GFP_KERNEL);
395 len = snd_hda_get_raw_connections(codec, nid, result, len);
398 len = snd_hda_override_conn_list(codec, nid, len, result);
405 * snd_hda_get_conn_list - get connection list
406 * @codec: the HDA codec
408 * @len: number of connection list entries
409 * @listp: the pointer to store NID list
411 * Parses the connection list of the given widget and stores the pointer
412 * to the list of NIDs.
414 * Returns the number of connections, or a negative error code.
416 * Note that the returned pointer isn't protected against the list
417 * modification. If snd_hda_override_conn_list() might be called
418 * concurrently, protect with a mutex appropriately.
420 int snd_hda_get_conn_list(struct hda_codec *codec, hda_nid_t nid,
421 const hda_nid_t **listp)
427 const struct hda_conn_list *p;
429 /* if the connection-list is already cached, read it */
430 p = lookup_conn_list(codec, nid);
436 if (snd_BUG_ON(added))
439 err = read_and_add_raw_conns(codec, nid);
445 EXPORT_SYMBOL_HDA(snd_hda_get_conn_list);
448 * snd_hda_get_connections - copy connection list
449 * @codec: the HDA codec
451 * @conn_list: connection list array; when NULL, checks only the size
452 * @max_conns: max. number of connections to store
454 * Parses the connection list of the given widget and stores the list
457 * Returns the number of connections, or a negative error code.
459 int snd_hda_get_connections(struct hda_codec *codec, hda_nid_t nid,
460 hda_nid_t *conn_list, int max_conns)
462 const hda_nid_t *list;
463 int len = snd_hda_get_conn_list(codec, nid, &list);
465 if (len > 0 && conn_list) {
466 if (len > max_conns) {
467 snd_printk(KERN_ERR "hda_codec: "
468 "Too many connections %d for NID 0x%x\n",
472 memcpy(conn_list, list, len * sizeof(hda_nid_t));
477 EXPORT_SYMBOL_HDA(snd_hda_get_connections);
479 /* return CONNLIST_LEN parameter of the given widget */
480 static unsigned int get_num_conns(struct hda_codec *codec, hda_nid_t nid)
482 unsigned int wcaps = get_wcaps(codec, nid);
485 if (!(wcaps & AC_WCAP_CONN_LIST) &&
486 get_wcaps_type(wcaps) != AC_WID_VOL_KNB)
489 parm = snd_hda_param_read(codec, nid, AC_PAR_CONNLIST_LEN);
495 int snd_hda_get_num_raw_conns(struct hda_codec *codec, hda_nid_t nid)
497 return snd_hda_get_raw_connections(codec, nid, NULL, 0);
501 * snd_hda_get_raw_connections - copy connection list without cache
502 * @codec: the HDA codec
504 * @conn_list: connection list array
505 * @max_conns: max. number of connections to store
507 * Like snd_hda_get_connections(), copy the connection list but without
508 * checking through the connection-list cache.
509 * Currently called only from hda_proc.c, so not exported.
511 int snd_hda_get_raw_connections(struct hda_codec *codec, hda_nid_t nid,
512 hda_nid_t *conn_list, int max_conns)
515 int i, conn_len, conns;
516 unsigned int shift, num_elems, mask;
520 parm = get_num_conns(codec, nid);
524 if (parm & AC_CLIST_LONG) {
533 conn_len = parm & AC_CLIST_LENGTH;
534 mask = (1 << (shift-1)) - 1;
537 return 0; /* no connection */
540 /* single connection */
541 parm = snd_hda_codec_read(codec, nid, 0,
542 AC_VERB_GET_CONNECT_LIST, 0);
543 if (parm == -1 && codec->bus->rirb_error)
546 conn_list[0] = parm & mask;
550 /* multi connection */
553 for (i = 0; i < conn_len; i++) {
557 if (i % num_elems == 0) {
558 parm = snd_hda_codec_read(codec, nid, 0,
559 AC_VERB_GET_CONNECT_LIST, i);
560 if (parm == -1 && codec->bus->rirb_error)
563 range_val = !!(parm & (1 << (shift-1))); /* ranges */
565 if (val == 0 && null_count++) { /* no second chance */
566 snd_printk(KERN_WARNING "hda_codec: "
567 "invalid CONNECT_LIST verb %x[%i]:%x\n",
573 /* ranges between the previous and this one */
574 if (!prev_nid || prev_nid >= val) {
575 snd_printk(KERN_WARNING "hda_codec: "
576 "invalid dep_range_val %x:%x\n",
580 for (n = prev_nid + 1; n <= val; n++) {
582 if (conns >= max_conns)
584 conn_list[conns] = n;
590 if (conns >= max_conns)
592 conn_list[conns] = val;
602 * snd_hda_override_conn_list - add/modify the connection-list to cache
603 * @codec: the HDA codec
605 * @len: number of connection list entries
606 * @list: the list of connection entries
608 * Add or modify the given connection-list to the cache. If the corresponding
609 * cache already exists, invalidate it and append a new one.
611 * Returns zero or a negative error code.
613 int snd_hda_override_conn_list(struct hda_codec *codec, hda_nid_t nid, int len,
614 const hda_nid_t *list)
616 struct hda_conn_list *p;
618 p = lookup_conn_list(codec, nid);
624 return add_conn_list(codec, nid, len, list);
626 EXPORT_SYMBOL_HDA(snd_hda_override_conn_list);
629 * snd_hda_get_conn_index - get the connection index of the given NID
630 * @codec: the HDA codec
631 * @mux: NID containing the list
632 * @nid: NID to select
633 * @recursive: 1 when searching NID recursively, otherwise 0
635 * Parses the connection list of the widget @mux and checks whether the
636 * widget @nid is present. If it is, return the connection index.
637 * Otherwise it returns -1.
639 int snd_hda_get_conn_index(struct hda_codec *codec, hda_nid_t mux,
640 hda_nid_t nid, int recursive)
642 const hda_nid_t *conn;
645 nums = snd_hda_get_conn_list(codec, mux, &conn);
646 for (i = 0; i < nums; i++)
651 if (recursive > 10) {
652 snd_printd("hda_codec: too deep connection for 0x%x\n", nid);
656 for (i = 0; i < nums; i++) {
657 unsigned int type = get_wcaps_type(get_wcaps(codec, conn[i]));
658 if (type == AC_WID_PIN || type == AC_WID_AUD_OUT)
660 if (snd_hda_get_conn_index(codec, conn[i], nid, recursive) >= 0)
665 EXPORT_SYMBOL_HDA(snd_hda_get_conn_index);
668 * snd_hda_queue_unsol_event - add an unsolicited event to queue
670 * @res: unsolicited event (lower 32bit of RIRB entry)
671 * @res_ex: codec addr and flags (upper 32bit or RIRB entry)
673 * Adds the given event to the queue. The events are processed in
674 * the workqueue asynchronously. Call this function in the interrupt
675 * hanlder when RIRB receives an unsolicited event.
677 * Returns 0 if successful, or a negative error code.
679 int snd_hda_queue_unsol_event(struct hda_bus *bus, u32 res, u32 res_ex)
681 struct hda_bus_unsolicited *unsol;
684 trace_hda_unsol_event(bus, res, res_ex);
689 wp = (unsol->wp + 1) % HDA_UNSOL_QUEUE_SIZE;
693 unsol->queue[wp] = res;
694 unsol->queue[wp + 1] = res_ex;
696 queue_work(bus->workq, &unsol->work);
700 EXPORT_SYMBOL_HDA(snd_hda_queue_unsol_event);
703 * process queued unsolicited events
705 static void process_unsol_events(struct work_struct *work)
707 struct hda_bus_unsolicited *unsol =
708 container_of(work, struct hda_bus_unsolicited, work);
709 struct hda_bus *bus = unsol->bus;
710 struct hda_codec *codec;
711 unsigned int rp, caddr, res;
713 while (unsol->rp != unsol->wp) {
714 rp = (unsol->rp + 1) % HDA_UNSOL_QUEUE_SIZE;
717 res = unsol->queue[rp];
718 caddr = unsol->queue[rp + 1];
719 if (!(caddr & (1 << 4))) /* no unsolicited event? */
721 codec = bus->caddr_tbl[caddr & 0x0f];
722 if (codec && codec->patch_ops.unsol_event)
723 codec->patch_ops.unsol_event(codec, res);
728 * initialize unsolicited queue
730 static int init_unsol_queue(struct hda_bus *bus)
732 struct hda_bus_unsolicited *unsol;
734 if (bus->unsol) /* already initialized */
737 unsol = kzalloc(sizeof(*unsol), GFP_KERNEL);
739 snd_printk(KERN_ERR "hda_codec: "
740 "can't allocate unsolicited queue\n");
743 INIT_WORK(&unsol->work, process_unsol_events);
752 static void snd_hda_codec_free(struct hda_codec *codec);
754 static int snd_hda_bus_free(struct hda_bus *bus)
756 struct hda_codec *codec, *n;
761 flush_workqueue(bus->workq);
764 list_for_each_entry_safe(codec, n, &bus->codec_list, list) {
765 snd_hda_codec_free(codec);
767 if (bus->ops.private_free)
768 bus->ops.private_free(bus);
770 destroy_workqueue(bus->workq);
775 static int snd_hda_bus_dev_free(struct snd_device *device)
777 struct hda_bus *bus = device->device_data;
779 return snd_hda_bus_free(bus);
782 #ifdef CONFIG_SND_HDA_HWDEP
783 static int snd_hda_bus_dev_register(struct snd_device *device)
785 struct hda_bus *bus = device->device_data;
786 struct hda_codec *codec;
787 list_for_each_entry(codec, &bus->codec_list, list) {
788 snd_hda_hwdep_add_sysfs(codec);
789 snd_hda_hwdep_add_power_sysfs(codec);
794 #define snd_hda_bus_dev_register NULL
798 * snd_hda_bus_new - create a HDA bus
799 * @card: the card entry
800 * @temp: the template for hda_bus information
801 * @busp: the pointer to store the created bus instance
803 * Returns 0 if successful, or a negative error code.
805 int snd_hda_bus_new(struct snd_card *card,
806 const struct hda_bus_template *temp,
807 struct hda_bus **busp)
811 static struct snd_device_ops dev_ops = {
812 .dev_register = snd_hda_bus_dev_register,
813 .dev_free = snd_hda_bus_dev_free,
816 if (snd_BUG_ON(!temp))
818 if (snd_BUG_ON(!temp->ops.command || !temp->ops.get_response))
824 bus = kzalloc(sizeof(*bus), GFP_KERNEL);
826 snd_printk(KERN_ERR "can't allocate struct hda_bus\n");
831 bus->private_data = temp->private_data;
832 bus->pci = temp->pci;
833 bus->modelname = temp->modelname;
834 bus->power_save = temp->power_save;
835 bus->ops = temp->ops;
837 mutex_init(&bus->cmd_mutex);
838 mutex_init(&bus->prepare_mutex);
839 INIT_LIST_HEAD(&bus->codec_list);
841 snprintf(bus->workq_name, sizeof(bus->workq_name),
842 "hd-audio%d", card->number);
843 bus->workq = create_singlethread_workqueue(bus->workq_name);
845 snd_printk(KERN_ERR "cannot create workqueue %s\n",
851 err = snd_device_new(card, SNDRV_DEV_BUS, bus, &dev_ops);
853 snd_hda_bus_free(bus);
860 EXPORT_SYMBOL_HDA(snd_hda_bus_new);
862 #ifdef CONFIG_SND_HDA_GENERIC
863 #define is_generic_config(codec) \
864 (codec->modelname && !strcmp(codec->modelname, "generic"))
866 #define is_generic_config(codec) 0
870 #define HDA_MODREQ_MAX_COUNT 2 /* two request_modules()'s */
872 #define HDA_MODREQ_MAX_COUNT 0 /* all presets are statically linked */
876 * find a matching codec preset
878 static const struct hda_codec_preset *
879 find_codec_preset(struct hda_codec *codec)
881 struct hda_codec_preset_list *tbl;
882 const struct hda_codec_preset *preset;
883 unsigned int mod_requested = 0;
885 if (is_generic_config(codec))
886 return NULL; /* use the generic parser */
889 mutex_lock(&preset_mutex);
890 list_for_each_entry(tbl, &hda_preset_tables, list) {
891 if (!try_module_get(tbl->owner)) {
892 snd_printk(KERN_ERR "hda_codec: cannot module_get\n");
895 for (preset = tbl->preset; preset->id; preset++) {
896 u32 mask = preset->mask;
897 if (preset->afg && preset->afg != codec->afg)
899 if (preset->mfg && preset->mfg != codec->mfg)
903 if (preset->id == (codec->vendor_id & mask) &&
905 preset->rev == codec->revision_id)) {
906 mutex_unlock(&preset_mutex);
907 codec->owner = tbl->owner;
911 module_put(tbl->owner);
913 mutex_unlock(&preset_mutex);
915 if (mod_requested < HDA_MODREQ_MAX_COUNT) {
918 snprintf(name, sizeof(name), "snd-hda-codec-id:%08x",
921 snprintf(name, sizeof(name), "snd-hda-codec-id:%04x*",
922 (codec->vendor_id >> 16) & 0xffff);
923 request_module(name);
931 * get_codec_name - store the codec name
933 static int get_codec_name(struct hda_codec *codec)
935 const struct hda_vendor_id *c;
936 const char *vendor = NULL;
937 u16 vendor_id = codec->vendor_id >> 16;
940 if (codec->vendor_name)
943 for (c = hda_vendor_ids; c->id; c++) {
944 if (c->id == vendor_id) {
950 sprintf(tmp, "Generic %04x", vendor_id);
953 codec->vendor_name = kstrdup(vendor, GFP_KERNEL);
954 if (!codec->vendor_name)
958 if (codec->chip_name)
961 if (codec->preset && codec->preset->name)
962 codec->chip_name = kstrdup(codec->preset->name, GFP_KERNEL);
964 sprintf(tmp, "ID %x", codec->vendor_id & 0xffff);
965 codec->chip_name = kstrdup(tmp, GFP_KERNEL);
967 if (!codec->chip_name)
973 * look for an AFG and MFG nodes
975 static void setup_fg_nodes(struct hda_codec *codec)
977 int i, total_nodes, function_id;
980 total_nodes = snd_hda_get_sub_nodes(codec, AC_NODE_ROOT, &nid);
981 for (i = 0; i < total_nodes; i++, nid++) {
982 function_id = snd_hda_param_read(codec, nid,
983 AC_PAR_FUNCTION_TYPE);
984 switch (function_id & 0xff) {
985 case AC_GRP_AUDIO_FUNCTION:
987 codec->afg_function_id = function_id & 0xff;
988 codec->afg_unsol = (function_id >> 8) & 1;
990 case AC_GRP_MODEM_FUNCTION:
992 codec->mfg_function_id = function_id & 0xff;
993 codec->mfg_unsol = (function_id >> 8) & 1;
1002 * read widget caps for each widget and store in cache
1004 static int read_widget_caps(struct hda_codec *codec, hda_nid_t fg_node)
1009 codec->num_nodes = snd_hda_get_sub_nodes(codec, fg_node,
1011 codec->wcaps = kmalloc(codec->num_nodes * 4, GFP_KERNEL);
1014 nid = codec->start_nid;
1015 for (i = 0; i < codec->num_nodes; i++, nid++)
1016 codec->wcaps[i] = snd_hda_param_read(codec, nid,
1017 AC_PAR_AUDIO_WIDGET_CAP);
1021 /* read all pin default configurations and save codec->init_pins */
1022 static int read_pin_defaults(struct hda_codec *codec)
1025 hda_nid_t nid = codec->start_nid;
1027 for (i = 0; i < codec->num_nodes; i++, nid++) {
1028 struct hda_pincfg *pin;
1029 unsigned int wcaps = get_wcaps(codec, nid);
1030 unsigned int wid_type = get_wcaps_type(wcaps);
1031 if (wid_type != AC_WID_PIN)
1033 pin = snd_array_new(&codec->init_pins);
1037 pin->cfg = snd_hda_codec_read(codec, nid, 0,
1038 AC_VERB_GET_CONFIG_DEFAULT, 0);
1039 pin->ctrl = snd_hda_codec_read(codec, nid, 0,
1040 AC_VERB_GET_PIN_WIDGET_CONTROL,
1046 /* look up the given pin config list and return the item matching with NID */
1047 static struct hda_pincfg *look_up_pincfg(struct hda_codec *codec,
1048 struct snd_array *array,
1052 for (i = 0; i < array->used; i++) {
1053 struct hda_pincfg *pin = snd_array_elem(array, i);
1054 if (pin->nid == nid)
1060 /* set the current pin config value for the given NID.
1061 * the value is cached, and read via snd_hda_codec_get_pincfg()
1063 int snd_hda_add_pincfg(struct hda_codec *codec, struct snd_array *list,
1064 hda_nid_t nid, unsigned int cfg)
1066 struct hda_pincfg *pin;
1068 if (get_wcaps_type(get_wcaps(codec, nid)) != AC_WID_PIN)
1071 pin = look_up_pincfg(codec, list, nid);
1073 pin = snd_array_new(list);
1083 * snd_hda_codec_set_pincfg - Override a pin default configuration
1084 * @codec: the HDA codec
1085 * @nid: NID to set the pin config
1086 * @cfg: the pin default config value
1088 * Override a pin default configuration value in the cache.
1089 * This value can be read by snd_hda_codec_get_pincfg() in a higher
1090 * priority than the real hardware value.
1092 int snd_hda_codec_set_pincfg(struct hda_codec *codec,
1093 hda_nid_t nid, unsigned int cfg)
1095 return snd_hda_add_pincfg(codec, &codec->driver_pins, nid, cfg);
1097 EXPORT_SYMBOL_HDA(snd_hda_codec_set_pincfg);
1100 * snd_hda_codec_get_pincfg - Obtain a pin-default configuration
1101 * @codec: the HDA codec
1102 * @nid: NID to get the pin config
1104 * Get the current pin config value of the given pin NID.
1105 * If the pincfg value is cached or overridden via sysfs or driver,
1106 * returns the cached value.
1108 unsigned int snd_hda_codec_get_pincfg(struct hda_codec *codec, hda_nid_t nid)
1110 struct hda_pincfg *pin;
1112 #ifdef CONFIG_SND_HDA_HWDEP
1114 unsigned int cfg = 0;
1115 mutex_lock(&codec->user_mutex);
1116 pin = look_up_pincfg(codec, &codec->user_pins, nid);
1119 mutex_unlock(&codec->user_mutex);
1124 pin = look_up_pincfg(codec, &codec->driver_pins, nid);
1127 pin = look_up_pincfg(codec, &codec->init_pins, nid);
1132 EXPORT_SYMBOL_HDA(snd_hda_codec_get_pincfg);
1134 /* remember the current pinctl target value */
1135 int snd_hda_codec_set_pin_target(struct hda_codec *codec, hda_nid_t nid,
1138 struct hda_pincfg *pin;
1140 pin = look_up_pincfg(codec, &codec->init_pins, nid);
1146 EXPORT_SYMBOL_HDA(snd_hda_codec_set_pin_target);
1148 /* return the current pinctl target value */
1149 int snd_hda_codec_get_pin_target(struct hda_codec *codec, hda_nid_t nid)
1151 struct hda_pincfg *pin;
1153 pin = look_up_pincfg(codec, &codec->init_pins, nid);
1158 EXPORT_SYMBOL_HDA(snd_hda_codec_get_pin_target);
1161 * snd_hda_shutup_pins - Shut up all pins
1162 * @codec: the HDA codec
1164 * Clear all pin controls to shup up before suspend for avoiding click noise.
1165 * The controls aren't cached so that they can be resumed properly.
1167 void snd_hda_shutup_pins(struct hda_codec *codec)
1170 /* don't shut up pins when unloading the driver; otherwise it breaks
1171 * the default pin setup at the next load of the driver
1173 if (codec->bus->shutdown)
1175 for (i = 0; i < codec->init_pins.used; i++) {
1176 struct hda_pincfg *pin = snd_array_elem(&codec->init_pins, i);
1177 /* use read here for syncing after issuing each verb */
1178 snd_hda_codec_read(codec, pin->nid, 0,
1179 AC_VERB_SET_PIN_WIDGET_CONTROL, 0);
1181 codec->pins_shutup = 1;
1183 EXPORT_SYMBOL_HDA(snd_hda_shutup_pins);
1186 /* Restore the pin controls cleared previously via snd_hda_shutup_pins() */
1187 static void restore_shutup_pins(struct hda_codec *codec)
1190 if (!codec->pins_shutup)
1192 if (codec->bus->shutdown)
1194 for (i = 0; i < codec->init_pins.used; i++) {
1195 struct hda_pincfg *pin = snd_array_elem(&codec->init_pins, i);
1196 snd_hda_codec_write(codec, pin->nid, 0,
1197 AC_VERB_SET_PIN_WIDGET_CONTROL,
1200 codec->pins_shutup = 0;
1204 static void hda_jackpoll_work(struct work_struct *work)
1206 struct hda_codec *codec =
1207 container_of(work, struct hda_codec, jackpoll_work.work);
1208 if (!codec->jackpoll_interval)
1211 snd_hda_jack_set_dirty_all(codec);
1212 snd_hda_jack_poll_all(codec);
1213 queue_delayed_work(codec->bus->workq, &codec->jackpoll_work,
1214 codec->jackpoll_interval);
1217 static void init_hda_cache(struct hda_cache_rec *cache,
1218 unsigned int record_size);
1219 static void free_hda_cache(struct hda_cache_rec *cache);
1221 /* release all pincfg lists */
1222 static void free_init_pincfgs(struct hda_codec *codec)
1224 snd_array_free(&codec->driver_pins);
1225 #ifdef CONFIG_SND_HDA_HWDEP
1226 snd_array_free(&codec->user_pins);
1228 snd_array_free(&codec->init_pins);
1232 * audio-converter setup caches
1234 struct hda_cvt_setup {
1239 unsigned char active; /* cvt is currently used */
1240 unsigned char dirty; /* setups should be cleared */
1243 /* get or create a cache entry for the given audio converter NID */
1244 static struct hda_cvt_setup *
1245 get_hda_cvt_setup(struct hda_codec *codec, hda_nid_t nid)
1247 struct hda_cvt_setup *p;
1250 for (i = 0; i < codec->cvt_setups.used; i++) {
1251 p = snd_array_elem(&codec->cvt_setups, i);
1255 p = snd_array_new(&codec->cvt_setups);
1264 static void snd_hda_codec_free(struct hda_codec *codec)
1268 cancel_delayed_work_sync(&codec->jackpoll_work);
1269 snd_hda_jack_tbl_clear(codec);
1270 free_init_pincfgs(codec);
1272 cancel_delayed_work(&codec->power_work);
1273 flush_workqueue(codec->bus->workq);
1275 list_del(&codec->list);
1276 snd_array_free(&codec->mixers);
1277 snd_array_free(&codec->nids);
1278 snd_array_free(&codec->cvt_setups);
1279 snd_array_free(&codec->spdif_out);
1280 remove_conn_list(codec);
1281 codec->bus->caddr_tbl[codec->addr] = NULL;
1282 if (codec->patch_ops.free)
1283 codec->patch_ops.free(codec);
1285 if (!codec->pm_down_notified) /* cancel leftover refcounts */
1286 hda_call_pm_notify(codec->bus, false);
1288 module_put(codec->owner);
1289 free_hda_cache(&codec->amp_cache);
1290 free_hda_cache(&codec->cmd_cache);
1291 kfree(codec->vendor_name);
1292 kfree(codec->chip_name);
1293 kfree(codec->modelname);
1294 kfree(codec->wcaps);
1298 static bool snd_hda_codec_get_supported_ps(struct hda_codec *codec,
1299 hda_nid_t fg, unsigned int power_state);
1301 static unsigned int hda_set_power_state(struct hda_codec *codec,
1302 unsigned int power_state);
1305 * snd_hda_codec_new - create a HDA codec
1306 * @bus: the bus to assign
1307 * @codec_addr: the codec address
1308 * @codecp: the pointer to store the generated codec
1310 * Returns 0 if successful, or a negative error code.
1312 int snd_hda_codec_new(struct hda_bus *bus,
1313 unsigned int codec_addr,
1314 struct hda_codec **codecp)
1316 struct hda_codec *codec;
1321 if (snd_BUG_ON(!bus))
1323 if (snd_BUG_ON(codec_addr > HDA_MAX_CODEC_ADDRESS))
1326 if (bus->caddr_tbl[codec_addr]) {
1327 snd_printk(KERN_ERR "hda_codec: "
1328 "address 0x%x is already occupied\n", codec_addr);
1332 codec = kzalloc(sizeof(*codec), GFP_KERNEL);
1333 if (codec == NULL) {
1334 snd_printk(KERN_ERR "can't allocate struct hda_codec\n");
1339 codec->addr = codec_addr;
1340 mutex_init(&codec->spdif_mutex);
1341 mutex_init(&codec->control_mutex);
1342 mutex_init(&codec->hash_mutex);
1343 init_hda_cache(&codec->amp_cache, sizeof(struct hda_amp_info));
1344 init_hda_cache(&codec->cmd_cache, sizeof(struct hda_cache_head));
1345 snd_array_init(&codec->mixers, sizeof(struct hda_nid_item), 32);
1346 snd_array_init(&codec->nids, sizeof(struct hda_nid_item), 32);
1347 snd_array_init(&codec->init_pins, sizeof(struct hda_pincfg), 16);
1348 snd_array_init(&codec->driver_pins, sizeof(struct hda_pincfg), 16);
1349 snd_array_init(&codec->cvt_setups, sizeof(struct hda_cvt_setup), 8);
1350 snd_array_init(&codec->spdif_out, sizeof(struct hda_spdif_out), 16);
1351 snd_array_init(&codec->jacktbl, sizeof(struct hda_jack_tbl), 16);
1352 snd_array_init(&codec->verbs, sizeof(struct hda_verb *), 8);
1353 INIT_LIST_HEAD(&codec->conn_list);
1355 INIT_DELAYED_WORK(&codec->jackpoll_work, hda_jackpoll_work);
1358 spin_lock_init(&codec->power_lock);
1359 INIT_DELAYED_WORK(&codec->power_work, hda_power_work);
1360 /* snd_hda_codec_new() marks the codec as power-up, and leave it as is.
1361 * the caller has to power down appropriatley after initialization
1364 hda_keep_power_on(codec);
1365 hda_call_pm_notify(bus, true);
1368 if (codec->bus->modelname) {
1369 codec->modelname = kstrdup(codec->bus->modelname, GFP_KERNEL);
1370 if (!codec->modelname) {
1371 snd_hda_codec_free(codec);
1376 list_add_tail(&codec->list, &bus->codec_list);
1377 bus->caddr_tbl[codec_addr] = codec;
1379 codec->vendor_id = snd_hda_param_read(codec, AC_NODE_ROOT,
1381 if (codec->vendor_id == -1)
1382 /* read again, hopefully the access method was corrected
1383 * in the last read...
1385 codec->vendor_id = snd_hda_param_read(codec, AC_NODE_ROOT,
1387 codec->subsystem_id = snd_hda_param_read(codec, AC_NODE_ROOT,
1388 AC_PAR_SUBSYSTEM_ID);
1389 codec->revision_id = snd_hda_param_read(codec, AC_NODE_ROOT,
1392 setup_fg_nodes(codec);
1393 if (!codec->afg && !codec->mfg) {
1394 snd_printdd("hda_codec: no AFG or MFG node found\n");
1399 fg = codec->afg ? codec->afg : codec->mfg;
1400 err = read_widget_caps(codec, fg);
1402 snd_printk(KERN_ERR "hda_codec: cannot malloc\n");
1405 err = read_pin_defaults(codec);
1409 if (!codec->subsystem_id) {
1410 codec->subsystem_id =
1411 snd_hda_codec_read(codec, fg, 0,
1412 AC_VERB_GET_SUBSYSTEM_ID, 0);
1416 codec->d3_stop_clk = snd_hda_codec_get_supported_ps(codec, fg,
1418 if (!codec->d3_stop_clk)
1419 bus->power_keep_link_on = 1;
1421 codec->epss = snd_hda_codec_get_supported_ps(codec, fg,
1424 /* power-up all before initialization */
1425 hda_set_power_state(codec, AC_PWRST_D0);
1427 snd_hda_codec_proc_new(codec);
1429 snd_hda_create_hwdep(codec);
1431 sprintf(component, "HDA:%08x,%08x,%08x", codec->vendor_id,
1432 codec->subsystem_id, codec->revision_id);
1433 snd_component_add(codec->bus->card, component);
1440 snd_hda_codec_free(codec);
1443 EXPORT_SYMBOL_HDA(snd_hda_codec_new);
1445 int snd_hda_codec_update_widgets(struct hda_codec *codec)
1450 /* Assume the function group node does not change,
1451 * only the widget nodes may change.
1453 kfree(codec->wcaps);
1454 fg = codec->afg ? codec->afg : codec->mfg;
1455 err = read_widget_caps(codec, fg);
1457 snd_printk(KERN_ERR "hda_codec: cannot malloc\n");
1461 snd_array_free(&codec->init_pins);
1462 err = read_pin_defaults(codec);
1466 EXPORT_SYMBOL_HDA(snd_hda_codec_update_widgets);
1470 * snd_hda_codec_configure - (Re-)configure the HD-audio codec
1471 * @codec: the HDA codec
1473 * Start parsing of the given codec tree and (re-)initialize the whole
1476 * Returns 0 if successful or a negative error code.
1478 int snd_hda_codec_configure(struct hda_codec *codec)
1482 codec->preset = find_codec_preset(codec);
1483 if (!codec->vendor_name || !codec->chip_name) {
1484 err = get_codec_name(codec);
1489 if (is_generic_config(codec)) {
1490 err = snd_hda_parse_generic_codec(codec);
1493 if (codec->preset && codec->preset->patch) {
1494 err = codec->preset->patch(codec);
1498 /* call the default parser */
1499 err = snd_hda_parse_generic_codec(codec);
1501 printk(KERN_ERR "hda-codec: No codec parser is available\n");
1504 if (!err && codec->patch_ops.unsol_event)
1505 err = init_unsol_queue(codec->bus);
1506 /* audio codec should override the mixer name */
1507 if (!err && (codec->afg || !*codec->bus->card->mixername))
1508 snprintf(codec->bus->card->mixername,
1509 sizeof(codec->bus->card->mixername),
1510 "%s %s", codec->vendor_name, codec->chip_name);
1513 EXPORT_SYMBOL_HDA(snd_hda_codec_configure);
1515 /* update the stream-id if changed */
1516 static void update_pcm_stream_id(struct hda_codec *codec,
1517 struct hda_cvt_setup *p, hda_nid_t nid,
1518 u32 stream_tag, int channel_id)
1520 unsigned int oldval, newval;
1522 if (p->stream_tag != stream_tag || p->channel_id != channel_id) {
1523 oldval = snd_hda_codec_read(codec, nid, 0, AC_VERB_GET_CONV, 0);
1524 newval = (stream_tag << 4) | channel_id;
1525 if (oldval != newval)
1526 snd_hda_codec_write(codec, nid, 0,
1527 AC_VERB_SET_CHANNEL_STREAMID,
1529 p->stream_tag = stream_tag;
1530 p->channel_id = channel_id;
1534 /* update the format-id if changed */
1535 static void update_pcm_format(struct hda_codec *codec, struct hda_cvt_setup *p,
1536 hda_nid_t nid, int format)
1538 unsigned int oldval;
1540 if (p->format_id != format) {
1541 oldval = snd_hda_codec_read(codec, nid, 0,
1542 AC_VERB_GET_STREAM_FORMAT, 0);
1543 if (oldval != format) {
1545 snd_hda_codec_write(codec, nid, 0,
1546 AC_VERB_SET_STREAM_FORMAT,
1549 p->format_id = format;
1554 * snd_hda_codec_setup_stream - set up the codec for streaming
1555 * @codec: the CODEC to set up
1556 * @nid: the NID to set up
1557 * @stream_tag: stream tag to pass, it's between 0x1 and 0xf.
1558 * @channel_id: channel id to pass, zero based.
1559 * @format: stream format.
1561 void snd_hda_codec_setup_stream(struct hda_codec *codec, hda_nid_t nid,
1563 int channel_id, int format)
1565 struct hda_codec *c;
1566 struct hda_cvt_setup *p;
1573 snd_printdd("hda_codec_setup_stream: "
1574 "NID=0x%x, stream=0x%x, channel=%d, format=0x%x\n",
1575 nid, stream_tag, channel_id, format);
1576 p = get_hda_cvt_setup(codec, nid);
1577 if (!p || p->active)
1580 if (codec->pcm_format_first)
1581 update_pcm_format(codec, p, nid, format);
1582 update_pcm_stream_id(codec, p, nid, stream_tag, channel_id);
1583 if (!codec->pcm_format_first)
1584 update_pcm_format(codec, p, nid, format);
1589 /* make other inactive cvts with the same stream-tag dirty */
1590 type = get_wcaps_type(get_wcaps(codec, nid));
1591 list_for_each_entry(c, &codec->bus->codec_list, list) {
1592 for (i = 0; i < c->cvt_setups.used; i++) {
1593 p = snd_array_elem(&c->cvt_setups, i);
1594 if (!p->active && p->stream_tag == stream_tag &&
1595 get_wcaps_type(get_wcaps(c, p->nid)) == type)
1600 EXPORT_SYMBOL_HDA(snd_hda_codec_setup_stream);
1602 static void really_cleanup_stream(struct hda_codec *codec,
1603 struct hda_cvt_setup *q);
1606 * __snd_hda_codec_cleanup_stream - clean up the codec for closing
1607 * @codec: the CODEC to clean up
1608 * @nid: the NID to clean up
1609 * @do_now: really clean up the stream instead of clearing the active flag
1611 void __snd_hda_codec_cleanup_stream(struct hda_codec *codec, hda_nid_t nid,
1614 struct hda_cvt_setup *p;
1619 if (codec->no_sticky_stream)
1622 snd_printdd("hda_codec_cleanup_stream: NID=0x%x\n", nid);
1623 p = get_hda_cvt_setup(codec, nid);
1624 if (p && p->active) {
1625 /* here we just clear the active flag when do_now isn't set;
1626 * actual clean-ups will be done later in
1627 * purify_inactive_streams() called from snd_hda_codec_prpapre()
1630 really_cleanup_stream(codec, p);
1635 EXPORT_SYMBOL_HDA(__snd_hda_codec_cleanup_stream);
1637 static void really_cleanup_stream(struct hda_codec *codec,
1638 struct hda_cvt_setup *q)
1640 hda_nid_t nid = q->nid;
1641 if (q->stream_tag || q->channel_id)
1642 snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_CHANNEL_STREAMID, 0);
1644 snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_STREAM_FORMAT, 0
1646 memset(q, 0, sizeof(*q));
1650 /* clean up the all conflicting obsolete streams */
1651 static void purify_inactive_streams(struct hda_codec *codec)
1653 struct hda_codec *c;
1656 list_for_each_entry(c, &codec->bus->codec_list, list) {
1657 for (i = 0; i < c->cvt_setups.used; i++) {
1658 struct hda_cvt_setup *p;
1659 p = snd_array_elem(&c->cvt_setups, i);
1661 really_cleanup_stream(c, p);
1667 /* clean up all streams; called from suspend */
1668 static void hda_cleanup_all_streams(struct hda_codec *codec)
1672 for (i = 0; i < codec->cvt_setups.used; i++) {
1673 struct hda_cvt_setup *p = snd_array_elem(&codec->cvt_setups, i);
1675 really_cleanup_stream(codec, p);
1681 * amp access functions
1684 /* FIXME: more better hash key? */
1685 #define HDA_HASH_KEY(nid, dir, idx) (u32)((nid) + ((idx) << 16) + ((dir) << 24))
1686 #define HDA_HASH_PINCAP_KEY(nid) (u32)((nid) + (0x02 << 24))
1687 #define HDA_HASH_PARPCM_KEY(nid) (u32)((nid) + (0x03 << 24))
1688 #define HDA_HASH_PARSTR_KEY(nid) (u32)((nid) + (0x04 << 24))
1689 #define INFO_AMP_CAPS (1<<0)
1690 #define INFO_AMP_VOL(ch) (1 << (1 + (ch)))
1692 /* initialize the hash table */
1693 static void init_hda_cache(struct hda_cache_rec *cache,
1694 unsigned int record_size)
1696 memset(cache, 0, sizeof(*cache));
1697 memset(cache->hash, 0xff, sizeof(cache->hash));
1698 snd_array_init(&cache->buf, record_size, 64);
1701 static void free_hda_cache(struct hda_cache_rec *cache)
1703 snd_array_free(&cache->buf);
1706 /* query the hash. allocate an entry if not found. */
1707 static struct hda_cache_head *get_hash(struct hda_cache_rec *cache, u32 key)
1709 u16 idx = key % (u16)ARRAY_SIZE(cache->hash);
1710 u16 cur = cache->hash[idx];
1711 struct hda_cache_head *info;
1713 while (cur != 0xffff) {
1714 info = snd_array_elem(&cache->buf, cur);
1715 if (info->key == key)
1722 /* query the hash. allocate an entry if not found. */
1723 static struct hda_cache_head *get_alloc_hash(struct hda_cache_rec *cache,
1726 struct hda_cache_head *info = get_hash(cache, key);
1729 /* add a new hash entry */
1730 info = snd_array_new(&cache->buf);
1733 cur = snd_array_index(&cache->buf, info);
1737 idx = key % (u16)ARRAY_SIZE(cache->hash);
1738 info->next = cache->hash[idx];
1739 cache->hash[idx] = cur;
1744 /* query and allocate an amp hash entry */
1745 static inline struct hda_amp_info *
1746 get_alloc_amp_hash(struct hda_codec *codec, u32 key)
1748 return (struct hda_amp_info *)get_alloc_hash(&codec->amp_cache, key);
1751 /* overwrite the value with the key in the caps hash */
1752 static int write_caps_hash(struct hda_codec *codec, u32 key, unsigned int val)
1754 struct hda_amp_info *info;
1756 mutex_lock(&codec->hash_mutex);
1757 info = get_alloc_amp_hash(codec, key);
1759 mutex_unlock(&codec->hash_mutex);
1762 info->amp_caps = val;
1763 info->head.val |= INFO_AMP_CAPS;
1764 mutex_unlock(&codec->hash_mutex);
1768 /* query the value from the caps hash; if not found, fetch the current
1769 * value from the given function and store in the hash
1772 query_caps_hash(struct hda_codec *codec, hda_nid_t nid, int dir, u32 key,
1773 unsigned int (*func)(struct hda_codec *, hda_nid_t, int))
1775 struct hda_amp_info *info;
1778 mutex_lock(&codec->hash_mutex);
1779 info = get_alloc_amp_hash(codec, key);
1781 mutex_unlock(&codec->hash_mutex);
1784 if (!(info->head.val & INFO_AMP_CAPS)) {
1785 mutex_unlock(&codec->hash_mutex); /* for reentrance */
1786 val = func(codec, nid, dir);
1787 write_caps_hash(codec, key, val);
1789 val = info->amp_caps;
1790 mutex_unlock(&codec->hash_mutex);
1795 static unsigned int read_amp_cap(struct hda_codec *codec, hda_nid_t nid,
1798 if (!(get_wcaps(codec, nid) & AC_WCAP_AMP_OVRD))
1800 return snd_hda_param_read(codec, nid,
1801 direction == HDA_OUTPUT ?
1802 AC_PAR_AMP_OUT_CAP : AC_PAR_AMP_IN_CAP);
1806 * query_amp_caps - query AMP capabilities
1807 * @codec: the HD-auio codec
1808 * @nid: the NID to query
1809 * @direction: either #HDA_INPUT or #HDA_OUTPUT
1811 * Query AMP capabilities for the given widget and direction.
1812 * Returns the obtained capability bits.
1814 * When cap bits have been already read, this doesn't read again but
1815 * returns the cached value.
1817 u32 query_amp_caps(struct hda_codec *codec, hda_nid_t nid, int direction)
1819 return query_caps_hash(codec, nid, direction,
1820 HDA_HASH_KEY(nid, direction, 0),
1823 EXPORT_SYMBOL_HDA(query_amp_caps);
1826 * snd_hda_override_amp_caps - Override the AMP capabilities
1827 * @codec: the CODEC to clean up
1828 * @nid: the NID to clean up
1829 * @direction: either #HDA_INPUT or #HDA_OUTPUT
1830 * @caps: the capability bits to set
1832 * Override the cached AMP caps bits value by the given one.
1833 * This function is useful if the driver needs to adjust the AMP ranges,
1834 * e.g. limit to 0dB, etc.
1836 * Returns zero if successful or a negative error code.
1838 int snd_hda_override_amp_caps(struct hda_codec *codec, hda_nid_t nid, int dir,
1841 return write_caps_hash(codec, HDA_HASH_KEY(nid, dir, 0), caps);
1843 EXPORT_SYMBOL_HDA(snd_hda_override_amp_caps);
1845 static unsigned int read_pin_cap(struct hda_codec *codec, hda_nid_t nid,
1848 return snd_hda_param_read(codec, nid, AC_PAR_PIN_CAP);
1852 * snd_hda_query_pin_caps - Query PIN capabilities
1853 * @codec: the HD-auio codec
1854 * @nid: the NID to query
1856 * Query PIN capabilities for the given widget.
1857 * Returns the obtained capability bits.
1859 * When cap bits have been already read, this doesn't read again but
1860 * returns the cached value.
1862 u32 snd_hda_query_pin_caps(struct hda_codec *codec, hda_nid_t nid)
1864 return query_caps_hash(codec, nid, 0, HDA_HASH_PINCAP_KEY(nid),
1867 EXPORT_SYMBOL_HDA(snd_hda_query_pin_caps);
1870 * snd_hda_override_pin_caps - Override the pin capabilities
1872 * @nid: the NID to override
1873 * @caps: the capability bits to set
1875 * Override the cached PIN capabilitiy bits value by the given one.
1877 * Returns zero if successful or a negative error code.
1879 int snd_hda_override_pin_caps(struct hda_codec *codec, hda_nid_t nid,
1882 return write_caps_hash(codec, HDA_HASH_PINCAP_KEY(nid), caps);
1884 EXPORT_SYMBOL_HDA(snd_hda_override_pin_caps);
1886 /* read or sync the hash value with the current value;
1887 * call within hash_mutex
1889 static struct hda_amp_info *
1890 update_amp_hash(struct hda_codec *codec, hda_nid_t nid, int ch,
1891 int direction, int index, bool init_only)
1893 struct hda_amp_info *info;
1894 unsigned int parm, val = 0;
1895 bool val_read = false;
1898 info = get_alloc_amp_hash(codec, HDA_HASH_KEY(nid, direction, index));
1901 if (!(info->head.val & INFO_AMP_VOL(ch))) {
1903 mutex_unlock(&codec->hash_mutex);
1904 parm = ch ? AC_AMP_GET_RIGHT : AC_AMP_GET_LEFT;
1905 parm |= direction == HDA_OUTPUT ?
1906 AC_AMP_GET_OUTPUT : AC_AMP_GET_INPUT;
1908 val = snd_hda_codec_read(codec, nid, 0,
1909 AC_VERB_GET_AMP_GAIN_MUTE, parm);
1912 mutex_lock(&codec->hash_mutex);
1915 info->vol[ch] = val;
1916 info->head.val |= INFO_AMP_VOL(ch);
1917 } else if (init_only)
1923 * write the current volume in info to the h/w
1925 static void put_vol_mute(struct hda_codec *codec, unsigned int amp_caps,
1926 hda_nid_t nid, int ch, int direction, int index,
1931 parm = ch ? AC_AMP_SET_RIGHT : AC_AMP_SET_LEFT;
1932 parm |= direction == HDA_OUTPUT ? AC_AMP_SET_OUTPUT : AC_AMP_SET_INPUT;
1933 parm |= index << AC_AMP_SET_INDEX_SHIFT;
1934 if ((val & HDA_AMP_MUTE) && !(amp_caps & AC_AMPCAP_MUTE) &&
1935 (amp_caps & AC_AMPCAP_MIN_MUTE))
1936 ; /* set the zero value as a fake mute */
1939 snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_AMP_GAIN_MUTE, parm);
1943 * snd_hda_codec_amp_read - Read AMP value
1944 * @codec: HD-audio codec
1945 * @nid: NID to read the AMP value
1946 * @ch: channel (left=0 or right=1)
1947 * @direction: #HDA_INPUT or #HDA_OUTPUT
1948 * @index: the index value (only for input direction)
1950 * Read AMP value. The volume is between 0 to 0x7f, 0x80 = mute bit.
1952 int snd_hda_codec_amp_read(struct hda_codec *codec, hda_nid_t nid, int ch,
1953 int direction, int index)
1955 struct hda_amp_info *info;
1956 unsigned int val = 0;
1958 mutex_lock(&codec->hash_mutex);
1959 info = update_amp_hash(codec, nid, ch, direction, index, false);
1961 val = info->vol[ch];
1962 mutex_unlock(&codec->hash_mutex);
1965 EXPORT_SYMBOL_HDA(snd_hda_codec_amp_read);
1967 static int codec_amp_update(struct hda_codec *codec, hda_nid_t nid, int ch,
1968 int direction, int idx, int mask, int val,
1971 struct hda_amp_info *info;
1973 unsigned int cache_only;
1975 if (snd_BUG_ON(mask & ~0xff))
1979 mutex_lock(&codec->hash_mutex);
1980 info = update_amp_hash(codec, nid, ch, direction, idx, init_only);
1982 mutex_unlock(&codec->hash_mutex);
1985 val |= info->vol[ch] & ~mask;
1986 if (info->vol[ch] == val) {
1987 mutex_unlock(&codec->hash_mutex);
1990 info->vol[ch] = val;
1991 cache_only = info->head.dirty = codec->cached_write;
1992 caps = info->amp_caps;
1993 mutex_unlock(&codec->hash_mutex);
1995 put_vol_mute(codec, caps, nid, ch, direction, idx, val);
2000 * snd_hda_codec_amp_update - update the AMP value
2001 * @codec: HD-audio codec
2002 * @nid: NID to read the AMP value
2003 * @ch: channel (left=0 or right=1)
2004 * @direction: #HDA_INPUT or #HDA_OUTPUT
2005 * @idx: the index value (only for input direction)
2006 * @mask: bit mask to set
2007 * @val: the bits value to set
2009 * Update the AMP value with a bit mask.
2010 * Returns 0 if the value is unchanged, 1 if changed.
2012 int snd_hda_codec_amp_update(struct hda_codec *codec, hda_nid_t nid, int ch,
2013 int direction, int idx, int mask, int val)
2015 return codec_amp_update(codec, nid, ch, direction, idx, mask, val, false);
2017 EXPORT_SYMBOL_HDA(snd_hda_codec_amp_update);
2020 * snd_hda_codec_amp_stereo - update the AMP stereo values
2021 * @codec: HD-audio codec
2022 * @nid: NID to read the AMP value
2023 * @direction: #HDA_INPUT or #HDA_OUTPUT
2024 * @idx: the index value (only for input direction)
2025 * @mask: bit mask to set
2026 * @val: the bits value to set
2028 * Update the AMP values like snd_hda_codec_amp_update(), but for a
2029 * stereo widget with the same mask and value.
2031 int snd_hda_codec_amp_stereo(struct hda_codec *codec, hda_nid_t nid,
2032 int direction, int idx, int mask, int val)
2036 if (snd_BUG_ON(mask & ~0xff))
2038 for (ch = 0; ch < 2; ch++)
2039 ret |= snd_hda_codec_amp_update(codec, nid, ch, direction,
2043 EXPORT_SYMBOL_HDA(snd_hda_codec_amp_stereo);
2045 /* Works like snd_hda_codec_amp_update() but it writes the value only at
2046 * the first access. If the amp was already initialized / updated beforehand,
2047 * this does nothing.
2049 int snd_hda_codec_amp_init(struct hda_codec *codec, hda_nid_t nid, int ch,
2050 int dir, int idx, int mask, int val)
2052 return codec_amp_update(codec, nid, ch, dir, idx, mask, val, true);
2054 EXPORT_SYMBOL_HDA(snd_hda_codec_amp_init);
2056 int snd_hda_codec_amp_init_stereo(struct hda_codec *codec, hda_nid_t nid,
2057 int dir, int idx, int mask, int val)
2061 if (snd_BUG_ON(mask & ~0xff))
2063 for (ch = 0; ch < 2; ch++)
2064 ret |= snd_hda_codec_amp_init(codec, nid, ch, dir,
2068 EXPORT_SYMBOL_HDA(snd_hda_codec_amp_init_stereo);
2071 * snd_hda_codec_resume_amp - Resume all AMP commands from the cache
2072 * @codec: HD-audio codec
2074 * Resume the all amp commands from the cache.
2076 void snd_hda_codec_resume_amp(struct hda_codec *codec)
2080 mutex_lock(&codec->hash_mutex);
2081 codec->cached_write = 0;
2082 for (i = 0; i < codec->amp_cache.buf.used; i++) {
2083 struct hda_amp_info *buffer;
2086 unsigned int idx, dir, ch;
2087 struct hda_amp_info info;
2089 buffer = snd_array_elem(&codec->amp_cache.buf, i);
2090 if (!buffer->head.dirty)
2092 buffer->head.dirty = 0;
2094 key = info.head.key;
2098 idx = (key >> 16) & 0xff;
2099 dir = (key >> 24) & 0xff;
2100 for (ch = 0; ch < 2; ch++) {
2101 if (!(info.head.val & INFO_AMP_VOL(ch)))
2103 mutex_unlock(&codec->hash_mutex);
2104 put_vol_mute(codec, info.amp_caps, nid, ch, dir, idx,
2106 mutex_lock(&codec->hash_mutex);
2109 mutex_unlock(&codec->hash_mutex);
2111 EXPORT_SYMBOL_HDA(snd_hda_codec_resume_amp);
2113 static u32 get_amp_max_value(struct hda_codec *codec, hda_nid_t nid, int dir,
2116 u32 caps = query_amp_caps(codec, nid, dir);
2118 caps = (caps & AC_AMPCAP_NUM_STEPS) >> AC_AMPCAP_NUM_STEPS_SHIFT;
2125 * snd_hda_mixer_amp_volume_info - Info callback for a standard AMP mixer
2127 * The control element is supposed to have the private_value field
2128 * set up via HDA_COMPOSE_AMP_VAL*() or related macros.
2130 int snd_hda_mixer_amp_volume_info(struct snd_kcontrol *kcontrol,
2131 struct snd_ctl_elem_info *uinfo)
2133 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2134 u16 nid = get_amp_nid(kcontrol);
2135 u8 chs = get_amp_channels(kcontrol);
2136 int dir = get_amp_direction(kcontrol);
2137 unsigned int ofs = get_amp_offset(kcontrol);
2139 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
2140 uinfo->count = chs == 3 ? 2 : 1;
2141 uinfo->value.integer.min = 0;
2142 uinfo->value.integer.max = get_amp_max_value(codec, nid, dir, ofs);
2143 if (!uinfo->value.integer.max) {
2144 printk(KERN_WARNING "hda_codec: "
2145 "num_steps = 0 for NID=0x%x (ctl = %s)\n", nid,
2151 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_volume_info);
2154 static inline unsigned int
2155 read_amp_value(struct hda_codec *codec, hda_nid_t nid,
2156 int ch, int dir, int idx, unsigned int ofs)
2159 val = snd_hda_codec_amp_read(codec, nid, ch, dir, idx);
2160 val &= HDA_AMP_VOLMASK;
2169 update_amp_value(struct hda_codec *codec, hda_nid_t nid,
2170 int ch, int dir, int idx, unsigned int ofs,
2173 unsigned int maxval;
2177 /* ofs = 0: raw max value */
2178 maxval = get_amp_max_value(codec, nid, dir, 0);
2181 return snd_hda_codec_amp_update(codec, nid, ch, dir, idx,
2182 HDA_AMP_VOLMASK, val);
2186 * snd_hda_mixer_amp_volume_get - Get callback for a standard AMP mixer volume
2188 * The control element is supposed to have the private_value field
2189 * set up via HDA_COMPOSE_AMP_VAL*() or related macros.
2191 int snd_hda_mixer_amp_volume_get(struct snd_kcontrol *kcontrol,
2192 struct snd_ctl_elem_value *ucontrol)
2194 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2195 hda_nid_t nid = get_amp_nid(kcontrol);
2196 int chs = get_amp_channels(kcontrol);
2197 int dir = get_amp_direction(kcontrol);
2198 int idx = get_amp_index(kcontrol);
2199 unsigned int ofs = get_amp_offset(kcontrol);
2200 long *valp = ucontrol->value.integer.value;
2203 *valp++ = read_amp_value(codec, nid, 0, dir, idx, ofs);
2205 *valp = read_amp_value(codec, nid, 1, dir, idx, ofs);
2208 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_volume_get);
2211 * snd_hda_mixer_amp_volume_put - Put callback for a standard AMP mixer volume
2213 * The control element is supposed to have the private_value field
2214 * set up via HDA_COMPOSE_AMP_VAL*() or related macros.
2216 int snd_hda_mixer_amp_volume_put(struct snd_kcontrol *kcontrol,
2217 struct snd_ctl_elem_value *ucontrol)
2219 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2220 hda_nid_t nid = get_amp_nid(kcontrol);
2221 int chs = get_amp_channels(kcontrol);
2222 int dir = get_amp_direction(kcontrol);
2223 int idx = get_amp_index(kcontrol);
2224 unsigned int ofs = get_amp_offset(kcontrol);
2225 long *valp = ucontrol->value.integer.value;
2228 snd_hda_power_up(codec);
2230 change = update_amp_value(codec, nid, 0, dir, idx, ofs, *valp);
2234 change |= update_amp_value(codec, nid, 1, dir, idx, ofs, *valp);
2235 snd_hda_power_down(codec);
2238 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_volume_put);
2241 * snd_hda_mixer_amp_volume_put - TLV callback for a standard AMP mixer volume
2243 * The control element is supposed to have the private_value field
2244 * set up via HDA_COMPOSE_AMP_VAL*() or related macros.
2246 int snd_hda_mixer_amp_tlv(struct snd_kcontrol *kcontrol, int op_flag,
2247 unsigned int size, unsigned int __user *_tlv)
2249 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2250 hda_nid_t nid = get_amp_nid(kcontrol);
2251 int dir = get_amp_direction(kcontrol);
2252 unsigned int ofs = get_amp_offset(kcontrol);
2253 bool min_mute = get_amp_min_mute(kcontrol);
2254 u32 caps, val1, val2;
2256 if (size < 4 * sizeof(unsigned int))
2258 caps = query_amp_caps(codec, nid, dir);
2259 val2 = (caps & AC_AMPCAP_STEP_SIZE) >> AC_AMPCAP_STEP_SIZE_SHIFT;
2260 val2 = (val2 + 1) * 25;
2261 val1 = -((caps & AC_AMPCAP_OFFSET) >> AC_AMPCAP_OFFSET_SHIFT);
2263 val1 = ((int)val1) * ((int)val2);
2264 if (min_mute || (caps & AC_AMPCAP_MIN_MUTE))
2265 val2 |= TLV_DB_SCALE_MUTE;
2266 if (put_user(SNDRV_CTL_TLVT_DB_SCALE, _tlv))
2268 if (put_user(2 * sizeof(unsigned int), _tlv + 1))
2270 if (put_user(val1, _tlv + 2))
2272 if (put_user(val2, _tlv + 3))
2276 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_tlv);
2279 * snd_hda_set_vmaster_tlv - Set TLV for a virtual master control
2280 * @codec: HD-audio codec
2281 * @nid: NID of a reference widget
2282 * @dir: #HDA_INPUT or #HDA_OUTPUT
2283 * @tlv: TLV data to be stored, at least 4 elements
2285 * Set (static) TLV data for a virtual master volume using the AMP caps
2286 * obtained from the reference NID.
2287 * The volume range is recalculated as if the max volume is 0dB.
2289 void snd_hda_set_vmaster_tlv(struct hda_codec *codec, hda_nid_t nid, int dir,
2295 caps = query_amp_caps(codec, nid, dir);
2296 nums = (caps & AC_AMPCAP_NUM_STEPS) >> AC_AMPCAP_NUM_STEPS_SHIFT;
2297 step = (caps & AC_AMPCAP_STEP_SIZE) >> AC_AMPCAP_STEP_SIZE_SHIFT;
2298 step = (step + 1) * 25;
2299 tlv[0] = SNDRV_CTL_TLVT_DB_SCALE;
2300 tlv[1] = 2 * sizeof(unsigned int);
2301 tlv[2] = -nums * step;
2304 EXPORT_SYMBOL_HDA(snd_hda_set_vmaster_tlv);
2306 /* find a mixer control element with the given name */
2307 static struct snd_kcontrol *
2308 find_mixer_ctl(struct hda_codec *codec, const char *name, int dev, int idx)
2310 struct snd_ctl_elem_id id;
2311 memset(&id, 0, sizeof(id));
2312 id.iface = SNDRV_CTL_ELEM_IFACE_MIXER;
2315 if (snd_BUG_ON(strlen(name) >= sizeof(id.name)))
2317 strcpy(id.name, name);
2318 return snd_ctl_find_id(codec->bus->card, &id);
2322 * snd_hda_find_mixer_ctl - Find a mixer control element with the given name
2323 * @codec: HD-audio codec
2324 * @name: ctl id name string
2326 * Get the control element with the given id string and IFACE_MIXER.
2328 struct snd_kcontrol *snd_hda_find_mixer_ctl(struct hda_codec *codec,
2331 return find_mixer_ctl(codec, name, 0, 0);
2333 EXPORT_SYMBOL_HDA(snd_hda_find_mixer_ctl);
2335 static int find_empty_mixer_ctl_idx(struct hda_codec *codec, const char *name,
2339 /* 16 ctlrs should be large enough */
2340 for (i = 0, idx = start_idx; i < 16; i++, idx++) {
2341 if (!find_mixer_ctl(codec, name, 0, idx))
2348 * snd_hda_ctl_add - Add a control element and assign to the codec
2349 * @codec: HD-audio codec
2350 * @nid: corresponding NID (optional)
2351 * @kctl: the control element to assign
2353 * Add the given control element to an array inside the codec instance.
2354 * All control elements belonging to a codec are supposed to be added
2355 * by this function so that a proper clean-up works at the free or
2356 * reconfiguration time.
2358 * If non-zero @nid is passed, the NID is assigned to the control element.
2359 * The assignment is shown in the codec proc file.
2361 * snd_hda_ctl_add() checks the control subdev id field whether
2362 * #HDA_SUBDEV_NID_FLAG bit is set. If set (and @nid is zero), the lower
2363 * bits value is taken as the NID to assign. The #HDA_NID_ITEM_AMP bit
2364 * specifies if kctl->private_value is a HDA amplifier value.
2366 int snd_hda_ctl_add(struct hda_codec *codec, hda_nid_t nid,
2367 struct snd_kcontrol *kctl)
2370 unsigned short flags = 0;
2371 struct hda_nid_item *item;
2373 if (kctl->id.subdevice & HDA_SUBDEV_AMP_FLAG) {
2374 flags |= HDA_NID_ITEM_AMP;
2376 nid = get_amp_nid_(kctl->private_value);
2378 if ((kctl->id.subdevice & HDA_SUBDEV_NID_FLAG) != 0 && nid == 0)
2379 nid = kctl->id.subdevice & 0xffff;
2380 if (kctl->id.subdevice & (HDA_SUBDEV_NID_FLAG|HDA_SUBDEV_AMP_FLAG))
2381 kctl->id.subdevice = 0;
2382 err = snd_ctl_add(codec->bus->card, kctl);
2385 item = snd_array_new(&codec->mixers);
2390 item->flags = flags;
2393 EXPORT_SYMBOL_HDA(snd_hda_ctl_add);
2396 * snd_hda_add_nid - Assign a NID to a control element
2397 * @codec: HD-audio codec
2398 * @nid: corresponding NID (optional)
2399 * @kctl: the control element to assign
2400 * @index: index to kctl
2402 * Add the given control element to an array inside the codec instance.
2403 * This function is used when #snd_hda_ctl_add cannot be used for 1:1
2404 * NID:KCTL mapping - for example "Capture Source" selector.
2406 int snd_hda_add_nid(struct hda_codec *codec, struct snd_kcontrol *kctl,
2407 unsigned int index, hda_nid_t nid)
2409 struct hda_nid_item *item;
2412 item = snd_array_new(&codec->nids);
2416 item->index = index;
2420 printk(KERN_ERR "hda-codec: no NID for mapping control %s:%d:%d\n",
2421 kctl->id.name, kctl->id.index, index);
2424 EXPORT_SYMBOL_HDA(snd_hda_add_nid);
2427 * snd_hda_ctls_clear - Clear all controls assigned to the given codec
2428 * @codec: HD-audio codec
2430 void snd_hda_ctls_clear(struct hda_codec *codec)
2433 struct hda_nid_item *items = codec->mixers.list;
2434 for (i = 0; i < codec->mixers.used; i++)
2435 snd_ctl_remove(codec->bus->card, items[i].kctl);
2436 snd_array_free(&codec->mixers);
2437 snd_array_free(&codec->nids);
2440 /* pseudo device locking
2441 * toggle card->shutdown to allow/disallow the device access (as a hack)
2443 int snd_hda_lock_devices(struct hda_bus *bus)
2445 struct snd_card *card = bus->card;
2446 struct hda_codec *codec;
2448 spin_lock(&card->files_lock);
2452 if (!list_empty(&card->ctl_files))
2455 list_for_each_entry(codec, &bus->codec_list, list) {
2457 for (pcm = 0; pcm < codec->num_pcms; pcm++) {
2458 struct hda_pcm *cpcm = &codec->pcm_info[pcm];
2461 if (cpcm->pcm->streams[0].substream_opened ||
2462 cpcm->pcm->streams[1].substream_opened)
2466 spin_unlock(&card->files_lock);
2472 spin_unlock(&card->files_lock);
2475 EXPORT_SYMBOL_HDA(snd_hda_lock_devices);
2477 void snd_hda_unlock_devices(struct hda_bus *bus)
2479 struct snd_card *card = bus->card;
2482 spin_lock(&card->files_lock);
2484 spin_unlock(&card->files_lock);
2486 EXPORT_SYMBOL_HDA(snd_hda_unlock_devices);
2489 * snd_hda_codec_reset - Clear all objects assigned to the codec
2490 * @codec: HD-audio codec
2492 * This frees the all PCM and control elements assigned to the codec, and
2493 * clears the caches and restores the pin default configurations.
2495 * When a device is being used, it returns -EBSY. If successfully freed,
2498 int snd_hda_codec_reset(struct hda_codec *codec)
2500 struct hda_bus *bus = codec->bus;
2501 struct snd_card *card = bus->card;
2504 if (snd_hda_lock_devices(bus) < 0)
2507 /* OK, let it free */
2508 cancel_delayed_work_sync(&codec->jackpoll_work);
2510 cancel_delayed_work_sync(&codec->power_work);
2511 codec->power_on = 0;
2512 codec->power_transition = 0;
2513 codec->power_jiffies = jiffies;
2514 flush_workqueue(bus->workq);
2516 snd_hda_ctls_clear(codec);
2518 for (i = 0; i < codec->num_pcms; i++) {
2519 if (codec->pcm_info[i].pcm) {
2520 snd_device_free(card, codec->pcm_info[i].pcm);
2521 clear_bit(codec->pcm_info[i].device,
2525 if (codec->patch_ops.free)
2526 codec->patch_ops.free(codec);
2527 memset(&codec->patch_ops, 0, sizeof(codec->patch_ops));
2528 snd_hda_jack_tbl_clear(codec);
2529 codec->proc_widget_hook = NULL;
2531 free_hda_cache(&codec->amp_cache);
2532 free_hda_cache(&codec->cmd_cache);
2533 init_hda_cache(&codec->amp_cache, sizeof(struct hda_amp_info));
2534 init_hda_cache(&codec->cmd_cache, sizeof(struct hda_cache_head));
2535 /* free only driver_pins so that init_pins + user_pins are restored */
2536 snd_array_free(&codec->driver_pins);
2537 snd_array_free(&codec->cvt_setups);
2538 snd_array_free(&codec->spdif_out);
2539 snd_array_free(&codec->verbs);
2540 codec->num_pcms = 0;
2541 codec->pcm_info = NULL;
2542 codec->preset = NULL;
2543 codec->slave_dig_outs = NULL;
2544 codec->spdif_status_reset = 0;
2545 module_put(codec->owner);
2546 codec->owner = NULL;
2548 /* allow device access again */
2549 snd_hda_unlock_devices(bus);
2553 typedef int (*map_slave_func_t)(void *, struct snd_kcontrol *);
2555 /* apply the function to all matching slave ctls in the mixer list */
2556 static int map_slaves(struct hda_codec *codec, const char * const *slaves,
2557 const char *suffix, map_slave_func_t func, void *data)
2559 struct hda_nid_item *items;
2560 const char * const *s;
2563 items = codec->mixers.list;
2564 for (i = 0; i < codec->mixers.used; i++) {
2565 struct snd_kcontrol *sctl = items[i].kctl;
2566 if (!sctl || !sctl->id.name ||
2567 sctl->id.iface != SNDRV_CTL_ELEM_IFACE_MIXER)
2569 for (s = slaves; *s; s++) {
2570 char tmpname[sizeof(sctl->id.name)];
2571 const char *name = *s;
2573 snprintf(tmpname, sizeof(tmpname), "%s %s",
2577 if (!strcmp(sctl->id.name, name)) {
2578 err = func(data, sctl);
2588 static int check_slave_present(void *data, struct snd_kcontrol *sctl)
2593 /* guess the value corresponding to 0dB */
2594 static int get_kctl_0dB_offset(struct snd_kcontrol *kctl)
2597 const int *tlv = NULL;
2600 if (kctl->vd[0].access & SNDRV_CTL_ELEM_ACCESS_TLV_CALLBACK) {
2601 /* FIXME: set_fs() hack for obtaining user-space TLV data */
2602 mm_segment_t fs = get_fs();
2604 if (!kctl->tlv.c(kctl, 0, sizeof(_tlv), _tlv))
2607 } else if (kctl->vd[0].access & SNDRV_CTL_ELEM_ACCESS_TLV_READ)
2609 if (tlv && tlv[0] == SNDRV_CTL_TLVT_DB_SCALE)
2610 val = -tlv[2] / tlv[3];
2614 /* call kctl->put with the given value(s) */
2615 static int put_kctl_with_value(struct snd_kcontrol *kctl, int val)
2617 struct snd_ctl_elem_value *ucontrol;
2618 ucontrol = kzalloc(sizeof(*ucontrol), GFP_KERNEL);
2621 ucontrol->value.integer.value[0] = val;
2622 ucontrol->value.integer.value[1] = val;
2623 kctl->put(kctl, ucontrol);
2628 /* initialize the slave volume with 0dB */
2629 static int init_slave_0dB(void *data, struct snd_kcontrol *slave)
2631 int offset = get_kctl_0dB_offset(slave);
2633 put_kctl_with_value(slave, offset);
2637 /* unmute the slave */
2638 static int init_slave_unmute(void *data, struct snd_kcontrol *slave)
2640 return put_kctl_with_value(slave, 1);
2644 * snd_hda_add_vmaster - create a virtual master control and add slaves
2645 * @codec: HD-audio codec
2646 * @name: vmaster control name
2647 * @tlv: TLV data (optional)
2648 * @slaves: slave control names (optional)
2649 * @suffix: suffix string to each slave name (optional)
2650 * @init_slave_vol: initialize slaves to unmute/0dB
2651 * @ctl_ret: store the vmaster kcontrol in return
2653 * Create a virtual master control with the given name. The TLV data
2654 * must be either NULL or a valid data.
2656 * @slaves is a NULL-terminated array of strings, each of which is a
2657 * slave control name. All controls with these names are assigned to
2658 * the new virtual master control.
2660 * This function returns zero if successful or a negative error code.
2662 int __snd_hda_add_vmaster(struct hda_codec *codec, char *name,
2663 unsigned int *tlv, const char * const *slaves,
2664 const char *suffix, bool init_slave_vol,
2665 struct snd_kcontrol **ctl_ret)
2667 struct snd_kcontrol *kctl;
2673 err = map_slaves(codec, slaves, suffix, check_slave_present, NULL);
2675 snd_printdd("No slave found for %s\n", name);
2678 kctl = snd_ctl_make_virtual_master(name, tlv);
2681 err = snd_hda_ctl_add(codec, 0, kctl);
2685 err = map_slaves(codec, slaves, suffix,
2686 (map_slave_func_t)snd_ctl_add_slave, kctl);
2690 /* init with master mute & zero volume */
2691 put_kctl_with_value(kctl, 0);
2693 map_slaves(codec, slaves, suffix,
2694 tlv ? init_slave_0dB : init_slave_unmute, kctl);
2700 EXPORT_SYMBOL_HDA(__snd_hda_add_vmaster);
2703 * mute-LED control using vmaster
2705 static int vmaster_mute_mode_info(struct snd_kcontrol *kcontrol,
2706 struct snd_ctl_elem_info *uinfo)
2708 static const char * const texts[] = {
2709 "On", "Off", "Follow Master"
2713 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
2715 uinfo->value.enumerated.items = 3;
2716 index = uinfo->value.enumerated.item;
2719 strcpy(uinfo->value.enumerated.name, texts[index]);
2723 static int vmaster_mute_mode_get(struct snd_kcontrol *kcontrol,
2724 struct snd_ctl_elem_value *ucontrol)
2726 struct hda_vmaster_mute_hook *hook = snd_kcontrol_chip(kcontrol);
2727 ucontrol->value.enumerated.item[0] = hook->mute_mode;
2731 static int vmaster_mute_mode_put(struct snd_kcontrol *kcontrol,
2732 struct snd_ctl_elem_value *ucontrol)
2734 struct hda_vmaster_mute_hook *hook = snd_kcontrol_chip(kcontrol);
2735 unsigned int old_mode = hook->mute_mode;
2737 hook->mute_mode = ucontrol->value.enumerated.item[0];
2738 if (hook->mute_mode > HDA_VMUTE_FOLLOW_MASTER)
2739 hook->mute_mode = HDA_VMUTE_FOLLOW_MASTER;
2740 if (old_mode == hook->mute_mode)
2742 snd_hda_sync_vmaster_hook(hook);
2746 static struct snd_kcontrol_new vmaster_mute_mode = {
2747 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2748 .name = "Mute-LED Mode",
2749 .info = vmaster_mute_mode_info,
2750 .get = vmaster_mute_mode_get,
2751 .put = vmaster_mute_mode_put,
2755 * Add a mute-LED hook with the given vmaster switch kctl
2756 * "Mute-LED Mode" control is automatically created and associated with
2759 int snd_hda_add_vmaster_hook(struct hda_codec *codec,
2760 struct hda_vmaster_mute_hook *hook,
2761 bool expose_enum_ctl)
2763 struct snd_kcontrol *kctl;
2765 if (!hook->hook || !hook->sw_kctl)
2767 snd_ctl_add_vmaster_hook(hook->sw_kctl, hook->hook, codec);
2768 hook->codec = codec;
2769 hook->mute_mode = HDA_VMUTE_FOLLOW_MASTER;
2770 if (!expose_enum_ctl)
2772 kctl = snd_ctl_new1(&vmaster_mute_mode, hook);
2775 return snd_hda_ctl_add(codec, 0, kctl);
2777 EXPORT_SYMBOL_HDA(snd_hda_add_vmaster_hook);
2780 * Call the hook with the current value for synchronization
2781 * Should be called in init callback
2783 void snd_hda_sync_vmaster_hook(struct hda_vmaster_mute_hook *hook)
2785 if (!hook->hook || !hook->codec)
2787 switch (hook->mute_mode) {
2788 case HDA_VMUTE_FOLLOW_MASTER:
2789 snd_ctl_sync_vmaster_hook(hook->sw_kctl);
2792 hook->hook(hook->codec, hook->mute_mode);
2796 EXPORT_SYMBOL_HDA(snd_hda_sync_vmaster_hook);
2800 * snd_hda_mixer_amp_switch_info - Info callback for a standard AMP mixer switch
2802 * The control element is supposed to have the private_value field
2803 * set up via HDA_COMPOSE_AMP_VAL*() or related macros.
2805 int snd_hda_mixer_amp_switch_info(struct snd_kcontrol *kcontrol,
2806 struct snd_ctl_elem_info *uinfo)
2808 int chs = get_amp_channels(kcontrol);
2810 uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
2811 uinfo->count = chs == 3 ? 2 : 1;
2812 uinfo->value.integer.min = 0;
2813 uinfo->value.integer.max = 1;
2816 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_switch_info);
2819 * snd_hda_mixer_amp_switch_get - Get callback for a standard AMP mixer switch
2821 * The control element is supposed to have the private_value field
2822 * set up via HDA_COMPOSE_AMP_VAL*() or related macros.
2824 int snd_hda_mixer_amp_switch_get(struct snd_kcontrol *kcontrol,
2825 struct snd_ctl_elem_value *ucontrol)
2827 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2828 hda_nid_t nid = get_amp_nid(kcontrol);
2829 int chs = get_amp_channels(kcontrol);
2830 int dir = get_amp_direction(kcontrol);
2831 int idx = get_amp_index(kcontrol);
2832 long *valp = ucontrol->value.integer.value;
2835 *valp++ = (snd_hda_codec_amp_read(codec, nid, 0, dir, idx) &
2836 HDA_AMP_MUTE) ? 0 : 1;
2838 *valp = (snd_hda_codec_amp_read(codec, nid, 1, dir, idx) &
2839 HDA_AMP_MUTE) ? 0 : 1;
2842 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_switch_get);
2845 * snd_hda_mixer_amp_switch_put - Put callback for a standard AMP mixer switch
2847 * The control element is supposed to have the private_value field
2848 * set up via HDA_COMPOSE_AMP_VAL*() or related macros.
2850 int snd_hda_mixer_amp_switch_put(struct snd_kcontrol *kcontrol,
2851 struct snd_ctl_elem_value *ucontrol)
2853 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2854 hda_nid_t nid = get_amp_nid(kcontrol);
2855 int chs = get_amp_channels(kcontrol);
2856 int dir = get_amp_direction(kcontrol);
2857 int idx = get_amp_index(kcontrol);
2858 long *valp = ucontrol->value.integer.value;
2861 snd_hda_power_up(codec);
2863 change = snd_hda_codec_amp_update(codec, nid, 0, dir, idx,
2865 *valp ? 0 : HDA_AMP_MUTE);
2869 change |= snd_hda_codec_amp_update(codec, nid, 1, dir, idx,
2871 *valp ? 0 : HDA_AMP_MUTE);
2872 hda_call_check_power_status(codec, nid);
2873 snd_hda_power_down(codec);
2876 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_switch_put);
2879 * bound volume controls
2881 * bind multiple volumes (# indices, from 0)
2884 #define AMP_VAL_IDX_SHIFT 19
2885 #define AMP_VAL_IDX_MASK (0x0f<<19)
2888 * snd_hda_mixer_bind_switch_get - Get callback for a bound volume control
2890 * The control element is supposed to have the private_value field
2891 * set up via HDA_BIND_MUTE*() macros.
2893 int snd_hda_mixer_bind_switch_get(struct snd_kcontrol *kcontrol,
2894 struct snd_ctl_elem_value *ucontrol)
2896 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2900 mutex_lock(&codec->control_mutex);
2901 pval = kcontrol->private_value;
2902 kcontrol->private_value = pval & ~AMP_VAL_IDX_MASK; /* index 0 */
2903 err = snd_hda_mixer_amp_switch_get(kcontrol, ucontrol);
2904 kcontrol->private_value = pval;
2905 mutex_unlock(&codec->control_mutex);
2908 EXPORT_SYMBOL_HDA(snd_hda_mixer_bind_switch_get);
2911 * snd_hda_mixer_bind_switch_put - Put callback for a bound volume control
2913 * The control element is supposed to have the private_value field
2914 * set up via HDA_BIND_MUTE*() macros.
2916 int snd_hda_mixer_bind_switch_put(struct snd_kcontrol *kcontrol,
2917 struct snd_ctl_elem_value *ucontrol)
2919 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2921 int i, indices, err = 0, change = 0;
2923 mutex_lock(&codec->control_mutex);
2924 pval = kcontrol->private_value;
2925 indices = (pval & AMP_VAL_IDX_MASK) >> AMP_VAL_IDX_SHIFT;
2926 for (i = 0; i < indices; i++) {
2927 kcontrol->private_value = (pval & ~AMP_VAL_IDX_MASK) |
2928 (i << AMP_VAL_IDX_SHIFT);
2929 err = snd_hda_mixer_amp_switch_put(kcontrol, ucontrol);
2934 kcontrol->private_value = pval;
2935 mutex_unlock(&codec->control_mutex);
2936 return err < 0 ? err : change;
2938 EXPORT_SYMBOL_HDA(snd_hda_mixer_bind_switch_put);
2941 * snd_hda_mixer_bind_ctls_info - Info callback for a generic bound control
2943 * The control element is supposed to have the private_value field
2944 * set up via HDA_BIND_VOL() or HDA_BIND_SW() macros.
2946 int snd_hda_mixer_bind_ctls_info(struct snd_kcontrol *kcontrol,
2947 struct snd_ctl_elem_info *uinfo)
2949 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2950 struct hda_bind_ctls *c;
2953 mutex_lock(&codec->control_mutex);
2954 c = (struct hda_bind_ctls *)kcontrol->private_value;
2955 kcontrol->private_value = *c->values;
2956 err = c->ops->info(kcontrol, uinfo);
2957 kcontrol->private_value = (long)c;
2958 mutex_unlock(&codec->control_mutex);
2961 EXPORT_SYMBOL_HDA(snd_hda_mixer_bind_ctls_info);
2964 * snd_hda_mixer_bind_ctls_get - Get callback for a generic bound control
2966 * The control element is supposed to have the private_value field
2967 * set up via HDA_BIND_VOL() or HDA_BIND_SW() macros.
2969 int snd_hda_mixer_bind_ctls_get(struct snd_kcontrol *kcontrol,
2970 struct snd_ctl_elem_value *ucontrol)
2972 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2973 struct hda_bind_ctls *c;
2976 mutex_lock(&codec->control_mutex);
2977 c = (struct hda_bind_ctls *)kcontrol->private_value;
2978 kcontrol->private_value = *c->values;
2979 err = c->ops->get(kcontrol, ucontrol);
2980 kcontrol->private_value = (long)c;
2981 mutex_unlock(&codec->control_mutex);
2984 EXPORT_SYMBOL_HDA(snd_hda_mixer_bind_ctls_get);
2987 * snd_hda_mixer_bind_ctls_put - Put callback for a generic bound control
2989 * The control element is supposed to have the private_value field
2990 * set up via HDA_BIND_VOL() or HDA_BIND_SW() macros.
2992 int snd_hda_mixer_bind_ctls_put(struct snd_kcontrol *kcontrol,
2993 struct snd_ctl_elem_value *ucontrol)
2995 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2996 struct hda_bind_ctls *c;
2997 unsigned long *vals;
2998 int err = 0, change = 0;
3000 mutex_lock(&codec->control_mutex);
3001 c = (struct hda_bind_ctls *)kcontrol->private_value;
3002 for (vals = c->values; *vals; vals++) {
3003 kcontrol->private_value = *vals;
3004 err = c->ops->put(kcontrol, ucontrol);
3009 kcontrol->private_value = (long)c;
3010 mutex_unlock(&codec->control_mutex);
3011 return err < 0 ? err : change;
3013 EXPORT_SYMBOL_HDA(snd_hda_mixer_bind_ctls_put);
3016 * snd_hda_mixer_bind_tlv - TLV callback for a generic bound control
3018 * The control element is supposed to have the private_value field
3019 * set up via HDA_BIND_VOL() macro.
3021 int snd_hda_mixer_bind_tlv(struct snd_kcontrol *kcontrol, int op_flag,
3022 unsigned int size, unsigned int __user *tlv)
3024 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3025 struct hda_bind_ctls *c;
3028 mutex_lock(&codec->control_mutex);
3029 c = (struct hda_bind_ctls *)kcontrol->private_value;
3030 kcontrol->private_value = *c->values;
3031 err = c->ops->tlv(kcontrol, op_flag, size, tlv);
3032 kcontrol->private_value = (long)c;
3033 mutex_unlock(&codec->control_mutex);
3036 EXPORT_SYMBOL_HDA(snd_hda_mixer_bind_tlv);
3038 struct hda_ctl_ops snd_hda_bind_vol = {
3039 .info = snd_hda_mixer_amp_volume_info,
3040 .get = snd_hda_mixer_amp_volume_get,
3041 .put = snd_hda_mixer_amp_volume_put,
3042 .tlv = snd_hda_mixer_amp_tlv
3044 EXPORT_SYMBOL_HDA(snd_hda_bind_vol);
3046 struct hda_ctl_ops snd_hda_bind_sw = {
3047 .info = snd_hda_mixer_amp_switch_info,
3048 .get = snd_hda_mixer_amp_switch_get,
3049 .put = snd_hda_mixer_amp_switch_put,
3050 .tlv = snd_hda_mixer_amp_tlv
3052 EXPORT_SYMBOL_HDA(snd_hda_bind_sw);
3055 * SPDIF out controls
3058 static int snd_hda_spdif_mask_info(struct snd_kcontrol *kcontrol,
3059 struct snd_ctl_elem_info *uinfo)
3061 uinfo->type = SNDRV_CTL_ELEM_TYPE_IEC958;
3066 static int snd_hda_spdif_cmask_get(struct snd_kcontrol *kcontrol,
3067 struct snd_ctl_elem_value *ucontrol)
3069 ucontrol->value.iec958.status[0] = IEC958_AES0_PROFESSIONAL |
3070 IEC958_AES0_NONAUDIO |
3071 IEC958_AES0_CON_EMPHASIS_5015 |
3072 IEC958_AES0_CON_NOT_COPYRIGHT;
3073 ucontrol->value.iec958.status[1] = IEC958_AES1_CON_CATEGORY |
3074 IEC958_AES1_CON_ORIGINAL;
3078 static int snd_hda_spdif_pmask_get(struct snd_kcontrol *kcontrol,
3079 struct snd_ctl_elem_value *ucontrol)
3081 ucontrol->value.iec958.status[0] = IEC958_AES0_PROFESSIONAL |
3082 IEC958_AES0_NONAUDIO |
3083 IEC958_AES0_PRO_EMPHASIS_5015;
3087 static int snd_hda_spdif_default_get(struct snd_kcontrol *kcontrol,
3088 struct snd_ctl_elem_value *ucontrol)
3090 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3091 int idx = kcontrol->private_value;
3092 struct hda_spdif_out *spdif;
3094 mutex_lock(&codec->spdif_mutex);
3095 spdif = snd_array_elem(&codec->spdif_out, idx);
3096 ucontrol->value.iec958.status[0] = spdif->status & 0xff;
3097 ucontrol->value.iec958.status[1] = (spdif->status >> 8) & 0xff;
3098 ucontrol->value.iec958.status[2] = (spdif->status >> 16) & 0xff;
3099 ucontrol->value.iec958.status[3] = (spdif->status >> 24) & 0xff;
3100 mutex_unlock(&codec->spdif_mutex);
3105 /* convert from SPDIF status bits to HDA SPDIF bits
3106 * bit 0 (DigEn) is always set zero (to be filled later)
3108 static unsigned short convert_from_spdif_status(unsigned int sbits)
3110 unsigned short val = 0;
3112 if (sbits & IEC958_AES0_PROFESSIONAL)
3113 val |= AC_DIG1_PROFESSIONAL;
3114 if (sbits & IEC958_AES0_NONAUDIO)
3115 val |= AC_DIG1_NONAUDIO;
3116 if (sbits & IEC958_AES0_PROFESSIONAL) {
3117 if ((sbits & IEC958_AES0_PRO_EMPHASIS) ==
3118 IEC958_AES0_PRO_EMPHASIS_5015)
3119 val |= AC_DIG1_EMPHASIS;
3121 if ((sbits & IEC958_AES0_CON_EMPHASIS) ==
3122 IEC958_AES0_CON_EMPHASIS_5015)
3123 val |= AC_DIG1_EMPHASIS;
3124 if (!(sbits & IEC958_AES0_CON_NOT_COPYRIGHT))
3125 val |= AC_DIG1_COPYRIGHT;
3126 if (sbits & (IEC958_AES1_CON_ORIGINAL << 8))
3127 val |= AC_DIG1_LEVEL;
3128 val |= sbits & (IEC958_AES1_CON_CATEGORY << 8);
3133 /* convert to SPDIF status bits from HDA SPDIF bits
3135 static unsigned int convert_to_spdif_status(unsigned short val)
3137 unsigned int sbits = 0;
3139 if (val & AC_DIG1_NONAUDIO)
3140 sbits |= IEC958_AES0_NONAUDIO;
3141 if (val & AC_DIG1_PROFESSIONAL)
3142 sbits |= IEC958_AES0_PROFESSIONAL;
3143 if (sbits & IEC958_AES0_PROFESSIONAL) {
3144 if (val & AC_DIG1_EMPHASIS)
3145 sbits |= IEC958_AES0_PRO_EMPHASIS_5015;
3147 if (val & AC_DIG1_EMPHASIS)
3148 sbits |= IEC958_AES0_CON_EMPHASIS_5015;
3149 if (!(val & AC_DIG1_COPYRIGHT))
3150 sbits |= IEC958_AES0_CON_NOT_COPYRIGHT;
3151 if (val & AC_DIG1_LEVEL)
3152 sbits |= (IEC958_AES1_CON_ORIGINAL << 8);
3153 sbits |= val & (0x7f << 8);
3158 /* set digital convert verbs both for the given NID and its slaves */
3159 static void set_dig_out(struct hda_codec *codec, hda_nid_t nid,
3164 snd_hda_codec_write_cache(codec, nid, 0, verb, val);
3165 d = codec->slave_dig_outs;
3169 snd_hda_codec_write_cache(codec, *d, 0, verb, val);
3172 static inline void set_dig_out_convert(struct hda_codec *codec, hda_nid_t nid,
3176 set_dig_out(codec, nid, AC_VERB_SET_DIGI_CONVERT_1, dig1);
3178 set_dig_out(codec, nid, AC_VERB_SET_DIGI_CONVERT_2, dig2);
3181 static int snd_hda_spdif_default_put(struct snd_kcontrol *kcontrol,
3182 struct snd_ctl_elem_value *ucontrol)
3184 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3185 int idx = kcontrol->private_value;
3186 struct hda_spdif_out *spdif;
3191 mutex_lock(&codec->spdif_mutex);
3192 spdif = snd_array_elem(&codec->spdif_out, idx);
3194 spdif->status = ucontrol->value.iec958.status[0] |
3195 ((unsigned int)ucontrol->value.iec958.status[1] << 8) |
3196 ((unsigned int)ucontrol->value.iec958.status[2] << 16) |
3197 ((unsigned int)ucontrol->value.iec958.status[3] << 24);
3198 val = convert_from_spdif_status(spdif->status);
3199 val |= spdif->ctls & 1;
3200 change = spdif->ctls != val;
3202 if (change && nid != (u16)-1)
3203 set_dig_out_convert(codec, nid, val & 0xff, (val >> 8) & 0xff);
3204 mutex_unlock(&codec->spdif_mutex);
3208 #define snd_hda_spdif_out_switch_info snd_ctl_boolean_mono_info
3210 static int snd_hda_spdif_out_switch_get(struct snd_kcontrol *kcontrol,
3211 struct snd_ctl_elem_value *ucontrol)
3213 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3214 int idx = kcontrol->private_value;
3215 struct hda_spdif_out *spdif;
3217 mutex_lock(&codec->spdif_mutex);
3218 spdif = snd_array_elem(&codec->spdif_out, idx);
3219 ucontrol->value.integer.value[0] = spdif->ctls & AC_DIG1_ENABLE;
3220 mutex_unlock(&codec->spdif_mutex);
3224 static inline void set_spdif_ctls(struct hda_codec *codec, hda_nid_t nid,
3227 set_dig_out_convert(codec, nid, dig1, dig2);
3228 /* unmute amp switch (if any) */
3229 if ((get_wcaps(codec, nid) & AC_WCAP_OUT_AMP) &&
3230 (dig1 & AC_DIG1_ENABLE))
3231 snd_hda_codec_amp_stereo(codec, nid, HDA_OUTPUT, 0,
3235 static int snd_hda_spdif_out_switch_put(struct snd_kcontrol *kcontrol,
3236 struct snd_ctl_elem_value *ucontrol)
3238 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3239 int idx = kcontrol->private_value;
3240 struct hda_spdif_out *spdif;
3245 mutex_lock(&codec->spdif_mutex);
3246 spdif = snd_array_elem(&codec->spdif_out, idx);
3248 val = spdif->ctls & ~AC_DIG1_ENABLE;
3249 if (ucontrol->value.integer.value[0])
3250 val |= AC_DIG1_ENABLE;
3251 change = spdif->ctls != val;
3253 if (change && nid != (u16)-1)
3254 set_spdif_ctls(codec, nid, val & 0xff, -1);
3255 mutex_unlock(&codec->spdif_mutex);
3259 static struct snd_kcontrol_new dig_mixes[] = {
3261 .access = SNDRV_CTL_ELEM_ACCESS_READ,
3262 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3263 .name = SNDRV_CTL_NAME_IEC958("", PLAYBACK, CON_MASK),
3264 .info = snd_hda_spdif_mask_info,
3265 .get = snd_hda_spdif_cmask_get,
3268 .access = SNDRV_CTL_ELEM_ACCESS_READ,
3269 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3270 .name = SNDRV_CTL_NAME_IEC958("", PLAYBACK, PRO_MASK),
3271 .info = snd_hda_spdif_mask_info,
3272 .get = snd_hda_spdif_pmask_get,
3275 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3276 .name = SNDRV_CTL_NAME_IEC958("", PLAYBACK, DEFAULT),
3277 .info = snd_hda_spdif_mask_info,
3278 .get = snd_hda_spdif_default_get,
3279 .put = snd_hda_spdif_default_put,
3282 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3283 .name = SNDRV_CTL_NAME_IEC958("", PLAYBACK, SWITCH),
3284 .info = snd_hda_spdif_out_switch_info,
3285 .get = snd_hda_spdif_out_switch_get,
3286 .put = snd_hda_spdif_out_switch_put,
3292 * snd_hda_create_dig_out_ctls - create Output SPDIF-related controls
3293 * @codec: the HDA codec
3294 * @associated_nid: NID that new ctls associated with
3295 * @cvt_nid: converter NID
3296 * @type: HDA_PCM_TYPE_*
3297 * Creates controls related with the digital output.
3298 * Called from each patch supporting the digital out.
3300 * Returns 0 if successful, or a negative error code.
3302 int snd_hda_create_dig_out_ctls(struct hda_codec *codec,
3303 hda_nid_t associated_nid,
3308 struct snd_kcontrol *kctl;
3309 struct snd_kcontrol_new *dig_mix;
3311 const int spdif_index = 16;
3312 struct hda_spdif_out *spdif;
3313 struct hda_bus *bus = codec->bus;
3315 if (bus->primary_dig_out_type == HDA_PCM_TYPE_HDMI &&
3316 type == HDA_PCM_TYPE_SPDIF) {
3318 } else if (bus->primary_dig_out_type == HDA_PCM_TYPE_SPDIF &&
3319 type == HDA_PCM_TYPE_HDMI) {
3320 /* suppose a single SPDIF device */
3321 for (dig_mix = dig_mixes; dig_mix->name; dig_mix++) {
3322 kctl = find_mixer_ctl(codec, dig_mix->name, 0, 0);
3325 kctl->id.index = spdif_index;
3327 bus->primary_dig_out_type = HDA_PCM_TYPE_HDMI;
3329 if (!bus->primary_dig_out_type)
3330 bus->primary_dig_out_type = type;
3332 idx = find_empty_mixer_ctl_idx(codec, "IEC958 Playback Switch", idx);
3334 printk(KERN_ERR "hda_codec: too many IEC958 outputs\n");
3337 spdif = snd_array_new(&codec->spdif_out);
3340 for (dig_mix = dig_mixes; dig_mix->name; dig_mix++) {
3341 kctl = snd_ctl_new1(dig_mix, codec);
3344 kctl->id.index = idx;
3345 kctl->private_value = codec->spdif_out.used - 1;
3346 err = snd_hda_ctl_add(codec, associated_nid, kctl);
3350 spdif->nid = cvt_nid;
3351 spdif->ctls = snd_hda_codec_read(codec, cvt_nid, 0,
3352 AC_VERB_GET_DIGI_CONVERT_1, 0);
3353 spdif->status = convert_to_spdif_status(spdif->ctls);
3356 EXPORT_SYMBOL_HDA(snd_hda_create_dig_out_ctls);
3358 /* get the hda_spdif_out entry from the given NID
3359 * call within spdif_mutex lock
3361 struct hda_spdif_out *snd_hda_spdif_out_of_nid(struct hda_codec *codec,
3365 for (i = 0; i < codec->spdif_out.used; i++) {
3366 struct hda_spdif_out *spdif =
3367 snd_array_elem(&codec->spdif_out, i);
3368 if (spdif->nid == nid)
3373 EXPORT_SYMBOL_HDA(snd_hda_spdif_out_of_nid);
3375 void snd_hda_spdif_ctls_unassign(struct hda_codec *codec, int idx)
3377 struct hda_spdif_out *spdif;
3379 mutex_lock(&codec->spdif_mutex);
3380 spdif = snd_array_elem(&codec->spdif_out, idx);
3381 spdif->nid = (u16)-1;
3382 mutex_unlock(&codec->spdif_mutex);
3384 EXPORT_SYMBOL_HDA(snd_hda_spdif_ctls_unassign);
3386 void snd_hda_spdif_ctls_assign(struct hda_codec *codec, int idx, hda_nid_t nid)
3388 struct hda_spdif_out *spdif;
3391 mutex_lock(&codec->spdif_mutex);
3392 spdif = snd_array_elem(&codec->spdif_out, idx);
3393 if (spdif->nid != nid) {
3396 set_spdif_ctls(codec, nid, val & 0xff, (val >> 8) & 0xff);
3398 mutex_unlock(&codec->spdif_mutex);
3400 EXPORT_SYMBOL_HDA(snd_hda_spdif_ctls_assign);
3403 * SPDIF sharing with analog output
3405 static int spdif_share_sw_get(struct snd_kcontrol *kcontrol,
3406 struct snd_ctl_elem_value *ucontrol)
3408 struct hda_multi_out *mout = snd_kcontrol_chip(kcontrol);
3409 ucontrol->value.integer.value[0] = mout->share_spdif;
3413 static int spdif_share_sw_put(struct snd_kcontrol *kcontrol,
3414 struct snd_ctl_elem_value *ucontrol)
3416 struct hda_multi_out *mout = snd_kcontrol_chip(kcontrol);
3417 mout->share_spdif = !!ucontrol->value.integer.value[0];
3421 static struct snd_kcontrol_new spdif_share_sw = {
3422 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3423 .name = "IEC958 Default PCM Playback Switch",
3424 .info = snd_ctl_boolean_mono_info,
3425 .get = spdif_share_sw_get,
3426 .put = spdif_share_sw_put,
3430 * snd_hda_create_spdif_share_sw - create Default PCM switch
3431 * @codec: the HDA codec
3432 * @mout: multi-out instance
3434 int snd_hda_create_spdif_share_sw(struct hda_codec *codec,
3435 struct hda_multi_out *mout)
3437 struct snd_kcontrol *kctl;
3439 if (!mout->dig_out_nid)
3442 kctl = snd_ctl_new1(&spdif_share_sw, mout);
3445 /* ATTENTION: here mout is passed as private_data, instead of codec */
3446 return snd_hda_ctl_add(codec, mout->dig_out_nid, kctl);
3448 EXPORT_SYMBOL_HDA(snd_hda_create_spdif_share_sw);
3454 #define snd_hda_spdif_in_switch_info snd_hda_spdif_out_switch_info
3456 static int snd_hda_spdif_in_switch_get(struct snd_kcontrol *kcontrol,
3457 struct snd_ctl_elem_value *ucontrol)
3459 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3461 ucontrol->value.integer.value[0] = codec->spdif_in_enable;
3465 static int snd_hda_spdif_in_switch_put(struct snd_kcontrol *kcontrol,
3466 struct snd_ctl_elem_value *ucontrol)
3468 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3469 hda_nid_t nid = kcontrol->private_value;
3470 unsigned int val = !!ucontrol->value.integer.value[0];
3473 mutex_lock(&codec->spdif_mutex);
3474 change = codec->spdif_in_enable != val;
3476 codec->spdif_in_enable = val;
3477 snd_hda_codec_write_cache(codec, nid, 0,
3478 AC_VERB_SET_DIGI_CONVERT_1, val);
3480 mutex_unlock(&codec->spdif_mutex);
3484 static int snd_hda_spdif_in_status_get(struct snd_kcontrol *kcontrol,
3485 struct snd_ctl_elem_value *ucontrol)
3487 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3488 hda_nid_t nid = kcontrol->private_value;
3492 val = snd_hda_codec_read(codec, nid, 0, AC_VERB_GET_DIGI_CONVERT_1, 0);
3493 sbits = convert_to_spdif_status(val);
3494 ucontrol->value.iec958.status[0] = sbits;
3495 ucontrol->value.iec958.status[1] = sbits >> 8;
3496 ucontrol->value.iec958.status[2] = sbits >> 16;
3497 ucontrol->value.iec958.status[3] = sbits >> 24;
3501 static struct snd_kcontrol_new dig_in_ctls[] = {
3503 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3504 .name = SNDRV_CTL_NAME_IEC958("", CAPTURE, SWITCH),
3505 .info = snd_hda_spdif_in_switch_info,
3506 .get = snd_hda_spdif_in_switch_get,
3507 .put = snd_hda_spdif_in_switch_put,
3510 .access = SNDRV_CTL_ELEM_ACCESS_READ,
3511 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3512 .name = SNDRV_CTL_NAME_IEC958("", CAPTURE, DEFAULT),
3513 .info = snd_hda_spdif_mask_info,
3514 .get = snd_hda_spdif_in_status_get,
3520 * snd_hda_create_spdif_in_ctls - create Input SPDIF-related controls
3521 * @codec: the HDA codec
3522 * @nid: audio in widget NID
3524 * Creates controls related with the SPDIF input.
3525 * Called from each patch supporting the SPDIF in.
3527 * Returns 0 if successful, or a negative error code.
3529 int snd_hda_create_spdif_in_ctls(struct hda_codec *codec, hda_nid_t nid)
3532 struct snd_kcontrol *kctl;
3533 struct snd_kcontrol_new *dig_mix;
3536 idx = find_empty_mixer_ctl_idx(codec, "IEC958 Capture Switch", 0);
3538 printk(KERN_ERR "hda_codec: too many IEC958 inputs\n");
3541 for (dig_mix = dig_in_ctls; dig_mix->name; dig_mix++) {
3542 kctl = snd_ctl_new1(dig_mix, codec);
3545 kctl->private_value = nid;
3546 err = snd_hda_ctl_add(codec, nid, kctl);
3550 codec->spdif_in_enable =
3551 snd_hda_codec_read(codec, nid, 0,
3552 AC_VERB_GET_DIGI_CONVERT_1, 0) &
3556 EXPORT_SYMBOL_HDA(snd_hda_create_spdif_in_ctls);
3562 /* build a 31bit cache key with the widget id and the command parameter */
3563 #define build_cmd_cache_key(nid, verb) ((verb << 8) | nid)
3564 #define get_cmd_cache_nid(key) ((key) & 0xff)
3565 #define get_cmd_cache_cmd(key) (((key) >> 8) & 0xffff)
3568 * snd_hda_codec_write_cache - send a single command with caching
3569 * @codec: the HDA codec
3570 * @nid: NID to send the command
3571 * @direct: direct flag
3572 * @verb: the verb to send
3573 * @parm: the parameter for the verb
3575 * Send a single command without waiting for response.
3577 * Returns 0 if successful, or a negative error code.
3579 int snd_hda_codec_write_cache(struct hda_codec *codec, hda_nid_t nid,
3580 int direct, unsigned int verb, unsigned int parm)
3583 struct hda_cache_head *c;
3585 unsigned int cache_only;
3587 cache_only = codec->cached_write;
3589 err = snd_hda_codec_write(codec, nid, direct, verb, parm);
3594 /* parm may contain the verb stuff for get/set amp */
3595 verb = verb | (parm >> 8);
3597 key = build_cmd_cache_key(nid, verb);
3598 mutex_lock(&codec->bus->cmd_mutex);
3599 c = get_alloc_hash(&codec->cmd_cache, key);
3602 c->dirty = cache_only;
3604 mutex_unlock(&codec->bus->cmd_mutex);
3607 EXPORT_SYMBOL_HDA(snd_hda_codec_write_cache);
3610 * snd_hda_codec_update_cache - check cache and write the cmd only when needed
3611 * @codec: the HDA codec
3612 * @nid: NID to send the command
3613 * @direct: direct flag
3614 * @verb: the verb to send
3615 * @parm: the parameter for the verb
3617 * This function works like snd_hda_codec_write_cache(), but it doesn't send
3618 * command if the parameter is already identical with the cached value.
3619 * If not, it sends the command and refreshes the cache.
3621 * Returns 0 if successful, or a negative error code.
3623 int snd_hda_codec_update_cache(struct hda_codec *codec, hda_nid_t nid,
3624 int direct, unsigned int verb, unsigned int parm)
3626 struct hda_cache_head *c;
3629 /* parm may contain the verb stuff for get/set amp */
3630 verb = verb | (parm >> 8);
3632 key = build_cmd_cache_key(nid, verb);
3633 mutex_lock(&codec->bus->cmd_mutex);
3634 c = get_hash(&codec->cmd_cache, key);
3635 if (c && c->val == parm) {
3636 mutex_unlock(&codec->bus->cmd_mutex);
3639 mutex_unlock(&codec->bus->cmd_mutex);
3640 return snd_hda_codec_write_cache(codec, nid, direct, verb, parm);
3642 EXPORT_SYMBOL_HDA(snd_hda_codec_update_cache);
3645 * snd_hda_codec_resume_cache - Resume the all commands from the cache
3646 * @codec: HD-audio codec
3648 * Execute all verbs recorded in the command caches to resume.
3650 void snd_hda_codec_resume_cache(struct hda_codec *codec)
3654 mutex_lock(&codec->hash_mutex);
3655 codec->cached_write = 0;
3656 for (i = 0; i < codec->cmd_cache.buf.used; i++) {
3657 struct hda_cache_head *buffer;
3660 buffer = snd_array_elem(&codec->cmd_cache.buf, i);
3667 mutex_unlock(&codec->hash_mutex);
3668 snd_hda_codec_write(codec, get_cmd_cache_nid(key), 0,
3669 get_cmd_cache_cmd(key), buffer->val);
3670 mutex_lock(&codec->hash_mutex);
3672 mutex_unlock(&codec->hash_mutex);
3674 EXPORT_SYMBOL_HDA(snd_hda_codec_resume_cache);
3677 * snd_hda_sequence_write_cache - sequence writes with caching
3678 * @codec: the HDA codec
3679 * @seq: VERB array to send
3681 * Send the commands sequentially from the given array.
3682 * Thte commands are recorded on cache for power-save and resume.
3683 * The array must be terminated with NID=0.
3685 void snd_hda_sequence_write_cache(struct hda_codec *codec,
3686 const struct hda_verb *seq)
3688 for (; seq->nid; seq++)
3689 snd_hda_codec_write_cache(codec, seq->nid, 0, seq->verb,
3692 EXPORT_SYMBOL_HDA(snd_hda_sequence_write_cache);
3695 * snd_hda_codec_flush_cache - Execute all pending (cached) amps / verbs
3696 * @codec: HD-audio codec
3698 void snd_hda_codec_flush_cache(struct hda_codec *codec)
3700 snd_hda_codec_resume_amp(codec);
3701 snd_hda_codec_resume_cache(codec);
3703 EXPORT_SYMBOL_HDA(snd_hda_codec_flush_cache);
3705 void snd_hda_codec_set_power_to_all(struct hda_codec *codec, hda_nid_t fg,
3706 unsigned int power_state)
3708 hda_nid_t nid = codec->start_nid;
3711 for (i = 0; i < codec->num_nodes; i++, nid++) {
3712 unsigned int wcaps = get_wcaps(codec, nid);
3713 unsigned int state = power_state;
3714 if (!(wcaps & AC_WCAP_POWER))
3716 if (codec->power_filter) {
3717 state = codec->power_filter(codec, nid, power_state);
3718 if (state != power_state && power_state == AC_PWRST_D3)
3721 snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_POWER_STATE,
3725 EXPORT_SYMBOL_HDA(snd_hda_codec_set_power_to_all);
3728 * supported power states check
3730 static bool snd_hda_codec_get_supported_ps(struct hda_codec *codec, hda_nid_t fg,
3731 unsigned int power_state)
3733 int sup = snd_hda_param_read(codec, fg, AC_PAR_POWER_STATE);
3737 if (sup & power_state)
3744 * wait until the state is reached, returns the current state
3746 static unsigned int hda_sync_power_state(struct hda_codec *codec,
3748 unsigned int power_state)
3750 unsigned long end_time = jiffies + msecs_to_jiffies(500);
3751 unsigned int state, actual_state;
3754 state = snd_hda_codec_read(codec, fg, 0,
3755 AC_VERB_GET_POWER_STATE, 0);
3756 if (state & AC_PWRST_ERROR)
3758 actual_state = (state >> 4) & 0x0f;
3759 if (actual_state == power_state)
3761 if (time_after_eq(jiffies, end_time))
3763 /* wait until the codec reachs to the target state */
3769 /* don't power down the widget if it controls eapd and EAPD_BTLENABLE is set */
3770 unsigned int snd_hda_codec_eapd_power_filter(struct hda_codec *codec,
3772 unsigned int power_state)
3774 if (power_state == AC_PWRST_D3 &&
3775 get_wcaps_type(get_wcaps(codec, nid)) == AC_WID_PIN &&
3776 (snd_hda_query_pin_caps(codec, nid) & AC_PINCAP_EAPD)) {
3777 int eapd = snd_hda_codec_read(codec, nid, 0,
3778 AC_VERB_GET_EAPD_BTLENABLE, 0);
3784 EXPORT_SYMBOL_HDA(snd_hda_codec_eapd_power_filter);
3787 * set power state of the codec, and return the power state
3789 static unsigned int hda_set_power_state(struct hda_codec *codec,
3790 unsigned int power_state)
3792 hda_nid_t fg = codec->afg ? codec->afg : codec->mfg;
3796 /* this delay seems necessary to avoid click noise at power-down */
3797 if (power_state == AC_PWRST_D3) {
3798 /* transition time less than 10ms for power down */
3799 msleep(codec->epss ? 10 : 100);
3802 /* repeat power states setting at most 10 times*/
3803 for (count = 0; count < 10; count++) {
3804 if (codec->patch_ops.set_power_state)
3805 codec->patch_ops.set_power_state(codec, fg,
3808 snd_hda_codec_read(codec, fg, 0,
3809 AC_VERB_SET_POWER_STATE,
3811 snd_hda_codec_set_power_to_all(codec, fg, power_state);
3813 state = hda_sync_power_state(codec, fg, power_state);
3814 if (!(state & AC_PWRST_ERROR))
3821 /* sync power states of all widgets;
3822 * this is called at the end of codec parsing
3824 static void sync_power_up_states(struct hda_codec *codec)
3826 hda_nid_t nid = codec->start_nid;
3829 /* don't care if no filter is used */
3830 if (!codec->power_filter)
3833 for (i = 0; i < codec->num_nodes; i++, nid++) {
3834 unsigned int wcaps = get_wcaps(codec, nid);
3835 unsigned int target;
3836 if (!(wcaps & AC_WCAP_POWER))
3838 target = codec->power_filter(codec, nid, AC_PWRST_D0);
3839 if (target == AC_PWRST_D0)
3841 if (!snd_hda_check_power_state(codec, nid, target))
3842 snd_hda_codec_write(codec, nid, 0,
3843 AC_VERB_SET_POWER_STATE, target);
3847 #ifdef CONFIG_SND_HDA_HWDEP
3848 /* execute additional init verbs */
3849 static void hda_exec_init_verbs(struct hda_codec *codec)
3851 if (codec->init_verbs.list)
3852 snd_hda_sequence_write(codec, codec->init_verbs.list);
3855 static inline void hda_exec_init_verbs(struct hda_codec *codec) {}
3860 * call suspend and power-down; used both from PM and power-save
3861 * this function returns the power state in the end
3863 static unsigned int hda_call_codec_suspend(struct hda_codec *codec, bool in_wq)
3869 if (codec->patch_ops.suspend)
3870 codec->patch_ops.suspend(codec);
3871 hda_cleanup_all_streams(codec);
3872 state = hda_set_power_state(codec, AC_PWRST_D3);
3873 /* Cancel delayed work if we aren't currently running from it. */
3875 cancel_delayed_work_sync(&codec->power_work);
3876 spin_lock(&codec->power_lock);
3877 snd_hda_update_power_acct(codec);
3878 trace_hda_power_down(codec);
3879 codec->power_on = 0;
3880 codec->power_transition = 0;
3881 codec->power_jiffies = jiffies;
3882 spin_unlock(&codec->power_lock);
3887 /* mark all entries of cmd and amp caches dirty */
3888 static void hda_mark_cmd_cache_dirty(struct hda_codec *codec)
3891 for (i = 0; i < codec->cmd_cache.buf.used; i++) {
3892 struct hda_cache_head *cmd;
3893 cmd = snd_array_elem(&codec->cmd_cache.buf, i);
3896 for (i = 0; i < codec->amp_cache.buf.used; i++) {
3897 struct hda_amp_info *amp;
3898 amp = snd_array_elem(&codec->amp_cache.buf, i);
3899 amp->head.dirty = 1;
3904 * kick up codec; used both from PM and power-save
3906 static void hda_call_codec_resume(struct hda_codec *codec)
3910 hda_mark_cmd_cache_dirty(codec);
3912 /* set as if powered on for avoiding re-entering the resume
3913 * in the resume / power-save sequence
3915 hda_keep_power_on(codec);
3916 hda_set_power_state(codec, AC_PWRST_D0);
3917 restore_shutup_pins(codec);
3918 hda_exec_init_verbs(codec);
3919 snd_hda_jack_set_dirty_all(codec);
3920 if (codec->patch_ops.resume)
3921 codec->patch_ops.resume(codec);
3923 if (codec->patch_ops.init)
3924 codec->patch_ops.init(codec);
3925 snd_hda_codec_resume_amp(codec);
3926 snd_hda_codec_resume_cache(codec);
3929 if (codec->jackpoll_interval)
3930 hda_jackpoll_work(&codec->jackpoll_work.work);
3932 snd_hda_jack_report_sync(codec);
3935 snd_hda_power_down(codec); /* flag down before returning */
3937 #endif /* CONFIG_PM */
3941 * snd_hda_build_controls - build mixer controls
3944 * Creates mixer controls for each codec included in the bus.
3946 * Returns 0 if successful, otherwise a negative error code.
3948 int snd_hda_build_controls(struct hda_bus *bus)
3950 struct hda_codec *codec;
3952 list_for_each_entry(codec, &bus->codec_list, list) {
3953 int err = snd_hda_codec_build_controls(codec);
3955 printk(KERN_ERR "hda_codec: cannot build controls "
3956 "for #%d (error %d)\n", codec->addr, err);
3957 err = snd_hda_codec_reset(codec);
3960 "hda_codec: cannot revert codec\n");
3967 EXPORT_SYMBOL_HDA(snd_hda_build_controls);
3970 * add standard channel maps if not specified
3972 static int add_std_chmaps(struct hda_codec *codec)
3976 for (i = 0; i < codec->num_pcms; i++) {
3977 for (str = 0; str < 2; str++) {
3978 struct snd_pcm *pcm = codec->pcm_info[i].pcm;
3979 struct hda_pcm_stream *hinfo =
3980 &codec->pcm_info[i].stream[str];
3981 struct snd_pcm_chmap *chmap;
3982 const struct snd_pcm_chmap_elem *elem;
3984 if (codec->pcm_info[i].own_chmap)
3986 if (!pcm || !hinfo->substreams)
3988 elem = hinfo->chmap ? hinfo->chmap : snd_pcm_std_chmaps;
3989 err = snd_pcm_add_chmap_ctls(pcm, str, elem,
3990 hinfo->channels_max,
3994 chmap->channel_mask = SND_PCM_CHMAP_MASK_2468;
4000 /* default channel maps for 2.1 speakers;
4001 * since HD-audio supports only stereo, odd number channels are omitted
4003 const struct snd_pcm_chmap_elem snd_pcm_2_1_chmaps[] = {
4005 .map = { SNDRV_CHMAP_FL, SNDRV_CHMAP_FR } },
4007 .map = { SNDRV_CHMAP_FL, SNDRV_CHMAP_FR,
4008 SNDRV_CHMAP_LFE, SNDRV_CHMAP_LFE } },
4011 EXPORT_SYMBOL_GPL(snd_pcm_2_1_chmaps);
4013 int snd_hda_codec_build_controls(struct hda_codec *codec)
4016 hda_exec_init_verbs(codec);
4017 /* continue to initialize... */
4018 if (codec->patch_ops.init)
4019 err = codec->patch_ops.init(codec);
4020 if (!err && codec->patch_ops.build_controls)
4021 err = codec->patch_ops.build_controls(codec);
4025 /* we create chmaps here instead of build_pcms */
4026 err = add_std_chmaps(codec);
4030 if (codec->jackpoll_interval)
4031 hda_jackpoll_work(&codec->jackpoll_work.work);
4033 snd_hda_jack_report_sync(codec); /* call at the last init point */
4034 sync_power_up_states(codec);
4041 struct hda_rate_tbl {
4043 unsigned int alsa_bits;
4044 unsigned int hda_fmt;
4047 /* rate = base * mult / div */
4048 #define HDA_RATE(base, mult, div) \
4049 (AC_FMT_BASE_##base##K | (((mult) - 1) << AC_FMT_MULT_SHIFT) | \
4050 (((div) - 1) << AC_FMT_DIV_SHIFT))
4052 static struct hda_rate_tbl rate_bits[] = {
4053 /* rate in Hz, ALSA rate bitmask, HDA format value */
4055 /* autodetected value used in snd_hda_query_supported_pcm */
4056 { 8000, SNDRV_PCM_RATE_8000, HDA_RATE(48, 1, 6) },
4057 { 11025, SNDRV_PCM_RATE_11025, HDA_RATE(44, 1, 4) },
4058 { 16000, SNDRV_PCM_RATE_16000, HDA_RATE(48, 1, 3) },
4059 { 22050, SNDRV_PCM_RATE_22050, HDA_RATE(44, 1, 2) },
4060 { 32000, SNDRV_PCM_RATE_32000, HDA_RATE(48, 2, 3) },
4061 { 44100, SNDRV_PCM_RATE_44100, HDA_RATE(44, 1, 1) },
4062 { 48000, SNDRV_PCM_RATE_48000, HDA_RATE(48, 1, 1) },
4063 { 88200, SNDRV_PCM_RATE_88200, HDA_RATE(44, 2, 1) },
4064 { 96000, SNDRV_PCM_RATE_96000, HDA_RATE(48, 2, 1) },
4065 { 176400, SNDRV_PCM_RATE_176400, HDA_RATE(44, 4, 1) },
4066 { 192000, SNDRV_PCM_RATE_192000, HDA_RATE(48, 4, 1) },
4067 #define AC_PAR_PCM_RATE_BITS 11
4068 /* up to bits 10, 384kHZ isn't supported properly */
4070 /* not autodetected value */
4071 { 9600, SNDRV_PCM_RATE_KNOT, HDA_RATE(48, 1, 5) },
4073 { 0 } /* terminator */
4077 * snd_hda_calc_stream_format - calculate format bitset
4078 * @rate: the sample rate
4079 * @channels: the number of channels
4080 * @format: the PCM format (SNDRV_PCM_FORMAT_XXX)
4081 * @maxbps: the max. bps
4083 * Calculate the format bitset from the given rate, channels and th PCM format.
4085 * Return zero if invalid.
4087 unsigned int snd_hda_calc_stream_format(unsigned int rate,
4088 unsigned int channels,
4089 unsigned int format,
4090 unsigned int maxbps,
4091 unsigned short spdif_ctls)
4094 unsigned int val = 0;
4096 for (i = 0; rate_bits[i].hz; i++)
4097 if (rate_bits[i].hz == rate) {
4098 val = rate_bits[i].hda_fmt;
4101 if (!rate_bits[i].hz) {
4102 snd_printdd("invalid rate %d\n", rate);
4106 if (channels == 0 || channels > 8) {
4107 snd_printdd("invalid channels %d\n", channels);
4110 val |= channels - 1;
4112 switch (snd_pcm_format_width(format)) {
4114 val |= AC_FMT_BITS_8;
4117 val |= AC_FMT_BITS_16;
4122 if (maxbps >= 32 || format == SNDRV_PCM_FORMAT_FLOAT_LE)
4123 val |= AC_FMT_BITS_32;
4124 else if (maxbps >= 24)
4125 val |= AC_FMT_BITS_24;
4127 val |= AC_FMT_BITS_20;
4130 snd_printdd("invalid format width %d\n",
4131 snd_pcm_format_width(format));
4135 if (spdif_ctls & AC_DIG1_NONAUDIO)
4136 val |= AC_FMT_TYPE_NON_PCM;
4140 EXPORT_SYMBOL_HDA(snd_hda_calc_stream_format);
4142 static unsigned int get_pcm_param(struct hda_codec *codec, hda_nid_t nid,
4145 unsigned int val = 0;
4146 if (nid != codec->afg &&
4147 (get_wcaps(codec, nid) & AC_WCAP_FORMAT_OVRD))
4148 val = snd_hda_param_read(codec, nid, AC_PAR_PCM);
4149 if (!val || val == -1)
4150 val = snd_hda_param_read(codec, codec->afg, AC_PAR_PCM);
4151 if (!val || val == -1)
4156 static unsigned int query_pcm_param(struct hda_codec *codec, hda_nid_t nid)
4158 return query_caps_hash(codec, nid, 0, HDA_HASH_PARPCM_KEY(nid),
4162 static unsigned int get_stream_param(struct hda_codec *codec, hda_nid_t nid,
4165 unsigned int streams = snd_hda_param_read(codec, nid, AC_PAR_STREAM);
4166 if (!streams || streams == -1)
4167 streams = snd_hda_param_read(codec, codec->afg, AC_PAR_STREAM);
4168 if (!streams || streams == -1)
4173 static unsigned int query_stream_param(struct hda_codec *codec, hda_nid_t nid)
4175 return query_caps_hash(codec, nid, 0, HDA_HASH_PARSTR_KEY(nid),
4180 * snd_hda_query_supported_pcm - query the supported PCM rates and formats
4181 * @codec: the HDA codec
4182 * @nid: NID to query
4183 * @ratesp: the pointer to store the detected rate bitflags
4184 * @formatsp: the pointer to store the detected formats
4185 * @bpsp: the pointer to store the detected format widths
4187 * Queries the supported PCM rates and formats. The NULL @ratesp, @formatsp
4188 * or @bsps argument is ignored.
4190 * Returns 0 if successful, otherwise a negative error code.
4192 int snd_hda_query_supported_pcm(struct hda_codec *codec, hda_nid_t nid,
4193 u32 *ratesp, u64 *formatsp, unsigned int *bpsp)
4195 unsigned int i, val, wcaps;
4197 wcaps = get_wcaps(codec, nid);
4198 val = query_pcm_param(codec, nid);
4202 for (i = 0; i < AC_PAR_PCM_RATE_BITS; i++) {
4204 rates |= rate_bits[i].alsa_bits;
4207 snd_printk(KERN_ERR "hda_codec: rates == 0 "
4208 "(nid=0x%x, val=0x%x, ovrd=%i)\n",
4210 (wcaps & AC_WCAP_FORMAT_OVRD) ? 1 : 0);
4216 if (formatsp || bpsp) {
4218 unsigned int streams, bps;
4220 streams = query_stream_param(codec, nid);
4225 if (streams & AC_SUPFMT_PCM) {
4226 if (val & AC_SUPPCM_BITS_8) {
4227 formats |= SNDRV_PCM_FMTBIT_U8;
4230 if (val & AC_SUPPCM_BITS_16) {
4231 formats |= SNDRV_PCM_FMTBIT_S16_LE;
4234 if (wcaps & AC_WCAP_DIGITAL) {
4235 if (val & AC_SUPPCM_BITS_32)
4236 formats |= SNDRV_PCM_FMTBIT_IEC958_SUBFRAME_LE;
4237 if (val & (AC_SUPPCM_BITS_20|AC_SUPPCM_BITS_24))
4238 formats |= SNDRV_PCM_FMTBIT_S32_LE;
4239 if (val & AC_SUPPCM_BITS_24)
4241 else if (val & AC_SUPPCM_BITS_20)
4243 } else if (val & (AC_SUPPCM_BITS_20|AC_SUPPCM_BITS_24|
4244 AC_SUPPCM_BITS_32)) {
4245 formats |= SNDRV_PCM_FMTBIT_S32_LE;
4246 if (val & AC_SUPPCM_BITS_32)
4248 else if (val & AC_SUPPCM_BITS_24)
4250 else if (val & AC_SUPPCM_BITS_20)
4254 #if 0 /* FIXME: CS4206 doesn't work, which is the only codec supporting float */
4255 if (streams & AC_SUPFMT_FLOAT32) {
4256 formats |= SNDRV_PCM_FMTBIT_FLOAT_LE;
4261 if (streams == AC_SUPFMT_AC3) {
4262 /* should be exclusive */
4263 /* temporary hack: we have still no proper support
4264 * for the direct AC3 stream...
4266 formats |= SNDRV_PCM_FMTBIT_U8;
4270 snd_printk(KERN_ERR "hda_codec: formats == 0 "
4271 "(nid=0x%x, val=0x%x, ovrd=%i, "
4274 (wcaps & AC_WCAP_FORMAT_OVRD) ? 1 : 0,
4279 *formatsp = formats;
4286 EXPORT_SYMBOL_HDA(snd_hda_query_supported_pcm);
4289 * snd_hda_is_supported_format - Check the validity of the format
4290 * @codec: HD-audio codec
4291 * @nid: NID to check
4292 * @format: the HD-audio format value to check
4294 * Check whether the given node supports the format value.
4296 * Returns 1 if supported, 0 if not.
4298 int snd_hda_is_supported_format(struct hda_codec *codec, hda_nid_t nid,
4299 unsigned int format)
4302 unsigned int val = 0, rate, stream;
4304 val = query_pcm_param(codec, nid);
4308 rate = format & 0xff00;
4309 for (i = 0; i < AC_PAR_PCM_RATE_BITS; i++)
4310 if (rate_bits[i].hda_fmt == rate) {
4315 if (i >= AC_PAR_PCM_RATE_BITS)
4318 stream = query_stream_param(codec, nid);
4322 if (stream & AC_SUPFMT_PCM) {
4323 switch (format & 0xf0) {
4325 if (!(val & AC_SUPPCM_BITS_8))
4329 if (!(val & AC_SUPPCM_BITS_16))
4333 if (!(val & AC_SUPPCM_BITS_20))
4337 if (!(val & AC_SUPPCM_BITS_24))
4341 if (!(val & AC_SUPPCM_BITS_32))
4348 /* FIXME: check for float32 and AC3? */
4353 EXPORT_SYMBOL_HDA(snd_hda_is_supported_format);
4358 static int hda_pcm_default_open_close(struct hda_pcm_stream *hinfo,
4359 struct hda_codec *codec,
4360 struct snd_pcm_substream *substream)
4365 static int hda_pcm_default_prepare(struct hda_pcm_stream *hinfo,
4366 struct hda_codec *codec,
4367 unsigned int stream_tag,
4368 unsigned int format,
4369 struct snd_pcm_substream *substream)
4371 snd_hda_codec_setup_stream(codec, hinfo->nid, stream_tag, 0, format);
4375 static int hda_pcm_default_cleanup(struct hda_pcm_stream *hinfo,
4376 struct hda_codec *codec,
4377 struct snd_pcm_substream *substream)
4379 snd_hda_codec_cleanup_stream(codec, hinfo->nid);
4383 static int set_pcm_default_values(struct hda_codec *codec,
4384 struct hda_pcm_stream *info)
4388 /* query support PCM information from the given NID */
4389 if (info->nid && (!info->rates || !info->formats)) {
4390 err = snd_hda_query_supported_pcm(codec, info->nid,
4391 info->rates ? NULL : &info->rates,
4392 info->formats ? NULL : &info->formats,
4393 info->maxbps ? NULL : &info->maxbps);
4397 if (info->ops.open == NULL)
4398 info->ops.open = hda_pcm_default_open_close;
4399 if (info->ops.close == NULL)
4400 info->ops.close = hda_pcm_default_open_close;
4401 if (info->ops.prepare == NULL) {
4402 if (snd_BUG_ON(!info->nid))
4404 info->ops.prepare = hda_pcm_default_prepare;
4406 if (info->ops.cleanup == NULL) {
4407 if (snd_BUG_ON(!info->nid))
4409 info->ops.cleanup = hda_pcm_default_cleanup;
4415 * codec prepare/cleanup entries
4417 int snd_hda_codec_prepare(struct hda_codec *codec,
4418 struct hda_pcm_stream *hinfo,
4419 unsigned int stream,
4420 unsigned int format,
4421 struct snd_pcm_substream *substream)
4424 mutex_lock(&codec->bus->prepare_mutex);
4425 ret = hinfo->ops.prepare(hinfo, codec, stream, format, substream);
4427 purify_inactive_streams(codec);
4428 mutex_unlock(&codec->bus->prepare_mutex);
4431 EXPORT_SYMBOL_HDA(snd_hda_codec_prepare);
4433 void snd_hda_codec_cleanup(struct hda_codec *codec,
4434 struct hda_pcm_stream *hinfo,
4435 struct snd_pcm_substream *substream)
4437 mutex_lock(&codec->bus->prepare_mutex);
4438 hinfo->ops.cleanup(hinfo, codec, substream);
4439 mutex_unlock(&codec->bus->prepare_mutex);
4441 EXPORT_SYMBOL_HDA(snd_hda_codec_cleanup);
4444 const char *snd_hda_pcm_type_name[HDA_PCM_NTYPES] = {
4445 "Audio", "SPDIF", "HDMI", "Modem"
4449 * get the empty PCM device number to assign
4451 * note the max device number is limited by HDA_MAX_PCMS, currently 10
4453 static int get_empty_pcm_device(struct hda_bus *bus, int type)
4455 /* audio device indices; not linear to keep compatibility */
4456 static int audio_idx[HDA_PCM_NTYPES][5] = {
4457 [HDA_PCM_TYPE_AUDIO] = { 0, 2, 4, 5, -1 },
4458 [HDA_PCM_TYPE_SPDIF] = { 1, -1 },
4459 [HDA_PCM_TYPE_HDMI] = { 3, 7, 8, 9, -1 },
4460 [HDA_PCM_TYPE_MODEM] = { 6, -1 },
4464 if (type >= HDA_PCM_NTYPES) {
4465 snd_printk(KERN_WARNING "Invalid PCM type %d\n", type);
4469 for (i = 0; audio_idx[type][i] >= 0 ; i++)
4470 if (!test_and_set_bit(audio_idx[type][i], bus->pcm_dev_bits))
4471 return audio_idx[type][i];
4473 /* non-fixed slots starting from 10 */
4474 for (i = 10; i < 32; i++) {
4475 if (!test_and_set_bit(i, bus->pcm_dev_bits))
4479 snd_printk(KERN_WARNING "Too many %s devices\n",
4480 snd_hda_pcm_type_name[type]);
4485 * attach a new PCM stream
4487 static int snd_hda_attach_pcm(struct hda_codec *codec, struct hda_pcm *pcm)
4489 struct hda_bus *bus = codec->bus;
4490 struct hda_pcm_stream *info;
4493 if (snd_BUG_ON(!pcm->name))
4495 for (stream = 0; stream < 2; stream++) {
4496 info = &pcm->stream[stream];
4497 if (info->substreams) {
4498 err = set_pcm_default_values(codec, info);
4503 return bus->ops.attach_pcm(bus, codec, pcm);
4506 /* assign all PCMs of the given codec */
4507 int snd_hda_codec_build_pcms(struct hda_codec *codec)
4512 if (!codec->num_pcms) {
4513 if (!codec->patch_ops.build_pcms)
4515 err = codec->patch_ops.build_pcms(codec);
4517 printk(KERN_ERR "hda_codec: cannot build PCMs"
4518 "for #%d (error %d)\n", codec->addr, err);
4519 err = snd_hda_codec_reset(codec);
4522 "hda_codec: cannot revert codec\n");
4527 for (pcm = 0; pcm < codec->num_pcms; pcm++) {
4528 struct hda_pcm *cpcm = &codec->pcm_info[pcm];
4531 if (!cpcm->stream[0].substreams && !cpcm->stream[1].substreams)
4532 continue; /* no substreams assigned */
4535 dev = get_empty_pcm_device(codec->bus, cpcm->pcm_type);
4537 continue; /* no fatal error */
4539 err = snd_hda_attach_pcm(codec, cpcm);
4541 printk(KERN_ERR "hda_codec: cannot attach "
4542 "PCM stream %d for codec #%d\n",
4544 continue; /* no fatal error */
4552 * snd_hda_build_pcms - build PCM information
4555 * Create PCM information for each codec included in the bus.
4557 * The build_pcms codec patch is requested to set up codec->num_pcms and
4558 * codec->pcm_info properly. The array is referred by the top-level driver
4559 * to create its PCM instances.
4560 * The allocated codec->pcm_info should be released in codec->patch_ops.free
4563 * At least, substreams, channels_min and channels_max must be filled for
4564 * each stream. substreams = 0 indicates that the stream doesn't exist.
4565 * When rates and/or formats are zero, the supported values are queried
4566 * from the given nid. The nid is used also by the default ops.prepare
4567 * and ops.cleanup callbacks.
4569 * The driver needs to call ops.open in its open callback. Similarly,
4570 * ops.close is supposed to be called in the close callback.
4571 * ops.prepare should be called in the prepare or hw_params callback
4572 * with the proper parameters for set up.
4573 * ops.cleanup should be called in hw_free for clean up of streams.
4575 * This function returns 0 if successful, or a negative error code.
4577 int snd_hda_build_pcms(struct hda_bus *bus)
4579 struct hda_codec *codec;
4581 list_for_each_entry(codec, &bus->codec_list, list) {
4582 int err = snd_hda_codec_build_pcms(codec);
4588 EXPORT_SYMBOL_HDA(snd_hda_build_pcms);
4591 * snd_hda_check_board_config - compare the current codec with the config table
4592 * @codec: the HDA codec
4593 * @num_configs: number of config enums
4594 * @models: array of model name strings
4595 * @tbl: configuration table, terminated by null entries
4597 * Compares the modelname or PCI subsystem id of the current codec with the
4598 * given configuration table. If a matching entry is found, returns its
4599 * config value (supposed to be 0 or positive).
4601 * If no entries are matching, the function returns a negative value.
4603 int snd_hda_check_board_config(struct hda_codec *codec,
4604 int num_configs, const char * const *models,
4605 const struct snd_pci_quirk *tbl)
4607 if (codec->modelname && models) {
4609 for (i = 0; i < num_configs; i++) {
4611 !strcmp(codec->modelname, models[i])) {
4612 snd_printd(KERN_INFO "hda_codec: model '%s' is "
4613 "selected\n", models[i]);
4619 if (!codec->bus->pci || !tbl)
4622 tbl = snd_pci_quirk_lookup(codec->bus->pci, tbl);
4625 if (tbl->value >= 0 && tbl->value < num_configs) {
4626 #ifdef CONFIG_SND_DEBUG_VERBOSE
4628 const char *model = NULL;
4630 model = models[tbl->value];
4632 sprintf(tmp, "#%d", tbl->value);
4635 snd_printdd(KERN_INFO "hda_codec: model '%s' is selected "
4636 "for config %x:%x (%s)\n",
4637 model, tbl->subvendor, tbl->subdevice,
4638 (tbl->name ? tbl->name : "Unknown device"));
4644 EXPORT_SYMBOL_HDA(snd_hda_check_board_config);
4647 * snd_hda_check_board_codec_sid_config - compare the current codec
4648 subsystem ID with the
4651 This is important for Gateway notebooks with SB450 HDA Audio
4652 where the vendor ID of the PCI device is:
4653 ATI Technologies Inc SB450 HDA Audio [1002:437b]
4654 and the vendor/subvendor are found only at the codec.
4656 * @codec: the HDA codec
4657 * @num_configs: number of config enums
4658 * @models: array of model name strings
4659 * @tbl: configuration table, terminated by null entries
4661 * Compares the modelname or PCI subsystem id of the current codec with the
4662 * given configuration table. If a matching entry is found, returns its
4663 * config value (supposed to be 0 or positive).
4665 * If no entries are matching, the function returns a negative value.
4667 int snd_hda_check_board_codec_sid_config(struct hda_codec *codec,
4668 int num_configs, const char * const *models,
4669 const struct snd_pci_quirk *tbl)
4671 const struct snd_pci_quirk *q;
4673 /* Search for codec ID */
4674 for (q = tbl; q->subvendor; q++) {
4675 unsigned int mask = 0xffff0000 | q->subdevice_mask;
4676 unsigned int id = (q->subdevice | (q->subvendor << 16)) & mask;
4677 if ((codec->subsystem_id & mask) == id)
4686 if (tbl->value >= 0 && tbl->value < num_configs) {
4687 #ifdef CONFIG_SND_DEBUG_VERBOSE
4689 const char *model = NULL;
4691 model = models[tbl->value];
4693 sprintf(tmp, "#%d", tbl->value);
4696 snd_printdd(KERN_INFO "hda_codec: model '%s' is selected "
4697 "for config %x:%x (%s)\n",
4698 model, tbl->subvendor, tbl->subdevice,
4699 (tbl->name ? tbl->name : "Unknown device"));
4705 EXPORT_SYMBOL_HDA(snd_hda_check_board_codec_sid_config);
4708 * snd_hda_add_new_ctls - create controls from the array
4709 * @codec: the HDA codec
4710 * @knew: the array of struct snd_kcontrol_new
4712 * This helper function creates and add new controls in the given array.
4713 * The array must be terminated with an empty entry as terminator.
4715 * Returns 0 if successful, or a negative error code.
4717 int snd_hda_add_new_ctls(struct hda_codec *codec,
4718 const struct snd_kcontrol_new *knew)
4722 for (; knew->name; knew++) {
4723 struct snd_kcontrol *kctl;
4724 int addr = 0, idx = 0;
4725 if (knew->iface == -1) /* skip this codec private value */
4728 kctl = snd_ctl_new1(knew, codec);
4732 kctl->id.device = addr;
4734 kctl->id.index = idx;
4735 err = snd_hda_ctl_add(codec, 0, kctl);
4738 /* try first with another device index corresponding to
4739 * the codec addr; if it still fails (or it's the
4740 * primary codec), then try another control index
4742 if (!addr && codec->addr)
4744 else if (!idx && !knew->index) {
4745 idx = find_empty_mixer_ctl_idx(codec,
4755 EXPORT_SYMBOL_HDA(snd_hda_add_new_ctls);
4758 static void hda_power_work(struct work_struct *work)
4760 struct hda_codec *codec =
4761 container_of(work, struct hda_codec, power_work.work);
4762 struct hda_bus *bus = codec->bus;
4765 spin_lock(&codec->power_lock);
4766 if (codec->power_transition > 0) { /* during power-up sequence? */
4767 spin_unlock(&codec->power_lock);
4770 if (!codec->power_on || codec->power_count) {
4771 codec->power_transition = 0;
4772 spin_unlock(&codec->power_lock);
4775 spin_unlock(&codec->power_lock);
4777 state = hda_call_codec_suspend(codec, true);
4778 codec->pm_down_notified = 0;
4779 if (!bus->power_keep_link_on && (state & AC_PWRST_CLK_STOP_OK)) {
4780 codec->pm_down_notified = 1;
4781 hda_call_pm_notify(bus, false);
4785 static void hda_keep_power_on(struct hda_codec *codec)
4787 spin_lock(&codec->power_lock);
4788 codec->power_count++;
4789 codec->power_on = 1;
4790 codec->power_jiffies = jiffies;
4791 spin_unlock(&codec->power_lock);
4794 /* update the power on/off account with the current jiffies */
4795 void snd_hda_update_power_acct(struct hda_codec *codec)
4797 unsigned long delta = jiffies - codec->power_jiffies;
4798 if (codec->power_on)
4799 codec->power_on_acct += delta;
4801 codec->power_off_acct += delta;
4802 codec->power_jiffies += delta;
4805 /* Transition to powered up, if wait_power_down then wait for a pending
4806 * transition to D3 to complete. A pending D3 transition is indicated
4807 * with power_transition == -1. */
4808 /* call this with codec->power_lock held! */
4809 static void __snd_hda_power_up(struct hda_codec *codec, bool wait_power_down)
4811 struct hda_bus *bus = codec->bus;
4813 /* Return if power_on or transitioning to power_on, unless currently
4815 if ((codec->power_on || codec->power_transition > 0) &&
4816 !(wait_power_down && codec->power_transition < 0))
4818 spin_unlock(&codec->power_lock);
4820 cancel_delayed_work_sync(&codec->power_work);
4822 spin_lock(&codec->power_lock);
4823 /* If the power down delayed work was cancelled above before starting,
4824 * then there is no need to go through power up here.
4826 if (codec->power_on) {
4827 if (codec->power_transition < 0)
4828 codec->power_transition = 0;
4832 trace_hda_power_up(codec);
4833 snd_hda_update_power_acct(codec);
4834 codec->power_on = 1;
4835 codec->power_jiffies = jiffies;
4836 codec->power_transition = 1; /* avoid reentrance */
4837 spin_unlock(&codec->power_lock);
4839 if (codec->pm_down_notified) {
4840 codec->pm_down_notified = 0;
4841 hda_call_pm_notify(bus, true);
4844 hda_call_codec_resume(codec);
4846 spin_lock(&codec->power_lock);
4847 codec->power_transition = 0;
4850 #define power_save(codec) \
4851 ((codec)->bus->power_save ? *(codec)->bus->power_save : 0)
4853 /* Transition to powered down */
4854 static void __snd_hda_power_down(struct hda_codec *codec)
4856 if (!codec->power_on || codec->power_count || codec->power_transition)
4859 if (power_save(codec)) {
4860 codec->power_transition = -1; /* avoid reentrance */
4861 queue_delayed_work(codec->bus->workq, &codec->power_work,
4862 msecs_to_jiffies(power_save(codec) * 1000));
4867 * snd_hda_power_save - Power-up/down/sync the codec
4868 * @codec: HD-audio codec
4869 * @delta: the counter delta to change
4871 * Change the power-up counter via @delta, and power up or down the hardware
4872 * appropriately. For the power-down, queue to the delayed action.
4873 * Passing zero to @delta means to synchronize the power state.
4875 void snd_hda_power_save(struct hda_codec *codec, int delta, bool d3wait)
4877 spin_lock(&codec->power_lock);
4878 codec->power_count += delta;
4879 trace_hda_power_count(codec);
4881 __snd_hda_power_up(codec, d3wait);
4883 __snd_hda_power_down(codec);
4884 spin_unlock(&codec->power_lock);
4886 EXPORT_SYMBOL_HDA(snd_hda_power_save);
4889 * snd_hda_check_amp_list_power - Check the amp list and update the power
4890 * @codec: HD-audio codec
4891 * @check: the object containing an AMP list and the status
4892 * @nid: NID to check / update
4894 * Check whether the given NID is in the amp list. If it's in the list,
4895 * check the current AMP status, and update the the power-status according
4896 * to the mute status.
4898 * This function is supposed to be set or called from the check_power_status
4901 int snd_hda_check_amp_list_power(struct hda_codec *codec,
4902 struct hda_loopback_check *check,
4905 const struct hda_amp_list *p;
4908 if (!check->amplist)
4910 for (p = check->amplist; p->nid; p++) {
4915 return 0; /* nothing changed */
4917 for (p = check->amplist; p->nid; p++) {
4918 for (ch = 0; ch < 2; ch++) {
4919 v = snd_hda_codec_amp_read(codec, p->nid, ch, p->dir,
4921 if (!(v & HDA_AMP_MUTE) && v > 0) {
4922 if (!check->power_on) {
4923 check->power_on = 1;
4924 snd_hda_power_up(codec);
4930 if (check->power_on) {
4931 check->power_on = 0;
4932 snd_hda_power_down(codec);
4936 EXPORT_SYMBOL_HDA(snd_hda_check_amp_list_power);
4940 * Channel mode helper
4944 * snd_hda_ch_mode_info - Info callback helper for the channel mode enum
4946 int snd_hda_ch_mode_info(struct hda_codec *codec,
4947 struct snd_ctl_elem_info *uinfo,
4948 const struct hda_channel_mode *chmode,
4951 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
4953 uinfo->value.enumerated.items = num_chmodes;
4954 if (uinfo->value.enumerated.item >= num_chmodes)
4955 uinfo->value.enumerated.item = num_chmodes - 1;
4956 sprintf(uinfo->value.enumerated.name, "%dch",
4957 chmode[uinfo->value.enumerated.item].channels);
4960 EXPORT_SYMBOL_HDA(snd_hda_ch_mode_info);
4963 * snd_hda_ch_mode_get - Get callback helper for the channel mode enum
4965 int snd_hda_ch_mode_get(struct hda_codec *codec,
4966 struct snd_ctl_elem_value *ucontrol,
4967 const struct hda_channel_mode *chmode,
4973 for (i = 0; i < num_chmodes; i++) {
4974 if (max_channels == chmode[i].channels) {
4975 ucontrol->value.enumerated.item[0] = i;
4981 EXPORT_SYMBOL_HDA(snd_hda_ch_mode_get);
4984 * snd_hda_ch_mode_put - Put callback helper for the channel mode enum
4986 int snd_hda_ch_mode_put(struct hda_codec *codec,
4987 struct snd_ctl_elem_value *ucontrol,
4988 const struct hda_channel_mode *chmode,
4994 mode = ucontrol->value.enumerated.item[0];
4995 if (mode >= num_chmodes)
4997 if (*max_channelsp == chmode[mode].channels)
4999 /* change the current channel setting */
5000 *max_channelsp = chmode[mode].channels;
5001 if (chmode[mode].sequence)
5002 snd_hda_sequence_write_cache(codec, chmode[mode].sequence);
5005 EXPORT_SYMBOL_HDA(snd_hda_ch_mode_put);
5012 * snd_hda_input_mux_info_info - Info callback helper for the input-mux enum
5014 int snd_hda_input_mux_info(const struct hda_input_mux *imux,
5015 struct snd_ctl_elem_info *uinfo)
5019 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
5021 uinfo->value.enumerated.items = imux->num_items;
5022 if (!imux->num_items)
5024 index = uinfo->value.enumerated.item;
5025 if (index >= imux->num_items)
5026 index = imux->num_items - 1;
5027 strcpy(uinfo->value.enumerated.name, imux->items[index].label);
5030 EXPORT_SYMBOL_HDA(snd_hda_input_mux_info);
5033 * snd_hda_input_mux_info_put - Put callback helper for the input-mux enum
5035 int snd_hda_input_mux_put(struct hda_codec *codec,
5036 const struct hda_input_mux *imux,
5037 struct snd_ctl_elem_value *ucontrol,
5039 unsigned int *cur_val)
5043 if (!imux->num_items)
5045 idx = ucontrol->value.enumerated.item[0];
5046 if (idx >= imux->num_items)
5047 idx = imux->num_items - 1;
5048 if (*cur_val == idx)
5050 snd_hda_codec_write_cache(codec, nid, 0, AC_VERB_SET_CONNECT_SEL,
5051 imux->items[idx].index);
5055 EXPORT_SYMBOL_HDA(snd_hda_input_mux_put);
5059 * process kcontrol info callback of a simple string enum array
5060 * when @num_items is 0 or @texts is NULL, assume a boolean enum array
5062 int snd_hda_enum_helper_info(struct snd_kcontrol *kcontrol,
5063 struct snd_ctl_elem_info *uinfo,
5064 int num_items, const char * const *texts)
5066 static const char * const texts_default[] = {
5067 "Disabled", "Enabled"
5070 if (!texts || !num_items) {
5072 texts = texts_default;
5075 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
5077 uinfo->value.enumerated.items = num_items;
5078 if (uinfo->value.enumerated.item >= uinfo->value.enumerated.items)
5079 uinfo->value.enumerated.item = uinfo->value.enumerated.items - 1;
5080 strcpy(uinfo->value.enumerated.name,
5081 texts[uinfo->value.enumerated.item]);
5084 EXPORT_SYMBOL_HDA(snd_hda_enum_helper_info);
5087 * Multi-channel / digital-out PCM helper functions
5090 /* setup SPDIF output stream */
5091 static void setup_dig_out_stream(struct hda_codec *codec, hda_nid_t nid,
5092 unsigned int stream_tag, unsigned int format)
5094 struct hda_spdif_out *spdif;
5095 unsigned int curr_fmt;
5098 spdif = snd_hda_spdif_out_of_nid(codec, nid);
5099 curr_fmt = snd_hda_codec_read(codec, nid, 0,
5100 AC_VERB_GET_STREAM_FORMAT, 0);
5101 reset = codec->spdif_status_reset &&
5102 (spdif->ctls & AC_DIG1_ENABLE) &&
5105 /* turn off SPDIF if needed; otherwise the IEC958 bits won't be
5108 set_dig_out_convert(codec, nid,
5109 spdif->ctls & ~AC_DIG1_ENABLE & 0xff,
5111 snd_hda_codec_setup_stream(codec, nid, stream_tag, 0, format);
5112 if (codec->slave_dig_outs) {
5114 for (d = codec->slave_dig_outs; *d; d++)
5115 snd_hda_codec_setup_stream(codec, *d, stream_tag, 0,
5118 /* turn on again (if needed) */
5120 set_dig_out_convert(codec, nid,
5121 spdif->ctls & 0xff, -1);
5124 static void cleanup_dig_out_stream(struct hda_codec *codec, hda_nid_t nid)
5126 snd_hda_codec_cleanup_stream(codec, nid);
5127 if (codec->slave_dig_outs) {
5129 for (d = codec->slave_dig_outs; *d; d++)
5130 snd_hda_codec_cleanup_stream(codec, *d);
5135 * snd_hda_bus_reboot_notify - call the reboot notifier of each codec
5136 * @bus: HD-audio bus
5138 void snd_hda_bus_reboot_notify(struct hda_bus *bus)
5140 struct hda_codec *codec;
5144 list_for_each_entry(codec, &bus->codec_list, list) {
5145 if (hda_codec_is_power_on(codec) &&
5146 codec->patch_ops.reboot_notify)
5147 codec->patch_ops.reboot_notify(codec);
5150 EXPORT_SYMBOL_HDA(snd_hda_bus_reboot_notify);
5153 * snd_hda_multi_out_dig_open - open the digital out in the exclusive mode
5155 int snd_hda_multi_out_dig_open(struct hda_codec *codec,
5156 struct hda_multi_out *mout)
5158 mutex_lock(&codec->spdif_mutex);
5159 if (mout->dig_out_used == HDA_DIG_ANALOG_DUP)
5160 /* already opened as analog dup; reset it once */
5161 cleanup_dig_out_stream(codec, mout->dig_out_nid);
5162 mout->dig_out_used = HDA_DIG_EXCLUSIVE;
5163 mutex_unlock(&codec->spdif_mutex);
5166 EXPORT_SYMBOL_HDA(snd_hda_multi_out_dig_open);
5169 * snd_hda_multi_out_dig_prepare - prepare the digital out stream
5171 int snd_hda_multi_out_dig_prepare(struct hda_codec *codec,
5172 struct hda_multi_out *mout,
5173 unsigned int stream_tag,
5174 unsigned int format,
5175 struct snd_pcm_substream *substream)
5177 mutex_lock(&codec->spdif_mutex);
5178 setup_dig_out_stream(codec, mout->dig_out_nid, stream_tag, format);
5179 mutex_unlock(&codec->spdif_mutex);
5182 EXPORT_SYMBOL_HDA(snd_hda_multi_out_dig_prepare);
5185 * snd_hda_multi_out_dig_cleanup - clean-up the digital out stream
5187 int snd_hda_multi_out_dig_cleanup(struct hda_codec *codec,
5188 struct hda_multi_out *mout)
5190 mutex_lock(&codec->spdif_mutex);
5191 cleanup_dig_out_stream(codec, mout->dig_out_nid);
5192 mutex_unlock(&codec->spdif_mutex);
5195 EXPORT_SYMBOL_HDA(snd_hda_multi_out_dig_cleanup);
5198 * snd_hda_multi_out_dig_close - release the digital out stream
5200 int snd_hda_multi_out_dig_close(struct hda_codec *codec,
5201 struct hda_multi_out *mout)
5203 mutex_lock(&codec->spdif_mutex);
5204 mout->dig_out_used = 0;
5205 mutex_unlock(&codec->spdif_mutex);
5208 EXPORT_SYMBOL_HDA(snd_hda_multi_out_dig_close);
5211 * snd_hda_multi_out_analog_open - open analog outputs
5213 * Open analog outputs and set up the hw-constraints.
5214 * If the digital outputs can be opened as slave, open the digital
5217 int snd_hda_multi_out_analog_open(struct hda_codec *codec,
5218 struct hda_multi_out *mout,
5219 struct snd_pcm_substream *substream,
5220 struct hda_pcm_stream *hinfo)
5222 struct snd_pcm_runtime *runtime = substream->runtime;
5223 runtime->hw.channels_max = mout->max_channels;
5224 if (mout->dig_out_nid) {
5225 if (!mout->analog_rates) {
5226 mout->analog_rates = hinfo->rates;
5227 mout->analog_formats = hinfo->formats;
5228 mout->analog_maxbps = hinfo->maxbps;
5230 runtime->hw.rates = mout->analog_rates;
5231 runtime->hw.formats = mout->analog_formats;
5232 hinfo->maxbps = mout->analog_maxbps;
5234 if (!mout->spdif_rates) {
5235 snd_hda_query_supported_pcm(codec, mout->dig_out_nid,
5237 &mout->spdif_formats,
5238 &mout->spdif_maxbps);
5240 mutex_lock(&codec->spdif_mutex);
5241 if (mout->share_spdif) {
5242 if ((runtime->hw.rates & mout->spdif_rates) &&
5243 (runtime->hw.formats & mout->spdif_formats)) {
5244 runtime->hw.rates &= mout->spdif_rates;
5245 runtime->hw.formats &= mout->spdif_formats;
5246 if (mout->spdif_maxbps < hinfo->maxbps)
5247 hinfo->maxbps = mout->spdif_maxbps;
5249 mout->share_spdif = 0;
5250 /* FIXME: need notify? */
5253 mutex_unlock(&codec->spdif_mutex);
5255 return snd_pcm_hw_constraint_step(substream->runtime, 0,
5256 SNDRV_PCM_HW_PARAM_CHANNELS, 2);
5258 EXPORT_SYMBOL_HDA(snd_hda_multi_out_analog_open);
5261 * snd_hda_multi_out_analog_prepare - Preapre the analog outputs.
5263 * Set up the i/o for analog out.
5264 * When the digital out is available, copy the front out to digital out, too.
5266 int snd_hda_multi_out_analog_prepare(struct hda_codec *codec,
5267 struct hda_multi_out *mout,
5268 unsigned int stream_tag,
5269 unsigned int format,
5270 struct snd_pcm_substream *substream)
5272 const hda_nid_t *nids = mout->dac_nids;
5273 int chs = substream->runtime->channels;
5274 struct hda_spdif_out *spdif;
5277 mutex_lock(&codec->spdif_mutex);
5278 spdif = snd_hda_spdif_out_of_nid(codec, mout->dig_out_nid);
5279 if (mout->dig_out_nid && mout->share_spdif &&
5280 mout->dig_out_used != HDA_DIG_EXCLUSIVE) {
5282 snd_hda_is_supported_format(codec, mout->dig_out_nid,
5284 !(spdif->status & IEC958_AES0_NONAUDIO)) {
5285 mout->dig_out_used = HDA_DIG_ANALOG_DUP;
5286 setup_dig_out_stream(codec, mout->dig_out_nid,
5287 stream_tag, format);
5289 mout->dig_out_used = 0;
5290 cleanup_dig_out_stream(codec, mout->dig_out_nid);
5293 mutex_unlock(&codec->spdif_mutex);
5296 snd_hda_codec_setup_stream(codec, nids[HDA_FRONT], stream_tag,
5298 if (!mout->no_share_stream &&
5299 mout->hp_nid && mout->hp_nid != nids[HDA_FRONT])
5300 /* headphone out will just decode front left/right (stereo) */
5301 snd_hda_codec_setup_stream(codec, mout->hp_nid, stream_tag,
5303 /* extra outputs copied from front */
5304 for (i = 0; i < ARRAY_SIZE(mout->hp_out_nid); i++)
5305 if (!mout->no_share_stream && mout->hp_out_nid[i])
5306 snd_hda_codec_setup_stream(codec,
5307 mout->hp_out_nid[i],
5308 stream_tag, 0, format);
5309 for (i = 0; i < ARRAY_SIZE(mout->extra_out_nid); i++)
5310 if (!mout->no_share_stream && mout->extra_out_nid[i])
5311 snd_hda_codec_setup_stream(codec,
5312 mout->extra_out_nid[i],
5313 stream_tag, 0, format);
5316 for (i = 1; i < mout->num_dacs; i++) {
5317 if (chs >= (i + 1) * 2) /* independent out */
5318 snd_hda_codec_setup_stream(codec, nids[i], stream_tag,
5320 else if (!mout->no_share_stream) /* copy front */
5321 snd_hda_codec_setup_stream(codec, nids[i], stream_tag,
5326 EXPORT_SYMBOL_HDA(snd_hda_multi_out_analog_prepare);
5329 * snd_hda_multi_out_analog_cleanup - clean up the setting for analog out
5331 int snd_hda_multi_out_analog_cleanup(struct hda_codec *codec,
5332 struct hda_multi_out *mout)
5334 const hda_nid_t *nids = mout->dac_nids;
5337 for (i = 0; i < mout->num_dacs; i++)
5338 snd_hda_codec_cleanup_stream(codec, nids[i]);
5340 snd_hda_codec_cleanup_stream(codec, mout->hp_nid);
5341 for (i = 0; i < ARRAY_SIZE(mout->hp_out_nid); i++)
5342 if (mout->hp_out_nid[i])
5343 snd_hda_codec_cleanup_stream(codec,
5344 mout->hp_out_nid[i]);
5345 for (i = 0; i < ARRAY_SIZE(mout->extra_out_nid); i++)
5346 if (mout->extra_out_nid[i])
5347 snd_hda_codec_cleanup_stream(codec,
5348 mout->extra_out_nid[i]);
5349 mutex_lock(&codec->spdif_mutex);
5350 if (mout->dig_out_nid && mout->dig_out_used == HDA_DIG_ANALOG_DUP) {
5351 cleanup_dig_out_stream(codec, mout->dig_out_nid);
5352 mout->dig_out_used = 0;
5354 mutex_unlock(&codec->spdif_mutex);
5357 EXPORT_SYMBOL_HDA(snd_hda_multi_out_analog_cleanup);
5360 * snd_hda_get_default_vref - Get the default (mic) VREF pin bits
5362 * Guess the suitable VREF pin bits to be set as the pin-control value.
5363 * Note: the function doesn't set the AC_PINCTL_IN_EN bit.
5365 unsigned int snd_hda_get_default_vref(struct hda_codec *codec, hda_nid_t pin)
5367 unsigned int pincap;
5368 unsigned int oldval;
5369 oldval = snd_hda_codec_read(codec, pin, 0,
5370 AC_VERB_GET_PIN_WIDGET_CONTROL, 0);
5371 pincap = snd_hda_query_pin_caps(codec, pin);
5372 pincap = (pincap & AC_PINCAP_VREF) >> AC_PINCAP_VREF_SHIFT;
5373 /* Exception: if the default pin setup is vref50, we give it priority */
5374 if ((pincap & AC_PINCAP_VREF_80) && oldval != PIN_VREF50)
5375 return AC_PINCTL_VREF_80;
5376 else if (pincap & AC_PINCAP_VREF_50)
5377 return AC_PINCTL_VREF_50;
5378 else if (pincap & AC_PINCAP_VREF_100)
5379 return AC_PINCTL_VREF_100;
5380 else if (pincap & AC_PINCAP_VREF_GRD)
5381 return AC_PINCTL_VREF_GRD;
5382 return AC_PINCTL_VREF_HIZ;
5384 EXPORT_SYMBOL_HDA(snd_hda_get_default_vref);
5386 /* correct the pin ctl value for matching with the pin cap */
5387 unsigned int snd_hda_correct_pin_ctl(struct hda_codec *codec,
5388 hda_nid_t pin, unsigned int val)
5390 static unsigned int cap_lists[][2] = {
5391 { AC_PINCTL_VREF_100, AC_PINCAP_VREF_100 },
5392 { AC_PINCTL_VREF_80, AC_PINCAP_VREF_80 },
5393 { AC_PINCTL_VREF_50, AC_PINCAP_VREF_50 },
5394 { AC_PINCTL_VREF_GRD, AC_PINCAP_VREF_GRD },
5400 cap = snd_hda_query_pin_caps(codec, pin);
5402 return val; /* don't know what to do... */
5404 if (val & AC_PINCTL_OUT_EN) {
5405 if (!(cap & AC_PINCAP_OUT))
5406 val &= ~(AC_PINCTL_OUT_EN | AC_PINCTL_HP_EN);
5407 else if ((val & AC_PINCTL_HP_EN) && !(cap & AC_PINCAP_HP_DRV))
5408 val &= ~AC_PINCTL_HP_EN;
5411 if (val & AC_PINCTL_IN_EN) {
5412 if (!(cap & AC_PINCAP_IN))
5413 val &= ~(AC_PINCTL_IN_EN | AC_PINCTL_VREFEN);
5415 unsigned int vcap, vref;
5417 vcap = (cap & AC_PINCAP_VREF) >> AC_PINCAP_VREF_SHIFT;
5418 vref = val & AC_PINCTL_VREFEN;
5419 for (i = 0; i < ARRAY_SIZE(cap_lists); i++) {
5420 if (vref == cap_lists[i][0] &&
5421 !(vcap & cap_lists[i][1])) {
5422 if (i == ARRAY_SIZE(cap_lists) - 1)
5423 vref = AC_PINCTL_VREF_HIZ;
5425 vref = cap_lists[i + 1][0];
5428 val &= ~AC_PINCTL_VREFEN;
5435 EXPORT_SYMBOL_HDA(snd_hda_correct_pin_ctl);
5437 int _snd_hda_set_pin_ctl(struct hda_codec *codec, hda_nid_t pin,
5438 unsigned int val, bool cached)
5440 val = snd_hda_correct_pin_ctl(codec, pin, val);
5441 snd_hda_codec_set_pin_target(codec, pin, val);
5443 return snd_hda_codec_update_cache(codec, pin, 0,
5444 AC_VERB_SET_PIN_WIDGET_CONTROL, val);
5446 return snd_hda_codec_write(codec, pin, 0,
5447 AC_VERB_SET_PIN_WIDGET_CONTROL, val);
5449 EXPORT_SYMBOL_HDA(_snd_hda_set_pin_ctl);
5452 * snd_hda_add_imux_item - Add an item to input_mux
5454 * When the same label is used already in the existing items, the number
5455 * suffix is appended to the label. This label index number is stored
5456 * to type_idx when non-NULL pointer is given.
5458 int snd_hda_add_imux_item(struct hda_input_mux *imux, const char *label,
5459 int index, int *type_idx)
5461 int i, label_idx = 0;
5462 if (imux->num_items >= HDA_MAX_NUM_INPUTS) {
5463 snd_printd(KERN_ERR "hda_codec: Too many imux items!\n");
5466 for (i = 0; i < imux->num_items; i++) {
5467 if (!strncmp(label, imux->items[i].label, strlen(label)))
5471 *type_idx = label_idx;
5473 snprintf(imux->items[imux->num_items].label,
5474 sizeof(imux->items[imux->num_items].label),
5475 "%s %d", label, label_idx);
5477 strlcpy(imux->items[imux->num_items].label, label,
5478 sizeof(imux->items[imux->num_items].label));
5479 imux->items[imux->num_items].index = index;
5483 EXPORT_SYMBOL_HDA(snd_hda_add_imux_item);
5492 * snd_hda_suspend - suspend the codecs
5495 * Returns 0 if successful.
5497 int snd_hda_suspend(struct hda_bus *bus)
5499 struct hda_codec *codec;
5501 list_for_each_entry(codec, &bus->codec_list, list) {
5502 cancel_delayed_work_sync(&codec->jackpoll_work);
5503 if (hda_codec_is_power_on(codec))
5504 hda_call_codec_suspend(codec, false);
5508 EXPORT_SYMBOL_HDA(snd_hda_suspend);
5511 * snd_hda_resume - resume the codecs
5514 * Returns 0 if successful.
5516 int snd_hda_resume(struct hda_bus *bus)
5518 struct hda_codec *codec;
5520 list_for_each_entry(codec, &bus->codec_list, list) {
5521 hda_call_codec_resume(codec);
5525 EXPORT_SYMBOL_HDA(snd_hda_resume);
5526 #endif /* CONFIG_PM */
5533 * snd_array_new - get a new element from the given array
5534 * @array: the array object
5536 * Get a new element from the given array. If it exceeds the
5537 * pre-allocated array size, re-allocate the array.
5539 * Returns NULL if allocation failed.
5541 void *snd_array_new(struct snd_array *array)
5543 if (snd_BUG_ON(!array->elem_size))
5545 if (array->used >= array->alloced) {
5546 int num = array->alloced + array->alloc_align;
5547 int size = (num + 1) * array->elem_size;
5549 if (snd_BUG_ON(num >= 4096))
5551 nlist = krealloc(array->list, size, GFP_KERNEL | __GFP_ZERO);
5554 array->list = nlist;
5555 array->alloced = num;
5557 return snd_array_elem(array, array->used++);
5559 EXPORT_SYMBOL_HDA(snd_array_new);
5562 * snd_array_free - free the given array elements
5563 * @array: the array object
5565 void snd_array_free(struct snd_array *array)
5572 EXPORT_SYMBOL_HDA(snd_array_free);
5575 * snd_print_pcm_bits - Print the supported PCM fmt bits to the string buffer
5576 * @pcm: PCM caps bits
5577 * @buf: the string buffer to write
5578 * @buflen: the max buffer length
5580 * used by hda_proc.c and hda_eld.c
5582 void snd_print_pcm_bits(int pcm, char *buf, int buflen)
5584 static unsigned int bits[] = { 8, 16, 20, 24, 32 };
5587 for (i = 0, j = 0; i < ARRAY_SIZE(bits); i++)
5588 if (pcm & (AC_SUPPCM_BITS_8 << i))
5589 j += snprintf(buf + j, buflen - j, " %d", bits[i]);
5591 buf[j] = '\0'; /* necessary when j == 0 */
5593 EXPORT_SYMBOL_HDA(snd_print_pcm_bits);
5595 MODULE_DESCRIPTION("HDA codec core");
5596 MODULE_LICENSE("GPL");