diff options
author | Anton Staaf <robotboy@chromium.org> | 2016-02-22 10:57:32 -0800 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2016-02-22 23:50:53 -0800 |
commit | 8ae8dca6d4dd709c5c4909902c650f9780d113fb (patch) | |
tree | 4d5b59940e3db79c45c5cac1c51e50a8bb14b479 /chip | |
parent | 0a644a91250671bb20a7815105ec532b42da19c1 (diff) | |
download | chrome-ec-8ae8dca6d4dd709c5c4909902c650f9780d113fb.tar.gz |
cr50: Switch from ALTERNATE to PINMUX macros
Previously the g chip and cr50 board abused the ALTERNATE macro to
encode the pinmux configuration. This switches them over to using a
PINMUX macro that is designed for this purpose.
Signed-off-by: Anton Staaf <robotboy@chromium.org>
BRANCH=None
BUG=None
TEST=make buildall -j
Change-Id: I5c1f70b7aa92d87cc105e672aa66aee7f267c9a2
Reviewed-on: https://chromium-review.googlesource.com/328823
Commit-Ready: Anton Staaf <robotboy@chromium.org>
Tested-by: Anton Staaf <robotboy@chromium.org>
Reviewed-by: Bill Richardson <wfrichar@chromium.org>
Diffstat (limited to 'chip')
-rw-r--r-- | chip/g/gpio.c | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/chip/g/gpio.c b/chip/g/gpio.c index 7695e859db..ad5f199215 100644 --- a/chip/g/gpio.c +++ b/chip/g/gpio.c @@ -84,9 +84,25 @@ void gpio_set_alternate_function(uint32_t port, uint32_t mask, int func) /* This HW feature is not present in the Cr50 ARM core */ } +struct pinmux { + uint32_t signal; + uint32_t dio; + uint16_t flags; +}; -static void connect_pinmux(uint32_t signal, uint32_t dio, uint16_t flags) +#define GPIO_GPIO(name) GPIO_##name +#define PINMUX(signal, dio, flags) {GPIO_##signal, DIO(dio), flags}, + +static const struct pinmux pinmux_list[] = { + #include "gpio.wrap" +}; + +static void connect_pinmux(struct pinmux const *p) { + uint32_t signal = p->signal; + uint32_t dio = p->dio; + uint16_t flags = p->flags; + if (flags & DIO_ENABLE_DIRECT_INPUT) { /* enable digital input for direct wired peripheral */ REG_WRITE_MLV(DIO_CTL_REG(dio), DIO_CTL_IE_MASK, @@ -142,7 +158,6 @@ int gpio_disable_interrupt(enum gpio_signal signal) void gpio_pre_init(void) { const struct gpio_info *g = gpio_list; - const struct gpio_alt_func *af = gpio_alt_funcs; int i; @@ -155,8 +170,8 @@ void gpio_pre_init(void) GC_PMU_PERICLKSET0_DGPIO1_CLK_LSB, 1); /* Set up the pinmux */ - for (i = 0; i < gpio_alt_funcs_count; i++, af++) - connect_pinmux(af->port, af->mask, af->flags); + for (i = 0; i < ARRAY_SIZE(pinmux_list); i++) + connect_pinmux(pinmux_list + i); /* Set up ARM core GPIOs */ for (i = 0; i < GPIO_COUNT; i++, g++) |