[PATCH v2 2/4] gpio: davinci: Add match data struct for get_irq_chip callback
From: Aniket Limaye
Date: Fri Oct 16 2026 - 00:32:05 EST
Introduce struct davinci_gpio_match_data and move the get_irq_chip()
callback into it, instead of passing the callback directly through the
.data field of struct of_device_id. This allows describing further
per-compatible properties in the match data.
No functional change intended.
Signed-off-by: Aniket Limaye <a-limaye@xxxxxx>
---
drivers/gpio/gpio-davinci.c | 27 ++++++++++++++++++++++-----
1 file changed, 22 insertions(+), 5 deletions(-)
diff --git a/drivers/gpio/gpio-davinci.c b/drivers/gpio/gpio-davinci.c
index cccbaea1dec24..ab1b465dfcd15 100644
--- a/drivers/gpio/gpio-davinci.c
+++ b/drivers/gpio/gpio-davinci.c
@@ -41,6 +41,10 @@ struct davinci_gpio_regs {
typedef struct irq_chip *(*gpio_get_irq_chip_cb_t)(unsigned int irq);
+struct davinci_gpio_match_data {
+ gpio_get_irq_chip_cb_t get_irq_chip;
+};
+
#define BINTEN 0x8 /* GPIO Interrupt Per-Bank Enable Register */
static void __iomem *gpio_base;
@@ -449,6 +453,14 @@ static struct irq_chip *keystone_gpio_get_irq_chip(unsigned int irq)
return &gpio_unbanked;
};
+static const struct davinci_gpio_match_data davinci_gpio_data = {
+ .get_irq_chip = davinci_gpio_get_irq_chip,
+};
+
+static const struct davinci_gpio_match_data keystone_gpio_data = {
+ .get_irq_chip = keystone_gpio_get_irq_chip,
+};
+
static const struct of_device_id davinci_gpio_ids[];
/*
@@ -478,8 +490,13 @@ static int davinci_gpio_irq_setup(struct platform_device *pdev)
* Use davinci_gpio_get_irq_chip by default to handle non DT cases
*/
gpio_get_irq_chip = davinci_gpio_get_irq_chip;
- if (dev->of_node)
- gpio_get_irq_chip = (gpio_get_irq_chip_cb_t)device_get_match_data(dev);
+ if (dev->of_node) {
+ const struct davinci_gpio_match_data *match_data;
+
+ match_data = device_get_match_data(dev);
+ if (match_data)
+ gpio_get_irq_chip = match_data->get_irq_chip;
+ }
ngpio = chips->chip.ngpio;
@@ -668,9 +685,9 @@ static DEFINE_SIMPLE_DEV_PM_OPS(davinci_gpio_dev_pm_ops, davinci_gpio_suspend,
davinci_gpio_resume);
static const struct of_device_id davinci_gpio_ids[] = {
- { .compatible = "ti,keystone-gpio", keystone_gpio_get_irq_chip},
- { .compatible = "ti,am654-gpio", keystone_gpio_get_irq_chip},
- { .compatible = "ti,dm6441-gpio", davinci_gpio_get_irq_chip},
+ { .compatible = "ti,keystone-gpio", .data = &keystone_gpio_data },
+ { .compatible = "ti,am654-gpio", .data = &keystone_gpio_data },
+ { .compatible = "ti,dm6441-gpio", .data = &davinci_gpio_data },
{ /* sentinel */ },
};
MODULE_DEVICE_TABLE(of, davinci_gpio_ids);
--
2.53.0