1 | /* SPDX-License-Identifier: GPL-2.0 */ |
2 | /* |
3 | * Local helper macros and functions for HD-audio core drivers |
4 | */ |
5 | |
6 | #ifndef __HDAC_LOCAL_H |
7 | #define __HDAC_LOCAL_H |
8 | |
9 | #define get_wcaps(codec, nid) \ |
10 | snd_hdac_read_parm(codec, nid, AC_PAR_AUDIO_WIDGET_CAP) |
11 | |
12 | /* get the widget type from widget capability bits */ |
13 | static inline int get_wcaps_type(unsigned int wcaps) |
14 | { |
15 | if (!wcaps) |
16 | return -1; /* invalid type */ |
17 | return (wcaps & AC_WCAP_TYPE) >> AC_WCAP_TYPE_SHIFT; |
18 | } |
19 | |
20 | static inline unsigned int get_wcaps_channels(u32 wcaps) |
21 | { |
22 | unsigned int chans; |
23 | |
24 | chans = (wcaps & AC_WCAP_CHAN_CNT_EXT) >> 13; |
25 | chans = (chans + 1) * 2; |
26 | |
27 | return chans; |
28 | } |
29 | |
30 | extern const struct attribute_group *hdac_dev_attr_groups[]; |
31 | int hda_widget_sysfs_init(struct hdac_device *codec); |
32 | int hda_widget_sysfs_reinit(struct hdac_device *codec, hda_nid_t start_nid, |
33 | int num_nodes); |
34 | void hda_widget_sysfs_exit(struct hdac_device *codec); |
35 | |
36 | int snd_hdac_bus_add_device(struct hdac_bus *bus, struct hdac_device *codec); |
37 | void snd_hdac_bus_remove_device(struct hdac_bus *bus, |
38 | struct hdac_device *codec); |
39 | void snd_hdac_bus_queue_event(struct hdac_bus *bus, u32 res, u32 res_ex); |
40 | int snd_hdac_bus_exec_verb(struct hdac_bus *bus, unsigned int addr, |
41 | unsigned int cmd, unsigned int *res); |
42 | |
43 | int snd_hdac_exec_verb(struct hdac_device *codec, unsigned int cmd, |
44 | unsigned int flags, unsigned int *res); |
45 | |
46 | #endif /* __HDAC_LOCAL_H */ |
47 | |