Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2887ba9e authored by Dmitry Eremin-Solenikov's avatar Dmitry Eremin-Solenikov Committed by Greg Kroah-Hartman
Browse files

USB: gpio-vbus: ask for vbus_draw regulator before registering xceiv



Ask for vbus_draw regulator before registering tranceiver to disallow possible
race between registration and set_power/etc.

Signed-off-by: default avatarDmitry Eremin-Solenikov <dbaryshkov@gmail.com>
Cc: Eric Miao <eric.y.miao@gmail.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent ce97cac8
Loading
Loading
Loading
Loading
+7 −7
Original line number Diff line number Diff line
@@ -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);