diff --git a/lib/gpio.c b/lib/gpio.c index 878a9f795..de253aae2 100644 --- a/lib/gpio.c +++ b/lib/gpio.c @@ -13,6 +13,15 @@ inline void gpio_data(volatile uint64_t data) *GPIO_DATA1 = (data >> 32); } +inline uint64_t gpio_data_get(volatile uint64_t bits) { + uint64_t rdata = 0; + + rdata = *GPIO_DATA0 & (bits & 0xffffffff); + rdata |= (*GPIO_DATA1 & (bits >> 32)) << 32; + + return rdata; +} + inline void gpio_pad_pu_en(volatile uint64_t data) { *GPIO_PAD_PU_EN0 = (data & 0xffffffff); diff --git a/lib/include/gpio.h b/lib/include/gpio.h index 80dce7a62..bc473d04e 100644 --- a/lib/include/gpio.h +++ b/lib/include/gpio.h @@ -27,6 +27,7 @@ inline void gpio_pad_dir(volatile uint64_t data); inline void gpio_data(volatile uint64_t data); +inline uint64_t gpio_data_get(volatile uint64_t bits); inline void gpio_pad_pu_en(volatile uint64_t data); inline void gpio_data_sel(volatile uint64_t data); inline void gpio_data_pu_sel(volatile uint64_t data);