drivers: usb_dc_stm32: Add usb disconnect pin support
Add usb disconnect pin support. Some boards use a GPIO pin to controll a transistor, which drives the pull-up resistor on USB DP pin. Signed-off-by: Yannis Damigos <giannis.damigos@gmail.com>
This commit is contained in:
parent
921bfeb05a
commit
55dada2592
2 changed files with 55 additions and 0 deletions
|
@ -79,4 +79,36 @@ config SYS_LOG_USB_DRIVER_LEVEL
|
||||||
|
|
||||||
- 4 DEBUG, write SYS_LOG_DBG in addition to previous levels
|
- 4 DEBUG, write SYS_LOG_DBG in addition to previous levels
|
||||||
|
|
||||||
|
config USB_DC_STM32_DISCONN_ENABLE
|
||||||
|
bool
|
||||||
|
depends on USB_DC_STM32
|
||||||
|
default n
|
||||||
|
help
|
||||||
|
Say Y if your board uses USB DISCONNECT pin to enable the
|
||||||
|
pull-up resistor on USB DP.
|
||||||
|
|
||||||
|
config USB_DC_STM32_DISCONN_GPIO_PORT_NAME
|
||||||
|
string
|
||||||
|
depends on USB_DC_STM32_DISCONN_ENABLE
|
||||||
|
default "GPIOC"
|
||||||
|
help
|
||||||
|
GPIO controller where the USB DISCONNECT pin is attached to.
|
||||||
|
|
||||||
|
config USB_DC_STM32_DISCONN_PIN
|
||||||
|
int
|
||||||
|
depends on USB_DC_STM32_DISCONN_ENABLE
|
||||||
|
default 12
|
||||||
|
help
|
||||||
|
USB DISCONNECT pin.
|
||||||
|
|
||||||
|
config USB_DC_STM32_DISCONN_PIN_LEVEL
|
||||||
|
int
|
||||||
|
depends on USB_DC_STM32_DISCONN_ENABLE
|
||||||
|
default 0
|
||||||
|
help
|
||||||
|
USB DISCONNECT pin active level:
|
||||||
|
|
||||||
|
- 0, USB DISCONNECT PIN is active low
|
||||||
|
- 1, USB DISCONNECT PIN is active high
|
||||||
|
|
||||||
endif # USB
|
endif # USB
|
||||||
|
|
|
@ -50,6 +50,7 @@
|
||||||
#include <usb/usb_device.h>
|
#include <usb/usb_device.h>
|
||||||
#include <clock_control/stm32_clock_control.h>
|
#include <clock_control/stm32_clock_control.h>
|
||||||
#include <misc/util.h>
|
#include <misc/util.h>
|
||||||
|
#include <gpio.h>
|
||||||
|
|
||||||
#define SYS_LOG_LEVEL CONFIG_SYS_LOG_USB_DRIVER_LEVEL
|
#define SYS_LOG_LEVEL CONFIG_SYS_LOG_USB_DRIVER_LEVEL
|
||||||
#include <logging/sys_log.h>
|
#include <logging/sys_log.h>
|
||||||
|
@ -770,3 +771,25 @@ void HAL_PCD_DataInStageCallback(PCD_HandleTypeDef *hpcd, u8_t epnum)
|
||||||
ep_state->cb(ep, USB_DC_EP_DATA_IN);
|
ep_state->cb(ep, USB_DC_EP_DATA_IN);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(USB) && defined(CONFIG_USB_DC_STM32_DISCONN_ENABLE)
|
||||||
|
void HAL_PCDEx_SetConnectionState(PCD_HandleTypeDef *hpcd, uint8_t state)
|
||||||
|
{
|
||||||
|
struct device *usb_disconnect;
|
||||||
|
|
||||||
|
usb_disconnect = device_get_binding(
|
||||||
|
CONFIG_USB_DC_STM32_DISCONN_GPIO_PORT_NAME);
|
||||||
|
gpio_pin_configure(usb_disconnect,
|
||||||
|
CONFIG_USB_DC_STM32_DISCONN_PIN, GPIO_DIR_OUT);
|
||||||
|
|
||||||
|
if (state) {
|
||||||
|
gpio_pin_write(usb_disconnect,
|
||||||
|
CONFIG_USB_DC_STM32_DISCONN_PIN,
|
||||||
|
CONFIG_USB_DC_STM32_DISCONN_PIN_LEVEL);
|
||||||
|
} else {
|
||||||
|
gpio_pin_write(usb_disconnect,
|
||||||
|
CONFIG_USB_DC_STM32_DISCONN_PIN,
|
||||||
|
!CONFIG_USB_DC_STM32_DISCONN_PIN_LEVEL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif /* USB && CONFIG_USB_DC_STM32_DISCONN_ENABLE */
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue