usb: otg: twl4030-usb: Fix unbalanced regulator disables at module removal
authorJarkko Nikula <jhnikula@gmail.com>
Tue, 30 Nov 2010 15:58:25 +0000 (17:58 +0200)
committerGreg Kroah-Hartman <gregkh@suse.de>
Wed, 1 Dec 2010 00:46:33 +0000 (16:46 -0800)
Function twl4030_usb_remove can cause unbalanced regulator disables in
twl4030_phy_power if the cable is not connected. Regulator enable/disable
calls are in balance only if the twl4030_phy_resume was called prior the
twl4030_usb_remove, that is, the cable was connected.

Fix this by checking the 'asleep' variable in twl4030_usb_remove since that
variable is used to check state in other functions.

Signed-off-by: Jarkko Nikula <jhnikula@gmail.com>
Cc: Felipe Balbi <balbi@ti.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/usb/otg/twl4030-usb.c

index d335f484fcd8dc2e58e8271c7334f08abfbee57f..6ca505f333e4936f8cf486324d2bbffd63693971 100644 (file)
@@ -678,7 +678,8 @@ static int __exit twl4030_usb_remove(struct platform_device *pdev)
        /* disable complete OTG block */
        twl4030_usb_clear_bits(twl, POWER_CTRL, POWER_CTRL_OTG_ENAB);
 
-       twl4030_phy_power(twl, 0);
+       if (!twl->asleep)
+               twl4030_phy_power(twl, 0);
        regulator_put(twl->usb1v5);
        regulator_put(twl->usb1v8);
        regulator_put(twl->usb3v1);