| From caeb4c8d5ee71dab07e4e59405d28d1ed5fde0d4 Mon Sep 17 00:00:00 2001 |
| From: Roger Quadros <rogerq@ti.com> |
| Date: Tue, 3 Jan 2017 14:32:09 +0200 |
| Subject: [PATCH] usb: dwc3: gadget: Fix full speed mode |
| |
| commit 9418ee15f718939aa7e650fd586d73765eb21f20 upstream. |
| |
| DCFG.DEVSPD == 0x3 is not valid and we need to set |
| DCFG.DEVSPD to 0x1 for full speed mode. Same goes for |
| DSTS.CONNECTSPD. |
| |
| Old databooks had 0x3 for full speed in 48MHz mode for |
| USB1.1 transceivers which was never supported. Newer databooks |
| don't mention 0x3 at all. |
| |
| Cc: John Youn <John.Youn@synopsys.com> |
| Signed-off-by: Roger Quadros <rogerq@ti.com> |
| Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/drivers/usb/dwc3/core.h b/drivers/usb/dwc3/core.h |
| index 45d6de5107c7..d46b65ba7e77 100644 |
| --- a/drivers/usb/dwc3/core.h |
| +++ b/drivers/usb/dwc3/core.h |
| @@ -287,9 +287,8 @@ |
| #define DWC3_DCFG_SUPERSPEED_PLUS (5 << 0) /* DWC_usb31 only */ |
| #define DWC3_DCFG_SUPERSPEED (4 << 0) |
| #define DWC3_DCFG_HIGHSPEED (0 << 0) |
| -#define DWC3_DCFG_FULLSPEED2 (1 << 0) |
| +#define DWC3_DCFG_FULLSPEED (1 << 0) |
| #define DWC3_DCFG_LOWSPEED (2 << 0) |
| -#define DWC3_DCFG_FULLSPEED1 (3 << 0) |
| |
| #define DWC3_DCFG_NUMP_SHIFT 17 |
| #define DWC3_DCFG_NUMP(n) (((n) >> DWC3_DCFG_NUMP_SHIFT) & 0x1f) |
| @@ -381,9 +380,8 @@ |
| #define DWC3_DSTS_SUPERSPEED_PLUS (5 << 0) /* DWC_usb31 only */ |
| #define DWC3_DSTS_SUPERSPEED (4 << 0) |
| #define DWC3_DSTS_HIGHSPEED (0 << 0) |
| -#define DWC3_DSTS_FULLSPEED2 (1 << 0) |
| +#define DWC3_DSTS_FULLSPEED (1 << 0) |
| #define DWC3_DSTS_LOWSPEED (2 << 0) |
| -#define DWC3_DSTS_FULLSPEED1 (3 << 0) |
| |
| /* Device Generic Command Register */ |
| #define DWC3_DGCMD_SET_LMP 0x01 |
| diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c |
| index 717d5f6d3e7c..f493239eb33f 100644 |
| --- a/drivers/usb/dwc3/gadget.c |
| +++ b/drivers/usb/dwc3/gadget.c |
| @@ -1700,7 +1700,7 @@ static int __dwc3_gadget_start(struct dwc3 *dwc) |
| reg |= DWC3_DCFG_LOWSPEED; |
| break; |
| case USB_SPEED_FULL: |
| - reg |= DWC3_DCFG_FULLSPEED1; |
| + reg |= DWC3_DCFG_FULLSPEED; |
| break; |
| case USB_SPEED_HIGH: |
| reg |= DWC3_DCFG_HIGHSPEED; |
| @@ -2531,8 +2531,7 @@ static void dwc3_gadget_conndone_interrupt(struct dwc3 *dwc) |
| dwc->gadget.ep0->maxpacket = 64; |
| dwc->gadget.speed = USB_SPEED_HIGH; |
| break; |
| - case DWC3_DSTS_FULLSPEED2: |
| - case DWC3_DSTS_FULLSPEED1: |
| + case DWC3_DSTS_FULLSPEED: |
| dwc3_gadget_ep0_desc.wMaxPacketSize = cpu_to_le16(64); |
| dwc->gadget.ep0->maxpacket = 64; |
| dwc->gadget.speed = USB_SPEED_FULL; |
| -- |
| 2.10.1 |
| |