* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
- * $Id:$
+ * $Id$
*/
#include <linux/module.h>
#include <linux/pci.h>
WRT54G,
WRTSL54GS,
WRT54G3G,
+ WRT350N,
/* ASUS */
WLHDD,
WHR_HP_G54,
WHR2_A54G54,
WLA2_G54L,
+ WZR_RS_G54,
+ WZR_RS_G54HP,
BUFFALO_UNKNOWN,
BUFFALO_UNKNOWN_4710,
/* Belkin */
BELKIN_UNKNOWN,
+
+ /* Netgear */
+ WGT634U,
+
+ /* Trendware */
+ TEW411BRPP,
};
static struct platform_t __initdata platforms[] = {
},
.leds = {
{ .name = "power", .gpio = 1 << 1, .polarity = NORMAL },
- { .name = "dmz", .gpio = 1 << 7, .polarity = REVERSE },
+ { .name = "dmz", .gpio = 1 << 0, .polarity = REVERSE },
{ .name = "ses_white", .gpio = 1 << 5, .polarity = REVERSE },
{ .name = "ses_orange", .gpio = 1 << 7, .polarity = REVERSE },
},
{ .name = "3g_blink", .gpio = 1 << 5, .polarity = NORMAL },
},
},
+ [WRT350N] = {
+ .name = "Linksys WRT350N",
+ .buttons = {
+ { .name = "reset", .gpio = 1 << 6 },
+ { .name = "ses", .gpio = 1 << 8 },
+ },
+ .leds = {
+ { .name = "power", .gpio = 1 << 1, .polarity = NORMAL },
+ { .name = "ses", .gpio = 1 << 3, .polarity = REVERSE },
+ },
+ },
/* Asus */
[WLHDD] = {
.name = "ASUS WL-HDD",
{ .name = "diag", .gpio = 1 << 1, .polarity = REVERSE },
},
},
+ [WZR_RS_G54] = {
+ .name = "Buffalo WZR-RS-G54",
+ .buttons = {
+ { .name = "ses", .gpio = 1 << 0 },
+ { .name = "reset", .gpio = 1 << 4 },
+ },
+ .leds = {
+ { .name = "diag", .gpio = 1 << 7, .polarity = REVERSE },
+ { .name = "ses", .gpio = 1 << 6, .polarity = REVERSE },
+ { .name = "vpn", .gpio = 1 << 1, .polarity = REVERSE },
+ },
+ },
+ [WZR_RS_G54HP] = {
+ .name = "Buffalo WZR-RS-G54HP",
+ .buttons = {
+ { .name = "ses", .gpio = 1 << 0 },
+ { .name = "reset", .gpio = 1 << 4 },
+ },
+ .leds = {
+ { .name = "diag", .gpio = 1 << 7, .polarity = REVERSE },
+ { .name = "ses", .gpio = 1 << 6, .polarity = REVERSE },
+ { .name = "vpn", .gpio = 1 << 1, .polarity = REVERSE },
+ },
+ },
[BUFFALO_UNKNOWN] = {
.name = "Buffalo (unknown)",
.buttons = {
{ .name = "connected", .gpio = 1 << 0, .polarity = NORMAL },
},
},
+ /* Netgear */
+ [WGT634U] = {
+ .name = "Netgear WGT634U",
+ .buttons = {
+ { .name = "reset", .gpio = 1 << 2 },
+ },
+ .leds = {
+ { .name = "power", .gpio = 1 << 3, .polarity = REVERSE },
+ },
+ },
+ /* Trendware */
+ [TEW411BRPP] = {
+ .name = "Trendware TEW411BRP+",
+ .buttons = {
+ { /* No usable buttons */ },
+ },
+ .leds = {
+ { .name = "power", .gpio = 1 << 7, .polarity = NORMAL },
+ { .name = "wlan", .gpio = 1 << 1, .polarity = NORMAL },
+ { .name = "bridge", .gpio = 1 << 6, .polarity = NORMAL },
+ },
+ },
};
static struct platform_t __init *platform_detect(void)
if (strncmp(getvar("pmon_ver"), "CFE", 3) == 0) {
/* CFE based - newer hardware */
if (!strcmp(boardnum, "42")) { /* Linksys */
- if (!strcmp(boardtype, "0x0101"))
+ if (!strcmp(boardtype, "0x478") && !strcmp(getvar("cardbus"), 1))
+ return &platforms[WRT350N];
+
+ if (!strcmp(boardtype, "0x0101") && !strcmp(getvar("boot_ver"), "v3.6"))
return &platforms[WRT54G3G];
if (!strcmp(getvar("et1phyaddr"),"5") && !strcmp(getvar("et1mdcport"), "1"))
if (!strcmp(boardnum, "10496"))
return &platforms[USR5461];
} else { /* PMON based - old stuff */
+ if ((simple_strtoul(getvar("GemtekPmonVer"), NULL, 0) == 9) &&
+ (simple_strtoul(getvar("et0phyaddr"), NULL, 0) == 30)) {
+ if (!strncmp(getvar("ModelId"),"WE800G", 6))
+ return &platforms[WE800G];
+ else
+ return &platforms[WR850GV1];
+ }
if (!strncmp(boardtype, "bcm94710dev", 11)) {
if (!strcmp(boardnum, "42"))
return &platforms[WRT54GV1];
/* unknown asus stuff, probably bcm4702 */
if (!strncmp(boardnum, "asusX", 5))
return &platforms[ASUS_4702];
-
- if ((simple_strtoul(getvar("GemtekPmonVer"), NULL, 0) == 9) &&
- (simple_strtoul(getvar("et0phyaddr"), NULL, 0) == 30)) {
- if (!strncmp(getvar("ModelId"),"WE800G", 6))
- return &platforms[WE800G];
- else
- return &platforms[WR850GV1];
- }
}
if ((buf = (nvram_get("melco_id") ?: nvram_get("buffalo_id")))) {
return &platforms[WHR_G54S];
if (!strcmp(buf, "290441dd"))
return &platforms[WHR2_A54G54];
+ if (!strcmp(buf, "30083"))
+ return &platforms[WZR_RS_G54];
+ if (!strcmp(buf, "30103"))
+ return &platforms[WZR_RS_G54HP];
}
if (buf || !strcmp(boardnum, "00")) {/* probably buffalo */
return &platforms[BUFFALO_UNKNOWN];
}
-
if (!strcmp(getvar("CFEver"), "MotoWRv203") ||
!strcmp(getvar("MOTO_BOARD_TYPE"), "WR_FEM1")) {
return &platforms[WR850GV2V3];
}
+ if (!strcmp(boardnum, "44")) { /* Trendware TEW-411BRP+ */
+ return &platforms[TEW411BRPP];
+ }
+
/* not found */
return NULL;
}
changed = platform.button_polarity ^ in;
platform.button_polarity = in;
+ changed &= ~gpio_outen(0, 0);
+
for (b = platform.buttons; b->name; b++) {
struct event_t *event;