aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/dwc3/core.c
diff options
context:
space:
mode:
authorSebastian Andrzej Siewior <bigeasy@linutronix.de>2011-10-31 17:25:40 -0400
committerFelipe Balbi <balbi@ti.com>2011-12-12 04:48:26 -0500
commit3140e8cbfec18ecb9c9ef856933fdb98c09af1e8 (patch)
treec4aad9489eabb168e4bf3eaa5006194286a2a158 /drivers/usb/dwc3/core.c
parentc2da2ff00606ae008f0e233bd29c3307d0c3ce85 (diff)
usb: dwc3: use a helper function for operation mode setting
There are two where need to set operational mode: - during initialization while we decide to run in host,device or DRD mode - at runtime via the debugfs interface. This patch provides a new function which sets the operational mode and moves its initialiation to the mode switch instead in the gadget code itself. Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> Signed-off-by: Felipe Balbi <balbi@ti.com>
Diffstat (limited to 'drivers/usb/dwc3/core.c')
-rw-r--r--drivers/usb/dwc3/core.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
index a2db41162575..217547514faa 100644
--- a/drivers/usb/dwc3/core.c
+++ b/drivers/usb/dwc3/core.c
@@ -103,7 +103,15 @@ void dwc3_put_device_id(int id)
103} 103}
104EXPORT_SYMBOL_GPL(dwc3_put_device_id); 104EXPORT_SYMBOL_GPL(dwc3_put_device_id);
105 105
106/* -------------------------------------------------------------------------- */ 106void dwc3_set_mode(struct dwc3 *dwc, u32 mode)
107{
108 u32 reg;
109
110 reg = dwc3_readl(dwc->regs, DWC3_GCTL);
111 reg &= ~(DWC3_GCTL_PRTCAPDIR(DWC3_GCTL_PRTCAP_OTG));
112 reg |= DWC3_GCTL_PRTCAPDIR(mode);
113 dwc3_writel(dwc->regs, DWC3_GCTL, reg);
114}
107 115
108/** 116/**
109 * dwc3_core_soft_reset - Issues core soft reset and PHY reset 117 * dwc3_core_soft_reset - Issues core soft reset and PHY reset
@@ -452,6 +460,7 @@ static int __devinit dwc3_probe(struct platform_device *pdev)
452 460
453 switch (mode) { 461 switch (mode) {
454 case DWC3_MODE_DEVICE: 462 case DWC3_MODE_DEVICE:
463 dwc3_set_mode(dwc, DWC3_GCTL_PRTCAP_DEVICE);
455 ret = dwc3_gadget_init(dwc); 464 ret = dwc3_gadget_init(dwc);
456 if (ret) { 465 if (ret) {
457 dev_err(&pdev->dev, "failed to initialize gadget\n"); 466 dev_err(&pdev->dev, "failed to initialize gadget\n");
@@ -459,6 +468,7 @@ static int __devinit dwc3_probe(struct platform_device *pdev)
459 } 468 }
460 break; 469 break;
461 case DWC3_MODE_HOST: 470 case DWC3_MODE_HOST:
471 dwc3_set_mode(dwc, DWC3_GCTL_PRTCAP_HOST);
462 ret = dwc3_host_init(dwc); 472 ret = dwc3_host_init(dwc);
463 if (ret) { 473 if (ret) {
464 dev_err(&pdev->dev, "failed to initialize host\n"); 474 dev_err(&pdev->dev, "failed to initialize host\n");
@@ -466,6 +476,7 @@ static int __devinit dwc3_probe(struct platform_device *pdev)
466 } 476 }
467 break; 477 break;
468 case DWC3_MODE_DRD: 478 case DWC3_MODE_DRD:
479 dwc3_set_mode(dwc, DWC3_GCTL_PRTCAP_OTG);
469 ret = dwc3_host_init(dwc); 480 ret = dwc3_host_init(dwc);
470 if (ret) { 481 if (ret) {
471 dev_err(&pdev->dev, "failed to initialize host\n"); 482 dev_err(&pdev->dev, "failed to initialize host\n");