Skip to content

Commit 5e5caf4

Browse files
Thinh Nguyenfelipebalbi
authored andcommitted
usb: gadget: composite: Inform controller driver of self-powered
Different configuration/condition may draw different power. Inform the controller driver of the change so it can respond properly (e.g. GET_STATUS request). This fixes an issue with setting MaxPower from configfs. The composite driver doesn't check this value when setting self-powered. Cc: stable@vger.kernel.org Fixes: 88af8bb ("usb: gadget: the start of the configfs interface") Signed-off-by: Thinh Nguyen <thinhn@synopsys.com> Signed-off-by: Felipe Balbi <balbi@kernel.org>
1 parent eeead84 commit 5e5caf4

File tree

1 file changed

+9
-0
lines changed

1 file changed

+9
-0
lines changed

drivers/usb/gadget/composite.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -861,6 +861,11 @@ static int set_config(struct usb_composite_dev *cdev,
861861
else
862862
power = min(power, 900U);
863863
done:
864+
if (power <= USB_SELF_POWER_VBUS_MAX_DRAW)
865+
usb_gadget_set_selfpowered(gadget);
866+
else
867+
usb_gadget_clear_selfpowered(gadget);
868+
864869
usb_gadget_vbus_draw(gadget, power);
865870
if (result >= 0 && cdev->delayed_status)
866871
result = USB_GADGET_DELAYED_STATUS;
@@ -2279,6 +2284,7 @@ void composite_suspend(struct usb_gadget *gadget)
22792284

22802285
cdev->suspended = 1;
22812286

2287+
usb_gadget_set_selfpowered(gadget);
22822288
usb_gadget_vbus_draw(gadget, 2);
22832289
}
22842290

@@ -2307,6 +2313,9 @@ void composite_resume(struct usb_gadget *gadget)
23072313
else
23082314
maxpower = min(maxpower, 900U);
23092315

2316+
if (maxpower > USB_SELF_POWER_VBUS_MAX_DRAW)
2317+
usb_gadget_clear_selfpowered(gadget);
2318+
23102319
usb_gadget_vbus_draw(gadget, maxpower);
23112320
}
23122321

0 commit comments

Comments
 (0)