[alsa-devel] [PATCH v9 2/2] ASoC: codecs: add wsa881x amplifier support
Srinivas Kandagatla
srinivas.kandagatla at linaro.org
Thu Dec 19 16:38:56 CET 2019
Thanks for the review,
On 19/12/2019 13:04, Mark Brown wrote:
> On Thu, Dec 19, 2019 at 10:03:28AM +0000, Srinivas Kandagatla wrote:
>
>> +#define WSA881X_PA_GAIN_TLV(xname, reg, shift, max, invert, tlv_array) \
>> +{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \
>> + .access = SNDRV_CTL_ELEM_ACCESS_TLV_READ |\
>> + SNDRV_CTL_ELEM_ACCESS_READWRITE,\
>> + .tlv.p = (tlv_array), \
>> + .info = snd_soc_info_volsw, .get = snd_soc_get_volsw,\
>> + .put = wsa881x_put_pa_gain, \
>> + .private_value = SOC_SINGLE_VALUE(reg, shift, max, invert, 0) }
>
> The get operation isn't going to work here...
>
I agree, I will add some error reporting if it fails to set the
requested volume.
>> +
>> +static struct reg_default wsa881x_defaults[] = {
>> + {WSA881X_CHIP_ID0, 0x00},
>
> Spaces around the { } please.
>
Also will fix such instances.
>> + unsigned int val = 0;
>> +
>> + regmap_read(rm, WSA881X_CHIP_ID1, &wsa881x->version);
>> + regmap_register_patch(wsa881x->regmap, wsa881x_rev_2_0,
>> + ARRAY_SIZE(wsa881x_rev_2_0));
>> + /* Enable software reset output from soundwire slave */
>> + regmap_update_bits(rm, WSA881X_SWR_RESET_EN, 0x07, 0x07);
>> + /* Bring out of analog reset */
>> + regmap_update_bits(rm, WSA881X_CDC_RST_CTL, 0x02, 0x02);
>> + /* Bring out of digital reset */
>> + regmap_update_bits(rm, WSA881X_CDC_RST_CTL, 0x01, 0x01);
>
> Please add some blank lines before the comments for legiblity.
Sure will fix all such instances in the code.
>
>> +static int wsa881x_put_pa_gain(struct snd_kcontrol *kc,
>> + struct snd_ctl_elem_value *ucontrol)
>> +{
>> + struct snd_soc_component *comp = snd_soc_kcontrol_component(kc);
>> + struct wsa881x_priv *wsa881x = snd_soc_component_get_drvdata(comp);
>> + struct soc_mixer_control *mc =
>> + (struct soc_mixer_control *)kc->private_value;
>> + int max = mc->max;
>> + unsigned int mask = (1 << fls(max)) - 1;
>> +
>> + /*
>> + * program actual register just before compander enable and ensure hw
>> + * sequence is followed
>> + */
>> + wsa881x->pa_gain = (max - ucontrol->value.integer.value[0]) & mask;
>> +
>> + return 0;
>> +}
>
> ...this doesn't actually write the value to the register map but we're
> using the standard get operation to read the value so the readback will
> not show the new value until it happens to get written out to the chip.
> This will also silently ignore volume updates until whatever event
> triggers the write, I'd expect at least an error if we can't do a write
> while the relevant part of the chip is active.
I will add some error prints in case it fails to program the requested
volume.
>
>> + usleep_range(1000, 1010);
>> + wsa881x_ramp_pa_gain(comp, min_gain, max_gain);
>
> The ramp function has exactly one user, may as well just inline it.
makes sense!
--srini
>
More information about the Alsa-devel
mailing list