[alsa-devel] [PATCH 2/3] ASoC: wm5102: Move driver to use SND_SOC_BYTES_TLV
Vinod Koul
vinod.koul at intel.com
Wed Nov 18 14:39:11 CET 2015
WM5102 driver was using SND_SOC_BYTES_EXT. Since we want to
remove this, convert it to use SND_SOC_BYTES_TLV
Signed-off-by: Vinod Koul <vinod.koul at intel.com>
Cc: Charles Keepax <ckeepax at opensource.wolfsonmicro.com>
Cc: patches at opensource.wolfsonmicro.com
---
sound/soc/codecs/wm5102.c | 35 ++++++++++++++++++++++++++---------
1 file changed, 26 insertions(+), 9 deletions(-)
diff --git a/sound/soc/codecs/wm5102.c b/sound/soc/codecs/wm5102.c
index 64637d1cf4e5..ac96e7e32fa7 100644
--- a/sound/soc/codecs/wm5102.c
+++ b/sound/soc/codecs/wm5102.c
@@ -657,33 +657,50 @@ static int wm5102_adsp_power_ev(struct snd_soc_dapm_widget *w,
return wm_adsp2_early_event(w, kcontrol, event);
}
+#define WM5102_OUT_COMP_SZ 2
+
static int wm5102_out_comp_coeff_get(struct snd_kcontrol *kcontrol,
- struct snd_ctl_elem_value *ucontrol)
+ unsigned int __user *data, unsigned int size)
{
struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol);
struct arizona *arizona = dev_get_drvdata(codec->dev->parent);
+ u16 buff;
+ int ret = 0;
+
+ if (size > WM5102_OUT_COMP_SZ)
+ return -EINVAL;
mutex_lock(&arizona->dac_comp_lock);
- put_unaligned_be16(arizona->dac_comp_coeff,
- ucontrol->value.bytes.data);
+ put_unaligned_be16(arizona->dac_comp_coeff, &buff);
+ if (copy_to_user(data, &buff, sizeof(buff)))
+ ret = -EFAULT;
+
mutex_unlock(&arizona->dac_comp_lock);
- return 0;
+ return ret;
}
static int wm5102_out_comp_coeff_put(struct snd_kcontrol *kcontrol,
- struct snd_ctl_elem_value *ucontrol)
+ const unsigned int __user *data, unsigned int size)
{
struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol);
struct arizona *arizona = dev_get_drvdata(codec->dev->parent);
+ int ret = 0;
+
+ if (size > WM5102_OUT_COMP_SZ)
+ return -EINVAL;
mutex_lock(&arizona->dac_comp_lock);
- memcpy(&arizona->dac_comp_coeff, ucontrol->value.bytes.data,
- sizeof(arizona->dac_comp_coeff));
+ if (copy_from_user(&arizona->dac_comp_coeff, data, size)) {
+ ret = -EFAULT;
+ goto exit;
+ }
arizona->dac_comp_coeff = be16_to_cpu(arizona->dac_comp_coeff);
+
+exit:
mutex_unlock(&arizona->dac_comp_lock);
- return 0;
+ return ret;
}
static int wm5102_out_comp_switch_get(struct snd_kcontrol *kcontrol,
@@ -939,7 +956,7 @@ SOC_SINGLE_TLV("Noise Gate Threshold Volume", ARIZONA_NOISE_GATE_CONTROL,
ARIZONA_NGATE_THR_SHIFT, 7, 1, ng_tlv),
SOC_ENUM("Noise Gate Hold", arizona_ng_hold),
-SND_SOC_BYTES_EXT("Output Compensation Coefficient", 2,
+SND_SOC_BYTES_TLV("Output Compensation Coefficient", WM5102_OUT_COMP_SZ,
wm5102_out_comp_coeff_get, wm5102_out_comp_coeff_put),
SOC_SINGLE_EXT("Output Compensation Switch", 0, 0, 1, 0,
--
1.9.1
More information about the Alsa-devel
mailing list