ASoC: arizona: Implement stability check for LHPF coefficients
Specifying unstable coefficients for the low/high pass filters can have a severe impact on the audio. This patchs adds a stability check on the coefficients written to the low/high pass filter block to prevent this. Signed-off-by: Charles Keepax <ckeepax@opensource.wolfsonmicro.com> Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:

committed by
Mark Brown

parent
c05d9a8c7f
commit
5f8e671a49
@@ -2372,6 +2372,23 @@ out:
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(arizona_eq_coeff_put);
|
||||
|
||||
int arizona_lhpf_coeff_put(struct snd_kcontrol *kcontrol,
|
||||
struct snd_ctl_elem_value *ucontrol)
|
||||
{
|
||||
struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol);
|
||||
struct arizona *arizona = dev_get_drvdata(codec->dev->parent);
|
||||
__be16 *data = (__be16 *)ucontrol->value.bytes.data;
|
||||
s16 val = be16_to_cpu(*data);
|
||||
|
||||
if (abs(val) >= 4096) {
|
||||
dev_err(arizona->dev, "Rejecting unstable LHPF coefficients\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
return snd_soc_bytes_put(kcontrol, ucontrol);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(arizona_lhpf_coeff_put);
|
||||
|
||||
MODULE_DESCRIPTION("ASoC Wolfson Arizona class device support");
|
||||
MODULE_AUTHOR("Mark Brown <broonie@opensource.wolfsonmicro.com>");
|
||||
MODULE_LICENSE("GPL");
|
||||
|
Reference in New Issue
Block a user