* [U-Boot] [PATCH] cm-t35: add USB host support
@ 2012-11-28 13:23 Nikita Kiryanov
2012-11-28 22:36 ` Marek Vasut
0 siblings, 1 reply; 4+ messages in thread
From: Nikita Kiryanov @ 2012-11-28 13:23 UTC (permalink / raw)
To: u-boot
Add support for USB host ports on cm-t3530 and cm-t3730.
Signed-off-by: Nikita Kiryanov <nikita@compulab.co.il>
Signed-off-by: Igor Grinberg <grinberg@compulab.co.il>
---
board/cm_t35/cm_t35.c | 77 ++++++++++++++++++++++++++++++++++++++++++++++
include/configs/cm_t35.h | 8 ++++-
2 files changed, 84 insertions(+), 1 deletion(-)
diff --git a/board/cm_t35/cm_t35.c b/board/cm_t35/cm_t35.c
index 6c2e95b..8d8d420 100644
--- a/board/cm_t35/cm_t35.c
+++ b/board/cm_t35/cm_t35.c
@@ -32,6 +32,7 @@
#include <netdev.h>
#include <net.h>
#include <i2c.h>
+#include <usb.h>
#include <twl4030.h>
#include <linux/compiler.h>
@@ -41,6 +42,8 @@
#include <asm/arch/mmc_host_def.h>
#include <asm/arch/sys_proto.h>
#include <asm/mach-types.h>
+#include <asm/ehci-omap.h>
+#include <asm/gpio.h>
#include "eeprom.h"
@@ -260,6 +263,36 @@ static void cm_t3x_set_common_muxconf(void)
MUX_VAL(CP(HSUSB0_DATA6), (IEN | PTD | DIS | M0)); /*HSUSB0_DATA6*/
MUX_VAL(CP(HSUSB0_DATA7), (IEN | PTD | DIS | M0)); /*HSUSB0_DATA7*/
+ /* USB EHCI */
+ MUX_VAL(CP(ETK_D0_ES2), (IEN | PTD | EN | M3)); /*HSUSB1_DT0*/
+ MUX_VAL(CP(ETK_D1_ES2), (IEN | PTD | EN | M3)); /*HSUSB1_DT1*/
+ MUX_VAL(CP(ETK_D2_ES2), (IEN | PTD | EN | M3)); /*HSUSB1_DT2*/
+ MUX_VAL(CP(ETK_D7_ES2), (IEN | PTD | EN | M3)); /*HSUSB1_DT3*/
+ MUX_VAL(CP(ETK_D4_ES2), (IEN | PTD | EN | M3)); /*HSUSB1_DT4*/
+ MUX_VAL(CP(ETK_D5_ES2), (IEN | PTD | EN | M3)); /*HSUSB1_DT5*/
+ MUX_VAL(CP(ETK_D6_ES2), (IEN | PTD | EN | M3)); /*HSUSB1_DT6*/
+ MUX_VAL(CP(ETK_D3_ES2), (IEN | PTD | EN | M3)); /*HSUSB1_DT7*/
+ MUX_VAL(CP(ETK_D8_ES2), (IEN | PTD | EN | M3)); /*HSUSB1_DIR*/
+ MUX_VAL(CP(ETK_D9_ES2), (IEN | PTD | EN | M3)); /*HSUSB1_NXT*/
+ MUX_VAL(CP(ETK_CTL_ES2), (IDIS | PTD | DIS | M3)); /*HSUSB1_CLK*/
+ MUX_VAL(CP(ETK_CLK_ES2), (IDIS | PTU | DIS | M3)); /*HSUSB1_STP*/
+
+ MUX_VAL(CP(ETK_D14_ES2), (IEN | PTD | EN | M3)); /*HSUSB2_DT0*/
+ MUX_VAL(CP(ETK_D15_ES2), (IEN | PTD | EN | M3)); /*HSUSB2_DT1*/
+ MUX_VAL(CP(MCSPI1_CS3), (IEN | PTD | EN | M3)); /*HSUSB2_DT2*/
+ MUX_VAL(CP(MCSPI2_CS1), (IEN | PTD | EN | M3)); /*HSUSB2_DT3*/
+ MUX_VAL(CP(MCSPI2_SIMO), (IEN | PTD | EN | M3)); /*HSUSB2_DT4*/
+ MUX_VAL(CP(MCSPI2_SOMI), (IEN | PTD | EN | M3)); /*HSUSB2_DT5*/
+ MUX_VAL(CP(MCSPI2_CS0), (IEN | PTD | EN | M3)); /*HSUSB2_DT6*/
+ MUX_VAL(CP(MCSPI2_CLK), (IEN | PTD | EN | M3)); /*HSUSB2_DT7*/
+ MUX_VAL(CP(ETK_D12_ES2), (IEN | PTD | EN | M3)); /*HSUSB2_DIR*/
+ MUX_VAL(CP(ETK_D13_ES2), (IEN | PTD | EN | M3)); /*HSUSB2_NXT*/
+ MUX_VAL(CP(ETK_D10_ES2), (IDIS | PTD | DIS | M3)); /*HSUSB2_CLK*/
+ MUX_VAL(CP(ETK_D11_ES2), (IDIS | PTU | DIS | M3)); /*HSUSB2_STP*/
+
+ /* SB_T35_USB_HUB_RESET_GPIO */
+ MUX_VAL(CP(CAM_WEN), (IDIS | PTD | DIS | M4)); /*GPIO_167*/
+
/* I2C1 */
MUX_VAL(CP(I2C1_SCL), (IEN | PTU | EN | M0)); /*I2C1_SCL*/
MUX_VAL(CP(I2C1_SDA), (IEN | PTU | EN | M0)); /*I2C1_SDA*/
@@ -461,3 +494,47 @@ void __weak get_board_serial(struct tag_serialnr *serialnr)
serialnr->low = 0;
serialnr->high = 0;
};
+
+#ifdef CONFIG_USB_EHCI_OMAP
+struct omap_usbhs_board_data usbhs_bdata = {
+ .port_mode[0] = OMAP_EHCI_PORT_MODE_PHY,
+ .port_mode[1] = OMAP_EHCI_PORT_MODE_PHY,
+ .port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED,
+};
+
+#define SB_T35_USB_HUB_RESET_GPIO 167
+int ehci_hcd_init(void)
+{
+ u8 val;
+
+ if (gpio_request(SB_T35_USB_HUB_RESET_GPIO, "SB-T35 usb hub reset")) {
+ printf("Error: can't obtain GPIO %d for SB-T35 usb hub reset",
+ SB_T35_USB_HUB_RESET_GPIO);
+ return -1;
+ }
+
+ gpio_direction_output(SB_T35_USB_HUB_RESET_GPIO, 0);
+ udelay(10);
+ gpio_set_value(SB_T35_USB_HUB_RESET_GPIO, 1);
+ udelay(1000);
+
+ twl4030_i2c_read_u8(TWL4030_CHIP_GPIO, &val,
+ TWL4030_BASEADD_GPIO + 0x03);
+ val |= 0xC0;
+ /* Set GPIO6 and GPIO7 of TPS65930 as output */
+ twl4030_i2c_write_u8(TWL4030_CHIP_GPIO, val,
+ TWL4030_BASEADD_GPIO + 0x03);
+ /* Take both PHYs out of reset */
+ twl4030_i2c_write_u8(TWL4030_CHIP_GPIO, 0xC0,
+ TWL4030_BASEADD_GPIO + 0x0C);
+ udelay(1);
+
+ return omap_ehci_hcd_init(&usbhs_bdata);
+}
+
+int ehci_hcd_stop(void)
+{
+ return omap_ehci_hcd_stop();
+}
+
+#endif /* CONFIG_USB_EHCI_OMAP */
diff --git a/include/configs/cm_t35.h b/include/configs/cm_t35.h
index 46c556d..35e2280 100644
--- a/include/configs/cm_t35.h
+++ b/include/configs/cm_t35.h
@@ -114,9 +114,15 @@
#define CONFIG_DOS_PARTITION
/* USB */
-#define CONFIG_MUSB_UDC
#define CONFIG_USB_OMAP3
+#define CONFIG_USB_EHCI
+#define CONFIG_USB_EHCI_OMAP
+#define CONFIG_USB_ULPI
+#define CONFIG_USB_ULPI_VIEWPORT_OMAP
+#define CONFIG_USB_STORAGE
+#define CONFIG_MUSB_UDC
#define CONFIG_TWL4030_USB
+#define CONFIG_CMD_USB
/* USB device configuration */
#define CONFIG_USB_DEVICE
--
1.7.10.4
^ permalink raw reply related [flat|nested] 4+ messages in thread* [U-Boot] [PATCH] cm-t35: add USB host support
2012-11-28 13:23 [U-Boot] [PATCH] cm-t35: add USB host support Nikita Kiryanov
@ 2012-11-28 22:36 ` Marek Vasut
2012-12-02 7:11 ` Nikita Kiryanov
0 siblings, 1 reply; 4+ messages in thread
From: Marek Vasut @ 2012-11-28 22:36 UTC (permalink / raw)
To: u-boot
Dear Nikita Kiryanov,
[...]
> + twl4030_i2c_read_u8(TWL4030_CHIP_GPIO, &val,
> + TWL4030_BASEADD_GPIO + 0x03);
> + val |= 0xC0;
What are these magic values here please?
> + /* Set GPIO6 and GPIO7 of TPS65930 as output */
> + twl4030_i2c_write_u8(TWL4030_CHIP_GPIO, val,
> + TWL4030_BASEADD_GPIO + 0x03);
> + /* Take both PHYs out of reset */
> + twl4030_i2c_write_u8(TWL4030_CHIP_GPIO, 0xC0,
> + TWL4030_BASEADD_GPIO + 0x0C);
> + udelay(1);
> +
> + return omap_ehci_hcd_init(&usbhs_bdata);
[...]
Best regards,
Marek Vasut
^ permalink raw reply [flat|nested] 4+ messages in thread
* [U-Boot] [PATCH] cm-t35: add USB host support
2012-11-28 22:36 ` Marek Vasut
@ 2012-12-02 7:11 ` Nikita Kiryanov
2012-12-02 7:47 ` Marek Vasut
0 siblings, 1 reply; 4+ messages in thread
From: Nikita Kiryanov @ 2012-12-02 7:11 UTC (permalink / raw)
To: u-boot
Hi Marek Vasut,
On 11/29/2012 12:36 AM, Marek Vasut wrote:
> Dear Nikita Kiryanov,
>
> [...]
>
>> + twl4030_i2c_read_u8(TWL4030_CHIP_GPIO, &val,
>> + TWL4030_BASEADD_GPIO + 0x03);
>> + val |= 0xC0;
>
> What are these magic values here please?
val |= 0xC0 is simply setting bits 7 and 6 to 1.
As for TWL4030_BASEADD_GPIO + 0x03/0x0C, I'll address them in a V2.
>
>> + /* Set GPIO6 and GPIO7 of TPS65930 as output */
>> + twl4030_i2c_write_u8(TWL4030_CHIP_GPIO, val,
>> + TWL4030_BASEADD_GPIO + 0x03);
>> + /* Take both PHYs out of reset */
>> + twl4030_i2c_write_u8(TWL4030_CHIP_GPIO, 0xC0,
>> + TWL4030_BASEADD_GPIO + 0x0C);
>> + udelay(1);
>> +
>> + return omap_ehci_hcd_init(&usbhs_bdata);
> [...]
>
> Best regards,
> Marek Vasut
>
--
Regards,
Nikita.
^ permalink raw reply [flat|nested] 4+ messages in thread
* [U-Boot] [PATCH] cm-t35: add USB host support
2012-12-02 7:11 ` Nikita Kiryanov
@ 2012-12-02 7:47 ` Marek Vasut
0 siblings, 0 replies; 4+ messages in thread
From: Marek Vasut @ 2012-12-02 7:47 UTC (permalink / raw)
To: u-boot
Dear Nikita Kiryanov,
> Hi Marek Vasut,
>
> On 11/29/2012 12:36 AM, Marek Vasut wrote:
> > Dear Nikita Kiryanov,
> >
> > [...]
> >
> >> + twl4030_i2c_read_u8(TWL4030_CHIP_GPIO, &val,
> >> + TWL4030_BASEADD_GPIO + 0x03);
> >> + val |= 0xC0;
> >
> > What are these magic values here please?
>
> val |= 0xC0 is simply setting bits 7 and 6 to 1.
>
> As for TWL4030_BASEADD_GPIO + 0x03/0x0C, I'll address them in a V2.
[...]
Please do, thank you!
Best regards,
Marek Vasut
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2012-12-02 7:47 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-11-28 13:23 [U-Boot] [PATCH] cm-t35: add USB host support Nikita Kiryanov
2012-11-28 22:36 ` Marek Vasut
2012-12-02 7:11 ` Nikita Kiryanov
2012-12-02 7:47 ` Marek Vasut
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox