|
@@ -348,11 +348,21 @@ static int omap2430_musb_init(struct musb *musb)
|
|
|
* up through ULPI. TWL4030-family PMICs include one,
|
|
|
* which needs a driver, drivers aren't always needed.
|
|
|
*/
|
|
|
- if (dev->parent->of_node)
|
|
|
+ if (dev->parent->of_node) {
|
|
|
+ musb->phy = devm_phy_get(dev->parent, "usb2-phy");
|
|
|
+
|
|
|
+ /* We can't totally remove musb->xceiv as of now because
|
|
|
+ * musb core uses xceiv.state and xceiv.otg. Once we have
|
|
|
+ * a separate state machine to handle otg, these can be moved
|
|
|
+ * out of xceiv and then we can start using the generic PHY
|
|
|
+ * framework
|
|
|
+ */
|
|
|
musb->xceiv = devm_usb_get_phy_by_phandle(dev->parent,
|
|
|
"usb-phy", 0);
|
|
|
- else
|
|
|
+ } else {
|
|
|
musb->xceiv = devm_usb_get_phy_dev(dev, 0);
|
|
|
+ musb->phy = devm_phy_get(dev, "usb");
|
|
|
+ }
|
|
|
|
|
|
if (IS_ERR(musb->xceiv)) {
|
|
|
status = PTR_ERR(musb->xceiv);
|
|
@@ -364,6 +374,10 @@ static int omap2430_musb_init(struct musb *musb)
|
|
|
return -EPROBE_DEFER;
|
|
|
}
|
|
|
|
|
|
+ if (IS_ERR(musb->phy)) {
|
|
|
+ pr_err("HS USB OTG: no PHY configured\n");
|
|
|
+ return PTR_ERR(musb->phy);
|
|
|
+ }
|
|
|
musb->isr = omap2430_musb_interrupt;
|
|
|
|
|
|
status = pm_runtime_get_sync(dev);
|
|
@@ -397,7 +411,7 @@ static int omap2430_musb_init(struct musb *musb)
|
|
|
if (glue->status != OMAP_MUSB_UNKNOWN)
|
|
|
omap_musb_set_mailbox(glue);
|
|
|
|
|
|
- usb_phy_init(musb->xceiv);
|
|
|
+ phy_init(musb->phy);
|
|
|
|
|
|
pm_runtime_put_noidle(musb->controller);
|
|
|
return 0;
|
|
@@ -460,6 +474,7 @@ static int omap2430_musb_exit(struct musb *musb)
|
|
|
del_timer_sync(&musb_idle_timer);
|
|
|
|
|
|
omap2430_low_level_exit(musb);
|
|
|
+ phy_exit(musb->phy);
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
@@ -638,7 +653,7 @@ static int omap2430_runtime_suspend(struct device *dev)
|
|
|
OTG_INTERFSEL);
|
|
|
|
|
|
omap2430_low_level_exit(musb);
|
|
|
- usb_phy_set_suspend(musb->xceiv, 1);
|
|
|
+ phy_power_off(musb->phy);
|
|
|
}
|
|
|
|
|
|
return 0;
|
|
@@ -653,8 +668,7 @@ static int omap2430_runtime_resume(struct device *dev)
|
|
|
omap2430_low_level_init(musb);
|
|
|
musb_writel(musb->mregs, OTG_INTERFSEL,
|
|
|
musb->context.otg_interfsel);
|
|
|
-
|
|
|
- usb_phy_set_suspend(musb->xceiv, 0);
|
|
|
+ phy_power_on(musb->phy);
|
|
|
}
|
|
|
|
|
|
return 0;
|