|
@@ -26,6 +26,7 @@
|
|
|
#include <linux/pm_runtime.h>
|
|
|
#include <linux/delay.h>
|
|
|
#include <linux/usb/omap_control_usb.h>
|
|
|
+#include <linux/of_platform.h>
|
|
|
|
|
|
#define PLL_STATUS 0x00000004
|
|
|
#define PLL_GO 0x00000008
|
|
@@ -196,8 +197,14 @@ static int omap_usb3_init(struct usb_phy *x)
|
|
|
|
|
|
static int omap_usb3_probe(struct platform_device *pdev)
|
|
|
{
|
|
|
- struct omap_usb *phy;
|
|
|
- struct resource *res;
|
|
|
+ struct omap_usb *phy;
|
|
|
+ struct resource *res;
|
|
|
+ struct device_node *node = pdev->dev.of_node;
|
|
|
+ struct device_node *control_node;
|
|
|
+ struct platform_device *control_pdev;
|
|
|
+
|
|
|
+ if (!node)
|
|
|
+ return -EINVAL;
|
|
|
|
|
|
phy = devm_kzalloc(&pdev->dev, sizeof(*phy), GFP_KERNEL);
|
|
|
if (!phy) {
|
|
@@ -239,11 +246,18 @@ static int omap_usb3_probe(struct platform_device *pdev)
|
|
|
return -EINVAL;
|
|
|
}
|
|
|
|
|
|
- phy->control_dev = omap_get_control_dev();
|
|
|
- if (IS_ERR(phy->control_dev)) {
|
|
|
- dev_dbg(&pdev->dev, "Failed to get control device\n");
|
|
|
- return -ENODEV;
|
|
|
+ control_node = of_parse_phandle(node, "ctrl-module", 0);
|
|
|
+ if (!control_node) {
|
|
|
+ dev_err(&pdev->dev, "Failed to get control device phandle\n");
|
|
|
+ return -EINVAL;
|
|
|
}
|
|
|
+ control_pdev = of_find_device_by_node(control_node);
|
|
|
+ if (!control_pdev) {
|
|
|
+ dev_err(&pdev->dev, "Failed to get control device\n");
|
|
|
+ return -EINVAL;
|
|
|
+ }
|
|
|
+
|
|
|
+ phy->control_dev = &control_pdev->dev;
|
|
|
|
|
|
omap_control_usb_phy_power(phy->control_dev, 0);
|
|
|
usb_add_phy_dev(&phy->phy);
|