Merge branch 'fpga' of git://www.denx.de/git/u-boot-microblaze
[oweals/u-boot.git] / drivers / gpio / sunxi_gpio.c
index 44135e5bb746b38b987128605d3619050eef9f41..62960929ade9cca68185f758d482928aef0fec4f 100644 (file)
@@ -18,6 +18,9 @@
 #include <asm/io.h>
 #include <asm/gpio.h>
 #include <dm/device-internal.h>
+#ifdef CONFIG_AXP209_POWER
+#include <axp209.h>
+#endif
 
 DECLARE_GLOBAL_DATA_PTR;
 
@@ -73,13 +76,22 @@ int gpio_free(unsigned gpio)
 
 int gpio_direction_input(unsigned gpio)
 {
+#ifdef AXP_GPIO
+       if (gpio >= SUNXI_GPIO_AXP0_START)
+               return axp_gpio_direction_input(gpio - SUNXI_GPIO_AXP0_START);
+#endif
        sunxi_gpio_set_cfgpin(gpio, SUNXI_GPIO_INPUT);
 
-       return sunxi_gpio_input(gpio);
+       return 0;
 }
 
 int gpio_direction_output(unsigned gpio, int value)
 {
+#ifdef AXP_GPIO
+       if (gpio >= SUNXI_GPIO_AXP0_START)
+               return axp_gpio_direction_output(gpio - SUNXI_GPIO_AXP0_START,
+                                                value);
+#endif
        sunxi_gpio_set_cfgpin(gpio, SUNXI_GPIO_OUTPUT);
 
        return sunxi_gpio_output(gpio, value);
@@ -87,11 +99,19 @@ int gpio_direction_output(unsigned gpio, int value)
 
 int gpio_get_value(unsigned gpio)
 {
+#ifdef AXP_GPIO
+       if (gpio >= SUNXI_GPIO_AXP0_START)
+               return axp_gpio_get_value(gpio - SUNXI_GPIO_AXP0_START);
+#endif
        return sunxi_gpio_input(gpio);
 }
 
 int gpio_set_value(unsigned gpio, int value)
 {
+#ifdef AXP_GPIO
+       if (gpio >= SUNXI_GPIO_AXP0_START)
+               return axp_gpio_set_value(gpio - SUNXI_GPIO_AXP0_START, value);
+#endif
        return sunxi_gpio_output(gpio, value);
 }
 
@@ -101,6 +121,16 @@ int sunxi_name_to_gpio(const char *name)
        int groupsize = 9 * 32;
        long pin;
        char *eptr;
+
+#ifdef AXP_GPIO
+       if (strncasecmp(name, "AXP0-", 5) == 0) {
+               name += 5;
+               pin = simple_strtol(name, &eptr, 10);
+               if (!*name || *eptr)
+                       return -1;
+               return SUNXI_GPIO_AXP0_START + pin;
+       }
+#endif
        if (*name == 'P' || *name == 'p')
                name++;
        if (*name >= 'A') {