Skip to content

Commit

Permalink
[PATCH] USB: print message when device is rejected due to insufficien…
Browse files Browse the repository at this point in the history
…t power

2.6.16 introduces USB power budgeting in the Linux kernel, and since then, a
fair number of users have observed that some of their devices no longer work in
unpowered hubs (this is not a bug, the devices claim that they need more than
100mA).

The very least we can do is print an informational message to the kernel log
when this happens, otherwise it is not at all clear why the device was not
accepted.

Signed-off-by: Daniel Drake <dsd@gentoo.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
  • Loading branch information
Daniel Drake authored and Greg Kroah-Hartman committed Jun 21, 2006
1 parent 955a260 commit 1fbe75e
Showing 1 changed file with 9 additions and 1 deletion.
10 changes: 9 additions & 1 deletion drivers/usb/core/hub.c
Original file line number Diff line number Diff line change
Expand Up @@ -1176,6 +1176,7 @@ static int choose_configuration(struct usb_device *udev)
{
int i;
int num_configs;
int insufficient_power = 0;
struct usb_host_config *c, *best;

best = NULL;
Expand Down Expand Up @@ -1228,8 +1229,10 @@ static int choose_configuration(struct usb_device *udev)
*/

/* Rule out configs that draw too much bus current */
if (c->desc.bMaxPower * 2 > udev->bus_mA)
if (c->desc.bMaxPower * 2 > udev->bus_mA) {
insufficient_power++;
continue;
}

/* If the first config's first interface is COMM/2/0xff
* (MSFT RNDIS), rule it out unless Linux has host-side
Expand Down Expand Up @@ -1263,6 +1266,11 @@ static int choose_configuration(struct usb_device *udev)
best = c;
}

if (insufficient_power > 0)
dev_info(&udev->dev, "rejected %d configuration%s "
"due to insufficient available bus power\n",
insufficient_power, plural(insufficient_power));

if (best) {
i = best->desc.bConfigurationValue;
dev_info(&udev->dev,
Expand Down

0 comments on commit 1fbe75e

Please sign in to comment.