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: Minas Harutyunyan <hminas@synopsys.com> Signed-off-by: Fabrice Gasnier <fabrice.gasnier@foss.st.com> Link: https://lore.kernel.org/r/20230414084137.1050487-2-fabrice.gasnier@foss.st.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
6a14ffc05c
commit
236d835302
|
@ -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,10 +113,25 @@ 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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue