diff options
| author | Mark Brown <broonie@opensource.wolfsonmicro.com> | 2011-12-12 00:10:02 -0500 |
|---|---|---|
| committer | Mark Brown <broonie@opensource.wolfsonmicro.com> | 2011-12-12 00:10:02 -0500 |
| commit | ce37954e93e9e85333577dcc22db5a4d0f4c9d5e (patch) | |
| tree | 133571eae537a4f1c304c5396668c7ec6a8e2bb7 /include/linux | |
| parent | dc47ce90c3a822cd7c9e9339fe4d5f61dcb26b50 (diff) | |
| parent | 209a600623cf13a8168b2f6b83643db7825abb9a (diff) | |
Merge branch 'topic/irq' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/regmap into mfd/da9052
Diffstat (limited to 'include/linux')
| -rw-r--r-- | include/linux/regmap.h | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/include/linux/regmap.h b/include/linux/regmap.h index 690276a642cf..e7e8953e8c2a 100644 --- a/include/linux/regmap.h +++ b/include/linux/regmap.h | |||
| @@ -144,4 +144,52 @@ int regcache_sync(struct regmap *map); | |||
| 144 | void regcache_cache_only(struct regmap *map, bool enable); | 144 | void regcache_cache_only(struct regmap *map, bool enable); |
| 145 | void regcache_cache_bypass(struct regmap *map, bool enable); | 145 | void regcache_cache_bypass(struct regmap *map, bool enable); |
| 146 | 146 | ||
| 147 | /** | ||
| 148 | * Description of an IRQ for the generic regmap irq_chip. | ||
| 149 | * | ||
| 150 | * @reg_offset: Offset of the status/mask register within the bank | ||
| 151 | * @mask: Mask used to flag/control the register. | ||
| 152 | */ | ||
| 153 | struct regmap_irq { | ||
| 154 | unsigned int reg_offset; | ||
| 155 | unsigned int mask; | ||
| 156 | }; | ||
| 157 | |||
| 158 | /** | ||
| 159 | * Description of a generic regmap irq_chip. This is not intended to | ||
| 160 | * handle every possible interrupt controller, but it should handle a | ||
| 161 | * substantial proportion of those that are found in the wild. | ||
| 162 | * | ||
| 163 | * @name: Descriptive name for IRQ controller. | ||
| 164 | * | ||
| 165 | * @status_base: Base status register address. | ||
| 166 | * @mask_base: Base mask register address. | ||
| 167 | * @ack_base: Base ack address. If zero then the chip is clear on read. | ||
| 168 | * | ||
| 169 | * @num_regs: Number of registers in each control bank. | ||
| 170 | * @irqs: Descriptors for individual IRQs. Interrupt numbers are | ||
| 171 | * assigned based on the index in the array of the interrupt. | ||
| 172 | * @num_irqs: Number of descriptors. | ||
| 173 | */ | ||
| 174 | struct regmap_irq_chip { | ||
| 175 | const char *name; | ||
| 176 | |||
| 177 | unsigned int status_base; | ||
| 178 | unsigned int mask_base; | ||
| 179 | unsigned int ack_base; | ||
| 180 | |||
| 181 | int num_regs; | ||
| 182 | |||
| 183 | const struct regmap_irq *irqs; | ||
| 184 | int num_irqs; | ||
| 185 | }; | ||
| 186 | |||
| 187 | struct regmap_irq_chip_data; | ||
| 188 | |||
| 189 | int regmap_add_irq_chip(struct regmap *map, int irq, int irq_flags, | ||
| 190 | int irq_base, struct regmap_irq_chip *chip, | ||
| 191 | struct regmap_irq_chip_data **data); | ||
| 192 | void regmap_del_irq_chip(int irq, struct regmap_irq_chip_data *data); | ||
| 193 | int regmap_irq_chip_get_base(struct regmap_irq_chip_data *data); | ||
| 194 | |||
| 147 | #endif | 195 | #endif |
