]> git.ipfire.org Git - thirdparty/u-boot.git/commitdiff
drivers: usb: dwc3: add ti dwc3 peripheral driver with driver model support
authorMichal Simek <michal.simek@xilinx.com>
Wed, 21 Dec 2016 12:18:40 +0000 (13:18 +0100)
committerMichal Simek <michal.simek@xilinx.com>
Wed, 11 Jan 2017 13:10:38 +0000 (14:10 +0100)
Add a TI DWC3 peripheral driver with driver model support and the
driver will be bound by the DWC3 wrapper driver based on the
dr_mode device tree entry.

Xilinx: Remove dwc3-omap changes + limit zynqmp static init

Signed-off-by: Mugunthan V N <mugunthanvnm@ti.com>
board/xilinx/zynqmp/zynqmp.c
drivers/usb/dwc3/core.c
drivers/usb/dwc3/core.h

index 6c01f8368eca059fc5ad3e81792179d795702ac3..b7ceb3a736e54092a6c09221c20ef380fdfd21ad 100644 (file)
@@ -319,6 +319,7 @@ int checkboard(void)
        return 0;
 }
 
+#ifndef CONFIG_DM_USB
 #ifdef CONFIG_USB_DWC3
 static struct dwc3_device dwc3_device_data0 = {
        .maximum_speed = USB_SPEED_HIGH,
@@ -364,3 +365,9 @@ int board_usb_cleanup(int index, enum usb_init_type init)
        return 0;
 }
 #endif
+#else
+int usb_gadget_handle_interrupts(int index)
+{
+       return 0;
+}
+#endif
index c599d0bac28332d3b2ab0f83b1d8791bfe2d82bb..0ad4a02ecc8844a0cbc3c481e4ab0918e50cc8b7 100644 (file)
@@ -601,6 +601,8 @@ static void dwc3_core_exit_mode(struct dwc3 *dwc)
 
 #define DWC3_ALIGN_MASK                (16 - 1)
 
+#ifndef CONFIG_DM_USB
+
 /**
  * dwc3_uboot_init - dwc3 core uboot initialization code
  * @dwc3_dev: struct dwc3_device containing initialization data
@@ -787,3 +789,58 @@ MODULE_ALIAS("platform:dwc3");
 MODULE_AUTHOR("Felipe Balbi <balbi@ti.com>");
 MODULE_LICENSE("GPL v2");
 MODULE_DESCRIPTION("DesignWare USB3 DRD Controller Driver");
+
+#else
+
+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 err0;
+       }
+
+       ret = dwc3_event_buffers_setup(dwc);
+       if (ret) {
+               dev_err(dwc->dev, "failed to setup event buffers\n");
+               goto err1;
+       }
+
+       ret = dwc3_core_init_mode(dwc);
+       if (ret)
+               goto err2;
+
+       return 0;
+
+err2:
+       dwc3_event_buffers_cleanup(dwc);
+
+err1:
+       dwc3_core_exit(dwc);
+
+err0:
+       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 24f03e484fd5cb8d2d15c7eae9fdcbca0080a0cb..972628751697997e78db3e086bcc3b9262e37a2c 100644 (file)
@@ -992,6 +992,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);