diff options
-rw-r--r-- | chip/it83xx/gpio.c | 2 | ||||
-rw-r--r-- | chip/it83xx/registers.h | 46 |
2 files changed, 26 insertions, 22 deletions
diff --git a/chip/it83xx/gpio.c b/chip/it83xx/gpio.c index 89f5f36500..12017c9f26 100644 --- a/chip/it83xx/gpio.c +++ b/chip/it83xx/gpio.c @@ -434,7 +434,7 @@ void gpio_set_alternate_function(uint32_t port, uint32_t mask, test_mockable int gpio_get_level(enum gpio_signal signal) { - return (IT83XX_GPIO_DATA(gpio_list[signal].port) & + return (IT83XX_GPIO_DATA_MIRROR(gpio_list[signal].port) & gpio_list[signal].mask) ? 1 : 0; } diff --git a/chip/it83xx/registers.h b/chip/it83xx/registers.h index d30d8c754e..28e635a0a2 100644 --- a/chip/it83xx/registers.h +++ b/chip/it83xx/registers.h @@ -815,6 +815,8 @@ enum { struct gpio_reg_t { /* GPIO port data register (bit mapping to pin) */ uint32_t reg_gpdr; + /* GPIO port data mirror register (bit mapping to pin) */ + uint32_t reg_gpdmr; /* GPIO port output type register (bit mapping to pin) */ uint32_t reg_gpotr; /* GPIO port control register (byte mapping to pin) */ @@ -823,29 +825,29 @@ struct gpio_reg_t { /* GPIO group index convert to GPIO data/output type/ctrl group address */ static const struct gpio_reg_t gpio_group_to_reg[] = { - /* GPDR, GPOTR, GPCR */ - [GPIO_A] = { 0x00F01601, 0x00F01671, 0x00F01610 }, - [GPIO_B] = { 0x00F01602, 0x00F01672, 0x00F01618 }, - [GPIO_C] = { 0x00F01603, 0x00F01673, 0x00F01620 }, - [GPIO_D] = { 0x00F01604, 0x00F01674, 0x00F01628 }, - [GPIO_E] = { 0x00F01605, 0x00F01675, 0x00F01630 }, - [GPIO_F] = { 0x00F01606, 0x00F01676, 0x00F01638 }, - [GPIO_G] = { 0x00F01607, 0x00F01677, 0x00F01640 }, - [GPIO_H] = { 0x00F01608, 0x00F01678, 0x00F01648 }, - [GPIO_I] = { 0x00F01609, 0x00F01679, 0x00F01650 }, - [GPIO_J] = { 0x00F0160a, 0x00F0167a, 0x00F01658 }, - [GPIO_K] = { 0x00F0160b, 0x00F0167b, 0x00F01690 }, - [GPIO_L] = { 0x00F0160c, 0x00F0167c, 0x00F01698 }, - [GPIO_M] = { 0x00F0160d, 0x00F0167d, 0x00F016a0 }, + /* GPDR(set), GPDMR(get), GPOTR, GPCR */ + [GPIO_A] = { 0x00F01601, 0x00F01661, 0x00F01671, 0x00F01610 }, + [GPIO_B] = { 0x00F01602, 0x00F01662, 0x00F01672, 0x00F01618 }, + [GPIO_C] = { 0x00F01603, 0x00F01663, 0x00F01673, 0x00F01620 }, + [GPIO_D] = { 0x00F01604, 0x00F01664, 0x00F01674, 0x00F01628 }, + [GPIO_E] = { 0x00F01605, 0x00F01665, 0x00F01675, 0x00F01630 }, + [GPIO_F] = { 0x00F01606, 0x00F01666, 0x00F01676, 0x00F01638 }, + [GPIO_G] = { 0x00F01607, 0x00F01667, 0x00F01677, 0x00F01640 }, + [GPIO_H] = { 0x00F01608, 0x00F01668, 0x00F01678, 0x00F01648 }, + [GPIO_I] = { 0x00F01609, 0x00F01669, 0x00F01679, 0x00F01650 }, + [GPIO_J] = { 0x00F0160A, 0x00F0166A, 0x00F0167A, 0x00F01658 }, + [GPIO_K] = { 0x00F0160B, 0x00F0166B, 0x00F0167B, 0x00F01690 }, + [GPIO_L] = { 0x00F0160C, 0x00F0166C, 0x00F0167C, 0x00F01698 }, + [GPIO_M] = { 0x00F0160D, 0x00F0166D, 0x00F0167D, 0x00F016a0 }, #if defined(CHIP_FAMILY_IT8XXX1) || defined(CHIP_FAMILY_IT8XXX2) - [GPIO_O] = { 0x00F03E01, 0x00F03E71, 0x00F03E10 }, - [GPIO_P] = { 0x00F03E02, 0x00F03E72, 0x00F03E18 }, - [GPIO_Q] = { 0x00F03E03, 0x00F03E73, 0x00F03E20 }, - [GPIO_R] = { 0x00F03E04, 0x00F03E74, 0x00F03E28 }, + [GPIO_O] = { 0x00F03E01, 0x00F03E61, 0x00F03E71, 0x00F03E10 }, + [GPIO_P] = { 0x00F03E02, 0x00F03E62, 0x00F03E72, 0x00F03E18 }, + [GPIO_Q] = { 0x00F03E03, 0x00F03E63, 0x00F03E73, 0x00F03E20 }, + [GPIO_R] = { 0x00F03E04, 0x00F03E64, 0x00F03E74, 0x00F03E28 }, #endif - [GPIO_KSI] = { 0x00F01D09, -1, -1 }, - [GPIO_KSO_H] = { 0x00F01D0C, -1, -1 }, - [GPIO_KSO_L] = { 0x00F01D0F, -1, -1 }, + [GPIO_KSI] = { 0x00F01D09, 0x00F01D09, -1, -1 }, + [GPIO_KSO_H] = { 0x00F01D0C, 0x00F01D0C, -1, -1 }, + [GPIO_KSO_L] = { 0x00F01D0F, 0x00F01D0F, -1, -1 }, }; BUILD_ASSERT(ARRAY_SIZE(gpio_group_to_reg) == (COUNT)); @@ -853,6 +855,8 @@ BUILD_ASSERT(ARRAY_SIZE(gpio_group_to_reg) == (COUNT)); #define IT83XX_GPIO_DATA(port) \ REG8(gpio_group_to_reg[port].reg_gpdr) +#define IT83XX_GPIO_DATA_MIRROR(port) \ + REG8(gpio_group_to_reg[port].reg_gpdmr) #define IT83XX_GPIO_GPOT(port) \ REG8(gpio_group_to_reg[port].reg_gpotr) #define IT83XX_GPIO_CTRL(port, pin_offset) \ |