*
* Copyright (C) 2005 HP Labs
*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
+ * SPDX-License-Identifier: GPL-2.0+
*/
#ifndef __ASM_ARCH_AT91_GPIO_H
#include <asm/arch/at91_pio.h>
#include <asm/arch/hardware.h>
-#ifdef CONFIG_AT91_LEGACY
+#ifdef CONFIG_ATMEL_LEGACY
-#define PIN_BASE 32
+#define PIN_BASE 0
#define MAX_GPIO_BANKS 5
#define AT91_PIN_PE31 (PIN_BASE + 0x80 + 31)
static unsigned long at91_pios[] = {
- AT91_PIOA,
- AT91_PIOB,
- AT91_PIOC,
-#ifdef AT91_PIOD
- AT91_PIOD,
-#ifdef AT91_PIOE
- AT91_PIOE
+ ATMEL_BASE_PIOA,
+ ATMEL_BASE_PIOB,
+ ATMEL_BASE_PIOC,
+#ifdef ATMEL_BASE_PIOD
+ ATMEL_BASE_PIOD,
+#ifdef ATMEL_BASE_PIOE
+ ATMEL_BASE_PIOE
#endif
#endif
};
{
pin -= PIN_BASE;
pin /= 32;
- return (void *)(AT91_BASE_SYS + at91_pios[pin]);
+ return at91_pios[pin];
}
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 */