mirror of
https://github.com/espressif/esp-idf
synced 2025-04-02 04:40:11 -04:00
Merge branch 'bugfix/fix_usb_dp_pullup_disable_v5.3' into 'release/v5.3'
GPIO: correct pio_ll_pullup_dis when USB DP (backport v5.3) See merge request espressif/esp-idf!32494
This commit is contained in:
commit
04220bda1b
@ -94,6 +94,15 @@ static inline void gpio_ll_pullup_en(gpio_dev_t *hw, uint32_t gpio_num)
|
|||||||
__attribute__((always_inline))
|
__attribute__((always_inline))
|
||||||
static inline void gpio_ll_pullup_dis(gpio_dev_t *hw, uint32_t gpio_num)
|
static inline void gpio_ll_pullup_dis(gpio_dev_t *hw, uint32_t gpio_num)
|
||||||
{
|
{
|
||||||
|
// The pull-up value of the USB pins are controlled by the pins’ pull-up value together with USB pull-up value
|
||||||
|
// USB DP pin is default to PU enabled
|
||||||
|
// Note that esp32C5 has supported USB_EXCHG_PINS feature. If this efuse is burnt, the gpio pin
|
||||||
|
// which should be checked is USB_INT_PHY0_DM_GPIO_NUM instead.
|
||||||
|
// TODO: read the specific efuse with efuse_ll.h
|
||||||
|
if (gpio_num == USB_INT_PHY0_DP_GPIO_NUM) {
|
||||||
|
USB_SERIAL_JTAG.conf0.pad_pull_override = 1;
|
||||||
|
USB_SERIAL_JTAG.conf0.dp_pullup = 0;
|
||||||
|
}
|
||||||
IO_MUX.gpio[gpio_num].fun_wpu = 0;
|
IO_MUX.gpio[gpio_num].fun_wpu = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -117,15 +126,7 @@ static inline void gpio_ll_pulldown_en(gpio_dev_t *hw, uint32_t gpio_num)
|
|||||||
__attribute__((always_inline))
|
__attribute__((always_inline))
|
||||||
static inline void gpio_ll_pulldown_dis(gpio_dev_t *hw, uint32_t gpio_num)
|
static inline void gpio_ll_pulldown_dis(gpio_dev_t *hw, uint32_t gpio_num)
|
||||||
{
|
{
|
||||||
// The pull-up value of the USB pins are controlled by the pins’ pull-up value together with USB pull-up value
|
|
||||||
// USB DP pin is default to PU enabled
|
|
||||||
// Note that esp32C5 has supported USB_EXCHG_PINS feature. If this efuse is burnt, the gpio pin
|
|
||||||
// which should be checked is USB_INT_PHY0_DM_GPIO_NUM instead.
|
|
||||||
// TODO: read the specific efuse with efuse_ll.h
|
|
||||||
if (gpio_num == USB_INT_PHY0_DP_GPIO_NUM) {
|
|
||||||
USB_SERIAL_JTAG.conf0.pad_pull_override = 1;
|
|
||||||
USB_SERIAL_JTAG.conf0.dp_pullup = 0;
|
|
||||||
}
|
|
||||||
IO_MUX.gpio[gpio_num].fun_wpd = 0;
|
IO_MUX.gpio[gpio_num].fun_wpd = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -90,6 +90,15 @@ static inline void gpio_ll_pullup_en(gpio_dev_t *hw, uint32_t gpio_num)
|
|||||||
__attribute__((always_inline))
|
__attribute__((always_inline))
|
||||||
static inline void gpio_ll_pullup_dis(gpio_dev_t *hw, uint32_t gpio_num)
|
static inline void gpio_ll_pullup_dis(gpio_dev_t *hw, uint32_t gpio_num)
|
||||||
{
|
{
|
||||||
|
// The pull-up value of the USB pins are controlled by the pins’ pull-up value together with USB pull-up value
|
||||||
|
// USB DP pin is default to PU enabled
|
||||||
|
// Note that esp32c6 has supported USB_EXCHG_PINS feature. If this efuse is burnt, the gpio pin
|
||||||
|
// which should be checked is USB_INT_PHY0_DM_GPIO_NUM instead.
|
||||||
|
// TODO: read the specific efuse with efuse_ll.h
|
||||||
|
if (gpio_num == USB_INT_PHY0_DP_GPIO_NUM) {
|
||||||
|
SET_PERI_REG_MASK(USB_SERIAL_JTAG_CONF0_REG, USB_SERIAL_JTAG_PAD_PULL_OVERRIDE);
|
||||||
|
CLEAR_PERI_REG_MASK(USB_SERIAL_JTAG_CONF0_REG, USB_SERIAL_JTAG_DP_PULLUP);
|
||||||
|
}
|
||||||
REG_CLR_BIT(IO_MUX_GPIO0_REG + (gpio_num * 4), FUN_PU);
|
REG_CLR_BIT(IO_MUX_GPIO0_REG + (gpio_num * 4), FUN_PU);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -113,15 +122,6 @@ static inline void gpio_ll_pulldown_en(gpio_dev_t *hw, uint32_t gpio_num)
|
|||||||
__attribute__((always_inline))
|
__attribute__((always_inline))
|
||||||
static inline void gpio_ll_pulldown_dis(gpio_dev_t *hw, uint32_t gpio_num)
|
static inline void gpio_ll_pulldown_dis(gpio_dev_t *hw, uint32_t gpio_num)
|
||||||
{
|
{
|
||||||
// The pull-up value of the USB pins are controlled by the pins’ pull-up value together with USB pull-up value
|
|
||||||
// USB DP pin is default to PU enabled
|
|
||||||
// Note that esp32c6 has supported USB_EXCHG_PINS feature. If this efuse is burnt, the gpio pin
|
|
||||||
// which should be checked is USB_INT_PHY0_DM_GPIO_NUM instead.
|
|
||||||
// TODO: read the specific efuse with efuse_ll.h
|
|
||||||
if (gpio_num == USB_INT_PHY0_DP_GPIO_NUM) {
|
|
||||||
SET_PERI_REG_MASK(USB_SERIAL_JTAG_CONF0_REG, USB_SERIAL_JTAG_PAD_PULL_OVERRIDE);
|
|
||||||
CLEAR_PERI_REG_MASK(USB_SERIAL_JTAG_CONF0_REG, USB_SERIAL_JTAG_DP_PULLUP);
|
|
||||||
}
|
|
||||||
REG_CLR_BIT(IO_MUX_GPIO0_REG + (gpio_num * 4), FUN_PD);
|
REG_CLR_BIT(IO_MUX_GPIO0_REG + (gpio_num * 4), FUN_PD);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD
|
* SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: Apache-2.0
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*/
|
*/
|
||||||
@ -90,6 +90,15 @@ static inline void gpio_ll_pullup_en(gpio_dev_t *hw, gpio_num_t gpio_num)
|
|||||||
__attribute__((always_inline))
|
__attribute__((always_inline))
|
||||||
static inline void gpio_ll_pullup_dis(gpio_dev_t *hw, gpio_num_t gpio_num)
|
static inline void gpio_ll_pullup_dis(gpio_dev_t *hw, gpio_num_t gpio_num)
|
||||||
{
|
{
|
||||||
|
// The pull-up value of the USB pins are controlled by the pins’ pull-up value together with USB pull-up value
|
||||||
|
// USB DP pin is default to PU enabled
|
||||||
|
// Note that esp32h2 has supported USB_EXCHG_PINS feature. If this efuse is burnt, the gpio pin
|
||||||
|
// which should be checked is USB_INT_PHY0_DM_GPIO_NUM instead.
|
||||||
|
// TODO: read the specific efuse with efuse_ll.h
|
||||||
|
if (gpio_num == USB_INT_PHY0_DP_GPIO_NUM) {
|
||||||
|
SET_PERI_REG_MASK(USB_SERIAL_JTAG_CONF0_REG, USB_SERIAL_JTAG_PAD_PULL_OVERRIDE);
|
||||||
|
CLEAR_PERI_REG_MASK(USB_SERIAL_JTAG_CONF0_REG, USB_SERIAL_JTAG_DP_PULLUP);
|
||||||
|
}
|
||||||
REG_CLR_BIT(IO_MUX_GPIO0_REG + (gpio_num * 4), FUN_PU);
|
REG_CLR_BIT(IO_MUX_GPIO0_REG + (gpio_num * 4), FUN_PU);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -113,15 +122,7 @@ static inline void gpio_ll_pulldown_en(gpio_dev_t *hw, gpio_num_t gpio_num)
|
|||||||
__attribute__((always_inline))
|
__attribute__((always_inline))
|
||||||
static inline void gpio_ll_pulldown_dis(gpio_dev_t *hw, gpio_num_t gpio_num)
|
static inline void gpio_ll_pulldown_dis(gpio_dev_t *hw, gpio_num_t gpio_num)
|
||||||
{
|
{
|
||||||
// The pull-up value of the USB pins are controlled by the pins’ pull-up value together with USB pull-up value
|
|
||||||
// USB DP pin is default to PU enabled
|
|
||||||
// Note that esp32h2 has supported USB_EXCHG_PINS feature. If this efuse is burnt, the gpio pin
|
|
||||||
// which should be checked is USB_INT_PHY0_DM_GPIO_NUM instead.
|
|
||||||
// TODO: read the specific efuse with efuse_ll.h
|
|
||||||
if (gpio_num == USB_INT_PHY0_DP_GPIO_NUM) {
|
|
||||||
SET_PERI_REG_MASK(USB_SERIAL_JTAG_CONF0_REG, USB_SERIAL_JTAG_PAD_PULL_OVERRIDE);
|
|
||||||
CLEAR_PERI_REG_MASK(USB_SERIAL_JTAG_CONF0_REG, USB_SERIAL_JTAG_DP_PULLUP);
|
|
||||||
}
|
|
||||||
REG_CLR_BIT(IO_MUX_GPIO0_REG + (gpio_num * 4), FUN_PD);
|
REG_CLR_BIT(IO_MUX_GPIO0_REG + (gpio_num * 4), FUN_PD);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -95,6 +95,22 @@ static inline void gpio_ll_pullup_en(gpio_dev_t *hw, uint32_t gpio_num)
|
|||||||
__attribute__((always_inline))
|
__attribute__((always_inline))
|
||||||
static inline void gpio_ll_pullup_dis(gpio_dev_t *hw, uint32_t gpio_num)
|
static inline void gpio_ll_pullup_dis(gpio_dev_t *hw, uint32_t gpio_num)
|
||||||
{
|
{
|
||||||
|
// The pull-up value of the USB pins are controlled by the pins’ pull-up value together with USB pull-up value
|
||||||
|
// USB DP pin is default to PU enabled
|
||||||
|
// Note that esp32p4 has supported USB_EXCHG_PINS feature. If this efuse is burnt, the gpio pin
|
||||||
|
// which should be checked is USB_INT_PHY0_DM_GPIO_NUM instead.
|
||||||
|
// TODO: read the specific efuse with efuse_ll.h
|
||||||
|
|
||||||
|
// One more noticeable point is P4 has two internal PHYs connecting to USJ and USB_WRAP(OTG1.1) separately.
|
||||||
|
// We only consider the default connection here: PHY0 -> USJ, PHY1 -> USB_OTG
|
||||||
|
if (gpio_num == USB_USJ_INT_PHY_DP_GPIO_NUM) {
|
||||||
|
USB_SERIAL_JTAG.conf0.pad_pull_override = 1;
|
||||||
|
USB_SERIAL_JTAG.conf0.dp_pullup = 0;
|
||||||
|
} else if (gpio_num == USB_OTG_INT_PHY_DP_GPIO_NUM) {
|
||||||
|
USB_WRAP.otg_conf.pad_pull_override = 1;
|
||||||
|
USB_WRAP.otg_conf.dp_pullup = 0;
|
||||||
|
}
|
||||||
|
|
||||||
IO_MUX.gpio[gpio_num].fun_wpu = 0;
|
IO_MUX.gpio[gpio_num].fun_wpu = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -118,21 +134,6 @@ static inline void gpio_ll_pulldown_en(gpio_dev_t *hw, uint32_t gpio_num)
|
|||||||
__attribute__((always_inline))
|
__attribute__((always_inline))
|
||||||
static inline void gpio_ll_pulldown_dis(gpio_dev_t *hw, uint32_t gpio_num)
|
static inline void gpio_ll_pulldown_dis(gpio_dev_t *hw, uint32_t gpio_num)
|
||||||
{
|
{
|
||||||
// The pull-up value of the USB pins are controlled by the pins’ pull-up value together with USB pull-up value
|
|
||||||
// USB DP pin is default to PU enabled
|
|
||||||
// Note that esp32p4 has supported USB_EXCHG_PINS feature. If this efuse is burnt, the gpio pin
|
|
||||||
// which should be checked is USB_INT_PHY0_DM_GPIO_NUM instead.
|
|
||||||
// TODO: read the specific efuse with efuse_ll.h
|
|
||||||
|
|
||||||
// One more noticeable point is P4 has two internal PHYs connecting to USJ and USB_WRAP(OTG1.1) separately.
|
|
||||||
// We only consider the default connection here: PHY0 -> USJ, PHY1 -> USB_OTG
|
|
||||||
if (gpio_num == USB_USJ_INT_PHY_DP_GPIO_NUM) {
|
|
||||||
USB_SERIAL_JTAG.conf0.pad_pull_override = 1;
|
|
||||||
USB_SERIAL_JTAG.conf0.dp_pullup = 0;
|
|
||||||
} else if (gpio_num == USB_OTG_INT_PHY_DP_GPIO_NUM) {
|
|
||||||
USB_WRAP.otg_conf.pad_pull_override = 1;
|
|
||||||
USB_WRAP.otg_conf.dp_pullup = 0;
|
|
||||||
}
|
|
||||||
IO_MUX.gpio[gpio_num].fun_wpd = 0;
|
IO_MUX.gpio[gpio_num].fun_wpd = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user