| From bba005403bd2274ce60c099d9dbd5be1d7ed13e6 Mon Sep 17 00:00:00 2001 |
| From: Jack Pham <jackp@codeaurora.org> |
| Date: Thu, 30 Jan 2020 19:10:35 -0800 |
| Subject: [PATCH] usb: gadget: composite: Fix bMaxPower for SuperSpeedPlus |
| |
| commit c724417baf162bd3e035659e22cdf990cfb0d917 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: eae5820b852f ("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: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/drivers/usb/gadget/composite.c b/drivers/usb/gadget/composite.c |
| index 33115e19756c..fea7c7e0143f 100644 |
| --- a/drivers/usb/gadget/composite.c |
| +++ b/drivers/usb/gadget/composite.c |
| @@ -437,12 +437,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, |
| -- |
| 2.7.4 |
| |