diff mbox series

regmap-irq: Drop map from handle_mask_sync() parameters

Message ID 20230309232009.2938-1-william.gray@linaro.org
State New
Headers show
Series regmap-irq: Drop map from handle_mask_sync() parameters | expand

Commit Message

William Breathitt Gray March 9, 2023, 11:20 p.m. UTC
Remove the map parameter from the struct regmap_irq_chip callback
handle_mask_sync() because it can be passed via the irq_drv_data
parameter instead. The gpio-104-dio-48e driver is the only consumer of
this callback and is thus updated accordingly.

Signed-off-by: William Breathitt Gray <william.gray@linaro.org>
---
 drivers/base/regmap/regmap-irq.c |  5 ++---
 drivers/gpio/gpio-104-dio-48e.c  | 32 +++++++++++++++++++++++---------
 include/linux/regmap.h           |  3 +--
 3 files changed, 26 insertions(+), 14 deletions(-)


base-commit: 054a0da568b94f6b69ccf34b80f7c41a6623eb11

Comments

William Breathitt Gray March 10, 2023, 12:14 p.m. UTC | #1
On Thu, Mar 09, 2023 at 06:20:09PM -0500, William Breathitt Gray wrote:
> Remove the map parameter from the struct regmap_irq_chip callback
> handle_mask_sync() because it can be passed via the irq_drv_data
> parameter instead. The gpio-104-dio-48e driver is the only consumer of
> this callback and is thus updated accordingly.
> 
> Signed-off-by: William Breathitt Gray <william.gray@linaro.org>

[...]

