Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5bcf7e3e authored by qctecmdr's avatar qctecmdr Committed by Gerrit - the friendly Code Review server
Browse files

Merge "usb: gadget: composite: Support more than 500mA MaxPower"

parents ab470e82 876ce3a3
Loading
Loading
Loading
Loading
+18 −6
Original line number Diff line number Diff line
@@ -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,
@@ -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)
@@ -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?
@@ -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;