diff --git a/components/driver/i2c.c b/components/driver/i2c.c index ebea59990a..22282a75df 100644 --- a/components/driver/i2c.c +++ b/components/driver/i2c.c @@ -871,10 +871,15 @@ esp_err_t i2c_set_pin(i2c_port_t i2c_num, int sda_io_num, int scl_io_num, bool s esp_rom_gpio_connect_in_signal(sda_io_num, sda_in_sig, 0); } if (scl_io_num >= 0) { - gpio_set_level(scl_io_num, I2C_IO_INIT_LEVEL); - gpio_hal_iomux_func_sel(GPIO_PIN_MUX_REG[scl_io_num], PIN_FUNC_GPIO); - gpio_set_direction(scl_io_num, GPIO_MODE_INPUT_OUTPUT_OD); - esp_rom_gpio_connect_out_signal(scl_io_num, scl_out_sig, 0, 0); + if (mode == I2C_MODE_MASTER) { + gpio_set_level(scl_io_num, I2C_IO_INIT_LEVEL); + gpio_hal_iomux_func_sel(GPIO_PIN_MUX_REG[scl_io_num], PIN_FUNC_GPIO); + gpio_set_direction(scl_io_num, GPIO_MODE_INPUT_OUTPUT_OD); + esp_rom_gpio_connect_out_signal(scl_io_num, scl_out_sig, 0, 0); + } else { + gpio_hal_iomux_func_sel(GPIO_PIN_MUX_REG[scl_io_num], PIN_FUNC_GPIO); + gpio_set_direction(scl_io_num, GPIO_MODE_INPUT); + } esp_rom_gpio_connect_in_signal(scl_io_num, scl_in_sig, 0); if (scl_pullup_en == GPIO_PULLUP_ENABLE) { gpio_set_pull_mode(scl_io_num, GPIO_PULLUP_ONLY);