diff options
-rw-r--r-- | chip/lm4/uart.c | 3 | ||||
-rw-r--r-- | chip/mec1322/uart.c | 5 | ||||
-rw-r--r-- | common/gpio.c | 8 | ||||
-rw-r--r-- | include/gpio.h | 11 |
4 files changed, 21 insertions, 6 deletions
diff --git a/chip/lm4/uart.c b/chip/lm4/uart.c index befe0ec398..6ceffb4acb 100644 --- a/chip/lm4/uart.c +++ b/chip/lm4/uart.c @@ -243,8 +243,7 @@ void uart_enter_dsleep(void) * Set the UART0 RX pin to be a generic GPIO with the flags defined * in the board.c file. */ - gpio_set_flags_by_mask(g.port, g.mask, g.flags); - gpio_set_alternate_function(g.port, g.mask, -1); + gpio_reset(GPIO_UART0_RX); /* Clear any pending GPIO interrupts on the UART0 RX pin. */ LM4_GPIO_ICR(g.port) = g.mask; diff --git a/chip/mec1322/uart.c b/chip/mec1322/uart.c index 3fdb156188..d9922b8ca4 100644 --- a/chip/mec1322/uart.c +++ b/chip/mec1322/uart.c @@ -172,8 +172,6 @@ void uart_init(void) #ifdef CONFIG_LOW_POWER_IDLE void uart_enter_dsleep(void) { - const struct gpio_info g = gpio_list[GPIO_UART0_RX]; - /* Disable the UART interrupt. */ task_disable_irq(MEC1322_IRQ_UART); /* NVIC interrupt for UART=13 */ @@ -181,8 +179,7 @@ void uart_enter_dsleep(void) * Set the UART0 RX pin to be a GPIO-162(fixed pin) interrupt * with the flags defined in the gpio.inc file. */ - gpio_set_flags_by_mask(g.port, g.mask, g.flags); - gpio_set_alternate_function(g.port, g.mask, -1); + gpio_reset(GPIO_UART0_RX); /* power-down/de-activate UART0 */ MEC1322_UART_ACT &= ~(1 << 0); diff --git a/common/gpio.c b/common/gpio.c index 44b77c337e..0fd34d4a79 100644 --- a/common/gpio.c +++ b/common/gpio.c @@ -114,6 +114,14 @@ void gpio_set_flags(enum gpio_signal signal, int flags) gpio_set_flags_by_mask(g->port, g->mask, flags); } +void gpio_reset(enum gpio_signal signal) +{ + const struct gpio_info *g = gpio_list + signal; + + gpio_set_flags_by_mask(g->port, g->mask, g->flags); + gpio_set_alternate_function(g->port, g->mask, -1); +} + const char *gpio_get_name(enum gpio_signal signal) { return gpio_list[signal].name; diff --git a/include/gpio.h b/include/gpio.h index 117cd2a5ba..02bdcc4f6f 100644 --- a/include/gpio.h +++ b/include/gpio.h @@ -192,6 +192,17 @@ void gpio_set_flags(enum gpio_signal signal, int flags); void gpio_set_level(enum gpio_signal signal, int value); /** + * Reset the GPIO flags and alternate function state + * + * This returns the GPIO to it's default state of being a GPIO (not + * configured as an alternate function) with its default flags (those + * specified in gpio.inc when it was defined). + * + * @param signal Signal to reset + */ +void gpio_reset(enum gpio_signal signal); + +/** * Enable interrupts for the signal. * * The signal must have been defined with |