On 11/16/2013 03:02 AM, Mark Brown wrote:
On Fri, Nov 15, 2013 at 01:54:12PM -0700, Stephen Warren wrote:
From: Stephen Warren swarren@nvidia.com
Call pm_runtime_get_sync() before all register accesses; the HW requires clocks to be running when accessing registers.
This hasn't been needed to date, since all register IO was performed while playback was active, and hence the ASoC core had already called pm_runtime_get(). However, an imminent future commit will allocate and set up the FIFOs and routing during probe(), when that "protection" won't be in place.
Acked-by: Mark Brown broonie@linaro.org
However should we fix this at the regmap level in the same way that we do for clocks? That would need to be using _put_autosuspend() to avoid being horrific.
I did wonder about that, but it seemed like rather a lot of overhead?
Or alternatively should the driver be making the device cache only when runtime PM is disabled?
The regmap is already cache-only when runtime-suspended. However the registers don't get flushed during resume. I suppose that would require only adding one extra call to the PM resume function?
For some reason, my gut prefers this current solution, but I could be persuaded.