]> git.proxmox.com Git - mirror_ubuntu-hirsute-kernel.git/commitdiff
ASoC: tas2770: Set regcache when shutting down and waking device
authorDan Murphy <dmurphy@ti.com>
Wed, 23 Sep 2020 13:25:57 +0000 (08:25 -0500)
committerMark Brown <broonie@kernel.org>
Wed, 23 Sep 2020 17:48:01 +0000 (18:48 +0100)
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>
sound/soc/codecs/tas2770.c

index 9f7363927c50c82f8b1a18765b8b1bdb2b245a48..c42e653cd653cf2b25d42b016f228e4623f0620b 100644 (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