diff options
Diffstat (limited to 'chip/g/gpio.c')
-rw-r--r-- | chip/g/gpio.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/chip/g/gpio.c b/chip/g/gpio.c index 1c264de87c..90e5c4f1c5 100644 --- a/chip/g/gpio.c +++ b/chip/g/gpio.c @@ -147,6 +147,7 @@ static const struct pinmux pinmux_list[] = { #include "gpio.wrap" }; +/* Return true if DIO should be a digital input */ static int connect_dio_to_peripheral(struct pinmux const *p) { if (p->flags & DIO_OUTPUT) @@ -158,6 +159,7 @@ static int connect_dio_to_peripheral(struct pinmux const *p) return p->flags & DIO_INPUT; } +/* Return true if DIO should be a digital input */ static int connect_dio_to_gpio(struct pinmux const *p) { const struct gpio_info *g = gpio_list + p->signal; @@ -169,6 +171,16 @@ static int connect_dio_to_gpio(struct pinmux const *p) if ((g->flags & GPIO_INPUT) || (p->flags & DIO_INPUT)) GET_GPIO_SEL_REG(g->port, bitnum) = p->dio.value; + if (g->flags & GPIO_PULL_UP) + REG_WRITE_MLV(DIO_CTL_REG(p->dio.offset), + DIO_CTL_PU_MASK, + DIO_CTL_PU_LSB, 1); + + if (g->flags & GPIO_PULL_DOWN) + REG_WRITE_MLV(DIO_CTL_REG(p->dio.offset), + DIO_CTL_PD_MASK, + DIO_CTL_PD_LSB, 1); + return (g->flags & GPIO_INPUT) || (p->flags & DIO_INPUT); } |