WRTSL54GS,
WRT54G3G,
WRT350N,
+ WRT600N,
+ WRT600NV11,
/* ASUS */
WLHDD,
WL500GP,
WL500GPV2,
WL500W,
+ WL520GC,
WL520GU,
ASUS_4702,
WL700GE,
/* Dell */
TM2300,
+ TM2300V2,
/* Motorola */
WE800G,
static void __init bcm57xx_init(void) {
int pin = 1 << 2;
+#ifndef LINUX_2_4
+ /* FIXME: switch comes up, but port mappings/vlans not right */
gpio_outen(pin, pin);
gpio_control(pin, 0);
gpio_out(pin, pin);
+#endif
}
static struct platform_t __initdata platforms[] = {
},
.platform_init = bcm57xx_init,
},
+ [WRT600N] = {
+ .name = "Linksys WRT600N",
+ .buttons = {
+ { .name = "reset", .gpio = 1 << 6 },
+ { .name = "ses", .gpio = 1 << 7 },
+ },
+ .leds = {
+ { .name = "power", .gpio = 1 << 2, .polarity = REVERSE }, // Power LED
+ { .name = "usb", .gpio = 1 << 3, .polarity = REVERSE }, // USB LED
+ { .name = "wl0_ses_amber", .gpio = 1 << 8, .polarity = REVERSE }, // 2.4Ghz LED Amber
+ { .name = "wl0_ses_green", .gpio = 1 << 9, .polarity = REVERSE }, // 2.4Ghz LED Green
+ { .name = "wl1_ses_amber", .gpio = 1 << 10, .polarity = REVERSE }, // 5.6Ghz LED Amber
+ { .name = "wl1_ses_green", .gpio = 1 << 11, .polarity = REVERSE }, // 5.6Ghz LED Green
+ },
+ .platform_init = bcm57xx_init,
+ },
+ [WRT600NV11] = {
+ .name = "Linksys WRT600N V1.1",
+ .buttons = {
+ { .name = "reset", .gpio = 1 << 6 },
+ { .name = "ses", .gpio = 1 << 7 },
+ },
+ .leds = {
+ { .name = "power", .gpio = 1 << 2, .polarity = REVERSE }, // Power LED
+ { .name = "usb", .gpio = 1 << 3, .polarity = REVERSE }, // USB LED
+ { .name = "wl0_ses_amber", .gpio = 1 << 8, .polarity = REVERSE }, // 2.4Ghz LED Amber
+ { .name = "wl0_ses_green", .gpio = 1 << 9, .polarity = REVERSE }, // 2.4Ghz LED Green
+ { .name = "wl1_ses_amber", .gpio = 1 << 10, .polarity = REVERSE }, // 5.6Ghz LED Amber
+ { .name = "wl1_ses_green", .gpio = 1 << 11, .polarity = REVERSE }, // 5.6Ghz LED Green
+ },
+ .platform_init = bcm57xx_init,
+ },
/* Asus */
[WLHDD] = {
.name = "ASUS WL-HDD",
{ .name = "power", .gpio = 1 << 5, .polarity = REVERSE },
},
},
+ [WL520GC] = {
+ .name = "ASUS WL-520GC",
+ .buttons = {
+ { .name = "reset", .gpio = 1 << 2 },
+ { .name = "ses", .gpio = 1 << 3 },
+ },
+ .leds = {
+ { .name = "power", .gpio = 1 << 0, .polarity = REVERSE },
+ { .name = "wlan", .gpio = 1 << 1, .polarity = REVERSE },
+ },
+ },
[WL520GU] = {
.name = "ASUS WL-520gU",
.buttons = {
/* No usable buttons */
},
.leds = {
- { .name = "dmz", .gpio = 1 << 4, .polarity = REVERSE },
+// { .name = "power", .gpio = 1 << 0 .polarity = REVERSE }, // Usable when retrofitting D26 (?)
+ { .name = "dmz", .gpio = 1 << 4, .polarity = REVERSE }, // actual name WWW
{ .name = "wlan", .gpio = 1 << 3, .polarity = REVERSE },
},
},
},
.leds = {
{ .name = "power", .gpio = 1 << 5, .polarity = REVERSE },
- { .name = "dmz", .gpio = 1 << 0, .polarity = REVERSE },
+ { .name = "dmz", .gpio = 1 << 0, .polarity = REVERSE }, // actual name WWW
{ .name = "wlan", .gpio = 1 << 3, .polarity = REVERSE },
},
},
{ .name = "power", .gpio = 1 << 7, .polarity = REVERSE },
},
},
+ [TM2300V2] = {
+ .name = "Dell TrueMobile 2300 v2",
+ .buttons = {
+ { .name = "reset", .gpio = 1 << 0 },
+ },
+ .leds = {
+ { .name = "wlan", .gpio = 1 << 6, .polarity = REVERSE },
+ { .name = "power", .gpio = 1 << 7, .polarity = REVERSE },
+ },
+ },
/* Motorola */
[WE800G] = {
.name = "Motorola WE800G",
/* Look for a model identifier */
/* Based on "model_name" */
- if (buf = nvram_get("model_name")) {
+ if ((buf = nvram_get("model_name"))) {
if (!strcmp(buf, "DIR-130"))
return &platforms[DIR130];
if (!strcmp(buf, "DIR-330"))
}
/* Based on "model_no" */
- if (buf = nvram_get("model_no")) {
+ if ((buf = nvram_get("model_no"))) {
if (startswith(buf,"WL700")) /* WL700* */
return &platforms[WL700GE];
}
/* Based on "hardware_version" */
- if (buf = nvram_get("hardware_version")) {
+ if ((buf = nvram_get("hardware_version"))) {
if (startswith(buf,"WL500GPV2-")) /* WL500GPV2-* */
return &platforms[WL500GPV2];
+ if (startswith(buf,"WL520GC-")) /* WL520GU-* */
+ return &platforms[WL520GC];
if (startswith(buf,"WL520GU-")) /* WL520GU-* */
return &platforms[WL520GU];
}
/* Based on "ModelId" */
- if (buf = nvram_get("ModelId")) {
+ if ((buf = nvram_get("ModelId"))) {
if (!strcmp(buf, "WR850GP"))
return &platforms[WR850GP];
- if (!strcmp(buf,"WX-5565"))
- return &platforms[TM2300];
+ if (!strcmp(buf, "WX-5565") && !strcmp(getvar("boardtype"),"bcm94710ap"))
+ return &platforms[TM2300]; /* Dell TrueMobile 2300 */
if (startswith(buf,"WE800G")) /* WE800G* */
return &platforms[WE800G];
}
boardnum = getvar("boardnum");
boardtype = getvar("boardtype");
+ if (!strcmp(boardnum, "20070615")) { /* Linksys WRT600N v1/V1.1 */
+ if (!strcmp(boardtype, "0x478") && !strcmp(getvar("cardbus"), "0") && !strcmp(getvar("switch_type"),"BCM5395"))
+ return &platforms[WRT600NV11];
+
+ if (!strcmp(boardtype, "0x478") && !strcmp(getvar("cardbus"), "0"))
+ return &platforms[WRT600N];
+ }
+
if (startswith(getvar("pmon_ver"), "CFE")) {
/* CFE based - newer hardware */
if (!strcmp(boardnum, "42")) { /* Linksys */
return &platforms[WRT54G];
}
+ if (!strcmp(boardnum, "44") || !strcmp(boardnum, "44\r")) {
+ if (!strcmp(boardtype,"0x0101") || !strcmp(boardtype, "0x0101\r"))
+ return &platforms[TM2300V2]; /* Dell TrueMobile 2300 v2 */
+ }
+
if (!strcmp(boardnum, "45")) { /* ASUS */
if (!strcmp(boardtype,"0x042f"))
return &platforms[WL500GP];
if (!strcmp(boardnum, "10496"))
return &platforms[USR5461];
+ if (!strcmp(getvar("boardtype"), "0x0101") && !strcmp(getvar("boardrev"), "0x10")) /* SE505V2 With Modified CFE */
+ return &platforms[SE505V2];
+
} else { /* PMON based - old stuff */
if ((simple_strtoul(getvar("GemtekPmonVer"), NULL, 0) == 9) &&
(simple_strtoul(getvar("et0phyaddr"), NULL, 0) == 30)) {
changed &= ~gpio_outen(0, 0);
- for (b = platform.buttons; b->name; b++) {
+ for (b = platform.buttons; b->name; b++) {
struct event_t *event;
if (!(b->gpio & changed)) continue;
l->state = 0;
set_led_extif(l);
} else {
- if (l->polarity != INPUT) oe_mask != l->gpio;
+ if (l->polarity != INPUT) oe_mask |= l->gpio;
mask |= l->gpio;
val |= (l->polarity == NORMAL)?0:l->gpio;
}
gpio_outen(mask, oe_mask);
gpio_control(mask, 0);
gpio_out(mask, val);
+ gpio_intmask(mask, 0);
}
static void unregister_leds(struct led_t *l)