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 ca9dafdf7..73b49f7a7 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 @@ -92,6 +92,10 @@ int dwc3_core_init(struct dwc3 *dwc){ } +void dwc3_core_exit(struct dwc3 *dwc){ +} + + int dwc3_alloc_scratch_buffers(struct dwc3 *dwc){ uint32_t length; @@ -119,11 +123,20 @@ int dwc3_alloc_event_buffers(struct dwc3 *dwc, uint32_t length){ } +void dwc3_free_event_buffers(struct dwc3 *dwc){ +} + + + int dwc3_event_buffers_setup(struct dwc3 *dwc){ return 0; } +void dwc3_event_buffers_cleanup(struct dwc3 *dwc){ +} + + int dwc3_core_init_mode(struct dwc3 *dwc){ return 0; @@ -137,12 +150,51 @@ void dwc3_set_mode(struct dwc3 *dwc, uint32_t mode){ -int dwc3_init(struct dwc3 *dwc){ - return 0; +int dwc3_init(struct dwc3 *dwc) +{ + int ret; + + dwc3_cache_hwparams(dwc); + + ret = dwc3_alloc_event_buffers(dwc, DWC3_EVENT_BUFFERS_SIZE); + if (ret) { + USB_LOG_ERR("failed to allocate event buffers\n"); + return -ENOMEM; + } + + ret = dwc3_core_init(dwc); + if (ret) { + USB_LOG_ERR("failed to initialize core\n"); + goto core_fail; + } + + ret = dwc3_event_buffers_setup(dwc); + if (ret) { + USB_LOG_ERR("failed to setup event buffers\n"); + goto event_fail; + } + + ret = dwc3_core_init_mode(dwc); + if (ret) + goto mode_fail; + + return 0; + +mode_fail: + dwc3_event_buffers_cleanup(dwc); + +event_fail: + dwc3_core_exit(dwc); + +core_fail: + dwc3_free_event_buffers(dwc); + + return ret; } + int dwc3_send_gadget_generic_command(struct dwc3 *dwc, unsigned cmd, uint32_t param){ uint32_t timeout = 500; uint32_t reg; diff --git a/Ubiquitous/XiZi_AIoT/services/drivers/usb/components/port/dwc3/dwc3.h b/Ubiquitous/XiZi_AIoT/services/drivers/usb/components/port/dwc3/dwc3.h index 86dec1910..f047e94c3 100644 --- a/Ubiquitous/XiZi_AIoT/services/drivers/usb/components/port/dwc3/dwc3.h +++ b/Ubiquitous/XiZi_AIoT/services/drivers/usb/components/port/dwc3/dwc3.h @@ -888,14 +888,21 @@ void dwc3_cache_hwparams(struct dwc3 *dwc); int dwc3_core_init(struct dwc3 *dwc); +void dwc3_core_exit(struct dwc3 *dwc); + int dwc3_alloc_scratch_buffers(struct dwc3 *dwc); int dwc3_setup_scratch_buffers(struct dwc3 *dwc); int dwc3_alloc_event_buffers(struct dwc3 *dwc, uint32_t length); +void dwc3_free_event_buffers(struct dwc3 *dwc); + int dwc3_event_buffers_setup(struct dwc3 *dwc); +void dwc3_event_buffers_cleanup(struct dwc3 *dwc); + + int dwc3_core_init_mode(struct dwc3 *dwc); void dwc3_set_mode(struct dwc3 *dwc, uint32_t mode);