aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/usb/dwc3/ep0.c31
1 files changed, 9 insertions, 22 deletions
diff --git a/drivers/usb/dwc3/ep0.c b/drivers/usb/dwc3/ep0.c
index b66d96905728..e058961a547c 100644
--- a/drivers/usb/dwc3/ep0.c
+++ b/drivers/usb/dwc3/ep0.c
@@ -421,7 +421,6 @@ static int dwc3_ep0_handle_feature(struct dwc3 *dwc,
421 421
422static int dwc3_ep0_set_address(struct dwc3 *dwc, struct usb_ctrlrequest *ctrl) 422static int dwc3_ep0_set_address(struct dwc3 *dwc, struct usb_ctrlrequest *ctrl)
423{ 423{
424 int ret = 0;
425 u32 addr; 424 u32 addr;
426 u32 reg; 425 u32 reg;
427 426
@@ -429,29 +428,17 @@ static int dwc3_ep0_set_address(struct dwc3 *dwc, struct usb_ctrlrequest *ctrl)
429 if (addr > 127) 428 if (addr > 127)
430 return -EINVAL; 429 return -EINVAL;
431 430
432 switch (dwc->dev_state) { 431 reg = dwc3_readl(dwc->regs, DWC3_DCFG);
433 case DWC3_DEFAULT_STATE: 432 reg &= ~(DWC3_DCFG_DEVADDR_MASK);
434 case DWC3_ADDRESS_STATE: 433 reg |= DWC3_DCFG_DEVADDR(addr);
435 /* 434 dwc3_writel(dwc->regs, DWC3_DCFG, reg);
436 * Not sure if we should program DevAddr now or later
437 */
438 reg = dwc3_readl(dwc->regs, DWC3_DCFG);
439 reg &= ~(DWC3_DCFG_DEVADDR_MASK);
440 reg |= DWC3_DCFG_DEVADDR(addr);
441 dwc3_writel(dwc->regs, DWC3_DCFG, reg);
442
443 if (addr)
444 dwc->dev_state = DWC3_ADDRESS_STATE;
445 else
446 dwc->dev_state = DWC3_DEFAULT_STATE;
447 break;
448 435
449 case DWC3_CONFIGURED_STATE: 436 if (addr)
450 ret = -EINVAL; 437 dwc->dev_state = DWC3_ADDRESS_STATE;
451 break; 438 else
452 } 439 dwc->dev_state = DWC3_DEFAULT_STATE;
453 440
454 return ret; 441 return 0;
455} 442}
456 443
457static int dwc3_ep0_delegate_req(struct dwc3 *dwc, struct usb_ctrlrequest *ctrl) 444static int dwc3_ep0_delegate_req(struct dwc3 *dwc, struct usb_ctrlrequest *ctrl)