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

Commit 628fd947 authored by Azhar Shaikh's avatar Azhar Shaikh
Browse files

usb: gadget: Disable L1 LPM capability



Disable USB L1 LPM functionality on MSM platforms by setting the
USB version as 0x200 for all High Speed Devices.
Add a module param, which when enabled will set the USB version as
0x210. Module param can be enabled as

echo Y > /sys/module/libcomposite/parameters/enable_l1_for_hs

Change-Id: I781a237b44e542c6089af36b7ce0a0665d3cd440
Signed-off-by: default avatarAzhar Shaikh <azhars@codeaurora.org>
parent 55bc7ff0
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -2902,6 +2902,7 @@ static void dwc3_gadget_conndone_interrupt(struct dwc3 *dwc)
	reg = dwc3_readl(dwc->regs, DWC3_DSTS);
	speed = reg & DWC3_DSTS_CONNECTSPD;
	dwc->speed = speed;
	dwc->gadget.l1_supported = true;

	dwc3_update_ram_clk_sel(dwc, speed);

@@ -2930,6 +2931,7 @@ static void dwc3_gadget_conndone_interrupt(struct dwc3 *dwc)
	case DWC3_DCFG_HIGHSPEED:
		dwc3_gadget_ep0_desc.wMaxPacketSize = cpu_to_le16(64);
		dwc->gadget.ep0->maxpacket = 64;
		dwc->gadget.l1_supported = false;
		dwc->gadget.speed = USB_SPEED_HIGH;
		break;
	case DWC3_DCFG_FULLSPEED2:
+11 −3
Original line number Diff line number Diff line
@@ -23,6 +23,10 @@

#include "u_os_desc.h"

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");

/**
 * struct usb_os_string - represents OS String to be reported by a gadget
 * @bLength: total length of the entire descritor, always 0x12
@@ -1621,8 +1625,11 @@ composite_setup(struct usb_gadget *gadget, const struct usb_ctrlrequest *ctrl)
				if (gadget->speed >= USB_SPEED_SUPER) {
					cdev->desc.bcdUSB = cpu_to_le16(0x0300);
					cdev->desc.bMaxPacketSize0 = 9;
				} else {
				} else if (gadget->l1_supported ||
						enable_l1_for_hs) {
					cdev->desc.bcdUSB = cpu_to_le16(0x0210);
					DBG(cdev,
					"Config HS device with LPM(L1)\n");
				}
			} else if (gadget->l1_supported) {
				cdev->desc.bcdUSB = cpu_to_le16(0x0210);
@@ -1657,8 +1664,9 @@ composite_setup(struct usb_gadget *gadget, const struct usb_ctrlrequest *ctrl)
				value = min(w_length, (u16) value);
			break;
		case USB_DT_BOS:
			if (gadget_is_superspeed(gadget) ||
				gadget->l1_supported) {
			if ((gadget_is_superspeed(gadget) &&
				(gadget->speed >= USB_SPEED_SUPER))
				 || gadget->l1_supported) {
				value = bos_desc(cdev);
				value = min(w_length, (u16) value);
			}