From a109977adf55163f33e4c8e73bbb235513877e77 Mon Sep 17 00:00:00 2001 From: Jack Pham Date: Tue, 1 Dec 2020 09:29:12 -0800 Subject: [PATCH] usb: gadget: composite: Allow vbus_draw() to be called with 0mA Similar to commit 9ffbd89c4a1a ("USB: gadget: composite: Allow bMaxPower=0 if self-powered"), c->MaxPower may be allowed to be 0 when the gadget's configuration indicates it is self-powered. Thus allow 0 to be passed directly to usb_gadget_vbus_draw() instead of defaulting to CONFIG_USB_GADGET_VBUS_DRAW which is non-zero. Change-Id: I4bf677a31a449c7763e2decad4860909f359dcb7 Signed-off-by: Jack Pham --- drivers/usb/gadget/composite.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/drivers/usb/gadget/composite.c b/drivers/usb/gadget/composite.c index bb47d39aa0ff..e3899f2c6e07 100644 --- a/drivers/usb/gadget/composite.c +++ b/drivers/usb/gadget/composite.c @@ -944,7 +944,11 @@ static int set_config(struct usb_composite_dev *cdev, } /* when we return, be sure our power usage is valid */ - power = c->MaxPower ? c->MaxPower : CONFIG_USB_GADGET_VBUS_DRAW; + if (c->MaxPower || (c->bmAttributes & USB_CONFIG_ATT_SELFPOWER)) + power = c->MaxPower; + else + power = CONFIG_USB_GADGET_VBUS_DRAW; + if (gadget->speed < USB_SPEED_SUPER) power = min(power, 500U); else