Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ca2c5ba8 authored by Kamil Debski's avatar Kamil Debski Committed by Greg Kroah-Hartman
Browse files

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: default avatarKamil Debski <k.debski@samsung.com>
Signed-off-by: default avatarMarek Szyprowski <m.szyprowski@samsung.com>
Signed-off-by: default avatarRobert Baldyga <r.baldyga@samsung.com>
Cc: stable <stable@vger.kernel.org> # 3.16
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 0655314b
Loading
Loading
Loading
Loading
+12 −15
Original line number Diff line number Diff line
@@ -2747,13 +2747,14 @@ static void s3c_hsotg_phy_enable(struct s3c_hsotg *hsotg)

	dev_dbg(hsotg->dev, "pdev 0x%p\n", pdev);

	if (hsotg->phy) {
		phy_init(hsotg->phy);
		phy_power_on(hsotg->phy);
	} else if (hsotg->uphy)
	if (hsotg->uphy)
		usb_phy_init(hsotg->uphy);
	else if (hsotg->plat->phy_init)
	else if (hsotg->plat && hsotg->plat->phy_init)
		hsotg->plat->phy_init(pdev, hsotg->plat->phy_type);
	else {
		phy_init(hsotg->phy);
		phy_power_on(hsotg->phy);
	}
}

/**
@@ -2767,13 +2768,14 @@ static void s3c_hsotg_phy_disable(struct s3c_hsotg *hsotg)
{
	struct platform_device *pdev = to_platform_device(hsotg->dev);

	if (hsotg->phy) {
		phy_power_off(hsotg->phy);
		phy_exit(hsotg->phy);
	} else if (hsotg->uphy)
	if (hsotg->uphy)
		usb_phy_shutdown(hsotg->uphy);
	else if (hsotg->plat->phy_exit)
	else if (hsotg->plat && hsotg->plat->phy_exit)
		hsotg->plat->phy_exit(pdev, hsotg->plat->phy_type);
	else {
		phy_power_off(hsotg->phy);
		phy_exit(hsotg->phy);
	}
}

/**
@@ -3486,9 +3488,6 @@ static int s3c_hsotg_probe(struct platform_device *pdev)
	if (hsotg->phy && (phy_get_bus_width(phy) == 8))
		hsotg->phyif = GUSBCFG_PHYIF8;

	if (hsotg->phy)
		phy_init(hsotg->phy);

	/* usb phy enable */
	s3c_hsotg_phy_enable(hsotg);

@@ -3580,8 +3579,6 @@ static int s3c_hsotg_remove(struct platform_device *pdev)
		usb_gadget_unregister_driver(hsotg->driver);
	}

	if (hsotg->phy)
		phy_exit(hsotg->phy);
	clk_disable_unprepare(hsotg->clk);

	return 0;