summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--chip/lm4/uart.c3
-rw-r--r--chip/mec1322/uart.c5
-rw-r--r--common/gpio.c8
-rw-r--r--include/gpio.h11
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