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

gpio: visconti: use new generic GPIO chip API

Convert the driver to using the new generic GPIO chip interfaces from
linux/gpio/generic.h.

Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Link: https://lore.kernel.org/r/20250826-gpio-mmio-gpio-conv-part2-v1-12-f67603e4b27e@linaro.org
Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>

+15 -10
+15 -10
drivers/gpio/gpio-visconti.c
··· 10 10 11 11 #include <linux/bitops.h> 12 12 #include <linux/gpio/driver.h> 13 + #include <linux/gpio/generic.h> 13 14 #include <linux/init.h> 14 15 #include <linux/interrupt.h> 15 16 #include <linux/module.h> ··· 33 32 struct visconti_gpio { 34 33 void __iomem *base; 35 34 spinlock_t lock; /* protect gpio register */ 36 - struct gpio_chip gpio_chip; 35 + struct gpio_generic_chip chip; 37 36 struct device *dev; 38 37 }; 39 38 ··· 159 158 160 159 static int visconti_gpio_probe(struct platform_device *pdev) 161 160 { 161 + struct gpio_generic_chip_config config; 162 162 struct device *dev = &pdev->dev; 163 163 struct visconti_gpio *priv; 164 164 struct gpio_irq_chip *girq; ··· 191 189 return -ENODEV; 192 190 } 193 191 194 - ret = bgpio_init(&priv->gpio_chip, dev, 4, 195 - priv->base + GPIO_IDATA, 196 - priv->base + GPIO_OSET, 197 - priv->base + GPIO_OCLR, 198 - priv->base + GPIO_DIR, 199 - NULL, 200 - 0); 192 + config = (typeof(config)){ 193 + .dev = dev, 194 + .sz = 4, 195 + .dat = priv->base + GPIO_IDATA, 196 + .set = priv->base + GPIO_OSET, 197 + .clr = priv->base + GPIO_OCLR, 198 + .dirout = priv->base + GPIO_DIR, 199 + }; 200 + 201 + ret = gpio_generic_chip_init(&priv->chip, &config); 201 202 if (ret) { 202 203 dev_err(dev, "unable to init generic GPIO\n"); 203 204 return ret; 204 205 } 205 206 206 - girq = &priv->gpio_chip.irq; 207 + girq = &priv->chip.gc.irq; 207 208 gpio_irq_chip_set_chip(girq, &visconti_gpio_irq_chip); 208 209 girq->fwnode = dev_fwnode(dev); 209 210 girq->parent_domain = parent; ··· 215 210 girq->default_type = IRQ_TYPE_NONE; 216 211 girq->handler = handle_level_irq; 217 212 218 - return devm_gpiochip_add_data(dev, &priv->gpio_chip, priv); 213 + return devm_gpiochip_add_data(dev, &priv->chip.gc, priv); 219 214 } 220 215 221 216 static const struct of_device_id visconti_gpio_of_match[] = {