aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-kirkwood/ts41x-setup.c
diff options
context:
space:
mode:
authorMartin Michlmayr <tbm@cyrius.com>2009-11-05 15:27:46 -0500
committerNicolas Pitre <nico@fluxnic.net>2009-11-13 12:14:24 -0500
commit8d27b2f7988b652dbabf79291a3e2550c06e1af5 (patch)
tree595ded246acfaf068b3426253bc09864a952e2b8 /arch/arm/mach-kirkwood/ts41x-setup.c
parent287989cac25ad71002153d55875584210adf78bd (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.c105
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
52static 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
81static 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
88static 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
99static struct i2c_board_info __initdata qnap_ts41x_i2c_rtc = { 29static 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
190void 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
210static void __init qnap_ts41x_init(void) 113static 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