|
@@ -47,6 +47,13 @@
|
|
|
.info = snd_soc_info_volsw, .get = snd_soc_get_volsw,\
|
|
|
.put = snd_soc_put_volsw, \
|
|
|
.private_value = SOC_SINGLE_VALUE(reg, shift, max, invert) }
|
|
|
+#define SOC_SINGLE_RANGE(xname, xreg, xshift, xmin, xmax, xinvert) \
|
|
|
+{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname),\
|
|
|
+ .info = snd_soc_info_volsw_range, .get = snd_soc_get_volsw_range, \
|
|
|
+ .put = snd_soc_put_volsw_range, \
|
|
|
+ .private_value = (unsigned long)&(struct soc_mixer_control) \
|
|
|
+ {.reg = xreg, .shift = xshift, .min = xmin,\
|
|
|
+ .max = xmax, .platform_max = xmax, .invert = xinvert} }
|
|
|
#define SOC_SINGLE_TLV(xname, reg, shift, max, invert, tlv_array) \
|
|
|
{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \
|
|
|
.access = SNDRV_CTL_ELEM_ACCESS_TLV_READ |\
|
|
@@ -67,6 +74,16 @@
|
|
|
{.reg = xreg, .rreg = xreg, \
|
|
|
.shift = xshift, .rshift = xshift, \
|
|
|
.max = xmax, .min = xmin} }
|
|
|
+#define SOC_SINGLE_RANGE_TLV(xname, xreg, xshift, xmin, xmax, xinvert, tlv_array) \
|
|
|
+{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname),\
|
|
|
+ .access = SNDRV_CTL_ELEM_ACCESS_TLV_READ |\
|
|
|
+ SNDRV_CTL_ELEM_ACCESS_READWRITE,\
|
|
|
+ .tlv.p = (tlv_array), \
|
|
|
+ .info = snd_soc_info_volsw_range, \
|
|
|
+ .get = snd_soc_get_volsw_range, .put = snd_soc_put_volsw_range, \
|
|
|
+ .private_value = (unsigned long)&(struct soc_mixer_control) \
|
|
|
+ {.reg = xreg, .shift = xshift, .min = xmin,\
|
|
|
+ .max = xmax, .platform_max = xmax, .invert = xinvert} }
|
|
|
#define SOC_DOUBLE(xname, reg, shift_left, shift_right, max, invert) \
|
|
|
{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname),\
|
|
|
.info = snd_soc_info_volsw, .get = snd_soc_get_volsw, \
|
|
@@ -460,6 +477,12 @@ int snd_soc_get_volsw_s8(struct snd_kcontrol *kcontrol,
|
|
|
struct snd_ctl_elem_value *ucontrol);
|
|
|
int snd_soc_put_volsw_s8(struct snd_kcontrol *kcontrol,
|
|
|
struct snd_ctl_elem_value *ucontrol);
|
|
|
+int snd_soc_info_volsw_range(struct snd_kcontrol *kcontrol,
|
|
|
+ struct snd_ctl_elem_info *uinfo);
|
|
|
+int snd_soc_put_volsw_range(struct snd_kcontrol *kcontrol,
|
|
|
+ struct snd_ctl_elem_value *ucontrol);
|
|
|
+int snd_soc_get_volsw_range(struct snd_kcontrol *kcontrol,
|
|
|
+ struct snd_ctl_elem_value *ucontrol);
|
|
|
int snd_soc_limit_volume(struct snd_soc_codec *codec,
|
|
|
const char *name, int max);
|
|
|
int snd_soc_bytes_info(struct snd_kcontrol *kcontrol,
|