diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2016-01-12 05:14:34 +0100 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2016-01-12 05:14:34 +0100 |
commit | e795e5f4e01de550bd8947a7db910daaf7773198 (patch) | |
tree | 0a513a66a63be33a226315a8d1dd13aa0e6553d7 /include | |
parent | Merge tag 'pinctrl-v4.5-1' of git://git.kernel.org/pub/scm/linux/kernel/git/l... (diff) | |
parent | Merge remote-tracking branches 'regmap/topic/mmio', 'regmap/topic/rbtree' and... (diff) | |
download | linux-e795e5f4e01de550bd8947a7db910daaf7773198.tar.xz linux-e795e5f4e01de550bd8947a7db910daaf7773198.zip |
Merge tag 'regmap-v4.5' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/regmap
Pull regmap updates from Mark Brown:
"There's no real overall theme to the regmap changes for this release,
it's a collection of individual features. The main bits are:
- Support for 64 bit registers, mainly for MMIO use, from Xiubo Li.
- Support for trigger type configuration for regmap-irq from Laxman
Dewangan.
- Use native physical I/O for MMIO register maps to avoid confusion
with the conversions that readl() and writel() do to little endian
on big endian systems (with some DT updates to fix some workarounds
people were doing), code from Simon Arlott.
- Use a binary search rather than iteraton to improve the runtime
performance of the rbtree code from Nikesh Oswal"
* tag 'regmap-v4.5' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/regmap:
regmap: debugfs: Use seq_file for the access map
regmap: irq: add support for configuration of trigger type
regmap: use IS_ALIGNED instead of % to improve the performance
regmap: cache: Move the num_reg_defaults check as early as possible
regmap: cache: Add warning info for the cache check
regmap: missing case statement
regmap: shift wrapping bugs in 64 bit code
regmap: cache: Add 64-bit mode support
regmap: cache: To suppress the noise of checkpatch
regmap: fix the warning about unused variable
regmap: add 64-bit mode support
regmap: mmio: Add regmap_mmio_get_min_stride
regmap: mmio: remove the useless code
regmap: Fix leftover from struct reg_default to struct reg_sequence change
regmap: replace kmalloc with kmalloc_array
regmap: replace kzalloc with kcalloc
regmap: rbtree: When adding a reg do a bsearch for target node
regmap-mmio: Use native endianness for read/write
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/regmap.h | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/include/linux/regmap.h b/include/linux/regmap.h index d68bb402120e..18394343f489 100644 --- a/include/linux/regmap.h +++ b/include/linux/regmap.h @@ -788,10 +788,16 @@ int regmap_fields_update_bits(struct regmap_field *field, unsigned int id, * * @reg_offset: Offset of the status/mask register within the bank * @mask: Mask used to flag/control the register. + * @type_reg_offset: Offset register for the irq type setting. + * @type_rising_mask: Mask bit to configure RISING type irq. + * @type_falling_mask: Mask bit to configure FALLING type irq. */ struct regmap_irq { unsigned int reg_offset; unsigned int mask; + unsigned int type_reg_offset; + unsigned int type_rising_mask; + unsigned int type_falling_mask; }; #define REGMAP_IRQ_REG(_irq, _off, _mask) \ @@ -811,18 +817,23 @@ struct regmap_irq { * @ack_base: Base ack address. If zero then the chip is clear on read. * Using zero value is possible with @use_ack bit. * @wake_base: Base address for wake enables. If zero unsupported. + * @type_base: Base address for irq type. If zero unsupported. * @irq_reg_stride: Stride to use for chips where registers are not contiguous. * @init_ack_masked: Ack all masked interrupts once during initalization. * @mask_invert: Inverted mask register: cleared bits are masked out. * @use_ack: Use @ack register even if it is zero. * @ack_invert: Inverted ack register: cleared bits for ack. * @wake_invert: Inverted wake register: cleared bits are wake enabled. + * @type_invert: Invert the type flags. * @runtime_pm: Hold a runtime PM lock on the device when accessing it. * * @num_regs: Number of registers in each control bank. * @irqs: Descriptors for individual IRQs. Interrupt numbers are * assigned based on the index in the array of the interrupt. * @num_irqs: Number of descriptors. + * @num_type_reg: Number of type registers. + * @type_reg_stride: Stride to use for chips where type registers are not + * contiguous. */ struct regmap_irq_chip { const char *name; @@ -832,6 +843,7 @@ struct regmap_irq_chip { unsigned int unmask_base; unsigned int ack_base; unsigned int wake_base; + unsigned int type_base; unsigned int irq_reg_stride; bool init_ack_masked:1; bool mask_invert:1; @@ -839,11 +851,15 @@ struct regmap_irq_chip { bool ack_invert:1; bool wake_invert:1; bool runtime_pm:1; + bool type_invert:1; int num_regs; const struct regmap_irq *irqs; int num_irqs; + + int num_type_reg; + unsigned int type_reg_stride; }; struct regmap_irq_chip_data; @@ -1021,7 +1037,7 @@ static inline void regmap_async_complete(struct regmap *map) } static inline int regmap_register_patch(struct regmap *map, - const struct reg_default *regs, + const struct reg_sequence *regs, int num_regs) { WARN_ONCE(1, "regmap API is disabled"); |