[brcm-2.4] fix Dell TrueMobile 2300 v1/v2 detection and network configuration (closes...
[openwrt/svn-archive/archive.git] / package / broadcom-diag / src / diag.c
index a4bad4d00c39475d78c3a1f44cdf0b4bf95dfdee..8f2a0c1705935d6944a2f30b74d3be8dd0da576c 100644 (file)
@@ -61,6 +61,8 @@ enum {
        WRTSL54GS,
        WRT54G3G,
        WRT350N,
+       WRT600N,
+       WRT600NV11,
 
        /* ASUS */
        WLHDD,
@@ -97,6 +99,7 @@ enum {
 
        /* Dell */
        TM2300,
+       TM2300V2,
 
        /* Motorola */
        WE800G,
@@ -142,9 +145,12 @@ static void __init bcm4780_init(void) {
 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[] = {
@@ -237,6 +243,38 @@ 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",
@@ -529,6 +567,16 @@ static struct platform_t __initdata platforms[] = {
                        { .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",
@@ -710,8 +758,8 @@ static struct platform_t __init *platform_detect(void)
        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];
        }
@@ -743,6 +791,14 @@ static struct platform_t __init *platform_detect(void)
        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 */
@@ -759,6 +815,11 @@ static struct platform_t __init *platform_detect(void)
                        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];
@@ -773,7 +834,7 @@ static struct platform_t __init *platform_detect(void)
 
                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)) {
@@ -965,7 +1026,7 @@ static irqreturn_t button_handler(int irq, void *dev_id, struct pt_regs *regs)
 
        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;