summaryrefslogtreecommitdiffstats
path: root/meta/recipes-kernel/linux/linux-omap-2.6.29/0001-This-merges-Steve-Kipisz-USB-EHCI-support.-He-star.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta/recipes-kernel/linux/linux-omap-2.6.29/0001-This-merges-Steve-Kipisz-USB-EHCI-support.-He-star.patch')
-rw-r--r--meta/recipes-kernel/linux/linux-omap-2.6.29/0001-This-merges-Steve-Kipisz-USB-EHCI-support.-He-star.patch146
1 files changed, 146 insertions, 0 deletions
diff --git a/meta/recipes-kernel/linux/linux-omap-2.6.29/0001-This-merges-Steve-Kipisz-USB-EHCI-support.-He-star.patch b/meta/recipes-kernel/linux/linux-omap-2.6.29/0001-This-merges-Steve-Kipisz-USB-EHCI-support.-He-star.patch
new file mode 100644
index 0000000000..d590f8ffb9
--- /dev/null
+++ b/meta/recipes-kernel/linux/linux-omap-2.6.29/0001-This-merges-Steve-Kipisz-USB-EHCI-support.-He-star.patch
@@ -0,0 +1,146 @@
1From f8f10f496bce396416d7156da876222c6ce8c341 Mon Sep 17 00:00:00 2001
2From: Steven Kipisz <skipisz@beagleboard.org>
3Date: Wed, 9 Jan 2009 12:01:11 -0600
4Subject: [PATCH-USB] Omap3 beagleboard: add support for EHCI in revision C1 boards
5
6Signed-off-by: Jason Kridner <jkridner@beagleboard.org>
7---
8 arch/arm/mach-omap2/board-omap3beagle.c | 10 +---------
9 arch/arm/mach-omap2/usb-ehci.c | 4 +---
10 drivers/usb/host/ehci-omap.c | 26 ++++++++++++++++++++++++++
11 3 files changed, 28 insertions(+), 12 deletions(-)
12
13diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
14index fe97bab..de81153 100644
15--- a/arch/arm/mach-omap2/board-omap3beagle.c
16+++ b/arch/arm/mach-omap2/board-omap3beagle.c
17@@ -140,15 +140,7 @@ static int beagle_twl_gpio_setup(struct device *dev,
18 * power switch and overcurrent detect
19 */
20
21- gpio_request(gpio + 1, "EHCI_nOC");
22- gpio_direction_input(gpio + 1);
23-
24- /* TWL4030_GPIO_MAX + 0 == ledA, EHCI nEN_USB_PWR (out, active low) */
25- gpio_request(gpio + TWL4030_GPIO_MAX, "nEN_USB_PWR");
26- gpio_direction_output(gpio + TWL4030_GPIO_MAX, 1);
27-
28- /* TWL4030_GPIO_MAX + 1 == ledB, PMU_STAT (out, active low LED) */
29- gpio_leds[2].gpio = gpio + TWL4030_GPIO_MAX + 1;
30+ /* TODO: This needs to be modified to not rely on u-boot */
31
32 return 0;
33 }
34diff --git a/arch/arm/mach-omap2/usb-ehci.c b/arch/arm/mach-omap2/usb-ehci.c
35index 489439d..2c6305b 100644
36--- a/arch/arm/mach-omap2/usb-ehci.c
37+++ b/arch/arm/mach-omap2/usb-ehci.c
38@@ -152,9 +152,7 @@ static void setup_ehci_io_mux(void)
39 void __init usb_ehci_init(void)
40 {
41 #if defined(CONFIG_USB_EHCI_HCD) || defined(CONFIG_USB_EHCI_HCD_MODULE)
42- /* Setup Pin IO MUX for EHCI */
43- if (cpu_is_omap34xx())
44- setup_ehci_io_mux();
45+ /* TODO: Setup Pin IO MUX for EHCI - moved this temporarily to U-boot */
46
47 if (platform_device_register(&ehci_device) < 0) {
48 printk(KERN_ERR "Unable to register HS-USB (EHCI) device\n");
49
50diff --git a/drivers/usb/host/ehci-omap.c b/drivers/usb/host/ehci-omap.c
51index 1b3266c..8472996 100644
52--- a/drivers/usb/host/ehci-omap.c
53+++ b/drivers/usb/host/ehci-omap.c
54@@ -48,16 +48,26 @@
55 * to get the PHY state machine in working state
56 */
57 #define EXTERNAL_PHY_RESET
58+#ifdef CONFIG_MACH_OMAP3_BEAGLE
59+#define EXT_PHY_RESET_GPIO_PORT2 (147)
60+#else
61 #define EXT_PHY_RESET_GPIO_PORT1 (57)
62 #define EXT_PHY_RESET_GPIO_PORT2 (61)
63+#endif
64 #define EXT_PHY_RESET_DELAY (10)
65
66+#define PHY_STP_PULLUP_ENABLE (0x10)
67+#define PHY_STP_PULLUP_DISABLE (0x90)
68+
69+
70 /* ISSUE2:
71 * USBHOST supports External charge pump PHYs only
72 * Use the VBUS from Port1 to power VBUS of Port2 externally
73 * So use Port2 as the working ULPI port
74 */
75+#ifndef CONFIG_MACH_OMAP3_BEAGLE
76 #define VBUS_INTERNAL_CHARGEPUMP_HACK
77+#endif
78
79 #endif /* CONFIG_OMAP_EHCI_PHY_MODE */
80
81@@ -225,14 +235,43 @@ static int omap_start_ehc(struct platform_device *dev, struct usb_hcd *hcd)
82
83 #ifdef EXTERNAL_PHY_RESET
84 /* Refer: ISSUE1 */
85+#ifndef CONFIG_MACH_OMAP3_BEAGLE
86 gpio_request(EXT_PHY_RESET_GPIO_PORT1, "USB1 PHY reset");
87 gpio_direction_output(EXT_PHY_RESET_GPIO_PORT1, 0);
88+#endif
89 gpio_request(EXT_PHY_RESET_GPIO_PORT2, "USB2 PHY reset");
90 gpio_direction_output(EXT_PHY_RESET_GPIO_PORT2, 0);
91+ gpio_set_value(EXT_PHY_RESET_GPIO_PORT2, 0);
92 /* Hold the PHY in RESET for enough time till DIR is high */
93 udelay(EXT_PHY_RESET_DELAY);
94 #endif
95
96+ /*
97+ * The PHY register 0x7 - Interface Control register is
98+ * configured to disable the integrated STP pull-up resistor
99+ * used for interface protection.
100+ *
101+ * May not need to be here.
102+ */
103+ omap_writel((0x7 << EHCI_INSNREG05_ULPI_REGADD_SHIFT) |/* interface reg */
104+ (2 << EHCI_INSNREG05_ULPI_OPSEL_SHIFT) |/* Write */
105+ (1 << EHCI_INSNREG05_ULPI_PORTSEL_SHIFT) |/* Port1 */
106+ (1 << EHCI_INSNREG05_ULPI_CONTROL_SHIFT) |/* Start */
107+ (PHY_STP_PULLUP_DISABLE),
108+ EHCI_INSNREG05_ULPI);
109+
110+ while (!(omap_readl(EHCI_INSNREG05_ULPI) & (1<<EHCI_INSNREG05_ULPI_CONTROL_SHIFT)));
111+
112+ /* Force PHY to HS */
113+ omap_writel((0x4 << EHCI_INSNREG05_ULPI_REGADD_SHIFT) |/* function ctrl */
114+ (2 << EHCI_INSNREG05_ULPI_OPSEL_SHIFT) |/* Write */
115+ (1 << EHCI_INSNREG05_ULPI_PORTSEL_SHIFT) |/* Port1 */
116+ (1 << EHCI_INSNREG05_ULPI_CONTROL_SHIFT) |/* Start */
117+ (0x40),
118+ EHCI_INSNREG05_ULPI);
119+
120+ while (!(omap_readl(EHCI_INSNREG05_ULPI) & (1<<EHCI_INSNREG05_ULPI_CONTROL_SHIFT)));
121+
122 /* Configure TLL for 60Mhz clk for ULPI */
123 ehci_clocks->usbtll_fck_clk = clk_get(&dev->dev, USBHOST_TLL_FCLK);
124 if (IS_ERR(ehci_clocks->usbtll_fck_clk))
125@@ -307,7 +346,9 @@ static int omap_start_ehc(struct platform_device *dev, struct usb_hcd *hcd)
126 * Hold the PHY in RESET for enough time till PHY is settled and ready
127 */
128 udelay(EXT_PHY_RESET_DELAY);
129+#ifndef CONFIG_MACH_OMAP3_BEAGLE
130 gpio_set_value(EXT_PHY_RESET_GPIO_PORT1, 1);
131+#endif
132 gpio_set_value(EXT_PHY_RESET_GPIO_PORT2, 1);
133 #endif
134
135@@ -393,7 +434,9 @@ static void omap_stop_ehc(struct platform_device *dev, struct usb_hcd *hcd)
136
137
138 #ifdef EXTERNAL_PHY_RESET
139+#ifndef CONFIG_MACH_OMAP3_BEAGLE
140 gpio_free(EXT_PHY_RESET_GPIO_PORT1);
141+#endif
142 gpio_free(EXT_PHY_RESET_GPIO_PORT2);
143 #endif
144
145--
1461.6.0.4.790.gaa14a