|
@@ -54,11 +54,12 @@ out:
|
|
|
|
|
|
int dwc3_host_init(struct dwc3 *dwc)
|
|
|
{
|
|
|
- struct property_entry props[2];
|
|
|
+ struct property_entry props[3];
|
|
|
struct platform_device *xhci;
|
|
|
int ret, irq;
|
|
|
struct resource *res;
|
|
|
struct platform_device *dwc3_pdev = to_platform_device(dwc->dev);
|
|
|
+ int prop_idx = 0;
|
|
|
|
|
|
irq = dwc3_host_get_irq(dwc);
|
|
|
if (irq < 0)
|
|
@@ -97,8 +98,22 @@ int dwc3_host_init(struct dwc3 *dwc)
|
|
|
|
|
|
memset(props, 0, sizeof(struct property_entry) * ARRAY_SIZE(props));
|
|
|
|
|
|
- if (dwc->usb3_lpm_capable) {
|
|
|
- props[0].name = "usb3-lpm-capable";
|
|
|
+ if (dwc->usb3_lpm_capable)
|
|
|
+ props[prop_idx++].name = "usb3-lpm-capable";
|
|
|
+
|
|
|
+ /**
|
|
|
+ * WORKAROUND: dwc3 revisions <=3.00a have a limitation
|
|
|
+ * where Port Disable command doesn't work.
|
|
|
+ *
|
|
|
+ * The suggested workaround is that we avoid Port Disable
|
|
|
+ * completely.
|
|
|
+ *
|
|
|
+ * This following flag tells XHCI to do just that.
|
|
|
+ */
|
|
|
+ if (dwc->revision <= DWC3_REVISION_300A)
|
|
|
+ props[prop_idx++].name = "quirk-broken-port-ped";
|
|
|
+
|
|
|
+ if (prop_idx) {
|
|
|
ret = platform_device_add_properties(xhci, props);
|
|
|
if (ret) {
|
|
|
dev_err(dwc->dev, "failed to add properties to xHCI\n");
|