upgrade busybox to v1.11.1 and add current upstream fixes
[openwrt.git] / package / broadcom-diag / src / diag.c
index 9cfc1d9..cde681a 100644 (file)
@@ -61,6 +61,8 @@ enum {
        WRTSL54GS,
        WRT54G3G,
        WRT350N,
+       WRT600N,
+       WRT600NV11,
 
        /* ASUS */
        WLHDD,
@@ -97,6 +99,7 @@ enum {
 
        /* Dell */
        TM2300,
+       TM2300V2,
 
        /* Motorola */
        WE800G,
@@ -240,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",
@@ -532,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",
@@ -713,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];
        }
@@ -746,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 */
@@ -762,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];
@@ -776,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)) {
@@ -968,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;
@@ -1029,6 +1087,7 @@ static void register_leds(struct led_t *l)
        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)
This page took 0.027437 seconds and 4 git commands to generate.