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

Commit 58823373 authored by Sakethram Bommisetti's avatar Sakethram Bommisetti Committed by Felipe Balbi
Browse files

usb: phy: ab8500-usb: call phy_dis_work only when necessary



Modify ab8500_usb_set_peripheral() and ab8500_usb_set_host() code to
schedule phy_dis_work only when necessary in order to prevent regulator
count mismatch during reboot/shutdown.

Signed-off-by: default avatarSakethram Bommisetti <sakethram.bommisetti@stericsson.com>
Acked-by: default avatarLinus Walleij <linus.walleij@linaro.org>
Signed-off-by: default avatarFabio Baltieri <fabio.baltieri@linaro.org>
Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
parent 8db12231
Loading
Loading
Loading
Loading
+8 −9
Original line number Diff line number Diff line
@@ -614,17 +614,16 @@ static int ab8500_usb_set_peripheral(struct usb_otg *otg,

	ab = phy_to_ab(otg->phy);

	ab->phy.otg->gadget = gadget;

	/* Some drivers call this function in atomic context.
	 * Do not update ab8500 registers directly till this
	 * is fixed.
	 */

	if (!gadget) {
		otg->gadget = NULL;
	if ((ab->mode != USB_IDLE) && (!gadget)) {
		ab->mode = USB_IDLE;
		schedule_work(&ab->phy_dis_work);
	} else {
		otg->gadget = gadget;
		otg->phy->state = OTG_STATE_B_IDLE;
	}

	return 0;
@@ -639,16 +638,16 @@ static int ab8500_usb_set_host(struct usb_otg *otg, struct usb_bus *host)

	ab = phy_to_ab(otg->phy);

	ab->phy.otg->host = host;

	/* Some drivers call this function in atomic context.
	 * Do not update ab8500 registers directly till this
	 * is fixed.
	 */

	if (!host) {
		otg->host = NULL;
	if ((ab->mode != USB_IDLE) && (!host)) {
		ab->mode = USB_IDLE;
		schedule_work(&ab->phy_dis_work);
	} else {
		otg->host = host;
	}

	return 0;