📄 wm8782-mixer.h
字号:
/*
* wm8782-mixer.h
*
*
*/
#ifndef __WM8782_MIXER__
#define __WM8782_MIXER__
/* enumerated kcontrol */
struct snd_wm8782_enum {
unsigned short reg;
unsigned short reg2;
unsigned char shift_l;
unsigned char shift_r;
unsigned int mask;
const char **texts;
void *dapm;
};
/*
* Convenience kcontrol builders
*/
#define SOC_SINGLE_VALUE(reg,shift,mask,invert) ((reg) | ((shift) << 8) |\
((shift) << 12) | ((mask) << 16) | ((invert) << 24))
#define SOC_SINGLE_VALUE_EXT(reg,mask,invert) ((reg) | ((mask) << 16) |\
((invert) << 31))
#define SOC_SINGLE(xname, reg, shift, mask, invert) \
{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \
.info = snd_wm8782_info_volsw, .get = snd_wm8782_get_volsw,\
.put = snd_wm8782_put_volsw, \
.private_value = SOC_SINGLE_VALUE(reg, shift, mask, invert) }
#define SOC_DOUBLE(xname, reg, shift_left, shift_right, mask, invert) \
{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname),\
.info = snd_wm8782_info_volsw, .get = snd_wm8782_get_volsw, \
.put = snd_wm8782_put_volsw, \
.private_value = (reg) | ((shift_left) << 8) | \
((shift_right) << 12) | ((mask) << 16) | ((invert) << 24) }
#define SOC_DOUBLE_R(xname, reg_left, reg_right, shift, mask, invert) \
{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname), \
.info = snd_wm8782_info_volsw_2r, \
.get = snd_wm8782_get_volsw_2r, .put = snd_wm8782_put_volsw_2r, \
.private_value = (reg_left) | ((shift) << 8) | \
((mask) << 12) | ((invert) << 20) | ((reg_right) << 24) }
#define SOC_ENUM_DOUBLE(xreg, xshift_l, xshift_r, xmask, xtexts) \
{ .reg = xreg, .shift_l = xshift_l, .shift_r = xshift_r, \
.mask = xmask, .texts = xtexts }
#define SOC_ENUM_SINGLE(xreg, xshift, xmask, xtexts) \
SOC_ENUM_DOUBLE(xreg, xshift, xshift, xmask, xtexts)
#define SOC_ENUM_SINGLE_EXT(xmask, xtexts) \
{ .mask = xmask, .texts = xtexts }
#define SOC_ENUM(xname, xenum) \
{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname,\
.info = snd_wm8782_info_enum_double, \
.get = snd_wm8782_get_enum_double, .put = snd_wm8782_put_enum_double, \
.private_value = (unsigned long)&xenum }
#if 0
#define SOC_SINGLE_EXT(xname, xreg, xmask, xinvert,\
xhandler_get, xhandler_put) \
{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \
.info = snd_soc_info_volsw_ext, \
.get = xhandler_get, .put = xhandler_put, \
.private_value = SOC_SINGLE_VALUE_EXT(xreg, xmask, xinvert) }
#define SOC_SINGLE_BOOL_EXT(xname, xdata, xhandler_get, xhandler_put) \
{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \
.info = snd_soc_info_bool_ext, \
.get = xhandler_get, .put = xhandler_put, \
.private_value = xdata }
#define SOC_ENUM_EXT(xname, xenum, xhandler_get, xhandler_put) \
{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \
.info = snd_soc_info_enum_ext, \
.get = xhandler_get, .put = xhandler_put, \
.private_value = (unsigned long)&xenum }
#endif
//int snd_wm8782_update_bits(unsigned short reg,unsigned short mask, unsigned short value);
int snd_wm8782_info_volsw(struct snd_kcontrol *kcontrol,struct snd_ctl_elem_info *uinfo);
int snd_wm8782_get_volsw(struct snd_kcontrol *kcontrol,struct snd_ctl_elem_value *ucontrol);
int snd_wm8782_put_volsw(struct snd_kcontrol *kcontrol,struct snd_ctl_elem_value *ucontrol);
int snd_wm8782_info_volsw_2r(struct snd_kcontrol *kcontrol,struct snd_ctl_elem_info *uinfo);
int snd_wm8782_get_volsw_2r(struct snd_kcontrol *kcontrol,struct snd_ctl_elem_value *ucontrol);
int snd_wm8782_put_volsw_2r(struct snd_kcontrol *kcontrol,struct snd_ctl_elem_value *ucontrol);
int snd_wm8782_info_enum_double(struct snd_kcontrol *kcontrol,struct snd_ctl_elem_info *uinfo);
int snd_wm8782_get_enum_double(struct snd_kcontrol *kcontrol,struct snd_ctl_elem_value *ucontrol);
int snd_wm8782_put_enum_double(struct snd_kcontrol *kcontrol,struct snd_ctl_elem_value *ucontrol);
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -