usb: dwc3: gadget: Fix full speed mode
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>
This commit is contained in:
Родитель
7b01738112
Коммит
9418ee15f7
|
@ -309,9 +309,8 @@
|
||||||
#define DWC3_DCFG_SUPERSPEED_PLUS (5 << 0) /* DWC_usb31 only */
|
#define DWC3_DCFG_SUPERSPEED_PLUS (5 << 0) /* DWC_usb31 only */
|
||||||
#define DWC3_DCFG_SUPERSPEED (4 << 0)
|
#define DWC3_DCFG_SUPERSPEED (4 << 0)
|
||||||
#define DWC3_DCFG_HIGHSPEED (0 << 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_LOWSPEED (2 << 0)
|
||||||
#define DWC3_DCFG_FULLSPEED1 (3 << 0)
|
|
||||||
|
|
||||||
#define DWC3_DCFG_NUMP_SHIFT 17
|
#define DWC3_DCFG_NUMP_SHIFT 17
|
||||||
#define DWC3_DCFG_NUMP(n) (((n) >> DWC3_DCFG_NUMP_SHIFT) & 0x1f)
|
#define DWC3_DCFG_NUMP(n) (((n) >> DWC3_DCFG_NUMP_SHIFT) & 0x1f)
|
||||||
|
@ -403,9 +402,8 @@
|
||||||
#define DWC3_DSTS_SUPERSPEED_PLUS (5 << 0) /* DWC_usb31 only */
|
#define DWC3_DSTS_SUPERSPEED_PLUS (5 << 0) /* DWC_usb31 only */
|
||||||
#define DWC3_DSTS_SUPERSPEED (4 << 0)
|
#define DWC3_DSTS_SUPERSPEED (4 << 0)
|
||||||
#define DWC3_DSTS_HIGHSPEED (0 << 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_LOWSPEED (2 << 0)
|
||||||
#define DWC3_DSTS_FULLSPEED1 (3 << 0)
|
|
||||||
|
|
||||||
/* Device Generic Command Register */
|
/* Device Generic Command Register */
|
||||||
#define DWC3_DGCMD_SET_LMP 0x01
|
#define DWC3_DGCMD_SET_LMP 0x01
|
||||||
|
|
|
@ -1720,7 +1720,7 @@ static int __dwc3_gadget_start(struct dwc3 *dwc)
|
||||||
reg |= DWC3_DCFG_LOWSPEED;
|
reg |= DWC3_DCFG_LOWSPEED;
|
||||||
break;
|
break;
|
||||||
case USB_SPEED_FULL:
|
case USB_SPEED_FULL:
|
||||||
reg |= DWC3_DCFG_FULLSPEED1;
|
reg |= DWC3_DCFG_FULLSPEED;
|
||||||
break;
|
break;
|
||||||
case USB_SPEED_HIGH:
|
case USB_SPEED_HIGH:
|
||||||
reg |= DWC3_DCFG_HIGHSPEED;
|
reg |= DWC3_DCFG_HIGHSPEED;
|
||||||
|
@ -2536,8 +2536,7 @@ static void dwc3_gadget_conndone_interrupt(struct dwc3 *dwc)
|
||||||
dwc->gadget.ep0->maxpacket = 64;
|
dwc->gadget.ep0->maxpacket = 64;
|
||||||
dwc->gadget.speed = USB_SPEED_HIGH;
|
dwc->gadget.speed = USB_SPEED_HIGH;
|
||||||
break;
|
break;
|
||||||
case DWC3_DSTS_FULLSPEED2:
|
case DWC3_DSTS_FULLSPEED:
|
||||||
case DWC3_DSTS_FULLSPEED1:
|
|
||||||
dwc3_gadget_ep0_desc.wMaxPacketSize = cpu_to_le16(64);
|
dwc3_gadget_ep0_desc.wMaxPacketSize = cpu_to_le16(64);
|
||||||
dwc->gadget.ep0->maxpacket = 64;
|
dwc->gadget.ep0->maxpacket = 64;
|
||||||
dwc->gadget.speed = USB_SPEED_FULL;
|
dwc->gadget.speed = USB_SPEED_FULL;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче