Loading drivers/usb/gadget/composite.c +18 −6 Original line number Diff line number Diff line Loading @@ -483,9 +483,13 @@ static u8 encode_bMaxPower(enum usb_device_speed speed, if (!val) return 0; if (speed < USB_SPEED_SUPER) return DIV_ROUND_UP(val, 2); return min(val, 500U) / 2; else return DIV_ROUND_UP(val, 8); /* * USB 3.x supports up to 900mA, but since 900 isn't divisible * by 8 the integral division will effectively cap to 896mA. */ return min(val, 900U) / 8; } static int config_buf(struct usb_configuration *config, Loading Loading @@ -897,6 +901,10 @@ 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 (gadget->speed < USB_SPEED_SUPER) power = min(power, 500U); else power = min(power, 900U); done: usb_gadget_vbus_draw(gadget, power); if (result >= 0 && cdev->delayed_status) Loading Loading @@ -2329,7 +2337,7 @@ void composite_resume(struct usb_gadget *gadget) { struct usb_composite_dev *cdev = get_gadget_data(gadget); struct usb_function *f; u16 maxpower; unsigned int maxpower; /* REVISIT: should we have config level * suspend/resume callbacks? Loading @@ -2343,10 +2351,14 @@ void composite_resume(struct usb_gadget *gadget) f->resume(f); } maxpower = cdev->config->MaxPower; maxpower = cdev->config->MaxPower ? cdev->config->MaxPower : CONFIG_USB_GADGET_VBUS_DRAW; if (gadget->speed < USB_SPEED_SUPER) maxpower = min(maxpower, 500U); else maxpower = min(maxpower, 900U); usb_gadget_vbus_draw(gadget, maxpower ? maxpower : CONFIG_USB_GADGET_VBUS_DRAW); usb_gadget_vbus_draw(gadget, maxpower); } cdev->suspended = 0; Loading Loading
drivers/usb/gadget/composite.c +18 −6 Original line number Diff line number Diff line Loading @@ -483,9 +483,13 @@ static u8 encode_bMaxPower(enum usb_device_speed speed, if (!val) return 0; if (speed < USB_SPEED_SUPER) return DIV_ROUND_UP(val, 2); return min(val, 500U) / 2; else return DIV_ROUND_UP(val, 8); /* * USB 3.x supports up to 900mA, but since 900 isn't divisible * by 8 the integral division will effectively cap to 896mA. */ return min(val, 900U) / 8; } static int config_buf(struct usb_configuration *config, Loading Loading @@ -897,6 +901,10 @@ 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 (gadget->speed < USB_SPEED_SUPER) power = min(power, 500U); else power = min(power, 900U); done: usb_gadget_vbus_draw(gadget, power); if (result >= 0 && cdev->delayed_status) Loading Loading @@ -2329,7 +2337,7 @@ void composite_resume(struct usb_gadget *gadget) { struct usb_composite_dev *cdev = get_gadget_data(gadget); struct usb_function *f; u16 maxpower; unsigned int maxpower; /* REVISIT: should we have config level * suspend/resume callbacks? Loading @@ -2343,10 +2351,14 @@ void composite_resume(struct usb_gadget *gadget) f->resume(f); } maxpower = cdev->config->MaxPower; maxpower = cdev->config->MaxPower ? cdev->config->MaxPower : CONFIG_USB_GADGET_VBUS_DRAW; if (gadget->speed < USB_SPEED_SUPER) maxpower = min(maxpower, 500U); else maxpower = min(maxpower, 900U); usb_gadget_vbus_draw(gadget, maxpower ? maxpower : CONFIG_USB_GADGET_VBUS_DRAW); usb_gadget_vbus_draw(gadget, maxpower); } cdev->suspended = 0; Loading