Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 50b2a9bd authored by Keshava Munegowda's avatar Keshava Munegowda Committed by Paul Walmsley
Browse files

ARM: OMAP: USB: register hwmods of usbhs



The hwmod structure of usb_host_hs  and usb_tll are
retrieved and registered with omap device

Signed-off-by: default avatarKeshava Munegowda <keshava_mgowda@ti.com>
Reviewed-by: default avatarPartha Basak <parthab@india.ti.com>
[paul@pwsan.com: this patch is merged with the understanding that the
 authors will send patches for the next merge window to remove the
 multiple hwmods-per-omap_device]
Signed-off-by: default avatarPaul Walmsley <paul@pwsan.com>
parent 3e47dc6a
Loading
Loading
Loading
Loading
+34 −66
Original line number Diff line number Diff line
@@ -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	"usb_host_hs"
#define USBHS_TLL_HWMODNAME	"usb_tll_hs"

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;

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,6 +485,9 @@ 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)
{
	struct omap_hwmod	*oh[2];
	struct omap_device	*od;
	int			bus_id = -1;
	int			i;

	for (i = 0; i < OMAP3_HS_USB_PORTS; i++) {
@@ -523,45 +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:
	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

@@ -570,5 +540,3 @@ void __init usbhs_init(const struct usbhs_omap_board_data *pdata)
}

#endif