Hi Mark,
On Wed, Oct 16, 2024 at 10:23 PM Mark Brown <broonie@xxxxxxxxxx> wrote:
> > +static const struct regmap_config cs42l84_regmap = {
> > + .reg_bits = 16,
> > + .val_bits = 8,
> > +
> > + .volatile_reg = cs42l84_volatile_register,
> > +
> > + .max_register = 0xffff,
>
> Does that register actually exist?
It is likely that the highest register is the ID register, which would match
CS42L42. Setting that here does not break anything.
> > +static int cs42l84_mute_stream(struct snd_soc_dai *dai, int mute, int stream)
> > +{
> > + struct snd_soc_component *component = dai->component;
> > + struct cs42l84_private *cs42l84 = snd_soc_component_get_drvdata(component);
> > + unsigned int regval;
> > + int ret;
>
> > + ret = regmap_read_poll_timeout(cs42l84->regmap,
> > + CS42L84_PLL_LOCK_STATUS,
> > + regval,
> > + (regval & CS42L84_PLL_LOCK_STATUS_LOCKED),
> > + CS42L84_PLL_LOCK_POLL_US,
> > + CS42L84_PLL_LOCK_TIMEOUT_US);
> > + if (ret < 0)
> > + dev_warn(component->dev, "PLL failed to lock: %d\n", ret);
>
> This is too heavyweight for a mute operation, do you really need one?
Unfortunately it seems that way. This was carried over directly from CS42L42,
and as the comment in the function states, the internal power supply
will discharge
itself and crash the chip if the PLL is set up before any of the interfaces
are fully enabled. This is corroborrated by the CS42L42 datasheet. I've spent
some time today trying to work around this, but trying to sequence and enable
the PLL anywhere more sensible either causes the chip to crash or causes
audible clock jitter artefacts.
Regards,
James
[Index of Archives]
[Pulseaudio]
[Linux Audio Users]
[ALSA Devel]
[Fedora Desktop]
[Fedora SELinux]
[Big List of Linux Books]
[Yosemite News]
[KDE Users]