mirror of
https://github.com/Fishwaldo/linux-bl808.git
synced 2025-06-17 20:25:19 +00:00
regmap: regmap-irq/gpio-max77620: add level-irq support
Add level active IRQ support to regmap-irq irqchip. Change breaks existing regmap-irq type setting. Convert the existing drivers which use regmap-irq with trigger type setting (gpio-max77620) to work with this new approach. So we do not magically support level-active IRQs on gpio-max77620 - but add support to the regmap-irq for chips which support them =) We do not support distinguishing situation where HW supports rising and falling edge detection but not both. Separating this would require inventing yet another flags for IRQ types. Signed-off-by: Matti Vaittinen <matti.vaittinen@fi.rohmeurope.com> Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
84267d1b18
commit
1c2928e3e3
3 changed files with 110 additions and 48 deletions
|
@ -1089,22 +1089,37 @@ int regmap_fields_read(struct regmap_field *field, unsigned int id,
|
|||
int regmap_fields_update_bits_base(struct regmap_field *field, unsigned int id,
|
||||
unsigned int mask, unsigned int val,
|
||||
bool *change, bool async, bool force);
|
||||
/**
|
||||
* struct regmap_irq_type - IRQ type definitions.
|
||||
*
|
||||
* @type_reg_offset: Offset register for the irq type setting.
|
||||
* @type_rising_val: Register value to configure RISING type irq.
|
||||
* @type_falling_val: Register value to configure FALLING type irq.
|
||||
* @type_level_low_val: Register value to configure LEVEL_LOW type irq.
|
||||
* @type_level_high_val: Register value to configure LEVEL_HIGH type irq.
|
||||
* @types_supported: logical OR of IRQ_TYPE_* flags indicating supported types.
|
||||
*/
|
||||
struct regmap_irq_type {
|
||||
unsigned int type_reg_offset;
|
||||
unsigned int type_reg_mask;
|
||||
unsigned int type_rising_val;
|
||||
unsigned int type_falling_val;
|
||||
unsigned int type_level_low_val;
|
||||
unsigned int type_level_high_val;
|
||||
unsigned int types_supported;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct regmap_irq - Description of an IRQ for the generic regmap irq_chip.
|
||||
*
|
||||
* @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.
|
||||
* @type: IRQ trigger type setting details if supported.
|
||||
*/
|
||||
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;
|
||||
struct regmap_irq_type type;
|
||||
};
|
||||
|
||||
#define REGMAP_IRQ_REG(_irq, _off, _mask) \
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue