2 * Universal Interface for Intel High Definition Audio Codec
4 * Copyright (c) 2004 Takashi Iwai <tiwai@suse.de>
6 * This program is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License as published by the Free
8 * Software Foundation; either version 2 of the License, or (at your option)
11 * This program is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
16 * You should have received a copy of the GNU General Public License along with
17 * this program; if not, write to the Free Software Foundation, Inc., 59
18 * Temple Place - Suite 330, Boston, MA 02111-1307, USA.
21 #ifndef __SOUND_HDA_CODEC_H
22 #define __SOUND_HDA_CODEC_H
24 #include <linux/kref.h>
25 #include <sound/info.h>
26 #include <sound/control.h>
27 #include <sound/pcm.h>
28 #include <sound/hwdep.h>
29 #include <sound/hdaudio.h>
30 #include <sound/hda_verbs.h>
38 unsigned int elem_size
;
39 unsigned int alloc_align
;
43 void *snd_array_new(struct snd_array
*array
);
44 void snd_array_free(struct snd_array
*array
);
45 static inline void snd_array_init(struct snd_array
*array
, unsigned int size
,
48 array
->elem_size
= size
;
49 array
->alloc_align
= align
;
52 static inline void *snd_array_elem(struct snd_array
*array
, unsigned int idx
)
54 return array
->list
+ idx
* array
->elem_size
;
57 static inline unsigned int snd_array_index(struct snd_array
*array
, void *ptr
)
59 return (unsigned long)(ptr
- array
->list
) / array
->elem_size
;
70 struct hda_pcm_stream
;
73 typedef u16 hda_nid_t
;
77 /* send a single command */
78 int (*command
)(struct hda_bus
*bus
, unsigned int cmd
);
79 /* get a response from the last command */
80 unsigned int (*get_response
)(struct hda_bus
*bus
, unsigned int addr
);
81 /* free the private data */
82 void (*private_free
)(struct hda_bus
*);
83 /* attach a PCM stream */
84 int (*attach_pcm
)(struct hda_bus
*bus
, struct hda_codec
*codec
,
86 /* reset bus for retry verb */
87 void (*bus_reset
)(struct hda_bus
*bus
);
88 #ifdef CONFIG_SND_HDA_DSP_LOADER
89 /* prepare DSP transfer */
90 int (*load_dsp_prepare
)(struct hda_bus
*bus
, unsigned int format
,
91 unsigned int byte_size
,
92 struct snd_dma_buffer
*bufp
);
93 /* start/stop DSP transfer */
94 void (*load_dsp_trigger
)(struct hda_bus
*bus
, bool start
);
95 /* clean up DSP transfer */
96 void (*load_dsp_cleanup
)(struct hda_bus
*bus
,
97 struct snd_dma_buffer
*dmab
);
101 /* unsolicited event handler */
102 #define HDA_UNSOL_QUEUE_SIZE 64
103 struct hda_bus_unsolicited
{
105 u32 queue
[HDA_UNSOL_QUEUE_SIZE
* 2];
108 struct work_struct work
;
114 * each controller needs to creata a hda_bus to assign the accessor.
115 * A hda_bus contains several codecs in the list codec_list.
118 struct snd_card
*card
;
122 const char *modelname
;
123 struct hda_bus_ops ops
;
125 /* codec linked list */
126 struct list_head codec_list
;
127 unsigned int num_codecs
;
128 /* link caddr -> codec */
129 struct hda_codec
*caddr_tbl
[HDA_MAX_CODEC_ADDRESS
+ 1];
131 struct mutex cmd_mutex
;
132 struct mutex prepare_mutex
;
134 /* unsolicited event queue */
135 struct hda_bus_unsolicited unsol
;
138 DECLARE_BITMAP(pcm_dev_bits
, SNDRV_PCM_DEVICES
);
141 unsigned int needs_damn_long_delay
:1;
142 unsigned int allow_bus_reset
:1; /* allow bus reset at fatal error */
143 unsigned int sync_write
:1; /* sync after verb write */
144 /* status for codec/controller */
145 unsigned int shutdown
:1; /* being unloaded */
146 unsigned int rirb_error
:1; /* error in codec communication */
147 unsigned int response_reset
:1; /* controller was reset */
148 unsigned int in_reset
:1; /* during reset operation */
149 unsigned int no_response_fallback
:1; /* don't fallback at RIRB error */
151 int primary_dig_out_type
; /* primary digital out PCM type */
152 unsigned long codec_powered
; /* bit flags of powered codecs */
158 * Known codecs have the patch to build and set up the controls/PCMs
159 * better than the generic parser.
161 struct hda_codec_preset
{
165 unsigned int subs_mask
;
169 int (*patch
)(struct hda_codec
*codec
);
172 #define HDA_CODEC_ID_GENERIC_HDMI 0x00000101
173 #define HDA_CODEC_ID_GENERIC 0x00000201
175 struct hda_codec_driver
{
176 struct hdac_driver core
;
177 const struct hda_codec_preset
*preset
;
180 int __hda_codec_driver_register(struct hda_codec_driver
*drv
, const char *name
,
181 struct module
*owner
);
182 #define hda_codec_driver_register(drv) \
183 __hda_codec_driver_register(drv, KBUILD_MODNAME, THIS_MODULE)
184 void hda_codec_driver_unregister(struct hda_codec_driver
*drv
);
185 #define module_hda_codec_driver(drv) \
186 module_driver(drv, hda_codec_driver_register, \
187 hda_codec_driver_unregister)
189 /* ops set by the preset patch */
190 struct hda_codec_ops
{
191 int (*build_controls
)(struct hda_codec
*codec
);
192 int (*build_pcms
)(struct hda_codec
*codec
);
193 int (*init
)(struct hda_codec
*codec
);
194 void (*free
)(struct hda_codec
*codec
);
195 void (*unsol_event
)(struct hda_codec
*codec
, unsigned int res
);
196 void (*set_power_state
)(struct hda_codec
*codec
, hda_nid_t fg
,
197 unsigned int power_state
);
199 int (*suspend
)(struct hda_codec
*codec
);
200 int (*resume
)(struct hda_codec
*codec
);
201 int (*check_power_status
)(struct hda_codec
*codec
, hda_nid_t nid
);
203 void (*reboot_notify
)(struct hda_codec
*codec
);
204 void (*stream_pm
)(struct hda_codec
*codec
, hda_nid_t nid
, bool on
);
207 /* record for amp information cache */
208 struct hda_cache_head
{
209 u32 key
:31; /* hash key */
211 u16 val
; /* assigned value */
215 struct hda_amp_info
{
216 struct hda_cache_head head
;
217 u32 amp_caps
; /* amp capabilities */
218 u16 vol
[2]; /* current volume & mute */
221 struct hda_cache_rec
{
222 u16 hash
[64]; /* hash table for index */
223 struct snd_array buf
; /* record entries */
228 int (*open
)(struct hda_pcm_stream
*info
, struct hda_codec
*codec
,
229 struct snd_pcm_substream
*substream
);
230 int (*close
)(struct hda_pcm_stream
*info
, struct hda_codec
*codec
,
231 struct snd_pcm_substream
*substream
);
232 int (*prepare
)(struct hda_pcm_stream
*info
, struct hda_codec
*codec
,
233 unsigned int stream_tag
, unsigned int format
,
234 struct snd_pcm_substream
*substream
);
235 int (*cleanup
)(struct hda_pcm_stream
*info
, struct hda_codec
*codec
,
236 struct snd_pcm_substream
*substream
);
237 unsigned int (*get_delay
)(struct hda_pcm_stream
*info
,
238 struct hda_codec
*codec
,
239 struct snd_pcm_substream
*substream
);
242 /* PCM information for each substream */
243 struct hda_pcm_stream
{
244 unsigned int substreams
; /* number of substreams, 0 = not exist*/
245 unsigned int channels_min
; /* min. number of channels */
246 unsigned int channels_max
; /* max. number of channels */
247 hda_nid_t nid
; /* default NID to query rates/formats/bps, or set up */
248 u32 rates
; /* supported rates */
249 u64 formats
; /* supported formats (SNDRV_PCM_FMTBIT_) */
250 unsigned int maxbps
; /* supported max. bit per sample */
251 const struct snd_pcm_chmap_elem
*chmap
; /* chmap to override */
252 struct hda_pcm_ops ops
;
264 /* for PCM creation */
267 struct hda_pcm_stream stream
[2];
268 unsigned int pcm_type
; /* HDA_PCM_TYPE_XXX */
269 int device
; /* device number to assign */
270 struct snd_pcm
*pcm
; /* assigned PCM instance */
271 bool own_chmap
; /* codec driver provides own channel maps */
273 struct hda_codec
*codec
;
275 struct list_head list
;
278 /* codec information */
280 struct hdac_device core
;
282 struct snd_card
*card
;
283 unsigned int addr
; /* codec addr*/
284 struct list_head list
; /* list point */
286 hda_nid_t afg
; /* AFG node id */
287 hda_nid_t mfg
; /* MFG node id */
297 u32 probe_id
; /* overridden id for probing */
299 /* detected preset */
300 const struct hda_codec_preset
*preset
;
301 const char *vendor_name
; /* codec vendor name */
302 const char *chip_name
; /* codec chip name */
303 const char *modelname
; /* model name for preset */
306 struct hda_codec_ops patch_ops
;
308 /* PCM to create, set by patch_ops.build_pcms callback */
309 struct list_head pcm_list_head
;
311 /* codec specific info */
315 struct hda_beep
*beep
;
316 unsigned int beep_mode
;
318 /* widget capabilities cache */
319 unsigned int num_nodes
;
323 struct snd_array mixers
; /* list of assigned mixer elements */
324 struct snd_array nids
; /* list of mapped mixer elements */
326 struct hda_cache_rec amp_cache
; /* cache for amp access */
327 struct hda_cache_rec cmd_cache
; /* cache for other commands */
329 struct list_head conn_list
; /* linked-list of connection-list */
331 struct mutex spdif_mutex
;
332 struct mutex control_mutex
;
333 struct mutex hash_mutex
;
334 struct snd_array spdif_out
;
335 unsigned int spdif_in_enable
; /* SPDIF input enable? */
336 const hda_nid_t
*slave_dig_outs
; /* optional digital out slave widgets */
337 struct snd_array init_pins
; /* initial (BIOS) pin configurations */
338 struct snd_array driver_pins
; /* pin configs set by codec parser */
339 struct snd_array cvt_setups
; /* audio convert setups */
341 struct mutex user_mutex
;
342 #ifdef CONFIG_SND_HDA_RECONFIG
343 struct snd_array init_verbs
; /* additional init verbs */
344 struct snd_array hints
; /* additional hints */
345 struct snd_array user_pins
; /* default pin configs to override */
348 #ifdef CONFIG_SND_HDA_HWDEP
349 struct snd_hwdep
*hwdep
; /* assigned hwdep device */
353 unsigned int in_freeing
:1; /* being released */
354 unsigned int spdif_status_reset
:1; /* needs to toggle SPDIF for each
356 * (e.g. Realtek codecs)
358 unsigned int pin_amp_workaround
:1; /* pin out-amp takes index
359 * (e.g. Conexant codecs)
361 unsigned int single_adc_amp
:1; /* adc in-amp takes no index
362 * (e.g. CX20549 codec)
364 unsigned int no_sticky_stream
:1; /* no sticky-PCM stream assignment */
365 unsigned int pins_shutup
:1; /* pins are shut up */
366 unsigned int no_trigger_sense
:1; /* don't trigger at pin-sensing */
367 unsigned int no_jack_detect
:1; /* Machine has no jack-detection */
368 unsigned int inv_eapd
:1; /* broken h/w: inverted EAPD control */
369 unsigned int inv_jack_detect
:1; /* broken h/w: inverted detection bit */
370 unsigned int pcm_format_first
:1; /* PCM format must be set first */
371 unsigned int epss
:1; /* supporting EPSS? */
372 unsigned int cached_write
:1; /* write only to caches */
373 unsigned int dp_mst
:1; /* support DP1.2 Multi-stream transport */
374 unsigned int dump_coef
:1; /* dump processing coefs in codec proc file */
375 unsigned int power_save_node
:1; /* advanced PM for each widget */
377 unsigned int d3_stop_clk
:1; /* support D3 operation without BCLK */
378 atomic_t in_pm
; /* suspend/resume being performed */
379 unsigned long power_on_acct
;
380 unsigned long power_off_acct
;
381 unsigned long power_jiffies
;
384 /* filter the requested power state per nid */
385 unsigned int (*power_filter
)(struct hda_codec
*codec
, hda_nid_t nid
,
386 unsigned int power_state
);
388 /* codec-specific additional proc output */
389 void (*proc_widget_hook
)(struct snd_info_buffer
*buffer
,
390 struct hda_codec
*codec
, hda_nid_t nid
);
393 struct snd_array jacktbl
;
394 unsigned long jackpoll_interval
; /* In jiffies. Zero means no poll, rely on unsol events */
395 struct delayed_work jackpoll_work
;
397 #ifdef CONFIG_SND_HDA_INPUT_JACK
399 struct snd_array jacks
;
402 int depop_delay
; /* depop delay in ms, -1 for default delay time */
406 const struct hda_fixup
*fixup_list
;
407 const char *fixup_name
;
409 /* additional init verbs */
410 struct snd_array verbs
;
413 #define dev_to_hda_codec(_dev) container_of(_dev, struct hda_codec, core.dev)
414 #define hda_codec_dev(_dev) (&(_dev)->core.dev)
418 HDA_INPUT
, HDA_OUTPUT
421 /* snd_hda_codec_read/write optional flags */
422 #define HDA_RW_NO_RESPONSE_FALLBACK (1 << 0)
427 int snd_hda_bus_new(struct snd_card
*card
, struct hda_bus
**busp
);
428 int snd_hda_codec_new(struct hda_bus
*bus
, struct snd_card
*card
,
429 unsigned int codec_addr
, struct hda_codec
**codecp
);
430 int snd_hda_codec_configure(struct hda_codec
*codec
);
431 int snd_hda_codec_update_widgets(struct hda_codec
*codec
);
434 * low level functions
436 unsigned int snd_hda_codec_read(struct hda_codec
*codec
, hda_nid_t nid
,
438 unsigned int verb
, unsigned int parm
);
439 int snd_hda_codec_write(struct hda_codec
*codec
, hda_nid_t nid
, int flags
,
440 unsigned int verb
, unsigned int parm
);
441 #define snd_hda_param_read(codec, nid, param) \
442 snd_hda_codec_read(codec, nid, 0, AC_VERB_PARAMETERS, param)
443 int snd_hda_get_sub_nodes(struct hda_codec
*codec
, hda_nid_t nid
,
444 hda_nid_t
*start_id
);
445 int snd_hda_get_connections(struct hda_codec
*codec
, hda_nid_t nid
,
446 hda_nid_t
*conn_list
, int max_conns
);
448 snd_hda_get_num_conns(struct hda_codec
*codec
, hda_nid_t nid
)
450 return snd_hda_get_connections(codec
, nid
, NULL
, 0);
452 int snd_hda_get_num_raw_conns(struct hda_codec
*codec
, hda_nid_t nid
);
453 int snd_hda_get_raw_connections(struct hda_codec
*codec
, hda_nid_t nid
,
454 hda_nid_t
*conn_list
, int max_conns
);
455 int snd_hda_get_conn_list(struct hda_codec
*codec
, hda_nid_t nid
,
456 const hda_nid_t
**listp
);
457 int snd_hda_override_conn_list(struct hda_codec
*codec
, hda_nid_t nid
, int nums
,
458 const hda_nid_t
*list
);
459 int snd_hda_get_conn_index(struct hda_codec
*codec
, hda_nid_t mux
,
460 hda_nid_t nid
, int recursive
);
461 int snd_hda_get_devices(struct hda_codec
*codec
, hda_nid_t nid
,
462 u8
*dev_list
, int max_devices
);
463 int snd_hda_query_supported_pcm(struct hda_codec
*codec
, hda_nid_t nid
,
464 u32
*ratesp
, u64
*formatsp
, unsigned int *bpsp
);
472 void snd_hda_sequence_write(struct hda_codec
*codec
,
473 const struct hda_verb
*seq
);
475 /* unsolicited event */
476 int snd_hda_queue_unsol_event(struct hda_bus
*bus
, u32 res
, u32 res_ex
);
479 int snd_hda_codec_write_cache(struct hda_codec
*codec
, hda_nid_t nid
,
480 int flags
, unsigned int verb
, unsigned int parm
);
481 void snd_hda_sequence_write_cache(struct hda_codec
*codec
,
482 const struct hda_verb
*seq
);
483 int snd_hda_codec_update_cache(struct hda_codec
*codec
, hda_nid_t nid
,
484 int flags
, unsigned int verb
, unsigned int parm
);
485 void snd_hda_codec_resume_cache(struct hda_codec
*codec
);
486 /* both for cmd & amp caches */
487 void snd_hda_codec_flush_cache(struct hda_codec
*codec
);
489 /* the struct for codec->pin_configs */
492 unsigned char ctrl
; /* original pin control value */
493 unsigned char target
; /* target pin control value */
494 unsigned int cfg
; /* default configuration */
497 unsigned int snd_hda_codec_get_pincfg(struct hda_codec
*codec
, hda_nid_t nid
);
498 int snd_hda_codec_set_pincfg(struct hda_codec
*codec
, hda_nid_t nid
,
500 int snd_hda_add_pincfg(struct hda_codec
*codec
, struct snd_array
*list
,
501 hda_nid_t nid
, unsigned int cfg
); /* for hwdep */
502 void snd_hda_shutup_pins(struct hda_codec
*codec
);
505 struct hda_spdif_out
{
506 hda_nid_t nid
; /* Converter nid values relate to */
507 unsigned int status
; /* IEC958 status bits */
508 unsigned short ctls
; /* SPDIF control bits */
510 struct hda_spdif_out
*snd_hda_spdif_out_of_nid(struct hda_codec
*codec
,
512 void snd_hda_spdif_ctls_unassign(struct hda_codec
*codec
, int idx
);
513 void snd_hda_spdif_ctls_assign(struct hda_codec
*codec
, int idx
, hda_nid_t nid
);
518 int snd_hda_codec_build_controls(struct hda_codec
*codec
);
523 int snd_hda_codec_parse_pcms(struct hda_codec
*codec
);
524 int snd_hda_codec_build_pcms(struct hda_codec
*codec
);
527 struct hda_pcm
*snd_hda_codec_pcm_new(struct hda_codec
*codec
,
528 const char *fmt
, ...);
530 static inline void snd_hda_codec_pcm_get(struct hda_pcm
*pcm
)
532 kref_get(&pcm
->kref
);
534 void snd_hda_codec_pcm_put(struct hda_pcm
*pcm
);
536 int snd_hda_codec_prepare(struct hda_codec
*codec
,
537 struct hda_pcm_stream
*hinfo
,
540 struct snd_pcm_substream
*substream
);
541 void snd_hda_codec_cleanup(struct hda_codec
*codec
,
542 struct hda_pcm_stream
*hinfo
,
543 struct snd_pcm_substream
*substream
);
545 void snd_hda_codec_setup_stream(struct hda_codec
*codec
, hda_nid_t nid
,
547 int channel_id
, int format
);
548 void __snd_hda_codec_cleanup_stream(struct hda_codec
*codec
, hda_nid_t nid
,
550 #define snd_hda_codec_cleanup_stream(codec, nid) \
551 __snd_hda_codec_cleanup_stream(codec, nid, 0)
552 unsigned int snd_hda_calc_stream_format(struct hda_codec
*codec
,
554 unsigned int channels
,
557 unsigned short spdif_ctls
);
558 int snd_hda_is_supported_format(struct hda_codec
*codec
, hda_nid_t nid
,
559 unsigned int format
);
561 extern const struct snd_pcm_chmap_elem snd_pcm_2_1_chmaps
[];
566 void snd_hda_get_codec_name(struct hda_codec
*codec
, char *name
, int namelen
);
567 void snd_hda_codec_set_power_to_all(struct hda_codec
*codec
, hda_nid_t fg
,
568 unsigned int power_state
);
570 int snd_hda_lock_devices(struct hda_bus
*bus
);
571 void snd_hda_unlock_devices(struct hda_bus
*bus
);
572 void snd_hda_bus_reset(struct hda_bus
*bus
);
577 extern const struct dev_pm_ops hda_codec_driver_pm
;
580 int hda_call_check_power_status(struct hda_codec
*codec
, hda_nid_t nid
)
583 if (codec
->patch_ops
.check_power_status
)
584 return codec
->patch_ops
.check_power_status(codec
, nid
);
590 * get widget information
592 const char *snd_hda_get_jack_connectivity(u32 cfg
);
593 const char *snd_hda_get_jack_type(u32 cfg
);
594 const char *snd_hda_get_jack_location(u32 cfg
);
600 void snd_hda_power_up(struct hda_codec
*codec
);
601 void snd_hda_power_down(struct hda_codec
*codec
);
602 void snd_hda_set_power_save(struct hda_bus
*bus
, int delay
);
603 void snd_hda_update_power_acct(struct hda_codec
*codec
);
605 static inline void snd_hda_power_up(struct hda_codec
*codec
) {}
606 static inline void snd_hda_power_down(struct hda_codec
*codec
) {}
607 static inline void snd_hda_set_power_save(struct hda_bus
*bus
, int delay
) {}
610 #ifdef CONFIG_SND_HDA_PATCH_LOADER
614 int snd_hda_load_patch(struct hda_bus
*bus
, size_t size
, const void *buf
);
617 #ifdef CONFIG_SND_HDA_DSP_LOADER
619 snd_hda_codec_load_dsp_prepare(struct hda_codec
*codec
, unsigned int format
,
621 struct snd_dma_buffer
*bufp
)
623 return codec
->bus
->ops
.load_dsp_prepare(codec
->bus
, format
, size
, bufp
);
626 snd_hda_codec_load_dsp_trigger(struct hda_codec
*codec
, bool start
)
628 return codec
->bus
->ops
.load_dsp_trigger(codec
->bus
, start
);
631 snd_hda_codec_load_dsp_cleanup(struct hda_codec
*codec
,
632 struct snd_dma_buffer
*dmab
)
634 return codec
->bus
->ops
.load_dsp_cleanup(codec
->bus
, dmab
);
638 snd_hda_codec_load_dsp_prepare(struct hda_codec
*codec
, unsigned int format
,
640 struct snd_dma_buffer
*bufp
)
645 snd_hda_codec_load_dsp_trigger(struct hda_codec
*codec
, bool start
) {}
647 snd_hda_codec_load_dsp_cleanup(struct hda_codec
*codec
,
648 struct snd_dma_buffer
*dmab
) {}
651 #endif /* __SOUND_HDA_CODEC_H */