diff options
author | Bartosz Golaszewski <bartosz.golaszewski@linaro.org> | 2024-10-15 15:18:32 +0200 |
---|---|---|
committer | Bartosz Golaszewski <bartosz.golaszewski@linaro.org> | 2024-10-22 09:04:35 +0200 |
commit | 3aba8402910bfab998d5cf6c84744de5db466936 (patch) | |
tree | 60151e423c4b6d540892177979e7be6d20d26d2d /drivers/gpio | |
parent | d036ae41cebdfae92666024163c109b8fef516fa (diff) |
gpio: grgpio: remove remove()
Use devres to automatically manage resources and remove the remove()
callback.
Link: https://lore.kernel.org/r/20241015131832.44678-4-brgl@bgdev.pl
Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
Diffstat (limited to 'drivers/gpio')
-rw-r--r-- | drivers/gpio/gpio-grgpio.c | 29 |
1 files changed, 13 insertions, 16 deletions
diff --git a/drivers/gpio/gpio-grgpio.c b/drivers/gpio/gpio-grgpio.c index aec96d47dd0c..7ffe59d845f0 100644 --- a/drivers/gpio/gpio-grgpio.c +++ b/drivers/gpio/gpio-grgpio.c @@ -318,6 +318,13 @@ static void grgpio_irq_unmap(struct irq_domain *d, unsigned int irq) raw_spin_unlock_irqrestore(&priv->gc.bgpio_lock, flags); } +static void grgpio_irq_domain_remove(void *data) +{ + struct irq_domain *domain = data; + + irq_domain_remove(domain); +} + static const struct irq_domain_ops grgpio_irq_domain_ops = { .map = grgpio_irq_map, .unmap = grgpio_irq_unmap, @@ -394,6 +401,11 @@ static int grgpio_probe(struct platform_device *ofdev) return -EINVAL; } + err = devm_add_action_or_reset(dev, grgpio_irq_domain_remove, + priv->domain); + if (err) + return err; + for (i = 0; i < gc->ngpio; i++) { struct grgpio_lirq *lirq; int ret; @@ -416,13 +428,9 @@ static int grgpio_probe(struct platform_device *ofdev) } } - platform_set_drvdata(ofdev, priv); - - err = gpiochip_add_data(gc, priv); + err = devm_gpiochip_add_data(dev, gc, priv); if (err) { dev_err(dev, "Could not add gpiochip\n"); - if (priv->domain) - irq_domain_remove(priv->domain); return err; } @@ -432,16 +440,6 @@ static int grgpio_probe(struct platform_device *ofdev) return 0; } -static void grgpio_remove(struct platform_device *ofdev) -{ - struct grgpio_priv *priv = platform_get_drvdata(ofdev); - - gpiochip_remove(&priv->gc); - - if (priv->domain) - irq_domain_remove(priv->domain); -} - static const struct of_device_id grgpio_match[] = { {.name = "GAISLER_GPIO"}, {.name = "01_01a"}, @@ -456,7 +454,6 @@ static struct platform_driver grgpio_driver = { .of_match_table = grgpio_match, }, .probe = grgpio_probe, - .remove = grgpio_remove, }; module_platform_driver(grgpio_driver); |