]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
gpio: mmio: get chip label and GPIO base from device properties
authorBartosz Golaszewski <bartosz.golaszewski@linaro.org>
Tue, 1 Jul 2025 11:49:36 +0000 (13:49 +0200)
committerBartosz Golaszewski <bartosz.golaszewski@linaro.org>
Mon, 7 Jul 2025 07:31:08 +0000 (09:31 +0200)
Ahead of removing struct bgpio_pdata support from the gpio-mmio generic
module, let's add support for getting the relevant values from generic
device properties. "label" is a semi-standardized property in some GPIO
drivers so let's go with it. There's no standard "base" property, so
let's use the name "gpio-mmio,base" to tie it to this driver
specifically. The number of GPIOs will be retrieved using
gpiochip_get_ngpios() so there's no need to look it up in the software
node.

Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Link: https://lore.kernel.org/r/20250701-gpio-mmio-pdata-v2-2-ebf34d273497@linaro.org
Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
drivers/gpio/gpio-mmio.c

index 5bb51120421492d968212d7a7d2e3865ab5767da..7d062f9a2c6a8ef8bde2fb8f8b675a9cb724947e 100644 (file)
@@ -715,6 +715,9 @@ MODULE_DEVICE_TABLE(of, bgpio_of_match);
 static struct bgpio_pdata *bgpio_parse_fw(struct device *dev, unsigned long *flags)
 {
        struct bgpio_pdata *pdata;
+       const char *label;
+       unsigned int base;
+       int ret;
 
        if (!dev_fwnode(dev))
                return NULL;
@@ -731,6 +734,18 @@ static struct bgpio_pdata *bgpio_parse_fw(struct device *dev, unsigned long *fla
        if (device_property_read_bool(dev, "no-output"))
                *flags |= BGPIOF_NO_OUTPUT;
 
+       ret = device_property_read_string(dev, "label", &label);
+       if (!ret)
+               pdata->label = label;
+
+       /*
+        * This property *must not* be used in device-tree sources, it's only
+        * meant to be passed to the driver from board files and MFD core.
+        */
+       ret = device_property_read_u32(dev, "gpio-mmio,base", &base);
+       if (!ret && base <= INT_MAX)
+               pdata->base = base;
+
        return pdata;
 }