summaryrefslogtreecommitdiffstats
path: root/include/linux/regmap.h
diff options
context:
space:
mode:
authorMark Brown2011-07-20 23:33:39 +0200
committerMark Brown2011-08-08 08:47:00 +0200
commit2e2ae66df37a14c9b33889b243b0ae1352ada1dd (patch)
tree35a73d673a94db5a68535e768651e99c9a224229 /include/linux/regmap.h
parentregmap: Add kerneldoc for struct regmap_config (diff)
downloadkernel-qcow2-linux-2e2ae66df37a14c9b33889b243b0ae1352ada1dd.tar.gz
kernel-qcow2-linux-2e2ae66df37a14c9b33889b243b0ae1352ada1dd.tar.xz
kernel-qcow2-linux-2e2ae66df37a14c9b33889b243b0ae1352ada1dd.zip
regmap: Allow devices to specify which registers are accessible
This is currently unused but we need to know which registers exist and their properties in order to implement diagnostics like register map dumps and the cache features. We use callbacks partly because properties can vary at runtime (eg, through access locks on registers) and partly because big switch statements are a good compromise between readable code and small data size for providing information on big register maps. Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Diffstat (limited to 'include/linux/regmap.h')
-rw-r--r--include/linux/regmap.h13
1 files changed, 13 insertions, 0 deletions
diff --git a/include/linux/regmap.h b/include/linux/regmap.h
index cf8e4cffd386..aef2b36a8ccf 100644
--- a/include/linux/regmap.h
+++ b/include/linux/regmap.h
@@ -25,10 +25,23 @@ struct spi_device;
*
* @reg_bits: Number of bits in a register address, mandatory.
* @val_bits: Number of bits in a register value, mandatory.
+ *
+ * @max_register: Optional, specifies the maximum valid register index.
+ * @writeable_register: Optional callback returning true if the register
+ * can be written to.
+ * @readable_register: Optional callback returning true if the register
+ * can be read from.
+ * @volatile_register: Optional callback returning true if the register
+ * value can't be cached.
*/
struct regmap_config {
int reg_bits;
int val_bits;
+
+ unsigned int max_register;
+ 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);
};
typedef int (*regmap_hw_write)(struct device *dev, const void *data,