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:
parent
8db12231bc
commit
5882337338
|
@ -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)
|
||||||
|
|
||||||
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;
|
||||||
|
|
Loading…
Reference in New Issue