diff options
author | Felipe Balbi <balbi@ti.com> | 2012-07-16 07:08:16 -0400 |
---|---|---|
committer | Felipe Balbi <balbi@ti.com> | 2012-08-03 02:28:22 -0400 |
commit | 4b345c9a3c7452340fb477868d8db475f05978b1 (patch) | |
tree | 2a61d93a1d13fa257b1bdcb9018c7a7766c8450b | |
parent | 0d7614f09c1ebdbaa1599a5aba7593f147bf96ee (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.c | 21 |
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 | ||
432 | static int dwc3_gadget_set_ep_config(struct dwc3 *dwc, struct dwc3_ep *dep, | 432 | static 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 | */ |
499 | static int __dwc3_gadget_ep_enable(struct dwc3_ep *dep, | 503 | static 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; |