diff options
Diffstat (limited to 'arch/arm/mach-at91/at91sam9g45_devices.c')
| -rw-r--r-- | arch/arm/mach-at91/at91sam9g45_devices.c | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/arch/arm/mach-at91/at91sam9g45_devices.c b/arch/arm/mach-at91/at91sam9g45_devices.c index 332b784050b2..a57af3e99c7c 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) {} | |||
| 131 | 131 | ||
| 132 | 132 | ||
| 133 | /* -------------------------------------------------------------------- | 133 | /* -------------------------------------------------------------------- |
| 134 | * USB Host HS (EHCI) | ||
| 135 | * Needs an OHCI host for low and full speed management | ||
| 136 | * -------------------------------------------------------------------- */ | ||
| 137 | |||
| 138 | #if defined(CONFIG_USB_EHCI_HCD) || defined(CONFIG_USB_EHCI_HCD_MODULE) | ||
| 139 | static u64 ehci_dmamask = DMA_BIT_MASK(32); | ||
| 140 | static struct at91_usbh_data usbh_ehci_data; | ||
| 141 | |||
| 142 | static struct resource usbh_ehci_resources[] = { | ||
| 143 | [0] = { | ||
| 144 | .start = AT91SAM9G45_EHCI_BASE, | ||
| 145 | .end = AT91SAM9G45_EHCI_BASE + SZ_1M - 1, | ||
| 146 | .flags = IORESOURCE_MEM, | ||
| 147 | }, | ||
| 148 | [1] = { | ||
| 149 | .start = AT91SAM9G45_ID_UHPHS, | ||
| 150 | .end = AT91SAM9G45_ID_UHPHS, | ||
| 151 | .flags = IORESOURCE_IRQ, | ||
| 152 | }, | ||
| 153 | }; | ||
| 154 | |||
| 155 | static struct platform_device at91_usbh_ehci_device = { | ||
| 156 | .name = "atmel-ehci", | ||
| 157 | .id = -1, | ||
| 158 | .dev = { | ||
| 159 | .dma_mask = &ehci_dmamask, | ||
| 160 | .coherent_dma_mask = DMA_BIT_MASK(32), | ||
| 161 | .platform_data = &usbh_ehci_data, | ||
| 162 | }, | ||
| 163 | .resource = usbh_ehci_resources, | ||
| 164 | .num_resources = ARRAY_SIZE(usbh_ehci_resources), | ||
| 165 | }; | ||
| 166 | |||
| 167 | void __init at91_add_device_usbh_ehci(struct at91_usbh_data *data) | ||
| 168 | { | ||
| 169 | int i; | ||
| 170 | |||
| 171 | if (!data) | ||
| 172 | return; | ||
| 173 | |||
| 174 | /* Enable VBus control for UHP ports */ | ||
| 175 | for (i = 0; i < data->ports; i++) { | ||
| 176 | if (data->vbus_pin[i]) | ||
| 177 | at91_set_gpio_output(data->vbus_pin[i], 0); | ||
| 178 | } | ||
| 179 | |||
| 180 | usbh_ehci_data = *data; | ||
| 181 | at91_clock_associate("uhphs_clk", &at91_usbh_ehci_device.dev, "ehci_clk"); | ||
| 182 | platform_device_register(&at91_usbh_ehci_device); | ||
| 183 | } | ||
| 184 | #else | ||
| 185 | void __init at91_add_device_usbh_ehci(struct at91_usbh_data *data) {} | ||
| 186 | #endif | ||
| 187 | |||
| 188 | |||
| 189 | /* -------------------------------------------------------------------- | ||
| 134 | * USB HS Device (Gadget) | 190 | * USB HS Device (Gadget) |
| 135 | * -------------------------------------------------------------------- */ | 191 | * -------------------------------------------------------------------- */ |
| 136 | 192 | ||
