|
@@ -153,7 +153,7 @@ static int xhci_plat_probe(struct platform_device *pdev)
|
|
|
{
|
|
|
const struct xhci_plat_priv *priv_match;
|
|
|
const struct hc_driver *driver;
|
|
|
- struct device *sysdev;
|
|
|
+ struct device *sysdev, *tmpdev;
|
|
|
struct xhci_hcd *xhci;
|
|
|
struct resource *res;
|
|
|
struct usb_hcd *hcd;
|
|
@@ -273,19 +273,24 @@ static int xhci_plat_probe(struct platform_device *pdev)
|
|
|
goto disable_clk;
|
|
|
}
|
|
|
|
|
|
- if (device_property_read_bool(sysdev, "usb2-lpm-disable"))
|
|
|
- xhci->quirks |= XHCI_HW_LPM_DISABLE;
|
|
|
+ /* imod_interval is the interrupt moderation value in nanoseconds. */
|
|
|
+ xhci->imod_interval = 40000;
|
|
|
|
|
|
- if (device_property_read_bool(sysdev, "usb3-lpm-capable"))
|
|
|
- xhci->quirks |= XHCI_LPM_SUPPORT;
|
|
|
+ /* Iterate over all parent nodes for finding quirks */
|
|
|
+ for (tmpdev = &pdev->dev; tmpdev; tmpdev = tmpdev->parent) {
|
|
|
|
|
|
- if (device_property_read_bool(&pdev->dev, "quirk-broken-port-ped"))
|
|
|
- xhci->quirks |= XHCI_BROKEN_PORT_PED;
|
|
|
+ if (device_property_read_bool(tmpdev, "usb2-lpm-disable"))
|
|
|
+ xhci->quirks |= XHCI_HW_LPM_DISABLE;
|
|
|
|
|
|
- /* imod_interval is the interrupt moderation value in nanoseconds. */
|
|
|
- xhci->imod_interval = 40000;
|
|
|
- device_property_read_u32(sysdev, "imod-interval-ns",
|
|
|
- &xhci->imod_interval);
|
|
|
+ if (device_property_read_bool(tmpdev, "usb3-lpm-capable"))
|
|
|
+ xhci->quirks |= XHCI_LPM_SUPPORT;
|
|
|
+
|
|
|
+ if (device_property_read_bool(tmpdev, "quirk-broken-port-ped"))
|
|
|
+ xhci->quirks |= XHCI_BROKEN_PORT_PED;
|
|
|
+
|
|
|
+ device_property_read_u32(tmpdev, "imod-interval-ns",
|
|
|
+ &xhci->imod_interval);
|
|
|
+ }
|
|
|
|
|
|
hcd->usb_phy = devm_usb_get_phy_by_phandle(sysdev, "usb-phy", 0);
|
|
|
if (IS_ERR(hcd->usb_phy)) {
|