Hi Hans, On 6 August 2015 at 12:13, Hans de Goede <hdego...@redhat.com> wrote: > sun6i and later have a couple of io-blocks which are shared between the > main CPU core and the "R" cpu which is small embedded cpu which can be > active while the main system is suspended. > > These gpio banks sit at a different mmio address then the normal banks, > and have a separate devicetree node and compatible, this adds support for > these banks to the sunxi-gpio code when built with device-model support. > > Signed-off-by: Hans de Goede <hdego...@redhat.com> > --- > drivers/gpio/sunxi_gpio.c | 22 ++++++++++++++++++---- > 1 file changed, 18 insertions(+), 4 deletions(-) > > diff --git a/drivers/gpio/sunxi_gpio.c b/drivers/gpio/sunxi_gpio.c > index afa165a..57b78e5 100644 > --- a/drivers/gpio/sunxi_gpio.c > +++ b/drivers/gpio/sunxi_gpio.c > @@ -266,16 +266,28 @@ static int gpio_sunxi_bind(struct udevice *parent) > { > struct sunxi_gpio_platdata *plat = parent->platdata; > struct sunxi_gpio_reg *ctlr; > - int bank; > - int ret; > + int bank, no_banks, ret, start; > > /* If this is a child device, there is nothing to do here */ > if (plat) > return 0; > > + if (fdt_node_check_compatible(gd->fdt_blob, parent->of_offset, > + "allwinner,sun6i-a31-r-pinctrl") == 0) {
If I understand what you are doing here, the correct way is to use a .data field in sunxi_gpio_ids[] below. In any case you should not be checking the compatible string of a parent. > + start = 'L' - 'A'; > + no_banks = 2; /* L & M */ > + } else if (fdt_node_check_compatible(gd->fdt_blob, parent->of_offset, > + "allwinner,sun8i-a23-r-pinctrl") == 0) { > + start = 'L' - 'A'; > + no_banks = 1; /* L only */ > + } else { > + start = 0; > + no_banks = SUNXI_GPIO_BANKS; > + } > + > ctlr = (struct sunxi_gpio_reg *)fdtdec_get_addr(gd->fdt_blob, > parent->of_offset, "reg"); > - for (bank = 0; bank < SUNXI_GPIO_BANKS; bank++) { > + for (bank = 0; bank < no_banks; bank++) { > struct sunxi_gpio_platdata *plat; > struct udevice *dev; > > @@ -283,7 +295,7 @@ static int gpio_sunxi_bind(struct udevice *parent) > if (!plat) > return -ENOMEM; > plat->regs = &ctlr->gpio_bank[bank]; > - plat->bank_name = gpio_bank_name(bank); > + plat->bank_name = gpio_bank_name(start + bank); > plat->gpio_count = SUNXI_GPIOS_PER_BANK; > > ret = device_bind(parent, parent->driver, > @@ -306,6 +318,8 @@ static const struct udevice_id sunxi_gpio_ids[] = { > { .compatible = "allwinner,sun8i-a23-pinctrl" }, > { .compatible = "allwinner,sun8i-a33-pinctrl" }, > { .compatible = "allwinner,sun9i-a80-pinctrl" }, > + { .compatible = "allwinner,sun6i-a31-r-pinctrl" }, > + { .compatible = "allwinner,sun8i-a23-r-pinctrl" }, > { } > }; > > -- > 2.4.3 > > _______________________________________________ > U-Boot mailing list > U-Boot@lists.denx.de > http://lists.denx.de/mailman/listinfo/u-boot Regards, Simon _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot