u32                     wIndex;
        u32                     reg;
        int                     ret;
+       enum usb_device_state   state;
 
        wValue = le16_to_cpu(ctrl->wValue);
        wIndex = le16_to_cpu(ctrl->wIndex);
        recip = ctrl->bRequestType & USB_RECIP_MASK;
+       state = dwc->gadget.state;
+
        switch (recip) {
        case USB_RECIP_DEVICE:
 
                 * default control pipe
                 */
                case USB_DEVICE_U1_ENABLE:
-                       if (dwc->dev_state != DWC3_CONFIGURED_STATE)
+                       if (state != USB_STATE_CONFIGURED)
                                return -EINVAL;
                        if (dwc->speed != DWC3_DSTS_SUPERSPEED)
                                return -EINVAL;
                        break;
 
                case USB_DEVICE_U2_ENABLE:
-                       if (dwc->dev_state != DWC3_CONFIGURED_STATE)
+                       if (state != USB_STATE_CONFIGURED)
                                return -EINVAL;
                        if (dwc->speed != DWC3_DSTS_SUPERSPEED)
                                return -EINVAL;
 
 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;
 
                return -EINVAL;
        }
 
-       if (dwc->dev_state == DWC3_CONFIGURED_STATE) {
+       if (state == USB_STATE_CONFIGURED) {
                dev_dbg(dwc->dev, "trying to set address when configured\n");
                return -EINVAL;
        }
        reg |= DWC3_DCFG_DEVADDR(addr);
        dwc3_writel(dwc->regs, DWC3_DCFG, reg);
 
-       if (addr) {
-               dwc->dev_state = DWC3_ADDRESS_STATE;
+       if (addr)
                usb_gadget_set_state(&dwc->gadget, USB_STATE_ADDRESS);
-       } else {
-               dwc->dev_state = DWC3_DEFAULT_STATE;
+       else
                usb_gadget_set_state(&dwc->gadget, USB_STATE_DEFAULT);
-       }
 
        return 0;
 }
 
 static int dwc3_ep0_set_config(struct dwc3 *dwc, struct usb_ctrlrequest *ctrl)
 {
+       enum usb_device_state state = dwc->gadget.state;
        u32 cfg;
        int ret;
        u32 reg;
        dwc->start_config_issued = false;
        cfg = le16_to_cpu(ctrl->wValue);
 
-       switch (dwc->dev_state) {
-       case DWC3_DEFAULT_STATE:
+       switch (state) {
+       case USB_STATE_DEFAULT:
                return -EINVAL;
                break;
 
-       case DWC3_ADDRESS_STATE:
+       case USB_STATE_ADDRESS:
                ret = dwc3_ep0_delegate_req(dwc, ctrl);
                /* if the cfg matches and the cfg is non zero */
                if (cfg && (!ret || (ret == USB_GADGET_DELAYED_STATUS))) {
-                       dwc->dev_state = DWC3_CONFIGURED_STATE;
                        usb_gadget_set_state(&dwc->gadget,
                                        USB_STATE_CONFIGURED);
 
                }
                break;
 
-       case DWC3_CONFIGURED_STATE:
+       case USB_STATE_CONFIGURED:
                ret = dwc3_ep0_delegate_req(dwc, ctrl);
-               if (!cfg) {
-                       dwc->dev_state = DWC3_ADDRESS_STATE;
+               if (!cfg)
                        usb_gadget_set_state(&dwc->gadget,
                                        USB_STATE_ADDRESS);
-               }
                break;
        default:
                ret = -EINVAL;
 static int dwc3_ep0_set_sel(struct dwc3 *dwc, struct usb_ctrlrequest *ctrl)
 {
        struct dwc3_ep  *dep;
+       enum usb_device_state state = dwc->gadget.state;
        u16             wLength;
        u16             wValue;
 
-       if (dwc->dev_state == DWC3_DEFAULT_STATE)
+       if (state == USB_STATE_DEFAULT)
                return -EINVAL;
 
        wValue = le16_to_cpu(ctrl->wValue);