summaryrefslogtreecommitdiffstats
path: root/drivers/usb/dwc2
diff options
context:
space:
mode:
authorTomeu Vizoso <tomeu.vizoso@collabora.com>2018-03-26 05:00:01 -0400
committerFelipe Balbi <felipe.balbi@linux.intel.com>2018-05-21 03:36:14 -0400
commita7ef207424d0149f34d286f21d3134759b1efe2e (patch)
tree85e7d88bc74458c8884195f08eb12ec9ae7b3649 /drivers/usb/dwc2
parent43a6dc94213ede7bb531d367292d99b1443ec9ed (diff)
usb: dwc2: dwc2_vbus_supply_init: fix error check
devm_regulator_get_optional returns -ENODEV if the regulator isn't there, so if that's the case we have to make sure not to leave -ENODEV in the regulator pointer. Also, make sure we return 0 in that case, but correctly propagate any other errors. Also propagate the error from _dwc2_hcd_start. Fixes: 531ef5ebea96 ("usb: dwc2: add support for host mode external vbus supply") Cc: Amelie Delaunay <amelie.delaunay@st.com> Reviewed-by: Amelie Delaunay <amelie.delaunay@st.com> Reviewed-by: Heiko Stuebner <heiko@sntech.de> Reviewed-by: Grigor Tovmasyan <tovmasya@synopsys.com> Tested-by: Heiko Stuebner <heiko@sntech.de> Acked-by: Minas Harutyunyan <hminas@synopsys.com> Signed-off-by: Tomeu Vizoso <tomeu.vizoso@collabora.com> Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
Diffstat (limited to 'drivers/usb/dwc2')
-rw-r--r--drivers/usb/dwc2/hcd.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/drivers/usb/dwc2/hcd.c b/drivers/usb/dwc2/hcd.c
index 0ccd4b21f973..1faefea16cec 100644
--- a/drivers/usb/dwc2/hcd.c
+++ b/drivers/usb/dwc2/hcd.c
@@ -358,9 +358,14 @@ static void dwc2_gusbcfg_init(struct dwc2_hsotg *hsotg)
358 358
359static int dwc2_vbus_supply_init(struct dwc2_hsotg *hsotg) 359static int dwc2_vbus_supply_init(struct dwc2_hsotg *hsotg)
360{ 360{
361 int ret;
362
361 hsotg->vbus_supply = devm_regulator_get_optional(hsotg->dev, "vbus"); 363 hsotg->vbus_supply = devm_regulator_get_optional(hsotg->dev, "vbus");
362 if (IS_ERR(hsotg->vbus_supply)) 364 if (IS_ERR(hsotg->vbus_supply)) {
363 return 0; 365 ret = PTR_ERR(hsotg->vbus_supply);
366 hsotg->vbus_supply = NULL;
367 return ret == -ENODEV ? 0 : ret;
368 }
364 369
365 return regulator_enable(hsotg->vbus_supply); 370 return regulator_enable(hsotg->vbus_supply);
366} 371}
@@ -4341,9 +4346,7 @@ static int _dwc2_hcd_start(struct usb_hcd *hcd)
4341 4346
4342 spin_unlock_irqrestore(&hsotg->lock, flags); 4347 spin_unlock_irqrestore(&hsotg->lock, flags);
4343 4348
4344 dwc2_vbus_supply_init(hsotg); 4349 return dwc2_vbus_supply_init(hsotg);
4345
4346 return 0;
4347} 4350}
4348 4351
4349/* 4352/*