> diff --git a/drivers/gpio/gpio-104-dio-48e.c b/drivers/gpio/gpio-104-dio-48e.c
> index a3846faf3..1de551677 100644
> --- a/drivers/gpio/gpio-104-dio-48e.c
> +++ b/drivers/gpio/gpio-104-dio-48e.c
> @@ -99,14 +99,25 @@ static const struct regmap_irq dio48e_regmap_irqs[] = {
>  	DIO48E_REGMAP_IRQ(0), DIO48E_REGMAP_IRQ(1),
>  };
>  
> -static int dio48e_handle_mask_sync(struct regmap *const map, const int index,
> +/**
> + * struct dio48e_gpio - GPIO device private data structure
> + * @map:	Regmap for the device
> + * @irq_mask:	Current IRQ mask state on the device
> + */
> +struct dio48e_gpio {
> +	struct regmap *map;
> +	unsigned int irq_mask;
> +};
> +
> +static int dio48e_handle_mask_sync(const int index,
>  				   const unsigned int mask_buf_def,
>  				   const unsigned int mask_buf,
>  				   void *const irq_drv_data)
>  {
> -	unsigned int *const irq_mask = irq_drv_data;
> -	const unsigned int prev_mask = *irq_mask;
> +	struct dio48e_gpio *const dio48egpio = irq_drv_data;
> +	const unsigned int prev_mask = dio48egpio->irq_mask;
>  	const unsigned int all_masked = GENMASK(1, 0);
> +	struct regmap *const map = dio48egpio->map;
>  	int err;
>  	unsigned int val;
>  
> @@ -115,7 +126,7 @@ static int dio48e_handle_mask_sync(struct regmap *const map, const int index,
>  		return 0;
>  
>  	/* remember the current mask for the next mask sync */
> -	*irq_mask = mask_buf;
> +	dio48egpio->irq_mask = mask_buf;
>  
>  	/* if all previously masked, enable interrupts when unmasking */
>  	if (prev_mask == all_masked) {

Mark,

These two hunks conflict with a minor gpio-104-dio-48e change in the
gpio/for-next branch [0]. I can rebase this patch on top of that change,
or would you prefer that this goes through the gpio tree?

I'll also split out the gpio-104-dio-48e changes to a precursor patch to
keep the focus here on the regmap-irq changes.

William Breathitt Gray

[0] Commit b961b2aa2f64 ("gpio: 104-dio-48e: Utilize mask_buf_def in handle_mask_sync() callback")
diff mbox series

Patch

diff --git a/drivers/base/regmap/regmap-irq.c b/drivers/base/regmap/regmap-irq.c
index f4d544ee7..ff6b585b9 100644
--- a/drivers/base/regmap/regmap-irq.c
+++ b/drivers/base/regmap/regmap-irq.c
@@ -116,8 +116,7 @@  static void regmap_irq_sync_unlock(struct irq_data *data)
 	for (i = 0; i < d->chip->num_regs; i++) {
 		if (d->mask_base) {
 			if (d->chip->handle_mask_sync)
-				d->chip->handle_mask_sync(d->map, i,
-							  d->mask_buf_def[i],
+				d->chip->handle_mask_sync(i, d->mask_buf_def[i],
 							  d->mask_buf[i],
 							  d->chip->irq_drv_data);
 			else {
@@ -918,7 +917,7 @@  int regmap_add_irq_chip_fwnode(struct fwnode_handle *fwnode,
 
 		if (d->mask_base) {
 			if (chip->handle_mask_sync) {
-				ret = chip->handle_mask_sync(d->map, i,
+				ret = chip->handle_mask_sync(i,
 							     d->mask_buf_def[i],
 							     d->mask_buf[i],
 							     chip->irq_drv_data);
diff --git a/drivers/gpio/gpio-104-dio-48e.c b/drivers/gpio/gpio-104-dio-48e.c
index a3846faf3..1de551677 100644
--- a/drivers/gpio/gpio-104-dio-48e.c
+++ b/drivers/gpio/gpio-104-dio-48e.c
@@ -99,14 +99,25 @@  static const struct regmap_irq dio48e_regmap_irqs[] = {
 	DIO48E_REGMAP_IRQ(0), DIO48E_REGMAP_IRQ(1),
 };
 
-static int dio48e_handle_mask_sync(struct regmap *const map, const int index,
+/**
+ * struct dio48e_gpio - GPIO device private data structure
+ * @map:	Regmap for the device
+ * @irq_mask:	Current IRQ mask state on the device
+ */
+struct dio48e_gpio {
+	struct regmap *map;
+	unsigned int irq_mask;
+};
+
+static int dio48e_handle_mask_sync(const int index,
 				   const unsigned int mask_buf_def,
 				   const unsigned int mask_buf,
 				   void *const irq_drv_data)
 {
-	unsigned int *const irq_mask = irq_drv_data;
-	const unsigned int prev_mask = *irq_mask;
+	struct dio48e_gpio *const dio48egpio = irq_drv_data;
+	const unsigned int prev_mask = dio48egpio->irq_mask;
 	const unsigned int all_masked = GENMASK(1, 0);
+	struct regmap *const map = dio48egpio->map;
 	int err;
 	unsigned int val;
 
@@ -115,7 +126,7 @@  static int dio48e_handle_mask_sync(struct regmap *const map, const int index,
 		return 0;
 
 	/* remember the current mask for the next mask sync */
-	*irq_mask = mask_buf;
+	dio48egpio->irq_mask = mask_buf;
 
 	/* if all previously masked, enable interrupts when unmasking */
 	if (prev_mask == all_masked) {
@@ -168,7 +179,7 @@  static int dio48e_probe(struct device *dev, unsigned int id)
 	struct regmap *map;
 	int err;
 	struct regmap_irq_chip *chip;
-	unsigned int irq_mask;
+	struct dio48e_gpio *dio48egpio;
 	struct regmap_irq_chip_data *chip_data;
 
 	if (!devm_request_region(dev, base[id], DIO48E_EXTENT, name)) {
@@ -186,12 +197,14 @@  static int dio48e_probe(struct device *dev, unsigned int id)
 		return dev_err_probe(dev, PTR_ERR(map),
 				     "Unable to initialize register map\n");
 
-	chip = devm_kzalloc(dev, sizeof(*chip), GFP_KERNEL);
-	if (!chip)
+	dio48egpio = devm_kzalloc(dev, sizeof(*dio48egpio), GFP_KERNEL);
+	if (!dio48egpio)
 		return -ENOMEM;
 
-	chip->irq_drv_data = devm_kzalloc(dev, sizeof(irq_mask), GFP_KERNEL);
-	if (!chip->irq_drv_data)
+	dio48egpio->map = map;
+
+	chip = devm_kzalloc(dev, sizeof(*chip), GFP_KERNEL);
+	if (!chip)
 		return -ENOMEM;
 
 	chip->name = name;
@@ -206,6 +219,7 @@  static int dio48e_probe(struct device *dev, unsigned int id)
 	chip->irqs = dio48e_regmap_irqs;
 	chip->num_irqs = ARRAY_SIZE(dio48e_regmap_irqs);
 	chip->handle_mask_sync = dio48e_handle_mask_sync;
+	chip->irq_drv_data = dio48egpio;
 
 	/* Initialize to prevent spurious interrupts before we're ready */
 	err = dio48e_irq_init_hw(map);
diff --git a/include/linux/regmap.h b/include/linux/regmap.h
index 19d54f019..6516f975c 100644
--- a/include/linux/regmap.h
+++ b/include/linux/regmap.h
@@ -1649,8 +1649,7 @@  struct regmap_irq_chip {
 
 	int (*handle_pre_irq)(void *irq_drv_data);
 	int (*handle_post_irq)(void *irq_drv_data);
-	int (*handle_mask_sync)(struct regmap *map, int index,
-				unsigned int mask_buf_def,
+	int (*handle_mask_sync)(int index, unsigned int mask_buf_def,
 				unsigned int mask_buf, void *irq_drv_data);
 	int (*set_type_virt)(unsigned int **buf, unsigned int type,
 			     unsigned long hwirq, int reg);