pinctrl: samsung: Switch to use for_each_gpiochip_node() helper
authorAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Mon, 11 Apr 2022 11:53:53 +0000 (14:53 +0300)
committerAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Thu, 14 Apr 2022 18:44:58 +0000 (21:44 +0300)
Switch the code to use for_each_gpiochip_node() helper.

While at it, in order to avoid additional churn in the future,
switch to fwnode APIs where it makes sense.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Tested-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
drivers/pinctrl/samsung/pinctrl-exynos.c
drivers/pinctrl/samsung/pinctrl-s3c24xx.c
drivers/pinctrl/samsung/pinctrl-s3c64xx.c
drivers/pinctrl/samsung/pinctrl-samsung.c
drivers/pinctrl/samsung/pinctrl-samsung.h

index c1c4ffb..6d7ca17 100644 (file)
@@ -307,7 +307,7 @@ __init int exynos_eint_gpio_init(struct samsung_pinctrl_drv_data *d)
                }
                bank->irq_chip->chip.name = bank->name;
 
-               bank->irq_domain = irq_domain_add_linear(bank->of_node,
+               bank->irq_domain = irq_domain_create_linear(bank->fwnode,
                                bank->nr_pins, &exynos_eint_irqd_ops, bank);
                if (!bank->irq_domain) {
                        dev_err(dev, "gpio irq domain add failed\n");
@@ -565,7 +565,7 @@ __init int exynos_eint_wkup_init(struct samsung_pinctrl_drv_data *d)
                }
                bank->irq_chip->chip.name = bank->name;
 
-               bank->irq_domain = irq_domain_add_linear(bank->of_node,
+               bank->irq_domain = irq_domain_create_linear(bank->fwnode,
                                bank->nr_pins, &exynos_eint_irqd_ops, bank);
                if (!bank->irq_domain) {
                        dev_err(dev, "wkup irq domain add failed\n");
@@ -573,7 +573,7 @@ __init int exynos_eint_wkup_init(struct samsung_pinctrl_drv_data *d)
                        return -ENXIO;
                }
 
-               if (!of_find_property(bank->of_node, "interrupts", NULL)) {
+               if (!fwnode_property_present(bank->fwnode, "interrupts")) {
                        bank->eint_type = EINT_TYPE_WKUP_MUX;
                        ++muxed_banks;
                        continue;
@@ -588,7 +588,7 @@ __init int exynos_eint_wkup_init(struct samsung_pinctrl_drv_data *d)
                }
 
                for (idx = 0; idx < bank->nr_pins; ++idx) {
-                       irq = irq_of_parse_and_map(bank->of_node, idx);
+                       irq = irq_of_parse_and_map(to_of_node(bank->fwnode), idx);
                        if (!irq) {
                                dev_err(dev, "irq number for eint-%s-%d not found\n",
                                                        bank->name, idx);
index ac1eba3..625cb10 100644 (file)
@@ -525,7 +525,7 @@ static int s3c24xx_eint_init(struct samsung_pinctrl_drv_data *d)
                ops = (bank->eint_offset == 0) ? &s3c24xx_gpf_irq_ops
                                               : &s3c24xx_gpg_irq_ops;
 
-               bank->irq_domain = irq_domain_add_linear(bank->of_node,
+               bank->irq_domain = irq_domain_create_linear(bank->fwnode,
                                bank->nr_pins, ops, ddata);
                if (!bank->irq_domain) {
                        dev_err(dev, "wkup irq domain add failed\n");
index c5f95a1..c5d92db 100644 (file)
@@ -471,7 +471,7 @@ static int s3c64xx_eint_gpio_init(struct samsung_pinctrl_drv_data *d)
                mask = bank->eint_mask;
                nr_eints = fls(mask);
 
-               bank->irq_domain = irq_domain_add_linear(bank->of_node,
+               bank->irq_domain = irq_domain_create_linear(bank->fwnode,
                                        nr_eints, &s3c64xx_gpio_irqd_ops, bank);
                if (!bank->irq_domain) {
                        dev_err(dev, "gpio irq domain add failed\n");
@@ -743,7 +743,7 @@ static int s3c64xx_eint_eint0_init(struct samsung_pinctrl_drv_data *d)
                        return -ENOMEM;
                ddata->bank = bank;
 
-               bank->irq_domain = irq_domain_add_linear(bank->of_node,
+               bank->irq_domain = irq_domain_create_linear(bank->fwnode,
                                nr_eints, &s3c64xx_eint0_irqd_ops, ddata);
                if (!bank->irq_domain) {
                        dev_err(dev, "wkup irq domain add failed\n");
index 2ba8b43..26d309d 100644 (file)
@@ -18,6 +18,7 @@
 #include <linux/init.h>
 #include <linux/platform_device.h>
 #include <linux/io.h>
+#include <linux/property.h>
 #include <linux/slab.h>
 #include <linux/err.h>
 #include <linux/gpio/driver.h>
@@ -966,7 +967,7 @@ static int samsung_gpiolib_register(struct platform_device *pdev,
                gc->base = bank->grange.base;
                gc->ngpio = bank->nr_pins;
                gc->parent = &pdev->dev;
-               gc->of_node = bank->of_node;
+               gc->fwnode = bank->fwnode;
                gc->label = bank->name;
 
                ret = devm_gpiochip_add_data(&pdev->dev, gc, bank);
@@ -1009,7 +1010,7 @@ static void samsung_banks_node_put(struct samsung_pinctrl_drv_data *d)
 
        bank = d->pin_banks;
        for (i = 0; i < d->nr_banks; ++i, ++bank)
-               of_node_put(bank->of_node);
+               fwnode_handle_put(bank->fwnode);
 }
 
 /*
@@ -1020,8 +1021,7 @@ static void samsung_banks_node_get(struct device *dev, struct samsung_pinctrl_dr
 {
        const char *suffix = "-gpio-bank";
        struct samsung_pin_bank *bank;
-       struct device_node *node = dev->of_node;
-       struct device_node *child;
+       struct fwnode_handle *child;
        /* Pin bank names are up to 4 characters */
        char node_name[20];
        unsigned int i;
@@ -1037,17 +1037,17 @@ static void samsung_banks_node_get(struct device *dev, struct samsung_pinctrl_dr
                        continue;
                }
 
-               for_each_child_of_node(node, child) {
-                       if (!of_find_property(child, "gpio-controller", NULL))
-                               continue;
-                       if (of_node_name_eq(child, node_name))
+               for_each_gpiochip_node(dev, child) {
+                       struct device_node *np = to_of_node(child);
+
+                       if (of_node_name_eq(np, node_name))
                                break;
-                       else if (of_node_name_eq(child, bank->name))
+                       if (of_node_name_eq(np, bank->name))
                                break;
                }
 
                if (child)
-                       bank->of_node = child;
+                       bank->fwnode = child;
                else
                        dev_warn(dev, "Missing node for bank %s - invalid DTB\n",
                                 bank->name);
index 5b32d3f..fc6f519 100644 (file)
@@ -165,7 +165,7 @@ struct samsung_pin_bank {
 
        u32             pin_base;
        void            *soc_priv;
-       struct device_node *of_node;
+       struct fwnode_handle *fwnode;
        struct samsung_pinctrl_drv_data *drvdata;
        struct irq_domain *irq_domain;
        struct gpio_chip gpio_chip;