diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/gpio.wrap | 20 | ||||
-rw-r--r-- | include/gpio_list.h | 13 |
2 files changed, 32 insertions, 1 deletions
diff --git a/include/gpio.wrap b/include/gpio.wrap index 941d97ac67..cf4fbb319a 100644 --- a/include/gpio.wrap +++ b/include/gpio.wrap @@ -16,7 +16,24 @@ * parameters are passed on to the gpio_info directly. */ #ifndef GPIO -#define GPIO(name, port, pin, function, signal) +#define GPIO(name, port, pin, flags, signal) +#endif + +/* + * The ALTERNATE macro is used associate a GPIO with an alternate function. + * + * Alternate functions allow hardware peripherals access to GPIO pins. + * Modules use gpio_config_module to enable and disable the alternate functions + * of GPIOs assigned to that module. So if the module parameter is MODULE_UART + * then when the uart_init function is called the GPIO will be switched to its + * alternate function mode. The function parameter is chip/variant specific + * and will usually need to be looked up in the datasheet. The flags parameter + * has the same meaning as in the GPIO macro above. This macro can assign + * multiple pins on the same port to a module, the second parameter is the + * bitmask of pins to be assigned. + */ +#ifndef ALTERNATE +#define ALTERNATE(port, mask, function, module, flags) #endif /* @@ -44,4 +61,5 @@ * Once the gpio.inc file has been included these macros are no longer needed. */ #undef GPIO +#undef ALTERNATE #undef UNIMPLEMENTED diff --git a/include/gpio_list.h b/include/gpio_list.h index 6d41fb9115..9077c17fd2 100644 --- a/include/gpio_list.h +++ b/include/gpio_list.h @@ -15,3 +15,16 @@ const struct gpio_info gpio_list[] = { }; BUILD_ASSERT(ARRAY_SIZE(gpio_list) == GPIO_COUNT); + +/* + * Construct the gpio_alt_funcs array. This array is used by gpio_config_module + * to enable and disable GPIO alternate functions on a module by module basis. + */ +#define ALTERNATE(port, mask, function, module, flags) \ + {GPIO_##port, mask, function, module, flags}, + +const struct gpio_alt_func gpio_alt_funcs[] = { + #include "gpio.wrap" +}; + +const int gpio_alt_funcs_count = ARRAY_SIZE(gpio_alt_funcs); |