Merge branch 'docs-move' of git://git.kernel.org/pub/scm/linux/kernel/git/rdunlap...
[pandora-kernel.git] / drivers / usb / otg / twl4030-usb.c
index e01b073..efeb4d1 100644 (file)
@@ -160,6 +160,7 @@ struct twl4030_usb {
 
        int                     irq;
        u8                      linkstat;
+       bool                    vbus_supplied;
        u8                      asleep;
        bool                    irq_enabled;
 };
@@ -250,6 +251,8 @@ static enum usb_xceiv_events twl4030_usb_linkstat(struct twl4030_usb *twl)
        int     status;
        int     linkstat = USB_EVENT_NONE;
 
+       twl->vbus_supplied = false;
+
        /*
         * For ID/VBUS sensing, see manual section 15.4.8 ...
         * except when using only battery backup power, two
@@ -265,6 +268,9 @@ static enum usb_xceiv_events twl4030_usb_linkstat(struct twl4030_usb *twl)
        if (status < 0)
                dev_err(twl->dev, "USB link status err %d\n", status);
        else if (status & (BIT(7) | BIT(2))) {
+               if (status & (BIT(7)))
+                        twl->vbus_supplied = true;
+
                if (status & BIT(2))
                        linkstat = USB_EVENT_ID;
                else
@@ -484,7 +490,7 @@ static ssize_t twl4030_usb_vbus_show(struct device *dev,
 
        spin_lock_irqsave(&twl->lock, flags);
        ret = sprintf(buf, "%s\n",
-                       (twl->linkstat == USB_EVENT_VBUS) ? "on" : "off");
+                       twl->vbus_supplied ? "on" : "off");
        spin_unlock_irqrestore(&twl->lock, flags);
 
        return ret;
@@ -608,6 +614,7 @@ static int __devinit twl4030_usb_probe(struct platform_device *pdev)
        twl->otg.set_peripheral = twl4030_set_peripheral;
        twl->otg.set_suspend    = twl4030_set_suspend;
        twl->usb_mode           = pdata->usb_mode;
+       twl->vbus_supplied      = false;
        twl->asleep = 1;
 
        /* init spinlock for workqueue */