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: Felipe Balbi <balbi@ti.com>
This commit is contained in:
@@ -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)
|
|||||||
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 {
|
|||||||
* @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 {
|
|||||||
|
|
||||||
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,
|
|||||||
|
|
||||||
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;
|
||||||
|
|||||||
Reference in New Issue
Block a user