Hi
On 10/06/2015 08:01 PM, Mark Brown wrote:
On Tue, Oct 06, 2015 at 04:06:55PM +0900, Jiada Wang wrote:
As ALC2 register is volatile, declare it as one of ALC Coefficients register together with other non-volatile registers will cause issue, in case wm8962 has enter suspend mode, and cache_only flag is set, any attempt to read from ALC2 will fail.
Instead of declaring one ALC Coefficients register which contains ALC1 ~ ALC3 and Noise Gate, this patch declares 4 separate registers, so that regmap can handle these registers differently based on their classification.
I don't understand this commit log. Why does regmap care how these registers are presented to userspace, and how does splitting the controls up address the problem with one of the registers being volatile? Surely that register still has the same problem?
.get callback function will call regmap_raw_read() to read register value from these registers, when these 4 regsters are declared as one "ALC coefficient" register, condition check of regmap_volatile_range() will return false, thus regmap will go word by word for the cache from each register of "ALC Coefficient", the failure scenario is, when wm8962 is in suspend mode (cache_only flag is set), as ALC2 doesn't have cached value, then any attempt to read from it fails,
By splitting these registers, regmap can handle ALC2 as a single volatile register, and always read from HW
Thanks, Jiada