Commit | Line | Data |
---|---|---|
9fcd66e5 MB |
1 | /* |
2 | * This file is subject to the terms and conditions of the GNU General Public | |
3 | * License. See the file "COPYING" in the main directory of this archive | |
4 | * for more details. | |
5 | * | |
6 | * Copyright (C) 2008 Maxime Bizon <mbizon@freebox.fr> | |
7 | */ | |
8 | ||
9 | #include <linux/init.h> | |
10 | #include <linux/kernel.h> | |
11 | #include <linux/platform_device.h> | |
12 | #include <bcm63xx_cpu.h> | |
9fcd66e5 | 13 | |
524ef29c | 14 | static struct resource uart0_resources[] = { |
9fcd66e5 | 15 | { |
524ef29c | 16 | /* start & end filled at runtime */ |
9fcd66e5 MB |
17 | .flags = IORESOURCE_MEM, |
18 | }, | |
19 | { | |
524ef29c | 20 | /* start filled at runtime */ |
9fcd66e5 MB |
21 | .flags = IORESOURCE_IRQ, |
22 | }, | |
23 | }; | |
24 | ||
524ef29c MB |
25 | static struct resource uart1_resources[] = { |
26 | { | |
27 | /* start & end filled at runtime */ | |
28 | .flags = IORESOURCE_MEM, | |
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 | } | |
9fcd66e5 MB |
50 | }; |
51 | ||
524ef29c | 52 | int __init bcm63xx_uart_register(unsigned int id) |
9fcd66e5 | 53 | { |
524ef29c MB |
54 | if (id >= ARRAY_SIZE(bcm63xx_uart_devices)) |
55 | return -ENODEV; | |
56 | ||
7b933421 FF |
57 | if (id == 1 && (!BCMCPU_IS_3368() && !BCMCPU_IS_6358() && |
58 | !BCMCPU_IS_6368())) | |
524ef29c MB |
59 | return -ENODEV; |
60 | ||
61 | if (id == 0) { | |
62 | uart0_resources[0].start = bcm63xx_regset_address(RSET_UART0); | |
63 | uart0_resources[0].end = uart0_resources[0].start + | |
64 | RSET_UART_SIZE - 1; | |
65 | uart0_resources[1].start = bcm63xx_get_irq_number(IRQ_UART0); | |
66 | } | |
67 | ||
68 | if (id == 1) { | |
69 | uart1_resources[0].start = bcm63xx_regset_address(RSET_UART1); | |
70 | uart1_resources[0].end = uart1_resources[0].start + | |
71 | RSET_UART_SIZE - 1; | |
72 | uart1_resources[1].start = bcm63xx_get_irq_number(IRQ_UART1); | |
73 | } | |
74 | ||
75 | return platform_device_register(&bcm63xx_uart_devices[id]); | |
9fcd66e5 | 76 | } |