Re: [RFC] regmap: allow volatile register writes with cached only read maps

From: Jorge Ramirez-Ortiz
Date: Fri May 11 2018 - 06:29:52 EST


On 05/11/2018 04:00 AM, Mark Brown wrote:
On Wed, May 09, 2018 at 01:49:21PM +0200, Jorge Ramirez-Ortiz wrote:
On 05/09/2018 10:39 AM, Mark Brown wrote:
I don't understand what voltile access means for write only devices.
Volatile means that we don't read the cache but go direct to the
hardware so if we can't read the hardware that's pretty redundant, a
volatile read that goes to the cache is just a default read.
1. only cached reads: (as a consequence every regmap write must succeed).
2. cached writes: do not access the hardware unless the value differs from
what is in the cache already or (3) applies.
3. support for selectable volatile writes: those that will always access the
device no matter what the cache holds.
We don't currently suppress writes except when regmap_update_bits()
notices that the modification was a noop. You probably want to be using
regmap_write_bits() here instead of regmap_update_bits(), that will
always do the write.

but isnt that interface at a different level?
I am not sure if you are asking me to review my patch or just discarding the RFC and highlighting that I have a configuration problem.

In my use case and what triggered this RFC (config below), an 'amixer set' might never reach the driver's .reg_write interface even though the register is configured as volatile (to me this is not consistent since volatile_reg is being silently ignored).

So I dont see where/how your recommendation fits; maybe you could clarify a bit more please?

static const struct regmap_config foo_regmap = {
    .reg_write           = foo_write_reg,

    .reg_bits            = 32,
    .val_bits            = 32,
    .reg_stride          = 1,

    .volatile_reg        = foo_volatile_reg,

    .max_register        = CODEC_ENABLE_DEBUG_CTRL_REG,
    .reg_defaults        = foo_reg_defaults,
    .num_reg_defaults    = ARRAY_SIZE(foo_reg_defaults),
    .cache_type          = REGCACHE_RBTREE,
};