aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/dwc3
diff options
context:
space:
mode:
authorPaul Zimmerman <Paul.Zimmerman@synopsys.com>2013-12-19 13:38:49 -0500
committerFelipe Balbi <balbi@ti.com>2014-03-05 10:44:52 -0500
commit265b70a73aff2a21e74f1fbe7ffaaeb4608adc98 (patch)
treee4deb791e4aeafa4664745201b79ff9fc16de950 /drivers/usb/dwc3
parent911f1f88cadf4b64bad5aa4c257d72494a62f928 (diff)
usb: dwc3: gadget: add a 'restore' argument to set_ep_config
That argument will be used in later patches when we have working hibernation support. For now, always pass it as false. The idea of this patch is to decrease to size of following patches and slowly add hibernation building blocks to the gadget side of dwc3 so that it becomes very easy to review the actual hibernation code. [ balbi@ti.com : rewrote patch on top of current tree. Added commit log. ] Signed-off-by: Paul Zimmerman <paulz@synopsys.com> Signed-off-by: Felipe Balbi <balbi@ti.com>
Diffstat (limited to 'drivers/usb/dwc3')
-rw-r--r--drivers/usb/dwc3/gadget.c32
1 files changed, 22 insertions, 10 deletions
diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
index 7d00738b4b60..87b09bd6266e 100644
--- a/drivers/usb/dwc3/gadget.c
+++ b/drivers/usb/dwc3/gadget.c
@@ -433,7 +433,7 @@ static int dwc3_gadget_start_config(struct dwc3 *dwc, struct dwc3_ep *dep)
433static int dwc3_gadget_set_ep_config(struct dwc3 *dwc, struct dwc3_ep *dep, 433static int dwc3_gadget_set_ep_config(struct dwc3 *dwc, struct dwc3_ep *dep,
434 const struct usb_endpoint_descriptor *desc, 434 const struct usb_endpoint_descriptor *desc,
435 const struct usb_ss_ep_comp_descriptor *comp_desc, 435 const struct usb_ss_ep_comp_descriptor *comp_desc,
436 bool ignore) 436 bool ignore, bool restore)
437{ 437{
438 struct dwc3_gadget_ep_cmd_params params; 438 struct dwc3_gadget_ep_cmd_params params;
439 439
@@ -452,6 +452,11 @@ static int dwc3_gadget_set_ep_config(struct dwc3 *dwc, struct dwc3_ep *dep,
452 if (ignore) 452 if (ignore)
453 params.param0 |= DWC3_DEPCFG_IGN_SEQ_NUM; 453 params.param0 |= DWC3_DEPCFG_IGN_SEQ_NUM;
454 454
455 if (restore) {
456 params.param0 |= DWC3_DEPCFG_ACTION_RESTORE;
457 params.param2 |= dep->saved_state;
458 }
459
455 params.param1 = DWC3_DEPCFG_XFER_COMPLETE_EN 460 params.param1 = DWC3_DEPCFG_XFER_COMPLETE_EN
456 | DWC3_DEPCFG_XFER_NOT_READY_EN; 461 | DWC3_DEPCFG_XFER_NOT_READY_EN;
457 462
@@ -510,7 +515,7 @@ static int dwc3_gadget_set_xfer_resource(struct dwc3 *dwc, struct dwc3_ep *dep)
510static int __dwc3_gadget_ep_enable(struct dwc3_ep *dep, 515static int __dwc3_gadget_ep_enable(struct dwc3_ep *dep,
511 const struct usb_endpoint_descriptor *desc, 516 const struct usb_endpoint_descriptor *desc,
512 const struct usb_ss_ep_comp_descriptor *comp_desc, 517 const struct usb_ss_ep_comp_descriptor *comp_desc,
513 bool ignore) 518 bool ignore, bool restore)
514{ 519{
515 struct dwc3 *dwc = dep->dwc; 520 struct dwc3 *dwc = dep->dwc;
516 u32 reg; 521 u32 reg;
@@ -524,7 +529,8 @@ static int __dwc3_gadget_ep_enable(struct dwc3_ep *dep,
524 return ret; 529 return ret;
525 } 530 }
526 531
527 ret = dwc3_gadget_set_ep_config(dwc, dep, desc, comp_desc, ignore); 532 ret = dwc3_gadget_set_ep_config(dwc, dep, desc, comp_desc, ignore,
533 restore);
528 if (ret) 534 if (ret)
529 return ret; 535 return ret;
530 536
@@ -675,7 +681,7 @@ static int dwc3_gadget_ep_enable(struct usb_ep *ep,
675 } 681 }
676 682
677 spin_lock_irqsave(&dwc->lock, flags); 683 spin_lock_irqsave(&dwc->lock, flags);
678 ret = __dwc3_gadget_ep_enable(dep, desc, ep->comp_desc, false); 684 ret = __dwc3_gadget_ep_enable(dep, desc, ep->comp_desc, false, false);
679 spin_unlock_irqrestore(&dwc->lock, flags); 685 spin_unlock_irqrestore(&dwc->lock, flags);
680 686
681 return ret; 687 return ret;
@@ -1565,14 +1571,16 @@ static int dwc3_gadget_start(struct usb_gadget *g,
1565 dwc3_gadget_ep0_desc.wMaxPacketSize = cpu_to_le16(512); 1571 dwc3_gadget_ep0_desc.wMaxPacketSize = cpu_to_le16(512);
1566 1572
1567 dep = dwc->eps[0]; 1573 dep = dwc->eps[0];
1568 ret = __dwc3_gadget_ep_enable(dep, &dwc3_gadget_ep0_desc, NULL, false); 1574 ret = __dwc3_gadget_ep_enable(dep, &dwc3_gadget_ep0_desc, NULL, false,
1575 false);
1569 if (ret) { 1576 if (ret) {
1570 dev_err(dwc->dev, "failed to enable %s\n", dep->name); 1577 dev_err(dwc->dev, "failed to enable %s\n", dep->name);
1571 goto err2; 1578 goto err2;
1572 } 1579 }
1573 1580
1574 dep = dwc->eps[1]; 1581 dep = dwc->eps[1];
1575 ret = __dwc3_gadget_ep_enable(dep, &dwc3_gadget_ep0_desc, NULL, false); 1582 ret = __dwc3_gadget_ep_enable(dep, &dwc3_gadget_ep0_desc, NULL, false,
1583 false);
1576 if (ret) { 1584 if (ret) {
1577 dev_err(dwc->dev, "failed to enable %s\n", dep->name); 1585 dev_err(dwc->dev, "failed to enable %s\n", dep->name);
1578 goto err3; 1586 goto err3;
@@ -2276,14 +2284,16 @@ static void dwc3_gadget_conndone_interrupt(struct dwc3 *dwc)
2276 } 2284 }
2277 2285
2278 dep = dwc->eps[0]; 2286 dep = dwc->eps[0];
2279 ret = __dwc3_gadget_ep_enable(dep, &dwc3_gadget_ep0_desc, NULL, true); 2287 ret = __dwc3_gadget_ep_enable(dep, &dwc3_gadget_ep0_desc, NULL, true,
2288 false);
2280 if (ret) { 2289 if (ret) {
2281 dev_err(dwc->dev, "failed to enable %s\n", dep->name); 2290 dev_err(dwc->dev, "failed to enable %s\n", dep->name);
2282 return; 2291 return;
2283 } 2292 }
2284 2293
2285 dep = dwc->eps[1]; 2294 dep = dwc->eps[1];
2286 ret = __dwc3_gadget_ep_enable(dep, &dwc3_gadget_ep0_desc, NULL, true); 2295 ret = __dwc3_gadget_ep_enable(dep, &dwc3_gadget_ep0_desc, NULL, true,
2296 false);
2287 if (ret) { 2297 if (ret) {
2288 dev_err(dwc->dev, "failed to enable %s\n", dep->name); 2298 dev_err(dwc->dev, "failed to enable %s\n", dep->name);
2289 return; 2299 return;
@@ -2738,12 +2748,14 @@ int dwc3_gadget_resume(struct dwc3 *dwc)
2738 dwc3_gadget_ep0_desc.wMaxPacketSize = cpu_to_le16(512); 2748 dwc3_gadget_ep0_desc.wMaxPacketSize = cpu_to_le16(512);
2739 2749
2740 dep = dwc->eps[0]; 2750 dep = dwc->eps[0];
2741 ret = __dwc3_gadget_ep_enable(dep, &dwc3_gadget_ep0_desc, NULL, false); 2751 ret = __dwc3_gadget_ep_enable(dep, &dwc3_gadget_ep0_desc, NULL, false,
2752 false);
2742 if (ret) 2753 if (ret)
2743 goto err0; 2754 goto err0;
2744 2755
2745 dep = dwc->eps[1]; 2756 dep = dwc->eps[1];
2746 ret = __dwc3_gadget_ep_enable(dep, &dwc3_gadget_ep0_desc, NULL, false); 2757 ret = __dwc3_gadget_ep_enable(dep, &dwc3_gadget_ep0_desc, NULL, false,
2758 false);
2747 if (ret) 2759 if (ret)
2748 goto err1; 2760 goto err1;
2749 2761