On Mon, Dec 03, 2012 at 04:28:38PM -0500, Alan Stern wrote:
> On Mon, 3 Dec 2012, Sarah Sharp wrote:
> > This code in hcd.c:usb_add_hcd needs to change:
> >
> > /* starting here, usbcore will pay attention to this root hub */
> > rhdev->bus_mA = min(500u, hcd->power_budget);
>
> In fact, this line is wrong. The 500u should be multiplied by the
> number of ports -- and of course, it should be larger for SuperSpeed
> root hubs.
But I don't know the number of ports here. I could set this here to 500/900
and multiple later in hub_configure() by the number of ports.
Anyway, do you think this is correct? Anything > 500 for non-SS will replaced
with 500 in hub_configure:
| if (hdev == hdev->bus->root_hub) {
| if (hdev->bus_mA == 0 || hdev->bus_mA >= full_load)
| hub->mA_per_port = full_load;
| else {
| hub->mA_per_port = hdev->bus_mA;
| hub->limited_power = 1;
| }
going through the tree I saw most people set it to something around 200 (if at
all). There are a few omap/musb boards setting it to 500.
The interresting part is davinci of course. So there is comment that says
|"irlml6401 switches over 1A in under 8 msec"
and it calls davinci_setup_usb(1000, 8); which writes 255 in the power member
which musb in turn multiplies by 2. So we have 500mA again ;) I have no idea
how many ports they have.
> > The else statement after the above code also needs to change:
> >
> > } else if ((hubstatus & (1 << USB_DEVICE_SELF_POWERED)) == 0) {
> > dev_dbg(hub_dev, "hub controller current requirement:
> > %dmA\n",
> > hub->descriptor->bHubContrCurrent);
> > hub->limited_power = 1;
> > if (hdev->maxchild > 0) {
>
> Hmmm... This test doesn't look very important. Who cares about hubs
> with no ports?
I made it go away.
> > int remaining = hdev->bus_mA -
> > hub->descriptor->bHubContrCurrent;
> >
> > if (remaining < hdev->maxchild * 100)
> > dev_warn(hub_dev,
> > "insufficient power available "
> > "to use all downstream ports\n");
> > hub->mA_per_port = 100; /* 7.2.1.1 */
> >
> > I think this is trying to set the mA_per_port to the unconfigured device
> > power, which 7.2.1.1 says is one unit load.
> Not to the unconfigured device power but simply to one unit load.
> 7.2.1 says:
>
> External ports in a bus-powered hub can supply only one unit
> load per port regardless of the current draw on the other ports
> of that hub.
>
> The comment actually should refer to 7.2.1, not 7.2.1.1.
Fixed up.
and the others as well. Will post them in a jiffy or two.
Sebastian
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html