At 07:47 AM 9/28/2007 -0700, John Nemeth wrote:I'm not sure that anybody but me is interested in the following trivia, but (with apologies to Adam Smith) one should willing to risk being tedious in order to be clear. Technically speaking, those fans, lights and other such "devices" are not legal USB devices. They don't present USB descriptors and they rely on the root hub port (or the non-root hub port) to provide 100mA forever. That's not specified behavior of any hub, but it works well enough for Wal-Mart and Fry's (i.e., very low level of returns from customers). Legal USB devices have four collections of power-relevant states: *) the states (powered, default, address) before the host selects a USB configuration, *) the state (configured) after a USB configuration has been selected by the host (in this case, normally we say "the device is configured"), *) the state in which the device is suspended and cannot wake up the host, and *) the state in which the device is suspended and CAN wake up the host. If a device is suspended and cannot wake up the computer, it can only draw 0.5mA. If a device is suspended and can wake up the computer, it can draw 2.5mA. If a device is not suspended, but has not been configured, it is only permitted to draw up 100mA. If a device is not suspended, but has been configured, it may draw as much current as the device specified in its description of the selected USB configuration (from 0mA to 500mA, normally either 100mA or 500mA). The only state in which there's enough power to charge a phone is the last one. To further complicate matters, not all hubs can provide 500mA. Worse, you can't tell, because hubs lie about their capabilities in this area (to work better with Windows?). [I'm eliding a number of details, but this is easily demonstrable.] The USB host stack cannot actually tell whether 500mA will really work. So on Windows, the USB class driver often needs to do some guessing. Sometimes this is assisted by clever hardware that disconnects, and reconnects with a different personality after it determines that it's got a "working partner" on the host side. Since some host-side software is needed in order to do things right, often the product manager makes the conservative choice to "do no harm" -- which means (for such devices on NetBSD) that just plugging the device in won't let you charge. BTW, I don't know how ugen works, but I suspect/hope that it doesn't send set-config until after an app opens the device. (That would limit you to 100mA.) On laptops, I'd further hope that ugen would suspend the port to minimize power consumption until an app opens the device. In that case, you won't get any power at all for charging. Umass has to configure the device in order to talk to it. However, the configuration that it chooses might not be the right one (if the device offers multiple choices). Most phones offer a mode in which they are concurrently wireless modems and mass storage devices (for example), and this is called a "composite" device in USB-speak. Normally, in this case, the function drivers can't choose, because they can't get loaded until the overall (device-level) driver has selected a configuration. This is all to say "it's not that simple" -- don't expect that the right answer for a Blackberry will be the right answer for a SonyEricsson phone. (In fact, don't expect that the right answer for one model from vendor X is the right answer for all models from vendor X -- SymbianOS phones may work differently from WinCE phones, which may work differently from "feature phones". And so forth.) If people want more info, I'll be happy to offer free advice (worth every penny, as the saying goes). No time to write code, alas, too busy attending standards committee meetings..... Best regards, --Terry
| Greg Kroah-Hartman | [PATCH 004/196] Chinese: add translation of SubmittingPatches |
| David Chinner | Re: [RFD] BIO_RW_BARRIER - what it means for devices, filesystems, and dm/md. |
| Andrew Morton | -mm merge plans for 2.6.23 |
| Trent Piepho | Re: [PATCH] [POWERPC] Improve (in|out)_beXX() asm code |
git: | |
| David Miller | Re: iptables very slow after commit784544739a25c30637397ace5489eeb6e15d7d49 |
| Jarek Poplawski | [PATCH] pkt_sched: Destroy gen estimators under rtnl_lock(). |
| Gerrit Renker | [PATCH 27/37] dccp: Integration of dynamic feature activation - part 2 (server side) |
| David Miller | [GIT]: Networking |
