Hi Kesheva, Keshava Munegowda <keshava_mgowda@xxxxxx> writes: > The hwmod structure of uhh and tll are retrived > and registered with omap device > > Signed-off-by: Keshava Munegowda <keshava_mgowda@xxxxxx> Minor comment below... > --- > arch/arm/mach-omap2/usb-host.c | 99 ++++++++++++++-------------------------- > 1 files changed, 35 insertions(+), 64 deletions(-) > > diff --git a/arch/arm/mach-omap2/usb-host.c b/arch/arm/mach-omap2/usb-host.c > index 89ae298..9d762c4 100644 > --- a/arch/arm/mach-omap2/usb-host.c > +++ b/arch/arm/mach-omap2/usb-host.c > @@ -28,51 +28,28 @@ > #include <mach/hardware.h> > #include <mach/irqs.h> > #include <plat/usb.h> > +#include <plat/omap_device.h> > > #include "mux.h" > > #ifdef CONFIG_MFD_OMAP_USB_HOST > > -#define OMAP_USBHS_DEVICE "usbhs-omap" > - > -static struct resource usbhs_resources[] = { > - { > - .name = "uhh", > - .flags = IORESOURCE_MEM, > - }, > - { > - .name = "tll", > - .flags = IORESOURCE_MEM, > - }, > - { > - .name = "ehci", > - .flags = IORESOURCE_MEM, > - }, > - { > - .name = "ehci-irq", > - .flags = IORESOURCE_IRQ, > - }, > - { > - .name = "ohci", > - .flags = IORESOURCE_MEM, > - }, > - { > - .name = "ohci-irq", > - .flags = IORESOURCE_IRQ, > - } > -}; > - > -static struct platform_device usbhs_device = { > - .name = OMAP_USBHS_DEVICE, > - .id = 0, > - .num_resources = ARRAY_SIZE(usbhs_resources), > - .resource = usbhs_resources, > -}; > +#define OMAP_USBHS_DEVICE "usbhs_omap" > +#define USBHS_UHH_HWMODNAME "usbhs_uhh" > +#define USBHS_TLL_HWMODNAME "usbhs_tll" > > static struct usbhs_omap_platform_data usbhs_data; > static struct ehci_hcd_omap_platform_data ehci_data; > static struct ohci_hcd_omap_platform_data ohci_data; While changing the platform_data registration, these platform_data structs should be alloc'd and then free'd after omap_device_build, since a copy of them is made during device registration. Kevin > +static struct omap_device_pm_latency omap_uhhtll_latency[] = { > + { > + .deactivate_func = omap_device_idle_hwmods, > + .activate_func = omap_device_enable_hwmods, > + .flags = OMAP_DEVICE_LATENCY_AUTO_ADJUST, > + }, > +}; > + > /* MUX settings for EHCI pins */ > /* > * setup_ehci_io_mux - initialize IO pad mux for USBHOST > @@ -508,7 +485,10 @@ static void setup_4430ohci_io_mux(const enum usbhs_omap_port_mode *port_mode) > > void __init usbhs_init(const struct usbhs_omap_board_data *pdata) > { > - int i; > + struct omap_hwmod *oh[2]; > + struct omap_device *od; > + int bus_id = -1; > + int i; > > for (i = 0; i < OMAP3_HS_USB_PORTS; i++) { > usbhs_data.port_mode[i] = pdata->port_mode[i]; > @@ -523,44 +503,35 @@ void __init usbhs_init(const struct usbhs_omap_board_data *pdata) > usbhs_data.ohci_data = &ohci_data; > > if (cpu_is_omap34xx()) { > - usbhs_resources[0].start = OMAP34XX_UHH_CONFIG_BASE; > - usbhs_resources[0].end = OMAP34XX_UHH_CONFIG_BASE + SZ_1K - 1; > - usbhs_resources[1].start = OMAP34XX_USBTLL_BASE; > - usbhs_resources[1].end = OMAP34XX_USBTLL_BASE + SZ_4K - 1; > - usbhs_resources[2].start = OMAP34XX_EHCI_BASE; > - usbhs_resources[2].end = OMAP34XX_EHCI_BASE + SZ_1K - 1; > - usbhs_resources[3].start = INT_34XX_EHCI_IRQ; > - usbhs_resources[4].start = OMAP34XX_OHCI_BASE; > - usbhs_resources[4].end = OMAP34XX_OHCI_BASE + SZ_1K - 1; > - usbhs_resources[5].start = INT_34XX_OHCI_IRQ; > setup_ehci_io_mux(pdata->port_mode); > setup_ohci_io_mux(pdata->port_mode); > } else if (cpu_is_omap44xx()) { > - usbhs_resources[0].start = OMAP44XX_UHH_CONFIG_BASE; > - usbhs_resources[0].end = OMAP44XX_UHH_CONFIG_BASE + SZ_1K - 1; > - usbhs_resources[1].start = OMAP44XX_USBTLL_BASE; > - usbhs_resources[1].end = OMAP44XX_USBTLL_BASE + SZ_4K - 1; > - usbhs_resources[2].start = OMAP44XX_HSUSB_EHCI_BASE; > - usbhs_resources[2].end = OMAP44XX_HSUSB_EHCI_BASE + SZ_1K - 1; > - usbhs_resources[3].start = OMAP44XX_IRQ_EHCI; > - usbhs_resources[4].start = OMAP44XX_HSUSB_OHCI_BASE; > - usbhs_resources[4].end = OMAP44XX_HSUSB_OHCI_BASE + SZ_1K - 1; > - usbhs_resources[5].start = OMAP44XX_IRQ_OHCI; > setup_4430ehci_io_mux(pdata->port_mode); > setup_4430ohci_io_mux(pdata->port_mode); > } > > - if (platform_device_add_data(&usbhs_device, > - &usbhs_data, sizeof(usbhs_data)) < 0) { > - printk(KERN_ERR "USBHS platform_device_add_data failed\n"); > - goto init_end; > + oh[0] = omap_hwmod_lookup(USBHS_UHH_HWMODNAME); > + if (!oh[0]) { > + pr_err("Could not look up %s\n", USBHS_UHH_HWMODNAME); > + return; > } > > - if (platform_device_register(&usbhs_device) < 0) > - printk(KERN_ERR "USBHS platform_device_register failed\n"); > + oh[1] = omap_hwmod_lookup(USBHS_TLL_HWMODNAME); > + if (!oh[1]) { > + pr_err("Could not look up %s\n", USBHS_TLL_HWMODNAME); > + return; > + } > > -init_end: > - return; > + od = omap_device_build_ss(OMAP_USBHS_DEVICE, bus_id, oh, 2, > + (void *)&usbhs_data, sizeof(usbhs_data), > + omap_uhhtll_latency, > + ARRAY_SIZE(omap_uhhtll_latency), false); > + > + if (IS_ERR(od)) { > + pr_err("Could not build hwmod devices %s, %s\n", > + USBHS_UHH_HWMODNAME, USBHS_TLL_HWMODNAME); > + return; > + } > } > > #else -- 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