aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/otg
diff options
context:
space:
mode:
authorMatthias Kaehlcke <matthias.kaehlcke@tomtom.com>2011-04-01 17:02:07 -0400
committerGreg Kroah-Hartman <gregkh@suse.de>2011-04-13 19:48:17 -0400
commita87103a6d4a91cbb9be49d3bbd2f35dcf5510da1 (patch)
treed80a2847cbcea1600d9e2dc636b19e8e9f51fbb3 /drivers/usb/otg
parent0b0cd6c81defc4e4fccb9e9103666547fefdb9c0 (diff)
USB: twl4030-usb: Report correct vbus value for accessory charger adapters1
The twl4030-usb driver exports the status of VBUS as sysfs attribute. In case an accessory charger adapter (ACA) is connected to the OTG transceiver the attribute is always 'off', even when the charger provides VBUS. Added a variable to keep track of the status of VBUS and report it correctly Signed-off-by: Matthias Kaehlcke <matthias.kaehlcke@tomtom.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/usb/otg')
-rw-r--r--drivers/usb/otg/twl4030-usb.c9
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 */