[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <47097f19398808b64f4cc87c2a3c7cc462fb2416.camel@irl.hu>
Date: Thu, 07 Dec 2023 21:19:34 +0100
From: Gergo Koteles <soyer@....hu>
To: Mark Brown <broonie@...nel.org>
Cc: Shenghao Ding <shenghao-ding@...com>, Kevin Lu <kevin-lu@...com>,
Baojun Xu <baojun.xu@...com>, Jaroslav Kysela <perex@...ex.cz>,
Takashi Iwai <tiwai@...e.com>,
Liam Girdwood <lgirdwood@...il.com>,
linux-kernel@...r.kernel.org, alsa-devel@...a-project.org
Subject: Re: [PATCH 03/16] ASoC: tas2781: disable regmap regcache
On Thu, 2023-12-07 at 18:20 +0000, Mark Brown wrote:
> On Thu, Dec 07, 2023 at 12:59:44AM +0100, Gergo Koteles wrote:
>
> > The amp has 3 level addressing (BOOK, PAGE, REG).
> > The regcache couldn't handle it.
>
> So the books aren't currently used so the driver actually works?
>
It writes to the book 0 and 8c. The initialization works with regcache,
because it writes also the i2c devices.
> > static int tas2781_system_suspend(struct device *dev)
> > @@ -770,10 +758,7 @@ static int tas2781_system_suspend(struct device *dev)
> > return ret;
> >
> > /* Shutdown chip before system suspend */
> > - regcache_cache_only(tas_priv->regmap, false);
> > tasdevice_tuning_switch(tas_priv, 1);
> > - regcache_cache_only(tas_priv->regmap, true);
> > - regcache_mark_dirty(tas_priv->regmap);
> >
> > /*
> > * Reset GPIO may be shared, so cannot reset here.
>
> How can this work over system suspend? This just removes the cache with
> no replacement so if the device looses power over suspend (which seems
> likely) then all the register state will be lost. A similar issue may
> potentially exist over runtime suspend on an ACPI system with
> sufficiently heavily optimised power management.
In runtime_resume, only one of the two amplifiers goes back.
The runtime_suspend sets the current book/prog/conf to -1 on all
devices, and tas2781_hda_playback_hook will restore the
program/configuration/profile with tasdevice_tuning_switch.
And only one, because tasdevice_change_chn_book directly changes the
address of i2c_client, so the unlucky one gets invalid values in its
actual book from regcache_sync.
system_restore doesn't work at all, because regcache_cache_only stays
true since system_suspend.
It works without the regcache functions.
Powered by blists - more mailing lists