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: Sakethram Bommisetti <sakethram.bommisetti@stericsson.com>
Acked-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Fabio Baltieri <fabio.baltieri@linaro.org>
Signed-off-by: Felipe Balbi <balbi@ti.com>
This commit is contained in:
Sakethram Bommisetti 2013-04-03 10:45:13 +02:00 committed by Felipe Balbi
parent 8db12231bc
commit 5882337338
1 changed files with 8 additions and 9 deletions

View File

@ -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;