mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-23 01:10:04 +00:00
usb: dwc2/gadget: fix phy initialization sequence
In the Generic PHY Framework a NULL phy is considered to be a valid phy thus the "if (hsotg->phy)" check does not give us the information whether the Generic PHY Framework is used. In addition to the above this patch also removes phy_init from probe and phy_exit from remove. This is not necessary when init/exit is done in the s3c_hsotg_phy_enable/disable functions. Signed-off-by: Kamil Debski <k.debski@samsung.com> Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com> Signed-off-by: Robert Baldyga <r.baldyga@samsung.com> Cc: stable <stable@vger.kernel.org> # 3.16 Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
0655314be0
commit
ca2c5ba80f
1 changed files with 12 additions and 15 deletions
|
@ -2747,13 +2747,14 @@ static void s3c_hsotg_phy_enable(struct s3c_hsotg *hsotg)
|
||||||
|
|
||||||
dev_dbg(hsotg->dev, "pdev 0x%p\n", pdev);
|
dev_dbg(hsotg->dev, "pdev 0x%p\n", pdev);
|
||||||
|
|
||||||
if (hsotg->phy) {
|
if (hsotg->uphy)
|
||||||
|
usb_phy_init(hsotg->uphy);
|
||||||
|
else if (hsotg->plat && hsotg->plat->phy_init)
|
||||||
|
hsotg->plat->phy_init(pdev, hsotg->plat->phy_type);
|
||||||
|
else {
|
||||||
phy_init(hsotg->phy);
|
phy_init(hsotg->phy);
|
||||||
phy_power_on(hsotg->phy);
|
phy_power_on(hsotg->phy);
|
||||||
} else if (hsotg->uphy)
|
}
|
||||||
usb_phy_init(hsotg->uphy);
|
|
||||||
else if (hsotg->plat->phy_init)
|
|
||||||
hsotg->plat->phy_init(pdev, hsotg->plat->phy_type);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -2767,13 +2768,14 @@ static void s3c_hsotg_phy_disable(struct s3c_hsotg *hsotg)
|
||||||
{
|
{
|
||||||
struct platform_device *pdev = to_platform_device(hsotg->dev);
|
struct platform_device *pdev = to_platform_device(hsotg->dev);
|
||||||
|
|
||||||
if (hsotg->phy) {
|
if (hsotg->uphy)
|
||||||
|
usb_phy_shutdown(hsotg->uphy);
|
||||||
|
else if (hsotg->plat && hsotg->plat->phy_exit)
|
||||||
|
hsotg->plat->phy_exit(pdev, hsotg->plat->phy_type);
|
||||||
|
else {
|
||||||
phy_power_off(hsotg->phy);
|
phy_power_off(hsotg->phy);
|
||||||
phy_exit(hsotg->phy);
|
phy_exit(hsotg->phy);
|
||||||
} else if (hsotg->uphy)
|
}
|
||||||
usb_phy_shutdown(hsotg->uphy);
|
|
||||||
else if (hsotg->plat->phy_exit)
|
|
||||||
hsotg->plat->phy_exit(pdev, hsotg->plat->phy_type);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -3486,9 +3488,6 @@ static int s3c_hsotg_probe(struct platform_device *pdev)
|
||||||
if (hsotg->phy && (phy_get_bus_width(phy) == 8))
|
if (hsotg->phy && (phy_get_bus_width(phy) == 8))
|
||||||
hsotg->phyif = GUSBCFG_PHYIF8;
|
hsotg->phyif = GUSBCFG_PHYIF8;
|
||||||
|
|
||||||
if (hsotg->phy)
|
|
||||||
phy_init(hsotg->phy);
|
|
||||||
|
|
||||||
/* usb phy enable */
|
/* usb phy enable */
|
||||||
s3c_hsotg_phy_enable(hsotg);
|
s3c_hsotg_phy_enable(hsotg);
|
||||||
|
|
||||||
|
@ -3580,8 +3579,6 @@ static int s3c_hsotg_remove(struct platform_device *pdev)
|
||||||
usb_gadget_unregister_driver(hsotg->driver);
|
usb_gadget_unregister_driver(hsotg->driver);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (hsotg->phy)
|
|
||||||
phy_exit(hsotg->phy);
|
|
||||||
clk_disable_unprepare(hsotg->clk);
|
clk_disable_unprepare(hsotg->clk);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
Loading…
Reference in a new issue