Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6c167fc9 authored by Felipe Balbi's avatar Felipe Balbi
Browse files

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: default avatarFelipe Balbi <balbi@ti.com>
parent b2c2271c
Loading
Loading
Loading
Loading
+15 −0
Original line number Diff line number Diff line
@@ -59,6 +59,10 @@

#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
 * @dwc: pointer to our context structure
@@ -370,6 +374,17 @@ static int __devinit dwc3_probe(struct platform_device *pdev)
	dwc->dev	= &pdev->dev;
	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_get_sync(&pdev->dev);
	pm_runtime_forbid(&pdev->dev);
+2 −0
Original line number Diff line number Diff line
@@ -555,6 +555,7 @@ struct dwc3_hwparams {
 * @regs: base address for our registers
 * @regs_size: address space size
 * @irq: IRQ number
 * @maximum_speed: maximum speed requested (mainly for testing purposes)
 * @revision: revision register contents
 * @is_selfpowered: true when we are selfpowered
 * @three_stage_setup: set if we perform a three phase setup
@@ -595,6 +596,7 @@ struct dwc3 {

	int			irq;

	u32			maximum_speed;
	u32			revision;

#define DWC3_REVISION_173A	0x5533173a
+1 −1
Original line number Diff line number Diff line
@@ -1183,7 +1183,7 @@ static int dwc3_gadget_start(struct usb_gadget *g,

	reg = dwc3_readl(dwc->regs, DWC3_DCFG);
	reg &= ~(DWC3_DCFG_SPEED_MASK);
	reg |= DWC3_DCFG_SUPERSPEED;
	reg |= dwc->maximum_speed;
	dwc3_writel(dwc->regs, DWC3_DCFG, reg);

	dwc->start_config_issued = false;