diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c index 419e1aadc1ff..9c981ceb8511 100644 --- a/drivers/usb/dwc3/core.c +++ b/drivers/usb/dwc3/core.c @@ -1574,13 +1574,17 @@ static int dwc3_probe(struct platform_device *pdev) dwc3_get_properties(dwc); dwc->reset = devm_reset_control_array_get_optional_shared(dev); - if (IS_ERR(dwc->reset)) - return PTR_ERR(dwc->reset); + if (IS_ERR(dwc->reset)) { + ret = PTR_ERR(dwc->reset); + goto put_usb_psy; + } if (dev->of_node) { ret = devm_clk_bulk_get_all(dev, &dwc->clks); - if (ret == -EPROBE_DEFER) - return ret; + if (ret == -EPROBE_DEFER) { + goto put_usb_psy; + } + /* * Clocks are optional, but new DT platforms should support all * clocks as required by the DT-binding. @@ -1589,12 +1593,11 @@ static int dwc3_probe(struct platform_device *pdev) dwc->num_clks = 0; else dwc->num_clks = ret; - } ret = reset_control_deassert(dwc->reset); if (ret) - return ret; + goto put_usb_psy; ret = clk_bulk_prepare_enable(dwc->num_clks, dwc->clks); if (ret) @@ -1694,7 +1697,7 @@ disable_clks: clk_bulk_disable_unprepare(dwc->num_clks, dwc->clks); assert_reset: reset_control_assert(dwc->reset); - +put_usb_psy: if (dwc->usb_psy) power_supply_put(dwc->usb_psy);