]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
gpio: mmio: remove struct bgpio_pdata
authorBartosz Golaszewski <bartosz.golaszewski@linaro.org>
Tue, 1 Jul 2025 11:49:40 +0000 (13:49 +0200)
committerBartosz Golaszewski <bartosz.golaszewski@linaro.org>
Mon, 7 Jul 2025 07:31:08 +0000 (09:31 +0200)
With no more users, we can now remove struct bgpio_pdata. Move the
relevant bits from bgpio_parse_fw() into bgpio_pdev_probe() while
maintaining the logical ordering (get flags before calling
bgpio_init()).

Link: https://lore.kernel.org/r/20250701-gpio-mmio-pdata-v2-6-ebf34d273497@linaro.org
Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
drivers/gpio/gpio-mmio.c
include/linux/gpio/driver.h

index 7d062f9a2c6a8ef8bde2fb8f8b675a9cb724947e..a8103e26298c900e83f0597708559b0489182797 100644 (file)
@@ -712,43 +712,6 @@ static const struct of_device_id bgpio_of_match[] = {
 };
 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;
-
-       pdata = devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL);
-       if (!pdata)
-               return ERR_PTR(-ENOMEM);
-
-       pdata->base = -1;
-
-       if (device_is_big_endian(dev))
-               *flags |= BGPIOF_BIG_ENDIAN_BYTE_ORDER;
-
-       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;
-}
-
 static int bgpio_pdev_probe(struct platform_device *pdev)
 {
        struct device *dev = &pdev->dev;
@@ -760,18 +723,10 @@ static int bgpio_pdev_probe(struct platform_device *pdev)
        void __iomem *dirin;
        unsigned long sz;
        unsigned long flags = 0;
+       unsigned int base;
        int err;
        struct gpio_chip *gc;
-       struct bgpio_pdata *pdata;
-
-       pdata = bgpio_parse_fw(dev, &flags);
-       if (IS_ERR(pdata))
-               return PTR_ERR(pdata);
-
-       if (!pdata) {
-               pdata = dev_get_platdata(dev);
-               flags = pdev->id_entry->driver_data;
-       }
+       const char *label;
 
        r = platform_get_resource_byname(pdev, IORESOURCE_MEM, "dat");
        if (!r)
@@ -803,17 +758,27 @@ static int bgpio_pdev_probe(struct platform_device *pdev)
        if (!gc)
                return -ENOMEM;
 
+       if (device_is_big_endian(dev))
+               flags |= BGPIOF_BIG_ENDIAN_BYTE_ORDER;
+
+       if (device_property_read_bool(dev, "no-output"))
+               flags |= BGPIOF_NO_OUTPUT;
+
        err = bgpio_init(gc, dev, sz, dat, set, clr, dirout, dirin, flags);
        if (err)
                return err;
 
-       if (pdata) {
-               if (pdata->label)
-                       gc->label = pdata->label;
-               gc->base = pdata->base;
-               if (pdata->ngpio > 0)
-                       gc->ngpio = pdata->ngpio;
-       }
+       err = device_property_read_string(dev, "label", &label);
+       if (!err)
+               gc->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.
+        */
+       err = device_property_read_u32(dev, "gpio-mmio,base", &base);
+       if (!err && base <= INT_MAX)
+               gc->base = base;
 
        platform_set_drvdata(pdev, gc);
 
index b53233051beed0c6b927a951669ae5cf17d88a68..602d4acd36b255b511e625cd9cef2a1cf30154e0 100644 (file)
@@ -718,12 +718,6 @@ const unsigned long *gpiochip_query_valid_mask(const struct gpio_chip *gc);
 /* get driver data */
 void *gpiochip_get_data(struct gpio_chip *gc);
 
-struct bgpio_pdata {
-       const char *label;
-       int base;
-       int ngpio;
-};
-
 #ifdef CONFIG_IRQ_DOMAIN_HIERARCHY
 
 int gpiochip_populate_parent_fwspec_twocell(struct gpio_chip *gc,