| /* -*- mode:c -*- |
| * |
| * Copyright (c) 2014 The Chromium OS Authors. All rights reserved. |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| |
| #ifndef GPIO_PIN |
| #error "Your architecture must define GPIO_PIN and it did not." |
| #endif |
| |
| #ifndef GPIO_PIN_MASK |
| #error "Your architecture must define GPIO_PIN_MASK and it did not." |
| #endif |
| |
| /* |
| * The GPIO macro is used to define a new GPIO pin name and function. |
| * |
| * The name is used to populate the gpio_signal enum by first |
| * prepending GPIO_ to the name. It is also used to construct the |
| * string name that is presented in the shell interface. The pin |
| * parameter should use PIN macro and will be expand to GPIO_PIN |
| * defined on each board. The flags parameter is passed on to the |
| * gpio_info directly. |
| */ |
| #ifndef GPIO |
| #define GPIO(name, pin, flags) |
| #endif |
| |
| /* |
| * The GPIO_INT macro is used to define a GPIOs that have an IRQ handler. |
| * |
| * The IRQ handler pointers are stored as elements in the gpio_irq_handlers |
| * array. |
| */ |
| #ifndef GPIO_INT |
| #define GPIO_INT(name, 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, pinmasks should use PIN_MASK |
| * and will be expanded as GPIO_PIN_MASK defined in each config_chip.h. |
| */ |
| #ifndef ALTERNATE |
| #define ALTERNATE(pinmask, function, module, flags) |
| #endif |
| |
| /* |
| * The UNIMPLEMENTED macro is used to define a GPIO that doesn't actually exist. |
| * |
| * Some GPIO names are well known and used by generic code, ENTERING_RW and WP_L |
| * are examples. If a particular board doesn't have a GPIO assigned to such a |
| * function/name then it should specify that that GPIO is not implemented using |
| * the UNIMPLEMENTED macro below in the board gpio.inc file. This macro creates |
| * an entry in the gpio_signal enum and the gpio_list array that is initialized |
| * to use the DUMMY_GPIO_BANK and a bitmask of zero. The chip GPIO layer is |
| * implemented such that writes to and reads from DUMMY_GPIO_BANK with a bitmask |
| * of zero are harmless. |
| * |
| * This allows common code that expects these GPIOs to exist to compile and have |
| * some reduced functionality. |
| */ |
| #ifndef UNIMPLEMENTED |
| #define UNIMPLEMENTED(name) |
| #endif |
| |
| #include "gpio.inc" |
| |
| /* |
| * Once the gpio.inc file has been included these macros are no longer needed. |
| */ |
| #undef GPIO |
| #undef GPIO_INT |
| #undef ALTERNATE |
| #undef UNIMPLEMENTED |