提交 6c167fc9 编写于 作者: F Felipe Balbi

usb: dwc3: allow forcing a maximum speed

this is mainly for testing. In order to be able
to test if we're enumerating correctly on all
speeds, let that be controlled by a module
parameter.
Signed-off-by: NFelipe Balbi <balbi@ti.com>
上级 b2c2271c
...@@ -59,6 +59,10 @@ ...@@ -59,6 +59,10 @@
#include "debug.h" #include "debug.h"
static char *maximum_speed = "super";
module_param(maximum_speed, charp, 0);
MODULE_PARM_DESC(maximum_speed, "Maximum supported speed.");
/** /**
* dwc3_core_soft_reset - Issues core soft reset and PHY reset * dwc3_core_soft_reset - Issues core soft reset and PHY reset
* @dwc: pointer to our context structure * @dwc: pointer to our context structure
...@@ -370,6 +374,17 @@ static int __devinit dwc3_probe(struct platform_device *pdev) ...@@ -370,6 +374,17 @@ static int __devinit dwc3_probe(struct platform_device *pdev)
dwc->dev = &pdev->dev; dwc->dev = &pdev->dev;
dwc->irq = irq; dwc->irq = irq;
if (!strncmp("super", maximum_speed, 5))
dwc->maximum_speed = DWC3_DCFG_SUPERSPEED;
else if (!strncmp("high", maximum_speed, 4))
dwc->maximum_speed = DWC3_DCFG_HIGHSPEED;
else if (!strncmp("full", maximum_speed, 4))
dwc->maximum_speed = DWC3_DCFG_FULLSPEED1;
else if (!strncmp("low", maximum_speed, 3))
dwc->maximum_speed = DWC3_DCFG_LOWSPEED;
else
dwc->maximum_speed = DWC3_DCFG_SUPERSPEED;
pm_runtime_enable(&pdev->dev); pm_runtime_enable(&pdev->dev);
pm_runtime_get_sync(&pdev->dev); pm_runtime_get_sync(&pdev->dev);
pm_runtime_forbid(&pdev->dev); pm_runtime_forbid(&pdev->dev);
......
...@@ -555,6 +555,7 @@ struct dwc3_hwparams { ...@@ -555,6 +555,7 @@ struct dwc3_hwparams {
* @regs: base address for our registers * @regs: base address for our registers
* @regs_size: address space size * @regs_size: address space size
* @irq: IRQ number * @irq: IRQ number
* @maximum_speed: maximum speed requested (mainly for testing purposes)
* @revision: revision register contents * @revision: revision register contents
* @is_selfpowered: true when we are selfpowered * @is_selfpowered: true when we are selfpowered
* @three_stage_setup: set if we perform a three phase setup * @three_stage_setup: set if we perform a three phase setup
...@@ -595,6 +596,7 @@ struct dwc3 { ...@@ -595,6 +596,7 @@ struct dwc3 {
int irq; int irq;
u32 maximum_speed;
u32 revision; u32 revision;
#define DWC3_REVISION_173A 0x5533173a #define DWC3_REVISION_173A 0x5533173a
......
...@@ -1183,7 +1183,7 @@ static int dwc3_gadget_start(struct usb_gadget *g, ...@@ -1183,7 +1183,7 @@ static int dwc3_gadget_start(struct usb_gadget *g,
reg = dwc3_readl(dwc->regs, DWC3_DCFG); reg = dwc3_readl(dwc->regs, DWC3_DCFG);
reg &= ~(DWC3_DCFG_SPEED_MASK); reg &= ~(DWC3_DCFG_SPEED_MASK);
reg |= DWC3_DCFG_SUPERSPEED; reg |= dwc->maximum_speed;
dwc3_writel(dwc->regs, DWC3_DCFG, reg); dwc3_writel(dwc->regs, DWC3_DCFG, reg);
dwc->start_config_issued = false; dwc->start_config_issued = false;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册