diff options
Diffstat (limited to 'chip/g/gpio.c')
-rw-r--r-- | chip/g/gpio.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/chip/g/gpio.c b/chip/g/gpio.c index 122f7f1f24..6f306b78ef 100644 --- a/chip/g/gpio.c +++ b/chip/g/gpio.c @@ -41,6 +41,31 @@ void gpio_set_level(enum gpio_signal signal, int value) set_one_gpio_bit(g->port, g->mask, value); } +int gpio_get_flags_by_mask(uint32_t port, uint32_t mask) +{ + uint32_t flags = 0; + uint32_t val = 0; + + /* Only one bit must be set. */ + if ((mask != (mask & -mask)) || (mask == 0)) + return 0; + + /* Check mode. */ + /* ARM DDI 0479B: 3.5.2 */ + val = GR_GPIO_SETDOUTEN(port) & mask; + if (val) { + flags |= GPIO_OUTPUT; + val = GR_GPIO_DOUT(port) & mask; + if (val) + flags |= GPIO_HIGH; + else + flags |= GPIO_LOW; + } else + flags |= GPIO_INPUT; + + return flags; +} + void gpio_set_flags_by_mask(uint32_t port, uint32_t mask, uint32_t flags) { /* Only matters for outputs */ |