diff options
author | Mark Brown <broonie@opensource.wolfsonmicro.com> | 2011-09-09 11:11:24 -0700 |
---|---|---|
committer | Mark Brown <broonie@opensource.wolfsonmicro.com> | 2011-09-09 11:11:24 -0700 |
commit | 4ae7335dae2d9378a594bdb0845c55f370516864 (patch) | |
tree | 2e7f26595d0ed7f9f9c3601c028fed0cbe2d9ec6 /include | |
parent | 694741471b8df3734e01ecae7650be60ec111c2c (diff) | |
parent | 069af897f9a3f70248d4a7ba3d3d439f7cd66d92 (diff) |
Merge branch 'topic/interface' of git://opensource.wolfsonmicro.com/regmap into for-3.2
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/regmap.h | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/include/linux/regmap.h b/include/linux/regmap.h index 60a65cd7e1a..003c05349ae 100644 --- a/include/linux/regmap.h +++ b/include/linux/regmap.h @@ -20,9 +20,61 @@ struct i2c_client; struct spi_device; +/** + * Default value for a register. We use an array of structs rather + * than a simple array as many modern devices have very sparse + * register maps. + * + * @reg: Register address. + * @def: Register default value. + */ +struct reg_default { + unsigned int reg; + unsigned int def; +}; + +/** + * Configuration for the register map of a device. + * + * @reg_bits: Number of bits in a register address, mandatory. + * @val_bits: Number of bits in a register value, mandatory. + * + * @writeable_reg: Optional callback returning true if the register + * can be written to. + * @readable_reg: Optional callback returning true if the register + * can be read from. + * @volatile_reg: Optional callback returning true if the register + * value can't be cached. + * @precious_reg: Optional callback returning true if the rgister + * should not be read outside of a call from the driver + * (eg, a clear on read interrupt status register). + * + * @max_register: Optional, specifies the maximum valid register index. + * @reg_defaults: Power on reset values for registers (for use with + * register cache support). + * @num_reg_defaults: Number of elements in reg_defaults. + * + * @read_flag_mask: Mask to be set in the top byte of the register when doing + * a read. + * @write_flag_mask: Mask to be set in the top byte of the register when doing + * a write. If both read_flag_mask and write_flag_mask are + * empty the regmap_bus default masks are used. + */ struct regmap_config { int reg_bits; int val_bits; + + bool (*writeable_reg)(struct device *dev, unsigned int reg); + bool (*readable_reg)(struct device *dev, unsigned int reg); + bool (*volatile_reg)(struct device *dev, unsigned int reg); + bool (*precious_reg)(struct device *dev, unsigned int reg); + + unsigned int max_register; + struct reg_default *reg_defaults; + int num_reg_defaults; + + u8 read_flag_mask; + u8 write_flag_mask; }; typedef int (*regmap_hw_write)(struct device *dev, const void *data, |