diff options
Diffstat (limited to 'arch/arm/mach-kirkwood/ts219-setup.c')
| -rw-r--r-- | arch/arm/mach-kirkwood/ts219-setup.c | 108 |
1 files changed, 5 insertions, 103 deletions
diff --git a/arch/arm/mach-kirkwood/ts219-setup.c b/arch/arm/mach-kirkwood/ts219-setup.c index ec1a64f263d2..2830f0fe80e0 100644 --- a/arch/arm/mach-kirkwood/ts219-setup.c +++ b/arch/arm/mach-kirkwood/ts219-setup.c | |||
| @@ -1,6 +1,6 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * | 2 | * |
| 3 | * QNAP TS-119/TS-219 Turbo NAS Board Setup | 3 | * QNAP TS-11x/TS-21x Turbo NAS Board Setup |
| 4 | * | 4 | * |
| 5 | * Copyright (C) 2009 Martin Michlmayr <tbm@cyrius.com> | 5 | * Copyright (C) 2009 Martin Michlmayr <tbm@cyrius.com> |
| 6 | * Copyright (C) 2008 Byron Bradley <byron.bbradley@gmail.com> | 6 | * Copyright (C) 2008 Byron Bradley <byron.bbradley@gmail.com> |
| @@ -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_ts219_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_ts219_flash = { | ||
| 82 | .type = "m25p128", | ||
| 83 | .name = "spi_flash", | ||
| 84 | .parts = qnap_ts219_partitions, | ||
| 85 | .nr_parts = ARRAY_SIZE(qnap_ts219_partitions), | ||
| 86 | }; | ||
| 87 | |||
| 88 | static struct spi_board_info __initdata qnap_ts219_spi_slave_info[] = { | ||
| 89 | { | ||
| 90 | .modalias = "m25p80", | ||
| 91 | .platform_data = &qnap_ts219_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_ts219_i2c_rtc = { | 29 | static struct i2c_board_info __initdata qnap_ts219_i2c_rtc = { |
| 100 | I2C_BOARD_INFO("s35390a", 0x30), | 30 | I2C_BOARD_INFO("s35390a", 0x30), |
| @@ -152,36 +82,10 @@ static unsigned int qnap_ts219_mpp_config[] __initdata = { | |||
| 152 | MPP14_UART1_RXD, /* PIC controller */ | 82 | MPP14_UART1_RXD, /* PIC controller */ |
| 153 | MPP15_GPIO, /* USB Copy button */ | 83 | MPP15_GPIO, /* USB Copy button */ |
| 154 | MPP16_GPIO, /* Reset button */ | 84 | MPP16_GPIO, /* Reset button */ |
| 85 | MPP36_GPIO, /* RAM: 0: 256 MB, 1: 512 MB */ | ||
| 155 | 0 | 86 | 0 |
| 156 | }; | 87 | }; |
| 157 | 88 | ||
| 158 | |||
| 159 | /***************************************************************************** | ||
| 160 | * QNAP TS-x19 specific power off method via UART1-attached PIC | ||
| 161 | ****************************************************************************/ | ||
| 162 | |||
| 163 | #define UART1_REG(x) (UART1_VIRT_BASE + ((UART_##x) << 2)) | ||
| 164 | |||
| 165 | void qnap_ts219_power_off(void) | ||
| 166 | { | ||
| 167 | /* 19200 baud divisor */ | ||
| 168 | const unsigned divisor = ((kirkwood_tclk + (8 * 19200)) / (16 * 19200)); | ||
| 169 | |||
| 170 | pr_info("%s: triggering power-off...\n", __func__); | ||
| 171 | |||
| 172 | /* hijack UART1 and reset into sane state (19200,8n1) */ | ||
| 173 | writel(0x83, UART1_REG(LCR)); | ||
| 174 | writel(divisor & 0xff, UART1_REG(DLL)); | ||
| 175 | writel((divisor >> 8) & 0xff, UART1_REG(DLM)); | ||
| 176 | writel(0x03, UART1_REG(LCR)); | ||
| 177 | writel(0x00, UART1_REG(IER)); | ||
| 178 | writel(0x00, UART1_REG(FCR)); | ||
| 179 | writel(0x00, UART1_REG(MCR)); | ||
| 180 | |||
| 181 | /* send the power-off command 'A' to PIC */ | ||
| 182 | writel('A', UART1_REG(TX)); | ||
| 183 | } | ||
| 184 | |||
| 185 | static void __init qnap_ts219_init(void) | 89 | static void __init qnap_ts219_init(void) |
| 186 | { | 90 | { |
| 187 | /* | 91 | /* |
| @@ -192,9 +96,7 @@ static void __init qnap_ts219_init(void) | |||
| 192 | 96 | ||
| 193 | kirkwood_uart0_init(); | 97 | kirkwood_uart0_init(); |
| 194 | kirkwood_uart1_init(); /* A PIC controller is connected here. */ | 98 | kirkwood_uart1_init(); /* A PIC controller is connected here. */ |
| 195 | spi_register_board_info(qnap_ts219_spi_slave_info, | 99 | qnap_tsx1x_register_flash(); |
| 196 | ARRAY_SIZE(qnap_ts219_spi_slave_info)); | ||
| 197 | kirkwood_spi_init(); | ||
| 198 | kirkwood_i2c_init(); | 100 | kirkwood_i2c_init(); |
| 199 | i2c_register_board_info(0, &qnap_ts219_i2c_rtc, 1); | 101 | i2c_register_board_info(0, &qnap_ts219_i2c_rtc, 1); |
| 200 | kirkwood_ge00_init(&qnap_ts219_ge00_data); | 102 | kirkwood_ge00_init(&qnap_ts219_ge00_data); |
| @@ -202,7 +104,7 @@ static void __init qnap_ts219_init(void) | |||
| 202 | kirkwood_ehci_init(); | 104 | kirkwood_ehci_init(); |
| 203 | platform_device_register(&qnap_ts219_button_device); | 105 | platform_device_register(&qnap_ts219_button_device); |
| 204 | 106 | ||
| 205 | pm_power_off = qnap_ts219_power_off; | 107 | pm_power_off = qnap_tsx1x_power_off; |
| 206 | 108 | ||
| 207 | } | 109 | } |
| 208 | 110 | ||
