summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorSuresh Mangipudi <smangipudi@nvidia.com>2011-11-04 10:44:38 +0530
committerVarun Colbert <vcolbert@nvidia.com>2011-11-07 13:46:12 -0800
commit1ee21262c9bfcef00a135b8e500709b2f717cf89 (patch)
tree5d7923b02ce67f48d0e02cb794b40bad217346da /drivers
parent6eb5f6192adf8ee996ba51b3d20bc26d1d9e9640 (diff)
usb: gadget: fsl_udc_core: Fix race with vbus regulator
vbus regulator init should be done before the otg is set, once otg is set otg calls the fsl_vbus_session while the fsl_udc_probe is still under execution, causing a crash in the regulator code, as the regulator is not set to NULL. Reviewed-on: http://git-master/r/60167 (cherry picked from commit 594dd8dbaa6bf62f1859c54d58362ec12fa71a56) Change-Id: I6adccb43f7859d5097257f441199b02a86b9fc66 Reviewed-on: http://git-master/r/62337 Reviewed-by: Suresh Mangipudi <smangipudi@nvidia.com> Tested-by: Suresh Mangipudi <smangipudi@nvidia.com> Reviewed-by: Venkat Moganty <vmoganty@nvidia.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/usb/gadget/fsl_udc_core.c19
1 files changed, 10 insertions, 9 deletions
diff --git a/drivers/usb/gadget/fsl_udc_core.c b/drivers/usb/gadget/fsl_udc_core.c
index 77e50edc6270..8aeb8cdae24a 100644
--- a/drivers/usb/gadget/fsl_udc_core.c
+++ b/drivers/usb/gadget/fsl_udc_core.c
@@ -2882,6 +2882,16 @@ static int __init fsl_udc_probe(struct platform_device *pdev)
INIT_DELAYED_WORK(&udc_controller->work, fsl_udc_charger_detect_work);
INIT_WORK(&udc_controller->charger_work, fsl_udc_set_current_limit_work);
+ /* Get the regulator for drawing the vbus current in udc driver */
+ udc_controller->vbus_regulator = regulator_get(NULL, "usb_bat_chg");
+ if (IS_ERR(udc_controller->vbus_regulator)) {
+ dev_err(&pdev->dev,
+ "can't get charge regulator,err:%ld\n",
+ PTR_ERR(udc_controller->vbus_regulator));
+ udc_controller->vbus_regulator = NULL;
+ }
+
+
#ifdef CONFIG_USB_OTG_UTILS
udc_controller->transceiver = otg_get_transceiver();
if (udc_controller->transceiver) {
@@ -2900,15 +2910,6 @@ static int __init fsl_udc_probe(struct platform_device *pdev)
#endif
#endif
- /* Get the regulator for drawing the vbus current in udc driver */
- udc_controller->vbus_regulator = regulator_get(NULL, "usb_bat_chg");
- if (IS_ERR(udc_controller->vbus_regulator)) {
- dev_err(&pdev->dev,
- "can't get charge regulator,err:%ld\n",
- PTR_ERR(udc_controller->vbus_regulator));
- udc_controller->vbus_regulator = NULL;
- }
-
return 0;
err_unregister: