diff options
Diffstat (limited to 'drivers/usb/otg/twl4030-usb.c')
-rw-r--r-- | drivers/usb/otg/twl4030-usb.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/drivers/usb/otg/twl4030-usb.c b/drivers/usb/otg/twl4030-usb.c index e01b073cc489..efeb4d1517ff 100644 --- a/drivers/usb/otg/twl4030-usb.c +++ b/drivers/usb/otg/twl4030-usb.c | |||
@@ -160,6 +160,7 @@ struct twl4030_usb { | |||
160 | 160 | ||
161 | int irq; | 161 | int irq; |
162 | u8 linkstat; | 162 | u8 linkstat; |
163 | bool vbus_supplied; | ||
163 | u8 asleep; | 164 | u8 asleep; |
164 | bool irq_enabled; | 165 | bool irq_enabled; |
165 | }; | 166 | }; |
@@ -250,6 +251,8 @@ static enum usb_xceiv_events twl4030_usb_linkstat(struct twl4030_usb *twl) | |||
250 | int status; | 251 | int status; |
251 | int linkstat = USB_EVENT_NONE; | 252 | int linkstat = USB_EVENT_NONE; |
252 | 253 | ||
254 | twl->vbus_supplied = false; | ||
255 | |||
253 | /* | 256 | /* |
254 | * For ID/VBUS sensing, see manual section 15.4.8 ... | 257 | * For ID/VBUS sensing, see manual section 15.4.8 ... |
255 | * except when using only battery backup power, two | 258 | * except when using only battery backup power, two |
@@ -265,6 +268,9 @@ static enum usb_xceiv_events twl4030_usb_linkstat(struct twl4030_usb *twl) | |||
265 | if (status < 0) | 268 | if (status < 0) |
266 | dev_err(twl->dev, "USB link status err %d\n", status); | 269 | dev_err(twl->dev, "USB link status err %d\n", status); |
267 | else if (status & (BIT(7) | BIT(2))) { | 270 | else if (status & (BIT(7) | BIT(2))) { |
271 | if (status & (BIT(7))) | ||
272 | twl->vbus_supplied = true; | ||
273 | |||
268 | if (status & BIT(2)) | 274 | if (status & BIT(2)) |
269 | linkstat = USB_EVENT_ID; | 275 | linkstat = USB_EVENT_ID; |
270 | else | 276 | else |
@@ -484,7 +490,7 @@ static ssize_t twl4030_usb_vbus_show(struct device *dev, | |||
484 | 490 | ||
485 | spin_lock_irqsave(&twl->lock, flags); | 491 | spin_lock_irqsave(&twl->lock, flags); |
486 | ret = sprintf(buf, "%s\n", | 492 | ret = sprintf(buf, "%s\n", |
487 | (twl->linkstat == USB_EVENT_VBUS) ? "on" : "off"); | 493 | twl->vbus_supplied ? "on" : "off"); |
488 | spin_unlock_irqrestore(&twl->lock, flags); | 494 | spin_unlock_irqrestore(&twl->lock, flags); |
489 | 495 | ||
490 | return ret; | 496 | return ret; |
@@ -608,6 +614,7 @@ static int __devinit twl4030_usb_probe(struct platform_device *pdev) | |||
608 | twl->otg.set_peripheral = twl4030_set_peripheral; | 614 | twl->otg.set_peripheral = twl4030_set_peripheral; |
609 | twl->otg.set_suspend = twl4030_set_suspend; | 615 | twl->otg.set_suspend = twl4030_set_suspend; |
610 | twl->usb_mode = pdata->usb_mode; | 616 | twl->usb_mode = pdata->usb_mode; |
617 | twl->vbus_supplied = false; | ||
611 | twl->asleep = 1; | 618 | twl->asleep = 1; |
612 | 619 | ||
613 | /* init spinlock for workqueue */ | 620 | /* init spinlock for workqueue */ |