1 #include <linux/init.h>
2 #include <linux/platform_device.h>
3 #include <linux/leds.h>
4 #include <linux/gpio.h>
5 #include <linux/gpio_buttons.h>
6 #include <linux/mtd/mtd.h>
7 #include <linux/mtd/partitions.h>
8 #include <linux/mtd/physmap.h>
9 #include <linux/input.h>
12 #include <ifxmips_prom.h>
14 #include "arcaydian.h"
17 #define ARV452_EBU_GPIO_START 0x14000000
18 #define ARV452_EBU_GPIO_SIZE 0x00001000
20 #define ARV452_GPIO_BUTTON_RESET 14
21 #define ARV452_BUTTONS_POLL_INTERVAL 20
23 #define ARV452_LATCH_SWITCH (1 << 10)
25 #ifdef CONFIG_MTD_PARTITIONS
26 static struct mtd_partition arv452_partitions
[] =
49 .name
= "board_config",
61 static struct physmap_flash_data arv452_flash_data
= {
62 #ifdef CONFIG_MTD_PARTITIONS
63 .nr_parts
= ARRAY_SIZE(arv452_partitions
),
64 .parts
= arv452_partitions
,
68 static struct gpio_led
69 arv452_leds_gpio
[] __initdata
= {
71 { .name = "ifx0", .gpio = 0, .active_low = 1, },
72 { .name = "ifx1", .gpio = 1, .active_low = 1, },
73 { .name = "ifx2", .gpio = 2, .active_low = 1, },
75 { .name
= "ifx:blue:power", .gpio
= 3, .active_low
= 1, },
76 { .name
= "ifx:blue:adsl", .gpio
= 4, .active_low
= 1, },
77 { .name
= "ifx:blue:internet", .gpio
= 5, .active_low
= 1, },
78 { .name
= "ifx:red:power", .gpio
= 6, .active_low
= 1, },
79 { .name
= "ifx:yello:wps", .gpio
= 7, .active_low
= 1, },
80 { .name
= "ifx:red:wps", .gpio
= 9, .active_low
= 1, },
82 { .name = "ifx10", .gpio = 10, .active_low = 1, },
83 { .name = "ifx11", .gpio = 11, .active_low = 1, },
84 { .name = "ifx12", .gpio = 12, .active_low = 1, },
85 { .name = "ifx13", .gpio = 13, .active_low = 1, },
86 { .name = "ifx14", .gpio = 14, .active_low = 1, },
87 { .name = "ifx15", .gpio = 15, .active_low = 1, },
88 { .name = "ifx16", .gpio = 16, .active_low = 1, },
89 { .name = "ifx17", .gpio = 17, .active_low = 1, },
90 { .name = "ifx18", .gpio = 18, .active_low = 1, },
91 { .name = "ifx19", .gpio = 19, .active_low = 1, },
92 { .name = "ifx20", .gpio = 20, .active_low = 1, },
93 { .name = "ifx21", .gpio = 21, .active_low = 1, },
94 { .name = "ifx22", .gpio = 22, .active_low = 1, },
95 { .name = "ifx23", .gpio = 23, .active_low = 1, },
96 { .name = "ifx24", .gpio = 24, .active_low = 1, },
97 { .name = "ifx25", .gpio = 25, .active_low = 1, },
98 { .name = "ifx26", .gpio = 26, .active_low = 1, },
99 { .name = "ifx27", .gpio = 27, .active_low = 1, },
100 { .name = "ifx28", .gpio = 28, .active_low = 1, },
101 { .name = "ifx29", .gpio = 29, .active_low = 1, },
102 { .name = "ifx30", .gpio = 30, .active_low = 1, },
103 { .name = "ifx31", .gpio = 31, .active_low = 1, },
105 { .name
= "ifx:blue:voip", .gpio
= 32, .active_low
= 1, },
106 { .name
= "ifx:blue:fxs1", .gpio
= 33, .active_low
= 1, },
107 { .name
= "ifx:blue:fxs2", .gpio
= 34, .active_low
= 1, },
108 { .name
= "ifx:blue:fxo", .gpio
= 35, .active_low
= 1, },
109 { .name
= "ifx:blue:voice", .gpio
= 36, .active_low
= 1, },
110 { .name
= "ifx:blue:usb", .gpio
= 37, .active_low
= 1, },
111 { .name
= "ifx:blue:wlan", .gpio
= 38, .active_low
= 1, },
112 /* { .name = "ifx39", .gpio = 39, .active_low = 1, },
113 { .name = "ifx40", .gpio = 40, .active_low = 1, },
114 { .name = "ifx41", .gpio = 41, .active_low = 1, },
115 { .name = "ifx42", .gpio = 42, .active_low = 1, },
116 { .name = "ifx43", .gpio = 43, .active_low = 1, },
117 { .name = "ifx44", .gpio = 44, .active_low = 1, },
118 { .name = "ifx45", .gpio = 45, .active_low = 1, },
119 { .name = "ifx46", .gpio = 46, .active_low = 1, },
120 { .name = "ifx47", .gpio = 47, .active_low = 1, },
124 static struct gpio_button
125 arv452_gpio_buttons
[] __initdata
= {
131 .gpio
= ARV452_GPIO_BUTTON_RESET
,
136 static struct resource arv452_ebu_resource
=
139 .start
= ARV452_EBU_GPIO_START
,
140 .end
= ARV452_EBU_GPIO_START
+ ARV452_EBU_GPIO_SIZE
- 1,
141 .flags
= IORESOURCE_MEM
,
147 unsigned char mac
[6] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
148 ifxmips_find_brn_mac(mac
);
150 ifxmips_register_gpio();
152 danube_register_ebu_gpio(&arv452_ebu_resource
, ARV452_LATCH_SWITCH
);
154 ifxmips_register_mtd(&arv452_flash_data
);
156 danube_register_pci(PCI_CLOCK_EXT
, 0);
158 ifxmips_register_wdt();
160 ifxmips_register_gpio_leds(arv452_leds_gpio
, ARRAY_SIZE(arv452_leds_gpio
));
162 danube_register_ethernet(mac
);
164 danube_register_usb();
167 MIPS_MACHINE(IFXMIPS_MACH_ARV452
,
169 "Airties WAV-281, Arcor A800",