diff options
Diffstat (limited to 'arch/arm/mach-orion5x')
-rw-r--r-- | arch/arm/mach-orion5x/common.c | 115 | ||||
-rw-r--r-- | arch/arm/mach-orion5x/common.h | 1 | ||||
-rw-r--r-- | arch/arm/mach-orion5x/db88f5281-setup.c | 2 | ||||
-rw-r--r-- | arch/arm/mach-orion5x/include/mach/orion5x.h | 5 | ||||
-rw-r--r-- | arch/arm/mach-orion5x/irq.c | 2 | ||||
-rw-r--r-- | arch/arm/mach-orion5x/kurobox_pro-setup.c | 3 | ||||
-rw-r--r-- | arch/arm/mach-orion5x/mss2-setup.c | 1 | ||||
-rw-r--r-- | arch/arm/mach-orion5x/mv2120-setup.c | 1 | ||||
-rw-r--r-- | arch/arm/mach-orion5x/pci.c | 2 | ||||
-rw-r--r-- | arch/arm/mach-orion5x/rd88f5182-setup.c | 1 | ||||
-rw-r--r-- | arch/arm/mach-orion5x/ts209-setup.c | 5 | ||||
-rw-r--r-- | arch/arm/mach-orion5x/ts409-setup.c | 48 | ||||
-rw-r--r-- | arch/arm/mach-orion5x/ts78xx-setup.c | 1 |
13 files changed, 178 insertions, 9 deletions
diff --git a/arch/arm/mach-orion5x/common.c b/arch/arm/mach-orion5x/common.c index 168eeacaa4c0..7b11e552bc5a 100644 --- a/arch/arm/mach-orion5x/common.c +++ b/arch/arm/mach-orion5x/common.c | |||
@@ -26,9 +26,10 @@ | |||
26 | #include <asm/mach/time.h> | 26 | #include <asm/mach/time.h> |
27 | #include <mach/hardware.h> | 27 | #include <mach/hardware.h> |
28 | #include <mach/orion5x.h> | 28 | #include <mach/orion5x.h> |
29 | #include <asm/plat-orion/ehci-orion.h> | 29 | #include <plat/ehci-orion.h> |
30 | #include <asm/plat-orion/orion_nand.h> | 30 | #include <plat/mv_xor.h> |
31 | #include <asm/plat-orion/time.h> | 31 | #include <plat/orion_nand.h> |
32 | #include <plat/time.h> | ||
32 | #include "common.h" | 33 | #include "common.h" |
33 | 34 | ||
34 | /***************************************************************************** | 35 | /***************************************************************************** |
@@ -355,6 +356,103 @@ void __init orion5x_uart1_init(void) | |||
355 | 356 | ||
356 | 357 | ||
357 | /***************************************************************************** | 358 | /***************************************************************************** |
359 | * XOR engine | ||
360 | ****************************************************************************/ | ||
361 | static struct resource orion5x_xor_shared_resources[] = { | ||
362 | { | ||
363 | .name = "xor low", | ||
364 | .start = ORION5X_XOR_PHYS_BASE, | ||
365 | .end = ORION5X_XOR_PHYS_BASE + 0xff, | ||
366 | .flags = IORESOURCE_MEM, | ||
367 | }, { | ||
368 | .name = "xor high", | ||
369 | .start = ORION5X_XOR_PHYS_BASE + 0x200, | ||
370 | .end = ORION5X_XOR_PHYS_BASE + 0x2ff, | ||
371 | .flags = IORESOURCE_MEM, | ||
372 | }, | ||
373 | }; | ||
374 | |||
375 | static struct platform_device orion5x_xor_shared = { | ||
376 | .name = MV_XOR_SHARED_NAME, | ||
377 | .id = 0, | ||
378 | .num_resources = ARRAY_SIZE(orion5x_xor_shared_resources), | ||
379 | .resource = orion5x_xor_shared_resources, | ||
380 | }; | ||
381 | |||
382 | static u64 orion5x_xor_dmamask = DMA_32BIT_MASK; | ||
383 | |||
384 | static struct resource orion5x_xor0_resources[] = { | ||
385 | [0] = { | ||
386 | .start = IRQ_ORION5X_XOR0, | ||
387 | .end = IRQ_ORION5X_XOR0, | ||
388 | .flags = IORESOURCE_IRQ, | ||
389 | }, | ||
390 | }; | ||
391 | |||
392 | static struct mv_xor_platform_data orion5x_xor0_data = { | ||
393 | .shared = &orion5x_xor_shared, | ||
394 | .hw_id = 0, | ||
395 | .pool_size = PAGE_SIZE, | ||
396 | }; | ||
397 | |||
398 | static struct platform_device orion5x_xor0_channel = { | ||
399 | .name = MV_XOR_NAME, | ||
400 | .id = 0, | ||
401 | .num_resources = ARRAY_SIZE(orion5x_xor0_resources), | ||
402 | .resource = orion5x_xor0_resources, | ||
403 | .dev = { | ||
404 | .dma_mask = &orion5x_xor_dmamask, | ||
405 | .coherent_dma_mask = DMA_64BIT_MASK, | ||
406 | .platform_data = (void *)&orion5x_xor0_data, | ||
407 | }, | ||
408 | }; | ||
409 | |||
410 | static struct resource orion5x_xor1_resources[] = { | ||
411 | [0] = { | ||
412 | .start = IRQ_ORION5X_XOR1, | ||
413 | .end = IRQ_ORION5X_XOR1, | ||
414 | .flags = IORESOURCE_IRQ, | ||
415 | }, | ||
416 | }; | ||
417 | |||
418 | static struct mv_xor_platform_data orion5x_xor1_data = { | ||
419 | .shared = &orion5x_xor_shared, | ||
420 | .hw_id = 1, | ||
421 | .pool_size = PAGE_SIZE, | ||
422 | }; | ||
423 | |||
424 | static struct platform_device orion5x_xor1_channel = { | ||
425 | .name = MV_XOR_NAME, | ||
426 | .id = 1, | ||
427 | .num_resources = ARRAY_SIZE(orion5x_xor1_resources), | ||
428 | .resource = orion5x_xor1_resources, | ||
429 | .dev = { | ||
430 | .dma_mask = &orion5x_xor_dmamask, | ||
431 | .coherent_dma_mask = DMA_64BIT_MASK, | ||
432 | .platform_data = (void *)&orion5x_xor1_data, | ||
433 | }, | ||
434 | }; | ||
435 | |||
436 | void __init orion5x_xor_init(void) | ||
437 | { | ||
438 | platform_device_register(&orion5x_xor_shared); | ||
439 | |||
440 | /* | ||
441 | * two engines can't do memset simultaneously, this limitation | ||
442 | * satisfied by removing memset support from one of the engines. | ||
443 | */ | ||
444 | dma_cap_set(DMA_MEMCPY, orion5x_xor0_data.cap_mask); | ||
445 | dma_cap_set(DMA_XOR, orion5x_xor0_data.cap_mask); | ||
446 | platform_device_register(&orion5x_xor0_channel); | ||
447 | |||
448 | dma_cap_set(DMA_MEMCPY, orion5x_xor1_data.cap_mask); | ||
449 | dma_cap_set(DMA_MEMSET, orion5x_xor1_data.cap_mask); | ||
450 | dma_cap_set(DMA_XOR, orion5x_xor1_data.cap_mask); | ||
451 | platform_device_register(&orion5x_xor1_channel); | ||
452 | } | ||
453 | |||
454 | |||
455 | /***************************************************************************** | ||
358 | * Time handling | 456 | * Time handling |
359 | ****************************************************************************/ | 457 | ****************************************************************************/ |
360 | static void orion5x_timer_init(void) | 458 | static void orion5x_timer_init(void) |
@@ -382,6 +480,8 @@ static void __init orion5x_id(u32 *dev, u32 *rev, char **dev_name) | |||
382 | *dev_name = "MV88F5281-D2"; | 480 | *dev_name = "MV88F5281-D2"; |
383 | } else if (*rev == MV88F5281_REV_D1) { | 481 | } else if (*rev == MV88F5281_REV_D1) { |
384 | *dev_name = "MV88F5281-D1"; | 482 | *dev_name = "MV88F5281-D1"; |
483 | } else if (*rev == MV88F5281_REV_D0) { | ||
484 | *dev_name = "MV88F5281-D0"; | ||
385 | } else { | 485 | } else { |
386 | *dev_name = "MV88F5281-Rev-Unsupported"; | 486 | *dev_name = "MV88F5281-Rev-Unsupported"; |
387 | } | 487 | } |
@@ -416,6 +516,15 @@ void __init orion5x_init(void) | |||
416 | * Setup Orion address map | 516 | * Setup Orion address map |
417 | */ | 517 | */ |
418 | orion5x_setup_cpu_mbus_bridge(); | 518 | orion5x_setup_cpu_mbus_bridge(); |
519 | |||
520 | /* | ||
521 | * Don't issue "Wait for Interrupt" instruction if we are | ||
522 | * running on D0 5281 silicon. | ||
523 | */ | ||
524 | if (dev == MV88F5281_DEV_ID && rev == MV88F5281_REV_D0) { | ||
525 | printk(KERN_INFO "Orion: Applying 5281 D0 WFI workaround.\n"); | ||
526 | disable_hlt(); | ||
527 | } | ||
419 | } | 528 | } |
420 | 529 | ||
421 | /* | 530 | /* |
diff --git a/arch/arm/mach-orion5x/common.h b/arch/arm/mach-orion5x/common.h index f72cf0e77544..e75bd7004b94 100644 --- a/arch/arm/mach-orion5x/common.h +++ b/arch/arm/mach-orion5x/common.h | |||
@@ -32,6 +32,7 @@ void orion5x_i2c_init(void); | |||
32 | void orion5x_sata_init(struct mv_sata_platform_data *sata_data); | 32 | void orion5x_sata_init(struct mv_sata_platform_data *sata_data); |
33 | void orion5x_uart0_init(void); | 33 | void orion5x_uart0_init(void); |
34 | void orion5x_uart1_init(void); | 34 | void orion5x_uart1_init(void); |
35 | void orion5x_xor_init(void); | ||
35 | 36 | ||
36 | /* | 37 | /* |
37 | * PCIe/PCI functions. | 38 | * PCIe/PCI functions. |
diff --git a/arch/arm/mach-orion5x/db88f5281-setup.c b/arch/arm/mach-orion5x/db88f5281-setup.c index 48ce6d0e0020..ff13e9060b18 100644 --- a/arch/arm/mach-orion5x/db88f5281-setup.c +++ b/arch/arm/mach-orion5x/db88f5281-setup.c | |||
@@ -25,7 +25,7 @@ | |||
25 | #include <asm/mach/arch.h> | 25 | #include <asm/mach/arch.h> |
26 | #include <asm/mach/pci.h> | 26 | #include <asm/mach/pci.h> |
27 | #include <mach/orion5x.h> | 27 | #include <mach/orion5x.h> |
28 | #include <asm/plat-orion/orion_nand.h> | 28 | #include <plat/orion_nand.h> |
29 | #include "common.h" | 29 | #include "common.h" |
30 | #include "mpp.h" | 30 | #include "mpp.h" |
31 | 31 | ||
diff --git a/arch/arm/mach-orion5x/include/mach/orion5x.h b/arch/arm/mach-orion5x/include/mach/orion5x.h index f52a7d65bec2..61eb74a88862 100644 --- a/arch/arm/mach-orion5x/include/mach/orion5x.h +++ b/arch/arm/mach-orion5x/include/mach/orion5x.h | |||
@@ -73,6 +73,7 @@ | |||
73 | #define MV88F5182_REV_A2 2 | 73 | #define MV88F5182_REV_A2 2 |
74 | /* Orion-2 (88F5281) */ | 74 | /* Orion-2 (88F5281) */ |
75 | #define MV88F5281_DEV_ID 0x5281 | 75 | #define MV88F5281_DEV_ID 0x5281 |
76 | #define MV88F5281_REV_D0 4 | ||
76 | #define MV88F5281_REV_D1 5 | 77 | #define MV88F5281_REV_D1 5 |
77 | #define MV88F5281_REV_D2 6 | 78 | #define MV88F5281_REV_D2 6 |
78 | 79 | ||
@@ -105,6 +106,10 @@ | |||
105 | #define ORION5X_USB0_VIRT_BASE (ORION5X_REGS_VIRT_BASE | 0x50000) | 106 | #define ORION5X_USB0_VIRT_BASE (ORION5X_REGS_VIRT_BASE | 0x50000) |
106 | #define ORION5X_USB0_REG(x) (ORION5X_USB0_VIRT_BASE | (x)) | 107 | #define ORION5X_USB0_REG(x) (ORION5X_USB0_VIRT_BASE | (x)) |
107 | 108 | ||
109 | #define ORION5X_XOR_PHYS_BASE (ORION5X_REGS_PHYS_BASE | 0x60900) | ||
110 | #define ORION5X_XOR_VIRT_BASE (ORION5X_REGS_VIRT_BASE | 0x60900) | ||
111 | #define ORION5X_XOR_REG(x) (ORION5X_XOR_VIRT_BASE | (x)) | ||
112 | |||
108 | #define ORION5X_ETH_PHYS_BASE (ORION5X_REGS_PHYS_BASE | 0x70000) | 113 | #define ORION5X_ETH_PHYS_BASE (ORION5X_REGS_PHYS_BASE | 0x70000) |
109 | #define ORION5X_ETH_VIRT_BASE (ORION5X_REGS_VIRT_BASE | 0x70000) | 114 | #define ORION5X_ETH_VIRT_BASE (ORION5X_REGS_VIRT_BASE | 0x70000) |
110 | #define ORION5X_ETH_REG(x) (ORION5X_ETH_VIRT_BASE | (x)) | 115 | #define ORION5X_ETH_REG(x) (ORION5X_ETH_VIRT_BASE | (x)) |
diff --git a/arch/arm/mach-orion5x/irq.c b/arch/arm/mach-orion5x/irq.c index cc2a017fd2a9..2545ff9e5830 100644 --- a/arch/arm/mach-orion5x/irq.c +++ b/arch/arm/mach-orion5x/irq.c | |||
@@ -16,7 +16,7 @@ | |||
16 | #include <asm/gpio.h> | 16 | #include <asm/gpio.h> |
17 | #include <asm/io.h> | 17 | #include <asm/io.h> |
18 | #include <mach/orion5x.h> | 18 | #include <mach/orion5x.h> |
19 | #include <asm/plat-orion/irq.h> | 19 | #include <plat/irq.h> |
20 | #include "common.h" | 20 | #include "common.h" |
21 | 21 | ||
22 | /***************************************************************************** | 22 | /***************************************************************************** |
diff --git a/arch/arm/mach-orion5x/kurobox_pro-setup.c b/arch/arm/mach-orion5x/kurobox_pro-setup.c index 0caaaac74bc1..cb72f1bb9cb7 100644 --- a/arch/arm/mach-orion5x/kurobox_pro-setup.c +++ b/arch/arm/mach-orion5x/kurobox_pro-setup.c | |||
@@ -25,7 +25,7 @@ | |||
25 | #include <asm/mach/arch.h> | 25 | #include <asm/mach/arch.h> |
26 | #include <asm/mach/pci.h> | 26 | #include <asm/mach/pci.h> |
27 | #include <mach/orion5x.h> | 27 | #include <mach/orion5x.h> |
28 | #include <asm/plat-orion/orion_nand.h> | 28 | #include <plat/orion_nand.h> |
29 | #include "common.h" | 29 | #include "common.h" |
30 | #include "mpp.h" | 30 | #include "mpp.h" |
31 | 31 | ||
@@ -356,6 +356,7 @@ static void __init kurobox_pro_init(void) | |||
356 | orion5x_sata_init(&kurobox_pro_sata_data); | 356 | orion5x_sata_init(&kurobox_pro_sata_data); |
357 | orion5x_uart0_init(); | 357 | orion5x_uart0_init(); |
358 | orion5x_uart1_init(); | 358 | orion5x_uart1_init(); |
359 | orion5x_xor_init(); | ||
359 | 360 | ||
360 | orion5x_setup_dev_boot_win(KUROBOX_PRO_NOR_BOOT_BASE, | 361 | orion5x_setup_dev_boot_win(KUROBOX_PRO_NOR_BOOT_BASE, |
361 | KUROBOX_PRO_NOR_BOOT_SIZE); | 362 | KUROBOX_PRO_NOR_BOOT_SIZE); |
diff --git a/arch/arm/mach-orion5x/mss2-setup.c b/arch/arm/mach-orion5x/mss2-setup.c index 4403cc963d66..53ff1893b883 100644 --- a/arch/arm/mach-orion5x/mss2-setup.c +++ b/arch/arm/mach-orion5x/mss2-setup.c | |||
@@ -239,6 +239,7 @@ static void __init mss2_init(void) | |||
239 | orion5x_i2c_init(); | 239 | orion5x_i2c_init(); |
240 | orion5x_sata_init(&mss2_sata_data); | 240 | orion5x_sata_init(&mss2_sata_data); |
241 | orion5x_uart0_init(); | 241 | orion5x_uart0_init(); |
242 | orion5x_xor_init(); | ||
242 | 243 | ||
243 | orion5x_setup_dev_boot_win(MSS2_NOR_BOOT_BASE, MSS2_NOR_BOOT_SIZE); | 244 | orion5x_setup_dev_boot_win(MSS2_NOR_BOOT_BASE, MSS2_NOR_BOOT_SIZE); |
244 | platform_device_register(&mss2_nor_flash); | 245 | platform_device_register(&mss2_nor_flash); |
diff --git a/arch/arm/mach-orion5x/mv2120-setup.c b/arch/arm/mach-orion5x/mv2120-setup.c index 67b2c0df615f..978d4d599396 100644 --- a/arch/arm/mach-orion5x/mv2120-setup.c +++ b/arch/arm/mach-orion5x/mv2120-setup.c | |||
@@ -203,6 +203,7 @@ static void __init mv2120_init(void) | |||
203 | orion5x_i2c_init(); | 203 | orion5x_i2c_init(); |
204 | orion5x_sata_init(&mv2120_sata_data); | 204 | orion5x_sata_init(&mv2120_sata_data); |
205 | orion5x_uart0_init(); | 205 | orion5x_uart0_init(); |
206 | orion5x_xor_init(); | ||
206 | 207 | ||
207 | orion5x_setup_dev_boot_win(MV2120_NOR_BOOT_BASE, MV2120_NOR_BOOT_SIZE); | 208 | orion5x_setup_dev_boot_win(MV2120_NOR_BOOT_BASE, MV2120_NOR_BOOT_SIZE); |
208 | platform_device_register(&mv2120_nor_flash); | 209 | platform_device_register(&mv2120_nor_flash); |
diff --git a/arch/arm/mach-orion5x/pci.c b/arch/arm/mach-orion5x/pci.c index 256a4f680935..fbceecc4b7ec 100644 --- a/arch/arm/mach-orion5x/pci.c +++ b/arch/arm/mach-orion5x/pci.c | |||
@@ -14,7 +14,7 @@ | |||
14 | #include <linux/pci.h> | 14 | #include <linux/pci.h> |
15 | #include <linux/mbus.h> | 15 | #include <linux/mbus.h> |
16 | #include <asm/mach/pci.h> | 16 | #include <asm/mach/pci.h> |
17 | #include <asm/plat-orion/pcie.h> | 17 | #include <plat/pcie.h> |
18 | #include "common.h" | 18 | #include "common.h" |
19 | 19 | ||
20 | /***************************************************************************** | 20 | /***************************************************************************** |
diff --git a/arch/arm/mach-orion5x/rd88f5182-setup.c b/arch/arm/mach-orion5x/rd88f5182-setup.c index 8771cb76f0dc..4c3bcd76ac85 100644 --- a/arch/arm/mach-orion5x/rd88f5182-setup.c +++ b/arch/arm/mach-orion5x/rd88f5182-setup.c | |||
@@ -292,6 +292,7 @@ static void __init rd88f5182_init(void) | |||
292 | orion5x_i2c_init(); | 292 | orion5x_i2c_init(); |
293 | orion5x_sata_init(&rd88f5182_sata_data); | 293 | orion5x_sata_init(&rd88f5182_sata_data); |
294 | orion5x_uart0_init(); | 294 | orion5x_uart0_init(); |
295 | orion5x_xor_init(); | ||
295 | 296 | ||
296 | orion5x_setup_dev_boot_win(RD88F5182_NOR_BOOT_BASE, | 297 | orion5x_setup_dev_boot_win(RD88F5182_NOR_BOOT_BASE, |
297 | RD88F5182_NOR_BOOT_SIZE); | 298 | RD88F5182_NOR_BOOT_SIZE); |
diff --git a/arch/arm/mach-orion5x/ts209-setup.c b/arch/arm/mach-orion5x/ts209-setup.c index 809132de31d2..dd657163cd8d 100644 --- a/arch/arm/mach-orion5x/ts209-setup.c +++ b/arch/arm/mach-orion5x/ts209-setup.c | |||
@@ -207,12 +207,12 @@ static struct i2c_board_info __initdata qnap_ts209_i2c_rtc = { | |||
207 | 207 | ||
208 | static struct gpio_keys_button qnap_ts209_buttons[] = { | 208 | static struct gpio_keys_button qnap_ts209_buttons[] = { |
209 | { | 209 | { |
210 | .code = KEY_RESTART, | 210 | .code = KEY_COPY, |
211 | .gpio = QNAP_TS209_GPIO_KEY_MEDIA, | 211 | .gpio = QNAP_TS209_GPIO_KEY_MEDIA, |
212 | .desc = "USB Copy Button", | 212 | .desc = "USB Copy Button", |
213 | .active_low = 1, | 213 | .active_low = 1, |
214 | }, { | 214 | }, { |
215 | .code = KEY_POWER, | 215 | .code = KEY_RESTART, |
216 | .gpio = QNAP_TS209_GPIO_KEY_RESET, | 216 | .gpio = QNAP_TS209_GPIO_KEY_RESET, |
217 | .desc = "Reset Button", | 217 | .desc = "Reset Button", |
218 | .active_low = 1, | 218 | .active_low = 1, |
@@ -296,6 +296,7 @@ static void __init qnap_ts209_init(void) | |||
296 | orion5x_i2c_init(); | 296 | orion5x_i2c_init(); |
297 | orion5x_sata_init(&qnap_ts209_sata_data); | 297 | orion5x_sata_init(&qnap_ts209_sata_data); |
298 | orion5x_uart0_init(); | 298 | orion5x_uart0_init(); |
299 | orion5x_xor_init(); | ||
299 | 300 | ||
300 | orion5x_setup_dev_boot_win(QNAP_TS209_NOR_BOOT_BASE, | 301 | orion5x_setup_dev_boot_win(QNAP_TS209_NOR_BOOT_BASE, |
301 | QNAP_TS209_NOR_BOOT_SIZE); | 302 | QNAP_TS209_NOR_BOOT_SIZE); |
diff --git a/arch/arm/mach-orion5x/ts409-setup.c b/arch/arm/mach-orion5x/ts409-setup.c index 6053e76ac967..b27d2b762081 100644 --- a/arch/arm/mach-orion5x/ts409-setup.c +++ b/arch/arm/mach-orion5x/ts409-setup.c | |||
@@ -3,6 +3,9 @@ | |||
3 | * | 3 | * |
4 | * Maintainer: Sylver Bruneau <sylver.bruneau@gmail.com> | 4 | * Maintainer: Sylver Bruneau <sylver.bruneau@gmail.com> |
5 | * | 5 | * |
6 | * Copyright (C) 2008 Sylver Bruneau <sylver.bruneau@gmail.com> | ||
7 | * Copyright (C) 2008 Martin Michlmayr <tbm@cyrius.com> | ||
8 | * | ||
6 | * This program is free software; you can redistribute it and/or | 9 | * This program is free software; you can redistribute it and/or |
7 | * modify it under the terms of the GNU General Public License | 10 | * modify it under the terms of the GNU General Public License |
8 | * as published by the Free Software Foundation; either version | 11 | * as published by the Free Software Foundation; either version |
@@ -16,6 +19,7 @@ | |||
16 | #include <linux/irq.h> | 19 | #include <linux/irq.h> |
17 | #include <linux/mtd/physmap.h> | 20 | #include <linux/mtd/physmap.h> |
18 | #include <linux/mv643xx_eth.h> | 21 | #include <linux/mv643xx_eth.h> |
22 | #include <linux/leds.h> | ||
19 | #include <linux/gpio_keys.h> | 23 | #include <linux/gpio_keys.h> |
20 | #include <linux/input.h> | 24 | #include <linux/input.h> |
21 | #include <linux/i2c.h> | 25 | #include <linux/i2c.h> |
@@ -162,16 +166,59 @@ static struct i2c_board_info __initdata qnap_ts409_i2c_rtc = { | |||
162 | I2C_BOARD_INFO("s35390a", 0x30), | 166 | I2C_BOARD_INFO("s35390a", 0x30), |
163 | }; | 167 | }; |
164 | 168 | ||
169 | /***************************************************************************** | ||
170 | * LEDs attached to GPIO | ||
171 | ****************************************************************************/ | ||
172 | |||
173 | static struct gpio_led ts409_led_pins[] = { | ||
174 | { | ||
175 | .name = "ts409:red:sata1", | ||
176 | .gpio = 4, | ||
177 | .active_low = 1, | ||
178 | }, { | ||
179 | .name = "ts409:red:sata2", | ||
180 | .gpio = 5, | ||
181 | .active_low = 1, | ||
182 | }, { | ||
183 | .name = "ts409:red:sata3", | ||
184 | .gpio = 6, | ||
185 | .active_low = 1, | ||
186 | }, { | ||
187 | .name = "ts409:red:sata4", | ||
188 | .gpio = 7, | ||
189 | .active_low = 1, | ||
190 | }, | ||
191 | }; | ||
192 | |||
193 | static struct gpio_led_platform_data ts409_led_data = { | ||
194 | .leds = ts409_led_pins, | ||
195 | .num_leds = ARRAY_SIZE(ts409_led_pins), | ||
196 | }; | ||
197 | |||
198 | static struct platform_device ts409_leds = { | ||
199 | .name = "leds-gpio", | ||
200 | .id = -1, | ||
201 | .dev = { | ||
202 | .platform_data = &ts409_led_data, | ||
203 | }, | ||
204 | }; | ||
205 | |||
165 | /**************************************************************************** | 206 | /**************************************************************************** |
166 | * GPIO Attached Keys | 207 | * GPIO Attached Keys |
167 | * Power button is attached to the PIC microcontroller | 208 | * Power button is attached to the PIC microcontroller |
168 | ****************************************************************************/ | 209 | ****************************************************************************/ |
169 | 210 | ||
211 | #define QNAP_TS409_GPIO_KEY_RESET 14 | ||
170 | #define QNAP_TS409_GPIO_KEY_MEDIA 15 | 212 | #define QNAP_TS409_GPIO_KEY_MEDIA 15 |
171 | 213 | ||
172 | static struct gpio_keys_button qnap_ts409_buttons[] = { | 214 | static struct gpio_keys_button qnap_ts409_buttons[] = { |
173 | { | 215 | { |
174 | .code = KEY_RESTART, | 216 | .code = KEY_RESTART, |
217 | .gpio = QNAP_TS409_GPIO_KEY_RESET, | ||
218 | .desc = "Reset Button", | ||
219 | .active_low = 1, | ||
220 | }, { | ||
221 | .code = KEY_COPY, | ||
175 | .gpio = QNAP_TS409_GPIO_KEY_MEDIA, | 222 | .gpio = QNAP_TS409_GPIO_KEY_MEDIA, |
176 | .desc = "USB Copy Button", | 223 | .desc = "USB Copy Button", |
177 | .active_low = 1, | 224 | .active_low = 1, |
@@ -255,6 +302,7 @@ static void __init qnap_ts409_init(void) | |||
255 | if (qnap_ts409_i2c_rtc.irq == 0) | 302 | if (qnap_ts409_i2c_rtc.irq == 0) |
256 | pr_warning("qnap_ts409_init: failed to get RTC IRQ\n"); | 303 | pr_warning("qnap_ts409_init: failed to get RTC IRQ\n"); |
257 | i2c_register_board_info(0, &qnap_ts409_i2c_rtc, 1); | 304 | i2c_register_board_info(0, &qnap_ts409_i2c_rtc, 1); |
305 | platform_device_register(&ts409_leds); | ||
258 | 306 | ||
259 | /* register tsx09 specific power-off method */ | 307 | /* register tsx09 specific power-off method */ |
260 | pm_power_off = qnap_tsx09_power_off; | 308 | pm_power_off = qnap_tsx09_power_off; |
diff --git a/arch/arm/mach-orion5x/ts78xx-setup.c b/arch/arm/mach-orion5x/ts78xx-setup.c index 014916a28fdc..ae0a5dccd2a1 100644 --- a/arch/arm/mach-orion5x/ts78xx-setup.c +++ b/arch/arm/mach-orion5x/ts78xx-setup.c | |||
@@ -256,6 +256,7 @@ static void __init ts78xx_init(void) | |||
256 | orion5x_sata_init(&ts78xx_sata_data); | 256 | orion5x_sata_init(&ts78xx_sata_data); |
257 | orion5x_uart0_init(); | 257 | orion5x_uart0_init(); |
258 | orion5x_uart1_init(); | 258 | orion5x_uart1_init(); |
259 | orion5x_xor_init(); | ||
259 | 260 | ||
260 | orion5x_setup_dev_boot_win(TS78XX_NOR_BOOT_BASE, | 261 | orion5x_setup_dev_boot_win(TS78XX_NOR_BOOT_BASE, |
261 | TS78XX_NOR_BOOT_SIZE); | 262 | TS78XX_NOR_BOOT_SIZE); |