usb: dwc3: Add dwc3_init/remove with DM_USB
authorMugunthan V N <mugunthanvnm@ti.com>
Fri, 18 May 2018 11:15:04 +0000 (13:15 +0200)
committerMarek Vasut <marex@denx.de>
Fri, 18 May 2018 11:23:10 +0000 (13:23 +0200)
The patch is preparing dwc3 core for enabling DM_USB with peripheral
driver with using driver model support.
The driver will be bound by the DWC3 wrapper driver based on the
dr_mode device tree entry.

Signed-off-by: Mugunthan V N <mugunthanvnm@ti.com>
(Remove dwc3-omap changes)
Signed-off-by: Michal Simek <michal.simek@xilinx.com>
drivers/usb/dwc3/core.c
drivers/usb/dwc3/core.h
drivers/usb/dwc3/gadget.c

index 7a91015048f5445e45f0d15dfca47e8f8c176ec5..7cf0564b2bfee20c68ba42eaad0d674ae5e0f386 100644 (file)
@@ -785,3 +785,58 @@ MODULE_ALIAS("platform:dwc3");
 MODULE_AUTHOR("Felipe Balbi <balbi@ti.com>");
 MODULE_LICENSE("GPL v2");
 MODULE_DESCRIPTION("DesignWare USB3 DRD Controller Driver");
+
+#ifdef CONFIG_DM_USB
+
+int dwc3_init(struct dwc3 *dwc)
+{
+       int ret;
+
+       dwc3_cache_hwparams(dwc);
+
+       ret = dwc3_alloc_event_buffers(dwc, DWC3_EVENT_BUFFERS_SIZE);
+       if (ret) {
+               dev_err(dwc->dev, "failed to allocate event buffers\n");
+               return -ENOMEM;
+       }
+
+       ret = dwc3_core_init(dwc);
+       if (ret) {
+               dev_err(dev, "failed to initialize core\n");
+               goto core_fail;
+       }
+
+       ret = dwc3_event_buffers_setup(dwc);
+       if (ret) {
+               dev_err(dwc->dev, "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;
+}
+
+void dwc3_remove(struct dwc3 *dwc)
+{
+       dwc3_core_exit_mode(dwc);
+       dwc3_event_buffers_cleanup(dwc);
+       dwc3_free_event_buffers(dwc);
+       dwc3_core_exit(dwc);
+       kfree(dwc->mem);
+}
+
+#endif
index cbe9850a0bda6ee532d5dfdd60013677c57965fa..58fe91dc51318b3b287670efcb7935038b177228 100644 (file)
@@ -712,7 +712,11 @@ struct dwc3 {
        /* device lock */
        spinlock_t              lock;
 
+#if defined(__UBOOT__) && defined(CONFIG_DM_USB)
+       struct udevice          *dev;
+#else
        struct device           *dev;
+#endif
 
        struct platform_device  *xhci;
        struct resource         xhci_resources[DWC3_XHCI_RESOURCES_NUM];
@@ -987,6 +991,8 @@ struct dwc3_gadget_ep_cmd_params {
 
 /* prototypes */
 int dwc3_gadget_resize_tx_fifos(struct dwc3 *dwc);
+int dwc3_init(struct dwc3 *dwc);
+void dwc3_remove(struct dwc3 *dwc);
 
 #ifdef CONFIG_USB_DWC3_HOST
 int dwc3_host_init(struct dwc3 *dwc);
index d45fae044c4a0c04cc34236aec11ca4c6327bb98..e340cb268fcdbff83f36af322fd0d23d434d4c5c 100644 (file)
@@ -2609,7 +2609,7 @@ int dwc3_gadget_init(struct dwc3 *dwc)
        if (ret)
                goto err4;
 
-       ret = usb_add_gadget_udc(dwc->dev, &dwc->gadget);
+       ret = usb_add_gadget_udc((struct device *)dwc->dev, &dwc->gadget);
        if (ret) {
                dev_err(dwc->dev, "failed to register udc\n");
                goto err4;