diff options
Diffstat (limited to 'arch/mips/bcm63xx/dev-uart.c')
| -rw-r--r-- | arch/mips/bcm63xx/dev-uart.c | 66 |
1 files changed, 50 insertions, 16 deletions
diff --git a/arch/mips/bcm63xx/dev-uart.c b/arch/mips/bcm63xx/dev-uart.c index b0519461ad9b..c2963da0253e 100644 --- a/arch/mips/bcm63xx/dev-uart.c +++ b/arch/mips/bcm63xx/dev-uart.c | |||
| @@ -11,31 +11,65 @@ | |||
| 11 | #include <linux/platform_device.h> | 11 | #include <linux/platform_device.h> |
| 12 | #include <bcm63xx_cpu.h> | 12 | #include <bcm63xx_cpu.h> |
| 13 | 13 | ||
| 14 | static struct resource uart_resources[] = { | 14 | static struct resource uart0_resources[] = { |
| 15 | { | 15 | { |
| 16 | .start = -1, /* filled at runtime */ | 16 | /* start & end filled at runtime */ |
| 17 | .end = -1, /* filled at runtime */ | ||
| 18 | .flags = IORESOURCE_MEM, | 17 | .flags = IORESOURCE_MEM, |
| 19 | }, | 18 | }, |
| 20 | { | 19 | { |
| 21 | .start = -1, /* filled at runtime */ | 20 | /* start filled at runtime */ |
| 22 | .flags = IORESOURCE_IRQ, | 21 | .flags = IORESOURCE_IRQ, |
| 23 | }, | 22 | }, |
| 24 | }; | 23 | }; |
| 25 | 24 | ||
| 26 | static struct platform_device bcm63xx_uart_device = { | 25 | static struct resource uart1_resources[] = { |
| 27 | .name = "bcm63xx_uart", | 26 | { |
| 28 | .id = 0, | 27 | /* start & end filled at runtime */ |
| 29 | .num_resources = ARRAY_SIZE(uart_resources), | 28 | .flags = IORESOURCE_MEM, |
| 30 | .resource = uart_resources, | 29 | }, |
| 30 | { | ||
| 31 | /* start filled at runtime */ | ||
| 32 | .flags = IORESOURCE_IRQ, | ||
| 33 | }, | ||
| 34 | }; | ||
| 35 | |||
| 36 | static struct platform_device bcm63xx_uart_devices[] = { | ||
| 37 | { | ||
| 38 | .name = "bcm63xx_uart", | ||
| 39 | .id = 0, | ||
| 40 | .num_resources = ARRAY_SIZE(uart0_resources), | ||
| 41 | .resource = uart0_resources, | ||
| 42 | }, | ||
| 43 | |||
| 44 | { | ||
| 45 | .name = "bcm63xx_uart", | ||
| 46 | .id = 1, | ||
| 47 | .num_resources = ARRAY_SIZE(uart1_resources), | ||
| 48 | .resource = uart1_resources, | ||
| 49 | } | ||
| 31 | }; | 50 | }; |
| 32 | 51 | ||
| 33 | int __init bcm63xx_uart_register(void) | 52 | int __init bcm63xx_uart_register(unsigned int id) |
| 34 | { | 53 | { |
| 35 | uart_resources[0].start = bcm63xx_regset_address(RSET_UART0); | 54 | if (id >= ARRAY_SIZE(bcm63xx_uart_devices)) |
| 36 | uart_resources[0].end = uart_resources[0].start; | 55 | return -ENODEV; |
| 37 | uart_resources[0].end += RSET_UART_SIZE - 1; | 56 | |
| 38 | uart_resources[1].start = bcm63xx_get_irq_number(IRQ_UART0); | 57 | if (id == 1 && !BCMCPU_IS_6358()) |
| 39 | return platform_device_register(&bcm63xx_uart_device); | 58 | return -ENODEV; |
| 59 | |||
| 60 | if (id == 0) { | ||
| 61 | uart0_resources[0].start = bcm63xx_regset_address(RSET_UART0); | ||
| 62 | uart0_resources[0].end = uart0_resources[0].start + | ||
| 63 | RSET_UART_SIZE - 1; | ||
| 64 | uart0_resources[1].start = bcm63xx_get_irq_number(IRQ_UART0); | ||
| 65 | } | ||
| 66 | |||
| 67 | if (id == 1) { | ||
| 68 | uart1_resources[0].start = bcm63xx_regset_address(RSET_UART1); | ||
| 69 | uart1_resources[0].end = uart1_resources[0].start + | ||
| 70 | RSET_UART_SIZE - 1; | ||
| 71 | uart1_resources[1].start = bcm63xx_get_irq_number(IRQ_UART1); | ||
| 72 | } | ||
| 73 | |||
| 74 | return platform_device_register(&bcm63xx_uart_devices[id]); | ||
| 40 | } | 75 | } |
| 41 | arch_initcall(bcm63xx_uart_register); | ||
