@@ -207,7 +207,7 @@ esp_err_t gpio_output_disable(gpio_num_t gpio_num)
207207{
208208 GPIO_CHECK (GPIO_IS_VALID_GPIO (gpio_num ), "GPIO number error" , ESP_ERR_INVALID_ARG );
209209 gpio_hal_output_disable (gpio_context .gpio_hal , gpio_num );
210- gpio_hal_matrix_out_default (gpio_context .gpio_hal , gpio_num ); // Ensure no other output signal is routed via GPIO matrix to this pin
210+ gpio_hal_set_output_enable_ctrl (gpio_context .gpio_hal , gpio_num , false, false ); // so that output disable could take effect
211211 return ESP_OK ;
212212}
213213
@@ -836,15 +836,16 @@ esp_err_t gpio_iomux_input(gpio_num_t gpio_num, int func, uint32_t signal_idx)
836836// Deprecated function
837837void gpio_iomux_out (uint8_t gpio_num , int func , bool out_en_inv )
838838{
839- gpio_hal_iomux_out (gpio_context .gpio_hal , gpio_num , func , out_en_inv );
839+ (void )out_en_inv ; // out_en_inv only takes effect when signal goes through gpio matrix to the IO
840+ gpio_hal_iomux_out (gpio_context .gpio_hal , gpio_num , func );
840841}
841842
842- esp_err_t gpio_iomux_output (gpio_num_t gpio_num , int func , bool out_en_inv )
843+ esp_err_t gpio_iomux_output (gpio_num_t gpio_num , int func )
843844{
844845 GPIO_CHECK (GPIO_IS_VALID_OUTPUT_GPIO (gpio_num ), "GPIO number error" , ESP_ERR_INVALID_ARG );
845846
846847 portENTER_CRITICAL (& gpio_context .gpio_spinlock );
847- gpio_hal_iomux_out (gpio_context .gpio_hal , gpio_num , func , out_en_inv );
848+ gpio_hal_iomux_out (gpio_context .gpio_hal , gpio_num , func );
848849 portEXIT_CRITICAL (& gpio_context .gpio_spinlock );
849850
850851 return ESP_OK ;
@@ -1094,11 +1095,18 @@ esp_err_t gpio_dump_io_configuration(FILE *out_stream, uint64_t io_bit_mask)
10941095 gpio_io_config_t io_config = {};
10951096 gpio_get_io_config (gpio_num , & io_config );
10961097
1098+ // When the IO is used as a simple GPIO output, oe signal can only be controlled by the oe register
1099+ // When the IO is not used as a simple GPIO output, oe signal could be controlled by the peripheral
1100+ const char * oe_str = io_config .oe ? "1" : "0" ;
1101+ if (io_config .sig_out != SIG_GPIO_OUT_IDX && io_config .oe_ctrl_by_periph ) {
1102+ oe_str = "[periph_sig_ctrl]" ;
1103+ }
1104+
10971105 fprintf (out_stream , "IO[%" PRIu32 "]%s -\n" , gpio_num , esp_gpio_is_reserved (BIT64 (gpio_num )) ? " **RESERVED**" : "" );
10981106 fprintf (out_stream , " Pullup: %d, Pulldown: %d, DriveCap: %" PRIu32 "\n" , io_config .pu , io_config .pd , (uint32_t )io_config .drv );
1099- fprintf (out_stream , " InputEn: %d, OutputEn: %d , OpenDrain: %d\n" , io_config .ie , io_config .oe , io_config .od );
1107+ fprintf (out_stream , " InputEn: %d, OutputEn: %s%s , OpenDrain: %d\n" , io_config .ie , oe_str , (( io_config .fun_sel == PIN_FUNC_GPIO ) && ( io_config . oe_inv )) ? " (inversed)" : "" , io_config .od );
11001108 fprintf (out_stream , " FuncSel: %" PRIu32 " (%s)\n" , io_config .fun_sel , (io_config .fun_sel == PIN_FUNC_GPIO ) ? "GPIO" : "IOMUX" );
1101- if (io_config .oe && io_config . fun_sel == PIN_FUNC_GPIO ) {
1109+ if (io_config .fun_sel == PIN_FUNC_GPIO ) {
11021110 fprintf (out_stream , " GPIO Matrix SigOut ID: %" PRIu32 "%s\n" , io_config .sig_out , (io_config .sig_out == SIG_GPIO_OUT_IDX ) ? " (simple GPIO output)" : "" );
11031111 }
11041112 if (io_config .ie && io_config .fun_sel == PIN_FUNC_GPIO ) {
0 commit comments