|
@@ -238,16 +238,18 @@ int dwc3_send_gadget_generic_command(struct dwc3 *dwc, unsigned cmd, u32 param)
|
|
|
|
|
|
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);
|
|
|
|
|
|
/*
|
|
@@ -364,7 +366,7 @@ static int dwc3_send_clear_stall_ep_cmd(struct dwc3_ep *dep)
|
|
|
|
|
|
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,
|
|
@@ -452,7 +454,7 @@ static int dwc3_gadget_start_config(struct dwc3 *dwc, 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;
|
|
|
|
|
@@ -528,8 +530,7 @@ static int dwc3_gadget_set_ep_config(struct dwc3 *dwc, struct dwc3_ep *dep,
|
|
|
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)
|
|
@@ -540,8 +541,8 @@ 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);
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -1008,7 +1009,7 @@ static int __dwc3_gadget_kick_transfer(struct dwc3_ep *dep, u16 cmd_param)
|
|
|
}
|
|
|
|
|
|
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
|
|
@@ -1311,14 +1312,15 @@ int __dwc3_gadget_ep_set_halt(struct dwc3_ep *dep, int value, int protocol)
|
|
|
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",
|
|
@@ -2271,7 +2273,7 @@ static void dwc3_stop_active_transfer(struct dwc3 *dwc, u32 epnum, bool force)
|
|
|
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;
|