]> git.kernelconcepts.de Git - karo-tx-uboot.git/blobdiff - drivers/gpio/sunxi_gpio.c
sunxi: gpio: Add support for the gpio banks which are part of the R-io cluster
[karo-tx-uboot.git] / drivers / gpio / sunxi_gpio.c
index afa165ab784d91bcf753f474bcde82503743fa26..57b78e55e23b9ef048bb4edd69ad110443ec9384 100644 (file)
@@ -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) {
+               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" },
        { }
 };