This is an automated email from the ASF dual-hosted git repository. simbit18 pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/nuttx.git
commit 092d7eac731f266801bea7fca0b51801c6fd66e3 Author: Eren Terzioglu <eren.terzio...@espressif.com> AuthorDate: Fri Aug 8 19:29:24 2025 +0200 boards/risc-v/esp32c6: Add RTC GPIO board support for esp32c6 Add RTC GPIO board support for esp32c6 Signed-off-by: Eren Terzioglu <eren.terzio...@espressif.com> --- .../esp32c6/esp32c6-devkitc/src/esp32c6_gpio.c | 91 ++++++++++++++++++++++ 1 file changed, 91 insertions(+) diff --git a/boards/risc-v/esp32c6/esp32c6-devkitc/src/esp32c6_gpio.c b/boards/risc-v/esp32c6/esp32c6-devkitc/src/esp32c6_gpio.c index 3d869c79ba9..fca1d764a0f 100644 --- a/boards/risc-v/esp32c6/esp32c6-devkitc/src/esp32c6_gpio.c +++ b/boards/risc-v/esp32c6/esp32c6-devkitc/src/esp32c6_gpio.c @@ -47,6 +47,7 @@ #ifdef CONFIG_ESPRESSIF_DEDICATED_GPIO #include "espressif/esp_dedic_gpio.h" #endif +#include "espressif/esp_rtc_gpio.h" /* Board */ @@ -86,6 +87,9 @@ #define GPIO_DEDIC2 5 #define GPIO_DEDIC_COUNT 2 +#define GPIO_RTC1 0 +#define GPIO_RTC_COUNT 1 + /**************************************************************************** * Private Types ****************************************************************************/ @@ -121,6 +125,8 @@ static int gpint_enable(struct gpio_dev_s *dev, bool enable); static int gpint_setpintype(struct gpio_dev_s *dev, enum gpio_pintype_e pintype); #endif +static int gprtc_read(struct gpio_dev_s *dev, bool *value); +static int gprtc_write(struct gpio_dev_s *dev, bool value); /**************************************************************************** * Private Data @@ -193,10 +199,80 @@ struct esp_dedic_gpio_config_s dedic_gpio_conf = struct file *dedicated_gpio = NULL; #endif +static const struct gpio_operations_s gprtc_ops = +{ + .go_read = gprtc_read, + .go_write = gprtc_write, + .go_attach = NULL, + .go_enable = NULL, + .go_setpintype = NULL, +}; + +/* This array maps the GPIO pins used as OUTPUT */ + +static const uint32_t g_gpiortc[GPIO_RTC_COUNT] = +{ + GPIO_RTC1 +}; + +static struct espgpio_dev_s g_gprtc[GPIO_RTC_COUNT]; + /**************************************************************************** * Private Functions ****************************************************************************/ +/**************************************************************************** + * Name: gprtc_read + * + * Description: + * Read a RTC digital output pin. + * + * Parameters: + * dev - A pointer to the gpio driver struct. + * value - A pointer to store the state of the pin. + * + * Returned Value: + * Zero (OK). + * + ****************************************************************************/ + +static int gprtc_read(struct gpio_dev_s *dev, bool *value) +{ + struct espgpio_dev_s *espgpio = (struct espgpio_dev_s *)dev; + + DEBUGASSERT(espgpio != NULL && value != NULL); + gpioinfo("Reading...\n"); + + *value = esp_rtcio_read(g_gpiortc[espgpio->id]); + return OK; +} + +/**************************************************************************** + * Name: gprtc_write + * + * Description: + * Write to a RTC digital output pin. + * + * Parameters: + * dev - A pointer to the gpio driver struct. + * value - The value to be written. + * + * Returned Value: + * Zero (OK). + * + ****************************************************************************/ + +static int gprtc_write(struct gpio_dev_s *dev, bool value) +{ + struct espgpio_dev_s *espgpio = (struct espgpio_dev_s *)dev; + + DEBUGASSERT(espgpio != NULL); + gpioinfo("Writing %d\n", (int)value); + + esp_rtcio_write(g_gpiortc[espgpio->id], value); + return OK; +} + /**************************************************************************** * Name: gpout_read * @@ -553,6 +629,21 @@ int esp_gpio_init(void) pincount++; #endif + for (i = 0; i < GPIO_RTC_COUNT; i++) + { + /* Setup and register the GPIO pin */ + + g_gprtc[i].gpio.gp_pintype = GPIO_OUTPUT_PIN; + g_gprtc[i].gpio.gp_ops = &gprtc_ops; + g_gprtc[i].id = i; + gpio_pin_register(&g_gprtc[i].gpio, pincount); + + /* Configure the pins that will be used as input/output */ + + esp_rtcio_config_gpio(g_gpiortc[i], ESP_RTC_GPIO_MODE_INPUT_OUTPUT); + pincount++; + } + return OK; } #endif /* CONFIG_DEV_GPIO && !CONFIG_GPIO_LOWER_HALF */