diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2010-04-12 21:36:11 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-04-12 21:36:11 -0400 |
commit | 4505a4938917f4872efcc90bc1e5f4f0ce903b47 (patch) | |
tree | e049aed70101694b599ae53e6f56bff66d37f8a7 /arch/mips/bcm63xx/dev-uart.c | |
parent | fedfb947b2235c1085df97cf52f688b808c3a515 (diff) | |
parent | f6be75d03c8870be91e6e2a195648ece04b6bb16 (diff) |
Merge branch 'upstream' of git://ftp.linux-mips.org/pub/scm/upstream-linus
* 'upstream' of git://ftp.linux-mips.org/pub/scm/upstream-linus: (36 commits)
MIPS: Calculate proper ebase value for 64-bit kernels
MIPS: Alchemy: DB1200: Remove custom wait implementation
MIPS: Big Sur: Make defconfig more useful.
MIPS: Fix __vmalloc() etc. on MIPS for non-GPL modules
MIPS: Sibyte: Fix M3 TLB exception handler workaround.
MIPS: BCM63xx: Fix build failure in board_bcm963xx.c
MIPS: uasm: Add OR instruction.
MIPS: Sibyte: Apply M3 workaround only on affected chip types and versions.
MIPS: BCM63xx: Initialize gpio_out_low & out_high to current value at boot.
MIPS: BCM63xx: Register SSB SPROM fallback in board's first stage callback
MIPS: BCM63xx: Fix typo in cpu-feature-overrides file.
MIPS: BCM63xx: Add support for second uart.
MIPS: BCM63xx: Fix double gpio registration.
MIPS: BCM63xx: Add DWVS0 board
MIPS: BCM63xx: Add the RTA1025W-16 BCM6348-based board to suppported boards.
MIPS: BCM63xx: Fix BCM6338 and BCM6345 gpio count
MIPS: libgcc.h: Checkpatch cleanup
MIPS: Loongson-2F: Flush the branch target history in BTB and RAS
MIPS: Move signal trampolines off of the stack.
MIPS: Preliminary VDSO
...
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); | ||