Re: [PATCH 6/6] twl4030-usb: Don't report EVENT_ID when there is VBUS.

2012-04-25 Thread Felipe Balbi
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.

2012-04-25 Thread NeilBrown
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.

2012-04-25 Thread Grazvydas Ignotas
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