Commit 236d8353 authored by Fabrice Gasnier's avatar Fabrice Gasnier Committed by Greg Kroah-Hartman
Browse files

usb: dwc2: improve error handling in __dwc2_lowlevel_hw_enable



Add error handling in __dwc2_lowlevel_hw_enable() that may leave the
clocks and regulators enabled upon error.

Acked-by: default avatarMinas Harutyunyan <hminas@synopsys.com>
Signed-off-by: default avatarFabrice Gasnier <fabrice.gasnier@foss.st.com>
Link: https://lore.kernel.org/r/20230414084137.1050487-2-fabrice.gasnier@foss.st.com


Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 6a14ffc0
Loading
Loading
Loading
Loading
+17 −2
Original line number Diff line number Diff line
@@ -104,7 +104,7 @@ static int __dwc2_lowlevel_hw_enable(struct dwc2_hsotg *hsotg)
	if (hsotg->clk) {
		ret = clk_prepare_enable(hsotg->clk);
		if (ret)
			return ret;
			goto err_dis_reg;
	}

	if (hsotg->uphy) {
@@ -113,9 +113,24 @@ static int __dwc2_lowlevel_hw_enable(struct dwc2_hsotg *hsotg)
		ret = hsotg->plat->phy_init(pdev, hsotg->plat->phy_type);
	} else {
		ret = phy_init(hsotg->phy);
		if (ret == 0)
		if (ret == 0) {
			ret = phy_power_on(hsotg->phy);
			if (ret)
				phy_exit(hsotg->phy);
		}
	}

	if (ret)
		goto err_dis_clk;

	return 0;

err_dis_clk:
	if (hsotg->clk)
		clk_disable_unprepare(hsotg->clk);

err_dis_reg:
	regulator_bulk_disable(ARRAY_SIZE(hsotg->supplies), hsotg->supplies);

	return ret;
}