]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
gpio: mmio: Make use of device properties
authorAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Wed, 25 Oct 2023 18:42:58 +0000 (21:42 +0300)
committerBartosz Golaszewski <bartosz.golaszewski@linaro.org>
Mon, 18 Dec 2023 12:42:45 +0000 (13:42 +0100)
Convert the module to be property provider agnostic and allow
it to be used on non-OF platforms.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
drivers/gpio/gpio-mmio.c

index 3ff0ea1e351c1d52a16d95e9f1e27c95d0990cf4..66308b165a0d7dd29bf7dd019859e9a31884ae7f 100644 (file)
@@ -58,7 +58,6 @@ o        `                     ~~~~\___/~~~~    ` controller in FPGA is ,.`
 #include <linux/platform_device.h>
 #include <linux/property.h>
 #include <linux/mod_devicetable.h>
-#include <linux/of.h>
 
 #include "gpiolib.h"
 
@@ -688,7 +687,6 @@ static void __iomem *bgpio_map(struct platform_device *pdev,
        return devm_ioremap_resource(&pdev->dev, r);
 }
 
-#ifdef CONFIG_OF
 static const struct of_device_id bgpio_of_match[] = {
        { .compatible = "brcm,bcm6345-gpio" },
        { .compatible = "wd,mbl-gpio" },
@@ -697,36 +695,27 @@ static const struct of_device_id bgpio_of_match[] = {
 };
 MODULE_DEVICE_TABLE(of, bgpio_of_match);
 
-static struct bgpio_pdata *bgpio_parse_dt(struct platform_device *pdev,
-                                         unsigned long *flags)
+static struct bgpio_pdata *bgpio_parse_fw(struct device *dev, unsigned long *flags)
 {
        struct bgpio_pdata *pdata;
 
-       if (!pdev->dev.of_node)
+       if (!dev_fwnode(dev))
                return NULL;
 
-       pdata = devm_kzalloc(&pdev->dev, sizeof(struct bgpio_pdata),
-                            GFP_KERNEL);
+       pdata = devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL);
        if (!pdata)
                return ERR_PTR(-ENOMEM);
 
        pdata->base = -1;
 
-       if (of_device_is_big_endian(pdev->dev.of_node))
+       if (device_is_big_endian(dev))
                *flags |= BGPIOF_BIG_ENDIAN_BYTE_ORDER;
 
-       if (of_property_read_bool(pdev->dev.of_node, "no-output"))
+       if (device_property_read_bool(dev, "no-output"))
                *flags |= BGPIOF_NO_OUTPUT;
 
        return pdata;
 }
-#else
-static struct bgpio_pdata *bgpio_parse_dt(struct platform_device *pdev,
-                                         unsigned long *flags)
-{
-       return NULL;
-}
-#endif /* CONFIG_OF */
 
 static int bgpio_pdev_probe(struct platform_device *pdev)
 {
@@ -743,7 +732,7 @@ static int bgpio_pdev_probe(struct platform_device *pdev)
        struct gpio_chip *gc;
        struct bgpio_pdata *pdata;
 
-       pdata = bgpio_parse_dt(pdev, &flags);
+       pdata = bgpio_parse_fw(dev, &flags);
        if (IS_ERR(pdata))
                return PTR_ERR(pdata);
 
@@ -814,7 +803,7 @@ MODULE_DEVICE_TABLE(platform, bgpio_id_table);
 static struct platform_driver bgpio_driver = {
        .driver = {
                .name = "basic-mmio-gpio",
-               .of_match_table = of_match_ptr(bgpio_of_match),
+               .of_match_table = bgpio_of_match,
        },
        .id_table = bgpio_id_table,
        .probe = bgpio_pdev_probe,