aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/dwc3/debugfs.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/debugfs.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/debugfs.c')
-rw-r--r--drivers/usb/dwc3/debugfs.c21
1 files changed, 9 insertions, 12 deletions
diff --git a/drivers/usb/dwc3/debugfs.c b/drivers/usb/dwc3/debugfs.c
index b5370e781500..ca4be0afc33d 100644
--- a/drivers/usb/dwc3/debugfs.c
+++ b/drivers/usb/dwc3/debugfs.c
@@ -443,29 +443,26 @@ static ssize_t dwc3_mode_write(struct file *file,
443 struct seq_file *s = file->private_data; 443 struct seq_file *s = file->private_data;
444 struct dwc3 *dwc = s->private; 444 struct dwc3 *dwc = s->private;
445 unsigned long flags; 445 unsigned long flags;
446 u32 reg; 446 u32 mode = 0;
447 char buf[32]; 447 char buf[32];
448 448
449 if (copy_from_user(&buf, ubuf, min_t(size_t, sizeof(buf) - 1, count))) 449 if (copy_from_user(&buf, ubuf, min_t(size_t, sizeof(buf) - 1, count)))
450 return -EFAULT; 450 return -EFAULT;
451 451
452 spin_lock_irqsave(&dwc->lock, flags);
453 reg = dwc3_readl(dwc->regs, DWC3_GCTL);
454
455 reg &= ~(DWC3_GCTL_PRTCAPDIR(DWC3_GCTL_PRTCAP_OTG));
456
457 if (!strncmp(buf, "host", 4)) 452 if (!strncmp(buf, "host", 4))
458 reg |= DWC3_GCTL_PRTCAP(DWC3_GCTL_PRTCAP_HOST); 453 mode |= DWC3_GCTL_PRTCAP_HOST;
459 454
460 if (!strncmp(buf, "device", 6)) 455 if (!strncmp(buf, "device", 6))
461 reg |= DWC3_GCTL_PRTCAP(DWC3_GCTL_PRTCAP_DEVICE); 456 mode |= DWC3_GCTL_PRTCAP_DEVICE;
462 457
463 if (!strncmp(buf, "otg", 3)) 458 if (!strncmp(buf, "otg", 3))
464 reg |= DWC3_GCTL_PRTCAP(DWC3_GCTL_PRTCAP_OTG); 459 mode |= DWC3_GCTL_PRTCAP_OTG;
465
466 dwc3_writel(dwc->regs, DWC3_GCTL, reg);
467 spin_unlock_irqrestore(&dwc->lock, flags);
468 460
461 if (mode) {
462 spin_lock_irqsave(&dwc->lock, flags);
463 dwc3_set_mode(dwc, mode);
464 spin_unlock_irqrestore(&dwc->lock, flags);
465 }
469 return count; 466 return count;
470} 467}
471 468