Re: [PATCH] ASoC: tas2783-sdw: restore the volume controls after re-initialisation
From: Lee Mann
Date: Sun Oct 18 2026 - 06:41:17 EST
Hi Matt,
Thanks, that sounds like the better fix. A Reported-by is fine with me,
and please consider my patch superseded by your series.
One data point from the ProArt PX13 (two TAS2783 on one AMD ACP link):
with for-next plus my patch I didn't see the -16 errors at boot over
several boots, so this machine may not hit the idle runtime-suspend
path the way the X20 does. I'm happy to test your series here and send
a Tested-by.
Thanks,
Lee
On Sun, 18 Oct 2026 at 06:37, Matthew Schwartz
<matthew.schwartz@xxxxxxxxx> wrote:
>
> On 10/16/26 3:28 AM, Lee Mann wrote:
> > - return snd_soc_put_volsw(kcontrol, ucontrol);
> > + struct snd_soc_component *component = snd_kcontrol_chip(kcontrol);
> > + struct tas2783_prv *tas_dev = snd_soc_component_get_drvdata(component);
> > + s32 ret = snd_soc_put_volsw(kcontrol, ucontrol);
> > +
> > + if (ret >= 0)
> > + tas2783_save_vol(tas_dev, TAS2783_DVC_LVL,
> > + &tas_dev->user_dvc_lvl, &tas_dev->user_dvc_set);
>
>
> Hi Lee,
>
> I ran into the same bug bringing up the ASUS ROG Xbox Ally X20 (two
> TAS2783 on one AMD link), and there's one more case this doesn't cover.
>
> On for-next idle_bias_on is 0, so the amps runtime suspend whenever
> nothing is playing. The cache is dropped on attach and after the
> firmware download, so until something writes the volume registers
> again they aren't cached, and snd_soc_get_volsw()/put_volsw() fail with
> -EBUSY from regmap in cache-only mode while the amp is suspended. Your
> restore fixes that once a value has been set during playback, but at
> boot nothing has set it yet, so the first mixer accesses fail and every
> boot logs "ASoC error (-16)" for both registers. On the X20 the link
> is also powered off when idle, so the amps are re-initialized on every
> wake, not just after system suspend.
>
> I have a fix I was working on that addresses the same issue but keeps
> both values in the driver instead of the register cache, so get/put
> work while the amp is suspended and the values are programmed again
> after every init and resume. It's part of a small series with two
> other tas2783 fixes. I'll post it shortly with you on Cc with a
> Reported-by on the relevant patch if that's okay with you.
>
> Thanks,
> Matt