From f79047b109119b9cc411b079d1aee6820b6afeb6 Mon Sep 17 00:00:00 2001 From: Enrico Weigelt Date: Mon, 24 Jun 2019 07:40:34 +0200 Subject: gpio: siox: Use module_siox_driver() Reduce driver init boilerplate by using the new module_siox_driver() macro. Signed-off-by: Enrico Weigelt Signed-off-by: Linus Walleij --- drivers/gpio/gpio-siox.c | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) (limited to 'drivers/gpio/gpio-siox.c') diff --git a/drivers/gpio/gpio-siox.c b/drivers/gpio/gpio-siox.c index 571b2a81c6de..fb4e318ab028 100644 --- a/drivers/gpio/gpio-siox.c +++ b/drivers/gpio/gpio-siox.c @@ -275,18 +275,7 @@ static struct siox_driver gpio_siox_driver = { .name = "gpio-siox", }, }; - -static int __init gpio_siox_init(void) -{ - return siox_driver_register(&gpio_siox_driver); -} -module_init(gpio_siox_init); - -static void __exit gpio_siox_exit(void) -{ - siox_driver_unregister(&gpio_siox_driver); -} -module_exit(gpio_siox_exit); +module_siox_driver(gpio_siox_driver); MODULE_AUTHOR("Uwe Kleine-Koenig "); MODULE_DESCRIPTION("SIOX gpio driver"); -- cgit v1.2.3 From 4c0a8899d9c215633ef79805c68b2566c775d43d Mon Sep 17 00:00:00 2001 From: Linus Walleij Date: Wed, 26 Jun 2019 10:09:00 +0200 Subject: gpio: siox: Do not call gpiochip_remove() on errorpath MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit gpiochip_remove() was called on the errorpath if gpiochip_add() failed: this is wrong, if the chip failed to add it is not there so it should not be removed. Fixes: be8c8facc707 ("gpio: new driver to work with a 8x12 siox") Acked-by: Uwe Kleine-König Signed-off-by: Linus Walleij --- drivers/gpio/gpio-siox.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) (limited to 'drivers/gpio/gpio-siox.c') diff --git a/drivers/gpio/gpio-siox.c b/drivers/gpio/gpio-siox.c index fb4e318ab028..0b4450118865 100644 --- a/drivers/gpio/gpio-siox.c +++ b/drivers/gpio/gpio-siox.c @@ -243,17 +243,14 @@ static int gpio_siox_probe(struct siox_device *sdevice) if (ret) { dev_err(&sdevice->dev, "Failed to register gpio chip (%d)\n", ret); - goto err_gpiochip; + return ret; } ret = gpiochip_irqchip_add(&ddata->gchip, &ddata->ichip, 0, handle_level_irq, IRQ_TYPE_EDGE_RISING); - if (ret) { + if (ret) dev_err(&sdevice->dev, "Failed to register irq chip (%d)\n", ret); -err_gpiochip: - gpiochip_remove(&ddata->gchip); - } return ret; } -- cgit v1.2.3 From 8df9d7f70f87960b6ad2b4a90db755551d7ab7bd Mon Sep 17 00:00:00 2001 From: Linus Walleij Date: Wed, 26 Jun 2019 10:11:17 +0200 Subject: gpio: siox: Switch to IRQ_TYPE_NONE MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The siox driver is hardcoding a default type of IRQ_TYPE_EDGE_RISING to the irq helper, but this should only be applicable to old boardfiles and odd device tree irqchips with just onecell irq (no flags). I doubt this is the case with the siox, I think all consumers specify the flags they use in the device tree. Acked-by: Uwe Kleine-König Signed-off-by: Linus Walleij --- drivers/gpio/gpio-siox.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/gpio/gpio-siox.c') diff --git a/drivers/gpio/gpio-siox.c b/drivers/gpio/gpio-siox.c index 0b4450118865..40067e1535d3 100644 --- a/drivers/gpio/gpio-siox.c +++ b/drivers/gpio/gpio-siox.c @@ -247,7 +247,7 @@ static int gpio_siox_probe(struct siox_device *sdevice) } ret = gpiochip_irqchip_add(&ddata->gchip, &ddata->ichip, - 0, handle_level_irq, IRQ_TYPE_EDGE_RISING); + 0, handle_level_irq, IRQ_TYPE_NONE); if (ret) dev_err(&sdevice->dev, "Failed to register irq chip (%d)\n", ret); -- cgit v1.2.3 From b25e10f8f9bcec3396d2f4348844cc28f06d772f Mon Sep 17 00:00:00 2001 From: Linus Walleij Date: Tue, 25 Jun 2019 12:36:12 +0200 Subject: gpio: siox: Pass irqchip when adding gpiochip MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We need to convert all old gpio irqchips to pass the irqchip setup along when adding the gpio_chip. For chained irqchips this is a pretty straight-forward conversion. Cc: Uwe Kleine-König Cc: Thierry Reding Signed-off-by: Linus Walleij --- drivers/gpio/gpio-siox.c | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) (limited to 'drivers/gpio/gpio-siox.c') diff --git a/drivers/gpio/gpio-siox.c b/drivers/gpio/gpio-siox.c index 40067e1535d3..26a0ecd487cb 100644 --- a/drivers/gpio/gpio-siox.c +++ b/drivers/gpio/gpio-siox.c @@ -211,6 +211,7 @@ static int gpio_siox_get_direction(struct gpio_chip *chip, unsigned int offset) static int gpio_siox_probe(struct siox_device *sdevice) { struct gpio_siox_ddata *ddata; + struct gpio_irq_chip *girq; int ret; ddata = devm_kzalloc(&sdevice->dev, sizeof(*ddata), GFP_KERNEL); @@ -239,18 +240,15 @@ static int gpio_siox_probe(struct siox_device *sdevice) ddata->ichip.irq_unmask = gpio_siox_irq_unmask; ddata->ichip.irq_set_type = gpio_siox_irq_set_type; - ret = gpiochip_add(&ddata->gchip); - if (ret) { - dev_err(&sdevice->dev, - "Failed to register gpio chip (%d)\n", ret); - return ret; - } + girq = &ddata->gchip.irq; + girq->chip = &ddata->ichip; + girq->default_type = IRQ_TYPE_NONE; + girq->handler = handle_level_irq; - ret = gpiochip_irqchip_add(&ddata->gchip, &ddata->ichip, - 0, handle_level_irq, IRQ_TYPE_NONE); + ret = gpiochip_add(&ddata->gchip); if (ret) dev_err(&sdevice->dev, - "Failed to register irq chip (%d)\n", ret); + "Failed to register gpio chip (%d)\n", ret); return ret; } -- cgit v1.2.3 From acc141374df40abd24ed5e128c8a3eb43805a688 Mon Sep 17 00:00:00 2001 From: Linus Walleij Date: Wed, 26 Jun 2019 10:21:27 +0200 Subject: gpio: siox: Add struct device *dev helper variable MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This makes the code easier to read. Acked-by: Uwe Kleine-König Signed-off-by: Linus Walleij --- drivers/gpio/gpio-siox.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'drivers/gpio/gpio-siox.c') diff --git a/drivers/gpio/gpio-siox.c b/drivers/gpio/gpio-siox.c index 26a0ecd487cb..c8cca30b2443 100644 --- a/drivers/gpio/gpio-siox.c +++ b/drivers/gpio/gpio-siox.c @@ -212,20 +212,21 @@ static int gpio_siox_probe(struct siox_device *sdevice) { struct gpio_siox_ddata *ddata; struct gpio_irq_chip *girq; + struct device *dev = &sdevice->dev; int ret; - ddata = devm_kzalloc(&sdevice->dev, sizeof(*ddata), GFP_KERNEL); + ddata = devm_kzalloc(dev, sizeof(*ddata), GFP_KERNEL); if (!ddata) return -ENOMEM; - dev_set_drvdata(&sdevice->dev, ddata); + dev_set_drvdata(dev, ddata); mutex_init(&ddata->lock); spin_lock_init(&ddata->irqlock); ddata->gchip.base = -1; ddata->gchip.can_sleep = 1; - ddata->gchip.parent = &sdevice->dev; + ddata->gchip.parent = dev; ddata->gchip.owner = THIS_MODULE; ddata->gchip.get = gpio_siox_get; ddata->gchip.set = gpio_siox_set; @@ -247,8 +248,7 @@ static int gpio_siox_probe(struct siox_device *sdevice) ret = gpiochip_add(&ddata->gchip); if (ret) - dev_err(&sdevice->dev, - "Failed to register gpio chip (%d)\n", ret); + dev_err(dev, "Failed to register gpio chip (%d)\n", ret); return ret; } -- cgit v1.2.3 From 8b29450437d7e3a507d8421621b02fcaa2368637 Mon Sep 17 00:00:00 2001 From: Linus Walleij Date: Wed, 26 Jun 2019 10:23:28 +0200 Subject: gpio: siox: Use devm_ managed gpiochip MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit By using devm_gpiochip_add_data() we can get rid of the remove() callback. As this driver doesn't use the gpiochip data pointer we simply pass in NULL. Acked-by: Uwe Kleine-König Signed-off-by: Linus Walleij --- drivers/gpio/gpio-siox.c | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) (limited to 'drivers/gpio/gpio-siox.c') diff --git a/drivers/gpio/gpio-siox.c b/drivers/gpio/gpio-siox.c index c8cca30b2443..006a7e6a75f2 100644 --- a/drivers/gpio/gpio-siox.c +++ b/drivers/gpio/gpio-siox.c @@ -246,24 +246,15 @@ static int gpio_siox_probe(struct siox_device *sdevice) girq->default_type = IRQ_TYPE_NONE; girq->handler = handle_level_irq; - ret = gpiochip_add(&ddata->gchip); + ret = devm_gpiochip_add_data(dev, &ddata->gchip, NULL); if (ret) dev_err(dev, "Failed to register gpio chip (%d)\n", ret); return ret; } -static int gpio_siox_remove(struct siox_device *sdevice) -{ - struct gpio_siox_ddata *ddata = dev_get_drvdata(&sdevice->dev); - - gpiochip_remove(&ddata->gchip); - return 0; -} - static struct siox_driver gpio_siox_driver = { .probe = gpio_siox_probe, - .remove = gpio_siox_remove, .set_data = gpio_siox_set_data, .get_data = gpio_siox_get_data, .driver = { -- cgit v1.2.3