ASoC: add SND_SOC_BYTES_EXT
authorVinod Koul <vinod.koul@intel.com>
Fri, 2 May 2014 05:28:11 +0000 (10:58 +0530)
committerMark Brown <broonie@linaro.org>
Fri, 2 May 2014 20:44:24 +0000 (13:44 -0700)
we need _EXT version for SND_SOC_BYTES so that DSPs can use this to pass data
for DSP modules

Signed-off-by: Vinod Koul <vinod.koul@intel.com>
Signed-off-by: Mark Brown <broonie@linaro.org>
include/sound/soc.h
sound/soc/soc-core.c

index 192ddc40ae0aa3e7e93f2b514cfdc23bf71ce718..3da5f2328ff3da134aa06a3b3fc6849c62386d64 100644 (file)
                {.base = xbase, .num_regs = xregs,            \
                 .mask = xmask }) }
 
+#define SND_SOC_BYTES_EXT(xname, xcount, xhandler_get, xhandler_put) \
+{      .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \
+       .info = snd_soc_bytes_info_ext, \
+       .get = xhandler_get, .put = xhandler_put, \
+       .private_value = (unsigned long)&(struct soc_bytes_ext) \
+               {.max = xcount} }
+
 #define SOC_SINGLE_XR_SX(xname, xregbase, xregcount, xnbits, \
                xmin, xmax, xinvert) \
 {      .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname), \
@@ -534,6 +541,8 @@ int snd_soc_bytes_get(struct snd_kcontrol *kcontrol,
                      struct snd_ctl_elem_value *ucontrol);
 int snd_soc_bytes_put(struct snd_kcontrol *kcontrol,
                      struct snd_ctl_elem_value *ucontrol);
+int snd_soc_bytes_info_ext(struct snd_kcontrol *kcontrol,
+       struct snd_ctl_elem_info *ucontrol);
 int snd_soc_info_xr_sx(struct snd_kcontrol *kcontrol,
        struct snd_ctl_elem_info *uinfo);
 int snd_soc_get_xr_sx(struct snd_kcontrol *kcontrol,
@@ -1080,6 +1089,10 @@ struct soc_bytes {
        u32 mask;
 };
 
+struct soc_bytes_ext {
+       int max;
+};
+
 /* multi register control */
 struct soc_mreg_control {
        long min, max;
index 799cbe81fe39000caefe6db9c993701c0940a584..7fa3b4a04bd3678a63deb7442c7aac788229b020 100644 (file)
@@ -3107,6 +3107,18 @@ out:
 }
 EXPORT_SYMBOL_GPL(snd_soc_bytes_put);
 
+int snd_soc_bytes_info_ext(struct snd_kcontrol *kcontrol,
+                       struct snd_ctl_elem_info *ucontrol)
+{
+       struct soc_bytes_ext *params = (void *)kcontrol->private_value;
+
+       ucontrol->type = SNDRV_CTL_ELEM_TYPE_BYTES;
+       ucontrol->count = params->max;
+
+       return 0;
+}
+EXPORT_SYMBOL_GPL(snd_soc_bytes_info_ext);
+
 /**
  * snd_soc_info_xr_sx - signed multi register info callback
  * @kcontrol: mreg control