Loading drivers/usb/dwc3/gadget.c +2 −0 Original line number Diff line number Diff line Loading @@ -2926,6 +2926,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); Loading Loading @@ -2954,6 +2955,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: Loading drivers/usb/gadget/composite.c +11 −3 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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); Loading Loading @@ -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); } Loading Loading
drivers/usb/dwc3/gadget.c +2 −0 Original line number Diff line number Diff line Loading @@ -2926,6 +2926,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); Loading Loading @@ -2954,6 +2955,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: Loading
drivers/usb/gadget/composite.c +11 −3 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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); Loading Loading @@ -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); } Loading