aboutsummaryrefslogtreecommitdiff
path: root/drivers/base/regmap/internal.h
diff options
context:
space:
mode:
authorMarc Reilly <marc@cpdesign.com.au>2012-03-16 12:11:43 +1100
committerMark Brown <broonie@opensource.wolfsonmicro.com>2012-04-01 11:55:20 +0100
commitd939fb9a78b4743bc4bc3cc415894ed42050c5cc (patch)
tree74980bd7c634676da11abb41f87447b50d3a4163 /drivers/base/regmap/internal.h
parentea279fc5619e2541a0c28196b0fa06447d9ad026 (diff)
regmap: Use pad_bits and reg_bits when determining register format.
This change combines any padding bits into the register address bits when determining register format handlers to use the next byte-divisible register size. A reg_shift member is introduced to the regmap struct to enable fixup of the reg format. Format handlers now take an extra parameter specifying the number of bits to shift the value by. Signed-off-by: Marc Reilly <marc@cpdesign.com.au> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Diffstat (limited to 'drivers/base/regmap/internal.h')
-rw-r--r--drivers/base/regmap/internal.h7
1 files changed, 5 insertions, 2 deletions
diff --git a/drivers/base/regmap/internal.h b/drivers/base/regmap/internal.h
index fcafc5b2e65..606b83d7545 100644
--- a/drivers/base/regmap/internal.h
+++ b/drivers/base/regmap/internal.h
@@ -26,8 +26,8 @@ struct regmap_format {
size_t val_bytes;
void (*format_write)(struct regmap *map,
unsigned int reg, unsigned int val);
- void (*format_reg)(void *buf, unsigned int reg);
- void (*format_val)(void *buf, unsigned int val);
+ void (*format_reg)(void *buf, unsigned int reg, unsigned int shift);
+ void (*format_val)(void *buf, unsigned int val, unsigned int shift);
unsigned int (*parse_val)(void *buf);
};
@@ -52,6 +52,9 @@ struct regmap {
u8 read_flag_mask;
u8 write_flag_mask;
+ /* number of bits to (left) shift the reg value when formatting*/
+ int reg_shift;
+
/* regcache specific members */
const struct regcache_ops *cache_ops;
enum regcache_type cache_type;