diff options
author | Samuel Ortiz <sameo@linux.intel.com> | 2012-11-20 11:20:58 (GMT) |
---|---|---|
committer | Samuel Ortiz <sameo@linux.intel.com> | 2012-11-20 11:20:58 (GMT) |
commit | 7aae79fd8857794406841ededbdef493fac3d889 (patch) | |
tree | ef678fec137848e49bb959397d3c4a9a6feadc9a /include/linux | |
parent | ea2590e24364a5d153464d443aa25347e5d17695 (diff) | |
parent | 0d4529c534c1c664f25088eb5f5b4d7ce0ee2510 (diff) | |
download | linux-fsl-qoriq-7aae79fd8857794406841ededbdef493fac3d889.tar.xz |
Merge tag 'lock' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/regmap into for-next
regmap: Customisable lock functions
Allow maps to replace the lock function for integration with dynamic
register accessability states.
Diffstat (limited to 'include/linux')
-rw-r--r-- | include/linux/regmap.h | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/include/linux/regmap.h b/include/linux/regmap.h index b9e9979..d1d1ce3 100644 --- a/include/linux/regmap.h +++ b/include/linux/regmap.h @@ -54,6 +54,9 @@ enum regmap_endian { REGMAP_ENDIAN_NATIVE, }; +typedef void (*regmap_lock)(void *); +typedef void (*regmap_unlock)(void *); + /** * Configuration for the register map of a device. * @@ -76,6 +79,12 @@ enum regmap_endian { * @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). + * @lock: Optional lock callback (overrides regmap's default lock + * function, based on spinlock or mutex). + * @unlock: As above for unlocking. + * @lock_arg: this field is passed as the only argument of lock/unlock + * functions (ignored in case regular lock/unlock functions + * are not overridden). * * @max_register: Optional, specifies the maximum valid register index. * @reg_defaults: Power on reset values for registers (for use with @@ -117,6 +126,9 @@ struct regmap_config { 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); + regmap_lock lock; + regmap_unlock unlock; + void *lock_arg; unsigned int max_register; const struct reg_default *reg_defaults; @@ -182,7 +194,9 @@ typedef void (*regmap_hw_free_context)(void *context); * Description of a hardware bus for the register map infrastructure. * * @fast_io: Register IO is fast. Use a spinlock instead of a mutex - * to perform locking. + * to perform locking. This field is ignored if custom lock/unlock + * functions are used (see fields lock/unlock of + * struct regmap_config). * @write: Write operation. * @gather_write: Write operation with split register/value, return -ENOTSUPP * if not implemented on a given device. |