Commit 492fca28 authored by Andy Shevchenko's avatar Andy Shevchenko

pinctrl: samsung: Switch to use for_each_gpiochip_node() helper

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: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Tested-by: default avatarKrzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
parent 954445c7
...@@ -307,7 +307,7 @@ __init int exynos_eint_gpio_init(struct samsung_pinctrl_drv_data *d) ...@@ -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_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); bank->nr_pins, &exynos_eint_irqd_ops, bank);
if (!bank->irq_domain) { if (!bank->irq_domain) {
dev_err(dev, "gpio irq domain add failed\n"); 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) ...@@ -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_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); bank->nr_pins, &exynos_eint_irqd_ops, bank);
if (!bank->irq_domain) { if (!bank->irq_domain) {
dev_err(dev, "wkup irq domain add failed\n"); 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) ...@@ -573,7 +573,7 @@ __init int exynos_eint_wkup_init(struct samsung_pinctrl_drv_data *d)
return -ENXIO; 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; bank->eint_type = EINT_TYPE_WKUP_MUX;
++muxed_banks; ++muxed_banks;
continue; continue;
...@@ -588,7 +588,7 @@ __init int exynos_eint_wkup_init(struct samsung_pinctrl_drv_data *d) ...@@ -588,7 +588,7 @@ __init int exynos_eint_wkup_init(struct samsung_pinctrl_drv_data *d)
} }
for (idx = 0; idx < bank->nr_pins; ++idx) { 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) { if (!irq) {
dev_err(dev, "irq number for eint-%s-%d not found\n", dev_err(dev, "irq number for eint-%s-%d not found\n",
bank->name, idx); bank->name, idx);
......
...@@ -525,7 +525,7 @@ static int s3c24xx_eint_init(struct samsung_pinctrl_drv_data *d) ...@@ -525,7 +525,7 @@ static int s3c24xx_eint_init(struct samsung_pinctrl_drv_data *d)
ops = (bank->eint_offset == 0) ? &s3c24xx_gpf_irq_ops ops = (bank->eint_offset == 0) ? &s3c24xx_gpf_irq_ops
: &s3c24xx_gpg_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); bank->nr_pins, ops, ddata);
if (!bank->irq_domain) { if (!bank->irq_domain) {
dev_err(dev, "wkup irq domain add failed\n"); dev_err(dev, "wkup irq domain add failed\n");
......
...@@ -471,7 +471,7 @@ static int s3c64xx_eint_gpio_init(struct samsung_pinctrl_drv_data *d) ...@@ -471,7 +471,7 @@ static int s3c64xx_eint_gpio_init(struct samsung_pinctrl_drv_data *d)
mask = bank->eint_mask; mask = bank->eint_mask;
nr_eints = fls(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); nr_eints, &s3c64xx_gpio_irqd_ops, bank);
if (!bank->irq_domain) { if (!bank->irq_domain) {
dev_err(dev, "gpio irq domain add failed\n"); 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) ...@@ -743,7 +743,7 @@ static int s3c64xx_eint_eint0_init(struct samsung_pinctrl_drv_data *d)
return -ENOMEM; return -ENOMEM;
ddata->bank = bank; 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); nr_eints, &s3c64xx_eint0_irqd_ops, ddata);
if (!bank->irq_domain) { if (!bank->irq_domain) {
dev_err(dev, "wkup irq domain add failed\n"); dev_err(dev, "wkup irq domain add failed\n");
......
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
#include <linux/init.h> #include <linux/init.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/io.h> #include <linux/io.h>
#include <linux/property.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/err.h> #include <linux/err.h>
#include <linux/gpio/driver.h> #include <linux/gpio/driver.h>
...@@ -966,7 +967,7 @@ static int samsung_gpiolib_register(struct platform_device *pdev, ...@@ -966,7 +967,7 @@ static int samsung_gpiolib_register(struct platform_device *pdev,
gc->base = bank->grange.base; gc->base = bank->grange.base;
gc->ngpio = bank->nr_pins; gc->ngpio = bank->nr_pins;
gc->parent = &pdev->dev; gc->parent = &pdev->dev;
gc->of_node = bank->of_node; gc->fwnode = bank->fwnode;
gc->label = bank->name; gc->label = bank->name;
ret = devm_gpiochip_add_data(&pdev->dev, gc, bank); 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) ...@@ -1009,7 +1010,7 @@ static void samsung_banks_node_put(struct samsung_pinctrl_drv_data *d)
bank = d->pin_banks; bank = d->pin_banks;
for (i = 0; i < d->nr_banks; ++i, ++bank) 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 ...@@ -1020,8 +1021,7 @@ static void samsung_banks_node_get(struct device *dev, struct samsung_pinctrl_dr
{ {
const char *suffix = "-gpio-bank"; const char *suffix = "-gpio-bank";
struct samsung_pin_bank *bank; struct samsung_pin_bank *bank;
struct device_node *node = dev->of_node; struct fwnode_handle *child;
struct device_node *child;
/* Pin bank names are up to 4 characters */ /* Pin bank names are up to 4 characters */
char node_name[20]; char node_name[20];
unsigned int i; unsigned int i;
...@@ -1037,17 +1037,17 @@ static void samsung_banks_node_get(struct device *dev, struct samsung_pinctrl_dr ...@@ -1037,17 +1037,17 @@ static void samsung_banks_node_get(struct device *dev, struct samsung_pinctrl_dr
continue; continue;
} }
for_each_child_of_node(node, child) { for_each_gpiochip_node(dev, child) {
if (!of_find_property(child, "gpio-controller", NULL)) struct device_node *np = to_of_node(child);
continue;
if (of_node_name_eq(child, node_name)) if (of_node_name_eq(np, node_name))
break; break;
else if (of_node_name_eq(child, bank->name)) if (of_node_name_eq(np, bank->name))
break; break;
} }
if (child) if (child)
bank->of_node = child; bank->fwnode = child;
else else
dev_warn(dev, "Missing node for bank %s - invalid DTB\n", dev_warn(dev, "Missing node for bank %s - invalid DTB\n",
bank->name); bank->name);
......
...@@ -165,7 +165,7 @@ struct samsung_pin_bank { ...@@ -165,7 +165,7 @@ struct samsung_pin_bank {
u32 pin_base; u32 pin_base;
void *soc_priv; void *soc_priv;
struct device_node *of_node; struct fwnode_handle *fwnode;
struct samsung_pinctrl_drv_data *drvdata; struct samsung_pinctrl_drv_data *drvdata;
struct irq_domain *irq_domain; struct irq_domain *irq_domain;
struct gpio_chip gpio_chip; struct gpio_chip gpio_chip;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment