Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2646021e authored by Felipe Balbi's avatar Felipe Balbi Committed by Greg Kroah-Hartman
Browse files

usb: dwc3: ep0: Make USB30CV happy with SetAddress



According to USB 3.0 Specification, a SetAddress()
while device is in Configured State has an unspecified
behavior (see Section 9.4.6). Still USB30CV wasn't
happy with my Stall reply.

To make that thing happy, just accept the SetAddress()
always. No problems have been observed thus far.

Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent 5b253d88
Loading
Loading
Loading
Loading
+9 −22
Original line number Original line Diff line number Diff line
@@ -421,7 +421,6 @@ static int dwc3_ep0_handle_feature(struct dwc3 *dwc,


static int dwc3_ep0_set_address(struct dwc3 *dwc, struct usb_ctrlrequest *ctrl)
static int dwc3_ep0_set_address(struct dwc3 *dwc, struct usb_ctrlrequest *ctrl)
{
{
	int ret = 0;
	u32 addr;
	u32 addr;
	u32 reg;
	u32 reg;


@@ -429,12 +428,6 @@ static int dwc3_ep0_set_address(struct dwc3 *dwc, struct usb_ctrlrequest *ctrl)
	if (addr > 127)
	if (addr > 127)
		return -EINVAL;
		return -EINVAL;


	switch (dwc->dev_state) {
	case DWC3_DEFAULT_STATE:
	case DWC3_ADDRESS_STATE:
		/*
		 * Not sure if we should program DevAddr now or later
		 */
	reg = dwc3_readl(dwc->regs, DWC3_DCFG);
	reg = dwc3_readl(dwc->regs, DWC3_DCFG);
	reg &= ~(DWC3_DCFG_DEVADDR_MASK);
	reg &= ~(DWC3_DCFG_DEVADDR_MASK);
	reg |= DWC3_DCFG_DEVADDR(addr);
	reg |= DWC3_DCFG_DEVADDR(addr);
@@ -444,14 +437,8 @@ static int dwc3_ep0_set_address(struct dwc3 *dwc, struct usb_ctrlrequest *ctrl)
		dwc->dev_state = DWC3_ADDRESS_STATE;
		dwc->dev_state = DWC3_ADDRESS_STATE;
	else
	else
		dwc->dev_state = DWC3_DEFAULT_STATE;
		dwc->dev_state = DWC3_DEFAULT_STATE;
		break;


	case DWC3_CONFIGURED_STATE:
	return 0;
		ret = -EINVAL;
		break;
	}

	return ret;
}
}


static int dwc3_ep0_delegate_req(struct dwc3 *dwc, struct usb_ctrlrequest *ctrl)
static int dwc3_ep0_delegate_req(struct dwc3 *dwc, struct usb_ctrlrequest *ctrl)