On 18/11/2019 12:41, Chuhong Yuan wrote: > The driver forgets to disable the regulator in probe failure and remove. > Add the missed calls to fix it. > > Signed-off-by: Chuhong Yuan <hslester96@xxxxxxxxx> Fixes: f90db10779ad ("usb: dwc3: meson-g12a: Add support for IRQ based OTG switching") > --- > drivers/usb/dwc3/dwc3-meson-g12a.c | 11 ++++++++--- > 1 file changed, 8 insertions(+), 3 deletions(-) > > diff --git a/drivers/usb/dwc3/dwc3-meson-g12a.c b/drivers/usb/dwc3/dwc3-meson-g12a.c > index 8a3ec1a951fe..d9723d1ad8eb 100644 > --- a/drivers/usb/dwc3/dwc3-meson-g12a.c > +++ b/drivers/usb/dwc3/dwc3-meson-g12a.c > @@ -458,7 +458,7 @@ static int dwc3_meson_g12a_probe(struct platform_device *pdev) > dwc3_meson_g12a_irq_thread, > IRQF_ONESHOT, pdev->name, priv); > if (ret) > - return ret; > + goto err_regulator_disable; > } > > dwc3_meson_g12a_usb_init(priv); > @@ -467,7 +467,7 @@ static int dwc3_meson_g12a_probe(struct platform_device *pdev) > for (i = 0 ; i < PHY_COUNT ; ++i) { > ret = phy_init(priv->phys[i]); > if (ret) > - return ret; > + goto err_regulator_disable; > } > > /* Set PHY Power */ > @@ -517,7 +517,9 @@ static int dwc3_meson_g12a_probe(struct platform_device *pdev) > err_phys_exit: > for (i = 0 ; i < PHY_COUNT ; ++i) > phy_exit(priv->phys[i]); > - > +err_regulator_disable: > + if (priv->vbus) > + regulator_disable(priv->vbus); > return ret; > } > > @@ -536,6 +538,9 @@ static int dwc3_meson_g12a_remove(struct platform_device *pdev) > phy_exit(priv->phys[i]); > } > > + if (priv->vbus) > + regulator_disable(priv->vbus); > + > pm_runtime_disable(dev); > pm_runtime_put_noidle(dev); > pm_runtime_set_suspended(dev); > Acked-by: Neil Armstrong <narmstrong@xxxxxxxxxxxx>