aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFelipe Balbi <balbi@ti.com>2012-07-16 07:08:16 -0400
committerFelipe Balbi <balbi@ti.com>2012-08-03 02:28:22 -0400
commit4b345c9a3c7452340fb477868d8db475f05978b1 (patch)
tree2a61d93a1d13fa257b1bdcb9018c7a7766c8450b
parent0d7614f09c1ebdbaa1599a5aba7593f147bf96ee (diff)
usb: dwc3: gadget: set Ignore Sequence Number bit from ConnectDone Event
Databook says we should set Ignore Sequence Number bit from ConnectDone Event, so let's do so. Signed-off-by: Felipe Balbi <balbi@ti.com>
-rw-r--r--drivers/usb/dwc3/gadget.c21
1 files changed, 13 insertions, 8 deletions
diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
index 58fdfad96b4d..283c0cb2f40c 100644
--- a/drivers/usb/dwc3/gadget.c
+++ b/drivers/usb/dwc3/gadget.c
@@ -431,7 +431,8 @@ static int dwc3_gadget_start_config(struct dwc3 *dwc, struct dwc3_ep *dep)
431 431
432static int dwc3_gadget_set_ep_config(struct dwc3 *dwc, struct dwc3_ep *dep, 432static int dwc3_gadget_set_ep_config(struct dwc3 *dwc, struct dwc3_ep *dep,
433 const struct usb_endpoint_descriptor *desc, 433 const struct usb_endpoint_descriptor *desc,
434 const struct usb_ss_ep_comp_descriptor *comp_desc) 434 const struct usb_ss_ep_comp_descriptor *comp_desc,
435 bool ignore)
435{ 436{
436 struct dwc3_gadget_ep_cmd_params params; 437 struct dwc3_gadget_ep_cmd_params params;
437 438
@@ -441,6 +442,9 @@ static int dwc3_gadget_set_ep_config(struct dwc3 *dwc, struct dwc3_ep *dep,
441 | DWC3_DEPCFG_MAX_PACKET_SIZE(usb_endpoint_maxp(desc)) 442 | DWC3_DEPCFG_MAX_PACKET_SIZE(usb_endpoint_maxp(desc))
442 | DWC3_DEPCFG_BURST_SIZE(dep->endpoint.maxburst - 1); 443 | DWC3_DEPCFG_BURST_SIZE(dep->endpoint.maxburst - 1);
443 444
445 if (ignore)
446 params.param0 |= DWC3_DEPCFG_IGN_SEQ_NUM;
447
444 params.param1 = DWC3_DEPCFG_XFER_COMPLETE_EN 448 params.param1 = DWC3_DEPCFG_XFER_COMPLETE_EN
445 | DWC3_DEPCFG_XFER_NOT_READY_EN; 449 | DWC3_DEPCFG_XFER_NOT_READY_EN;
446 450
@@ -498,7 +502,8 @@ static int dwc3_gadget_set_xfer_resource(struct dwc3 *dwc, struct dwc3_ep *dep)
498 */ 502 */
499static int __dwc3_gadget_ep_enable(struct dwc3_ep *dep, 503static int __dwc3_gadget_ep_enable(struct dwc3_ep *dep,
500 const struct usb_endpoint_descriptor *desc, 504 const struct usb_endpoint_descriptor *desc,
501 const struct usb_ss_ep_comp_descriptor *comp_desc) 505 const struct usb_ss_ep_comp_descriptor *comp_desc,
506 bool ignore)
502{ 507{
503 struct dwc3 *dwc = dep->dwc; 508 struct dwc3 *dwc = dep->dwc;
504 u32 reg; 509 u32 reg;
@@ -510,7 +515,7 @@ static int __dwc3_gadget_ep_enable(struct dwc3_ep *dep,
510 return ret; 515 return ret;
511 } 516 }
512 517
513 ret = dwc3_gadget_set_ep_config(dwc, dep, desc, comp_desc); 518 ret = dwc3_gadget_set_ep_config(dwc, dep, desc, comp_desc, ignore);
514 if (ret) 519 if (ret)
515 return ret; 520 return ret;
516 521
@@ -683,7 +688,7 @@ static int dwc3_gadget_ep_enable(struct usb_ep *ep,
683 dev_vdbg(dwc->dev, "Enabling %s\n", dep->name); 688 dev_vdbg(dwc->dev, "Enabling %s\n", dep->name);
684 689
685 spin_lock_irqsave(&dwc->lock, flags); 690 spin_lock_irqsave(&dwc->lock, flags);
686 ret = __dwc3_gadget_ep_enable(dep, desc, ep->comp_desc); 691 ret = __dwc3_gadget_ep_enable(dep, desc, ep->comp_desc, false);
687 spin_unlock_irqrestore(&dwc->lock, flags); 692 spin_unlock_irqrestore(&dwc->lock, flags);
688 693
689 return ret; 694 return ret;
@@ -1518,14 +1523,14 @@ static int dwc3_gadget_start(struct usb_gadget *g,
1518 dwc3_gadget_ep0_desc.wMaxPacketSize = cpu_to_le16(512); 1523 dwc3_gadget_ep0_desc.wMaxPacketSize = cpu_to_le16(512);
1519 1524
1520 dep = dwc->eps[0]; 1525 dep = dwc->eps[0];
1521 ret = __dwc3_gadget_ep_enable(dep, &dwc3_gadget_ep0_desc, NULL); 1526 ret = __dwc3_gadget_ep_enable(dep, &dwc3_gadget_ep0_desc, NULL, false);
1522 if (ret) { 1527 if (ret) {
1523 dev_err(dwc->dev, "failed to enable %s\n", dep->name); 1528 dev_err(dwc->dev, "failed to enable %s\n", dep->name);
1524 goto err0; 1529 goto err0;
1525 } 1530 }
1526 1531
1527 dep = dwc->eps[1]; 1532 dep = dwc->eps[1];
1528 ret = __dwc3_gadget_ep_enable(dep, &dwc3_gadget_ep0_desc, NULL); 1533 ret = __dwc3_gadget_ep_enable(dep, &dwc3_gadget_ep0_desc, NULL, false);
1529 if (ret) { 1534 if (ret) {
1530 dev_err(dwc->dev, "failed to enable %s\n", dep->name); 1535 dev_err(dwc->dev, "failed to enable %s\n", dep->name);
1531 goto err1; 1536 goto err1;
@@ -2141,14 +2146,14 @@ static void dwc3_gadget_conndone_interrupt(struct dwc3 *dwc)
2141 } 2146 }
2142 2147
2143 dep = dwc->eps[0]; 2148 dep = dwc->eps[0];
2144 ret = __dwc3_gadget_ep_enable(dep, &dwc3_gadget_ep0_desc, NULL); 2149 ret = __dwc3_gadget_ep_enable(dep, &dwc3_gadget_ep0_desc, NULL, true);
2145 if (ret) { 2150 if (ret) {
2146 dev_err(dwc->dev, "failed to enable %s\n", dep->name); 2151 dev_err(dwc->dev, "failed to enable %s\n", dep->name);
2147 return; 2152 return;
2148 } 2153 }
2149 2154
2150 dep = dwc->eps[1]; 2155 dep = dwc->eps[1];
2151 ret = __dwc3_gadget_ep_enable(dep, &dwc3_gadget_ep0_desc, NULL); 2156 ret = __dwc3_gadget_ep_enable(dep, &dwc3_gadget_ep0_desc, NULL, true);
2152 if (ret) { 2157 if (ret) {
2153 dev_err(dwc->dev, "failed to enable %s\n", dep->name); 2158 dev_err(dwc->dev, "failed to enable %s\n", dep->name);
2154 return; 2159 return;