diff options
author | Tomeu Vizoso <tomeu.vizoso@collabora.com> | 2018-03-26 05:00:01 -0400 |
---|---|---|
committer | Felipe Balbi <felipe.balbi@linux.intel.com> | 2018-05-21 03:36:14 -0400 |
commit | a7ef207424d0149f34d286f21d3134759b1efe2e (patch) | |
tree | 85e7d88bc74458c8884195f08eb12ec9ae7b3649 /drivers/usb/dwc2 | |
parent | 43a6dc94213ede7bb531d367292d99b1443ec9ed (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.c | 13 |
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 | ||
359 | static int dwc2_vbus_supply_init(struct dwc2_hsotg *hsotg) | 359 | static 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 | /* |