On 4/14/23 12:41, Fabrice Gasnier wrote: > Add error handling in __dwc2_lowlevel_hw_enable() that may leave the > clocks and regulators enabled upon error. > > Signed-off-by: Fabrice Gasnier <fabrice.gasnier@xxxxxxxxxxx> Acked-by: Minas Harutyunyan <hminas@xxxxxxxxxxxx> > --- > drivers/usb/dwc2/platform.c | 19 +++++++++++++++++-- > 1 file changed, 17 insertions(+), 2 deletions(-) > > diff --git a/drivers/usb/dwc2/platform.c b/drivers/usb/dwc2/platform.c > index d1589ba7d322..c431ce6c119f 100644 > --- a/drivers/usb/dwc2/platform.c > +++ b/drivers/usb/dwc2/platform.c > @@ -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; > } >