usb: dwc3: core: add dt support for dwc3 core
Added dt support for dwc3 core and update the documentation with device tree binding information. Getting a PHY is now done using devm_usb_get_phy_by_phandle() for dt boot. Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com> Signed-off-by: Felipe Balbi <balbi@ti.com>
This commit is contained in:
parent
0c4c8bbbfd
commit
5088b6f5bc
2 changed files with 42 additions and 4 deletions
22
Documentation/devicetree/bindings/usb/dwc3.txt
Normal file
22
Documentation/devicetree/bindings/usb/dwc3.txt
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
synopsys DWC3 CORE
|
||||||
|
|
||||||
|
DWC3- USB3 CONTROLLER
|
||||||
|
|
||||||
|
Required properties:
|
||||||
|
- compatible: must be "synopsys,dwc3"
|
||||||
|
- reg : Address and length of the register set for the device
|
||||||
|
- interrupts: Interrupts used by the dwc3 controller.
|
||||||
|
- usb-phy : array of phandle for the PHY device
|
||||||
|
|
||||||
|
Optional properties:
|
||||||
|
- tx-fifo-resize: determines if the FIFO *has* to be reallocated.
|
||||||
|
|
||||||
|
This is usually a subnode to DWC3 glue to which it is connected.
|
||||||
|
|
||||||
|
dwc3@4a030000 {
|
||||||
|
compatible = "synopsys,dwc3";
|
||||||
|
reg = <0x4a030000 0xcfff>;
|
||||||
|
interrupts = <0 92 4>
|
||||||
|
usb-phy = <&usb2_phy>, <&usb3,phy>;
|
||||||
|
tx-fifo-resize;
|
||||||
|
};
|
|
@ -420,13 +420,19 @@ static int dwc3_probe(struct platform_device *pdev)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
|
|
||||||
dwc->usb2_phy = devm_usb_get_phy(dev, USB_PHY_TYPE_USB2);
|
if (node) {
|
||||||
|
dwc->usb2_phy = devm_usb_get_phy_by_phandle(dev, "usb-phy", 0);
|
||||||
|
dwc->usb3_phy = devm_usb_get_phy_by_phandle(dev, "usb-phy", 1);
|
||||||
|
} else {
|
||||||
|
dwc->usb2_phy = devm_usb_get_phy(dev, USB_PHY_TYPE_USB2);
|
||||||
|
dwc->usb3_phy = devm_usb_get_phy(dev, USB_PHY_TYPE_USB3);
|
||||||
|
}
|
||||||
|
|
||||||
if (IS_ERR_OR_NULL(dwc->usb2_phy)) {
|
if (IS_ERR_OR_NULL(dwc->usb2_phy)) {
|
||||||
dev_err(dev, "no usb2 phy configured\n");
|
dev_err(dev, "no usb2 phy configured\n");
|
||||||
return -EPROBE_DEFER;
|
return -EPROBE_DEFER;
|
||||||
}
|
}
|
||||||
|
|
||||||
dwc->usb3_phy = devm_usb_get_phy(dev, USB_PHY_TYPE_USB3);
|
|
||||||
if (IS_ERR_OR_NULL(dwc->usb3_phy)) {
|
if (IS_ERR_OR_NULL(dwc->usb3_phy)) {
|
||||||
dev_err(dev, "no usb3 phy configured\n");
|
dev_err(dev, "no usb3 phy configured\n");
|
||||||
return -EPROBE_DEFER;
|
return -EPROBE_DEFER;
|
||||||
|
@ -450,8 +456,7 @@ static int dwc3_probe(struct platform_device *pdev)
|
||||||
else
|
else
|
||||||
dwc->maximum_speed = DWC3_DCFG_SUPERSPEED;
|
dwc->maximum_speed = DWC3_DCFG_SUPERSPEED;
|
||||||
|
|
||||||
if (of_get_property(node, "tx-fifo-resize", NULL))
|
dwc->needs_fifo_resize = of_property_read_bool(node, "tx-fifo-resize");
|
||||||
dwc->needs_fifo_resize = true;
|
|
||||||
|
|
||||||
pm_runtime_enable(dev);
|
pm_runtime_enable(dev);
|
||||||
pm_runtime_get_sync(dev);
|
pm_runtime_get_sync(dev);
|
||||||
|
@ -580,11 +585,22 @@ static int dwc3_remove(struct platform_device *pdev)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_OF
|
||||||
|
static const struct of_device_id of_dwc3_match[] = {
|
||||||
|
{
|
||||||
|
.compatible = "synopsys,dwc3"
|
||||||
|
},
|
||||||
|
{ },
|
||||||
|
};
|
||||||
|
MODULE_DEVICE_TABLE(of, of_dwc3_match);
|
||||||
|
#endif
|
||||||
|
|
||||||
static struct platform_driver dwc3_driver = {
|
static struct platform_driver dwc3_driver = {
|
||||||
.probe = dwc3_probe,
|
.probe = dwc3_probe,
|
||||||
.remove = dwc3_remove,
|
.remove = dwc3_remove,
|
||||||
.driver = {
|
.driver = {
|
||||||
.name = "dwc3",
|
.name = "dwc3",
|
||||||
|
.of_match_table = of_match_ptr(of_dwc3_match),
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue