USB: gpio-vbus: ask for vbus_draw regulator before registering xceiv
authorDmitry Eremin-Solenikov <dbaryshkov@gmail.com>
Tue, 3 May 2011 08:46:46 +0000 (12:46 +0400)
committerGreg Kroah-Hartman <gregkh@suse.de>
Tue, 3 May 2011 17:17:14 +0000 (10:17 -0700)
Ask for vbus_draw regulator before registering tranceiver to disallow possible
race between registration and set_power/etc.

Signed-off-by: Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
Cc: Eric Miao <eric.y.miao@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/usb/otg/gpio_vbus.c

index 221c44444ec677a5679d15a86b2dd9fd0a5e72be..52733d9959b4c51b33564d61b0421fb540689030 100644 (file)
@@ -279,6 +279,13 @@ static int __init gpio_vbus_probe(struct platform_device *pdev)
        }
        INIT_WORK(&gpio_vbus->work, gpio_vbus_work);
 
+       gpio_vbus->vbus_draw = regulator_get(&pdev->dev, "vbus_draw");
+       if (IS_ERR(gpio_vbus->vbus_draw)) {
+               dev_dbg(&pdev->dev, "can't get vbus_draw regulator, err: %ld\n",
+                       PTR_ERR(gpio_vbus->vbus_draw));
+               gpio_vbus->vbus_draw = NULL;
+       }
+
        /* only active when a gadget is registered */
        err = otg_set_transceiver(&gpio_vbus->otg);
        if (err) {
@@ -287,13 +294,6 @@ static int __init gpio_vbus_probe(struct platform_device *pdev)
                goto err_otg;
        }
 
-       gpio_vbus->vbus_draw = regulator_get(&pdev->dev, "vbus_draw");
-       if (IS_ERR(gpio_vbus->vbus_draw)) {
-               dev_dbg(&pdev->dev, "can't get vbus_draw regulator, err: %ld\n",
-                       PTR_ERR(gpio_vbus->vbus_draw));
-               gpio_vbus->vbus_draw = NULL;
-       }
-
        return 0;
 err_otg:
        free_irq(irq, &pdev->dev);