From 37c633defd5e4a9665b324c70ecdea30072fb803 Mon Sep 17 00:00:00 2001 From: laokaiyao Date: Thu, 6 Nov 2025 11:34:32 +0800 Subject: [PATCH] fix(touch): make the gpio init symmetric Closes https://github.com/espressif/esp-idf/issues/17806 --- .../esp_driver_touch_sens/common/touch_sens_common.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/components/esp_driver_touch_sens/common/touch_sens_common.c b/components/esp_driver_touch_sens/common/touch_sens_common.c index 1b0d726f72d..e9feeb46d0d 100644 --- a/components/esp_driver_touch_sens/common/touch_sens_common.c +++ b/components/esp_driver_touch_sens/common/touch_sens_common.c @@ -49,6 +49,14 @@ static void touch_channel_pin_init(int id) gpio_config_as_analog(pin); } +static void touch_channel_pin_deinit(int id) +{ + gpio_num_t pin = touch_sensor_channel_io_map[id]; + assert(pin >= 0); + esp_gpio_revoke(BIT64(pin)); + gpio_reset_pin(pin); +} + static void s_touch_free_resource(touch_sensor_handle_t sens_handle) { if (!sens_handle) { @@ -211,6 +219,7 @@ esp_err_t touch_sensor_del_channel(touch_channel_handle_t chan_handle) TOUCH_ENTER_CRITICAL(TOUCH_PERIPH_LOCK); sens_handle->chan_mask &= ~(1UL << chan_handle->id); TOUCH_EXIT_CRITICAL(TOUCH_PERIPH_LOCK); + touch_channel_pin_deinit(chan_handle->id); free(g_touch->ch[ch_offset]); g_touch->ch[ch_offset] = NULL;