/* * arch/arm/plat-orion/common.c * * Marvell Orion SoC common setup code used by multiple mach-/common.c * * This file is licensed under the terms of the GNU General Public * License version 2. This program is licensed "as is" without any * warranty of any kind, whether express or implied. */ #include #include #include #include /* Fill in the resources structure and link it into the platform device structure. There is always a memory region, and nearly always an interrupt.*/ static void fill_resources(struct platform_device *device, struct resource *resources, resource_size_t mapbase, resource_size_t size, unsigned int irq) { device->resource = resources; device->num_resources = 1; resources[0].flags = IORESOURCE_MEM; resources[0].start = mapbase; resources[0].end = mapbase + size; if (irq != NO_IRQ) { device->num_resources++; resources[1].flags = IORESOURCE_IRQ; resources[1].start = irq; resources[1].end = irq; } } /***************************************************************************** * UART ****************************************************************************/ static void __init uart_complete( struct platform_device *orion_uart, struct plat_serial8250_port *data, struct resource *resources, unsigned int membase, resource_size_t mapbase, unsigned int irq, unsigned int uartclk) { data->mapbase = mapbase; data->membase = (void __iomem *)membase; data->irq = irq; data->uartclk = uartclk; orion_uart->dev.platform_data = data; fill_resources(orion_uart, resources, mapbase, 0xff, irq); platform_device_register(orion_uart); } /***************************************************************************** * UART0 ****************************************************************************/ static struct plat_serial8250_port orion_uart0_data[] = { { .flags = UPF_SKIP_TEST | UPF_BOOT_AUTOCONF, .iotype = UPIO_MEM, .regshift = 2, }, { }, }; static struct resource orion_uart0_resources[2]; static struct platform_device orion_uart0 = { .name = "serial8250", .id = PLAT8250_DEV_PLATFORM, }; void __init orion_uart0_init(unsigned int membase, resource_size_t mapbase, unsigned int irq, unsigned int uartclk) { uart_complete(&orion_uart0, orion_uart0_data, orion_uart0_resources, membase, mapbase, irq, uartclk); } /***************************************************************************** * UART1 ****************************************************************************/ static struct plat_serial8250_port orion_uart1_data[] = { { .flags = UPF_SKIP_TEST | UPF_BOOT_AUTOCONF, .iotype = UPIO_MEM, .regshift = 2, }, { }, }; static struct resource orion_uart1_resources[2]; static struct platform_device orion_uart1 = { .name = "serial8250", .id = PLAT8250_DEV_PLATFORM1, }; void __init orion_uart1_init(unsigned int membase, resource_size_t mapbase, unsigned int irq, unsigned int uartclk) { uart_complete(&orion_uart1, orion_uart1_data, orion_uart1_resources, membase, mapbase, irq, uartclk); } /***************************************************************************** * UART2 ****************************************************************************/ static struct plat_serial8250_port orion_uart2_data[] = { { .flags = UPF_SKIP_TEST | UPF_BOOT_AUTOCONF, .iotype = UPIO_MEM, .regshift = 2, }, { }, }; static struct resource orion_uart2_resources[2]; static struct platform_device orion_uart2 = { .name = "serial8250", .id = PLAT8250_DEV_PLATFORM2, }; void __init orion_uart2_init(unsigned int membase, resource_size_t mapbase, unsigned int irq, unsigned int uartclk) { uart_complete(&orion_uart2, orion_uart2_data, orion_uart2_resources, membase, mapbase, irq, uartclk); } /***************************************************************************** * UART3 ****************************************************************************/ static struct plat_serial8250_port orion_uart3_data[] = { { .flags = UPF_SKIP_TEST | UPF_BOOT_AUTOCONF, .iotype = UPIO_MEM, .regshift = 2, }, { }, }; static struct resource orion_uart3_resources[2]; static struct platform_device orion_uart3 = { .name = "serial8250", .id = 3, }; void __init orion_uart3_init(unsigned int membase, resource_size_t mapbase, unsigned int irq, unsigned int uartclk) { uart_complete(&orion_uart3, orion_uart3_data, orion_uart3_resources, membase, mapbase, irq, uartclk); }