fix(gpio): add esp_gpio_reserve check to gpio_config

This commit is contained in:
Song Ruo Jing
2026-02-26 16:26:58 +08:00
parent e5ff2747aa
commit 476004e4b8
28 changed files with 278 additions and 44 deletions
@@ -1,5 +1,5 @@
/*
* SPDX-FileCopyrightText: 2015-2025 Espressif Systems (Shanghai) CO LTD
* SPDX-FileCopyrightText: 2015-2026 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0
*/
@@ -364,6 +364,19 @@ static inline void gpio_ll_input_enable(gpio_dev_t *hw, uint32_t gpio_num)
PIN_INPUT_ENABLE(DR_REG_IO_MUX_BASE + GPIO_PIN_MUX_REG_OFFSET[gpio_num]);
}
/**
* @brief Check if input mode is enabled on GPIO.
*
* @param hw Peripheral GPIO hardware instance address.
* @param gpio_num GPIO number
* @return true if input mode is enabled, false otherwise
*/
__attribute__((always_inline))
static inline bool gpio_ll_input_is_enabled(gpio_dev_t *hw, uint32_t gpio_num)
{
return REG_GET_BIT(DR_REG_IO_MUX_BASE + GPIO_PIN_MUX_REG_OFFSET[gpio_num], FUN_IE) ? true : false;
}
/**
* @brief Disable output mode on GPIO.
*
@@ -1,5 +1,5 @@
/*
* SPDX-FileCopyrightText: 2020-2025 Espressif Systems (Shanghai) CO LTD
* SPDX-FileCopyrightText: 2020-2026 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0
*/
@@ -220,6 +220,19 @@ static inline void gpio_ll_input_enable(gpio_dev_t *hw, uint32_t gpio_num)
PIN_INPUT_ENABLE(IO_MUX_GPIO0_REG + (gpio_num * 4));
}
/**
* @brief Check if input mode is enabled on GPIO.
*
* @param hw Peripheral GPIO hardware instance address.
* @param gpio_num GPIO number
* @return true if input mode is enabled, false otherwise
*/
__attribute__((always_inline))
static inline bool gpio_ll_input_is_enabled(gpio_dev_t *hw, uint32_t gpio_num)
{
return GET_PERI_REG_MASK(IO_MUX_GPIO0_REG + (gpio_num * 4), FUN_IE) ? true : false;
}
/**
* @brief Enable GPIO pin filter
*
@@ -1,5 +1,5 @@
/*
* SPDX-FileCopyrightText: 2020-2025 Espressif Systems (Shanghai) CO LTD
* SPDX-FileCopyrightText: 2020-2026 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0
*/
@@ -203,6 +203,19 @@ static inline void gpio_ll_input_enable(gpio_dev_t *hw, uint32_t gpio_num)
PIN_INPUT_ENABLE(IO_MUX_GPIO0_REG + (gpio_num * 4));
}
/**
* @brief Check if input mode is enabled on GPIO.
*
* @param hw Peripheral GPIO hardware instance address.
* @param gpio_num GPIO number
* @return true if input mode is enabled, false otherwise
*/
__attribute__((always_inline))
static inline bool gpio_ll_input_is_enabled(gpio_dev_t *hw, uint32_t gpio_num)
{
return GET_PERI_REG_MASK(IO_MUX_GPIO0_REG + (gpio_num * 4), FUN_IE) ? true : false;
}
/**
* @brief Enable GPIO pin filter
*
@@ -1,5 +1,5 @@
/*
* SPDX-FileCopyrightText: 2022-2025 Espressif Systems (Shanghai) CO LTD
* SPDX-FileCopyrightText: 2022-2026 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0
*/
@@ -234,6 +234,19 @@ static inline void gpio_ll_input_enable(gpio_dev_t *hw, uint32_t gpio_num)
IO_MUX.gpio[gpio_num].fun_ie = 1;
}
/**
* @brief Check if input mode is enabled on GPIO.
*
* @param hw Peripheral GPIO hardware instance address.
* @param gpio_num GPIO number
* @return true if input mode is enabled, false otherwise
*/
__attribute__((always_inline))
static inline bool gpio_ll_input_is_enabled(gpio_dev_t *hw, uint32_t gpio_num)
{
return IO_MUX.gpio[gpio_num].fun_ie ? true : false;
}
/**
* @brief Enable GPIO pin filter
*
@@ -1,5 +1,5 @@
/*
* SPDX-FileCopyrightText: 2022-2025 Espressif Systems (Shanghai) CO LTD
* SPDX-FileCopyrightText: 2022-2026 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0
*/
@@ -234,6 +234,19 @@ static inline void gpio_ll_input_enable(gpio_dev_t *hw, uint32_t gpio_num)
PIN_INPUT_ENABLE(IO_MUX_GPIO0_REG + (gpio_num * 4));
}
/**
* @brief Check if input mode is enabled on GPIO.
*
* @param hw Peripheral GPIO hardware instance address.
* @param gpio_num GPIO number
* @return true if input mode is enabled, false otherwise
*/
__attribute__((always_inline))
static inline bool gpio_ll_input_is_enabled(gpio_dev_t *hw, uint32_t gpio_num)
{
return GET_PERI_REG_MASK(IO_MUX_GPIO0_REG + (gpio_num * 4), FUN_IE) ? true : false;
}
/**
* @brief Enable GPIO pin filter
*
@@ -1,5 +1,5 @@
/*
* SPDX-FileCopyrightText: 2024-2025 Espressif Systems (Shanghai) CO LTD
* SPDX-FileCopyrightText: 2024-2026 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0
*/
@@ -235,6 +235,19 @@ static inline void gpio_ll_input_enable(gpio_dev_t *hw, uint32_t gpio_num)
IO_MUX.gpion[gpio_num].gpion_fun_ie = 1;
}
/**
* @brief Check if input mode is enabled on GPIO.
*
* @param hw Peripheral GPIO hardware instance address.
* @param gpio_num GPIO number
* @return true if input mode is enabled, false otherwise
*/
__attribute__((always_inline))
static inline bool gpio_ll_input_is_enabled(gpio_dev_t *hw, uint32_t gpio_num)
{
return IO_MUX.gpion[gpio_num].gpion_fun_ie ? true : false;
}
/**
* @brief Enable GPIO pin filter
*
@@ -1,5 +1,5 @@
/*
* SPDX-FileCopyrightText: 2022-2025 Espressif Systems (Shanghai) CO LTD
* SPDX-FileCopyrightText: 2022-2026 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0
*/
@@ -235,6 +235,19 @@ static inline void gpio_ll_input_enable(gpio_dev_t *hw, uint32_t gpio_num)
PIN_INPUT_ENABLE(IO_MUX_GPIO0_REG + (gpio_num * 4));
}
/**
* @brief Check if input mode is enabled on GPIO.
*
* @param hw Peripheral GPIO hardware instance address.
* @param gpio_num GPIO number
* @return true if input mode is enabled, false otherwise
*/
__attribute__((always_inline))
static inline bool gpio_ll_input_is_enabled(gpio_dev_t *hw, uint32_t gpio_num)
{
return GET_PERI_REG_MASK(IO_MUX_GPIO0_REG + (gpio_num * 4), FUN_IE) ? true : false;
}
/**
* @brief Enable GPIO pin filter
*
@@ -1,5 +1,5 @@
/*
* SPDX-FileCopyrightText: 2025 Espressif Systems (Shanghai) CO LTD
* SPDX-FileCopyrightText: 2025-2026 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0
*/
@@ -233,6 +233,19 @@ static inline void gpio_ll_input_enable(gpio_dev_t *hw, uint32_t gpio_num)
IO_MUX.gpio[gpio_num].fun_ie = 1;
}
/**
* @brief Check if input mode is enabled on GPIO.
*
* @param hw Peripheral GPIO hardware instance address.
* @param gpio_num GPIO number
* @return true if input mode is enabled, false otherwise
*/
__attribute__((always_inline))
static inline bool gpio_ll_input_is_enabled(gpio_dev_t *hw, uint32_t gpio_num)
{
return IO_MUX.gpio[gpio_num].fun_ie ? true : false;
}
/**
* @brief Enable GPIO pin filter
*
@@ -1,5 +1,5 @@
/*
* SPDX-FileCopyrightText: 2025 Espressif Systems (Shanghai) CO LTD
* SPDX-FileCopyrightText: 2025-2026 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0
*/
@@ -241,6 +241,18 @@ static inline void gpio_ll_input_enable(gpio_dev_t *hw, uint32_t gpio_num)
IO_MUX.gpio[gpio_num].fun_ie = 1;
}
/**
* @brief Check if input mode is enabled on GPIO.
*
* @param hw Peripheral GPIO hardware instance address.
* @param gpio_num GPIO number
* @return true if input mode is enabled, false otherwise
*/
static inline bool gpio_ll_input_is_enabled(gpio_dev_t *hw, uint32_t gpio_num)
{
return IO_MUX.gpio[gpio_num].fun_ie ? true : false;
}
/**
* @brief Enable GPIO pin filter
*
@@ -1,5 +1,5 @@
/*
* SPDX-FileCopyrightText: 2023-2025 Espressif Systems (Shanghai) CO LTD
* SPDX-FileCopyrightText: 2023-2026 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0
*/
@@ -249,6 +249,19 @@ static inline void gpio_ll_input_enable(gpio_dev_t *hw, uint32_t gpio_num)
IO_MUX.gpio[gpio_num].fun_ie = 1;
}
/**
* @brief Check if input mode is enabled on GPIO.
*
* @param hw Peripheral GPIO hardware instance address.
* @param gpio_num GPIO number
* @return true if input mode is enabled, false otherwise
*/
__attribute__((always_inline))
static inline bool gpio_ll_input_is_enabled(gpio_dev_t *hw, uint32_t gpio_num)
{
return IO_MUX.gpio[gpio_num].fun_ie ? true : false;
}
/**
* @brief Enable GPIO pin filter
*
@@ -218,6 +218,19 @@ static inline void gpio_ll_input_enable(gpio_dev_t *hw, uint32_t gpio_num)
PIN_INPUT_ENABLE(IO_MUX_GPIO0_REG + (gpio_num * 4));
}
/**
* @brief Check if input mode is enabled on GPIO.
*
* @param hw Peripheral GPIO hardware instance address.
* @param gpio_num GPIO number
* @return true if input mode is enabled, false otherwise
*/
__attribute__((always_inline))
static inline bool gpio_ll_input_is_enabled(gpio_dev_t *hw, uint32_t gpio_num)
{
return GET_PERI_REG_MASK(IO_MUX_GPIO0_REG + (gpio_num * 4), FUN_IE) ? true : false;
}
/**
* @brief Enable GPIO pin filter
*
@@ -207,6 +207,19 @@ static inline void gpio_ll_input_enable(gpio_dev_t *hw, uint32_t gpio_num)
PIN_INPUT_ENABLE(IO_MUX_GPIO0_REG + (gpio_num * 4));
}
/**
* @brief Check if input mode is enabled on GPIO.
*
* @param hw Peripheral GPIO hardware instance address.
* @param gpio_num GPIO number
* @return true if input mode is enabled, false otherwise
*/
__attribute__((always_inline))
static inline bool gpio_ll_input_is_enabled(gpio_dev_t *hw, uint32_t gpio_num)
{
return GET_PERI_REG_MASK(IO_MUX_GPIO0_REG + (gpio_num * 4), FUN_IE) ? true : false;
}
/**
* @brief Enable GPIO pin filter
*
@@ -258,6 +258,19 @@ static inline void gpio_ll_input_enable(gpio_dev_t *hw, uint32_t gpio_num)
IO_MUX.gpio[gpio_num].fun_ie = 1;
}
/**
* @brief Check if input mode is enabled on GPIO.
*
* @param hw Peripheral GPIO hardware instance address.
* @param gpio_num GPIO number
* @return true if input mode is enabled, false otherwise
*/
__attribute__((always_inline))
static inline bool gpio_ll_input_is_enabled(gpio_dev_t *hw, uint32_t gpio_num)
{
return IO_MUX.gpio[gpio_num].fun_ie ? true : false;
}
/**
* @brief Enable GPIO pin filter
*
+10 -1
View File
@@ -1,5 +1,5 @@
/*
* SPDX-FileCopyrightText: 2015-2025 Espressif Systems (Shanghai) CO LTD
* SPDX-FileCopyrightText: 2015-2026 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0
*/
@@ -144,6 +144,15 @@ void gpio_hal_intr_disable(gpio_hal_context_t *hal, uint32_t gpio_num);
*/
#define gpio_hal_input_enable(hal, gpio_num) gpio_ll_input_enable((hal)->dev, gpio_num)
/**
* @brief Check if input mode is enabled on GPIO.
*
* @param hal Context of the HAL layer
* @param gpio_num GPIO number
* @return true if input mode is enabled, false otherwise
*/
#define gpio_hal_input_is_enabled(hal, gpio_num) gpio_ll_input_is_enabled((hal)->dev, gpio_num)
/**
* @brief Disable output mode on GPIO.
*