2 * Universal Interface for Intel High Definition Audio Codec
4 * Copyright (c) 2004 Takashi Iwai <tiwai@suse.de>
7 * This driver is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
12 * This driver is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22 #include <linux/init.h>
23 #include <linux/delay.h>
24 #include <linux/slab.h>
25 #include <linux/pci.h>
26 #include <linux/mutex.h>
27 #include <sound/core.h>
28 #include "hda_codec.h"
29 #include <sound/asoundef.h>
30 #include <sound/tlv.h>
31 #include <sound/initval.h>
32 #include "hda_local.h"
34 #include <sound/hda_hwdep.h>
37 * vendor / preset table
40 struct hda_vendor_id
{
45 /* codec vendor labels */
46 static struct hda_vendor_id hda_vendor_ids
[] = {
48 { 0x1013, "Cirrus Logic" },
49 { 0x1057, "Motorola" },
50 { 0x1095, "Silicon Image" },
52 { 0x10ec, "Realtek" },
53 { 0x1102, "Creative" },
57 { 0x11d4, "Analog Devices" },
58 { 0x13f6, "C-Media" },
59 { 0x14f1, "Conexant" },
60 { 0x17e8, "Chrontel" },
62 { 0x1aec, "Wolfson Microelectronics" },
63 { 0x434d, "C-Media" },
65 { 0x8384, "SigmaTel" },
69 static DEFINE_MUTEX(preset_mutex
);
70 static LIST_HEAD(hda_preset_tables
);
72 int snd_hda_add_codec_preset(struct hda_codec_preset_list
*preset
)
74 mutex_lock(&preset_mutex
);
75 list_add_tail(&preset
->list
, &hda_preset_tables
);
76 mutex_unlock(&preset_mutex
);
79 EXPORT_SYMBOL_HDA(snd_hda_add_codec_preset
);
81 int snd_hda_delete_codec_preset(struct hda_codec_preset_list
*preset
)
83 mutex_lock(&preset_mutex
);
84 list_del(&preset
->list
);
85 mutex_unlock(&preset_mutex
);
88 EXPORT_SYMBOL_HDA(snd_hda_delete_codec_preset
);
90 #ifdef CONFIG_SND_HDA_POWER_SAVE
91 static void hda_power_work(struct work_struct
*work
);
92 static void hda_keep_power_on(struct hda_codec
*codec
);
94 static inline void hda_keep_power_on(struct hda_codec
*codec
) {}
98 * snd_hda_get_jack_location - Give a location string of the jack
99 * @cfg: pin default config value
101 * Parse the pin default config value and returns the string of the
102 * jack location, e.g. "Rear", "Front", etc.
104 const char *snd_hda_get_jack_location(u32 cfg
)
106 static char *bases
[7] = {
107 "N/A", "Rear", "Front", "Left", "Right", "Top", "Bottom",
109 static unsigned char specials_idx
[] = {
114 static char *specials
[] = {
115 "Rear Panel", "Drive Bar",
116 "Riser", "HDMI", "ATAPI",
117 "Mobile-In", "Mobile-Out"
120 cfg
= (cfg
& AC_DEFCFG_LOCATION
) >> AC_DEFCFG_LOCATION_SHIFT
;
121 if ((cfg
& 0x0f) < 7)
122 return bases
[cfg
& 0x0f];
123 for (i
= 0; i
< ARRAY_SIZE(specials_idx
); i
++) {
124 if (cfg
== specials_idx
[i
])
129 EXPORT_SYMBOL_HDA(snd_hda_get_jack_location
);
132 * snd_hda_get_jack_connectivity - Give a connectivity string of the jack
133 * @cfg: pin default config value
135 * Parse the pin default config value and returns the string of the
136 * jack connectivity, i.e. external or internal connection.
138 const char *snd_hda_get_jack_connectivity(u32 cfg
)
140 static char *jack_locations
[4] = { "Ext", "Int", "Sep", "Oth" };
142 return jack_locations
[(cfg
>> (AC_DEFCFG_LOCATION_SHIFT
+ 4)) & 3];
144 EXPORT_SYMBOL_HDA(snd_hda_get_jack_connectivity
);
147 * snd_hda_get_jack_type - Give a type string of the jack
148 * @cfg: pin default config value
150 * Parse the pin default config value and returns the string of the
151 * jack type, i.e. the purpose of the jack, such as Line-Out or CD.
153 const char *snd_hda_get_jack_type(u32 cfg
)
155 static char *jack_types
[16] = {
156 "Line Out", "Speaker", "HP Out", "CD",
157 "SPDIF Out", "Digital Out", "Modem Line", "Modem Hand",
158 "Line In", "Aux", "Mic", "Telephony",
159 "SPDIF In", "Digitial In", "Reserved", "Other"
162 return jack_types
[(cfg
& AC_DEFCFG_DEVICE
)
163 >> AC_DEFCFG_DEVICE_SHIFT
];
165 EXPORT_SYMBOL_HDA(snd_hda_get_jack_type
);
168 * Compose a 32bit command word to be sent to the HD-audio controller
170 static inline unsigned int
171 make_codec_cmd(struct hda_codec
*codec
, hda_nid_t nid
, int direct
,
172 unsigned int verb
, unsigned int parm
)
176 if ((codec
->addr
& ~0xf) || (direct
& ~1) || (nid
& ~0x7f) ||
177 (verb
& ~0xfff) || (parm
& ~0xffff)) {
178 printk(KERN_ERR
"hda-codec: out of range cmd %x:%x:%x:%x:%x\n",
179 codec
->addr
, direct
, nid
, verb
, parm
);
183 val
= (u32
)codec
->addr
<< 28;
184 val
|= (u32
)direct
<< 27;
185 val
|= (u32
)nid
<< 20;
192 * Send and receive a verb
194 static int codec_exec_verb(struct hda_codec
*codec
, unsigned int cmd
,
197 struct hda_bus
*bus
= codec
->bus
;
206 snd_hda_power_up(codec
);
207 mutex_lock(&bus
->cmd_mutex
);
208 err
= bus
->ops
.command(bus
, cmd
);
210 *res
= bus
->ops
.get_response(bus
, codec
->addr
);
211 mutex_unlock(&bus
->cmd_mutex
);
212 snd_hda_power_down(codec
);
213 if (res
&& *res
== -1 && bus
->rirb_error
) {
214 if (bus
->response_reset
) {
215 snd_printd("hda_codec: resetting BUS due to "
216 "fatal communication error\n");
217 bus
->ops
.bus_reset(bus
);
221 /* clear reset-flag when the communication gets recovered */
223 bus
->response_reset
= 0;
228 * snd_hda_codec_read - send a command and get the response
229 * @codec: the HDA codec
230 * @nid: NID to send the command
231 * @direct: direct flag
232 * @verb: the verb to send
233 * @parm: the parameter for the verb
235 * Send a single command and read the corresponding response.
237 * Returns the obtained response value, or -1 for an error.
239 unsigned int snd_hda_codec_read(struct hda_codec
*codec
, hda_nid_t nid
,
241 unsigned int verb
, unsigned int parm
)
243 unsigned cmd
= make_codec_cmd(codec
, nid
, direct
, verb
, parm
);
245 codec_exec_verb(codec
, cmd
, &res
);
248 EXPORT_SYMBOL_HDA(snd_hda_codec_read
);
251 * snd_hda_codec_write - send a single command without waiting for response
252 * @codec: the HDA codec
253 * @nid: NID to send the command
254 * @direct: direct flag
255 * @verb: the verb to send
256 * @parm: the parameter for the verb
258 * Send a single command without waiting for response.
260 * Returns 0 if successful, or a negative error code.
262 int snd_hda_codec_write(struct hda_codec
*codec
, hda_nid_t nid
, int direct
,
263 unsigned int verb
, unsigned int parm
)
265 unsigned int cmd
= make_codec_cmd(codec
, nid
, direct
, verb
, parm
);
267 return codec_exec_verb(codec
, cmd
,
268 codec
->bus
->sync_write
? &res
: NULL
);
270 EXPORT_SYMBOL_HDA(snd_hda_codec_write
);
273 * snd_hda_sequence_write - sequence writes
274 * @codec: the HDA codec
275 * @seq: VERB array to send
277 * Send the commands sequentially from the given array.
278 * The array must be terminated with NID=0.
280 void snd_hda_sequence_write(struct hda_codec
*codec
, const struct hda_verb
*seq
)
282 for (; seq
->nid
; seq
++)
283 snd_hda_codec_write(codec
, seq
->nid
, 0, seq
->verb
, seq
->param
);
285 EXPORT_SYMBOL_HDA(snd_hda_sequence_write
);
288 * snd_hda_get_sub_nodes - get the range of sub nodes
289 * @codec: the HDA codec
291 * @start_id: the pointer to store the start NID
293 * Parse the NID and store the start NID of its sub-nodes.
294 * Returns the number of sub-nodes.
296 int snd_hda_get_sub_nodes(struct hda_codec
*codec
, hda_nid_t nid
,
301 parm
= snd_hda_param_read(codec
, nid
, AC_PAR_NODE_COUNT
);
304 *start_id
= (parm
>> 16) & 0x7fff;
305 return (int)(parm
& 0x7fff);
307 EXPORT_SYMBOL_HDA(snd_hda_get_sub_nodes
);
310 * snd_hda_get_connections - get connection list
311 * @codec: the HDA codec
313 * @conn_list: connection list array
314 * @max_conns: max. number of connections to store
316 * Parses the connection list of the given widget and stores the list
319 * Returns the number of connections, or a negative error code.
321 int snd_hda_get_connections(struct hda_codec
*codec
, hda_nid_t nid
,
322 hda_nid_t
*conn_list
, int max_conns
)
325 int i
, conn_len
, conns
;
326 unsigned int shift
, num_elems
, mask
;
330 if (snd_BUG_ON(!conn_list
|| max_conns
<= 0))
333 wcaps
= get_wcaps(codec
, nid
);
334 if (!(wcaps
& AC_WCAP_CONN_LIST
) &&
335 get_wcaps_type(wcaps
) != AC_WID_VOL_KNB
) {
336 snd_printk(KERN_WARNING
"hda_codec: "
337 "connection list not available for 0x%x\n", nid
);
341 parm
= snd_hda_param_read(codec
, nid
, AC_PAR_CONNLIST_LEN
);
342 if (parm
& AC_CLIST_LONG
) {
351 conn_len
= parm
& AC_CLIST_LENGTH
;
352 mask
= (1 << (shift
-1)) - 1;
355 return 0; /* no connection */
358 /* single connection */
359 parm
= snd_hda_codec_read(codec
, nid
, 0,
360 AC_VERB_GET_CONNECT_LIST
, 0);
361 if (parm
== -1 && codec
->bus
->rirb_error
)
363 conn_list
[0] = parm
& mask
;
367 /* multi connection */
370 for (i
= 0; i
< conn_len
; i
++) {
374 if (i
% num_elems
== 0) {
375 parm
= snd_hda_codec_read(codec
, nid
, 0,
376 AC_VERB_GET_CONNECT_LIST
, i
);
377 if (parm
== -1 && codec
->bus
->rirb_error
)
380 range_val
= !!(parm
& (1 << (shift
-1))); /* ranges */
383 snd_printk(KERN_WARNING
"hda_codec: "
384 "invalid CONNECT_LIST verb %x[%i]:%x\n",
390 /* ranges between the previous and this one */
391 if (!prev_nid
|| prev_nid
>= val
) {
392 snd_printk(KERN_WARNING
"hda_codec: "
393 "invalid dep_range_val %x:%x\n",
397 for (n
= prev_nid
+ 1; n
<= val
; n
++) {
398 if (conns
>= max_conns
) {
400 "Too many connections\n");
403 conn_list
[conns
++] = n
;
406 if (conns
>= max_conns
) {
407 snd_printk(KERN_ERR
"Too many connections\n");
410 conn_list
[conns
++] = val
;
416 EXPORT_SYMBOL_HDA(snd_hda_get_connections
);
420 * snd_hda_queue_unsol_event - add an unsolicited event to queue
422 * @res: unsolicited event (lower 32bit of RIRB entry)
423 * @res_ex: codec addr and flags (upper 32bit or RIRB entry)
425 * Adds the given event to the queue. The events are processed in
426 * the workqueue asynchronously. Call this function in the interrupt
427 * hanlder when RIRB receives an unsolicited event.
429 * Returns 0 if successful, or a negative error code.
431 int snd_hda_queue_unsol_event(struct hda_bus
*bus
, u32 res
, u32 res_ex
)
433 struct hda_bus_unsolicited
*unsol
;
440 wp
= (unsol
->wp
+ 1) % HDA_UNSOL_QUEUE_SIZE
;
444 unsol
->queue
[wp
] = res
;
445 unsol
->queue
[wp
+ 1] = res_ex
;
447 queue_work(bus
->workq
, &unsol
->work
);
451 EXPORT_SYMBOL_HDA(snd_hda_queue_unsol_event
);
454 * process queued unsolicited events
456 static void process_unsol_events(struct work_struct
*work
)
458 struct hda_bus_unsolicited
*unsol
=
459 container_of(work
, struct hda_bus_unsolicited
, work
);
460 struct hda_bus
*bus
= unsol
->bus
;
461 struct hda_codec
*codec
;
462 unsigned int rp
, caddr
, res
;
464 while (unsol
->rp
!= unsol
->wp
) {
465 rp
= (unsol
->rp
+ 1) % HDA_UNSOL_QUEUE_SIZE
;
468 res
= unsol
->queue
[rp
];
469 caddr
= unsol
->queue
[rp
+ 1];
470 if (!(caddr
& (1 << 4))) /* no unsolicited event? */
472 codec
= bus
->caddr_tbl
[caddr
& 0x0f];
473 if (codec
&& codec
->patch_ops
.unsol_event
)
474 codec
->patch_ops
.unsol_event(codec
, res
);
479 * initialize unsolicited queue
481 static int init_unsol_queue(struct hda_bus
*bus
)
483 struct hda_bus_unsolicited
*unsol
;
485 if (bus
->unsol
) /* already initialized */
488 unsol
= kzalloc(sizeof(*unsol
), GFP_KERNEL
);
490 snd_printk(KERN_ERR
"hda_codec: "
491 "can't allocate unsolicited queue\n");
494 INIT_WORK(&unsol
->work
, process_unsol_events
);
503 static void snd_hda_codec_free(struct hda_codec
*codec
);
505 static int snd_hda_bus_free(struct hda_bus
*bus
)
507 struct hda_codec
*codec
, *n
;
512 flush_workqueue(bus
->workq
);
515 list_for_each_entry_safe(codec
, n
, &bus
->codec_list
, list
) {
516 snd_hda_codec_free(codec
);
518 if (bus
->ops
.private_free
)
519 bus
->ops
.private_free(bus
);
521 destroy_workqueue(bus
->workq
);
526 static int snd_hda_bus_dev_free(struct snd_device
*device
)
528 struct hda_bus
*bus
= device
->device_data
;
530 return snd_hda_bus_free(bus
);
533 #ifdef CONFIG_SND_HDA_HWDEP
534 static int snd_hda_bus_dev_register(struct snd_device
*device
)
536 struct hda_bus
*bus
= device
->device_data
;
537 struct hda_codec
*codec
;
538 list_for_each_entry(codec
, &bus
->codec_list
, list
) {
539 snd_hda_hwdep_add_sysfs(codec
);
540 snd_hda_hwdep_add_power_sysfs(codec
);
545 #define snd_hda_bus_dev_register NULL
549 * snd_hda_bus_new - create a HDA bus
550 * @card: the card entry
551 * @temp: the template for hda_bus information
552 * @busp: the pointer to store the created bus instance
554 * Returns 0 if successful, or a negative error code.
556 int /*__devinit*/ snd_hda_bus_new(struct snd_card
*card
,
557 const struct hda_bus_template
*temp
,
558 struct hda_bus
**busp
)
562 static struct snd_device_ops dev_ops
= {
563 .dev_register
= snd_hda_bus_dev_register
,
564 .dev_free
= snd_hda_bus_dev_free
,
567 if (snd_BUG_ON(!temp
))
569 if (snd_BUG_ON(!temp
->ops
.command
|| !temp
->ops
.get_response
))
575 bus
= kzalloc(sizeof(*bus
), GFP_KERNEL
);
577 snd_printk(KERN_ERR
"can't allocate struct hda_bus\n");
582 bus
->private_data
= temp
->private_data
;
583 bus
->pci
= temp
->pci
;
584 bus
->modelname
= temp
->modelname
;
585 bus
->power_save
= temp
->power_save
;
586 bus
->ops
= temp
->ops
;
588 mutex_init(&bus
->cmd_mutex
);
589 INIT_LIST_HEAD(&bus
->codec_list
);
591 snprintf(bus
->workq_name
, sizeof(bus
->workq_name
),
592 "hd-audio%d", card
->number
);
593 bus
->workq
= create_singlethread_workqueue(bus
->workq_name
);
595 snd_printk(KERN_ERR
"cannot create workqueue %s\n",
601 err
= snd_device_new(card
, SNDRV_DEV_BUS
, bus
, &dev_ops
);
603 snd_hda_bus_free(bus
);
610 EXPORT_SYMBOL_HDA(snd_hda_bus_new
);
612 #ifdef CONFIG_SND_HDA_GENERIC
613 #define is_generic_config(codec) \
614 (codec->modelname && !strcmp(codec->modelname, "generic"))
616 #define is_generic_config(codec) 0
620 #define HDA_MODREQ_MAX_COUNT 2 /* two request_modules()'s */
622 #define HDA_MODREQ_MAX_COUNT 0 /* all presets are statically linked */
626 * find a matching codec preset
628 static const struct hda_codec_preset
*
629 find_codec_preset(struct hda_codec
*codec
)
631 struct hda_codec_preset_list
*tbl
;
632 const struct hda_codec_preset
*preset
;
633 int mod_requested
= 0;
635 if (is_generic_config(codec
))
636 return NULL
; /* use the generic parser */
639 mutex_lock(&preset_mutex
);
640 list_for_each_entry(tbl
, &hda_preset_tables
, list
) {
641 if (!try_module_get(tbl
->owner
)) {
642 snd_printk(KERN_ERR
"hda_codec: cannot module_get\n");
645 for (preset
= tbl
->preset
; preset
->id
; preset
++) {
646 u32 mask
= preset
->mask
;
647 if (preset
->afg
&& preset
->afg
!= codec
->afg
)
649 if (preset
->mfg
&& preset
->mfg
!= codec
->mfg
)
653 if (preset
->id
== (codec
->vendor_id
& mask
) &&
655 preset
->rev
== codec
->revision_id
)) {
656 mutex_unlock(&preset_mutex
);
657 codec
->owner
= tbl
->owner
;
661 module_put(tbl
->owner
);
663 mutex_unlock(&preset_mutex
);
665 if (mod_requested
< HDA_MODREQ_MAX_COUNT
) {
668 snprintf(name
, sizeof(name
), "snd-hda-codec-id:%08x",
671 snprintf(name
, sizeof(name
), "snd-hda-codec-id:%04x*",
672 (codec
->vendor_id
>> 16) & 0xffff);
673 request_module(name
);
681 * get_codec_name - store the codec name
683 static int get_codec_name(struct hda_codec
*codec
)
685 const struct hda_vendor_id
*c
;
686 const char *vendor
= NULL
;
687 u16 vendor_id
= codec
->vendor_id
>> 16;
690 if (codec
->vendor_name
)
693 for (c
= hda_vendor_ids
; c
->id
; c
++) {
694 if (c
->id
== vendor_id
) {
700 sprintf(tmp
, "Generic %04x", vendor_id
);
703 codec
->vendor_name
= kstrdup(vendor
, GFP_KERNEL
);
704 if (!codec
->vendor_name
)
708 if (codec
->chip_name
)
711 if (codec
->preset
&& codec
->preset
->name
)
712 codec
->chip_name
= kstrdup(codec
->preset
->name
, GFP_KERNEL
);
714 sprintf(tmp
, "ID %x", codec
->vendor_id
& 0xffff);
715 codec
->chip_name
= kstrdup(tmp
, GFP_KERNEL
);
717 if (!codec
->chip_name
)
723 * look for an AFG and MFG nodes
725 static void /*__devinit*/ setup_fg_nodes(struct hda_codec
*codec
)
727 int i
, total_nodes
, function_id
;
730 total_nodes
= snd_hda_get_sub_nodes(codec
, AC_NODE_ROOT
, &nid
);
731 for (i
= 0; i
< total_nodes
; i
++, nid
++) {
732 function_id
= snd_hda_param_read(codec
, nid
,
733 AC_PAR_FUNCTION_TYPE
) & 0xff;
734 switch (function_id
) {
735 case AC_GRP_AUDIO_FUNCTION
:
737 codec
->function_id
= function_id
;
739 case AC_GRP_MODEM_FUNCTION
:
741 codec
->function_id
= function_id
;
750 * read widget caps for each widget and store in cache
752 static int read_widget_caps(struct hda_codec
*codec
, hda_nid_t fg_node
)
757 codec
->num_nodes
= snd_hda_get_sub_nodes(codec
, fg_node
,
759 codec
->wcaps
= kmalloc(codec
->num_nodes
* 4, GFP_KERNEL
);
762 nid
= codec
->start_nid
;
763 for (i
= 0; i
< codec
->num_nodes
; i
++, nid
++)
764 codec
->wcaps
[i
] = snd_hda_param_read(codec
, nid
,
765 AC_PAR_AUDIO_WIDGET_CAP
);
769 /* read all pin default configurations and save codec->init_pins */
770 static int read_pin_defaults(struct hda_codec
*codec
)
773 hda_nid_t nid
= codec
->start_nid
;
775 for (i
= 0; i
< codec
->num_nodes
; i
++, nid
++) {
776 struct hda_pincfg
*pin
;
777 unsigned int wcaps
= get_wcaps(codec
, nid
);
778 unsigned int wid_type
= get_wcaps_type(wcaps
);
779 if (wid_type
!= AC_WID_PIN
)
781 pin
= snd_array_new(&codec
->init_pins
);
785 pin
->cfg
= snd_hda_codec_read(codec
, nid
, 0,
786 AC_VERB_GET_CONFIG_DEFAULT
, 0);
791 /* look up the given pin config list and return the item matching with NID */
792 static struct hda_pincfg
*look_up_pincfg(struct hda_codec
*codec
,
793 struct snd_array
*array
,
797 for (i
= 0; i
< array
->used
; i
++) {
798 struct hda_pincfg
*pin
= snd_array_elem(array
, i
);
805 /* write a config value for the given NID */
806 static void set_pincfg(struct hda_codec
*codec
, hda_nid_t nid
,
810 for (i
= 0; i
< 4; i
++) {
811 snd_hda_codec_write(codec
, nid
, 0,
812 AC_VERB_SET_CONFIG_DEFAULT_BYTES_0
+ i
,
818 /* set the current pin config value for the given NID.
819 * the value is cached, and read via snd_hda_codec_get_pincfg()
821 int snd_hda_add_pincfg(struct hda_codec
*codec
, struct snd_array
*list
,
822 hda_nid_t nid
, unsigned int cfg
)
824 struct hda_pincfg
*pin
;
827 if (get_wcaps_type(get_wcaps(codec
, nid
)) != AC_WID_PIN
)
830 oldcfg
= snd_hda_codec_get_pincfg(codec
, nid
);
831 pin
= look_up_pincfg(codec
, list
, nid
);
833 pin
= snd_array_new(list
);
840 /* change only when needed; e.g. if the pincfg is already present
841 * in user_pins[], don't write it
843 cfg
= snd_hda_codec_get_pincfg(codec
, nid
);
845 set_pincfg(codec
, nid
, cfg
);
850 * snd_hda_codec_set_pincfg - Override a pin default configuration
851 * @codec: the HDA codec
852 * @nid: NID to set the pin config
853 * @cfg: the pin default config value
855 * Override a pin default configuration value in the cache.
856 * This value can be read by snd_hda_codec_get_pincfg() in a higher
857 * priority than the real hardware value.
859 int snd_hda_codec_set_pincfg(struct hda_codec
*codec
,
860 hda_nid_t nid
, unsigned int cfg
)
862 return snd_hda_add_pincfg(codec
, &codec
->driver_pins
, nid
, cfg
);
864 EXPORT_SYMBOL_HDA(snd_hda_codec_set_pincfg
);
867 * snd_hda_codec_get_pincfg - Obtain a pin-default configuration
868 * @codec: the HDA codec
869 * @nid: NID to get the pin config
871 * Get the current pin config value of the given pin NID.
872 * If the pincfg value is cached or overridden via sysfs or driver,
873 * returns the cached value.
875 unsigned int snd_hda_codec_get_pincfg(struct hda_codec
*codec
, hda_nid_t nid
)
877 struct hda_pincfg
*pin
;
879 #ifdef CONFIG_SND_HDA_HWDEP
880 pin
= look_up_pincfg(codec
, &codec
->user_pins
, nid
);
884 pin
= look_up_pincfg(codec
, &codec
->driver_pins
, nid
);
887 pin
= look_up_pincfg(codec
, &codec
->init_pins
, nid
);
892 EXPORT_SYMBOL_HDA(snd_hda_codec_get_pincfg
);
894 /* restore all current pin configs */
895 static void restore_pincfgs(struct hda_codec
*codec
)
898 for (i
= 0; i
< codec
->init_pins
.used
; i
++) {
899 struct hda_pincfg
*pin
= snd_array_elem(&codec
->init_pins
, i
);
900 set_pincfg(codec
, pin
->nid
,
901 snd_hda_codec_get_pincfg(codec
, pin
->nid
));
906 * snd_hda_shutup_pins - Shut up all pins
907 * @codec: the HDA codec
909 * Clear all pin controls to shup up before suspend for avoiding click noise.
910 * The controls aren't cached so that they can be resumed properly.
912 void snd_hda_shutup_pins(struct hda_codec
*codec
)
915 for (i
= 0; i
< codec
->init_pins
.used
; i
++) {
916 struct hda_pincfg
*pin
= snd_array_elem(&codec
->init_pins
, i
);
917 /* use read here for syncing after issuing each verb */
918 snd_hda_codec_read(codec
, pin
->nid
, 0,
919 AC_VERB_SET_PIN_WIDGET_CONTROL
, 0);
922 EXPORT_SYMBOL_HDA(snd_hda_shutup_pins
);
924 static void init_hda_cache(struct hda_cache_rec
*cache
,
925 unsigned int record_size
);
926 static void free_hda_cache(struct hda_cache_rec
*cache
);
928 /* restore the initial pin cfgs and release all pincfg lists */
929 static void restore_init_pincfgs(struct hda_codec
*codec
)
931 /* first free driver_pins and user_pins, then call restore_pincfg
932 * so that only the values in init_pins are restored
934 snd_array_free(&codec
->driver_pins
);
935 #ifdef CONFIG_SND_HDA_HWDEP
936 snd_array_free(&codec
->user_pins
);
938 restore_pincfgs(codec
);
939 snd_array_free(&codec
->init_pins
);
945 static void snd_hda_codec_free(struct hda_codec
*codec
)
949 restore_init_pincfgs(codec
);
950 #ifdef CONFIG_SND_HDA_POWER_SAVE
951 cancel_delayed_work(&codec
->power_work
);
952 flush_workqueue(codec
->bus
->workq
);
954 list_del(&codec
->list
);
955 snd_array_free(&codec
->mixers
);
956 snd_array_free(&codec
->nids
);
957 codec
->bus
->caddr_tbl
[codec
->addr
] = NULL
;
958 if (codec
->patch_ops
.free
)
959 codec
->patch_ops
.free(codec
);
960 module_put(codec
->owner
);
961 free_hda_cache(&codec
->amp_cache
);
962 free_hda_cache(&codec
->cmd_cache
);
963 kfree(codec
->vendor_name
);
964 kfree(codec
->chip_name
);
965 kfree(codec
->modelname
);
970 static void hda_set_power_state(struct hda_codec
*codec
, hda_nid_t fg
,
971 unsigned int power_state
);
974 * snd_hda_codec_new - create a HDA codec
975 * @bus: the bus to assign
976 * @codec_addr: the codec address
977 * @codecp: the pointer to store the generated codec
979 * Returns 0 if successful, or a negative error code.
981 int /*__devinit*/ snd_hda_codec_new(struct hda_bus
*bus
,
982 unsigned int codec_addr
,
983 struct hda_codec
**codecp
)
985 struct hda_codec
*codec
;
989 if (snd_BUG_ON(!bus
))
991 if (snd_BUG_ON(codec_addr
> HDA_MAX_CODEC_ADDRESS
))
994 if (bus
->caddr_tbl
[codec_addr
]) {
995 snd_printk(KERN_ERR
"hda_codec: "
996 "address 0x%x is already occupied\n", codec_addr
);
1000 codec
= kzalloc(sizeof(*codec
), GFP_KERNEL
);
1001 if (codec
== NULL
) {
1002 snd_printk(KERN_ERR
"can't allocate struct hda_codec\n");
1007 codec
->addr
= codec_addr
;
1008 mutex_init(&codec
->spdif_mutex
);
1009 mutex_init(&codec
->control_mutex
);
1010 init_hda_cache(&codec
->amp_cache
, sizeof(struct hda_amp_info
));
1011 init_hda_cache(&codec
->cmd_cache
, sizeof(struct hda_cache_head
));
1012 snd_array_init(&codec
->mixers
, sizeof(struct hda_nid_item
), 32);
1013 snd_array_init(&codec
->nids
, sizeof(struct hda_nid_item
), 32);
1014 snd_array_init(&codec
->init_pins
, sizeof(struct hda_pincfg
), 16);
1015 snd_array_init(&codec
->driver_pins
, sizeof(struct hda_pincfg
), 16);
1016 if (codec
->bus
->modelname
) {
1017 codec
->modelname
= kstrdup(codec
->bus
->modelname
, GFP_KERNEL
);
1018 if (!codec
->modelname
) {
1019 snd_hda_codec_free(codec
);
1024 #ifdef CONFIG_SND_HDA_POWER_SAVE
1025 INIT_DELAYED_WORK(&codec
->power_work
, hda_power_work
);
1026 /* snd_hda_codec_new() marks the codec as power-up, and leave it as is.
1027 * the caller has to power down appropriatley after initialization
1030 hda_keep_power_on(codec
);
1033 list_add_tail(&codec
->list
, &bus
->codec_list
);
1034 bus
->caddr_tbl
[codec_addr
] = codec
;
1036 codec
->vendor_id
= snd_hda_param_read(codec
, AC_NODE_ROOT
,
1038 if (codec
->vendor_id
== -1)
1039 /* read again, hopefully the access method was corrected
1040 * in the last read...
1042 codec
->vendor_id
= snd_hda_param_read(codec
, AC_NODE_ROOT
,
1044 codec
->subsystem_id
= snd_hda_param_read(codec
, AC_NODE_ROOT
,
1045 AC_PAR_SUBSYSTEM_ID
);
1046 codec
->revision_id
= snd_hda_param_read(codec
, AC_NODE_ROOT
,
1049 setup_fg_nodes(codec
);
1050 if (!codec
->afg
&& !codec
->mfg
) {
1051 snd_printdd("hda_codec: no AFG or MFG node found\n");
1056 err
= read_widget_caps(codec
, codec
->afg
? codec
->afg
: codec
->mfg
);
1058 snd_printk(KERN_ERR
"hda_codec: cannot malloc\n");
1061 err
= read_pin_defaults(codec
);
1065 if (!codec
->subsystem_id
) {
1066 hda_nid_t nid
= codec
->afg
? codec
->afg
: codec
->mfg
;
1067 codec
->subsystem_id
=
1068 snd_hda_codec_read(codec
, nid
, 0,
1069 AC_VERB_GET_SUBSYSTEM_ID
, 0);
1072 /* power-up all before initialization */
1073 hda_set_power_state(codec
,
1074 codec
->afg
? codec
->afg
: codec
->mfg
,
1077 snd_hda_codec_proc_new(codec
);
1079 snd_hda_create_hwdep(codec
);
1081 sprintf(component
, "HDA:%08x,%08x,%08x", codec
->vendor_id
,
1082 codec
->subsystem_id
, codec
->revision_id
);
1083 snd_component_add(codec
->bus
->card
, component
);
1090 snd_hda_codec_free(codec
);
1093 EXPORT_SYMBOL_HDA(snd_hda_codec_new
);
1096 * snd_hda_codec_configure - (Re-)configure the HD-audio codec
1097 * @codec: the HDA codec
1099 * Start parsing of the given codec tree and (re-)initialize the whole
1102 * Returns 0 if successful or a negative error code.
1104 int snd_hda_codec_configure(struct hda_codec
*codec
)
1108 codec
->preset
= find_codec_preset(codec
);
1109 if (!codec
->vendor_name
|| !codec
->chip_name
) {
1110 err
= get_codec_name(codec
);
1115 if (is_generic_config(codec
)) {
1116 err
= snd_hda_parse_generic_codec(codec
);
1119 if (codec
->preset
&& codec
->preset
->patch
) {
1120 err
= codec
->preset
->patch(codec
);
1124 /* call the default parser */
1125 err
= snd_hda_parse_generic_codec(codec
);
1127 printk(KERN_ERR
"hda-codec: No codec parser is available\n");
1130 if (!err
&& codec
->patch_ops
.unsol_event
)
1131 err
= init_unsol_queue(codec
->bus
);
1132 /* audio codec should override the mixer name */
1133 if (!err
&& (codec
->afg
|| !*codec
->bus
->card
->mixername
))
1134 snprintf(codec
->bus
->card
->mixername
,
1135 sizeof(codec
->bus
->card
->mixername
),
1136 "%s %s", codec
->vendor_name
, codec
->chip_name
);
1139 EXPORT_SYMBOL_HDA(snd_hda_codec_configure
);
1142 * snd_hda_codec_setup_stream - set up the codec for streaming
1143 * @codec: the CODEC to set up
1144 * @nid: the NID to set up
1145 * @stream_tag: stream tag to pass, it's between 0x1 and 0xf.
1146 * @channel_id: channel id to pass, zero based.
1147 * @format: stream format.
1149 void snd_hda_codec_setup_stream(struct hda_codec
*codec
, hda_nid_t nid
,
1151 int channel_id
, int format
)
1156 snd_printdd("hda_codec_setup_stream: "
1157 "NID=0x%x, stream=0x%x, channel=%d, format=0x%x\n",
1158 nid
, stream_tag
, channel_id
, format
);
1159 snd_hda_codec_write(codec
, nid
, 0, AC_VERB_SET_CHANNEL_STREAMID
,
1160 (stream_tag
<< 4) | channel_id
);
1162 snd_hda_codec_write(codec
, nid
, 0, AC_VERB_SET_STREAM_FORMAT
, format
);
1164 EXPORT_SYMBOL_HDA(snd_hda_codec_setup_stream
);
1167 * snd_hda_codec_cleanup_stream - clean up the codec for closing
1168 * @codec: the CODEC to clean up
1169 * @nid: the NID to clean up
1171 void snd_hda_codec_cleanup_stream(struct hda_codec
*codec
, hda_nid_t nid
)
1176 snd_printdd("hda_codec_cleanup_stream: NID=0x%x\n", nid
);
1177 snd_hda_codec_write(codec
, nid
, 0, AC_VERB_SET_CHANNEL_STREAMID
, 0);
1178 #if 0 /* keep the format */
1180 snd_hda_codec_write(codec
, nid
, 0, AC_VERB_SET_STREAM_FORMAT
, 0);
1183 EXPORT_SYMBOL_HDA(snd_hda_codec_cleanup_stream
);
1186 * amp access functions
1189 /* FIXME: more better hash key? */
1190 #define HDA_HASH_KEY(nid, dir, idx) (u32)((nid) + ((idx) << 16) + ((dir) << 24))
1191 #define HDA_HASH_PINCAP_KEY(nid) (u32)((nid) + (0x02 << 24))
1192 #define HDA_HASH_PARPCM_KEY(nid) (u32)((nid) + (0x03 << 24))
1193 #define HDA_HASH_PARSTR_KEY(nid) (u32)((nid) + (0x04 << 24))
1194 #define INFO_AMP_CAPS (1<<0)
1195 #define INFO_AMP_VOL(ch) (1 << (1 + (ch)))
1197 /* initialize the hash table */
1198 static void /*__devinit*/ init_hda_cache(struct hda_cache_rec
*cache
,
1199 unsigned int record_size
)
1201 memset(cache
, 0, sizeof(*cache
));
1202 memset(cache
->hash
, 0xff, sizeof(cache
->hash
));
1203 snd_array_init(&cache
->buf
, record_size
, 64);
1206 static void free_hda_cache(struct hda_cache_rec
*cache
)
1208 snd_array_free(&cache
->buf
);
1211 /* query the hash. allocate an entry if not found. */
1212 static struct hda_cache_head
*get_hash(struct hda_cache_rec
*cache
, u32 key
)
1214 u16 idx
= key
% (u16
)ARRAY_SIZE(cache
->hash
);
1215 u16 cur
= cache
->hash
[idx
];
1216 struct hda_cache_head
*info
;
1218 while (cur
!= 0xffff) {
1219 info
= snd_array_elem(&cache
->buf
, cur
);
1220 if (info
->key
== key
)
1227 /* query the hash. allocate an entry if not found. */
1228 static struct hda_cache_head
*get_alloc_hash(struct hda_cache_rec
*cache
,
1231 struct hda_cache_head
*info
= get_hash(cache
, key
);
1234 /* add a new hash entry */
1235 info
= snd_array_new(&cache
->buf
);
1238 cur
= snd_array_index(&cache
->buf
, info
);
1241 idx
= key
% (u16
)ARRAY_SIZE(cache
->hash
);
1242 info
->next
= cache
->hash
[idx
];
1243 cache
->hash
[idx
] = cur
;
1248 /* query and allocate an amp hash entry */
1249 static inline struct hda_amp_info
*
1250 get_alloc_amp_hash(struct hda_codec
*codec
, u32 key
)
1252 return (struct hda_amp_info
*)get_alloc_hash(&codec
->amp_cache
, key
);
1256 * query_amp_caps - query AMP capabilities
1257 * @codec: the HD-auio codec
1258 * @nid: the NID to query
1259 * @direction: either #HDA_INPUT or #HDA_OUTPUT
1261 * Query AMP capabilities for the given widget and direction.
1262 * Returns the obtained capability bits.
1264 * When cap bits have been already read, this doesn't read again but
1265 * returns the cached value.
1267 u32
query_amp_caps(struct hda_codec
*codec
, hda_nid_t nid
, int direction
)
1269 struct hda_amp_info
*info
;
1271 info
= get_alloc_amp_hash(codec
, HDA_HASH_KEY(nid
, direction
, 0));
1274 if (!(info
->head
.val
& INFO_AMP_CAPS
)) {
1275 if (!(get_wcaps(codec
, nid
) & AC_WCAP_AMP_OVRD
))
1277 info
->amp_caps
= snd_hda_param_read(codec
, nid
,
1278 direction
== HDA_OUTPUT
?
1279 AC_PAR_AMP_OUT_CAP
:
1282 info
->head
.val
|= INFO_AMP_CAPS
;
1284 return info
->amp_caps
;
1286 EXPORT_SYMBOL_HDA(query_amp_caps
);
1289 * snd_hda_override_amp_caps - Override the AMP capabilities
1290 * @codec: the CODEC to clean up
1291 * @nid: the NID to clean up
1292 * @direction: either #HDA_INPUT or #HDA_OUTPUT
1293 * @caps: the capability bits to set
1295 * Override the cached AMP caps bits value by the given one.
1296 * This function is useful if the driver needs to adjust the AMP ranges,
1297 * e.g. limit to 0dB, etc.
1299 * Returns zero if successful or a negative error code.
1301 int snd_hda_override_amp_caps(struct hda_codec
*codec
, hda_nid_t nid
, int dir
,
1304 struct hda_amp_info
*info
;
1306 info
= get_alloc_amp_hash(codec
, HDA_HASH_KEY(nid
, dir
, 0));
1309 info
->amp_caps
= caps
;
1310 info
->head
.val
|= INFO_AMP_CAPS
;
1313 EXPORT_SYMBOL_HDA(snd_hda_override_amp_caps
);
1316 query_caps_hash(struct hda_codec
*codec
, hda_nid_t nid
, u32 key
,
1317 unsigned int (*func
)(struct hda_codec
*, hda_nid_t
))
1319 struct hda_amp_info
*info
;
1321 info
= get_alloc_amp_hash(codec
, key
);
1324 if (!info
->head
.val
) {
1325 info
->head
.val
|= INFO_AMP_CAPS
;
1326 info
->amp_caps
= func(codec
, nid
);
1328 return info
->amp_caps
;
1331 static unsigned int read_pin_cap(struct hda_codec
*codec
, hda_nid_t nid
)
1333 return snd_hda_param_read(codec
, nid
, AC_PAR_PIN_CAP
);
1337 * snd_hda_query_pin_caps - Query PIN capabilities
1338 * @codec: the HD-auio codec
1339 * @nid: the NID to query
1341 * Query PIN capabilities for the given widget.
1342 * Returns the obtained capability bits.
1344 * When cap bits have been already read, this doesn't read again but
1345 * returns the cached value.
1347 u32
snd_hda_query_pin_caps(struct hda_codec
*codec
, hda_nid_t nid
)
1349 return query_caps_hash(codec
, nid
, HDA_HASH_PINCAP_KEY(nid
),
1352 EXPORT_SYMBOL_HDA(snd_hda_query_pin_caps
);
1355 * snd_hda_pin_sense - execute pin sense measurement
1356 * @codec: the CODEC to sense
1357 * @nid: the pin NID to sense
1359 * Execute necessary pin sense measurement and return its Presence Detect,
1360 * Impedance, ELD Valid etc. status bits.
1362 u32
snd_hda_pin_sense(struct hda_codec
*codec
, hda_nid_t nid
)
1366 if (!codec
->no_trigger_sense
) {
1367 pincap
= snd_hda_query_pin_caps(codec
, nid
);
1368 if (pincap
& AC_PINCAP_TRIG_REQ
) /* need trigger? */
1369 snd_hda_codec_read(codec
, nid
, 0,
1370 AC_VERB_SET_PIN_SENSE
, 0);
1372 return snd_hda_codec_read(codec
, nid
, 0,
1373 AC_VERB_GET_PIN_SENSE
, 0);
1375 EXPORT_SYMBOL_HDA(snd_hda_pin_sense
);
1378 * snd_hda_jack_detect - query pin Presence Detect status
1379 * @codec: the CODEC to sense
1380 * @nid: the pin NID to sense
1382 * Query and return the pin's Presence Detect status.
1384 int snd_hda_jack_detect(struct hda_codec
*codec
, hda_nid_t nid
)
1386 u32 sense
= snd_hda_pin_sense(codec
, nid
);
1387 return !!(sense
& AC_PINSENSE_PRESENCE
);
1389 EXPORT_SYMBOL_HDA(snd_hda_jack_detect
);
1392 * read the current volume to info
1393 * if the cache exists, read the cache value.
1395 static unsigned int get_vol_mute(struct hda_codec
*codec
,
1396 struct hda_amp_info
*info
, hda_nid_t nid
,
1397 int ch
, int direction
, int index
)
1401 if (info
->head
.val
& INFO_AMP_VOL(ch
))
1402 return info
->vol
[ch
];
1404 parm
= ch
? AC_AMP_GET_RIGHT
: AC_AMP_GET_LEFT
;
1405 parm
|= direction
== HDA_OUTPUT
? AC_AMP_GET_OUTPUT
: AC_AMP_GET_INPUT
;
1407 val
= snd_hda_codec_read(codec
, nid
, 0,
1408 AC_VERB_GET_AMP_GAIN_MUTE
, parm
);
1409 info
->vol
[ch
] = val
& 0xff;
1410 info
->head
.val
|= INFO_AMP_VOL(ch
);
1411 return info
->vol
[ch
];
1415 * write the current volume in info to the h/w and update the cache
1417 static void put_vol_mute(struct hda_codec
*codec
, struct hda_amp_info
*info
,
1418 hda_nid_t nid
, int ch
, int direction
, int index
,
1423 parm
= ch
? AC_AMP_SET_RIGHT
: AC_AMP_SET_LEFT
;
1424 parm
|= direction
== HDA_OUTPUT
? AC_AMP_SET_OUTPUT
: AC_AMP_SET_INPUT
;
1425 parm
|= index
<< AC_AMP_SET_INDEX_SHIFT
;
1427 snd_hda_codec_write(codec
, nid
, 0, AC_VERB_SET_AMP_GAIN_MUTE
, parm
);
1428 info
->vol
[ch
] = val
;
1432 * snd_hda_codec_amp_read - Read AMP value
1433 * @codec: HD-audio codec
1434 * @nid: NID to read the AMP value
1435 * @ch: channel (left=0 or right=1)
1436 * @direction: #HDA_INPUT or #HDA_OUTPUT
1437 * @index: the index value (only for input direction)
1439 * Read AMP value. The volume is between 0 to 0x7f, 0x80 = mute bit.
1441 int snd_hda_codec_amp_read(struct hda_codec
*codec
, hda_nid_t nid
, int ch
,
1442 int direction
, int index
)
1444 struct hda_amp_info
*info
;
1445 info
= get_alloc_amp_hash(codec
, HDA_HASH_KEY(nid
, direction
, index
));
1448 return get_vol_mute(codec
, info
, nid
, ch
, direction
, index
);
1450 EXPORT_SYMBOL_HDA(snd_hda_codec_amp_read
);
1453 * snd_hda_codec_amp_update - update the AMP value
1454 * @codec: HD-audio codec
1455 * @nid: NID to read the AMP value
1456 * @ch: channel (left=0 or right=1)
1457 * @direction: #HDA_INPUT or #HDA_OUTPUT
1458 * @idx: the index value (only for input direction)
1459 * @mask: bit mask to set
1460 * @val: the bits value to set
1462 * Update the AMP value with a bit mask.
1463 * Returns 0 if the value is unchanged, 1 if changed.
1465 int snd_hda_codec_amp_update(struct hda_codec
*codec
, hda_nid_t nid
, int ch
,
1466 int direction
, int idx
, int mask
, int val
)
1468 struct hda_amp_info
*info
;
1470 info
= get_alloc_amp_hash(codec
, HDA_HASH_KEY(nid
, direction
, idx
));
1473 if (snd_BUG_ON(mask
& ~0xff))
1476 val
|= get_vol_mute(codec
, info
, nid
, ch
, direction
, idx
) & ~mask
;
1477 if (info
->vol
[ch
] == val
)
1479 put_vol_mute(codec
, info
, nid
, ch
, direction
, idx
, val
);
1482 EXPORT_SYMBOL_HDA(snd_hda_codec_amp_update
);
1485 * snd_hda_codec_amp_stereo - update the AMP stereo values
1486 * @codec: HD-audio codec
1487 * @nid: NID to read the AMP value
1488 * @direction: #HDA_INPUT or #HDA_OUTPUT
1489 * @idx: the index value (only for input direction)
1490 * @mask: bit mask to set
1491 * @val: the bits value to set
1493 * Update the AMP values like snd_hda_codec_amp_update(), but for a
1494 * stereo widget with the same mask and value.
1496 int snd_hda_codec_amp_stereo(struct hda_codec
*codec
, hda_nid_t nid
,
1497 int direction
, int idx
, int mask
, int val
)
1501 if (snd_BUG_ON(mask
& ~0xff))
1503 for (ch
= 0; ch
< 2; ch
++)
1504 ret
|= snd_hda_codec_amp_update(codec
, nid
, ch
, direction
,
1508 EXPORT_SYMBOL_HDA(snd_hda_codec_amp_stereo
);
1510 #ifdef SND_HDA_NEEDS_RESUME
1512 * snd_hda_codec_resume_amp - Resume all AMP commands from the cache
1513 * @codec: HD-audio codec
1515 * Resume the all amp commands from the cache.
1517 void snd_hda_codec_resume_amp(struct hda_codec
*codec
)
1519 struct hda_amp_info
*buffer
= codec
->amp_cache
.buf
.list
;
1522 for (i
= 0; i
< codec
->amp_cache
.buf
.used
; i
++, buffer
++) {
1523 u32 key
= buffer
->head
.key
;
1525 unsigned int idx
, dir
, ch
;
1529 idx
= (key
>> 16) & 0xff;
1530 dir
= (key
>> 24) & 0xff;
1531 for (ch
= 0; ch
< 2; ch
++) {
1532 if (!(buffer
->head
.val
& INFO_AMP_VOL(ch
)))
1534 put_vol_mute(codec
, buffer
, nid
, ch
, dir
, idx
,
1539 EXPORT_SYMBOL_HDA(snd_hda_codec_resume_amp
);
1540 #endif /* SND_HDA_NEEDS_RESUME */
1543 * snd_hda_mixer_amp_volume_info - Info callback for a standard AMP mixer
1545 * The control element is supposed to have the private_value field
1546 * set up via HDA_COMPOSE_AMP_VAL*() or related macros.
1548 int snd_hda_mixer_amp_volume_info(struct snd_kcontrol
*kcontrol
,
1549 struct snd_ctl_elem_info
*uinfo
)
1551 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
1552 u16 nid
= get_amp_nid(kcontrol
);
1553 u8 chs
= get_amp_channels(kcontrol
);
1554 int dir
= get_amp_direction(kcontrol
);
1555 unsigned int ofs
= get_amp_offset(kcontrol
);
1558 caps
= query_amp_caps(codec
, nid
, dir
);
1560 caps
= (caps
& AC_AMPCAP_NUM_STEPS
) >> AC_AMPCAP_NUM_STEPS_SHIFT
;
1562 printk(KERN_WARNING
"hda_codec: "
1563 "num_steps = 0 for NID=0x%x (ctl = %s)\n", nid
,
1569 uinfo
->type
= SNDRV_CTL_ELEM_TYPE_INTEGER
;
1570 uinfo
->count
= chs
== 3 ? 2 : 1;
1571 uinfo
->value
.integer
.min
= 0;
1572 uinfo
->value
.integer
.max
= caps
;
1575 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_volume_info
);
1578 static inline unsigned int
1579 read_amp_value(struct hda_codec
*codec
, hda_nid_t nid
,
1580 int ch
, int dir
, int idx
, unsigned int ofs
)
1583 val
= snd_hda_codec_amp_read(codec
, nid
, ch
, dir
, idx
);
1584 val
&= HDA_AMP_VOLMASK
;
1593 update_amp_value(struct hda_codec
*codec
, hda_nid_t nid
,
1594 int ch
, int dir
, int idx
, unsigned int ofs
,
1599 return snd_hda_codec_amp_update(codec
, nid
, ch
, dir
, idx
,
1600 HDA_AMP_VOLMASK
, val
);
1604 * snd_hda_mixer_amp_volume_get - Get callback for a standard AMP mixer volume
1606 * The control element is supposed to have the private_value field
1607 * set up via HDA_COMPOSE_AMP_VAL*() or related macros.
1609 int snd_hda_mixer_amp_volume_get(struct snd_kcontrol
*kcontrol
,
1610 struct snd_ctl_elem_value
*ucontrol
)
1612 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
1613 hda_nid_t nid
= get_amp_nid(kcontrol
);
1614 int chs
= get_amp_channels(kcontrol
);
1615 int dir
= get_amp_direction(kcontrol
);
1616 int idx
= get_amp_index(kcontrol
);
1617 unsigned int ofs
= get_amp_offset(kcontrol
);
1618 long *valp
= ucontrol
->value
.integer
.value
;
1621 *valp
++ = read_amp_value(codec
, nid
, 0, dir
, idx
, ofs
);
1623 *valp
= read_amp_value(codec
, nid
, 1, dir
, idx
, ofs
);
1626 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_volume_get
);
1629 * snd_hda_mixer_amp_volume_put - Put callback for a standard AMP mixer volume
1631 * The control element is supposed to have the private_value field
1632 * set up via HDA_COMPOSE_AMP_VAL*() or related macros.
1634 int snd_hda_mixer_amp_volume_put(struct snd_kcontrol
*kcontrol
,
1635 struct snd_ctl_elem_value
*ucontrol
)
1637 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
1638 hda_nid_t nid
= get_amp_nid(kcontrol
);
1639 int chs
= get_amp_channels(kcontrol
);
1640 int dir
= get_amp_direction(kcontrol
);
1641 int idx
= get_amp_index(kcontrol
);
1642 unsigned int ofs
= get_amp_offset(kcontrol
);
1643 long *valp
= ucontrol
->value
.integer
.value
;
1646 snd_hda_power_up(codec
);
1648 change
= update_amp_value(codec
, nid
, 0, dir
, idx
, ofs
, *valp
);
1652 change
|= update_amp_value(codec
, nid
, 1, dir
, idx
, ofs
, *valp
);
1653 snd_hda_power_down(codec
);
1656 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_volume_put
);
1659 * snd_hda_mixer_amp_volume_put - TLV callback for a standard AMP mixer volume
1661 * The control element is supposed to have the private_value field
1662 * set up via HDA_COMPOSE_AMP_VAL*() or related macros.
1664 int snd_hda_mixer_amp_tlv(struct snd_kcontrol
*kcontrol
, int op_flag
,
1665 unsigned int size
, unsigned int __user
*_tlv
)
1667 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
1668 hda_nid_t nid
= get_amp_nid(kcontrol
);
1669 int dir
= get_amp_direction(kcontrol
);
1670 unsigned int ofs
= get_amp_offset(kcontrol
);
1671 u32 caps
, val1
, val2
;
1673 if (size
< 4 * sizeof(unsigned int))
1675 caps
= query_amp_caps(codec
, nid
, dir
);
1676 val2
= (caps
& AC_AMPCAP_STEP_SIZE
) >> AC_AMPCAP_STEP_SIZE_SHIFT
;
1677 val2
= (val2
+ 1) * 25;
1678 val1
= -((caps
& AC_AMPCAP_OFFSET
) >> AC_AMPCAP_OFFSET_SHIFT
);
1680 val1
= ((int)val1
) * ((int)val2
);
1681 if (put_user(SNDRV_CTL_TLVT_DB_SCALE
, _tlv
))
1683 if (put_user(2 * sizeof(unsigned int), _tlv
+ 1))
1685 if (put_user(val1
, _tlv
+ 2))
1687 if (put_user(val2
, _tlv
+ 3))
1691 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_tlv
);
1694 * snd_hda_set_vmaster_tlv - Set TLV for a virtual master control
1695 * @codec: HD-audio codec
1696 * @nid: NID of a reference widget
1697 * @dir: #HDA_INPUT or #HDA_OUTPUT
1698 * @tlv: TLV data to be stored, at least 4 elements
1700 * Set (static) TLV data for a virtual master volume using the AMP caps
1701 * obtained from the reference NID.
1702 * The volume range is recalculated as if the max volume is 0dB.
1704 void snd_hda_set_vmaster_tlv(struct hda_codec
*codec
, hda_nid_t nid
, int dir
,
1710 caps
= query_amp_caps(codec
, nid
, dir
);
1711 nums
= (caps
& AC_AMPCAP_NUM_STEPS
) >> AC_AMPCAP_NUM_STEPS_SHIFT
;
1712 step
= (caps
& AC_AMPCAP_STEP_SIZE
) >> AC_AMPCAP_STEP_SIZE_SHIFT
;
1713 step
= (step
+ 1) * 25;
1714 tlv
[0] = SNDRV_CTL_TLVT_DB_SCALE
;
1715 tlv
[1] = 2 * sizeof(unsigned int);
1716 tlv
[2] = -nums
* step
;
1719 EXPORT_SYMBOL_HDA(snd_hda_set_vmaster_tlv
);
1721 /* find a mixer control element with the given name */
1722 static struct snd_kcontrol
*
1723 _snd_hda_find_mixer_ctl(struct hda_codec
*codec
,
1724 const char *name
, int idx
)
1726 struct snd_ctl_elem_id id
;
1727 memset(&id
, 0, sizeof(id
));
1728 id
.iface
= SNDRV_CTL_ELEM_IFACE_MIXER
;
1730 if (snd_BUG_ON(strlen(name
) >= sizeof(id
.name
)))
1732 strcpy(id
.name
, name
);
1733 return snd_ctl_find_id(codec
->bus
->card
, &id
);
1737 * snd_hda_find_mixer_ctl - Find a mixer control element with the given name
1738 * @codec: HD-audio codec
1739 * @name: ctl id name string
1741 * Get the control element with the given id string and IFACE_MIXER.
1743 struct snd_kcontrol
*snd_hda_find_mixer_ctl(struct hda_codec
*codec
,
1746 return _snd_hda_find_mixer_ctl(codec
, name
, 0);
1748 EXPORT_SYMBOL_HDA(snd_hda_find_mixer_ctl
);
1751 * snd_hda_ctl_add - Add a control element and assign to the codec
1752 * @codec: HD-audio codec
1753 * @nid: corresponding NID (optional)
1754 * @kctl: the control element to assign
1756 * Add the given control element to an array inside the codec instance.
1757 * All control elements belonging to a codec are supposed to be added
1758 * by this function so that a proper clean-up works at the free or
1759 * reconfiguration time.
1761 * If non-zero @nid is passed, the NID is assigned to the control element.
1762 * The assignment is shown in the codec proc file.
1764 * snd_hda_ctl_add() checks the control subdev id field whether
1765 * #HDA_SUBDEV_NID_FLAG bit is set. If set (and @nid is zero), the lower
1766 * bits value is taken as the NID to assign. The #HDA_NID_ITEM_AMP bit
1767 * specifies if kctl->private_value is a HDA amplifier value.
1769 int snd_hda_ctl_add(struct hda_codec
*codec
, hda_nid_t nid
,
1770 struct snd_kcontrol
*kctl
)
1773 unsigned short flags
= 0;
1774 struct hda_nid_item
*item
;
1776 if (kctl
->id
.subdevice
& HDA_SUBDEV_AMP_FLAG
) {
1777 flags
|= HDA_NID_ITEM_AMP
;
1779 nid
= get_amp_nid_(kctl
->private_value
);
1781 if ((kctl
->id
.subdevice
& HDA_SUBDEV_NID_FLAG
) != 0 && nid
== 0)
1782 nid
= kctl
->id
.subdevice
& 0xffff;
1783 if (kctl
->id
.subdevice
& (HDA_SUBDEV_NID_FLAG
|HDA_SUBDEV_AMP_FLAG
))
1784 kctl
->id
.subdevice
= 0;
1785 err
= snd_ctl_add(codec
->bus
->card
, kctl
);
1788 item
= snd_array_new(&codec
->mixers
);
1793 item
->flags
= flags
;
1796 EXPORT_SYMBOL_HDA(snd_hda_ctl_add
);
1799 * snd_hda_add_nid - Assign a NID to a control element
1800 * @codec: HD-audio codec
1801 * @nid: corresponding NID (optional)
1802 * @kctl: the control element to assign
1803 * @index: index to kctl
1805 * Add the given control element to an array inside the codec instance.
1806 * This function is used when #snd_hda_ctl_add cannot be used for 1:1
1807 * NID:KCTL mapping - for example "Capture Source" selector.
1809 int snd_hda_add_nid(struct hda_codec
*codec
, struct snd_kcontrol
*kctl
,
1810 unsigned int index
, hda_nid_t nid
)
1812 struct hda_nid_item
*item
;
1815 item
= snd_array_new(&codec
->nids
);
1819 item
->index
= index
;
1823 printk(KERN_ERR
"hda-codec: no NID for mapping control %s:%d:%d\n",
1824 kctl
->id
.name
, kctl
->id
.index
, index
);
1827 EXPORT_SYMBOL_HDA(snd_hda_add_nid
);
1830 * snd_hda_ctls_clear - Clear all controls assigned to the given codec
1831 * @codec: HD-audio codec
1833 void snd_hda_ctls_clear(struct hda_codec
*codec
)
1836 struct hda_nid_item
*items
= codec
->mixers
.list
;
1837 for (i
= 0; i
< codec
->mixers
.used
; i
++)
1838 snd_ctl_remove(codec
->bus
->card
, items
[i
].kctl
);
1839 snd_array_free(&codec
->mixers
);
1840 snd_array_free(&codec
->nids
);
1843 /* pseudo device locking
1844 * toggle card->shutdown to allow/disallow the device access (as a hack)
1846 static int hda_lock_devices(struct snd_card
*card
)
1848 spin_lock(&card
->files_lock
);
1849 if (card
->shutdown
) {
1850 spin_unlock(&card
->files_lock
);
1854 spin_unlock(&card
->files_lock
);
1858 static void hda_unlock_devices(struct snd_card
*card
)
1860 spin_lock(&card
->files_lock
);
1862 spin_unlock(&card
->files_lock
);
1866 * snd_hda_codec_reset - Clear all objects assigned to the codec
1867 * @codec: HD-audio codec
1869 * This frees the all PCM and control elements assigned to the codec, and
1870 * clears the caches and restores the pin default configurations.
1872 * When a device is being used, it returns -EBSY. If successfully freed,
1875 int snd_hda_codec_reset(struct hda_codec
*codec
)
1877 struct snd_card
*card
= codec
->bus
->card
;
1880 if (hda_lock_devices(card
) < 0)
1882 /* check whether the codec isn't used by any mixer or PCM streams */
1883 if (!list_empty(&card
->ctl_files
)) {
1884 hda_unlock_devices(card
);
1887 for (pcm
= 0; pcm
< codec
->num_pcms
; pcm
++) {
1888 struct hda_pcm
*cpcm
= &codec
->pcm_info
[pcm
];
1891 if (cpcm
->pcm
->streams
[0].substream_opened
||
1892 cpcm
->pcm
->streams
[1].substream_opened
) {
1893 hda_unlock_devices(card
);
1898 /* OK, let it free */
1900 #ifdef CONFIG_SND_HDA_POWER_SAVE
1901 cancel_delayed_work(&codec
->power_work
);
1902 flush_workqueue(codec
->bus
->workq
);
1904 snd_hda_ctls_clear(codec
);
1906 for (i
= 0; i
< codec
->num_pcms
; i
++) {
1907 if (codec
->pcm_info
[i
].pcm
) {
1908 snd_device_free(card
, codec
->pcm_info
[i
].pcm
);
1909 clear_bit(codec
->pcm_info
[i
].device
,
1910 codec
->bus
->pcm_dev_bits
);
1913 if (codec
->patch_ops
.free
)
1914 codec
->patch_ops
.free(codec
);
1915 codec
->proc_widget_hook
= NULL
;
1917 free_hda_cache(&codec
->amp_cache
);
1918 free_hda_cache(&codec
->cmd_cache
);
1919 init_hda_cache(&codec
->amp_cache
, sizeof(struct hda_amp_info
));
1920 init_hda_cache(&codec
->cmd_cache
, sizeof(struct hda_cache_head
));
1921 /* free only driver_pins so that init_pins + user_pins are restored */
1922 snd_array_free(&codec
->driver_pins
);
1923 restore_pincfgs(codec
);
1924 codec
->num_pcms
= 0;
1925 codec
->pcm_info
= NULL
;
1926 codec
->preset
= NULL
;
1927 memset(&codec
->patch_ops
, 0, sizeof(codec
->patch_ops
));
1928 codec
->slave_dig_outs
= NULL
;
1929 codec
->spdif_status_reset
= 0;
1930 module_put(codec
->owner
);
1931 codec
->owner
= NULL
;
1933 /* allow device access again */
1934 hda_unlock_devices(card
);
1939 * snd_hda_add_vmaster - create a virtual master control and add slaves
1940 * @codec: HD-audio codec
1941 * @name: vmaster control name
1942 * @tlv: TLV data (optional)
1943 * @slaves: slave control names (optional)
1945 * Create a virtual master control with the given name. The TLV data
1946 * must be either NULL or a valid data.
1948 * @slaves is a NULL-terminated array of strings, each of which is a
1949 * slave control name. All controls with these names are assigned to
1950 * the new virtual master control.
1952 * This function returns zero if successful or a negative error code.
1954 int snd_hda_add_vmaster(struct hda_codec
*codec
, char *name
,
1955 unsigned int *tlv
, const char **slaves
)
1957 struct snd_kcontrol
*kctl
;
1961 for (s
= slaves
; *s
&& !snd_hda_find_mixer_ctl(codec
, *s
); s
++)
1964 snd_printdd("No slave found for %s\n", name
);
1967 kctl
= snd_ctl_make_virtual_master(name
, tlv
);
1970 err
= snd_hda_ctl_add(codec
, 0, kctl
);
1974 for (s
= slaves
; *s
; s
++) {
1975 struct snd_kcontrol
*sctl
;
1978 sctl
= _snd_hda_find_mixer_ctl(codec
, *s
, i
);
1981 snd_printdd("Cannot find slave %s, "
1985 err
= snd_ctl_add_slave(kctl
, sctl
);
1993 EXPORT_SYMBOL_HDA(snd_hda_add_vmaster
);
1996 * snd_hda_mixer_amp_switch_info - Info callback for a standard AMP mixer switch
1998 * The control element is supposed to have the private_value field
1999 * set up via HDA_COMPOSE_AMP_VAL*() or related macros.
2001 int snd_hda_mixer_amp_switch_info(struct snd_kcontrol
*kcontrol
,
2002 struct snd_ctl_elem_info
*uinfo
)
2004 int chs
= get_amp_channels(kcontrol
);
2006 uinfo
->type
= SNDRV_CTL_ELEM_TYPE_BOOLEAN
;
2007 uinfo
->count
= chs
== 3 ? 2 : 1;
2008 uinfo
->value
.integer
.min
= 0;
2009 uinfo
->value
.integer
.max
= 1;
2012 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_switch_info
);
2015 * snd_hda_mixer_amp_switch_get - Get callback for a standard AMP mixer switch
2017 * The control element is supposed to have the private_value field
2018 * set up via HDA_COMPOSE_AMP_VAL*() or related macros.
2020 int snd_hda_mixer_amp_switch_get(struct snd_kcontrol
*kcontrol
,
2021 struct snd_ctl_elem_value
*ucontrol
)
2023 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
2024 hda_nid_t nid
= get_amp_nid(kcontrol
);
2025 int chs
= get_amp_channels(kcontrol
);
2026 int dir
= get_amp_direction(kcontrol
);
2027 int idx
= get_amp_index(kcontrol
);
2028 long *valp
= ucontrol
->value
.integer
.value
;
2031 *valp
++ = (snd_hda_codec_amp_read(codec
, nid
, 0, dir
, idx
) &
2032 HDA_AMP_MUTE
) ? 0 : 1;
2034 *valp
= (snd_hda_codec_amp_read(codec
, nid
, 1, dir
, idx
) &
2035 HDA_AMP_MUTE
) ? 0 : 1;
2038 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_switch_get
);
2041 * snd_hda_mixer_amp_switch_put - Put callback for a standard AMP mixer switch
2043 * The control element is supposed to have the private_value field
2044 * set up via HDA_COMPOSE_AMP_VAL*() or related macros.
2046 int snd_hda_mixer_amp_switch_put(struct snd_kcontrol
*kcontrol
,
2047 struct snd_ctl_elem_value
*ucontrol
)
2049 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
2050 hda_nid_t nid
= get_amp_nid(kcontrol
);
2051 int chs
= get_amp_channels(kcontrol
);
2052 int dir
= get_amp_direction(kcontrol
);
2053 int idx
= get_amp_index(kcontrol
);
2054 long *valp
= ucontrol
->value
.integer
.value
;
2057 snd_hda_power_up(codec
);
2059 change
= snd_hda_codec_amp_update(codec
, nid
, 0, dir
, idx
,
2061 *valp
? 0 : HDA_AMP_MUTE
);
2065 change
|= snd_hda_codec_amp_update(codec
, nid
, 1, dir
, idx
,
2067 *valp
? 0 : HDA_AMP_MUTE
);
2068 #ifdef CONFIG_SND_HDA_POWER_SAVE
2069 if (codec
->patch_ops
.check_power_status
)
2070 codec
->patch_ops
.check_power_status(codec
, nid
);
2072 snd_hda_power_down(codec
);
2075 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_switch_put
);
2077 #ifdef CONFIG_SND_HDA_INPUT_BEEP
2079 * snd_hda_mixer_amp_switch_put_beep - Put callback for a beep AMP switch
2081 * This function calls snd_hda_enable_beep_device(), which behaves differently
2082 * depending on beep_mode option.
2084 int snd_hda_mixer_amp_switch_put_beep(struct snd_kcontrol
*kcontrol
,
2085 struct snd_ctl_elem_value
*ucontrol
)
2087 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
2088 long *valp
= ucontrol
->value
.integer
.value
;
2090 snd_hda_enable_beep_device(codec
, *valp
);
2091 return snd_hda_mixer_amp_switch_put(kcontrol
, ucontrol
);
2093 EXPORT_SYMBOL_HDA(snd_hda_mixer_amp_switch_put_beep
);
2094 #endif /* CONFIG_SND_HDA_INPUT_BEEP */
2097 * bound volume controls
2099 * bind multiple volumes (# indices, from 0)
2102 #define AMP_VAL_IDX_SHIFT 19
2103 #define AMP_VAL_IDX_MASK (0x0f<<19)
2106 * snd_hda_mixer_bind_switch_get - Get callback for a bound volume control
2108 * The control element is supposed to have the private_value field
2109 * set up via HDA_BIND_MUTE*() macros.
2111 int snd_hda_mixer_bind_switch_get(struct snd_kcontrol
*kcontrol
,
2112 struct snd_ctl_elem_value
*ucontrol
)
2114 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
2118 mutex_lock(&codec
->control_mutex
);
2119 pval
= kcontrol
->private_value
;
2120 kcontrol
->private_value
= pval
& ~AMP_VAL_IDX_MASK
; /* index 0 */
2121 err
= snd_hda_mixer_amp_switch_get(kcontrol
, ucontrol
);
2122 kcontrol
->private_value
= pval
;
2123 mutex_unlock(&codec
->control_mutex
);
2126 EXPORT_SYMBOL_HDA(snd_hda_mixer_bind_switch_get
);
2129 * snd_hda_mixer_bind_switch_put - Put callback for a bound volume control
2131 * The control element is supposed to have the private_value field
2132 * set up via HDA_BIND_MUTE*() macros.
2134 int snd_hda_mixer_bind_switch_put(struct snd_kcontrol
*kcontrol
,
2135 struct snd_ctl_elem_value
*ucontrol
)
2137 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
2139 int i
, indices
, err
= 0, change
= 0;
2141 mutex_lock(&codec
->control_mutex
);
2142 pval
= kcontrol
->private_value
;
2143 indices
= (pval
& AMP_VAL_IDX_MASK
) >> AMP_VAL_IDX_SHIFT
;
2144 for (i
= 0; i
< indices
; i
++) {
2145 kcontrol
->private_value
= (pval
& ~AMP_VAL_IDX_MASK
) |
2146 (i
<< AMP_VAL_IDX_SHIFT
);
2147 err
= snd_hda_mixer_amp_switch_put(kcontrol
, ucontrol
);
2152 kcontrol
->private_value
= pval
;
2153 mutex_unlock(&codec
->control_mutex
);
2154 return err
< 0 ? err
: change
;
2156 EXPORT_SYMBOL_HDA(snd_hda_mixer_bind_switch_put
);
2159 * snd_hda_mixer_bind_ctls_info - Info callback for a generic bound control
2161 * The control element is supposed to have the private_value field
2162 * set up via HDA_BIND_VOL() or HDA_BIND_SW() macros.
2164 int snd_hda_mixer_bind_ctls_info(struct snd_kcontrol
*kcontrol
,
2165 struct snd_ctl_elem_info
*uinfo
)
2167 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
2168 struct hda_bind_ctls
*c
;
2171 mutex_lock(&codec
->control_mutex
);
2172 c
= (struct hda_bind_ctls
*)kcontrol
->private_value
;
2173 kcontrol
->private_value
= *c
->values
;
2174 err
= c
->ops
->info(kcontrol
, uinfo
);
2175 kcontrol
->private_value
= (long)c
;
2176 mutex_unlock(&codec
->control_mutex
);
2179 EXPORT_SYMBOL_HDA(snd_hda_mixer_bind_ctls_info
);
2182 * snd_hda_mixer_bind_ctls_get - Get callback for a generic bound control
2184 * The control element is supposed to have the private_value field
2185 * set up via HDA_BIND_VOL() or HDA_BIND_SW() macros.
2187 int snd_hda_mixer_bind_ctls_get(struct snd_kcontrol
*kcontrol
,
2188 struct snd_ctl_elem_value
*ucontrol
)
2190 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
2191 struct hda_bind_ctls
*c
;
2194 mutex_lock(&codec
->control_mutex
);
2195 c
= (struct hda_bind_ctls
*)kcontrol
->private_value
;
2196 kcontrol
->private_value
= *c
->values
;
2197 err
= c
->ops
->get(kcontrol
, ucontrol
);
2198 kcontrol
->private_value
= (long)c
;
2199 mutex_unlock(&codec
->control_mutex
);
2202 EXPORT_SYMBOL_HDA(snd_hda_mixer_bind_ctls_get
);
2205 * snd_hda_mixer_bind_ctls_put - Put callback for a generic bound control
2207 * The control element is supposed to have the private_value field
2208 * set up via HDA_BIND_VOL() or HDA_BIND_SW() macros.
2210 int snd_hda_mixer_bind_ctls_put(struct snd_kcontrol
*kcontrol
,
2211 struct snd_ctl_elem_value
*ucontrol
)
2213 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
2214 struct hda_bind_ctls
*c
;
2215 unsigned long *vals
;
2216 int err
= 0, change
= 0;
2218 mutex_lock(&codec
->control_mutex
);
2219 c
= (struct hda_bind_ctls
*)kcontrol
->private_value
;
2220 for (vals
= c
->values
; *vals
; vals
++) {
2221 kcontrol
->private_value
= *vals
;
2222 err
= c
->ops
->put(kcontrol
, ucontrol
);
2227 kcontrol
->private_value
= (long)c
;
2228 mutex_unlock(&codec
->control_mutex
);
2229 return err
< 0 ? err
: change
;
2231 EXPORT_SYMBOL_HDA(snd_hda_mixer_bind_ctls_put
);
2234 * snd_hda_mixer_bind_tlv - TLV callback for a generic bound control
2236 * The control element is supposed to have the private_value field
2237 * set up via HDA_BIND_VOL() macro.
2239 int snd_hda_mixer_bind_tlv(struct snd_kcontrol
*kcontrol
, int op_flag
,
2240 unsigned int size
, unsigned int __user
*tlv
)
2242 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
2243 struct hda_bind_ctls
*c
;
2246 mutex_lock(&codec
->control_mutex
);
2247 c
= (struct hda_bind_ctls
*)kcontrol
->private_value
;
2248 kcontrol
->private_value
= *c
->values
;
2249 err
= c
->ops
->tlv(kcontrol
, op_flag
, size
, tlv
);
2250 kcontrol
->private_value
= (long)c
;
2251 mutex_unlock(&codec
->control_mutex
);
2254 EXPORT_SYMBOL_HDA(snd_hda_mixer_bind_tlv
);
2256 struct hda_ctl_ops snd_hda_bind_vol
= {
2257 .info
= snd_hda_mixer_amp_volume_info
,
2258 .get
= snd_hda_mixer_amp_volume_get
,
2259 .put
= snd_hda_mixer_amp_volume_put
,
2260 .tlv
= snd_hda_mixer_amp_tlv
2262 EXPORT_SYMBOL_HDA(snd_hda_bind_vol
);
2264 struct hda_ctl_ops snd_hda_bind_sw
= {
2265 .info
= snd_hda_mixer_amp_switch_info
,
2266 .get
= snd_hda_mixer_amp_switch_get
,
2267 .put
= snd_hda_mixer_amp_switch_put
,
2268 .tlv
= snd_hda_mixer_amp_tlv
2270 EXPORT_SYMBOL_HDA(snd_hda_bind_sw
);
2273 * SPDIF out controls
2276 static int snd_hda_spdif_mask_info(struct snd_kcontrol
*kcontrol
,
2277 struct snd_ctl_elem_info
*uinfo
)
2279 uinfo
->type
= SNDRV_CTL_ELEM_TYPE_IEC958
;
2284 static int snd_hda_spdif_cmask_get(struct snd_kcontrol
*kcontrol
,
2285 struct snd_ctl_elem_value
*ucontrol
)
2287 ucontrol
->value
.iec958
.status
[0] = IEC958_AES0_PROFESSIONAL
|
2288 IEC958_AES0_NONAUDIO
|
2289 IEC958_AES0_CON_EMPHASIS_5015
|
2290 IEC958_AES0_CON_NOT_COPYRIGHT
;
2291 ucontrol
->value
.iec958
.status
[1] = IEC958_AES1_CON_CATEGORY
|
2292 IEC958_AES1_CON_ORIGINAL
;
2296 static int snd_hda_spdif_pmask_get(struct snd_kcontrol
*kcontrol
,
2297 struct snd_ctl_elem_value
*ucontrol
)
2299 ucontrol
->value
.iec958
.status
[0] = IEC958_AES0_PROFESSIONAL
|
2300 IEC958_AES0_NONAUDIO
|
2301 IEC958_AES0_PRO_EMPHASIS_5015
;
2305 static int snd_hda_spdif_default_get(struct snd_kcontrol
*kcontrol
,
2306 struct snd_ctl_elem_value
*ucontrol
)
2308 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
2310 ucontrol
->value
.iec958
.status
[0] = codec
->spdif_status
& 0xff;
2311 ucontrol
->value
.iec958
.status
[1] = (codec
->spdif_status
>> 8) & 0xff;
2312 ucontrol
->value
.iec958
.status
[2] = (codec
->spdif_status
>> 16) & 0xff;
2313 ucontrol
->value
.iec958
.status
[3] = (codec
->spdif_status
>> 24) & 0xff;
2318 /* convert from SPDIF status bits to HDA SPDIF bits
2319 * bit 0 (DigEn) is always set zero (to be filled later)
2321 static unsigned short convert_from_spdif_status(unsigned int sbits
)
2323 unsigned short val
= 0;
2325 if (sbits
& IEC958_AES0_PROFESSIONAL
)
2326 val
|= AC_DIG1_PROFESSIONAL
;
2327 if (sbits
& IEC958_AES0_NONAUDIO
)
2328 val
|= AC_DIG1_NONAUDIO
;
2329 if (sbits
& IEC958_AES0_PROFESSIONAL
) {
2330 if ((sbits
& IEC958_AES0_PRO_EMPHASIS
) ==
2331 IEC958_AES0_PRO_EMPHASIS_5015
)
2332 val
|= AC_DIG1_EMPHASIS
;
2334 if ((sbits
& IEC958_AES0_CON_EMPHASIS
) ==
2335 IEC958_AES0_CON_EMPHASIS_5015
)
2336 val
|= AC_DIG1_EMPHASIS
;
2337 if (!(sbits
& IEC958_AES0_CON_NOT_COPYRIGHT
))
2338 val
|= AC_DIG1_COPYRIGHT
;
2339 if (sbits
& (IEC958_AES1_CON_ORIGINAL
<< 8))
2340 val
|= AC_DIG1_LEVEL
;
2341 val
|= sbits
& (IEC958_AES1_CON_CATEGORY
<< 8);
2346 /* convert to SPDIF status bits from HDA SPDIF bits
2348 static unsigned int convert_to_spdif_status(unsigned short val
)
2350 unsigned int sbits
= 0;
2352 if (val
& AC_DIG1_NONAUDIO
)
2353 sbits
|= IEC958_AES0_NONAUDIO
;
2354 if (val
& AC_DIG1_PROFESSIONAL
)
2355 sbits
|= IEC958_AES0_PROFESSIONAL
;
2356 if (sbits
& IEC958_AES0_PROFESSIONAL
) {
2357 if (sbits
& AC_DIG1_EMPHASIS
)
2358 sbits
|= IEC958_AES0_PRO_EMPHASIS_5015
;
2360 if (val
& AC_DIG1_EMPHASIS
)
2361 sbits
|= IEC958_AES0_CON_EMPHASIS_5015
;
2362 if (!(val
& AC_DIG1_COPYRIGHT
))
2363 sbits
|= IEC958_AES0_CON_NOT_COPYRIGHT
;
2364 if (val
& AC_DIG1_LEVEL
)
2365 sbits
|= (IEC958_AES1_CON_ORIGINAL
<< 8);
2366 sbits
|= val
& (0x7f << 8);
2371 /* set digital convert verbs both for the given NID and its slaves */
2372 static void set_dig_out(struct hda_codec
*codec
, hda_nid_t nid
,
2377 snd_hda_codec_write_cache(codec
, nid
, 0, verb
, val
);
2378 d
= codec
->slave_dig_outs
;
2382 snd_hda_codec_write_cache(codec
, *d
, 0, verb
, val
);
2385 static inline void set_dig_out_convert(struct hda_codec
*codec
, hda_nid_t nid
,
2389 set_dig_out(codec
, nid
, AC_VERB_SET_DIGI_CONVERT_1
, dig1
);
2391 set_dig_out(codec
, nid
, AC_VERB_SET_DIGI_CONVERT_2
, dig2
);
2394 static int snd_hda_spdif_default_put(struct snd_kcontrol
*kcontrol
,
2395 struct snd_ctl_elem_value
*ucontrol
)
2397 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
2398 hda_nid_t nid
= kcontrol
->private_value
;
2402 mutex_lock(&codec
->spdif_mutex
);
2403 codec
->spdif_status
= ucontrol
->value
.iec958
.status
[0] |
2404 ((unsigned int)ucontrol
->value
.iec958
.status
[1] << 8) |
2405 ((unsigned int)ucontrol
->value
.iec958
.status
[2] << 16) |
2406 ((unsigned int)ucontrol
->value
.iec958
.status
[3] << 24);
2407 val
= convert_from_spdif_status(codec
->spdif_status
);
2408 val
|= codec
->spdif_ctls
& 1;
2409 change
= codec
->spdif_ctls
!= val
;
2410 codec
->spdif_ctls
= val
;
2413 set_dig_out_convert(codec
, nid
, val
& 0xff, (val
>> 8) & 0xff);
2415 mutex_unlock(&codec
->spdif_mutex
);
2419 #define snd_hda_spdif_out_switch_info snd_ctl_boolean_mono_info
2421 static int snd_hda_spdif_out_switch_get(struct snd_kcontrol
*kcontrol
,
2422 struct snd_ctl_elem_value
*ucontrol
)
2424 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
2426 ucontrol
->value
.integer
.value
[0] = codec
->spdif_ctls
& AC_DIG1_ENABLE
;
2430 static int snd_hda_spdif_out_switch_put(struct snd_kcontrol
*kcontrol
,
2431 struct snd_ctl_elem_value
*ucontrol
)
2433 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
2434 hda_nid_t nid
= kcontrol
->private_value
;
2438 mutex_lock(&codec
->spdif_mutex
);
2439 val
= codec
->spdif_ctls
& ~AC_DIG1_ENABLE
;
2440 if (ucontrol
->value
.integer
.value
[0])
2441 val
|= AC_DIG1_ENABLE
;
2442 change
= codec
->spdif_ctls
!= val
;
2444 codec
->spdif_ctls
= val
;
2445 set_dig_out_convert(codec
, nid
, val
& 0xff, -1);
2446 /* unmute amp switch (if any) */
2447 if ((get_wcaps(codec
, nid
) & AC_WCAP_OUT_AMP
) &&
2448 (val
& AC_DIG1_ENABLE
))
2449 snd_hda_codec_amp_stereo(codec
, nid
, HDA_OUTPUT
, 0,
2452 mutex_unlock(&codec
->spdif_mutex
);
2456 static struct snd_kcontrol_new dig_mixes
[] = {
2458 .access
= SNDRV_CTL_ELEM_ACCESS_READ
,
2459 .iface
= SNDRV_CTL_ELEM_IFACE_MIXER
,
2460 .name
= SNDRV_CTL_NAME_IEC958("", PLAYBACK
, CON_MASK
),
2461 .info
= snd_hda_spdif_mask_info
,
2462 .get
= snd_hda_spdif_cmask_get
,
2465 .access
= SNDRV_CTL_ELEM_ACCESS_READ
,
2466 .iface
= SNDRV_CTL_ELEM_IFACE_MIXER
,
2467 .name
= SNDRV_CTL_NAME_IEC958("", PLAYBACK
, PRO_MASK
),
2468 .info
= snd_hda_spdif_mask_info
,
2469 .get
= snd_hda_spdif_pmask_get
,
2472 .iface
= SNDRV_CTL_ELEM_IFACE_MIXER
,
2473 .name
= SNDRV_CTL_NAME_IEC958("", PLAYBACK
, DEFAULT
),
2474 .info
= snd_hda_spdif_mask_info
,
2475 .get
= snd_hda_spdif_default_get
,
2476 .put
= snd_hda_spdif_default_put
,
2479 .iface
= SNDRV_CTL_ELEM_IFACE_MIXER
,
2480 .name
= SNDRV_CTL_NAME_IEC958("", PLAYBACK
, SWITCH
),
2481 .info
= snd_hda_spdif_out_switch_info
,
2482 .get
= snd_hda_spdif_out_switch_get
,
2483 .put
= snd_hda_spdif_out_switch_put
,
2488 #define SPDIF_MAX_IDX 4 /* 4 instances should be enough to probe */
2491 * snd_hda_create_spdif_out_ctls - create Output SPDIF-related controls
2492 * @codec: the HDA codec
2493 * @nid: audio out widget NID
2495 * Creates controls related with the SPDIF output.
2496 * Called from each patch supporting the SPDIF out.
2498 * Returns 0 if successful, or a negative error code.
2500 int snd_hda_create_spdif_out_ctls(struct hda_codec
*codec
, hda_nid_t nid
)
2503 struct snd_kcontrol
*kctl
;
2504 struct snd_kcontrol_new
*dig_mix
;
2507 for (idx
= 0; idx
< SPDIF_MAX_IDX
; idx
++) {
2508 if (!_snd_hda_find_mixer_ctl(codec
, "IEC958 Playback Switch",
2512 if (idx
>= SPDIF_MAX_IDX
) {
2513 printk(KERN_ERR
"hda_codec: too many IEC958 outputs\n");
2516 for (dig_mix
= dig_mixes
; dig_mix
->name
; dig_mix
++) {
2517 kctl
= snd_ctl_new1(dig_mix
, codec
);
2520 kctl
->id
.index
= idx
;
2521 kctl
->private_value
= nid
;
2522 err
= snd_hda_ctl_add(codec
, nid
, kctl
);
2527 snd_hda_codec_read(codec
, nid
, 0,
2528 AC_VERB_GET_DIGI_CONVERT_1
, 0);
2529 codec
->spdif_status
= convert_to_spdif_status(codec
->spdif_ctls
);
2532 EXPORT_SYMBOL_HDA(snd_hda_create_spdif_out_ctls
);
2535 * SPDIF sharing with analog output
2537 static int spdif_share_sw_get(struct snd_kcontrol
*kcontrol
,
2538 struct snd_ctl_elem_value
*ucontrol
)
2540 struct hda_multi_out
*mout
= snd_kcontrol_chip(kcontrol
);
2541 ucontrol
->value
.integer
.value
[0] = mout
->share_spdif
;
2545 static int spdif_share_sw_put(struct snd_kcontrol
*kcontrol
,
2546 struct snd_ctl_elem_value
*ucontrol
)
2548 struct hda_multi_out
*mout
= snd_kcontrol_chip(kcontrol
);
2549 mout
->share_spdif
= !!ucontrol
->value
.integer
.value
[0];
2553 static struct snd_kcontrol_new spdif_share_sw
= {
2554 .iface
= SNDRV_CTL_ELEM_IFACE_MIXER
,
2555 .name
= "IEC958 Default PCM Playback Switch",
2556 .info
= snd_ctl_boolean_mono_info
,
2557 .get
= spdif_share_sw_get
,
2558 .put
= spdif_share_sw_put
,
2562 * snd_hda_create_spdif_share_sw - create Default PCM switch
2563 * @codec: the HDA codec
2564 * @mout: multi-out instance
2566 int snd_hda_create_spdif_share_sw(struct hda_codec
*codec
,
2567 struct hda_multi_out
*mout
)
2569 if (!mout
->dig_out_nid
)
2571 /* ATTENTION: here mout is passed as private_data, instead of codec */
2572 return snd_hda_ctl_add(codec
, mout
->dig_out_nid
,
2573 snd_ctl_new1(&spdif_share_sw
, mout
));
2575 EXPORT_SYMBOL_HDA(snd_hda_create_spdif_share_sw
);
2581 #define snd_hda_spdif_in_switch_info snd_hda_spdif_out_switch_info
2583 static int snd_hda_spdif_in_switch_get(struct snd_kcontrol
*kcontrol
,
2584 struct snd_ctl_elem_value
*ucontrol
)
2586 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
2588 ucontrol
->value
.integer
.value
[0] = codec
->spdif_in_enable
;
2592 static int snd_hda_spdif_in_switch_put(struct snd_kcontrol
*kcontrol
,
2593 struct snd_ctl_elem_value
*ucontrol
)
2595 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
2596 hda_nid_t nid
= kcontrol
->private_value
;
2597 unsigned int val
= !!ucontrol
->value
.integer
.value
[0];
2600 mutex_lock(&codec
->spdif_mutex
);
2601 change
= codec
->spdif_in_enable
!= val
;
2603 codec
->spdif_in_enable
= val
;
2604 snd_hda_codec_write_cache(codec
, nid
, 0,
2605 AC_VERB_SET_DIGI_CONVERT_1
, val
);
2607 mutex_unlock(&codec
->spdif_mutex
);
2611 static int snd_hda_spdif_in_status_get(struct snd_kcontrol
*kcontrol
,
2612 struct snd_ctl_elem_value
*ucontrol
)
2614 struct hda_codec
*codec
= snd_kcontrol_chip(kcontrol
);
2615 hda_nid_t nid
= kcontrol
->private_value
;
2619 val
= snd_hda_codec_read(codec
, nid
, 0, AC_VERB_GET_DIGI_CONVERT_1
, 0);
2620 sbits
= convert_to_spdif_status(val
);
2621 ucontrol
->value
.iec958
.status
[0] = sbits
;
2622 ucontrol
->value
.iec958
.status
[1] = sbits
>> 8;
2623 ucontrol
->value
.iec958
.status
[2] = sbits
>> 16;
2624 ucontrol
->value
.iec958
.status
[3] = sbits
>> 24;
2628 static struct snd_kcontrol_new dig_in_ctls
[] = {
2630 .iface
= SNDRV_CTL_ELEM_IFACE_MIXER
,
2631 .name
= SNDRV_CTL_NAME_IEC958("", CAPTURE
, SWITCH
),
2632 .info
= snd_hda_spdif_in_switch_info
,
2633 .get
= snd_hda_spdif_in_switch_get
,
2634 .put
= snd_hda_spdif_in_switch_put
,
2637 .access
= SNDRV_CTL_ELEM_ACCESS_READ
,
2638 .iface
= SNDRV_CTL_ELEM_IFACE_MIXER
,
2639 .name
= SNDRV_CTL_NAME_IEC958("", CAPTURE
, DEFAULT
),
2640 .info
= snd_hda_spdif_mask_info
,
2641 .get
= snd_hda_spdif_in_status_get
,
2647 * snd_hda_create_spdif_in_ctls - create Input SPDIF-related controls
2648 * @codec: the HDA codec
2649 * @nid: audio in widget NID
2651 * Creates controls related with the SPDIF input.
2652 * Called from each patch supporting the SPDIF in.
2654 * Returns 0 if successful, or a negative error code.
2656 int snd_hda_create_spdif_in_ctls(struct hda_codec
*codec
, hda_nid_t nid
)
2659 struct snd_kcontrol
*kctl
;
2660 struct snd_kcontrol_new
*dig_mix
;
2663 for (idx
= 0; idx
< SPDIF_MAX_IDX
; idx
++) {
2664 if (!_snd_hda_find_mixer_ctl(codec
, "IEC958 Capture Switch",
2668 if (idx
>= SPDIF_MAX_IDX
) {
2669 printk(KERN_ERR
"hda_codec: too many IEC958 inputs\n");
2672 for (dig_mix
= dig_in_ctls
; dig_mix
->name
; dig_mix
++) {
2673 kctl
= snd_ctl_new1(dig_mix
, codec
);
2676 kctl
->private_value
= nid
;
2677 err
= snd_hda_ctl_add(codec
, nid
, kctl
);
2681 codec
->spdif_in_enable
=
2682 snd_hda_codec_read(codec
, nid
, 0,
2683 AC_VERB_GET_DIGI_CONVERT_1
, 0) &
2687 EXPORT_SYMBOL_HDA(snd_hda_create_spdif_in_ctls
);
2689 #ifdef SND_HDA_NEEDS_RESUME
2694 /* build a 32bit cache key with the widget id and the command parameter */
2695 #define build_cmd_cache_key(nid, verb) ((verb << 8) | nid)
2696 #define get_cmd_cache_nid(key) ((key) & 0xff)
2697 #define get_cmd_cache_cmd(key) (((key) >> 8) & 0xffff)
2700 * snd_hda_codec_write_cache - send a single command with caching
2701 * @codec: the HDA codec
2702 * @nid: NID to send the command
2703 * @direct: direct flag
2704 * @verb: the verb to send
2705 * @parm: the parameter for the verb
2707 * Send a single command without waiting for response.
2709 * Returns 0 if successful, or a negative error code.
2711 int snd_hda_codec_write_cache(struct hda_codec
*codec
, hda_nid_t nid
,
2712 int direct
, unsigned int verb
, unsigned int parm
)
2714 int err
= snd_hda_codec_write(codec
, nid
, direct
, verb
, parm
);
2715 struct hda_cache_head
*c
;
2720 /* parm may contain the verb stuff for get/set amp */
2721 verb
= verb
| (parm
>> 8);
2723 key
= build_cmd_cache_key(nid
, verb
);
2724 mutex_lock(&codec
->bus
->cmd_mutex
);
2725 c
= get_alloc_hash(&codec
->cmd_cache
, key
);
2728 mutex_unlock(&codec
->bus
->cmd_mutex
);
2731 EXPORT_SYMBOL_HDA(snd_hda_codec_write_cache
);
2734 * snd_hda_codec_update_cache - check cache and write the cmd only when needed
2735 * @codec: the HDA codec
2736 * @nid: NID to send the command
2737 * @direct: direct flag
2738 * @verb: the verb to send
2739 * @parm: the parameter for the verb
2741 * This function works like snd_hda_codec_write_cache(), but it doesn't send
2742 * command if the parameter is already identical with the cached value.
2743 * If not, it sends the command and refreshes the cache.
2745 * Returns 0 if successful, or a negative error code.
2747 int snd_hda_codec_update_cache(struct hda_codec
*codec
, hda_nid_t nid
,
2748 int direct
, unsigned int verb
, unsigned int parm
)
2750 struct hda_cache_head
*c
;
2753 /* parm may contain the verb stuff for get/set amp */
2754 verb
= verb
| (parm
>> 8);
2756 key
= build_cmd_cache_key(nid
, verb
);
2757 mutex_lock(&codec
->bus
->cmd_mutex
);
2758 c
= get_hash(&codec
->cmd_cache
, key
);
2759 if (c
&& c
->val
== parm
) {
2760 mutex_unlock(&codec
->bus
->cmd_mutex
);
2763 mutex_unlock(&codec
->bus
->cmd_mutex
);
2764 return snd_hda_codec_write_cache(codec
, nid
, direct
, verb
, parm
);
2766 EXPORT_SYMBOL_HDA(snd_hda_codec_update_cache
);
2769 * snd_hda_codec_resume_cache - Resume the all commands from the cache
2770 * @codec: HD-audio codec
2772 * Execute all verbs recorded in the command caches to resume.
2774 void snd_hda_codec_resume_cache(struct hda_codec
*codec
)
2776 struct hda_cache_head
*buffer
= codec
->cmd_cache
.buf
.list
;
2779 for (i
= 0; i
< codec
->cmd_cache
.buf
.used
; i
++, buffer
++) {
2780 u32 key
= buffer
->key
;
2783 snd_hda_codec_write(codec
, get_cmd_cache_nid(key
), 0,
2784 get_cmd_cache_cmd(key
), buffer
->val
);
2787 EXPORT_SYMBOL_HDA(snd_hda_codec_resume_cache
);
2790 * snd_hda_sequence_write_cache - sequence writes with caching
2791 * @codec: the HDA codec
2792 * @seq: VERB array to send
2794 * Send the commands sequentially from the given array.
2795 * Thte commands are recorded on cache for power-save and resume.
2796 * The array must be terminated with NID=0.
2798 void snd_hda_sequence_write_cache(struct hda_codec
*codec
,
2799 const struct hda_verb
*seq
)
2801 for (; seq
->nid
; seq
++)
2802 snd_hda_codec_write_cache(codec
, seq
->nid
, 0, seq
->verb
,
2805 EXPORT_SYMBOL_HDA(snd_hda_sequence_write_cache
);
2806 #endif /* SND_HDA_NEEDS_RESUME */
2809 * set power state of the codec
2811 static void hda_set_power_state(struct hda_codec
*codec
, hda_nid_t fg
,
2812 unsigned int power_state
)
2817 /* this delay seems necessary to avoid click noise at power-down */
2818 if (power_state
== AC_PWRST_D3
)
2820 snd_hda_codec_read(codec
, fg
, 0, AC_VERB_SET_POWER_STATE
,
2822 /* partial workaround for "azx_get_response timeout" */
2823 if (power_state
== AC_PWRST_D0
&&
2824 (codec
->vendor_id
& 0xffff0000) == 0x14f10000)
2827 nid
= codec
->start_nid
;
2828 for (i
= 0; i
< codec
->num_nodes
; i
++, nid
++) {
2829 unsigned int wcaps
= get_wcaps(codec
, nid
);
2830 if (wcaps
& AC_WCAP_POWER
) {
2831 unsigned int wid_type
= get_wcaps_type(wcaps
);
2832 if (power_state
== AC_PWRST_D3
&&
2833 wid_type
== AC_WID_PIN
) {
2834 unsigned int pincap
;
2836 * don't power down the widget if it controls
2837 * eapd and EAPD_BTLENABLE is set.
2839 pincap
= snd_hda_query_pin_caps(codec
, nid
);
2840 if (pincap
& AC_PINCAP_EAPD
) {
2841 int eapd
= snd_hda_codec_read(codec
,
2843 AC_VERB_GET_EAPD_BTLENABLE
, 0);
2849 snd_hda_codec_write(codec
, nid
, 0,
2850 AC_VERB_SET_POWER_STATE
,
2855 if (power_state
== AC_PWRST_D0
) {
2856 unsigned long end_time
;
2858 /* wait until the codec reachs to D0 */
2859 end_time
= jiffies
+ msecs_to_jiffies(500);
2861 state
= snd_hda_codec_read(codec
, fg
, 0,
2862 AC_VERB_GET_POWER_STATE
, 0);
2863 if (state
== power_state
)
2866 } while (time_after_eq(end_time
, jiffies
));
2870 #ifdef CONFIG_SND_HDA_HWDEP
2871 /* execute additional init verbs */
2872 static void hda_exec_init_verbs(struct hda_codec
*codec
)
2874 if (codec
->init_verbs
.list
)
2875 snd_hda_sequence_write(codec
, codec
->init_verbs
.list
);
2878 static inline void hda_exec_init_verbs(struct hda_codec
*codec
) {}
2881 #ifdef SND_HDA_NEEDS_RESUME
2883 * call suspend and power-down; used both from PM and power-save
2885 static void hda_call_codec_suspend(struct hda_codec
*codec
)
2887 if (codec
->patch_ops
.suspend
)
2888 codec
->patch_ops
.suspend(codec
, PMSG_SUSPEND
);
2889 hda_set_power_state(codec
,
2890 codec
->afg
? codec
->afg
: codec
->mfg
,
2892 #ifdef CONFIG_SND_HDA_POWER_SAVE
2893 snd_hda_update_power_acct(codec
);
2894 cancel_delayed_work(&codec
->power_work
);
2895 codec
->power_on
= 0;
2896 codec
->power_transition
= 0;
2897 codec
->power_jiffies
= jiffies
;
2902 * kick up codec; used both from PM and power-save
2904 static void hda_call_codec_resume(struct hda_codec
*codec
)
2906 hda_set_power_state(codec
,
2907 codec
->afg
? codec
->afg
: codec
->mfg
,
2909 restore_pincfgs(codec
); /* restore all current pin configs */
2910 hda_exec_init_verbs(codec
);
2911 if (codec
->patch_ops
.resume
)
2912 codec
->patch_ops
.resume(codec
);
2914 if (codec
->patch_ops
.init
)
2915 codec
->patch_ops
.init(codec
);
2916 snd_hda_codec_resume_amp(codec
);
2917 snd_hda_codec_resume_cache(codec
);
2920 #endif /* SND_HDA_NEEDS_RESUME */
2924 * snd_hda_build_controls - build mixer controls
2927 * Creates mixer controls for each codec included in the bus.
2929 * Returns 0 if successful, otherwise a negative error code.
2931 int /*__devinit*/ snd_hda_build_controls(struct hda_bus
*bus
)
2933 struct hda_codec
*codec
;
2935 list_for_each_entry(codec
, &bus
->codec_list
, list
) {
2936 int err
= snd_hda_codec_build_controls(codec
);
2938 printk(KERN_ERR
"hda_codec: cannot build controls "
2939 "for #%d (error %d)\n", codec
->addr
, err
);
2940 err
= snd_hda_codec_reset(codec
);
2943 "hda_codec: cannot revert codec\n");
2950 EXPORT_SYMBOL_HDA(snd_hda_build_controls
);
2952 int snd_hda_codec_build_controls(struct hda_codec
*codec
)
2955 hda_exec_init_verbs(codec
);
2956 /* continue to initialize... */
2957 if (codec
->patch_ops
.init
)
2958 err
= codec
->patch_ops
.init(codec
);
2959 if (!err
&& codec
->patch_ops
.build_controls
)
2960 err
= codec
->patch_ops
.build_controls(codec
);
2969 struct hda_rate_tbl
{
2971 unsigned int alsa_bits
;
2972 unsigned int hda_fmt
;
2975 static struct hda_rate_tbl rate_bits
[] = {
2976 /* rate in Hz, ALSA rate bitmask, HDA format value */
2978 /* autodetected value used in snd_hda_query_supported_pcm */
2979 { 8000, SNDRV_PCM_RATE_8000
, 0x0500 }, /* 1/6 x 48 */
2980 { 11025, SNDRV_PCM_RATE_11025
, 0x4300 }, /* 1/4 x 44 */
2981 { 16000, SNDRV_PCM_RATE_16000
, 0x0200 }, /* 1/3 x 48 */
2982 { 22050, SNDRV_PCM_RATE_22050
, 0x4100 }, /* 1/2 x 44 */
2983 { 32000, SNDRV_PCM_RATE_32000
, 0x0a00 }, /* 2/3 x 48 */
2984 { 44100, SNDRV_PCM_RATE_44100
, 0x4000 }, /* 44 */
2985 { 48000, SNDRV_PCM_RATE_48000
, 0x0000 }, /* 48 */
2986 { 88200, SNDRV_PCM_RATE_88200
, 0x4800 }, /* 2 x 44 */
2987 { 96000, SNDRV_PCM_RATE_96000
, 0x0800 }, /* 2 x 48 */
2988 { 176400, SNDRV_PCM_RATE_176400
, 0x5800 },/* 4 x 44 */
2989 { 192000, SNDRV_PCM_RATE_192000
, 0x1800 }, /* 4 x 48 */
2990 #define AC_PAR_PCM_RATE_BITS 11
2991 /* up to bits 10, 384kHZ isn't supported properly */
2993 /* not autodetected value */
2994 { 9600, SNDRV_PCM_RATE_KNOT
, 0x0400 }, /* 1/5 x 48 */
2996 { 0 } /* terminator */
3000 * snd_hda_calc_stream_format - calculate format bitset
3001 * @rate: the sample rate
3002 * @channels: the number of channels
3003 * @format: the PCM format (SNDRV_PCM_FORMAT_XXX)
3004 * @maxbps: the max. bps
3006 * Calculate the format bitset from the given rate, channels and th PCM format.
3008 * Return zero if invalid.
3010 unsigned int snd_hda_calc_stream_format(unsigned int rate
,
3011 unsigned int channels
,
3012 unsigned int format
,
3013 unsigned int maxbps
)
3016 unsigned int val
= 0;
3018 for (i
= 0; rate_bits
[i
].hz
; i
++)
3019 if (rate_bits
[i
].hz
== rate
) {
3020 val
= rate_bits
[i
].hda_fmt
;
3023 if (!rate_bits
[i
].hz
) {
3024 snd_printdd("invalid rate %d\n", rate
);
3028 if (channels
== 0 || channels
> 8) {
3029 snd_printdd("invalid channels %d\n", channels
);
3032 val
|= channels
- 1;
3034 switch (snd_pcm_format_width(format
)) {
3044 if (maxbps
>= 32 || format
== SNDRV_PCM_FORMAT_FLOAT_LE
)
3046 else if (maxbps
>= 24)
3052 snd_printdd("invalid format width %d\n",
3053 snd_pcm_format_width(format
));
3059 EXPORT_SYMBOL_HDA(snd_hda_calc_stream_format
);
3061 static unsigned int get_pcm_param(struct hda_codec
*codec
, hda_nid_t nid
)
3063 unsigned int val
= 0;
3064 if (nid
!= codec
->afg
&&
3065 (get_wcaps(codec
, nid
) & AC_WCAP_FORMAT_OVRD
))
3066 val
= snd_hda_param_read(codec
, nid
, AC_PAR_PCM
);
3067 if (!val
|| val
== -1)
3068 val
= snd_hda_param_read(codec
, codec
->afg
, AC_PAR_PCM
);
3069 if (!val
|| val
== -1)
3074 static unsigned int query_pcm_param(struct hda_codec
*codec
, hda_nid_t nid
)
3076 return query_caps_hash(codec
, nid
, HDA_HASH_PARPCM_KEY(nid
),
3080 static unsigned int get_stream_param(struct hda_codec
*codec
, hda_nid_t nid
)
3082 unsigned int streams
= snd_hda_param_read(codec
, nid
, AC_PAR_STREAM
);
3083 if (!streams
|| streams
== -1)
3084 streams
= snd_hda_param_read(codec
, codec
->afg
, AC_PAR_STREAM
);
3085 if (!streams
|| streams
== -1)
3090 static unsigned int query_stream_param(struct hda_codec
*codec
, hda_nid_t nid
)
3092 return query_caps_hash(codec
, nid
, HDA_HASH_PARSTR_KEY(nid
),
3097 * snd_hda_query_supported_pcm - query the supported PCM rates and formats
3098 * @codec: the HDA codec
3099 * @nid: NID to query
3100 * @ratesp: the pointer to store the detected rate bitflags
3101 * @formatsp: the pointer to store the detected formats
3102 * @bpsp: the pointer to store the detected format widths
3104 * Queries the supported PCM rates and formats. The NULL @ratesp, @formatsp
3105 * or @bsps argument is ignored.
3107 * Returns 0 if successful, otherwise a negative error code.
3109 static int snd_hda_query_supported_pcm(struct hda_codec
*codec
, hda_nid_t nid
,
3110 u32
*ratesp
, u64
*formatsp
, unsigned int *bpsp
)
3112 unsigned int i
, val
, wcaps
;
3114 wcaps
= get_wcaps(codec
, nid
);
3115 val
= query_pcm_param(codec
, nid
);
3119 for (i
= 0; i
< AC_PAR_PCM_RATE_BITS
; i
++) {
3121 rates
|= rate_bits
[i
].alsa_bits
;
3124 snd_printk(KERN_ERR
"hda_codec: rates == 0 "
3125 "(nid=0x%x, val=0x%x, ovrd=%i)\n",
3127 (wcaps
& AC_WCAP_FORMAT_OVRD
) ? 1 : 0);
3133 if (formatsp
|| bpsp
) {
3135 unsigned int streams
, bps
;
3137 streams
= query_stream_param(codec
, nid
);
3142 if (streams
& AC_SUPFMT_PCM
) {
3143 if (val
& AC_SUPPCM_BITS_8
) {
3144 formats
|= SNDRV_PCM_FMTBIT_U8
;
3147 if (val
& AC_SUPPCM_BITS_16
) {
3148 formats
|= SNDRV_PCM_FMTBIT_S16_LE
;
3151 if (wcaps
& AC_WCAP_DIGITAL
) {
3152 if (val
& AC_SUPPCM_BITS_32
)
3153 formats
|= SNDRV_PCM_FMTBIT_IEC958_SUBFRAME_LE
;
3154 if (val
& (AC_SUPPCM_BITS_20
|AC_SUPPCM_BITS_24
))
3155 formats
|= SNDRV_PCM_FMTBIT_S32_LE
;
3156 if (val
& AC_SUPPCM_BITS_24
)
3158 else if (val
& AC_SUPPCM_BITS_20
)
3160 } else if (val
& (AC_SUPPCM_BITS_20
|AC_SUPPCM_BITS_24
|
3161 AC_SUPPCM_BITS_32
)) {
3162 formats
|= SNDRV_PCM_FMTBIT_S32_LE
;
3163 if (val
& AC_SUPPCM_BITS_32
)
3165 else if (val
& AC_SUPPCM_BITS_24
)
3167 else if (val
& AC_SUPPCM_BITS_20
)
3171 if (streams
& AC_SUPFMT_FLOAT32
) {
3172 formats
|= SNDRV_PCM_FMTBIT_FLOAT_LE
;
3176 if (streams
== AC_SUPFMT_AC3
) {
3177 /* should be exclusive */
3178 /* temporary hack: we have still no proper support
3179 * for the direct AC3 stream...
3181 formats
|= SNDRV_PCM_FMTBIT_U8
;
3185 snd_printk(KERN_ERR
"hda_codec: formats == 0 "
3186 "(nid=0x%x, val=0x%x, ovrd=%i, "
3189 (wcaps
& AC_WCAP_FORMAT_OVRD
) ? 1 : 0,
3194 *formatsp
= formats
;
3203 * snd_hda_is_supported_format - Check the validity of the format
3204 * @codec: HD-audio codec
3205 * @nid: NID to check
3206 * @format: the HD-audio format value to check
3208 * Check whether the given node supports the format value.
3210 * Returns 1 if supported, 0 if not.
3212 int snd_hda_is_supported_format(struct hda_codec
*codec
, hda_nid_t nid
,
3213 unsigned int format
)
3216 unsigned int val
= 0, rate
, stream
;
3218 val
= query_pcm_param(codec
, nid
);
3222 rate
= format
& 0xff00;
3223 for (i
= 0; i
< AC_PAR_PCM_RATE_BITS
; i
++)
3224 if (rate_bits
[i
].hda_fmt
== rate
) {
3229 if (i
>= AC_PAR_PCM_RATE_BITS
)
3232 stream
= query_stream_param(codec
, nid
);
3236 if (stream
& AC_SUPFMT_PCM
) {
3237 switch (format
& 0xf0) {
3239 if (!(val
& AC_SUPPCM_BITS_8
))
3243 if (!(val
& AC_SUPPCM_BITS_16
))
3247 if (!(val
& AC_SUPPCM_BITS_20
))
3251 if (!(val
& AC_SUPPCM_BITS_24
))
3255 if (!(val
& AC_SUPPCM_BITS_32
))
3262 /* FIXME: check for float32 and AC3? */
3267 EXPORT_SYMBOL_HDA(snd_hda_is_supported_format
);
3272 static int hda_pcm_default_open_close(struct hda_pcm_stream
*hinfo
,
3273 struct hda_codec
*codec
,
3274 struct snd_pcm_substream
*substream
)
3279 static int hda_pcm_default_prepare(struct hda_pcm_stream
*hinfo
,
3280 struct hda_codec
*codec
,
3281 unsigned int stream_tag
,
3282 unsigned int format
,
3283 struct snd_pcm_substream
*substream
)
3285 snd_hda_codec_setup_stream(codec
, hinfo
->nid
, stream_tag
, 0, format
);
3289 static int hda_pcm_default_cleanup(struct hda_pcm_stream
*hinfo
,
3290 struct hda_codec
*codec
,
3291 struct snd_pcm_substream
*substream
)
3293 snd_hda_codec_cleanup_stream(codec
, hinfo
->nid
);
3297 static int set_pcm_default_values(struct hda_codec
*codec
,
3298 struct hda_pcm_stream
*info
)
3302 /* query support PCM information from the given NID */
3303 if (info
->nid
&& (!info
->rates
|| !info
->formats
)) {
3304 err
= snd_hda_query_supported_pcm(codec
, info
->nid
,
3305 info
->rates
? NULL
: &info
->rates
,
3306 info
->formats
? NULL
: &info
->formats
,
3307 info
->maxbps
? NULL
: &info
->maxbps
);
3311 if (info
->ops
.open
== NULL
)
3312 info
->ops
.open
= hda_pcm_default_open_close
;
3313 if (info
->ops
.close
== NULL
)
3314 info
->ops
.close
= hda_pcm_default_open_close
;
3315 if (info
->ops
.prepare
== NULL
) {
3316 if (snd_BUG_ON(!info
->nid
))
3318 info
->ops
.prepare
= hda_pcm_default_prepare
;
3320 if (info
->ops
.cleanup
== NULL
) {
3321 if (snd_BUG_ON(!info
->nid
))
3323 info
->ops
.cleanup
= hda_pcm_default_cleanup
;
3329 const char *snd_hda_pcm_type_name
[HDA_PCM_NTYPES
] = {
3330 "Audio", "SPDIF", "HDMI", "Modem"
3334 * get the empty PCM device number to assign
3336 * note the max device number is limited by HDA_MAX_PCMS, currently 10
3338 static int get_empty_pcm_device(struct hda_bus
*bus
, int type
)
3340 /* audio device indices; not linear to keep compatibility */
3341 static int audio_idx
[HDA_PCM_NTYPES
][5] = {
3342 [HDA_PCM_TYPE_AUDIO
] = { 0, 2, 4, 5, -1 },
3343 [HDA_PCM_TYPE_SPDIF
] = { 1, -1 },
3344 [HDA_PCM_TYPE_HDMI
] = { 3, 7, 8, 9, -1 },
3345 [HDA_PCM_TYPE_MODEM
] = { 6, -1 },
3349 if (type
>= HDA_PCM_NTYPES
) {
3350 snd_printk(KERN_WARNING
"Invalid PCM type %d\n", type
);
3354 for (i
= 0; audio_idx
[type
][i
] >= 0 ; i
++)
3355 if (!test_and_set_bit(audio_idx
[type
][i
], bus
->pcm_dev_bits
))
3356 return audio_idx
[type
][i
];
3358 snd_printk(KERN_WARNING
"Too many %s devices\n",
3359 snd_hda_pcm_type_name
[type
]);
3364 * attach a new PCM stream
3366 static int snd_hda_attach_pcm(struct hda_codec
*codec
, struct hda_pcm
*pcm
)
3368 struct hda_bus
*bus
= codec
->bus
;
3369 struct hda_pcm_stream
*info
;
3372 if (snd_BUG_ON(!pcm
->name
))
3374 for (stream
= 0; stream
< 2; stream
++) {
3375 info
= &pcm
->stream
[stream
];
3376 if (info
->substreams
) {
3377 err
= set_pcm_default_values(codec
, info
);
3382 return bus
->ops
.attach_pcm(bus
, codec
, pcm
);
3385 /* assign all PCMs of the given codec */
3386 int snd_hda_codec_build_pcms(struct hda_codec
*codec
)
3391 if (!codec
->num_pcms
) {
3392 if (!codec
->patch_ops
.build_pcms
)
3394 err
= codec
->patch_ops
.build_pcms(codec
);
3396 printk(KERN_ERR
"hda_codec: cannot build PCMs"
3397 "for #%d (error %d)\n", codec
->addr
, err
);
3398 err
= snd_hda_codec_reset(codec
);
3401 "hda_codec: cannot revert codec\n");
3406 for (pcm
= 0; pcm
< codec
->num_pcms
; pcm
++) {
3407 struct hda_pcm
*cpcm
= &codec
->pcm_info
[pcm
];
3410 if (!cpcm
->stream
[0].substreams
&& !cpcm
->stream
[1].substreams
)
3411 continue; /* no substreams assigned */
3414 dev
= get_empty_pcm_device(codec
->bus
, cpcm
->pcm_type
);
3416 continue; /* no fatal error */
3418 err
= snd_hda_attach_pcm(codec
, cpcm
);
3420 printk(KERN_ERR
"hda_codec: cannot attach "
3421 "PCM stream %d for codec #%d\n",
3423 continue; /* no fatal error */
3431 * snd_hda_build_pcms - build PCM information
3434 * Create PCM information for each codec included in the bus.
3436 * The build_pcms codec patch is requested to set up codec->num_pcms and
3437 * codec->pcm_info properly. The array is referred by the top-level driver
3438 * to create its PCM instances.
3439 * The allocated codec->pcm_info should be released in codec->patch_ops.free
3442 * At least, substreams, channels_min and channels_max must be filled for
3443 * each stream. substreams = 0 indicates that the stream doesn't exist.
3444 * When rates and/or formats are zero, the supported values are queried
3445 * from the given nid. The nid is used also by the default ops.prepare
3446 * and ops.cleanup callbacks.
3448 * The driver needs to call ops.open in its open callback. Similarly,
3449 * ops.close is supposed to be called in the close callback.
3450 * ops.prepare should be called in the prepare or hw_params callback
3451 * with the proper parameters for set up.
3452 * ops.cleanup should be called in hw_free for clean up of streams.
3454 * This function returns 0 if successfull, or a negative error code.
3456 int __devinit
snd_hda_build_pcms(struct hda_bus
*bus
)
3458 struct hda_codec
*codec
;
3460 list_for_each_entry(codec
, &bus
->codec_list
, list
) {
3461 int err
= snd_hda_codec_build_pcms(codec
);
3467 EXPORT_SYMBOL_HDA(snd_hda_build_pcms
);
3470 * snd_hda_check_board_config - compare the current codec with the config table
3471 * @codec: the HDA codec
3472 * @num_configs: number of config enums
3473 * @models: array of model name strings
3474 * @tbl: configuration table, terminated by null entries
3476 * Compares the modelname or PCI subsystem id of the current codec with the
3477 * given configuration table. If a matching entry is found, returns its
3478 * config value (supposed to be 0 or positive).
3480 * If no entries are matching, the function returns a negative value.
3482 int snd_hda_check_board_config(struct hda_codec
*codec
,
3483 int num_configs
, const char **models
,
3484 const struct snd_pci_quirk
*tbl
)
3486 if (codec
->modelname
&& models
) {
3488 for (i
= 0; i
< num_configs
; i
++) {
3490 !strcmp(codec
->modelname
, models
[i
])) {
3491 snd_printd(KERN_INFO
"hda_codec: model '%s' is "
3492 "selected\n", models
[i
]);
3498 if (!codec
->bus
->pci
|| !tbl
)
3501 tbl
= snd_pci_quirk_lookup(codec
->bus
->pci
, tbl
);
3504 if (tbl
->value
>= 0 && tbl
->value
< num_configs
) {
3505 #ifdef CONFIG_SND_DEBUG_VERBOSE
3507 const char *model
= NULL
;
3509 model
= models
[tbl
->value
];
3511 sprintf(tmp
, "#%d", tbl
->value
);
3514 snd_printdd(KERN_INFO
"hda_codec: model '%s' is selected "
3515 "for config %x:%x (%s)\n",
3516 model
, tbl
->subvendor
, tbl
->subdevice
,
3517 (tbl
->name
? tbl
->name
: "Unknown device"));
3523 EXPORT_SYMBOL_HDA(snd_hda_check_board_config
);
3526 * snd_hda_check_board_codec_sid_config - compare the current codec
3527 subsystem ID with the
3530 This is important for Gateway notebooks with SB450 HDA Audio
3531 where the vendor ID of the PCI device is:
3532 ATI Technologies Inc SB450 HDA Audio [1002:437b]
3533 and the vendor/subvendor are found only at the codec.
3535 * @codec: the HDA codec
3536 * @num_configs: number of config enums
3537 * @models: array of model name strings
3538 * @tbl: configuration table, terminated by null entries
3540 * Compares the modelname or PCI subsystem id of the current codec with the
3541 * given configuration table. If a matching entry is found, returns its
3542 * config value (supposed to be 0 or positive).
3544 * If no entries are matching, the function returns a negative value.
3546 int snd_hda_check_board_codec_sid_config(struct hda_codec
*codec
,
3547 int num_configs
, const char **models
,
3548 const struct snd_pci_quirk
*tbl
)
3550 const struct snd_pci_quirk
*q
;
3552 /* Search for codec ID */
3553 for (q
= tbl
; q
->subvendor
; q
++) {
3554 unsigned long vendorid
= (q
->subdevice
) | (q
->subvendor
<< 16);
3556 if (vendorid
== codec
->subsystem_id
)
3565 if (tbl
->value
>= 0 && tbl
->value
< num_configs
) {
3566 #ifdef CONFIG_SND_DEBUG_VERBOSE
3568 const char *model
= NULL
;
3570 model
= models
[tbl
->value
];
3572 sprintf(tmp
, "#%d", tbl
->value
);
3575 snd_printdd(KERN_INFO
"hda_codec: model '%s' is selected "
3576 "for config %x:%x (%s)\n",
3577 model
, tbl
->subvendor
, tbl
->subdevice
,
3578 (tbl
->name
? tbl
->name
: "Unknown device"));
3584 EXPORT_SYMBOL_HDA(snd_hda_check_board_codec_sid_config
);
3587 * snd_hda_add_new_ctls - create controls from the array
3588 * @codec: the HDA codec
3589 * @knew: the array of struct snd_kcontrol_new
3591 * This helper function creates and add new controls in the given array.
3592 * The array must be terminated with an empty entry as terminator.
3594 * Returns 0 if successful, or a negative error code.
3596 int snd_hda_add_new_ctls(struct hda_codec
*codec
, struct snd_kcontrol_new
*knew
)
3600 for (; knew
->name
; knew
++) {
3601 struct snd_kcontrol
*kctl
;
3602 if (knew
->iface
== -1) /* skip this codec private value */
3604 kctl
= snd_ctl_new1(knew
, codec
);
3607 err
= snd_hda_ctl_add(codec
, 0, kctl
);
3611 kctl
= snd_ctl_new1(knew
, codec
);
3614 kctl
->id
.device
= codec
->addr
;
3615 err
= snd_hda_ctl_add(codec
, 0, kctl
);
3622 EXPORT_SYMBOL_HDA(snd_hda_add_new_ctls
);
3624 #ifdef CONFIG_SND_HDA_POWER_SAVE
3625 static void hda_set_power_state(struct hda_codec
*codec
, hda_nid_t fg
,
3626 unsigned int power_state
);
3628 static void hda_power_work(struct work_struct
*work
)
3630 struct hda_codec
*codec
=
3631 container_of(work
, struct hda_codec
, power_work
.work
);
3632 struct hda_bus
*bus
= codec
->bus
;
3634 if (!codec
->power_on
|| codec
->power_count
) {
3635 codec
->power_transition
= 0;
3639 hda_call_codec_suspend(codec
);
3640 if (bus
->ops
.pm_notify
)
3641 bus
->ops
.pm_notify(bus
);
3644 static void hda_keep_power_on(struct hda_codec
*codec
)
3646 codec
->power_count
++;
3647 codec
->power_on
= 1;
3648 codec
->power_jiffies
= jiffies
;
3651 /* update the power on/off account with the current jiffies */
3652 void snd_hda_update_power_acct(struct hda_codec
*codec
)
3654 unsigned long delta
= jiffies
- codec
->power_jiffies
;
3655 if (codec
->power_on
)
3656 codec
->power_on_acct
+= delta
;
3658 codec
->power_off_acct
+= delta
;
3659 codec
->power_jiffies
+= delta
;
3663 * snd_hda_power_up - Power-up the codec
3664 * @codec: HD-audio codec
3666 * Increment the power-up counter and power up the hardware really when
3667 * not turned on yet.
3669 void snd_hda_power_up(struct hda_codec
*codec
)
3671 struct hda_bus
*bus
= codec
->bus
;
3673 codec
->power_count
++;
3674 if (codec
->power_on
|| codec
->power_transition
)
3677 snd_hda_update_power_acct(codec
);
3678 codec
->power_on
= 1;
3679 codec
->power_jiffies
= jiffies
;
3680 if (bus
->ops
.pm_notify
)
3681 bus
->ops
.pm_notify(bus
);
3682 hda_call_codec_resume(codec
);
3683 cancel_delayed_work(&codec
->power_work
);
3684 codec
->power_transition
= 0;
3686 EXPORT_SYMBOL_HDA(snd_hda_power_up
);
3688 #define power_save(codec) \
3689 ((codec)->bus->power_save ? *(codec)->bus->power_save : 0)
3692 * snd_hda_power_down - Power-down the codec
3693 * @codec: HD-audio codec
3695 * Decrement the power-up counter and schedules the power-off work if
3696 * the counter rearches to zero.
3698 void snd_hda_power_down(struct hda_codec
*codec
)
3700 --codec
->power_count
;
3701 if (!codec
->power_on
|| codec
->power_count
|| codec
->power_transition
)
3703 if (power_save(codec
)) {
3704 codec
->power_transition
= 1; /* avoid reentrance */
3705 queue_delayed_work(codec
->bus
->workq
, &codec
->power_work
,
3706 msecs_to_jiffies(power_save(codec
) * 1000));
3709 EXPORT_SYMBOL_HDA(snd_hda_power_down
);
3712 * snd_hda_check_amp_list_power - Check the amp list and update the power
3713 * @codec: HD-audio codec
3714 * @check: the object containing an AMP list and the status
3715 * @nid: NID to check / update
3717 * Check whether the given NID is in the amp list. If it's in the list,
3718 * check the current AMP status, and update the the power-status according
3719 * to the mute status.
3721 * This function is supposed to be set or called from the check_power_status
3724 int snd_hda_check_amp_list_power(struct hda_codec
*codec
,
3725 struct hda_loopback_check
*check
,
3728 struct hda_amp_list
*p
;
3731 if (!check
->amplist
)
3733 for (p
= check
->amplist
; p
->nid
; p
++) {
3738 return 0; /* nothing changed */
3740 for (p
= check
->amplist
; p
->nid
; p
++) {
3741 for (ch
= 0; ch
< 2; ch
++) {
3742 v
= snd_hda_codec_amp_read(codec
, p
->nid
, ch
, p
->dir
,
3744 if (!(v
& HDA_AMP_MUTE
) && v
> 0) {
3745 if (!check
->power_on
) {
3746 check
->power_on
= 1;
3747 snd_hda_power_up(codec
);
3753 if (check
->power_on
) {
3754 check
->power_on
= 0;
3755 snd_hda_power_down(codec
);
3759 EXPORT_SYMBOL_HDA(snd_hda_check_amp_list_power
);
3763 * Channel mode helper
3767 * snd_hda_ch_mode_info - Info callback helper for the channel mode enum
3769 int snd_hda_ch_mode_info(struct hda_codec
*codec
,
3770 struct snd_ctl_elem_info
*uinfo
,
3771 const struct hda_channel_mode
*chmode
,
3774 uinfo
->type
= SNDRV_CTL_ELEM_TYPE_ENUMERATED
;
3776 uinfo
->value
.enumerated
.items
= num_chmodes
;
3777 if (uinfo
->value
.enumerated
.item
>= num_chmodes
)
3778 uinfo
->value
.enumerated
.item
= num_chmodes
- 1;
3779 sprintf(uinfo
->value
.enumerated
.name
, "%dch",
3780 chmode
[uinfo
->value
.enumerated
.item
].channels
);
3783 EXPORT_SYMBOL_HDA(snd_hda_ch_mode_info
);
3786 * snd_hda_ch_mode_get - Get callback helper for the channel mode enum
3788 int snd_hda_ch_mode_get(struct hda_codec
*codec
,
3789 struct snd_ctl_elem_value
*ucontrol
,
3790 const struct hda_channel_mode
*chmode
,
3796 for (i
= 0; i
< num_chmodes
; i
++) {
3797 if (max_channels
== chmode
[i
].channels
) {
3798 ucontrol
->value
.enumerated
.item
[0] = i
;
3804 EXPORT_SYMBOL_HDA(snd_hda_ch_mode_get
);
3807 * snd_hda_ch_mode_put - Put callback helper for the channel mode enum
3809 int snd_hda_ch_mode_put(struct hda_codec
*codec
,
3810 struct snd_ctl_elem_value
*ucontrol
,
3811 const struct hda_channel_mode
*chmode
,
3817 mode
= ucontrol
->value
.enumerated
.item
[0];
3818 if (mode
>= num_chmodes
)
3820 if (*max_channelsp
== chmode
[mode
].channels
)
3822 /* change the current channel setting */
3823 *max_channelsp
= chmode
[mode
].channels
;
3824 if (chmode
[mode
].sequence
)
3825 snd_hda_sequence_write_cache(codec
, chmode
[mode
].sequence
);
3828 EXPORT_SYMBOL_HDA(snd_hda_ch_mode_put
);
3835 * snd_hda_input_mux_info_info - Info callback helper for the input-mux enum
3837 int snd_hda_input_mux_info(const struct hda_input_mux
*imux
,
3838 struct snd_ctl_elem_info
*uinfo
)
3842 uinfo
->type
= SNDRV_CTL_ELEM_TYPE_ENUMERATED
;
3844 uinfo
->value
.enumerated
.items
= imux
->num_items
;
3845 if (!imux
->num_items
)
3847 index
= uinfo
->value
.enumerated
.item
;
3848 if (index
>= imux
->num_items
)
3849 index
= imux
->num_items
- 1;
3850 strcpy(uinfo
->value
.enumerated
.name
, imux
->items
[index
].label
);
3853 EXPORT_SYMBOL_HDA(snd_hda_input_mux_info
);
3856 * snd_hda_input_mux_info_put - Put callback helper for the input-mux enum
3858 int snd_hda_input_mux_put(struct hda_codec
*codec
,
3859 const struct hda_input_mux
*imux
,
3860 struct snd_ctl_elem_value
*ucontrol
,
3862 unsigned int *cur_val
)
3866 if (!imux
->num_items
)
3868 idx
= ucontrol
->value
.enumerated
.item
[0];
3869 if (idx
>= imux
->num_items
)
3870 idx
= imux
->num_items
- 1;
3871 if (*cur_val
== idx
)
3873 snd_hda_codec_write_cache(codec
, nid
, 0, AC_VERB_SET_CONNECT_SEL
,
3874 imux
->items
[idx
].index
);
3878 EXPORT_SYMBOL_HDA(snd_hda_input_mux_put
);
3882 * Multi-channel / digital-out PCM helper functions
3885 /* setup SPDIF output stream */
3886 static void setup_dig_out_stream(struct hda_codec
*codec
, hda_nid_t nid
,
3887 unsigned int stream_tag
, unsigned int format
)
3889 /* turn off SPDIF once; otherwise the IEC958 bits won't be updated */
3890 if (codec
->spdif_status_reset
&& (codec
->spdif_ctls
& AC_DIG1_ENABLE
))
3891 set_dig_out_convert(codec
, nid
,
3892 codec
->spdif_ctls
& ~AC_DIG1_ENABLE
& 0xff,
3894 snd_hda_codec_setup_stream(codec
, nid
, stream_tag
, 0, format
);
3895 if (codec
->slave_dig_outs
) {
3897 for (d
= codec
->slave_dig_outs
; *d
; d
++)
3898 snd_hda_codec_setup_stream(codec
, *d
, stream_tag
, 0,
3901 /* turn on again (if needed) */
3902 if (codec
->spdif_status_reset
&& (codec
->spdif_ctls
& AC_DIG1_ENABLE
))
3903 set_dig_out_convert(codec
, nid
,
3904 codec
->spdif_ctls
& 0xff, -1);
3907 static void cleanup_dig_out_stream(struct hda_codec
*codec
, hda_nid_t nid
)
3909 snd_hda_codec_cleanup_stream(codec
, nid
);
3910 if (codec
->slave_dig_outs
) {
3912 for (d
= codec
->slave_dig_outs
; *d
; d
++)
3913 snd_hda_codec_cleanup_stream(codec
, *d
);
3918 * snd_hda_bus_reboot_notify - call the reboot notifier of each codec
3919 * @bus: HD-audio bus
3921 void snd_hda_bus_reboot_notify(struct hda_bus
*bus
)
3923 struct hda_codec
*codec
;
3927 list_for_each_entry(codec
, &bus
->codec_list
, list
) {
3928 #ifdef CONFIG_SND_HDA_POWER_SAVE
3929 if (!codec
->power_on
)
3932 if (codec
->patch_ops
.reboot_notify
)
3933 codec
->patch_ops
.reboot_notify(codec
);
3936 EXPORT_SYMBOL_HDA(snd_hda_bus_reboot_notify
);
3939 * snd_hda_multi_out_dig_open - open the digital out in the exclusive mode
3941 int snd_hda_multi_out_dig_open(struct hda_codec
*codec
,
3942 struct hda_multi_out
*mout
)
3944 mutex_lock(&codec
->spdif_mutex
);
3945 if (mout
->dig_out_used
== HDA_DIG_ANALOG_DUP
)
3946 /* already opened as analog dup; reset it once */
3947 cleanup_dig_out_stream(codec
, mout
->dig_out_nid
);
3948 mout
->dig_out_used
= HDA_DIG_EXCLUSIVE
;
3949 mutex_unlock(&codec
->spdif_mutex
);
3952 EXPORT_SYMBOL_HDA(snd_hda_multi_out_dig_open
);
3955 * snd_hda_multi_out_dig_prepare - prepare the digital out stream
3957 int snd_hda_multi_out_dig_prepare(struct hda_codec
*codec
,
3958 struct hda_multi_out
*mout
,
3959 unsigned int stream_tag
,
3960 unsigned int format
,
3961 struct snd_pcm_substream
*substream
)
3963 mutex_lock(&codec
->spdif_mutex
);
3964 setup_dig_out_stream(codec
, mout
->dig_out_nid
, stream_tag
, format
);
3965 mutex_unlock(&codec
->spdif_mutex
);
3968 EXPORT_SYMBOL_HDA(snd_hda_multi_out_dig_prepare
);
3971 * snd_hda_multi_out_dig_cleanup - clean-up the digital out stream
3973 int snd_hda_multi_out_dig_cleanup(struct hda_codec
*codec
,
3974 struct hda_multi_out
*mout
)
3976 mutex_lock(&codec
->spdif_mutex
);
3977 cleanup_dig_out_stream(codec
, mout
->dig_out_nid
);
3978 mutex_unlock(&codec
->spdif_mutex
);
3981 EXPORT_SYMBOL_HDA(snd_hda_multi_out_dig_cleanup
);
3984 * snd_hda_multi_out_dig_close - release the digital out stream
3986 int snd_hda_multi_out_dig_close(struct hda_codec
*codec
,
3987 struct hda_multi_out
*mout
)
3989 mutex_lock(&codec
->spdif_mutex
);
3990 mout
->dig_out_used
= 0;
3991 mutex_unlock(&codec
->spdif_mutex
);
3994 EXPORT_SYMBOL_HDA(snd_hda_multi_out_dig_close
);
3997 * snd_hda_multi_out_analog_open - open analog outputs
3999 * Open analog outputs and set up the hw-constraints.
4000 * If the digital outputs can be opened as slave, open the digital
4003 int snd_hda_multi_out_analog_open(struct hda_codec
*codec
,
4004 struct hda_multi_out
*mout
,
4005 struct snd_pcm_substream
*substream
,
4006 struct hda_pcm_stream
*hinfo
)
4008 struct snd_pcm_runtime
*runtime
= substream
->runtime
;
4009 runtime
->hw
.channels_max
= mout
->max_channels
;
4010 if (mout
->dig_out_nid
) {
4011 if (!mout
->analog_rates
) {
4012 mout
->analog_rates
= hinfo
->rates
;
4013 mout
->analog_formats
= hinfo
->formats
;
4014 mout
->analog_maxbps
= hinfo
->maxbps
;
4016 runtime
->hw
.rates
= mout
->analog_rates
;
4017 runtime
->hw
.formats
= mout
->analog_formats
;
4018 hinfo
->maxbps
= mout
->analog_maxbps
;
4020 if (!mout
->spdif_rates
) {
4021 snd_hda_query_supported_pcm(codec
, mout
->dig_out_nid
,
4023 &mout
->spdif_formats
,
4024 &mout
->spdif_maxbps
);
4026 mutex_lock(&codec
->spdif_mutex
);
4027 if (mout
->share_spdif
) {
4028 if ((runtime
->hw
.rates
& mout
->spdif_rates
) &&
4029 (runtime
->hw
.formats
& mout
->spdif_formats
)) {
4030 runtime
->hw
.rates
&= mout
->spdif_rates
;
4031 runtime
->hw
.formats
&= mout
->spdif_formats
;
4032 if (mout
->spdif_maxbps
< hinfo
->maxbps
)
4033 hinfo
->maxbps
= mout
->spdif_maxbps
;
4035 mout
->share_spdif
= 0;
4036 /* FIXME: need notify? */
4039 mutex_unlock(&codec
->spdif_mutex
);
4041 return snd_pcm_hw_constraint_step(substream
->runtime
, 0,
4042 SNDRV_PCM_HW_PARAM_CHANNELS
, 2);
4044 EXPORT_SYMBOL_HDA(snd_hda_multi_out_analog_open
);
4047 * snd_hda_multi_out_analog_prepare - Preapre the analog outputs.
4049 * Set up the i/o for analog out.
4050 * When the digital out is available, copy the front out to digital out, too.
4052 int snd_hda_multi_out_analog_prepare(struct hda_codec
*codec
,
4053 struct hda_multi_out
*mout
,
4054 unsigned int stream_tag
,
4055 unsigned int format
,
4056 struct snd_pcm_substream
*substream
)
4058 hda_nid_t
*nids
= mout
->dac_nids
;
4059 int chs
= substream
->runtime
->channels
;
4062 mutex_lock(&codec
->spdif_mutex
);
4063 if (mout
->dig_out_nid
&& mout
->share_spdif
&&
4064 mout
->dig_out_used
!= HDA_DIG_EXCLUSIVE
) {
4066 snd_hda_is_supported_format(codec
, mout
->dig_out_nid
,
4068 !(codec
->spdif_status
& IEC958_AES0_NONAUDIO
)) {
4069 mout
->dig_out_used
= HDA_DIG_ANALOG_DUP
;
4070 setup_dig_out_stream(codec
, mout
->dig_out_nid
,
4071 stream_tag
, format
);
4073 mout
->dig_out_used
= 0;
4074 cleanup_dig_out_stream(codec
, mout
->dig_out_nid
);
4077 mutex_unlock(&codec
->spdif_mutex
);
4080 snd_hda_codec_setup_stream(codec
, nids
[HDA_FRONT
], stream_tag
,
4082 if (!mout
->no_share_stream
&&
4083 mout
->hp_nid
&& mout
->hp_nid
!= nids
[HDA_FRONT
])
4084 /* headphone out will just decode front left/right (stereo) */
4085 snd_hda_codec_setup_stream(codec
, mout
->hp_nid
, stream_tag
,
4087 /* extra outputs copied from front */
4088 for (i
= 0; i
< ARRAY_SIZE(mout
->extra_out_nid
); i
++)
4089 if (!mout
->no_share_stream
&& mout
->extra_out_nid
[i
])
4090 snd_hda_codec_setup_stream(codec
,
4091 mout
->extra_out_nid
[i
],
4092 stream_tag
, 0, format
);
4095 for (i
= 1; i
< mout
->num_dacs
; i
++) {
4096 if (chs
>= (i
+ 1) * 2) /* independent out */
4097 snd_hda_codec_setup_stream(codec
, nids
[i
], stream_tag
,
4099 else if (!mout
->no_share_stream
) /* copy front */
4100 snd_hda_codec_setup_stream(codec
, nids
[i
], stream_tag
,
4105 EXPORT_SYMBOL_HDA(snd_hda_multi_out_analog_prepare
);
4108 * snd_hda_multi_out_analog_cleanup - clean up the setting for analog out
4110 int snd_hda_multi_out_analog_cleanup(struct hda_codec
*codec
,
4111 struct hda_multi_out
*mout
)
4113 hda_nid_t
*nids
= mout
->dac_nids
;
4116 for (i
= 0; i
< mout
->num_dacs
; i
++)
4117 snd_hda_codec_cleanup_stream(codec
, nids
[i
]);
4119 snd_hda_codec_cleanup_stream(codec
, mout
->hp_nid
);
4120 for (i
= 0; i
< ARRAY_SIZE(mout
->extra_out_nid
); i
++)
4121 if (mout
->extra_out_nid
[i
])
4122 snd_hda_codec_cleanup_stream(codec
,
4123 mout
->extra_out_nid
[i
]);
4124 mutex_lock(&codec
->spdif_mutex
);
4125 if (mout
->dig_out_nid
&& mout
->dig_out_used
== HDA_DIG_ANALOG_DUP
) {
4126 cleanup_dig_out_stream(codec
, mout
->dig_out_nid
);
4127 mout
->dig_out_used
= 0;
4129 mutex_unlock(&codec
->spdif_mutex
);
4132 EXPORT_SYMBOL_HDA(snd_hda_multi_out_analog_cleanup
);
4135 * Helper for automatic pin configuration
4138 static int is_in_nid_list(hda_nid_t nid
, hda_nid_t
*list
)
4140 for (; *list
; list
++)
4148 * Sort an associated group of pins according to their sequence numbers.
4150 static void sort_pins_by_sequence(hda_nid_t
*pins
, short *sequences
,
4157 for (i
= 0; i
< num_pins
; i
++) {
4158 for (j
= i
+ 1; j
< num_pins
; j
++) {
4159 if (sequences
[i
] > sequences
[j
]) {
4161 sequences
[i
] = sequences
[j
];
4173 * Parse all pin widgets and store the useful pin nids to cfg
4175 * The number of line-outs or any primary output is stored in line_outs,
4176 * and the corresponding output pins are assigned to line_out_pins[],
4177 * in the order of front, rear, CLFE, side, ...
4179 * If more extra outputs (speaker and headphone) are found, the pins are
4180 * assisnged to hp_pins[] and speaker_pins[], respectively. If no line-out jack
4181 * is detected, one of speaker of HP pins is assigned as the primary
4182 * output, i.e. to line_out_pins[0]. So, line_outs is always positive
4183 * if any analog output exists.
4185 * The analog input pins are assigned to input_pins array.
4186 * The digital input/output pins are assigned to dig_in_pin and dig_out_pin,
4189 int snd_hda_parse_pin_def_config(struct hda_codec
*codec
,
4190 struct auto_pin_cfg
*cfg
,
4191 hda_nid_t
*ignore_nids
)
4193 hda_nid_t nid
, end_nid
;
4194 short seq
, assoc_line_out
, assoc_speaker
;
4195 short sequences_line_out
[ARRAY_SIZE(cfg
->line_out_pins
)];
4196 short sequences_speaker
[ARRAY_SIZE(cfg
->speaker_pins
)];
4197 short sequences_hp
[ARRAY_SIZE(cfg
->hp_pins
)];
4199 memset(cfg
, 0, sizeof(*cfg
));
4201 memset(sequences_line_out
, 0, sizeof(sequences_line_out
));
4202 memset(sequences_speaker
, 0, sizeof(sequences_speaker
));
4203 memset(sequences_hp
, 0, sizeof(sequences_hp
));
4204 assoc_line_out
= assoc_speaker
= 0;
4206 end_nid
= codec
->start_nid
+ codec
->num_nodes
;
4207 for (nid
= codec
->start_nid
; nid
< end_nid
; nid
++) {
4208 unsigned int wid_caps
= get_wcaps(codec
, nid
);
4209 unsigned int wid_type
= get_wcaps_type(wid_caps
);
4210 unsigned int def_conf
;
4213 /* read all default configuration for pin complex */
4214 if (wid_type
!= AC_WID_PIN
)
4216 /* ignore the given nids (e.g. pc-beep returns error) */
4217 if (ignore_nids
&& is_in_nid_list(nid
, ignore_nids
))
4220 def_conf
= snd_hda_codec_get_pincfg(codec
, nid
);
4221 if (get_defcfg_connect(def_conf
) == AC_JACK_PORT_NONE
)
4223 loc
= get_defcfg_location(def_conf
);
4224 switch (get_defcfg_device(def_conf
)) {
4225 case AC_JACK_LINE_OUT
:
4226 seq
= get_defcfg_sequence(def_conf
);
4227 assoc
= get_defcfg_association(def_conf
);
4229 if (!(wid_caps
& AC_WCAP_STEREO
))
4230 if (!cfg
->mono_out_pin
)
4231 cfg
->mono_out_pin
= nid
;
4234 if (!assoc_line_out
)
4235 assoc_line_out
= assoc
;
4236 else if (assoc_line_out
!= assoc
)
4238 if (cfg
->line_outs
>= ARRAY_SIZE(cfg
->line_out_pins
))
4240 cfg
->line_out_pins
[cfg
->line_outs
] = nid
;
4241 sequences_line_out
[cfg
->line_outs
] = seq
;
4244 case AC_JACK_SPEAKER
:
4245 seq
= get_defcfg_sequence(def_conf
);
4246 assoc
= get_defcfg_association(def_conf
);
4250 assoc_speaker
= assoc
;
4251 else if (assoc_speaker
!= assoc
)
4253 if (cfg
->speaker_outs
>= ARRAY_SIZE(cfg
->speaker_pins
))
4255 cfg
->speaker_pins
[cfg
->speaker_outs
] = nid
;
4256 sequences_speaker
[cfg
->speaker_outs
] = seq
;
4257 cfg
->speaker_outs
++;
4259 case AC_JACK_HP_OUT
:
4260 seq
= get_defcfg_sequence(def_conf
);
4261 assoc
= get_defcfg_association(def_conf
);
4262 if (cfg
->hp_outs
>= ARRAY_SIZE(cfg
->hp_pins
))
4264 cfg
->hp_pins
[cfg
->hp_outs
] = nid
;
4265 sequences_hp
[cfg
->hp_outs
] = (assoc
<< 4) | seq
;
4268 case AC_JACK_MIC_IN
: {
4270 if (loc
== AC_JACK_LOC_FRONT
||
4271 (loc
& 0x30) == AC_JACK_LOC_INTERNAL
) {
4272 preferred
= AUTO_PIN_FRONT_MIC
;
4275 preferred
= AUTO_PIN_MIC
;
4276 alt
= AUTO_PIN_FRONT_MIC
;
4278 if (!cfg
->input_pins
[preferred
])
4279 cfg
->input_pins
[preferred
] = nid
;
4280 else if (!cfg
->input_pins
[alt
])
4281 cfg
->input_pins
[alt
] = nid
;
4284 case AC_JACK_LINE_IN
:
4285 if (loc
== AC_JACK_LOC_FRONT
)
4286 cfg
->input_pins
[AUTO_PIN_FRONT_LINE
] = nid
;
4288 cfg
->input_pins
[AUTO_PIN_LINE
] = nid
;
4291 cfg
->input_pins
[AUTO_PIN_CD
] = nid
;
4294 cfg
->input_pins
[AUTO_PIN_AUX
] = nid
;
4296 case AC_JACK_SPDIF_OUT
:
4297 case AC_JACK_DIG_OTHER_OUT
:
4298 if (cfg
->dig_outs
>= ARRAY_SIZE(cfg
->dig_out_pins
))
4300 cfg
->dig_out_pins
[cfg
->dig_outs
] = nid
;
4301 cfg
->dig_out_type
[cfg
->dig_outs
] =
4302 (loc
== AC_JACK_LOC_HDMI
) ?
4303 HDA_PCM_TYPE_HDMI
: HDA_PCM_TYPE_SPDIF
;
4306 case AC_JACK_SPDIF_IN
:
4307 case AC_JACK_DIG_OTHER_IN
:
4308 cfg
->dig_in_pin
= nid
;
4309 if (loc
== AC_JACK_LOC_HDMI
)
4310 cfg
->dig_in_type
= HDA_PCM_TYPE_HDMI
;
4312 cfg
->dig_in_type
= HDA_PCM_TYPE_SPDIF
;
4318 * If no line-out is defined but multiple HPs are found,
4319 * some of them might be the real line-outs.
4321 if (!cfg
->line_outs
&& cfg
->hp_outs
> 1) {
4323 while (i
< cfg
->hp_outs
) {
4324 /* The real HPs should have the sequence 0x0f */
4325 if ((sequences_hp
[i
] & 0x0f) == 0x0f) {
4329 /* Move it to the line-out table */
4330 cfg
->line_out_pins
[cfg
->line_outs
] = cfg
->hp_pins
[i
];
4331 sequences_line_out
[cfg
->line_outs
] = sequences_hp
[i
];
4334 memmove(cfg
->hp_pins
+ i
, cfg
->hp_pins
+ i
+ 1,
4335 sizeof(cfg
->hp_pins
[0]) * (cfg
->hp_outs
- i
));
4336 memmove(sequences_hp
+ i
- 1, sequences_hp
+ i
,
4337 sizeof(sequences_hp
[0]) * (cfg
->hp_outs
- i
));
4341 /* sort by sequence */
4342 sort_pins_by_sequence(cfg
->line_out_pins
, sequences_line_out
,
4344 sort_pins_by_sequence(cfg
->speaker_pins
, sequences_speaker
,
4346 sort_pins_by_sequence(cfg
->hp_pins
, sequences_hp
,
4349 /* if we have only one mic, make it AUTO_PIN_MIC */
4350 if (!cfg
->input_pins
[AUTO_PIN_MIC
] &&
4351 cfg
->input_pins
[AUTO_PIN_FRONT_MIC
]) {
4352 cfg
->input_pins
[AUTO_PIN_MIC
] =
4353 cfg
->input_pins
[AUTO_PIN_FRONT_MIC
];
4354 cfg
->input_pins
[AUTO_PIN_FRONT_MIC
] = 0;
4356 /* ditto for line-in */
4357 if (!cfg
->input_pins
[AUTO_PIN_LINE
] &&
4358 cfg
->input_pins
[AUTO_PIN_FRONT_LINE
]) {
4359 cfg
->input_pins
[AUTO_PIN_LINE
] =
4360 cfg
->input_pins
[AUTO_PIN_FRONT_LINE
];
4361 cfg
->input_pins
[AUTO_PIN_FRONT_LINE
] = 0;
4365 * FIX-UP: if no line-outs are detected, try to use speaker or HP pin
4366 * as a primary output
4368 if (!cfg
->line_outs
) {
4369 if (cfg
->speaker_outs
) {
4370 cfg
->line_outs
= cfg
->speaker_outs
;
4371 memcpy(cfg
->line_out_pins
, cfg
->speaker_pins
,
4372 sizeof(cfg
->speaker_pins
));
4373 cfg
->speaker_outs
= 0;
4374 memset(cfg
->speaker_pins
, 0, sizeof(cfg
->speaker_pins
));
4375 cfg
->line_out_type
= AUTO_PIN_SPEAKER_OUT
;
4376 } else if (cfg
->hp_outs
) {
4377 cfg
->line_outs
= cfg
->hp_outs
;
4378 memcpy(cfg
->line_out_pins
, cfg
->hp_pins
,
4379 sizeof(cfg
->hp_pins
));
4381 memset(cfg
->hp_pins
, 0, sizeof(cfg
->hp_pins
));
4382 cfg
->line_out_type
= AUTO_PIN_HP_OUT
;
4386 /* Reorder the surround channels
4387 * ALSA sequence is front/surr/clfe/side
4389 * 4-ch: front/surr => OK as it is
4390 * 6-ch: front/clfe/surr
4391 * 8-ch: front/clfe/rear/side|fc
4393 switch (cfg
->line_outs
) {
4396 nid
= cfg
->line_out_pins
[1];
4397 cfg
->line_out_pins
[1] = cfg
->line_out_pins
[2];
4398 cfg
->line_out_pins
[2] = nid
;
4403 * debug prints of the parsed results
4405 snd_printd("autoconfig: line_outs=%d (0x%x/0x%x/0x%x/0x%x/0x%x)\n",
4406 cfg
->line_outs
, cfg
->line_out_pins
[0], cfg
->line_out_pins
[1],
4407 cfg
->line_out_pins
[2], cfg
->line_out_pins
[3],
4408 cfg
->line_out_pins
[4]);
4409 snd_printd(" speaker_outs=%d (0x%x/0x%x/0x%x/0x%x/0x%x)\n",
4410 cfg
->speaker_outs
, cfg
->speaker_pins
[0],
4411 cfg
->speaker_pins
[1], cfg
->speaker_pins
[2],
4412 cfg
->speaker_pins
[3], cfg
->speaker_pins
[4]);
4413 snd_printd(" hp_outs=%d (0x%x/0x%x/0x%x/0x%x/0x%x)\n",
4414 cfg
->hp_outs
, cfg
->hp_pins
[0],
4415 cfg
->hp_pins
[1], cfg
->hp_pins
[2],
4416 cfg
->hp_pins
[3], cfg
->hp_pins
[4]);
4417 snd_printd(" mono: mono_out=0x%x\n", cfg
->mono_out_pin
);
4419 snd_printd(" dig-out=0x%x/0x%x\n",
4420 cfg
->dig_out_pins
[0], cfg
->dig_out_pins
[1]);
4421 snd_printd(" inputs: mic=0x%x, fmic=0x%x, line=0x%x, fline=0x%x,"
4422 " cd=0x%x, aux=0x%x\n",
4423 cfg
->input_pins
[AUTO_PIN_MIC
],
4424 cfg
->input_pins
[AUTO_PIN_FRONT_MIC
],
4425 cfg
->input_pins
[AUTO_PIN_LINE
],
4426 cfg
->input_pins
[AUTO_PIN_FRONT_LINE
],
4427 cfg
->input_pins
[AUTO_PIN_CD
],
4428 cfg
->input_pins
[AUTO_PIN_AUX
]);
4429 if (cfg
->dig_in_pin
)
4430 snd_printd(" dig-in=0x%x\n", cfg
->dig_in_pin
);
4434 EXPORT_SYMBOL_HDA(snd_hda_parse_pin_def_config
);
4436 /* labels for input pins */
4437 const char *auto_pin_cfg_labels
[AUTO_PIN_LAST
] = {
4438 "Mic", "Front Mic", "Line", "Front Line", "CD", "Aux"
4440 EXPORT_SYMBOL_HDA(auto_pin_cfg_labels
);
4449 * snd_hda_suspend - suspend the codecs
4452 * Returns 0 if successful.
4454 int snd_hda_suspend(struct hda_bus
*bus
)
4456 struct hda_codec
*codec
;
4458 list_for_each_entry(codec
, &bus
->codec_list
, list
) {
4459 #ifdef CONFIG_SND_HDA_POWER_SAVE
4460 if (!codec
->power_on
)
4463 hda_call_codec_suspend(codec
);
4467 EXPORT_SYMBOL_HDA(snd_hda_suspend
);
4470 * snd_hda_resume - resume the codecs
4473 * Returns 0 if successful.
4475 * This fucntion is defined only when POWER_SAVE isn't set.
4476 * In the power-save mode, the codec is resumed dynamically.
4478 int snd_hda_resume(struct hda_bus
*bus
)
4480 struct hda_codec
*codec
;
4482 list_for_each_entry(codec
, &bus
->codec_list
, list
) {
4483 if (snd_hda_codec_needs_resume(codec
))
4484 hda_call_codec_resume(codec
);
4488 EXPORT_SYMBOL_HDA(snd_hda_resume
);
4489 #endif /* CONFIG_PM */
4496 * snd_array_new - get a new element from the given array
4497 * @array: the array object
4499 * Get a new element from the given array. If it exceeds the
4500 * pre-allocated array size, re-allocate the array.
4502 * Returns NULL if allocation failed.
4504 void *snd_array_new(struct snd_array
*array
)
4506 if (array
->used
>= array
->alloced
) {
4507 int num
= array
->alloced
+ array
->alloc_align
;
4509 if (snd_BUG_ON(num
>= 4096))
4511 nlist
= kcalloc(num
+ 1, array
->elem_size
, GFP_KERNEL
);
4515 memcpy(nlist
, array
->list
,
4516 array
->elem_size
* array
->alloced
);
4519 array
->list
= nlist
;
4520 array
->alloced
= num
;
4522 return snd_array_elem(array
, array
->used
++);
4524 EXPORT_SYMBOL_HDA(snd_array_new
);
4527 * snd_array_free - free the given array elements
4528 * @array: the array object
4530 void snd_array_free(struct snd_array
*array
)
4537 EXPORT_SYMBOL_HDA(snd_array_free
);
4540 * snd_print_pcm_rates - Print the supported PCM rates to the string buffer
4541 * @pcm: PCM caps bits
4542 * @buf: the string buffer to write
4543 * @buflen: the max buffer length
4545 * used by hda_proc.c and hda_eld.c
4547 void snd_print_pcm_rates(int pcm
, char *buf
, int buflen
)
4549 static unsigned int rates
[] = {
4550 8000, 11025, 16000, 22050, 32000, 44100, 48000, 88200,
4551 96000, 176400, 192000, 384000
4555 for (i
= 0, j
= 0; i
< ARRAY_SIZE(rates
); i
++)
4557 j
+= snprintf(buf
+ j
, buflen
- j
, " %d", rates
[i
]);
4559 buf
[j
] = '\0'; /* necessary when j == 0 */
4561 EXPORT_SYMBOL_HDA(snd_print_pcm_rates
);
4564 * snd_print_pcm_bits - Print the supported PCM fmt bits to the string buffer
4565 * @pcm: PCM caps bits
4566 * @buf: the string buffer to write
4567 * @buflen: the max buffer length
4569 * used by hda_proc.c and hda_eld.c
4571 void snd_print_pcm_bits(int pcm
, char *buf
, int buflen
)
4573 static unsigned int bits
[] = { 8, 16, 20, 24, 32 };
4576 for (i
= 0, j
= 0; i
< ARRAY_SIZE(bits
); i
++)
4577 if (pcm
& (AC_SUPPCM_BITS_8
<< i
))
4578 j
+= snprintf(buf
+ j
, buflen
- j
, " %d", bits
[i
]);
4580 buf
[j
] = '\0'; /* necessary when j == 0 */
4582 EXPORT_SYMBOL_HDA(snd_print_pcm_bits
);
4584 MODULE_DESCRIPTION("HDA codec core");
4585 MODULE_LICENSE("GPL");