Skip to content

Commit

Permalink
USB: twl4030-usb: Report correct vbus value for accessory charger ada…
Browse files Browse the repository at this point in the history
…pters1

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>
  • Loading branch information
Matthias Kaehlcke authored and Greg Kroah-Hartman committed Apr 13, 2011
1 parent 0b0cd6c commit a87103a
Showing 1 changed file with 8 additions and 1 deletion.
9 changes: 8 additions & 1 deletion drivers/usb/otg/twl4030-usb.c
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,7 @@ struct twl4030_usb {

int irq;
u8 linkstat;
bool vbus_supplied;
u8 asleep;
bool irq_enabled;
};
Expand Down Expand Up @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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 */
Expand Down

0 comments on commit a87103a

Please sign in to comment.