Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

regmap: Pass irq_drv_data as a parameter for set_type_config()

Allow the struct regmap_irq_chip set_type_config() callback to access
irq_drv_data by passing it as a parameter.

Signed-off-by: William Breathitt Gray <william.gray@linaro.org>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Link: https://lore.kernel.org/r/20e15cd3afae80922b7e0577c7741df86b3390c5.1680708357.git.william.gray@linaro.org
Signed-off-by: Mark Brown <broonie@kernel.org>

authored by

William Breathitt Gray and committed by
Mark Brown
7697c64b e8d018dd

+9 -5
+5 -3
drivers/base/regmap/regmap-irq.c
··· 329 329 } 330 330 331 331 if (d->chip->set_type_config) { 332 - ret = d->chip->set_type_config(d->config_buf, type, 333 - irq_data, reg); 332 + ret = d->chip->set_type_config(d->config_buf, type, irq_data, 333 + reg, d->chip->irq_drv_data); 334 334 if (ret) 335 335 return ret; 336 336 } ··· 651 651 * @type: The requested IRQ type. 652 652 * @irq_data: The IRQ being configured. 653 653 * @idx: Index of the irq's config registers within each array `buf[i]` 654 + * @irq_drv_data: Driver specific IRQ data 654 655 * 655 656 * This is a &struct regmap_irq_chip->set_type_config callback suitable for 656 657 * chips with one config register. Register values are updated according to 657 658 * the &struct regmap_irq_type data associated with an IRQ. 658 659 */ 659 660 int regmap_irq_set_type_config_simple(unsigned int **buf, unsigned int type, 660 - const struct regmap_irq *irq_data, int idx) 661 + const struct regmap_irq *irq_data, 662 + int idx, void *irq_drv_data) 661 663 { 662 664 const struct regmap_irq_type *t = &irq_data->type; 663 665
+4 -2
include/linux/regmap.h
··· 1650 1650 int (*set_type_virt)(unsigned int **buf, unsigned int type, 1651 1651 unsigned long hwirq, int reg); 1652 1652 int (*set_type_config)(unsigned int **buf, unsigned int type, 1653 - const struct regmap_irq *irq_data, int idx); 1653 + const struct regmap_irq *irq_data, int idx, 1654 + void *irq_drv_data); 1654 1655 unsigned int (*get_irq_reg)(struct regmap_irq_chip_data *data, 1655 1656 unsigned int base, int index); 1656 1657 void *irq_drv_data; ··· 1660 1659 unsigned int regmap_irq_get_irq_reg_linear(struct regmap_irq_chip_data *data, 1661 1660 unsigned int base, int index); 1662 1661 int regmap_irq_set_type_config_simple(unsigned int **buf, unsigned int type, 1663 - const struct regmap_irq *irq_data, int idx); 1662 + const struct regmap_irq *irq_data, 1663 + int idx, void *irq_drv_data); 1664 1664 1665 1665 int regmap_add_irq_chip(struct regmap *map, int irq, int irq_flags, 1666 1666 int irq_base, const struct regmap_irq_chip *chip,