From c3de8d217902b965c26109d5937ca5594064f465 Mon Sep 17 00:00:00 2001 From: Udipto Goswami Date: Wed, 23 Jun 2021 14:00:29 +0530 Subject: [PATCH] usb: dwc3: Add support of disable L1 in HS mode On some platforms, L1 in HS mode is not supported. Add support to disable L1 in HS mode on those platforms by default through dt. Change-Id: I624bde1e091e6e864bf7f7af93804c3728374d0d Signed-off-by: Udipto Goswami --- drivers/usb/dwc3/core.c | 2 ++ drivers/usb/dwc3/core.h | 1 + drivers/usb/dwc3/gadget.c | 2 +- drivers/usb/gadget/composite.c | 3 ++- 4 files changed, 6 insertions(+), 2 deletions(-) diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c index 6791b4ca95dd..5395c52edf3d 100644 --- a/drivers/usb/dwc3/core.c +++ b/drivers/usb/dwc3/core.c @@ -1485,6 +1485,8 @@ static void dwc3_get_properties(struct dwc3 *dwc) "snps,dis-tx-ipgap-linecheck-quirk"); dwc->parkmode_disable_ss_quirk = device_property_read_bool(dev, "snps,parkmode-disable-ss-quirk"); + dwc->usb2_l1_disable = device_property_read_bool(dev, + "snps,usb2-l1-disable"); dwc->tx_de_emphasis_quirk = device_property_read_bool(dev, "snps,tx_de_emphasis_quirk"); diff --git a/drivers/usb/dwc3/core.h b/drivers/usb/dwc3/core.h index fee3cf068915..a019b0e6180e 100644 --- a/drivers/usb/dwc3/core.h +++ b/drivers/usb/dwc3/core.h @@ -1363,6 +1363,7 @@ struct dwc3 { unsigned tx_de_emphasis:2; unsigned err_evt_seen:1; unsigned enable_bus_suspend:1; + unsigned usb2_l1_disable:1; atomic_t in_lpm; bool b_suspend; diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c index fdc52c8d940e..aa03c5b6da10 100644 --- a/drivers/usb/dwc3/gadget.c +++ b/drivers/usb/dwc3/gadget.c @@ -4369,7 +4369,7 @@ int dwc3_gadget_init(struct dwc3 *dwc) dwc->gadget.speed = USB_SPEED_UNKNOWN; dwc->gadget.sg_supported = true; dwc->gadget.name = "dwc3-gadget"; - dwc->gadget.lpm_capable = true; + dwc->gadget.lpm_capable = !dwc->usb2_l1_disable; /* * FIXME We might be setting max_speed to desc.bMaxPacketSize0 = cdev->gadget->ep0->maxpacket; + cdev->desc.bcdUSB = cpu_to_le16(0x0200); if (gadget_is_superspeed(gadget)) { if (gadget->speed >= USB_SPEED_SUPER) { cdev->desc.bcdUSB = cpu_to_le16(0x0320); cdev->desc.bMaxPacketSize0 = 9; - } else { + } else if (gadget->lpm_capable) { cdev->desc.bcdUSB = cpu_to_le16(0x0210); } } else {