usb: dwc3: add xHCI Host support
The Designware USB3 IP can be configured with
an internal xHCI. If we're running on such a
version, let's start the xHCI stack.
Signed-off-by: Felipe Balbi <balbi@ti.com>
diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
index df15199..410835e 100644
--- a/drivers/usb/dwc3/core.c
+++ b/drivers/usb/dwc3/core.c
@@ -350,6 +350,8 @@
goto err1;
}
+ dwc->res = res;
+
res = request_mem_region(res->start, resource_size(res),
dev_name(&pdev->dev));
if (!res) {
@@ -401,7 +403,6 @@
mode = DWC3_MODE(dwc->hwparams.hwparams0);
switch (mode) {
- case DWC3_MODE_DRD:
case DWC3_MODE_DEVICE:
ret = dwc3_gadget_init(dwc);
if (ret) {
@@ -409,6 +410,26 @@
goto err4;
}
break;
+ case DWC3_MODE_HOST:
+ ret = dwc3_host_init(dwc);
+ if (ret) {
+ dev_err(&pdev->dev, "failed to initialize host\n");
+ goto err4;
+ }
+ break;
+ case DWC3_MODE_DRD:
+ ret = dwc3_host_init(dwc);
+ if (ret) {
+ dev_err(&pdev->dev, "failed to initialize host\n");
+ goto err4;
+ }
+
+ ret = dwc3_gadget_init(dwc);
+ if (ret) {
+ dev_err(&pdev->dev, "failed to initialize gadget\n");
+ goto err4;
+ }
+ break;
default:
dev_err(&pdev->dev, "Unsupported mode of operation %d\n", mode);
goto err4;
@@ -427,10 +448,16 @@
err5:
switch (mode) {
- case DWC3_MODE_DRD:
case DWC3_MODE_DEVICE:
dwc3_gadget_exit(dwc);
break;
+ case DWC3_MODE_HOST:
+ dwc3_host_exit(dwc);
+ break;
+ case DWC3_MODE_DRD:
+ dwc3_host_exit(dwc);
+ dwc3_gadget_exit(dwc);
+ break;
default:
/* do nothing */
break;
@@ -465,10 +492,16 @@
dwc3_debugfs_exit(dwc);
switch (dwc->mode) {
- case DWC3_MODE_DRD:
case DWC3_MODE_DEVICE:
dwc3_gadget_exit(dwc);
break;
+ case DWC3_MODE_HOST:
+ dwc3_host_exit(dwc);
+ break;
+ case DWC3_MODE_DRD:
+ dwc3_host_exit(dwc);
+ dwc3_gadget_exit(dwc);
+ break;
default:
/* do nothing */
break;