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

Configure Feed

Select the types of activity you want to include in your feed.

gpio: menz127: 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/20250910-gpio-mmio-gpio-conv-part4-v2-10-f3d1a4c57124@linaro.org
Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>

+17 -14
+17 -14
drivers/gpio/gpio-menz127.c
··· 12 12 #include <linux/mcb.h> 13 13 #include <linux/bitops.h> 14 14 #include <linux/gpio/driver.h> 15 + #include <linux/gpio/generic.h> 15 16 16 17 #define MEN_Z127_CTRL 0x00 17 18 #define MEN_Z127_PSR 0x04 ··· 31 30 (db <= MEN_Z127_DB_MAX_US)) 32 31 33 32 struct men_z127_gpio { 34 - struct gpio_chip gc; 33 + struct gpio_generic_chip chip; 35 34 void __iomem *reg_base; 36 35 struct resource *mem; 37 36 }; ··· 65 64 debounce /= 50; 66 65 } 67 66 68 - raw_spin_lock(&gc->bgpio_lock); 67 + guard(gpio_generic_lock)(&priv->chip); 69 68 70 69 db_en = readl(priv->reg_base + MEN_Z127_DBER); 71 70 ··· 80 79 writel(db_en, priv->reg_base + MEN_Z127_DBER); 81 80 writel(db_cnt, priv->reg_base + GPIO_TO_DBCNT_REG(gpio)); 82 81 83 - raw_spin_unlock(&gc->bgpio_lock); 84 - 85 82 return 0; 86 83 } 87 84 ··· 90 91 struct men_z127_gpio *priv = gpiochip_get_data(gc); 91 92 u32 od_en; 92 93 93 - raw_spin_lock(&gc->bgpio_lock); 94 + guard(gpio_generic_lock)(&priv->chip); 95 + 94 96 od_en = readl(priv->reg_base + MEN_Z127_ODER); 95 97 96 98 if (param == PIN_CONFIG_DRIVE_OPEN_DRAIN) ··· 101 101 od_en &= ~BIT(offset); 102 102 103 103 writel(od_en, priv->reg_base + MEN_Z127_ODER); 104 - raw_spin_unlock(&gc->bgpio_lock); 105 104 106 105 return 0; 107 106 } ··· 136 137 static int men_z127_probe(struct mcb_device *mdev, 137 138 const struct mcb_device_id *id) 138 139 { 140 + struct gpio_generic_chip_config config; 139 141 struct men_z127_gpio *men_z127_gpio; 140 142 struct device *dev = &mdev->dev; 141 143 int ret; ··· 163 163 164 164 mcb_set_drvdata(mdev, men_z127_gpio); 165 165 166 - ret = bgpio_init(&men_z127_gpio->gc, &mdev->dev, 4, 167 - men_z127_gpio->reg_base + MEN_Z127_PSR, 168 - men_z127_gpio->reg_base + MEN_Z127_CTRL, 169 - NULL, 170 - men_z127_gpio->reg_base + MEN_Z127_GPIODR, 171 - NULL, 0); 166 + config = (struct gpio_generic_chip_config) { 167 + .dev = &mdev->dev, 168 + .sz = 4, 169 + .dat = men_z127_gpio->reg_base + MEN_Z127_PSR, 170 + .set = men_z127_gpio->reg_base + MEN_Z127_CTRL, 171 + .dirout = men_z127_gpio->reg_base + MEN_Z127_GPIODR, 172 + }; 173 + 174 + ret = gpio_generic_chip_init(&men_z127_gpio->chip, &config); 172 175 if (ret) 173 176 return ret; 174 177 175 - men_z127_gpio->gc.set_config = men_z127_set_config; 178 + men_z127_gpio->chip.gc.set_config = men_z127_set_config; 176 179 177 - ret = devm_gpiochip_add_data(dev, &men_z127_gpio->gc, men_z127_gpio); 180 + ret = devm_gpiochip_add_data(dev, &men_z127_gpio->chip.gc, men_z127_gpio); 178 181 if (ret) 179 182 return dev_err_probe(dev, ret, 180 183 "failed to register MEN 16Z127 GPIO controller");