1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
27639a06cSTakashi Iwai /*
37639a06cSTakashi Iwai * Local helper macros and functions for HD-audio core drivers
47639a06cSTakashi Iwai */
57639a06cSTakashi Iwai
67639a06cSTakashi Iwai #ifndef __HDAC_LOCAL_H
77639a06cSTakashi Iwai #define __HDAC_LOCAL_H
87639a06cSTakashi Iwai
97639a06cSTakashi Iwai #define get_wcaps(codec, nid) \
107639a06cSTakashi Iwai snd_hdac_read_parm(codec, nid, AC_PAR_AUDIO_WIDGET_CAP)
117639a06cSTakashi Iwai
127639a06cSTakashi Iwai /* get the widget type from widget capability bits */
get_wcaps_type(unsigned int wcaps)137639a06cSTakashi Iwai static inline int get_wcaps_type(unsigned int wcaps)
147639a06cSTakashi Iwai {
157639a06cSTakashi Iwai if (!wcaps)
167639a06cSTakashi Iwai return -1; /* invalid type */
177639a06cSTakashi Iwai return (wcaps & AC_WCAP_TYPE) >> AC_WCAP_TYPE_SHIFT;
187639a06cSTakashi Iwai }
197639a06cSTakashi Iwai
get_wcaps_channels(u32 wcaps)209fc7c862SSubhransu S. Prusty static inline unsigned int get_wcaps_channels(u32 wcaps)
219fc7c862SSubhransu S. Prusty {
229fc7c862SSubhransu S. Prusty unsigned int chans;
239fc7c862SSubhransu S. Prusty
249fc7c862SSubhransu S. Prusty chans = (wcaps & AC_WCAP_CHAN_CNT_EXT) >> 13;
259fc7c862SSubhransu S. Prusty chans = (chans + 1) * 2;
269fc7c862SSubhransu S. Prusty
279fc7c862SSubhransu S. Prusty return chans;
289fc7c862SSubhransu S. Prusty }
299fc7c862SSubhransu S. Prusty
303256be65STakashi Iwai extern const struct attribute_group *hdac_dev_attr_groups[];
313256be65STakashi Iwai int hda_widget_sysfs_init(struct hdac_device *codec);
329780ded3STakashi Iwai int hda_widget_sysfs_reinit(struct hdac_device *codec, hda_nid_t start_nid,
339780ded3STakashi Iwai int num_nodes);
343256be65STakashi Iwai void hda_widget_sysfs_exit(struct hdac_device *codec);
353256be65STakashi Iwai
3653eff75eSTakashi Iwai int snd_hdac_bus_add_device(struct hdac_bus *bus, struct hdac_device *codec);
3753eff75eSTakashi Iwai void snd_hdac_bus_remove_device(struct hdac_bus *bus,
3853eff75eSTakashi Iwai struct hdac_device *codec);
39*b9f2d35fSTakashi Iwai void snd_hdac_bus_queue_event(struct hdac_bus *bus, u32 res, u32 res_ex);
40*b9f2d35fSTakashi Iwai int snd_hdac_bus_exec_verb(struct hdac_bus *bus, unsigned int addr,
41*b9f2d35fSTakashi Iwai unsigned int cmd, unsigned int *res);
4253eff75eSTakashi Iwai
43ddf7cb83STakashi Iwai int snd_hdac_exec_verb(struct hdac_device *codec, unsigned int cmd,
44ddf7cb83STakashi Iwai unsigned int flags, unsigned int *res);
45ddf7cb83STakashi Iwai
467639a06cSTakashi Iwai #endif /* __HDAC_LOCAL_H */
47