From 0027373c8652c8136ed3a2cac351ee29a700fa7b Mon Sep 17 00:00:00 2001 From: songyanguang <345810377@qq.com> Date: Sat, 14 Sep 2024 09:25:51 +0800 Subject: [PATCH] dwc3 init direction mode --- .../drivers/usb/components/port/dwc3/dwc3.c | 29 ++++++++++++++++--- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/Ubiquitous/XiZi_AIoT/services/drivers/usb/components/port/dwc3/dwc3.c b/Ubiquitous/XiZi_AIoT/services/drivers/usb/components/port/dwc3/dwc3.c index 1b89e99c6..d0283a172 100644 --- a/Ubiquitous/XiZi_AIoT/services/drivers/usb/components/port/dwc3/dwc3.c +++ b/Ubiquitous/XiZi_AIoT/services/drivers/usb/components/port/dwc3/dwc3.c @@ -585,18 +585,39 @@ void dwc3_event_buffers_cleanup(struct dwc3 *dwc){ -int dwc3_core_init_mode(struct dwc3 *dwc){ +int dwc3_core_init_mode(struct dwc3 *dwc) +{ + int ret; + + switch (dwc->dr_mode) { + case USB_DR_MODE_HOST: + dwc3_set_mode(dwc, DWC3_GCTL_PRTCAP_HOST); + ret = dwc3_host_init(dwc); + if (ret) { + USB_LOG_ERR("failed to initialize host\n"); + return ret; + } + break; + default: + USB_LOG_ERR("Unsupported mode of operation %d\n", dwc->dr_mode); + return -EINVAL; + } + return 0; } +void dwc3_set_mode(struct dwc3 *dwc, uint32_t mode) +{ + u32 reg; -void dwc3_set_mode(struct dwc3 *dwc, uint32_t mode){ - + reg = dwc3_readl(dwc->regs_vir, DWC3_GCTL); + reg &= ~(DWC3_GCTL_PRTCAPDIR(DWC3_GCTL_PRTCAP_OTG)); + reg |= DWC3_GCTL_PRTCAPDIR(mode); + dwc3_writel(dwc->regs_vir, DWC3_GCTL, reg); } - int dwc3_init(struct dwc3 *dwc) { int ret;