int dwc3_gadget_set_test_mode(struct dwc3 *dwc, int mode);
 int dwc3_gadget_get_link_state(struct dwc3 *dwc);
 int dwc3_gadget_set_link_state(struct dwc3 *dwc, enum dwc3_link_state state);
-int dwc3_send_gadget_ep_cmd(struct dwc3 *dwc, unsigned ep,
-               unsigned cmd, struct dwc3_gadget_ep_cmd_params *params);
+int dwc3_send_gadget_ep_cmd(struct dwc3_ep *dep, unsigned cmd,
+               struct dwc3_gadget_ep_cmd_params *params);
 int dwc3_send_gadget_generic_command(struct dwc3 *dwc, unsigned cmd, u32 param);
 #else
 static inline int dwc3_gadget_init(struct dwc3 *dwc)
                enum dwc3_link_state state)
 { return 0; }
 
-static inline int dwc3_send_gadget_ep_cmd(struct dwc3 *dwc, unsigned ep,
-               unsigned cmd, struct dwc3_gadget_ep_cmd_params *params)
+static inline int dwc3_send_gadget_ep_cmd(struct dwc3_ep *dep, unsigned cmd,
+               struct dwc3_gadget_ep_cmd_params *params)
 { return 0; }
 static inline int dwc3_send_gadget_generic_command(struct dwc3 *dwc,
                int cmd, u32 param)
 
 
        trace_dwc3_prepare_trb(dep, trb);
 
-       ret = dwc3_send_gadget_ep_cmd(dwc, dep->number,
-                       DWC3_DEPCMD_STARTTRANSFER, ¶ms);
+       ret = dwc3_send_gadget_ep_cmd(dep, DWC3_DEPCMD_STARTTRANSFER, ¶ms);
        if (ret < 0) {
                dwc3_trace(trace_dwc3_ep0, "%s STARTTRANSFER failed",
                                dep->name);
        cmd |= DWC3_DEPCMD_CMDIOC;
        cmd |= DWC3_DEPCMD_PARAM(dep->resource_index);
        memset(¶ms, 0, sizeof(params));
-       ret = dwc3_send_gadget_ep_cmd(dwc, dep->number, cmd, ¶ms);
+       ret = dwc3_send_gadget_ep_cmd(dep, cmd, ¶ms);
        WARN_ON_ONCE(ret);
        dep->resource_index = 0;
 }
 
 
 static int __dwc3_gadget_wakeup(struct dwc3 *dwc);
 
-int dwc3_send_gadget_ep_cmd(struct dwc3 *dwc, unsigned ep,
-               unsigned cmd, struct dwc3_gadget_ep_cmd_params *params)
+int dwc3_send_gadget_ep_cmd(struct dwc3_ep *dep, unsigned cmd,
+               struct dwc3_gadget_ep_cmd_params *params)
 {
-       struct dwc3_ep          *dep = dwc->eps[ep];
+       struct dwc3             *dwc = dep->dwc;
        u32                     timeout = 500;
        u32                     reg;
 
        int                     susphy = false;
        int                     ret = -EINVAL;
 
+       unsigned                ep = dep->number;
+
        trace_dwc3_gadget_ep_cmd(dep, cmd, params);
 
        /*
 
        memset(¶ms, 0, sizeof(params));
 
-       return dwc3_send_gadget_ep_cmd(dwc, dep->number, cmd, ¶ms);
+       return dwc3_send_gadget_ep_cmd(dep, cmd, ¶ms);
 }
 
 static dma_addr_t dwc3_trb_dma_offset(struct dwc3_ep *dep,
        memset(¶ms, 0x00, sizeof(params));
        cmd = DWC3_DEPCMD_DEPSTARTCFG;
 
-       ret = dwc3_send_gadget_ep_cmd(dwc, 0, cmd, ¶ms);
+       ret = dwc3_send_gadget_ep_cmd(dep, cmd, ¶ms);
        if (ret)
                return ret;
 
                dep->interval = 1 << (desc->bInterval - 1);
        }
 
-       return dwc3_send_gadget_ep_cmd(dwc, dep->number,
-                       DWC3_DEPCMD_SETEPCONFIG, ¶ms);
+       return dwc3_send_gadget_ep_cmd(dep, DWC3_DEPCMD_SETEPCONFIG, ¶ms);
 }
 
 static int dwc3_gadget_set_xfer_resource(struct dwc3 *dwc, struct dwc3_ep *dep)
 
        params.param0 = DWC3_DEPXFERCFG_NUM_XFER_RES(1);
 
-       return dwc3_send_gadget_ep_cmd(dwc, dep->number,
-                       DWC3_DEPCMD_SETTRANSFRESOURCE, ¶ms);
+       return dwc3_send_gadget_ep_cmd(dep, DWC3_DEPCMD_SETTRANSFRESOURCE,
+                       ¶ms);
 }
 
 /**
        }
 
        cmd |= DWC3_DEPCMD_PARAM(cmd_param);
-       ret = dwc3_send_gadget_ep_cmd(dwc, dep->number, cmd, ¶ms);
+       ret = dwc3_send_gadget_ep_cmd(dep, cmd, ¶ms);
        if (ret < 0) {
                /*
                 * FIXME we need to iterate over the list of requests
                        return -EAGAIN;
                }
 
-               ret = dwc3_send_gadget_ep_cmd(dwc, dep->number,
-                       DWC3_DEPCMD_SETSTALL, ¶ms);
+               ret = dwc3_send_gadget_ep_cmd(dep, DWC3_DEPCMD_SETSTALL,
+                               ¶ms);
                if (ret)
                        dev_err(dwc->dev, "failed to set STALL on %s\n",
                                        dep->name);
                else
                        dep->flags |= DWC3_EP_STALL;
        } else {
+
                ret = dwc3_send_clear_stall_ep_cmd(dep);
                if (ret)
                        dev_err(dwc->dev, "failed to clear STALL on %s\n",
        cmd |= DWC3_DEPCMD_CMDIOC;
        cmd |= DWC3_DEPCMD_PARAM(dep->resource_index);
        memset(¶ms, 0, sizeof(params));
-       ret = dwc3_send_gadget_ep_cmd(dwc, dep->number, cmd, ¶ms);
+       ret = dwc3_send_gadget_ep_cmd(dep, cmd, ¶ms);
        WARN_ON_ONCE(ret);
        dep->resource_index = 0;
        dep->flags &= ~DWC3_EP_BUSY;