Skip to content

Commit

Permalink
usb: gadget: composite: Fix bMaxPower for SuperSpeedPlus
Browse files Browse the repository at this point in the history
commit c724417 upstream.

SuperSpeedPlus peripherals must report their bMaxPower of the
configuration descriptor in units of 8mA as per the USB 3.2
specification. The current switch statement in encode_bMaxPower()
only checks for USB_SPEED_SUPER but not USB_SPEED_SUPER_PLUS so
the latter falls back to USB 2.0 encoding which uses 2mA units.
Replace the switch with a simple if/else.

Fixes: eae5820 ("usb: gadget: composite: Write SuperSpeedPlus config descriptors")
Signed-off-by: Jack Pham <jackp@codeaurora.org>
Signed-off-by: Felipe Balbi <balbi@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  • Loading branch information
Jack Pham authored and Greg Kroah-Hartman committed Feb 28, 2020
1 parent 6b0cc7a commit 220d496
Showing 1 changed file with 3 additions and 5 deletions.
8 changes: 3 additions & 5 deletions drivers/usb/gadget/composite.c
Original file line number Diff line number Diff line change
Expand Up @@ -440,12 +440,10 @@ static u8 encode_bMaxPower(enum usb_device_speed speed,
val = CONFIG_USB_GADGET_VBUS_DRAW;
if (!val)
return 0;
switch (speed) {
case USB_SPEED_SUPER:
return DIV_ROUND_UP(val, 8);
default:
if (speed < USB_SPEED_SUPER)
return DIV_ROUND_UP(val, 2);
}
else
return DIV_ROUND_UP(val, 8);
}

static int config_buf(struct usb_configuration *config,
Expand Down

0 comments on commit 220d496

Please sign in to comment.