On 08/26/2014 08:28 AM, Mark Brown wrote:
On Tue, Aug 26, 2014 at 02:11:20PM +0800, Scott Jiang wrote:
2014-08-22 17:47 GMT+08:00 Lars-Peter Clausen lars@metafoo.de:
ASoC: ssm2602: Fix cache sync
The ssm2602 uses regmap for caching not soc-cache, so we need to use regcache_sync() instead of snd_soc_cache_sync().
According my test, regcache_sync() can't recover register values when resume. While snd_soc_cache_sync() works fine. I used regmap_read() to read registers in regmap layer and found it's the same as suspend. But regcache_sync() didn't sync these registers correctly to hardware.
That does not make too much sense. snd_soc_cache_sync() is definitely a no-op when using regmap. Which kernel version are you on? Are there any additional changes to this driver in your tree?
If it is the above patch is the problem perhaps that the register map isn't getting marked as dirty so the cache sync is being suppressed?
The core should mark it as dirty after calling the suspend callback. But there might be bugs preventing this. Try to make sure that regmap_mark_dirty() gets called for this device and also try to check what goes wrong in regcache_sync() and why it does not sync the registers.
- Lars