Merge git://git.denx.de/u-boot-dm
[oweals/u-boot.git] / drivers / gpio / s5p_gpio.c
index 6c41a42c177351adcd0d6f96ff81ae2a0f1036ee..377fed467fb323a5d4beb721a1ac7efc33f2eebb 100644 (file)
@@ -285,7 +285,7 @@ static const struct dm_gpio_ops gpio_exynos_ops = {
 
 static int gpio_exynos_probe(struct udevice *dev)
 {
-       struct gpio_dev_priv *uc_priv = dev->uclass_priv;
+       struct gpio_dev_priv *uc_priv = dev_get_uclass_priv(dev);
        struct exynos_bank_info *priv = dev->priv;
        struct exynos_gpio_platdata *plat = dev->platdata;
 
@@ -316,8 +316,7 @@ static int gpio_exynos_bind(struct udevice *parent)
        if (plat)
                return 0;
 
-       base = (struct s5p_gpio_bank *)fdtdec_get_addr(gd->fdt_blob,
-                                                  parent->of_offset, "reg");
+       base = (struct s5p_gpio_bank *)dev_get_addr(parent);
        for (node = fdt_first_subnode(blob, parent->of_offset), bank = base;
             node > 0;
             node = fdt_next_subnode(blob, node), bank++) {
@@ -331,18 +330,22 @@ static int gpio_exynos_bind(struct udevice *parent)
                plat = calloc(1, sizeof(*plat));
                if (!plat)
                        return -ENOMEM;
-               reg = fdtdec_get_addr(blob, node, "reg");
-               if (reg != FDT_ADDR_T_NONE)
-                       bank = (struct s5p_gpio_bank *)((ulong)base + reg);
-               plat->bank = bank;
-               plat->bank_name = fdt_get_name(blob, node, NULL);
-               debug("dev at %p: %s\n", bank, plat->bank_name);
 
+               plat->bank_name = fdt_get_name(blob, node, NULL);
                ret = device_bind(parent, parent->driver,
-                                       plat->bank_name, plat, -1, &dev);
+                                 plat->bank_name, plat, -1, &dev);
                if (ret)
                        return ret;
-               dev->of_offset = parent->of_offset;
+
+               dev->of_offset = node;
+
+               reg = dev_get_addr(dev);
+               if (reg != FDT_ADDR_T_NONE)
+                       bank = (struct s5p_gpio_bank *)((ulong)base + reg);
+
+               plat->bank = bank;
+
+               debug("dev at %p: %s\n", bank, plat->bank_name);
        }
 
        return 0;