From 013be6c7ff569f3d664a0f3cbfb4e96bee63fe7c Mon Sep 17 00:00:00 2001 From: Pavankumar Kondeti Date: Mon, 7 Feb 2022 22:24:02 +0530 Subject: [PATCH] usb: dwc3: Don't touch gadget->max_speed while limiting the speed The gadget->max_speed should not be changed dynamically as it can mess up the descriptor preparation. Let it be the max supported by the hardware and changed the dwc3->maximum_speed to force the controller to enumerate at lower speed when needed. This makes sure that the descriptors for all speeds are cached during bind of the function drivers. Change-Id: Id7fd8f23bb84f7396a6e3b62c5e61c4536522d82 Signed-off-by: Pavankumar Kondeti --- drivers/usb/dwc3/dwc3-msm.c | 4 +--- drivers/usb/dwc3/gadget.c | 2 +- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/drivers/usb/dwc3/dwc3-msm.c b/drivers/usb/dwc3/dwc3-msm.c index 48e27d4c6f29..1cf76b17463a 100644 --- a/drivers/usb/dwc3/dwc3-msm.c +++ b/drivers/usb/dwc3/dwc3-msm.c @@ -3752,10 +3752,8 @@ skip_update: dwc->maximum_speed, dwc->max_hw_supp_speed, mdwc->override_usb_speed); if (mdwc->override_usb_speed && - mdwc->override_usb_speed <= dwc->maximum_speed) { + mdwc->override_usb_speed <= dwc->maximum_speed) dwc->maximum_speed = mdwc->override_usb_speed; - dwc->gadget.max_speed = dwc->maximum_speed; - } dbg_event(0xFF, "speed", dwc->maximum_speed); diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c index 0f271d6e080f..e053d666a387 100644 --- a/drivers/usb/dwc3/gadget.c +++ b/drivers/usb/dwc3/gadget.c @@ -4431,7 +4431,7 @@ int dwc3_gadget_init(struct dwc3 *dwc) dev_info(dwc->dev, "changing max_speed on rev %08x\n", dwc->revision); - dwc->gadget.max_speed = dwc->maximum_speed; + dwc->gadget.max_speed = dwc->max_hw_supp_speed; /* * REVISIT: Here we should clear all pending IRQs to be