diff options
Diffstat (limited to 'arch/arm/mach-at91/at91sam9g45_devices.c')
| -rw-r--r-- | arch/arm/mach-at91/at91sam9g45_devices.c | 58 | 
1 files changed, 57 insertions, 1 deletions
diff --git a/arch/arm/mach-at91/at91sam9g45_devices.c b/arch/arm/mach-at91/at91sam9g45_devices.c index d581cff80c4..a57af3e99c7 100644 --- a/arch/arm/mach-at91/at91sam9g45_devices.c +++ b/arch/arm/mach-at91/at91sam9g45_devices.c @@ -131,6 +131,62 @@ void __init at91_add_device_usbh_ohci(struct at91_usbh_data *data) {}  /* -------------------------------------------------------------------- + *  USB Host HS (EHCI) + *  Needs an OHCI host for low and full speed management + * -------------------------------------------------------------------- */ + +#if defined(CONFIG_USB_EHCI_HCD) || defined(CONFIG_USB_EHCI_HCD_MODULE) +static u64 ehci_dmamask = DMA_BIT_MASK(32); +static struct at91_usbh_data usbh_ehci_data; + +static struct resource usbh_ehci_resources[] = { +	[0] = { +		.start	= AT91SAM9G45_EHCI_BASE, +		.end	= AT91SAM9G45_EHCI_BASE + SZ_1M - 1, +		.flags	= IORESOURCE_MEM, +	}, +	[1] = { +		.start	= AT91SAM9G45_ID_UHPHS, +		.end	= AT91SAM9G45_ID_UHPHS, +		.flags	= IORESOURCE_IRQ, +	}, +}; + +static struct platform_device at91_usbh_ehci_device = { +	.name		= "atmel-ehci", +	.id		= -1, +	.dev		= { +				.dma_mask		= &ehci_dmamask, +				.coherent_dma_mask	= DMA_BIT_MASK(32), +				.platform_data		= &usbh_ehci_data, +	}, +	.resource	= usbh_ehci_resources, +	.num_resources	= ARRAY_SIZE(usbh_ehci_resources), +}; + +void __init at91_add_device_usbh_ehci(struct at91_usbh_data *data) +{ +	int i; + +	if (!data) +		return; + +	/* Enable VBus control for UHP ports */ +	for (i = 0; i < data->ports; i++) { +		if (data->vbus_pin[i]) +			at91_set_gpio_output(data->vbus_pin[i], 0); +	} + +	usbh_ehci_data = *data; +	at91_clock_associate("uhphs_clk", &at91_usbh_ehci_device.dev, "ehci_clk"); +	platform_device_register(&at91_usbh_ehci_device); +} +#else +void __init at91_add_device_usbh_ehci(struct at91_usbh_data *data) {} +#endif + + +/* --------------------------------------------------------------------   *  USB HS Device (Gadget)   * -------------------------------------------------------------------- */ @@ -838,7 +894,7 @@ static void __init at91_add_device_rtt(void)   *  Watchdog   * -------------------------------------------------------------------- */ -#if defined(CONFIG_AT91SAM9_WATCHDOG) || defined(CONFIG_AT91SAM9_WATCHDOG_MODULE) +#if defined(CONFIG_AT91SAM9X_WATCHDOG) || defined(CONFIG_AT91SAM9X_WATCHDOG_MODULE)  static struct platform_device at91sam9g45_wdt_device = {  	.name		= "at91_wdt",  	.id		= -1,  |