Hi Benoit, On 11/16/2012 12:30 PM, Benoit Cousson wrote: > Hi Roger, > > On 11/15/2012 03:56 PM, Roger Quadros wrote: >> Provides a means for the OMAP USB host subsystem to be initialized >> from Device tree. This is a first step for device tree migration where >> we specify only the board specific stuff. Things like I/O address space >> and interrupts are not yet specified in the device tree but can be >> done as a next step. >> >> This patch will allow boards to be booted with our without device tree >> and have USB host functional. >> >> Signed-off-by: Roger Quadros <rogerq@xxxxxx> >> --- >> .../devicetree/bindings/arm/omap/usb-host.txt | 60 +++++++++++++++++ >> arch/arm/mach-omap2/board-generic.c | 1 + >> arch/arm/mach-omap2/common.h | 2 + >> arch/arm/mach-omap2/usb-host.c | 71 ++++++++++++++++++++ >> 4 files changed, 134 insertions(+), 0 deletions(-) >> create mode 100644 Documentation/devicetree/bindings/arm/omap/usb-host.txt >> >> diff --git a/Documentation/devicetree/bindings/arm/omap/usb-host.txt b/Documentation/devicetree/bindings/arm/omap/usb-host.txt >> new file mode 100644 >> index 0000000..f25cfa4 >> --- /dev/null >> +++ b/Documentation/devicetree/bindings/arm/omap/usb-host.txt >> @@ -0,0 +1,60 @@ >> +* usb-host - OMAP USB Host Subsystem >> + >> +The OMAP USB host subsystem consists of the following modules >> +1) USBTLL (Tranceiverless interface) >> +2) USBHOST (Host Controller module) which includes both EHCI and OHCI controllers >> + >> +THe USB Host subsystem can be connected to the external world using 3 PORTs that could >> +be configured in various modes like UTMI+ for external PHY, ULPI transceiverless link (TLL), >> +Serial TLL, High-speed interchip (HSIC), etc. >> + >> +Required proprties: >> +- compatible: Must be "ti,usb-host"; >> +- num_ports: Number of physical ports available >> + >> +Optional properties: >> +- 1 child node for each available port. These child nodes are usually supplied by the >> + board support device tree as they are specific to how the ports are wired on the board >> + >> + - mode: Integer specifying the mode in which the port is used >> + * OMAP_USBHS_PORT_MODE_UNUSED = 0, >> + * OMAP_EHCI_PORT_MODE_PHY = 1, >> + * OMAP_EHCI_PORT_MODE_TLL = 2, >> + * OMAP_EHCI_PORT_MODE_HSIC = 3, >> + * OMAP_OHCI_PORT_MODE_PHY_6PIN_DATSE0 = 4, >> + * OMAP_OHCI_PORT_MODE_PHY_6PIN_DPDM = 5, >> + * OMAP_OHCI_PORT_MODE_PHY_3PIN_DATSE0 = 6, >> + * OMAP_OHCI_PORT_MODE_PHY_4PIN_DPDM = 7, >> + * OMAP_OHCI_PORT_MODE_TLL_6PIN_DATSE0 = 8, >> + * OMAP_OHCI_PORT_MODE_TLL_6PIN_DPDM = 9, >> + * OMAP_OHCI_PORT_MODE_TLL_3PIN_DATSE0 = 10, >> + * OMAP_OHCI_PORT_MODE_TLL_4PIN_DPDM = 11, >> + * OMAP_OHCI_PORT_MODE_TLL_2PIN_DATSE0 = 12, >> + * OMAP_OHCI_PORT_MODE_TLL_2PIN_DPDM = 13, >> + - clk: Name of the clock that needs to be active when using the port >> + - clkrate: Frequency at which the above clk needs to be run at >> + >> + >> +Example: >> + >> +/* In the OMAP Core tree */ >> +usbhost: usb-host { >> + compatible = "ti,usb-host"; >> + num_ports = <3>; >> +}; >> + >> +/* In the Board tree */ >> +&usbhost { >> + port@0 { >> + mode = <1>; >> + clk = "auxclk3_ck"; >> + clkrate = <19200000>; >> + }; >> + port@1 { >> + mode = <0>; >> + }; >> + port@2 { >> + mode = <0>; >> + }; >> +}; >> + >> diff --git a/arch/arm/mach-omap2/board-generic.c b/arch/arm/mach-omap2/board-generic.c >> index 601ecdf..4e53b62 100644 >> --- a/arch/arm/mach-omap2/board-generic.c >> +++ b/arch/arm/mach-omap2/board-generic.c >> @@ -40,6 +40,7 @@ static void __init omap_generic_init(void) >> omap_sdrc_init(NULL, NULL); >> >> of_platform_populate(NULL, omap_dt_match_table, NULL, NULL); >> + usbhost_init_of(); > > You should never have to add that kind of hacks in generic board file. > Why do you need that during board init? > > In theory, the of_platform_populate will create all the devices, and > during the driver probe you will create the sub nodes. > OK. I was thinking of this as a temporary fix till the USB host drivers support OF nodes natively. Maybe I should work on fixing up the host drivers instead. But I'm not sure how the PM runtime calls map to omap_device/hwmod framework when device tree boot is used. I can see that the device tree node can specify "ti,hwmods = " parameter. Just can't seem to figure out how all this adds up :P cheers, -roger -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html