ALSA: firewire-tascam: off by one in handle_midi_tx()
[deliverable/linux.git] / sound / pci / hda / hda_codec.h
CommitLineData
1da177e4
LT
1/*
2 * Universal Interface for Intel High Definition Audio Codec
3 *
4 * Copyright (c) 2004 Takashi Iwai <tiwai@suse.de>
5 *
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)
9 * any later version.
10 *
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
14 * more details.
15 *
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.
19 */
20
21#ifndef __SOUND_HDA_CODEC_H
22#define __SOUND_HDA_CODEC_H
23
bbbc7e85 24#include <linux/kref.h>
1da177e4
LT
25#include <sound/info.h>
26#include <sound/control.h>
27#include <sound/pcm.h>
2807314d 28#include <sound/hwdep.h>
e3d280fc 29#include <sound/hdaudio.h>
ed326363 30#include <sound/hda_verbs.h>
4d75faa0 31#include <sound/hda_regmap.h>
f43aa025 32
1da177e4
LT
33/*
34 * Structures
35 */
36
37struct hda_bus;
1cd2224c 38struct hda_beep;
1da177e4
LT
39struct hda_codec;
40struct hda_pcm;
41struct hda_pcm_stream;
1da177e4 42
1da177e4
LT
43/*
44 * codec bus
45 *
46 * each controller needs to creata a hda_bus to assign the accessor.
47 * A hda_bus contains several codecs in the list codec_list.
48 */
49struct hda_bus {
d068ebc2
TI
50 struct hdac_bus core;
51
c8b6bf9b 52 struct snd_card *card;
1da177e4 53
1da177e4
LT
54 struct pci_dev *pci;
55 const char *modelname;
1da177e4 56
3f50ac6a 57 struct mutex prepare_mutex;
1da177e4 58
529bd6c4
TI
59 /* assigned PCMs */
60 DECLARE_BITMAP(pcm_dev_bits, SNDRV_PCM_DEVICES);
61
52987656
TI
62 /* misc op flags */
63 unsigned int needs_damn_long_delay :1;
b20f3b83 64 unsigned int allow_bus_reset:1; /* allow bus reset at fatal error */
b20f3b83 65 /* status for codec/controller */
b94d3539 66 unsigned int shutdown :1; /* being unloaded */
8dd78330
TI
67 unsigned int response_reset:1; /* controller was reset */
68 unsigned int in_reset:1; /* during reset operation */
63e51fd7 69 unsigned int no_response_fallback:1; /* don't fallback at RIRB error */
ea9b43ad
TI
70
71 int primary_dig_out_type; /* primary digital out PCM type */
1da177e4
LT
72};
73
7e8be1b3
TI
74/* from hdac_bus to hda_bus */
75#define to_hda_bus(bus) container_of(bus, struct hda_bus, core)
76
1da177e4
LT
77/*
78 * codec preset
79 *
80 * Known codecs have the patch to build and set up the controls/PCMs
81 * better than the generic parser.
82 */
83struct hda_codec_preset {
84 unsigned int id;
1da177e4
LT
85 unsigned int rev;
86 const char *name;
87 int (*patch)(struct hda_codec *codec);
88};
89
d8a766a1
TI
90#define HDA_CODEC_ID_GENERIC_HDMI 0x00000101
91#define HDA_CODEC_ID_GENERIC 0x00000201
92
93struct hda_codec_driver {
e3d280fc 94 struct hdac_driver core;
1289e9e8 95 const struct hda_codec_preset *preset;
1289e9e8
TI
96};
97
d8a766a1
TI
98int __hda_codec_driver_register(struct hda_codec_driver *drv, const char *name,
99 struct module *owner);
100#define hda_codec_driver_register(drv) \
101 __hda_codec_driver_register(drv, KBUILD_MODNAME, THIS_MODULE)
102void hda_codec_driver_unregister(struct hda_codec_driver *drv);
103#define module_hda_codec_driver(drv) \
104 module_driver(drv, hda_codec_driver_register, \
105 hda_codec_driver_unregister)
1289e9e8 106
1da177e4
LT
107/* ops set by the preset patch */
108struct hda_codec_ops {
109 int (*build_controls)(struct hda_codec *codec);
110 int (*build_pcms)(struct hda_codec *codec);
111 int (*init)(struct hda_codec *codec);
112 void (*free)(struct hda_codec *codec);
113 void (*unsol_event)(struct hda_codec *codec, unsigned int res);
4d7fbdbc
TI
114 void (*set_power_state)(struct hda_codec *codec, hda_nid_t fg,
115 unsigned int power_state);
2a43952a 116#ifdef CONFIG_PM
68cb2b55 117 int (*suspend)(struct hda_codec *codec);
1da177e4 118 int (*resume)(struct hda_codec *codec);
cb53c626
TI
119 int (*check_power_status)(struct hda_codec *codec, hda_nid_t nid);
120#endif
fb8d1a34 121 void (*reboot_notify)(struct hda_codec *codec);
e6feb5d0 122 void (*stream_pm)(struct hda_codec *codec, hda_nid_t nid, bool on);
1da177e4
LT
123};
124
1da177e4
LT
125/* PCM callbacks */
126struct hda_pcm_ops {
127 int (*open)(struct hda_pcm_stream *info, struct hda_codec *codec,
c8b6bf9b 128 struct snd_pcm_substream *substream);
1da177e4 129 int (*close)(struct hda_pcm_stream *info, struct hda_codec *codec,
c8b6bf9b 130 struct snd_pcm_substream *substream);
1da177e4
LT
131 int (*prepare)(struct hda_pcm_stream *info, struct hda_codec *codec,
132 unsigned int stream_tag, unsigned int format,
c8b6bf9b 133 struct snd_pcm_substream *substream);
1da177e4 134 int (*cleanup)(struct hda_pcm_stream *info, struct hda_codec *codec,
c8b6bf9b 135 struct snd_pcm_substream *substream);
21229613
TI
136 unsigned int (*get_delay)(struct hda_pcm_stream *info,
137 struct hda_codec *codec,
138 struct snd_pcm_substream *substream);
1da177e4
LT
139};
140
141/* PCM information for each substream */
142struct hda_pcm_stream {
d01ce99f 143 unsigned int substreams; /* number of substreams, 0 = not exist*/
1da177e4
LT
144 unsigned int channels_min; /* min. number of channels */
145 unsigned int channels_max; /* max. number of channels */
146 hda_nid_t nid; /* default NID to query rates/formats/bps, or set up */
147 u32 rates; /* supported rates */
148 u64 formats; /* supported formats (SNDRV_PCM_FMTBIT_) */
149 unsigned int maxbps; /* supported max. bit per sample */
ee81abb6 150 const struct snd_pcm_chmap_elem *chmap; /* chmap to override */
1da177e4
LT
151 struct hda_pcm_ops ops;
152};
153
7ba72ba1
TI
154/* PCM types */
155enum {
156 HDA_PCM_TYPE_AUDIO,
157 HDA_PCM_TYPE_SPDIF,
158 HDA_PCM_TYPE_HDMI,
159 HDA_PCM_TYPE_MODEM,
160 HDA_PCM_NTYPES
161};
162
1da177e4
LT
163/* for PCM creation */
164struct hda_pcm {
165 char *name;
166 struct hda_pcm_stream stream[2];
7ba72ba1 167 unsigned int pcm_type; /* HDA_PCM_TYPE_XXX */
176d5335
TI
168 int device; /* device number to assign */
169 struct snd_pcm *pcm; /* assigned PCM instance */
9c9a5175 170 bool own_chmap; /* codec driver provides own channel maps */
bbbc7e85
TI
171 /* private: */
172 struct hda_codec *codec;
173 struct kref kref;
174 struct list_head list;
1da177e4
LT
175};
176
177/* codec information */
178struct hda_codec {
e3d280fc 179 struct hdac_device core;
1da177e4 180 struct hda_bus *bus;
6efdd851 181 struct snd_card *card;
1da177e4 182 unsigned int addr; /* codec addr*/
d8a766a1 183 u32 probe_id; /* overridden id for probing */
1da177e4
LT
184
185 /* detected preset */
186 const struct hda_codec_preset *preset;
f44ac837 187 const char *modelname; /* model name for preset */
1da177e4
LT
188
189 /* set by patch */
190 struct hda_codec_ops patch_ops;
191
1da177e4 192 /* PCM to create, set by patch_ops.build_pcms callback */
bbbc7e85 193 struct list_head pcm_list_head;
1da177e4
LT
194
195 /* codec specific info */
196 void *spec;
197
1cd2224c
MR
198 /* beep device */
199 struct hda_beep *beep;
2dca0bba 200 unsigned int beep_mode;
1cd2224c 201
54d17403 202 /* widget capabilities cache */
54d17403
TI
203 u32 *wcaps;
204
d13bd412 205 struct snd_array mixers; /* list of assigned mixer elements */
5b0cb1d8 206 struct snd_array nids; /* list of mapped mixer elements */
d13bd412 207
ee8e765b 208 struct list_head conn_list; /* linked-list of connection-list */
a12d3e1e 209
62932df8 210 struct mutex spdif_mutex;
5a9e02e9 211 struct mutex control_mutex;
7c935976 212 struct snd_array spdif_out;
1da177e4 213 unsigned int spdif_in_enable; /* SPDIF input enable? */
dda14410 214 const hda_nid_t *slave_dig_outs; /* optional digital out slave widgets */
3be14149 215 struct snd_array init_pins; /* initial (BIOS) pin configurations */
346ff70f 216 struct snd_array driver_pins; /* pin configs set by codec parser */
eb541337 217 struct snd_array cvt_setups; /* audio convert setups */
2807314d 218
09b70e85 219 struct mutex user_mutex;
b989d044 220#ifdef CONFIG_SND_HDA_RECONFIG
11aeff08 221 struct snd_array init_verbs; /* additional init verbs */
1e1be432 222 struct snd_array hints; /* additional hints */
346ff70f 223 struct snd_array user_pins; /* default pin configs to override */
11aeff08 224#endif
cb53c626 225
648a8d27
TI
226#ifdef CONFIG_SND_HDA_HWDEP
227 struct snd_hwdep *hwdep; /* assigned hwdep device */
228#endif
229
963f803f 230 /* misc flags */
9a6246ff 231 unsigned int in_freeing:1; /* being released */
c4c2533f 232 unsigned int registered:1; /* codec was registered */
963f803f
TI
233 unsigned int spdif_status_reset :1; /* needs to toggle SPDIF for each
234 * status change
235 * (e.g. Realtek codecs)
236 */
9421f954
TI
237 unsigned int pin_amp_workaround:1; /* pin out-amp takes index
238 * (e.g. Conexant codecs)
239 */
4f32456e
MK
240 unsigned int single_adc_amp:1; /* adc in-amp takes no index
241 * (e.g. CX20549 codec)
242 */
0e7adbe2 243 unsigned int no_sticky_stream:1; /* no sticky-PCM stream assignment */
ac0547dc 244 unsigned int pins_shutup:1; /* pins are shut up */
729d55ba 245 unsigned int no_trigger_sense:1; /* don't trigger at pin-sensing */
71b1e9e4 246 unsigned int no_jack_detect:1; /* Machine has no jack-detection */
ecac3ed1 247 unsigned int inv_eapd:1; /* broken h/w: inverted EAPD control */
9cc159c6 248 unsigned int inv_jack_detect:1; /* broken h/w: inverted detection bit */
ed360813 249 unsigned int pcm_format_first:1; /* PCM format must be set first */
c370dd6e 250 unsigned int cached_write:1; /* write only to caches */
f1aa0684 251 unsigned int dp_mst:1; /* support DP1.2 Multi-stream transport */
cd262518 252 unsigned int dump_coef:1; /* dump processing coefs in codec proc file */
967b1307 253 unsigned int power_save_node:1; /* advanced PM for each widget */
2377c3c3 254 unsigned int auto_runtime_pm:1; /* enable automatic codec runtime pm */
83012a7c 255#ifdef CONFIG_PM
a2f6309e
TI
256 unsigned long power_on_acct;
257 unsigned long power_off_acct;
258 unsigned long power_jiffies;
cb53c626 259#endif
7fbe824a 260 unsigned int mixer_assigned;
daead538 261
9419ab6b
TI
262 /* filter the requested power state per nid */
263 unsigned int (*power_filter)(struct hda_codec *codec, hda_nid_t nid,
264 unsigned int power_state);
265
daead538
TI
266 /* codec-specific additional proc output */
267 void (*proc_widget_hook)(struct snd_info_buffer *buffer,
268 struct hda_codec *codec, hda_nid_t nid);
cd372fb3 269
1835a0f9
TI
270 /* jack detection */
271 struct snd_array jacktbl;
26a6cb6c
DH
272 unsigned long jackpoll_interval; /* In jiffies. Zero means no poll, rely on unsol events */
273 struct delayed_work jackpoll_work;
1835a0f9 274
cd372fb3
TI
275 /* jack detection */
276 struct snd_array jacks;
c9ce6b26 277
7f132927
ML
278 int depop_delay; /* depop delay in ms, -1 for default delay time */
279
c9ce6b26
TI
280 /* fix-up list */
281 int fixup_id;
282 const struct hda_fixup *fixup_list;
283 const char *fixup_name;
284
285 /* additional init verbs */
286 struct snd_array verbs;
1da177e4
LT
287};
288
e3d280fc
TI
289#define dev_to_hda_codec(_dev) container_of(_dev, struct hda_codec, core.dev)
290#define hda_codec_dev(_dev) (&(_dev)->core.dev)
d8a766a1 291
d068ebc2
TI
292#define list_for_each_codec(c, bus) \
293 list_for_each_entry(c, &(bus)->core.codec_list, core.list)
294
63e51fd7
TI
295/* snd_hda_codec_read/write optional flags */
296#define HDA_RW_NO_RESPONSE_FALLBACK (1 << 0)
1da177e4
LT
297
298/*
299 * constructors
300 */
7e8be1b3
TI
301int snd_hda_bus_new(struct snd_card *card,
302 const struct hdac_bus_ops *ops,
a43ff5ba 303 const struct hdac_io_ops *io_ops,
7e8be1b3 304 struct hda_bus **busp);
6efdd851
TI
305int snd_hda_codec_new(struct hda_bus *bus, struct snd_card *card,
306 unsigned int codec_addr, struct hda_codec **codecp);
a1e21c90 307int snd_hda_codec_configure(struct hda_codec *codec);
a15d05db 308int snd_hda_codec_update_widgets(struct hda_codec *codec);
1da177e4
LT
309
310/*
311 * low level functions
312 */
70b4891c
VK
313static inline unsigned int
314snd_hda_codec_read(struct hda_codec *codec, hda_nid_t nid,
e7ecc27e 315 int flags,
70b4891c
VK
316 unsigned int verb, unsigned int parm)
317{
318 return snd_hdac_codec_read(&codec->core, nid, flags, verb, parm);
319}
320
321static inline int
322snd_hda_codec_write(struct hda_codec *codec, hda_nid_t nid, int flags,
323 unsigned int verb, unsigned int parm)
324{
325 return snd_hdac_codec_write(&codec->core, nid, flags, verb, parm);
326}
327
d01ce99f 328#define snd_hda_param_read(codec, nid, param) \
01ed3c06 329 snd_hdac_read_parm(&(codec)->core, nid, param)
7639a06c
TI
330#define snd_hda_get_sub_nodes(codec, nid, start_nid) \
331 snd_hdac_get_sub_nodes(&(codec)->core, nid, start_nid)
d01ce99f
TI
332int snd_hda_get_connections(struct hda_codec *codec, hda_nid_t nid,
333 hda_nid_t *conn_list, int max_conns);
09cf03b8
TI
334static inline int
335snd_hda_get_num_conns(struct hda_codec *codec, hda_nid_t nid)
336{
337 return snd_hda_get_connections(codec, nid, NULL, 0);
338}
7639a06c
TI
339
340#define snd_hda_get_raw_connections(codec, nid, list, max_conns) \
341 snd_hdac_get_connections(&(codec)->core, nid, list, max_conns)
342#define snd_hda_get_num_raw_conns(codec, nid) \
343 snd_hdac_get_connections(&(codec)->core, nid, NULL, 0);
344
ee8e765b
TI
345int snd_hda_get_conn_list(struct hda_codec *codec, hda_nid_t nid,
346 const hda_nid_t **listp);
b2f934a0
TI
347int snd_hda_override_conn_list(struct hda_codec *codec, hda_nid_t nid, int nums,
348 const hda_nid_t *list);
8d087c76
TI
349int snd_hda_get_conn_index(struct hda_codec *codec, hda_nid_t mux,
350 hda_nid_t nid, int recursive);
f1aa0684
ML
351int snd_hda_get_devices(struct hda_codec *codec, hda_nid_t nid,
352 u8 *dev_list, int max_devices);
1da177e4
LT
353
354struct hda_verb {
355 hda_nid_t nid;
356 u32 verb;
357 u32 param;
358};
359
d01ce99f
TI
360void snd_hda_sequence_write(struct hda_codec *codec,
361 const struct hda_verb *seq);
1da177e4
LT
362
363/* unsolicited event */
d068ebc2
TI
364static inline void
365snd_hda_queue_unsol_event(struct hda_bus *bus, u32 res, u32 res_ex)
366{
367 snd_hdac_bus_queue_event(&bus->core, res, res_ex);
368}
1da177e4 369
b3ac5636 370/* cached write */
a551d914
TI
371static inline int
372snd_hda_codec_write_cache(struct hda_codec *codec, hda_nid_t nid,
373 int flags, unsigned int verb, unsigned int parm)
374{
375 return snd_hdac_regmap_write(&codec->core, nid, verb, parm);
376}
377
378#define snd_hda_codec_update_cache(codec, nid, flags, verb, parm) \
379 snd_hda_codec_write_cache(codec, nid, flags, verb, parm)
0c3d47b0 380
3be14149
TI
381/* the struct for codec->pin_configs */
382struct hda_pincfg {
383 hda_nid_t nid;
d7fdc00a
TI
384 unsigned char ctrl; /* original pin control value */
385 unsigned char target; /* target pin control value */
ac0547dc 386 unsigned int cfg; /* default configuration */
3be14149
TI
387};
388
389unsigned int snd_hda_codec_get_pincfg(struct hda_codec *codec, hda_nid_t nid);
390int snd_hda_codec_set_pincfg(struct hda_codec *codec, hda_nid_t nid,
391 unsigned int cfg);
392int snd_hda_add_pincfg(struct hda_codec *codec, struct snd_array *list,
393 hda_nid_t nid, unsigned int cfg); /* for hwdep */
92ee6162 394void snd_hda_shutup_pins(struct hda_codec *codec);
3be14149 395
7c935976
SW
396/* SPDIF controls */
397struct hda_spdif_out {
398 hda_nid_t nid; /* Converter nid values relate to */
399 unsigned int status; /* IEC958 status bits */
400 unsigned short ctls; /* SPDIF control bits */
401};
402struct hda_spdif_out *snd_hda_spdif_out_of_nid(struct hda_codec *codec,
403 hda_nid_t nid);
74b654c9
SW
404void snd_hda_spdif_ctls_unassign(struct hda_codec *codec, int idx);
405void snd_hda_spdif_ctls_assign(struct hda_codec *codec, int idx, hda_nid_t nid);
7c935976 406
1da177e4
LT
407/*
408 * Mixer
409 */
6c1f45ea 410int snd_hda_codec_build_controls(struct hda_codec *codec);
1da177e4
LT
411
412/*
413 * PCM
414 */
1a4ba30c 415int snd_hda_codec_parse_pcms(struct hda_codec *codec);
529bd6c4 416int snd_hda_codec_build_pcms(struct hda_codec *codec);
eb541337 417
bbbc7e85
TI
418__printf(2, 3)
419struct hda_pcm *snd_hda_codec_pcm_new(struct hda_codec *codec,
420 const char *fmt, ...);
421
422static inline void snd_hda_codec_pcm_get(struct hda_pcm *pcm)
423{
424 kref_get(&pcm->kref);
425}
426void snd_hda_codec_pcm_put(struct hda_pcm *pcm);
427
eb541337
TI
428int snd_hda_codec_prepare(struct hda_codec *codec,
429 struct hda_pcm_stream *hinfo,
430 unsigned int stream,
431 unsigned int format,
432 struct snd_pcm_substream *substream);
433void snd_hda_codec_cleanup(struct hda_codec *codec,
434 struct hda_pcm_stream *hinfo,
435 struct snd_pcm_substream *substream);
436
d01ce99f
TI
437void snd_hda_codec_setup_stream(struct hda_codec *codec, hda_nid_t nid,
438 u32 stream_tag,
1da177e4 439 int channel_id, int format);
f0cea797
TI
440void __snd_hda_codec_cleanup_stream(struct hda_codec *codec, hda_nid_t nid,
441 int do_now);
442#define snd_hda_codec_cleanup_stream(codec, nid) \
443 __snd_hda_codec_cleanup_stream(codec, nid, 0)
b7d023e1
TI
444
445#define snd_hda_query_supported_pcm(codec, nid, ratesp, fmtsp, bpsp) \
446 snd_hdac_query_supported_pcm(&(codec)->core, nid, ratesp, fmtsp, bpsp)
447#define snd_hda_is_supported_format(codec, nid, fmt) \
448 snd_hdac_is_supported_format(&(codec)->core, nid, fmt)
1da177e4 449
ee81abb6
TI
450extern const struct snd_pcm_chmap_elem snd_pcm_2_1_chmaps[];
451
0a50575b
TI
452int snd_hda_attach_pcm_stream(struct hda_bus *_bus, struct hda_codec *codec,
453 struct hda_pcm *cpcm);
454
1da177e4
LT
455/*
456 * Misc
457 */
458void snd_hda_get_codec_name(struct hda_codec *codec, char *name, int namelen);
4d7fbdbc 459void snd_hda_codec_set_power_to_all(struct hda_codec *codec, hda_nid_t fg,
9419ab6b 460 unsigned int power_state);
1da177e4 461
d3d020bd
TI
462int snd_hda_lock_devices(struct hda_bus *bus);
463void snd_hda_unlock_devices(struct hda_bus *bus);
59ed1ead 464void snd_hda_bus_reset(struct hda_bus *bus);
0a50575b 465void snd_hda_bus_reset_codecs(struct hda_bus *bus);
d3d020bd 466
ded255be
TI
467int snd_hda_codec_set_name(struct hda_codec *codec, const char *name);
468
1da177e4
LT
469/*
470 * power management
471 */
59ed1ead 472extern const struct dev_pm_ops hda_codec_driver_pm;
1da177e4 473
9e5341b9
TI
474static inline
475int hda_call_check_power_status(struct hda_codec *codec, hda_nid_t nid)
476{
83012a7c 477#ifdef CONFIG_PM
9e5341b9
TI
478 if (codec->patch_ops.check_power_status)
479 return codec->patch_ops.check_power_status(codec, nid);
ff2b7e2a 480#endif
9e5341b9
TI
481 return 0;
482}
9e5341b9 483
cb53c626
TI
484/*
485 * power saving
486 */
7639a06c 487#define snd_hda_power_up(codec) snd_hdac_power_up(&(codec)->core)
664c7155 488#define snd_hda_power_up_pm(codec) snd_hdac_power_up_pm(&(codec)->core)
7639a06c 489#define snd_hda_power_down(codec) snd_hdac_power_down(&(codec)->core)
664c7155 490#define snd_hda_power_down_pm(codec) snd_hdac_power_down_pm(&(codec)->core)
83012a7c 491#ifdef CONFIG_PM
bb573928 492void snd_hda_set_power_save(struct hda_bus *bus, int delay);
a2f6309e 493void snd_hda_update_power_acct(struct hda_codec *codec);
cb53c626 494#else
bb573928 495static inline void snd_hda_set_power_save(struct hda_bus *bus, int delay) {}
cb53c626
TI
496#endif
497
4ea6fbc8
TI
498#ifdef CONFIG_SND_HDA_PATCH_LOADER
499/*
500 * patch firmware
501 */
4918cdab 502int snd_hda_load_patch(struct hda_bus *bus, size_t size, const void *buf);
4ea6fbc8
TI
503#endif
504
1d1a4564 505#ifdef CONFIG_SND_HDA_DSP_LOADER
0a50575b
TI
506int snd_hda_codec_load_dsp_prepare(struct hda_codec *codec, unsigned int format,
507 unsigned int size,
508 struct snd_dma_buffer *bufp);
509void snd_hda_codec_load_dsp_trigger(struct hda_codec *codec, bool start);
510void snd_hda_codec_load_dsp_cleanup(struct hda_codec *codec,
511 struct snd_dma_buffer *dmab);
1d1a4564
TI
512#else
513static inline int
514snd_hda_codec_load_dsp_prepare(struct hda_codec *codec, unsigned int format,
515 unsigned int size,
516 struct snd_dma_buffer *bufp)
517{
a3af4807 518 return -ENOSYS;
1d1a4564
TI
519}
520static inline void
521snd_hda_codec_load_dsp_trigger(struct hda_codec *codec, bool start) {}
522static inline void
523snd_hda_codec_load_dsp_cleanup(struct hda_codec *codec,
524 struct snd_dma_buffer *dmab) {}
525#endif
526
1da177e4 527#endif /* __SOUND_HDA_CODEC_H */
This page took 0.571718 seconds and 5 git commands to generate.