From 9ae826e9251bcdfa739cd52d042009bba3069c1b Mon Sep 17 00:00:00 2001 From: Gustavo Henrique Nihei Date: Fri, 18 Mar 2022 17:18:35 -0300 Subject: [PATCH] xtensa/esp32s3: Fix output handling for pins numbered from 32 to 48 Signed-off-by: Gustavo Henrique Nihei --- arch/xtensa/src/esp32s3/esp32s3_gpio.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/arch/xtensa/src/esp32s3/esp32s3_gpio.c b/arch/xtensa/src/esp32s3/esp32s3_gpio.c index 95674ddb190..a562dc0132a 100644 --- a/arch/xtensa/src/esp32s3/esp32s3_gpio.c +++ b/arch/xtensa/src/esp32s3/esp32s3_gpio.c @@ -144,7 +144,14 @@ int esp32s3_configgpio(uint32_t pin, gpio_pinattr_t attr) if ((attr & OUTPUT) != 0) { - putreg32((UINT32_C(1) << pin), GPIO_ENABLE_W1TS_REG); + if (pin < 32) + { + putreg32((UINT32_C(1) << pin), GPIO_ENABLE_W1TS_REG); + } + else + { + putreg32((UINT32_C(1) << (pin - 32)), GPIO_ENABLE1_W1TS_REG); + } } /* Configure the pad's function */ @@ -259,7 +266,14 @@ void esp32s3_gpio_matrix_out(uint32_t pin, uint32_t signal_idx, bool out_inv, DEBUGASSERT(is_valid_gpio(pin)); - putreg32(1ul << pin, GPIO_ENABLE_W1TS_REG); + if (pin < 32) + { + putreg32((UINT32_C(1) << pin), GPIO_ENABLE_W1TS_REG); + } + else + { + putreg32((UINT32_C(1) << (pin - 32)), GPIO_ENABLE1_W1TS_REG); + } if (out_inv) {