diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/usb/dwc3/ep0.c | 31 |
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 | ||
422 | static int dwc3_ep0_set_address(struct dwc3 *dwc, struct usb_ctrlrequest *ctrl) | 422 | static 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 | ||
457 | static int dwc3_ep0_delegate_req(struct dwc3 *dwc, struct usb_ctrlrequest *ctrl) | 444 | static int dwc3_ep0_delegate_req(struct dwc3 *dwc, struct usb_ctrlrequest *ctrl) |