On Mon, May 15, 2023 at 08:40:19AM +0100, Aidan MacDonald wrote: > +++ b/sound/soc/codecs/ess-es9218p.c > @@ -0,0 +1,805 @@ > +// SPDX-License-Identifier: GPL-2.0-or-later > +/* > + * Copyright (c) 2022-2023 Aidan MacDonald > + */ Please make the entire comment a C++ one so things look more intentional. > +enum es9218p_supply_id { > + ES9218P_SUPPLY_AVDD, > + ES9218P_SUPPLY_VCCA, > + ES9218P_SUPPLY_AVCC3V3, > + ES9218P_SUPPLY_AVCC1V8, > + ES9218P_NUM_SUPPLIES > +}; > + > +static const char * const es9218p_supply_names[ES9218P_NUM_SUPPLIES] = { > + "avdd", > + "vcca", > + "avcc3v3", > + "avcc1v8", > +}; These could easily get out of sync, it would be better to explicitly assign the names to the slots identified by the constants [ES9218P_SUPPLY_VCCA] = "vcca", for example. > +static int es9218p_wide_write(struct regmap *regmap, unsigned int reg, > + int count, unsigned int value) > +{ > + u8 data[4]; > + int i; > + > + for (i = 0; i < count; i++) { > + data[i] = value & 0xff; > + value >>= 8; > + } This needs a bounds check to make sure we don't overflow data. > +static int outlevel_put(struct snd_kcontrol *kcontrol, > + struct snd_ctl_elem_value *ucontrol) > +{ > + struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol); > + struct es9218p_priv *priv = snd_soc_component_get_drvdata(component); > + > + priv->output_2v = ucontrol->value.enumerated.item[0]; > + es9218p_update_amp_mode(component); > + return 1; > +} Running the mixer-test selftest on a card with this driver will report that the driver generates spurious events when there is no change in value and doesn't validate input. Similar issues apply to the other enums.
Attachment:
signature.asc
Description: PGP signature