diff options
Diffstat (limited to 'include/gpio_list.h')
-rw-r--r-- | include/gpio_list.h | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/include/gpio_list.h b/include/gpio_list.h index 70d7bfc4b2..4fed0d60d6 100644 --- a/include/gpio_list.h +++ b/include/gpio_list.h @@ -52,3 +52,39 @@ const int gpio_ih_count = ARRAY_SIZE(gpio_irq_handlers); #define PIN(a, b...) static const int _pin_ ## a ## _ ## b \ __attribute__((unused, section(".unused"))) = __LINE__; #include "gpio.wrap" + +#include "ioexpander.h" +/* + * Define the IO expander IO in gpio.inc by the format: + * IOEX(name, EXPIN(ioex_port, port, offset), flags) + * - name: the name of this IO pin + * - EXPIN(ioex, port, offset) + * - ioex: the IO expander port (defined in board.c) this IO + * pin belongs to. + * - port: the port number in the IO expander chip. + * - offset: the bit offset in the port above. + * - flags: the same as the flags of GPIO. + * + */ +#define IOEX_EXPIN(ioex, port, index) (ioex), (port), BIT(index) + +#define IOEX(name, expin, flags) {#name, IOEX_##expin, flags}, + +/* IO expander signal list. */ +const struct ioex_info ioex_list[] = { + #include "gpio.wrap" +}; +BUILD_ASSERT(ARRAY_SIZE(ioex_list) == IOEX_COUNT); + +#define IOEX(name, expin, flags) expin + +/* The compiler will complain if we use the same name twice or the controller + * number declared is greater or equal to CONFIG_IO_EXPANDER_PORT_COUNT. + * The linker ignores anything that gets by. + */ +#define EXPIN(a, b, c...) \ + static const int _expin_ ## a ## _ ## b ## _ ## c \ + __attribute__((unused, section(".unused"))) = __LINE__; \ + BUILD_ASSERT(a < CONFIG_IO_EXPANDER_PORT_COUNT); + +#include "gpio.wrap" |