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

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
...@@ -614,17 +614,16 @@ static int ab8500_usb_set_peripheral(struct usb_otg *otg, ...@@ -614,17 +614,16 @@ static int ab8500_usb_set_peripheral(struct usb_otg *otg,
ab = phy_to_ab(otg->phy); ab = phy_to_ab(otg->phy);
ab->phy.otg->gadget = gadget;
/* Some drivers call this function in atomic context. /* Some drivers call this function in atomic context.
* Do not update ab8500 registers directly till this * Do not update ab8500 registers directly till this
* is fixed. * is fixed.
*/ */
if (!gadget) { if ((ab->mode != USB_IDLE) && (!gadget)) {
otg->gadget = NULL; ab->mode = USB_IDLE;
schedule_work(&ab->phy_dis_work); schedule_work(&ab->phy_dis_work);
} else {
otg->gadget = gadget;
otg->phy->state = OTG_STATE_B_IDLE;
} }
return 0; return 0;
...@@ -639,16 +638,16 @@ static int ab8500_usb_set_host(struct usb_otg *otg, struct usb_bus *host) ...@@ -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_to_ab(otg->phy);
ab->phy.otg->host = host;
/* Some drivers call this function in atomic context. /* Some drivers call this function in atomic context.
* Do not update ab8500 registers directly till this * Do not update ab8500 registers directly till this
* is fixed. * is fixed.
*/ */
if (!host) { if ((ab->mode != USB_IDLE) && (!host)) {
otg->host = NULL; ab->mode = USB_IDLE;
schedule_work(&ab->phy_dis_work); schedule_work(&ab->phy_dis_work);
} else {
otg->host = host;
} }
return 0; return 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment