Commit 3e3101d5 authored by Kishon Vijay Abraham I's avatar Kishon Vijay Abraham I Committed by Greg Kroah-Hartman

usb: musb: omap2430: use the new generic PHY framework

Use the generic PHY framework API to get the PHY. The usb_phy_set_resume
and usb_phy_set_suspend is replaced with power_on and
power_off to align with the new PHY framework.

musb->xceiv can't be removed as of now because musb core uses xceiv.state and
xceiv.otg. Once there is a separate state machine to handle otg, these can be
moved out of xceiv and then we can start using the generic PHY framework.
Signed-off-by: default avatarKishon Vijay Abraham I <kishon@ti.com>
Reviewed-by: default avatarSylwester Nawrocki <s.nawrocki@samsung.com>
Acked-by: default avatarFelipe Balbi <balbi@ti.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 975d963e
...@@ -75,6 +75,7 @@ config USB_MUSB_TUSB6010 ...@@ -75,6 +75,7 @@ config USB_MUSB_TUSB6010
config USB_MUSB_OMAP2PLUS config USB_MUSB_OMAP2PLUS
tristate "OMAP2430 and onwards" tristate "OMAP2430 and onwards"
depends on ARCH_OMAP2PLUS depends on ARCH_OMAP2PLUS
select GENERIC_PHY
config USB_MUSB_AM35X config USB_MUSB_AM35X
tristate "AM35x" tristate "AM35x"
......
...@@ -46,6 +46,7 @@ ...@@ -46,6 +46,7 @@
#include <linux/usb.h> #include <linux/usb.h>
#include <linux/usb/otg.h> #include <linux/usb/otg.h>
#include <linux/usb/musb.h> #include <linux/usb/musb.h>
#include <linux/phy/phy.h>
struct musb; struct musb;
struct musb_hw_ep; struct musb_hw_ep;
...@@ -341,6 +342,7 @@ struct musb { ...@@ -341,6 +342,7 @@ struct musb {
u16 int_tx; u16 int_tx;
struct usb_phy *xceiv; struct usb_phy *xceiv;
struct phy *phy;
int nIrq; int nIrq;
unsigned irq_wake:1; unsigned irq_wake:1;
......
...@@ -348,11 +348,21 @@ static int omap2430_musb_init(struct musb *musb) ...@@ -348,11 +348,21 @@ static int omap2430_musb_init(struct musb *musb)
* up through ULPI. TWL4030-family PMICs include one, * up through ULPI. TWL4030-family PMICs include one,
* which needs a driver, drivers aren't always needed. * 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, musb->xceiv = devm_usb_get_phy_by_phandle(dev->parent,
"usb-phy", 0); "usb-phy", 0);
else } else {
musb->xceiv = devm_usb_get_phy_dev(dev, 0); musb->xceiv = devm_usb_get_phy_dev(dev, 0);
musb->phy = devm_phy_get(dev, "usb");
}
if (IS_ERR(musb->xceiv)) { if (IS_ERR(musb->xceiv)) {
status = PTR_ERR(musb->xceiv); status = PTR_ERR(musb->xceiv);
...@@ -364,6 +374,10 @@ static int omap2430_musb_init(struct musb *musb) ...@@ -364,6 +374,10 @@ static int omap2430_musb_init(struct musb *musb)
return -EPROBE_DEFER; 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; musb->isr = omap2430_musb_interrupt;
status = pm_runtime_get_sync(dev); status = pm_runtime_get_sync(dev);
...@@ -397,7 +411,7 @@ static int omap2430_musb_init(struct musb *musb) ...@@ -397,7 +411,7 @@ static int omap2430_musb_init(struct musb *musb)
if (glue->status != OMAP_MUSB_UNKNOWN) if (glue->status != OMAP_MUSB_UNKNOWN)
omap_musb_set_mailbox(glue); omap_musb_set_mailbox(glue);
usb_phy_init(musb->xceiv); phy_init(musb->phy);
pm_runtime_put_noidle(musb->controller); pm_runtime_put_noidle(musb->controller);
return 0; return 0;
...@@ -460,6 +474,7 @@ static int omap2430_musb_exit(struct musb *musb) ...@@ -460,6 +474,7 @@ static int omap2430_musb_exit(struct musb *musb)
del_timer_sync(&musb_idle_timer); del_timer_sync(&musb_idle_timer);
omap2430_low_level_exit(musb); omap2430_low_level_exit(musb);
phy_exit(musb->phy);
return 0; return 0;
} }
...@@ -638,7 +653,7 @@ static int omap2430_runtime_suspend(struct device *dev) ...@@ -638,7 +653,7 @@ static int omap2430_runtime_suspend(struct device *dev)
OTG_INTERFSEL); OTG_INTERFSEL);
omap2430_low_level_exit(musb); omap2430_low_level_exit(musb);
usb_phy_set_suspend(musb->xceiv, 1); phy_power_off(musb->phy);
} }
return 0; return 0;
...@@ -653,8 +668,7 @@ static int omap2430_runtime_resume(struct device *dev) ...@@ -653,8 +668,7 @@ static int omap2430_runtime_resume(struct device *dev)
omap2430_low_level_init(musb); omap2430_low_level_init(musb);
musb_writel(musb->mregs, OTG_INTERFSEL, musb_writel(musb->mregs, OTG_INTERFSEL,
musb->context.otg_interfsel); musb->context.otg_interfsel);
phy_power_on(musb->phy);
usb_phy_set_suspend(musb->xceiv, 0);
} }
return 0; return 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment