summaryrefslogtreecommitdiff
path: root/include/gpio.wrap
blob: 1eb9f3643ed85ff59f25b3491ed67581fa72e268 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
/* -*- 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.
 */

/*
 * 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.  Similarly,
 * the port parameter has GPIO_ prepended to it before it is used to
 * initialize the port base address of a gpio_info struct.  The pin
 * number is used to create a bitmask.  The flags parameter is passed
 * on to the gpio_info directly.
 */
#ifndef GPIO
#define GPIO(name, port, 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, 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

/*
 * 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