ASoC: tas2770: Set regcache when shutting down and waking device

Set the regcache to cache data and mark cache as dirty when the device
is shutdown when suspend is called. When the device is woken up then
sync the cache and set to not caching the data.

Signed-off-by: Dan Murphy <dmurphy@ti.com>
Link: https://lore.kernel.org/r/20200923132600.10652-3-dmurphy@ti.com
Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
Dan Murphy 2020-09-23 08:25:57 -05:00 committed by Mark Brown
parent 5d0b9dfe0d
commit c0a30e2e07
No known key found for this signature in database
GPG Key ID: 24D68B725D5487D0

View File

@ -82,14 +82,20 @@ static int tas2770_codec_suspend(struct snd_soc_component *component)
struct tas2770_priv *tas2770 = snd_soc_component_get_drvdata(component);
int ret = 0;
regcache_cache_only(tas2770->regmap, true);
regcache_mark_dirty(tas2770->regmap);
if (tas2770->sdz_gpio) {
gpiod_set_value_cansleep(tas2770->sdz_gpio, 0);
} else {
ret = snd_soc_component_update_bits(component, TAS2770_PWR_CTRL,
TAS2770_PWR_CTRL_MASK,
TAS2770_PWR_CTRL_SHUTDOWN);
if (ret < 0)
if (ret < 0) {
regcache_cache_only(tas2770->regmap, false);
regcache_sync(tas2770->regmap);
return ret;
}
ret = 0;
}
@ -110,11 +116,11 @@ static int tas2770_codec_resume(struct snd_soc_component *component)
TAS2770_PWR_CTRL_ACTIVE);
if (ret < 0)
return ret;
ret = 0;
}
return ret;
regcache_cache_only(tas2770->regmap, false);
return regcache_sync(tas2770->regmap);
}
#else
#define tas2770_codec_suspend NULL