aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/dwc3/gadget.c
diff options
context:
space:
mode:
authorFelipe Balbi <balbi@ti.com>2011-09-30 03:58:51 -0400
committerGreg Kroah-Hartman <gregkh@suse.de>2011-10-04 13:25:56 -0400
commitdc1c70a774b6fe3744b330d58bb9cf802f7eac89 (patch)
treee12ab3ac678d858968799c0f22d1b89283ce2982 /drivers/usb/dwc3/gadget.c
parentaabb70752361a8b8ca44142a942a5bd133c4d304 (diff)
usb: dwc3: convert structures into bitshifts
our parameter structures need to be written to HW, so instead of assuming little endian, we convert those into bit shifts. Signed-off-by: Felipe Balbi <balbi@ti.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/usb/dwc3/gadget.c')
-rw-r--r--drivers/usb/dwc3/gadget.c40
1 files changed, 19 insertions, 21 deletions
diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
index fd1ac4dd560..fa824cfdd2e 100644
--- a/drivers/usb/dwc3/gadget.c
+++ b/drivers/usb/dwc3/gadget.c
@@ -158,12 +158,12 @@ int dwc3_send_gadget_ep_cmd(struct dwc3 *dwc, unsigned ep,
158 158
159 dev_vdbg(dwc->dev, "%s: cmd '%s' params %08x %08x %08x\n", 159 dev_vdbg(dwc->dev, "%s: cmd '%s' params %08x %08x %08x\n",
160 dep->name, 160 dep->name,
161 dwc3_gadget_ep_cmd_string(cmd), params->param0.raw, 161 dwc3_gadget_ep_cmd_string(cmd), params->param0,
162 params->param1.raw, params->param2.raw); 162 params->param1, params->param2);
163 163
164 dwc3_writel(dwc->regs, DWC3_DEPCMDPAR0(ep), params->param0.raw); 164 dwc3_writel(dwc->regs, DWC3_DEPCMDPAR0(ep), params->param0);
165 dwc3_writel(dwc->regs, DWC3_DEPCMDPAR1(ep), params->param1.raw); 165 dwc3_writel(dwc->regs, DWC3_DEPCMDPAR1(ep), params->param1);
166 dwc3_writel(dwc->regs, DWC3_DEPCMDPAR2(ep), params->param2.raw); 166 dwc3_writel(dwc->regs, DWC3_DEPCMDPAR2(ep), params->param2);
167 167
168 dwc3_writel(dwc->regs, DWC3_DEPCMD(ep), cmd | DWC3_DEPCMD_CMDACT); 168 dwc3_writel(dwc->regs, DWC3_DEPCMD(ep), cmd | DWC3_DEPCMD_CMDACT);
169 do { 169 do {
@@ -257,21 +257,21 @@ static int dwc3_gadget_set_ep_config(struct dwc3 *dwc, struct dwc3_ep *dep,
257 257
258 memset(&params, 0x00, sizeof(params)); 258 memset(&params, 0x00, sizeof(params));
259 259
260 params.param0.depcfg.ep_type = usb_endpoint_type(desc); 260 params.param0 = DWC3_DEPCFG_EP_TYPE(usb_endpoint_type(desc))
261 params.param0.depcfg.max_packet_size = usb_endpoint_maxp(desc); 261 | DWC3_DEPCFG_MAX_PACKET_SIZE(usb_endpoint_maxp(desc))
262 params.param0.depcfg.burst_size = dep->endpoint.maxburst; 262 | DWC3_DEPCFG_BURST_SIZE(dep->endpoint.maxburst);
263 263
264 params.param1.depcfg.xfer_complete_enable = true; 264 params.param1 = DWC3_DEPCFG_XFER_COMPLETE_EN
265 params.param1.depcfg.xfer_not_ready_enable = true; 265 | DWC3_DEPCFG_XFER_NOT_READY_EN;
266 266
267 if (usb_endpoint_xfer_bulk(desc) && dep->endpoint.max_streams) { 267 if (usb_endpoint_xfer_bulk(desc) && dep->endpoint.max_streams) {
268 params.param1.depcfg.stream_capable = true; 268 params.param1 |= DWC3_DEPCFG_STREAM_CAPABLE
269 params.param1.depcfg.stream_event_enable = true; 269 | DWC3_DEPCFG_STREAM_EVENT_EN;
270 dep->stream_capable = true; 270 dep->stream_capable = true;
271 } 271 }
272 272
273 if (usb_endpoint_xfer_isoc(desc)) 273 if (usb_endpoint_xfer_isoc(desc))
274 params.param1.depcfg.xfer_in_progress_enable = true; 274 params.param1 |= DWC3_DEPCFG_XFER_IN_PROGRESS_EN;
275 275
276 /* 276 /*
277 * We are doing 1:1 mapping for endpoints, meaning 277 * We are doing 1:1 mapping for endpoints, meaning
@@ -279,17 +279,17 @@ static int dwc3_gadget_set_ep_config(struct dwc3 *dwc, struct dwc3_ep *dep,
279 * so on. We consider the direction bit as part of the physical 279 * so on. We consider the direction bit as part of the physical
280 * endpoint number. So USB endpoint 0x81 is 0x03. 280 * endpoint number. So USB endpoint 0x81 is 0x03.
281 */ 281 */
282 params.param1.depcfg.ep_number = dep->number; 282 params.param1 |= DWC3_DEPCFG_EP_NUMBER(dep->number);
283 283
284 /* 284 /*
285 * We must use the lower 16 TX FIFOs even though 285 * We must use the lower 16 TX FIFOs even though
286 * HW might have more 286 * HW might have more
287 */ 287 */
288 if (dep->direction) 288 if (dep->direction)
289 params.param0.depcfg.fifo_number = dep->number >> 1; 289 params.param0 |= DWC3_DEPCFG_FIFO_NUMBER(dep->number >> 1);
290 290
291 if (desc->bInterval) { 291 if (desc->bInterval) {
292 params.param1.depcfg.binterval_m1 = desc->bInterval - 1; 292 params.param1 |= DWC3_DEPCFG_BINTERVAL_M1(desc->bInterval - 1);
293 dep->interval = 1 << (desc->bInterval - 1); 293 dep->interval = 1 << (desc->bInterval - 1);
294 } 294 }
295 295
@@ -303,7 +303,7 @@ static int dwc3_gadget_set_xfer_resource(struct dwc3 *dwc, struct dwc3_ep *dep)
303 303
304 memset(&params, 0x00, sizeof(params)); 304 memset(&params, 0x00, sizeof(params));
305 305
306 params.param0.depxfercfg.number_xfer_resources = 1; 306 params.param0 = DWC3_DEPXFERCFG_NUM_XFER_RES(1);
307 307
308 return dwc3_send_gadget_ep_cmd(dwc, dep->number, 308 return dwc3_send_gadget_ep_cmd(dwc, dep->number,
309 DWC3_DEPCMD_SETTRANSFRESOURCE, &params); 309 DWC3_DEPCMD_SETTRANSFRESOURCE, &params);
@@ -719,10 +719,8 @@ static int __dwc3_gadget_kick_transfer(struct dwc3_ep *dep, u16 cmd_param,
719 } 719 }
720 720
721 memset(&params, 0, sizeof(params)); 721 memset(&params, 0, sizeof(params));
722 params.param0.depstrtxfer.transfer_desc_addr_high = 722 params.param0 = upper_32_bits(req->trb_dma);
723 upper_32_bits(req->trb_dma); 723 params.param1 = lower_32_bits(req->trb_dma);
724 params.param1.depstrtxfer.transfer_desc_addr_low =
725 lower_32_bits(req->trb_dma);
726 724
727 if (start_new) 725 if (start_new)
728 cmd = DWC3_DEPCMD_STARTTRANSFER; 726 cmd = DWC3_DEPCMD_STARTTRANSFER;