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

Commit b297b55c authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "usb: composite: Draw 900mA on USB resume if speed is super-speed"

parents d078f039 050ef51b
Loading
Loading
Loading
Loading
+10 −13
Original line number Diff line number Diff line
@@ -28,6 +28,14 @@
#define SSUSB_GADGET_VBUS_DRAW_UNITS 8
#define HSUSB_GADGET_VBUS_DRAW_UNITS 2

/*
 * Based on enumerated USB speed, draw power with set_config and resume
 * HSUSB: 500mA, SSUSB: 900mA
 */
#define USB_VBUS_DRAW(speed)\
	(speed == USB_SPEED_SUPER ?\
	SSUSB_GADGET_VBUS_DRAW : CONFIG_USB_GADGET_VBUS_DRAW)

static bool enable_l1_for_hs;
module_param(enable_l1_for_hs, bool, S_IRUGO | S_IWUSR);
MODULE_PARM_DESC(enable_l1_for_hs, "Enable support for L1 LPM for HS devices");
@@ -750,7 +758,6 @@ static int set_config(struct usb_composite_dev *cdev,
	struct usb_gadget	*gadget = cdev->gadget;
	struct usb_configuration *c = NULL;
	int			result = -EINVAL;
	unsigned		power = gadget_is_otg(gadget) ? 8 : 100;
	int			tmp;

	/*
@@ -864,14 +871,8 @@ static int set_config(struct usb_composite_dev *cdev,
		}
	}

	/* Allow 900mA to draw with Super-Speed */
	if (gadget->speed == USB_SPEED_SUPER)
		power = SSUSB_GADGET_VBUS_DRAW;
	else
		power = CONFIG_USB_GADGET_VBUS_DRAW;

done:
	usb_gadget_vbus_draw(gadget, power);
	usb_gadget_vbus_draw(gadget, USB_VBUS_DRAW(gadget->speed));
	if (result >= 0 && cdev->delayed_status)
		result = USB_GADGET_DELAYED_STATUS;
	return result;
@@ -2305,7 +2306,6 @@ composite_resume(struct usb_gadget *gadget)
{
	struct usb_composite_dev	*cdev = get_gadget_data(gadget);
	struct usb_function		*f;
	u16				maxpower;
	int ret;
	unsigned long			flags;

@@ -2338,10 +2338,7 @@ composite_resume(struct usb_gadget *gadget)
				f->resume(f);
		}

		maxpower = cdev->config->MaxPower;

		usb_gadget_vbus_draw(gadget, maxpower ?
			maxpower : CONFIG_USB_GADGET_VBUS_DRAW);
		usb_gadget_vbus_draw(gadget, USB_VBUS_DRAW(gadget->speed));
	}

	spin_unlock_irqrestore(&cdev->lock, flags);