96421a3b32cd94d76771a7b2636be2662c4af712
[firefly-linux-kernel-4.4.55.git] / sound / pci / hda / hda_codec.h
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
24 #include <sound/info.h>
25 #include <sound/control.h>
26 #include <sound/pcm.h>
27 #include <sound/hwdep.h>
28 #include <sound/hda_verbs.h>
29
30 /*
31  * generic arrays
32  */
33 struct snd_array {
34         unsigned int used;
35         unsigned int alloced;
36         unsigned int elem_size;
37         unsigned int alloc_align;
38         void *list;
39 };
40
41 void *snd_array_new(struct snd_array *array);
42 void snd_array_free(struct snd_array *array);
43 static inline void snd_array_init(struct snd_array *array, unsigned int size,
44                                   unsigned int align)
45 {
46         array->elem_size = size;
47         array->alloc_align = align;
48 }
49
50 static inline void *snd_array_elem(struct snd_array *array, unsigned int idx)
51 {
52         return array->list + idx * array->elem_size;
53 }
54
55 static inline unsigned int snd_array_index(struct snd_array *array, void *ptr)
56 {
57         return (unsigned long)(ptr - array->list) / array->elem_size;
58 }
59
60 /*
61  * Structures
62  */
63
64 struct hda_bus;
65 struct hda_beep;
66 struct hda_codec;
67 struct hda_pcm;
68 struct hda_pcm_stream;
69
70 /* NID type */
71 typedef u16 hda_nid_t;
72
73 /* bus operators */
74 struct hda_bus_ops {
75         /* send a single command */
76         int (*command)(struct hda_bus *bus, unsigned int cmd);
77         /* get a response from the last command */
78         unsigned int (*get_response)(struct hda_bus *bus, unsigned int addr);
79         /* free the private data */
80         void (*private_free)(struct hda_bus *);
81         /* attach a PCM stream */
82         int (*attach_pcm)(struct hda_bus *bus, struct hda_codec *codec,
83                           struct hda_pcm *pcm);
84         /* reset bus for retry verb */
85         void (*bus_reset)(struct hda_bus *bus);
86 #ifdef CONFIG_PM
87         /* notify power-up/down from codec to controller */
88         void (*pm_notify)(struct hda_bus *bus, bool power_up);
89 #endif
90 #ifdef CONFIG_SND_HDA_DSP_LOADER
91         /* prepare DSP transfer */
92         int (*load_dsp_prepare)(struct hda_bus *bus, unsigned int format,
93                                 unsigned int byte_size,
94                                 struct snd_dma_buffer *bufp);
95         /* start/stop DSP transfer */
96         void (*load_dsp_trigger)(struct hda_bus *bus, bool start);
97         /* clean up DSP transfer */
98         void (*load_dsp_cleanup)(struct hda_bus *bus,
99                                  struct snd_dma_buffer *dmab);
100 #endif
101 };
102
103 /* unsolicited event handler */
104 #define HDA_UNSOL_QUEUE_SIZE    64
105 struct hda_bus_unsolicited {
106         /* ring buffer */
107         u32 queue[HDA_UNSOL_QUEUE_SIZE * 2];
108         unsigned int rp, wp;
109         /* workqueue */
110         struct work_struct work;
111 };
112
113 /*
114  * codec bus
115  *
116  * each controller needs to creata a hda_bus to assign the accessor.
117  * A hda_bus contains several codecs in the list codec_list.
118  */
119 struct hda_bus {
120         struct snd_card *card;
121
122         void *private_data;
123         struct pci_dev *pci;
124         const char *modelname;
125         int *power_save;
126         struct hda_bus_ops ops;
127
128         /* codec linked list */
129         struct list_head codec_list;
130         unsigned int num_codecs;
131         /* link caddr -> codec */
132         struct hda_codec *caddr_tbl[HDA_MAX_CODEC_ADDRESS + 1];
133
134         struct mutex cmd_mutex;
135         struct mutex prepare_mutex;
136
137         /* unsolicited event queue */
138         struct hda_bus_unsolicited unsol;
139         char workq_name[16];
140         struct workqueue_struct *workq; /* common workqueue for codecs */
141
142         /* assigned PCMs */
143         DECLARE_BITMAP(pcm_dev_bits, SNDRV_PCM_DEVICES);
144
145         /* misc op flags */
146         unsigned int needs_damn_long_delay :1;
147         unsigned int allow_bus_reset:1; /* allow bus reset at fatal error */
148         unsigned int sync_write:1;      /* sync after verb write */
149         /* status for codec/controller */
150         unsigned int shutdown :1;       /* being unloaded */
151         unsigned int rirb_error:1;      /* error in codec communication */
152         unsigned int response_reset:1;  /* controller was reset */
153         unsigned int in_reset:1;        /* during reset operation */
154         unsigned int power_keep_link_on:1; /* don't power off HDA link */
155         unsigned int no_response_fallback:1; /* don't fallback at RIRB error */
156
157         int primary_dig_out_type;       /* primary digital out PCM type */
158 };
159
160 /*
161  * codec preset
162  *
163  * Known codecs have the patch to build and set up the controls/PCMs
164  * better than the generic parser.
165  */
166 struct hda_codec_preset {
167         unsigned int id;
168         unsigned int mask;
169         unsigned int subs;
170         unsigned int subs_mask;
171         unsigned int rev;
172         hda_nid_t afg, mfg;
173         const char *name;
174         int (*patch)(struct hda_codec *codec);
175 };
176         
177 struct hda_codec_preset_list {
178         const struct hda_codec_preset *preset;
179         struct module *owner;
180         struct list_head list;
181 };
182
183 /* initial hook */
184 int snd_hda_add_codec_preset(struct hda_codec_preset_list *preset);
185 int snd_hda_delete_codec_preset(struct hda_codec_preset_list *preset);
186
187 /* ops set by the preset patch */
188 struct hda_codec_ops {
189         int (*build_controls)(struct hda_codec *codec);
190         int (*build_pcms)(struct hda_codec *codec);
191         int (*init)(struct hda_codec *codec);
192         void (*free)(struct hda_codec *codec);
193         void (*unsol_event)(struct hda_codec *codec, unsigned int res);
194         void (*set_power_state)(struct hda_codec *codec, hda_nid_t fg,
195                                 unsigned int power_state);
196 #ifdef CONFIG_PM
197         int (*suspend)(struct hda_codec *codec);
198         int (*resume)(struct hda_codec *codec);
199         int (*check_power_status)(struct hda_codec *codec, hda_nid_t nid);
200 #endif
201         void (*reboot_notify)(struct hda_codec *codec);
202 };
203
204 /* record for amp information cache */
205 struct hda_cache_head {
206         u32 key:31;             /* hash key */
207         u32 dirty:1;
208         u16 val;                /* assigned value */
209         u16 next;
210 };
211
212 struct hda_amp_info {
213         struct hda_cache_head head;
214         u32 amp_caps;           /* amp capabilities */
215         u16 vol[2];             /* current volume & mute */
216 };
217
218 struct hda_cache_rec {
219         u16 hash[64];                   /* hash table for index */
220         struct snd_array buf;           /* record entries */
221 };
222
223 /* PCM callbacks */
224 struct hda_pcm_ops {
225         int (*open)(struct hda_pcm_stream *info, struct hda_codec *codec,
226                     struct snd_pcm_substream *substream);
227         int (*close)(struct hda_pcm_stream *info, struct hda_codec *codec,
228                      struct snd_pcm_substream *substream);
229         int (*prepare)(struct hda_pcm_stream *info, struct hda_codec *codec,
230                        unsigned int stream_tag, unsigned int format,
231                        struct snd_pcm_substream *substream);
232         int (*cleanup)(struct hda_pcm_stream *info, struct hda_codec *codec,
233                        struct snd_pcm_substream *substream);
234         unsigned int (*get_delay)(struct hda_pcm_stream *info,
235                                   struct hda_codec *codec,
236                                   struct snd_pcm_substream *substream);
237 };
238
239 /* PCM information for each substream */
240 struct hda_pcm_stream {
241         unsigned int substreams;        /* number of substreams, 0 = not exist*/
242         unsigned int channels_min;      /* min. number of channels */
243         unsigned int channels_max;      /* max. number of channels */
244         hda_nid_t nid;  /* default NID to query rates/formats/bps, or set up */
245         u32 rates;      /* supported rates */
246         u64 formats;    /* supported formats (SNDRV_PCM_FMTBIT_) */
247         unsigned int maxbps;    /* supported max. bit per sample */
248         const struct snd_pcm_chmap_elem *chmap; /* chmap to override */
249         struct hda_pcm_ops ops;
250 };
251
252 /* PCM types */
253 enum {
254         HDA_PCM_TYPE_AUDIO,
255         HDA_PCM_TYPE_SPDIF,
256         HDA_PCM_TYPE_HDMI,
257         HDA_PCM_TYPE_MODEM,
258         HDA_PCM_NTYPES
259 };
260
261 /* for PCM creation */
262 struct hda_pcm {
263         char *name;
264         struct hda_pcm_stream stream[2];
265         unsigned int pcm_type;  /* HDA_PCM_TYPE_XXX */
266         int device;             /* device number to assign */
267         struct snd_pcm *pcm;    /* assigned PCM instance */
268         bool own_chmap;         /* codec driver provides own channel maps */
269 };
270
271 /* codec information */
272 struct hda_codec {
273         struct device dev;
274         struct hda_bus *bus;
275         unsigned int addr;      /* codec addr*/
276         struct list_head list;  /* list point */
277
278         hda_nid_t afg;  /* AFG node id */
279         hda_nid_t mfg;  /* MFG node id */
280
281         /* ids */
282         u8 afg_function_id;
283         u8 mfg_function_id;
284         u8 afg_unsol;
285         u8 mfg_unsol;
286         u32 vendor_id;
287         u32 subsystem_id;
288         u32 revision_id;
289
290         /* detected preset */
291         const struct hda_codec_preset *preset;
292         struct module *owner;
293         int (*parser)(struct hda_codec *codec);
294         const char *vendor_name;        /* codec vendor name */
295         const char *chip_name;          /* codec chip name */
296         const char *modelname;  /* model name for preset */
297
298         /* set by patch */
299         struct hda_codec_ops patch_ops;
300
301         /* PCM to create, set by patch_ops.build_pcms callback */
302         unsigned int num_pcms;
303         struct hda_pcm *pcm_info;
304
305         /* codec specific info */
306         void *spec;
307
308         /* beep device */
309         struct hda_beep *beep;
310         unsigned int beep_mode;
311
312         /* widget capabilities cache */
313         unsigned int num_nodes;
314         hda_nid_t start_nid;
315         u32 *wcaps;
316
317         struct snd_array mixers;        /* list of assigned mixer elements */
318         struct snd_array nids;          /* list of mapped mixer elements */
319
320         struct hda_cache_rec amp_cache; /* cache for amp access */
321         struct hda_cache_rec cmd_cache; /* cache for other commands */
322
323         struct list_head conn_list;     /* linked-list of connection-list */
324
325         struct mutex spdif_mutex;
326         struct mutex control_mutex;
327         struct mutex hash_mutex;
328         struct snd_array spdif_out;
329         unsigned int spdif_in_enable;   /* SPDIF input enable? */
330         const hda_nid_t *slave_dig_outs; /* optional digital out slave widgets */
331         struct snd_array init_pins;     /* initial (BIOS) pin configurations */
332         struct snd_array driver_pins;   /* pin configs set by codec parser */
333         struct snd_array cvt_setups;    /* audio convert setups */
334
335         struct mutex user_mutex;
336 #ifdef CONFIG_SND_HDA_RECONFIG
337         struct snd_array init_verbs;    /* additional init verbs */
338         struct snd_array hints;         /* additional hints */
339         struct snd_array user_pins;     /* default pin configs to override */
340 #endif
341
342 #ifdef CONFIG_SND_HDA_HWDEP
343         struct snd_hwdep *hwdep;        /* assigned hwdep device */
344 #endif
345
346         /* misc flags */
347         unsigned int spdif_status_reset :1; /* needs to toggle SPDIF for each
348                                              * status change
349                                              * (e.g. Realtek codecs)
350                                              */
351         unsigned int pin_amp_workaround:1; /* pin out-amp takes index
352                                             * (e.g. Conexant codecs)
353                                             */
354         unsigned int single_adc_amp:1; /* adc in-amp takes no index
355                                         * (e.g. CX20549 codec)
356                                         */
357         unsigned int no_sticky_stream:1; /* no sticky-PCM stream assignment */
358         unsigned int pins_shutup:1;     /* pins are shut up */
359         unsigned int no_trigger_sense:1; /* don't trigger at pin-sensing */
360         unsigned int no_jack_detect:1;  /* Machine has no jack-detection */
361         unsigned int inv_eapd:1; /* broken h/w: inverted EAPD control */
362         unsigned int inv_jack_detect:1; /* broken h/w: inverted detection bit */
363         unsigned int pcm_format_first:1; /* PCM format must be set first */
364         unsigned int epss:1;            /* supporting EPSS? */
365         unsigned int cached_write:1;    /* write only to caches */
366         unsigned int dp_mst:1; /* support DP1.2 Multi-stream transport */
367         unsigned int dump_coef:1; /* dump processing coefs in codec proc file */
368 #ifdef CONFIG_PM
369         unsigned int power_on :1;       /* current (global) power-state */
370         unsigned int d3_stop_clk:1;     /* support D3 operation without BCLK */
371         unsigned int pm_up_notified:1;  /* PM notified to controller */
372         unsigned int in_pm:1;           /* suspend/resume being performed */
373         int power_transition;   /* power-state in transition */
374         int power_count;        /* current (global) power refcount */
375         struct delayed_work power_work; /* delayed task for powerdown */
376         unsigned long power_on_acct;
377         unsigned long power_off_acct;
378         unsigned long power_jiffies;
379         spinlock_t power_lock;
380 #endif
381
382         /* filter the requested power state per nid */
383         unsigned int (*power_filter)(struct hda_codec *codec, hda_nid_t nid,
384                                      unsigned int power_state);
385
386         /* codec-specific additional proc output */
387         void (*proc_widget_hook)(struct snd_info_buffer *buffer,
388                                  struct hda_codec *codec, hda_nid_t nid);
389
390         /* jack detection */
391         struct snd_array jacktbl;
392         unsigned long jackpoll_interval; /* In jiffies. Zero means no poll, rely on unsol events */
393         struct delayed_work jackpoll_work;
394
395 #ifdef CONFIG_SND_HDA_INPUT_JACK
396         /* jack detection */
397         struct snd_array jacks;
398 #endif
399
400         int depop_delay; /* depop delay in ms, -1 for default delay time */
401
402         /* fix-up list */
403         int fixup_id;
404         const struct hda_fixup *fixup_list;
405         const char *fixup_name;
406
407         /* additional init verbs */
408         struct snd_array verbs;
409 };
410
411 /* direction */
412 enum {
413         HDA_INPUT, HDA_OUTPUT
414 };
415
416 /* snd_hda_codec_read/write optional flags */
417 #define HDA_RW_NO_RESPONSE_FALLBACK     (1 << 0)
418
419 /*
420  * constructors
421  */
422 int snd_hda_bus_new(struct snd_card *card, struct hda_bus **busp);
423 int snd_hda_codec_new(struct hda_bus *bus, unsigned int codec_addr,
424                       struct hda_codec **codecp);
425 int snd_hda_codec_configure(struct hda_codec *codec);
426 int snd_hda_codec_update_widgets(struct hda_codec *codec);
427
428 /*
429  * low level functions
430  */
431 unsigned int snd_hda_codec_read(struct hda_codec *codec, hda_nid_t nid,
432                                 int flags,
433                                 unsigned int verb, unsigned int parm);
434 int snd_hda_codec_write(struct hda_codec *codec, hda_nid_t nid, int flags,
435                         unsigned int verb, unsigned int parm);
436 #define snd_hda_param_read(codec, nid, param) \
437         snd_hda_codec_read(codec, nid, 0, AC_VERB_PARAMETERS, param)
438 int snd_hda_get_sub_nodes(struct hda_codec *codec, hda_nid_t nid,
439                           hda_nid_t *start_id);
440 int snd_hda_get_connections(struct hda_codec *codec, hda_nid_t nid,
441                             hda_nid_t *conn_list, int max_conns);
442 static inline int
443 snd_hda_get_num_conns(struct hda_codec *codec, hda_nid_t nid)
444 {
445         return snd_hda_get_connections(codec, nid, NULL, 0);
446 }
447 int snd_hda_get_num_raw_conns(struct hda_codec *codec, hda_nid_t nid);
448 int snd_hda_get_raw_connections(struct hda_codec *codec, hda_nid_t nid,
449                             hda_nid_t *conn_list, int max_conns);
450 int snd_hda_get_conn_list(struct hda_codec *codec, hda_nid_t nid,
451                           const hda_nid_t **listp);
452 int snd_hda_override_conn_list(struct hda_codec *codec, hda_nid_t nid, int nums,
453                           const hda_nid_t *list);
454 int snd_hda_get_conn_index(struct hda_codec *codec, hda_nid_t mux,
455                            hda_nid_t nid, int recursive);
456 int snd_hda_get_devices(struct hda_codec *codec, hda_nid_t nid,
457                         u8 *dev_list, int max_devices);
458 int snd_hda_query_supported_pcm(struct hda_codec *codec, hda_nid_t nid,
459                                 u32 *ratesp, u64 *formatsp, unsigned int *bpsp);
460
461 struct hda_verb {
462         hda_nid_t nid;
463         u32 verb;
464         u32 param;
465 };
466
467 void snd_hda_sequence_write(struct hda_codec *codec,
468                             const struct hda_verb *seq);
469
470 /* unsolicited event */
471 int snd_hda_queue_unsol_event(struct hda_bus *bus, u32 res, u32 res_ex);
472
473 /* cached write */
474 int snd_hda_codec_write_cache(struct hda_codec *codec, hda_nid_t nid,
475                               int flags, unsigned int verb, unsigned int parm);
476 void snd_hda_sequence_write_cache(struct hda_codec *codec,
477                                   const struct hda_verb *seq);
478 int snd_hda_codec_update_cache(struct hda_codec *codec, hda_nid_t nid,
479                               int flags, unsigned int verb, unsigned int parm);
480 void snd_hda_codec_resume_cache(struct hda_codec *codec);
481 /* both for cmd & amp caches */
482 void snd_hda_codec_flush_cache(struct hda_codec *codec);
483
484 /* the struct for codec->pin_configs */
485 struct hda_pincfg {
486         hda_nid_t nid;
487         unsigned char ctrl;     /* original pin control value */
488         unsigned char target;   /* target pin control value */
489         unsigned int cfg;       /* default configuration */
490 };
491
492 unsigned int snd_hda_codec_get_pincfg(struct hda_codec *codec, hda_nid_t nid);
493 int snd_hda_codec_set_pincfg(struct hda_codec *codec, hda_nid_t nid,
494                              unsigned int cfg);
495 int snd_hda_add_pincfg(struct hda_codec *codec, struct snd_array *list,
496                        hda_nid_t nid, unsigned int cfg); /* for hwdep */
497 void snd_hda_shutup_pins(struct hda_codec *codec);
498
499 /* SPDIF controls */
500 struct hda_spdif_out {
501         hda_nid_t nid;          /* Converter nid values relate to */
502         unsigned int status;    /* IEC958 status bits */
503         unsigned short ctls;    /* SPDIF control bits */
504 };
505 struct hda_spdif_out *snd_hda_spdif_out_of_nid(struct hda_codec *codec,
506                                                hda_nid_t nid);
507 void snd_hda_spdif_ctls_unassign(struct hda_codec *codec, int idx);
508 void snd_hda_spdif_ctls_assign(struct hda_codec *codec, int idx, hda_nid_t nid);
509
510 /*
511  * Mixer
512  */
513 int snd_hda_build_controls(struct hda_bus *bus);
514 int snd_hda_codec_build_controls(struct hda_codec *codec);
515
516 /*
517  * PCM
518  */
519 int snd_hda_build_pcms(struct hda_bus *bus);
520 int snd_hda_codec_build_pcms(struct hda_codec *codec);
521
522 int snd_hda_codec_prepare(struct hda_codec *codec,
523                           struct hda_pcm_stream *hinfo,
524                           unsigned int stream,
525                           unsigned int format,
526                           struct snd_pcm_substream *substream);
527 void snd_hda_codec_cleanup(struct hda_codec *codec,
528                            struct hda_pcm_stream *hinfo,
529                            struct snd_pcm_substream *substream);
530
531 void snd_hda_codec_setup_stream(struct hda_codec *codec, hda_nid_t nid,
532                                 u32 stream_tag,
533                                 int channel_id, int format);
534 void __snd_hda_codec_cleanup_stream(struct hda_codec *codec, hda_nid_t nid,
535                                     int do_now);
536 #define snd_hda_codec_cleanup_stream(codec, nid) \
537         __snd_hda_codec_cleanup_stream(codec, nid, 0)
538 unsigned int snd_hda_calc_stream_format(struct hda_codec *codec,
539                                         unsigned int rate,
540                                         unsigned int channels,
541                                         unsigned int format,
542                                         unsigned int maxbps,
543                                         unsigned short spdif_ctls);
544 int snd_hda_is_supported_format(struct hda_codec *codec, hda_nid_t nid,
545                                 unsigned int format);
546
547 extern const struct snd_pcm_chmap_elem snd_pcm_2_1_chmaps[];
548
549 /*
550  * Misc
551  */
552 void snd_hda_get_codec_name(struct hda_codec *codec, char *name, int namelen);
553 void snd_hda_bus_reboot_notify(struct hda_bus *bus);
554 void snd_hda_codec_set_power_to_all(struct hda_codec *codec, hda_nid_t fg,
555                                     unsigned int power_state);
556
557 int snd_hda_lock_devices(struct hda_bus *bus);
558 void snd_hda_unlock_devices(struct hda_bus *bus);
559
560 /*
561  * power management
562  */
563 #ifdef CONFIG_PM
564 int snd_hda_suspend(struct hda_bus *bus);
565 int snd_hda_resume(struct hda_bus *bus);
566 #endif
567
568 static inline
569 int hda_call_check_power_status(struct hda_codec *codec, hda_nid_t nid)
570 {
571 #ifdef CONFIG_PM
572         if (codec->patch_ops.check_power_status)
573                 return codec->patch_ops.check_power_status(codec, nid);
574 #endif
575         return 0;
576 }
577
578 /*
579  * get widget information
580  */
581 const char *snd_hda_get_jack_connectivity(u32 cfg);
582 const char *snd_hda_get_jack_type(u32 cfg);
583 const char *snd_hda_get_jack_location(u32 cfg);
584
585 /*
586  * power saving
587  */
588 #ifdef CONFIG_PM
589 void snd_hda_power_save(struct hda_codec *codec, int delta, bool d3wait);
590 void snd_hda_update_power_acct(struct hda_codec *codec);
591 #else
592 static inline void snd_hda_power_save(struct hda_codec *codec, int delta,
593                                       bool d3wait) {}
594 #endif
595
596 /**
597  * snd_hda_power_up - Power-up the codec
598  * @codec: HD-audio codec
599  *
600  * Increment the power-up counter and power up the hardware really when
601  * not turned on yet.
602  */
603 static inline void snd_hda_power_up(struct hda_codec *codec)
604 {
605         snd_hda_power_save(codec, 1, false);
606 }
607
608 /**
609  * snd_hda_power_up_d3wait - Power-up the codec after waiting for any pending
610  *   D3 transition to complete.  This differs from snd_hda_power_up() when
611  *   power_transition == -1.  snd_hda_power_up sees this case as a nop,
612  *   snd_hda_power_up_d3wait waits for the D3 transition to complete then powers
613  *   back up.
614  * @codec: HD-audio codec
615  *
616  * Cancel any power down operation hapenning on the work queue, then power up.
617  */
618 static inline void snd_hda_power_up_d3wait(struct hda_codec *codec)
619 {
620         snd_hda_power_save(codec, 1, true);
621 }
622
623 /**
624  * snd_hda_power_down - Power-down the codec
625  * @codec: HD-audio codec
626  *
627  * Decrement the power-up counter and schedules the power-off work if
628  * the counter rearches to zero.
629  */
630 static inline void snd_hda_power_down(struct hda_codec *codec)
631 {
632         snd_hda_power_save(codec, -1, false);
633 }
634
635 /**
636  * snd_hda_power_sync - Synchronize the power-save status
637  * @codec: HD-audio codec
638  *
639  * Synchronize the actual power state with the power account;
640  * called when power_save parameter is changed
641  */
642 static inline void snd_hda_power_sync(struct hda_codec *codec)
643 {
644         snd_hda_power_save(codec, 0, false);
645 }
646
647 #ifdef CONFIG_SND_HDA_PATCH_LOADER
648 /*
649  * patch firmware
650  */
651 int snd_hda_load_patch(struct hda_bus *bus, size_t size, const void *buf);
652 #endif
653
654 #ifdef CONFIG_SND_HDA_DSP_LOADER
655 static inline int
656 snd_hda_codec_load_dsp_prepare(struct hda_codec *codec, unsigned int format,
657                                 unsigned int size,
658                                 struct snd_dma_buffer *bufp)
659 {
660         return codec->bus->ops.load_dsp_prepare(codec->bus, format, size, bufp);
661 }
662 static inline void
663 snd_hda_codec_load_dsp_trigger(struct hda_codec *codec, bool start)
664 {
665         return codec->bus->ops.load_dsp_trigger(codec->bus, start);
666 }
667 static inline void
668 snd_hda_codec_load_dsp_cleanup(struct hda_codec *codec,
669                                 struct snd_dma_buffer *dmab)
670 {
671         return codec->bus->ops.load_dsp_cleanup(codec->bus, dmab);
672 }
673 #else
674 static inline int
675 snd_hda_codec_load_dsp_prepare(struct hda_codec *codec, unsigned int format,
676                                 unsigned int size,
677                                 struct snd_dma_buffer *bufp)
678 {
679         return -ENOSYS;
680 }
681 static inline void
682 snd_hda_codec_load_dsp_trigger(struct hda_codec *codec, bool start) {}
683 static inline void
684 snd_hda_codec_load_dsp_cleanup(struct hda_codec *codec,
685                                 struct snd_dma_buffer *dmab) {}
686 #endif
687
688 #endif /* __SOUND_HDA_CODEC_H */