Re: [PATCH 6/6] twl4030-usb: Don't report EVENT_ID when there is VBUS.
Hi, On Wed, Apr 25, 2012 at 05:33:11PM +1000, NeilBrown wrote: Some USB chargers tie the ID pin low via various resistors. So they can cause VBUS to be high and ID to be low. The 'A' end of an OTG cable never receives VBUS, it only ever generates it. this isn't entirely true. Have you considered Accessory Charger Adapters ? So if we see VBUS and are not generating it, this must be a charger, not the A end of an OTG cable, so in that case, ignore the fact that ID is low. wrong. -- balbi signature.asc Description: Digital signature
Re: [PATCH 6/6] twl4030-usb: Don't report EVENT_ID when there is VBUS.
On Wed, 25 Apr 2012 11:05:27 +0300 Felipe Balbi ba...@ti.com wrote: Hi, On Wed, Apr 25, 2012 at 05:33:11PM +1000, NeilBrown wrote: Some USB chargers tie the ID pin low via various resistors. So they can cause VBUS to be high and ID to be low. The 'A' end of an OTG cable never receives VBUS, it only ever generates it. this isn't entirely true. Have you considered Accessory Charger Adapters ? I confess that I probably did get lost amid the maze of twisty standards - all different. Looking at http://en.wikipedia.org/wiki/USB_On-The-Go it seems that a USB Accessory Charger Adapter can present 3 states including: A charger and a B-device are attached. The OTG device is allowed to charge and enter host mode. which would mean that the TWL4030 would see that A end of an OTG cable, and VBUS asserted. However that appears to be selected if the ID resistance is 36.5Kohms, while others are selected for 68Kohm and 124Kohm. But the twl4030 cannot detect that distinction. The cut-offs are Ground, 102K, 200K, 440K, Floating so it seems this is a standard that post-dates TWL4030. It also seems to be specific to OTG Micro plugs, and I have an OTG Mini plug (does TWL4030 support Micro plugs? Does it care?) So if we see VBUS and are not generating it, this must be a charger, not the A end of an OTG cable, so in that case, ignore the fact that ID is low. wrong. That may well be. However we need some way to tell twl4030_charger.c either USB_EVENT_VBUS or USB_EVENT_CHARGER when a charger is plugged in. I guess we could just punt to user-space: provide all the measurements through sysfs and allow user-space to enable the charger and select the desired current? Or should this just go in the too-hard basket for now? Thanks, NeilBrown signature.asc Description: PGP signature
Re: [PATCH 6/6] twl4030-usb: Don't report EVENT_ID when there is VBUS.
On Wed, Apr 25, 2012 at 10:33 AM, NeilBrown ne...@suse.de wrote: Some USB chargers tie the ID pin low via various resistors. So they can cause VBUS to be high and ID to be low. The 'A' end of an OTG cable never receives VBUS, it only ever generates it. So if we see VBUS and are not generating it, this must be a charger, not the A end of an OTG cable, so in that case, ignore the fact that ID is low. This assumes that VBUS_PRES isn't asserted when the charge pump is providing VBUS. The document isn't clear on this and some experiments suggest that it isn't. Like already mentioned, this is not what I see on pandora. I don't know, maybe it's due to some errata or different versions of TWL chip act different, or perhaps even board design issue, but that's how it is here. If you look at git history, this has been changed back and forth several times, like in commit def6f8b9. Perhaps some platform_data could be added to handle this, I don't know.. Signed-off-by: NeilBrown ne...@suse.de --- drivers/usb/otg/twl4030-usb.c | 19 ++- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/drivers/usb/otg/twl4030-usb.c b/drivers/usb/otg/twl4030-usb.c index bd8fe9b..990400f 100644 --- a/drivers/usb/otg/twl4030-usb.c +++ b/drivers/usb/otg/twl4030-usb.c @@ -268,15 +268,16 @@ static enum usb_phy_events twl4030_usb_linkstat(struct twl4030_usb *twl) STS_HW_CONDITIONS); 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 - linkstat = USB_EVENT_VBUS; - } else + else if (status (BIT(7))) { + /* We have VBUS so ignore ID_PRES - it is only meaningful + * as an indicator of an A plug when there is no + * VBUS. + */ + twl-vbus_supplied = true; + linkstat = USB_EVENT_VBUS; + } else if (status BIT(2)) + linkstat = USB_EVENT_ID; + else linkstat = USB_EVENT_NONE; dev_dbg(twl-dev, HW_CONDITIONS 0x%02x/%d; link %d\n, -- Gražvydas -- To unsubscribe from this list: send the line unsubscribe linux-omap in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html