summaryrefslogtreecommitdiff
path: root/common/gpio.c
diff options
context:
space:
mode:
authorAnton Staaf <robotboy@chromium.org>2016-02-22 11:37:32 -0800
committerchrome-bot <chrome-bot@chromium.org>2016-02-22 23:50:53 -0800
commit98b0e13f606aefb7e2964bfa0358188d4fd31cfe (patch)
tree0262bf0687de2811839187f7b409cacacdfd3cea /common/gpio.c
parent8ae8dca6d4dd709c5c4909902c650f9780d113fb (diff)
downloadchrome-ec-98b0e13f606aefb7e2964bfa0358188d4fd31cfe.tar.gz
GPIO: Remove gpio_alt_funcs table from common header
Now that the cr50 no longer uses this array to store its pinmux config we can move it out of the header file, removing it from the public interface for GPIO code. This allows us to start modifying this struct more easily. Signed-off-by: Anton Staaf <robotboy@chromium.org> BRANCH=None BUG=None TEST=make buildall -j Change-Id: I9b4ca8b678b102bb9b63ccffe23bf2dc87aeb44a Reviewed-on: https://chromium-review.googlesource.com/328824 Commit-Ready: Anton Staaf <robotboy@chromium.org> Tested-by: Anton Staaf <robotboy@chromium.org> Reviewed-by: Aseda Aboagye <aaboagye@chromium.org> Reviewed-by: Bill Richardson <wfrichar@chromium.org>
Diffstat (limited to 'common/gpio.c')
-rw-r--r--common/gpio.c33
1 files changed, 32 insertions, 1 deletions
diff --git a/common/gpio.c b/common/gpio.c
index 167207318f..e8652e7e9e 100644
--- a/common/gpio.c
+++ b/common/gpio.c
@@ -9,6 +9,7 @@
#include "console.h"
#include "gpio.h"
#include "host_command.h"
+#include "registers.h"
#include "system.h"
#include "util.h"
@@ -58,6 +59,35 @@ static int last_val_changed(int i, int v)
}
}
+/* GPIO alternate function structure */
+struct gpio_alt_func {
+ /* Port base address */
+ uint32_t port;
+
+ /* Bitmask on that port (multiple bits allowed) */
+ uint32_t mask;
+
+ /* Alternate function number */
+ uint8_t func;
+
+ /* Module ID (as uint8_t, since enum would be 32-bit) */
+ uint8_t module_id;
+
+ /* Flags (GPIO_*; see above). */
+ uint16_t flags;
+};
+
+/*
+ * 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(pinmask, function, module, flags) \
+ {GPIO_##pinmask, function, module, flags},
+
+static const struct gpio_alt_func gpio_alt_funcs[] = {
+ #include "gpio.wrap"
+};
+
/*
* GPIO_CONFIG_ALL_PORTS signifies a "don't care" for the GPIO port. This is
* used in gpio_config_pins(). When the port parameter is set to this, the
@@ -74,7 +104,8 @@ static int gpio_config_pins(enum module_id id,
int rv = EC_ERROR_INVAL;
/* Find pins and set to alternate functions */
- for (af = gpio_alt_funcs; af < gpio_alt_funcs + gpio_alt_funcs_count;
+ for (af = gpio_alt_funcs;
+ af < gpio_alt_funcs + ARRAY_SIZE(gpio_alt_funcs);
af++) {
if (af->module_id != id)
continue; /* Pins for some other module */