26 Aug
2020
26 Aug
'20
3:46 p.m.
On Wed, Aug 26, 2020 at 01:39:04PM +0200, Pavel Dobias wrote:
Changing filter type without disabling codec results in filter malfunction. Disable codec when changing filter type.
+static int max9867_filter_set(struct snd_kcontrol *kcontrol,
struct snd_ctl_elem_value *ucontrol)
+{
- struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol);
- struct max9867_priv *max9867 = snd_soc_component_get_drvdata(component);
- unsigned int mode = ucontrol->value.enumerated.item[0];
- if (mode > 1)
return -EINVAL;
- /* shutdown codec before switching filter mode */
- regmap_update_bits(max9867->regmap, MAX9867_PWRMAN,
MAX9867_PWRMAN_SHDN, 0);
This probably needs to return -EBUSY if the audio path is up - obviously shutting the CODEC down is going to glitch the audio pretty badly. It should probably also check to see if the value is actually being changed so we avoid a fairly expensive operation for noop changes.