diff options
author | Martin Michlmayr <tbm@cyrius.com> | 2009-11-05 15:27:46 -0500 |
---|---|---|
committer | Nicolas Pitre <nico@fluxnic.net> | 2009-11-13 12:14:24 -0500 |
commit | 8d27b2f7988b652dbabf79291a3e2550c06e1af5 (patch) | |
tree | 595ded246acfaf068b3426253bc09864a952e2b8 /arch/arm/mach-kirkwood/ts41x-setup.c | |
parent | 287989cac25ad71002153d55875584210adf78bd (diff) |
[ARM] Kirkwood: Remove code duplication in QNAP setup files
Remove the code duplication found in the setup files of TS-219 and
TS-41x.
Signed-off-by: Martin Michlmayr <tbm@cyrius.com>
Signed-off-by: Nicolas Pitre <nico@marvell.com>
Diffstat (limited to 'arch/arm/mach-kirkwood/ts41x-setup.c')
-rw-r--r-- | arch/arm/mach-kirkwood/ts41x-setup.c | 105 |
1 files changed, 3 insertions, 102 deletions
diff --git a/arch/arm/mach-kirkwood/ts41x-setup.c b/arch/arm/mach-kirkwood/ts41x-setup.c index a1972c948503..de49c2d9e74b 100644 --- a/arch/arm/mach-kirkwood/ts41x-setup.c +++ b/arch/arm/mach-kirkwood/ts41x-setup.c | |||
@@ -14,87 +14,17 @@ | |||
14 | #include <linux/kernel.h> | 14 | #include <linux/kernel.h> |
15 | #include <linux/init.h> | 15 | #include <linux/init.h> |
16 | #include <linux/platform_device.h> | 16 | #include <linux/platform_device.h> |
17 | #include <linux/mtd/physmap.h> | ||
18 | #include <linux/spi/flash.h> | ||
19 | #include <linux/spi/spi.h> | ||
20 | #include <linux/spi/orion_spi.h> | ||
21 | #include <linux/i2c.h> | 17 | #include <linux/i2c.h> |
22 | #include <linux/mv643xx_eth.h> | 18 | #include <linux/mv643xx_eth.h> |
23 | #include <linux/ata_platform.h> | 19 | #include <linux/ata_platform.h> |
24 | #include <linux/gpio_keys.h> | 20 | #include <linux/gpio_keys.h> |
25 | #include <linux/input.h> | 21 | #include <linux/input.h> |
26 | #include <linux/timex.h> | ||
27 | #include <linux/serial_reg.h> | ||
28 | #include <linux/pci.h> | ||
29 | #include <asm/mach-types.h> | 22 | #include <asm/mach-types.h> |
30 | #include <asm/mach/arch.h> | 23 | #include <asm/mach/arch.h> |
31 | #include <mach/kirkwood.h> | 24 | #include <mach/kirkwood.h> |
32 | #include "common.h" | 25 | #include "common.h" |
33 | #include "mpp.h" | 26 | #include "mpp.h" |
34 | 27 | #include "tsx1x-common.h" | |
35 | /**************************************************************************** | ||
36 | * 16 MiB NOR flash. The struct mtd_partition is not in the same order as the | ||
37 | * partitions on the device because we want to keep compatability with | ||
38 | * the QNAP firmware. | ||
39 | * Layout as used by QNAP: | ||
40 | * 0x00000000-0x00080000 : "U-Boot" | ||
41 | * 0x00200000-0x00400000 : "Kernel" | ||
42 | * 0x00400000-0x00d00000 : "RootFS" | ||
43 | * 0x00d00000-0x01000000 : "RootFS2" | ||
44 | * 0x00080000-0x000c0000 : "U-Boot Config" | ||
45 | * 0x000c0000-0x00200000 : "NAS Config" | ||
46 | * | ||
47 | * We'll use "RootFS1" instead of "RootFS" to stay compatible with the layout | ||
48 | * used by the QNAP TS-109/TS-209. | ||
49 | * | ||
50 | ***************************************************************************/ | ||
51 | |||
52 | static struct mtd_partition qnap_ts41x_partitions[] = { | ||
53 | { | ||
54 | .name = "U-Boot", | ||
55 | .size = 0x00080000, | ||
56 | .offset = 0, | ||
57 | .mask_flags = MTD_WRITEABLE, | ||
58 | }, { | ||
59 | .name = "Kernel", | ||
60 | .size = 0x00200000, | ||
61 | .offset = 0x00200000, | ||
62 | }, { | ||
63 | .name = "RootFS1", | ||
64 | .size = 0x00900000, | ||
65 | .offset = 0x00400000, | ||
66 | }, { | ||
67 | .name = "RootFS2", | ||
68 | .size = 0x00300000, | ||
69 | .offset = 0x00d00000, | ||
70 | }, { | ||
71 | .name = "U-Boot Config", | ||
72 | .size = 0x00040000, | ||
73 | .offset = 0x00080000, | ||
74 | }, { | ||
75 | .name = "NAS Config", | ||
76 | .size = 0x00140000, | ||
77 | .offset = 0x000c0000, | ||
78 | }, | ||
79 | }; | ||
80 | |||
81 | static const struct flash_platform_data qnap_ts41x_flash = { | ||
82 | .type = "m25p128", | ||
83 | .name = "spi_flash", | ||
84 | .parts = qnap_ts41x_partitions, | ||
85 | .nr_parts = ARRAY_SIZE(qnap_ts41x_partitions), | ||
86 | }; | ||
87 | |||
88 | static struct spi_board_info __initdata qnap_ts41x_spi_slave_info[] = { | ||
89 | { | ||
90 | .modalias = "m25p80", | ||
91 | .platform_data = &qnap_ts41x_flash, | ||
92 | .irq = -1, | ||
93 | .max_speed_hz = 20000000, | ||
94 | .bus_num = 0, | ||
95 | .chip_select = 0, | ||
96 | }, | ||
97 | }; | ||
98 | 28 | ||
99 | static struct i2c_board_info __initdata qnap_ts41x_i2c_rtc = { | 29 | static struct i2c_board_info __initdata qnap_ts41x_i2c_rtc = { |
100 | I2C_BOARD_INFO("s35390a", 0x30), | 30 | I2C_BOARD_INFO("s35390a", 0x30), |
@@ -180,33 +110,6 @@ static unsigned int qnap_ts41x_mpp_config[] __initdata = { | |||
180 | 0 | 110 | 0 |
181 | }; | 111 | }; |
182 | 112 | ||
183 | |||
184 | /***************************************************************************** | ||
185 | * QNAP TS-x19 specific power off method via UART1-attached PIC | ||
186 | ****************************************************************************/ | ||
187 | |||
188 | #define UART1_REG(x) (UART1_VIRT_BASE + ((UART_##x) << 2)) | ||
189 | |||
190 | void qnap_ts41x_power_off(void) | ||
191 | { | ||
192 | /* 19200 baud divisor */ | ||
193 | const unsigned divisor = ((kirkwood_tclk + (8 * 19200)) / (16 * 19200)); | ||
194 | |||
195 | pr_info("%s: triggering power-off...\n", __func__); | ||
196 | |||
197 | /* hijack UART1 and reset into sane state (19200,8n1) */ | ||
198 | writel(0x83, UART1_REG(LCR)); | ||
199 | writel(divisor & 0xff, UART1_REG(DLL)); | ||
200 | writel((divisor >> 8) & 0xff, UART1_REG(DLM)); | ||
201 | writel(0x03, UART1_REG(LCR)); | ||
202 | writel(0x00, UART1_REG(IER)); | ||
203 | writel(0x00, UART1_REG(FCR)); | ||
204 | writel(0x00, UART1_REG(MCR)); | ||
205 | |||
206 | /* send the power-off command 'A' to PIC */ | ||
207 | writel('A', UART1_REG(TX)); | ||
208 | } | ||
209 | |||
210 | static void __init qnap_ts41x_init(void) | 113 | static void __init qnap_ts41x_init(void) |
211 | { | 114 | { |
212 | /* | 115 | /* |
@@ -217,9 +120,7 @@ static void __init qnap_ts41x_init(void) | |||
217 | 120 | ||
218 | kirkwood_uart0_init(); | 121 | kirkwood_uart0_init(); |
219 | kirkwood_uart1_init(); /* A PIC controller is connected here. */ | 122 | kirkwood_uart1_init(); /* A PIC controller is connected here. */ |
220 | spi_register_board_info(qnap_ts41x_spi_slave_info, | 123 | qnap_tsx1x_register_flash(); |
221 | ARRAY_SIZE(qnap_ts41x_spi_slave_info)); | ||
222 | kirkwood_spi_init(); | ||
223 | kirkwood_i2c_init(); | 124 | kirkwood_i2c_init(); |
224 | i2c_register_board_info(0, &qnap_ts41x_i2c_rtc, 1); | 125 | i2c_register_board_info(0, &qnap_ts41x_i2c_rtc, 1); |
225 | kirkwood_ge00_init(&qnap_ts41x_ge00_data); | 126 | kirkwood_ge00_init(&qnap_ts41x_ge00_data); |
@@ -228,7 +129,7 @@ static void __init qnap_ts41x_init(void) | |||
228 | kirkwood_ehci_init(); | 129 | kirkwood_ehci_init(); |
229 | platform_device_register(&qnap_ts41x_button_device); | 130 | platform_device_register(&qnap_ts41x_button_device); |
230 | 131 | ||
231 | pm_power_off = qnap_ts41x_power_off; | 132 | pm_power_off = qnap_tsx1x_power_off; |
232 | 133 | ||
233 | } | 134 | } |
234 | 135 | ||