From b8139a609bb1207d4af71d3ae6c863d5b0d28575 Mon Sep 17 00:00:00 2001 From: Sudeep Mohanty Date: Fri, 26 Jan 2024 14:04:19 +0100 Subject: [PATCH] fix(ulp_riscv): Updated RTC I2C to use open-drain IOs This commit updates the RTC I2C driver in the ULP RISC-V to initialize all I2C IOs in open-drain mode. --- components/ulp/ulp_riscv/ulp_riscv_i2c.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/components/ulp/ulp_riscv/ulp_riscv_i2c.c b/components/ulp/ulp_riscv/ulp_riscv_i2c.c index 816cab3ae92..3b1327d6ab2 100644 --- a/components/ulp/ulp_riscv/ulp_riscv_i2c.c +++ b/components/ulp/ulp_riscv/ulp_riscv_i2c.c @@ -72,7 +72,7 @@ static esp_err_t i2c_configure_io(gpio_num_t io_num, bool pullup_en) /* Initialize IO Pin */ ESP_RETURN_ON_ERROR(rtc_gpio_init(io_num), RTCI2C_TAG, "RTC GPIO Init failed for GPIO %d", io_num); /* Set direction to input+output */ - ESP_RETURN_ON_ERROR(rtc_gpio_set_direction(io_num, RTC_GPIO_MODE_INPUT_OUTPUT), RTCI2C_TAG, "RTC GPIO Set direction failed for %d", io_num); + ESP_RETURN_ON_ERROR(rtc_gpio_set_direction(io_num, RTC_GPIO_MODE_INPUT_OUTPUT_OD), RTCI2C_TAG, "RTC GPIO Set direction failed for %d", io_num); /* Disable pulldown on the io pin */ ESP_RETURN_ON_ERROR(rtc_gpio_pulldown_dis(io_num), RTCI2C_TAG, "RTC GPIO pulldown disable failed for %d", io_num); /* Enable pullup based on pullup_en flag */ @@ -479,6 +479,15 @@ esp_err_t ulp_riscv_i2c_master_init(const ulp_riscv_i2c_cfg_t *cfg) /* Configure RTC I2C GPIOs */ ESP_RETURN_ON_ERROR(i2c_set_pin(cfg), RTCI2C_TAG, "Failed to configure RTC I2C GPIOs"); + /* Enable internal open-drain mode for SDA and SCL lines */ +#if CONFIG_IDF_TARGET_ESP32S2 + i2c_dev->ctrl.sda_force_out = 0; + i2c_dev->ctrl.scl_force_out = 0; +#elif CONFIG_IDF_TARGET_ESP32S3 + i2c_dev->i2c_ctrl.i2c_sda_force_out = 0; + i2c_dev->i2c_ctrl.i2c_scl_force_out = 0; +#endif // CONFIG_IDF_TARGET_ESP32S2 + #if CONFIG_IDF_TARGET_ESP32S2 /* Configure the RTC I2C controller in master mode */ i2c_dev->ctrl.ms_mode = 1;