diff options
Diffstat (limited to 'arch/mips/mti-malta/malta-platform.c')
-rw-r--r-- | arch/mips/mti-malta/malta-platform.c | 107 |
1 files changed, 95 insertions, 12 deletions
diff --git a/arch/mips/mti-malta/malta-platform.c b/arch/mips/mti-malta/malta-platform.c index 83b9bab3cd3f..72e32a7715be 100644 --- a/arch/mips/mti-malta/malta-platform.c +++ b/arch/mips/mti-malta/malta-platform.c | |||
@@ -3,10 +3,14 @@ | |||
3 | * License. See the file "COPYING" in the main directory of this archive | 3 | * License. See the file "COPYING" in the main directory of this archive |
4 | * for more details. | 4 | * for more details. |
5 | * | 5 | * |
6 | * Copyright (C) 2007 MIPS Technologies, Inc. | 6 | * Copyright (C) 2006, 07 MIPS Technologies, Inc. |
7 | * written by Ralf Baechle (ralf@linux-mips.org) | 7 | * written by Ralf Baechle (ralf@linux-mips.org) |
8 | * written by Ralf Baechle <ralf@linux-mips.org> | ||
8 | * | 9 | * |
9 | * Probe driver for the Malta's UART ports: | 10 | * Copyright (C) 2008 Wind River Systems, Inc. |
11 | * updated by Tiejun Chen <tiejun.chen@windriver.com> | ||
12 | * | ||
13 | * 1. Probe driver for the Malta's UART ports: | ||
10 | * | 14 | * |
11 | * o 2 ports in the SMC SuperIO | 15 | * o 2 ports in the SMC SuperIO |
12 | * o 1 port in the CBUS UART, a discrete 16550 which normally is only used | 16 | * o 1 port in the CBUS UART, a discrete 16550 which normally is only used |
@@ -14,10 +18,17 @@ | |||
14 | * | 18 | * |
15 | * We don't use 8250_platform.c on Malta as it would result in the CBUS | 19 | * We don't use 8250_platform.c on Malta as it would result in the CBUS |
16 | * UART becoming ttyS0. | 20 | * UART becoming ttyS0. |
21 | * | ||
22 | * 2. Register RTC-CMOS platform device on Malta. | ||
17 | */ | 23 | */ |
18 | #include <linux/module.h> | ||
19 | #include <linux/init.h> | 24 | #include <linux/init.h> |
20 | #include <linux/serial_8250.h> | 25 | #include <linux/serial_8250.h> |
26 | #include <linux/mc146818rtc.h> | ||
27 | #include <linux/module.h> | ||
28 | #include <linux/mtd/partitions.h> | ||
29 | #include <linux/mtd/physmap.h> | ||
30 | #include <linux/platform_device.h> | ||
31 | #include <mtd/mtd-abi.h> | ||
21 | 32 | ||
22 | #define SMC_PORT(base, int) \ | 33 | #define SMC_PORT(base, int) \ |
23 | { \ | 34 | { \ |
@@ -45,21 +56,93 @@ static struct plat_serial8250_port uart8250_data[] = { | |||
45 | { }, | 56 | { }, |
46 | }; | 57 | }; |
47 | 58 | ||
48 | static struct platform_device uart8250_device = { | 59 | static struct platform_device malta_uart8250_device = { |
49 | .name = "serial8250", | 60 | .name = "serial8250", |
50 | .id = PLAT8250_DEV_PLATFORM2, | 61 | .id = PLAT8250_DEV_PLATFORM, |
51 | .dev = { | 62 | .dev = { |
52 | .platform_data = uart8250_data, | 63 | .platform_data = uart8250_data, |
53 | }, | 64 | }, |
54 | }; | 65 | }; |
55 | 66 | ||
56 | static int __init uart8250_init(void) | 67 | struct resource malta_rtc_resources[] = { |
68 | { | ||
69 | .start = RTC_PORT(0), | ||
70 | .end = RTC_PORT(7), | ||
71 | .flags = IORESOURCE_IO, | ||
72 | }, { | ||
73 | .start = RTC_IRQ, | ||
74 | .end = RTC_IRQ, | ||
75 | .flags = IORESOURCE_IRQ, | ||
76 | } | ||
77 | }; | ||
78 | |||
79 | static struct platform_device malta_rtc_device = { | ||
80 | .name = "rtc_cmos", | ||
81 | .id = -1, | ||
82 | .resource = malta_rtc_resources, | ||
83 | .num_resources = ARRAY_SIZE(malta_rtc_resources), | ||
84 | }; | ||
85 | |||
86 | static struct mtd_partition malta_mtd_partitions[] = { | ||
87 | { | ||
88 | .name = "YAMON", | ||
89 | .offset = 0x0, | ||
90 | .size = 0x100000, | ||
91 | .mask_flags = MTD_WRITEABLE | ||
92 | }, { | ||
93 | .name = "User FS", | ||
94 | .offset = 0x100000, | ||
95 | .size = 0x2e0000 | ||
96 | }, { | ||
97 | .name = "Board Config", | ||
98 | .offset = 0x3e0000, | ||
99 | .size = 0x020000, | ||
100 | .mask_flags = MTD_WRITEABLE | ||
101 | } | ||
102 | }; | ||
103 | |||
104 | static struct physmap_flash_data malta_flash_data = { | ||
105 | .width = 4, | ||
106 | .nr_parts = ARRAY_SIZE(malta_mtd_partitions), | ||
107 | .parts = malta_mtd_partitions | ||
108 | }; | ||
109 | |||
110 | static struct resource malta_flash_resource = { | ||
111 | .start = 0x1e000000, | ||
112 | .end = 0x1e3fffff, | ||
113 | .flags = IORESOURCE_MEM | ||
114 | }; | ||
115 | |||
116 | static struct platform_device malta_flash_device = { | ||
117 | .name = "physmap-flash", | ||
118 | .id = 0, | ||
119 | .dev = { | ||
120 | .platform_data = &malta_flash_data, | ||
121 | }, | ||
122 | .num_resources = 1, | ||
123 | .resource = &malta_flash_resource, | ||
124 | }; | ||
125 | |||
126 | static struct platform_device *malta_devices[] __initdata = { | ||
127 | &malta_uart8250_device, | ||
128 | &malta_rtc_device, | ||
129 | &malta_flash_device, | ||
130 | }; | ||
131 | |||
132 | static int __init malta_add_devices(void) | ||
57 | { | 133 | { |
58 | return platform_device_register(&uart8250_device); | 134 | int err; |
59 | } | ||
60 | 135 | ||
61 | module_init(uart8250_init); | 136 | err = platform_add_devices(malta_devices, ARRAY_SIZE(malta_devices)); |
137 | if (err) | ||
138 | return err; | ||
139 | |||
140 | /* | ||
141 | * Set RTC to BCD mode to support current alarm code. | ||
142 | */ | ||
143 | CMOS_WRITE(CMOS_READ(RTC_CONTROL) & ~RTC_DM_BINARY, RTC_CONTROL); | ||
144 | |||
145 | return 0; | ||
146 | } | ||
62 | 147 | ||
63 | MODULE_AUTHOR("Ralf Baechle <ralf@linux-mips.org>"); | 148 | device_initcall(malta_add_devices); |
64 | MODULE_LICENSE("GPL"); | ||
65 | MODULE_DESCRIPTION("8250 UART probe driver for the Malta CBUS UART"); | ||