]> git.kernelconcepts.de Git - karo-tx-uboot.git/blobdiff - arch/arm/include/asm/arch-at91/gpio.h
Merge branch 'karo-tx-uboot' into kc-merge
[karo-tx-uboot.git] / arch / arm / include / asm / arch-at91 / gpio.h
index 0700427fa4b79165bda89887afcb67b1de4f06ec..fd3743f6ac99fa694c36e6f0ca115f4221790346 100644 (file)
@@ -16,7 +16,7 @@
 
 #ifdef CONFIG_ATMEL_LEGACY
 
-#define PIN_BASE               32
+#define PIN_BASE               0
 
 #define MAX_GPIO_BANKS         5
 
@@ -203,7 +203,7 @@ static inline void *pin_to_controller(unsigned pin)
 {
        pin -= PIN_BASE;
        pin /= 32;
-       return (void *)(at91_pios[pin]);
+       return at91_pios[pin];
 }
 
 static inline unsigned pin_to_mask(unsigned pin)
@@ -214,21 +214,51 @@ static inline unsigned pin_to_mask(unsigned pin)
 
 /* The following macros are need for backward compatibility */
 #define at91_set_GPIO_periph(x, y) \
-       at91_set_gpio_periph((x - PIN_BASE) / 32,(x % 32), y)
+       at91_set_pio_periph(((x) - PIN_BASE) / 32, (x) % 32, y)
 #define at91_set_A_periph(x, y) \
-       at91_set_a_periph((x - PIN_BASE) / 32,(x % 32), y)
+       at91_set_a_periph(((x) - PIN_BASE) / 32, (x) % 32, y)
 #define at91_set_B_periph(x, y) \
-       at91_set_b_periph((x - PIN_BASE) / 32,(x % 32), y)
+       at91_set_b_periph(((x) - PIN_BASE) / 32, (x) % 32, y)
 #define at91_set_gpio_output(x, y) \
-       at91_set_pio_output((x - PIN_BASE) / 32,(x % 32), y)
+       at91_set_pio_output(((x) - PIN_BASE) / 32, (x) % 32, y)
 #define at91_set_gpio_input(x, y) \
-       at91_set_pio_input((x - PIN_BASE) / 32,(x % 32), y)
+       at91_set_pio_input(((x) - PIN_BASE) / 32, (x) % 32, y)
 #define at91_set_gpio_value(x, y) \
-       at91_set_pio_value((x - PIN_BASE) / 32,(x % 32), y)
+       at91_set_pio_value(((x) - PIN_BASE) / 32, (x) % 32, y)
 #define at91_get_gpio_value(x) \
-       at91_get_pio_value((x - PIN_BASE) / 32,(x % 32))
+       at91_get_pio_value(((x) - PIN_BASE) / 32, (x) % 32)
 #else
-#define at91_set_gpio_value(x, y)      at91_set_pio_value(x, y)
-#define at91_get_gpio_value(x)         at91_get_pio_value(x)
-#endif
+#define at91_set_gpio_value(x, y)      at91_set_pio_value(at91_gpio_to_port(x), \
+                                                       at91_gpio_to_pin(x), y)
+#define at91_get_gpio_value(x)         at91_get_pio_value(at91_gpio_to_port(x), \
+                                                       at91_gpio_to_pin(x))
 #endif
+
+#define GPIO_PIOA_BASE  0
+#define GPIO_PIOB_BASE  (GPIO_PIOA_BASE + 32)
+#define GPIO_PIOC_BASE  (GPIO_PIOB_BASE + 32)
+#define GPIO_PIOD_BASE  (GPIO_PIOC_BASE + 32)
+#define GPIO_PIOE_BASE  (GPIO_PIOD_BASE + 32)
+#define GPIO_PIN_PA(x)  (GPIO_PIOA_BASE + (x))
+#define GPIO_PIN_PB(x)  (GPIO_PIOB_BASE + (x))
+#define GPIO_PIN_PC(x)  (GPIO_PIOC_BASE + (x))
+#define GPIO_PIN_PD(x)  (GPIO_PIOD_BASE + (x))
+#define GPIO_PIN_PE(x)  (GPIO_PIOE_BASE + (x))
+
+static inline unsigned at91_gpio_to_port(unsigned gpio)
+{
+       return gpio / 32;
+}
+
+static inline unsigned at91_gpio_to_pin(unsigned gpio)
+{
+       return gpio % 32;
+}
+
+/* Platform data for each GPIO port */
+struct at91_port_platdata {
+       uint32_t base_addr;
+       const char *bank_name;
+};
+
+#endif /* __ASM_ARCH_AT91_GPIO_H */