summaryrefslogtreecommitdiff
path: root/drivers/usb/gadget/tegra_udc.c
diff options
context:
space:
mode:
authorMarcel Ziswiler <marcel.ziswiler@toradex.com>2012-11-20 10:00:04 +0100
committerMarcel Ziswiler <marcel.ziswiler@toradex.com>2012-11-20 10:00:04 +0100
commita39ae1c004b797d5047f97914a288d106121a10f (patch)
tree3bf35be86d5f61dd63eb5d89b064ed05fa83c314 /drivers/usb/gadget/tegra_udc.c
parentb7e977a36ee2b1ab1a55238761fe8d63df9bc638 (diff)
colibri_t20: USB: allow forcing full speed only
Allow limiting externally accessible USB OTG and host port to full speed only in order to be compatible with older carrier boards (e.g. old Colibri Evaluation Board v2.1c, Orchid or Protea). The following kernel argument can be set to either 0 meaning false or 1 meaning true: usb_high_speed
Diffstat (limited to 'drivers/usb/gadget/tegra_udc.c')
-rw-r--r--drivers/usb/gadget/tegra_udc.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/drivers/usb/gadget/tegra_udc.c b/drivers/usb/gadget/tegra_udc.c
index ddf9c602dc89..1dd2cceb741b 100644
--- a/drivers/usb/gadget/tegra_udc.c
+++ b/drivers/usb/gadget/tegra_udc.c
@@ -94,6 +94,11 @@ static const u8 tegra_udc_test_packet[53] = {
0xfc, 0x7e, 0xbf, 0xdf, 0xef, 0xf7, 0xfb, 0xfd, 0x7e
};
+#ifdef CONFIG_MACH_COLIBRI_T20
+/* To limit the speed of USB to full speed */
+extern int g_usb_high_speed;
+#endif /* CONFIG_MACH_COLIBRI_T20 */
+
static struct tegra_udc *the_udc;
#ifdef CONFIG_TEGRA_GADGET_BOOST_CPU_FREQ
@@ -252,6 +257,16 @@ static int dr_controller_reset(struct tegra_udc *udc)
cpu_relax();
}
+#ifdef CONFIG_MACH_COLIBRI_T20
+ /* To limit the speed of USB to full speed */
+ if (!g_usb_high_speed) {
+ tmp = udc_readl(udc, PORTSCX_REG_OFFSET);
+ tmp |= PORTSCX_PORT_FORCE_FULL_SPEED;
+ udc_writel(udc, tmp, PORTSCX_REG_OFFSET);
+ tmp = udc_readl(udc, PORTSCX_REG_OFFSET);
+ }
+#endif /* CONFIG_MACH_COLIBRI_T20 */
+
DBG("%s(%d) END\n", __func__, __LINE__);
return 0;
}