static int dwc3_ep0_set_address(struct dwc3 *dwc, struct usb_ctrlrequest *ctrl) { enum usb_device_state state = dwc->gadget.state; u32 addr; u32 reg; addr = le16_to_cpu(ctrl->wValue); if (addr > 127) { dev_dbg(dwc->dev, "invalid device address %d\n", addr); return -EINVAL; } if (state == USB_STATE_CONFIGURED) { dev_dbg(dwc->dev, "trying to set address when configured\n"); return -EINVAL; } reg = dwc3_readl(dwc->regs, DWC3_DCFG); reg &= ~(DWC3_DCFG_DEVADDR_MASK); reg |= DWC3_DCFG_DEVADDR(addr); dwc3_writel(dwc->regs, DWC3_DCFG, reg); if (addr) usb_gadget_set_state(&dwc->gadget, USB_STATE_ADDRESS); else usb_gadget_set_state(&dwc->gadget, USB_STATE_DEFAULT); return 0; }
static int dwc3_ep0_set_address(struct dwc3 *dwc, struct usb_ctrlrequest *ctrl) { u32 addr; u32 reg; addr = le16_to_cpu(ctrl->wValue); if (addr > 127) { dev_dbg(dwc->dev, "invalid device address %d\n", addr); return -EINVAL; } if (dwc->dev_state == DWC3_CONFIGURED_STATE) { dev_dbg(dwc->dev, "trying to set address when configured\n"); return -EINVAL; } reg = dwc3_readl(dwc->regs, DWC3_DCFG); reg &= ~(DWC3_DCFG_DEVADDR_MASK); reg |= DWC3_DCFG_DEVADDR(addr); dwc3_writel(dwc->regs, DWC3_DCFG, reg); if (addr) dwc->dev_state = DWC3_ADDRESS_STATE; else dwc->dev_state = DWC3_DEFAULT_STATE; return 0; }
static int dwc3_ep0_set_address(struct dwc3 *dwc, struct usb_ctrlrequest *ctrl) { int ret = 0; u32 addr; u32 reg; addr = le16_to_cpu(ctrl->wValue); if (addr > 127) 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_DCFG_DEVADDR_MASK); reg |= DWC3_DCFG_DEVADDR(addr); dwc3_writel(dwc->regs, DWC3_DCFG, reg); if (addr) dwc->dev_state = DWC3_ADDRESS_STATE; else dwc->dev_state = DWC3_DEFAULT_STATE; break; case DWC3_CONFIGURED_STATE: ret = -EINVAL; break; } dwc->ep0state = EP0_IN_WAIT_NRDY; return ret; }
static int dwc3_ep0_set_address(struct dwc3 *dwc, struct usb_ctrlrequest *ctrl) { u32 addr; u32 reg; addr = le16_to_cpu(ctrl->wValue); if (addr > 127) return -EINVAL; reg = dwc3_readl(dwc->regs, DWC3_DCFG); reg &= ~(DWC3_DCFG_DEVADDR_MASK); reg |= DWC3_DCFG_DEVADDR(addr); dwc3_writel(dwc->regs, DWC3_DCFG, reg); if (addr) dwc->dev_state = DWC3_ADDRESS_STATE; else dwc->dev_state = DWC3_DEFAULT_STATE; return 0; }