summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAzhar Shaikh <azhars@codeaurora.org>2015-07-02 18:11:33 -0700
committerDavid Keitel <dkeitel@codeaurora.org>2016-03-22 11:02:58 -0700
commita99d4a5017ec38797d14dd9a3d091d363055549e (patch)
tree61c88b521e83bf19fe1cf7abe816945f5800bdb1
parent37648e8eb6e3ae452be349025797e1e1881d1710 (diff)
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: Azhar Shaikh <azhars@codeaurora.org>
-rw-r--r--drivers/usb/gadget/composite.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/drivers/usb/gadget/composite.c b/drivers/usb/gadget/composite.c
index 7f2843899c41..50be4fd1d11e 100644
--- a/drivers/usb/gadget/composite.c
+++ b/drivers/usb/gadget/composite.c
@@ -27,6 +27,10 @@
#define SSUSB_GADGET_VBUS_DRAW_UNITS 8
#define HSUSB_GADGET_VBUS_DRAW_UNITS 2
+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
@@ -1625,8 +1629,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);
@@ -1661,8 +1668,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);
}