switch: fix switches with more than 6 ports
authorhauke <hauke@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Wed, 13 Feb 2013 16:03:47 +0000 (16:03 +0000)
committerhauke <hauke@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Wed, 13 Feb 2013 16:03:47 +0000 (16:03 +0000)
This is based on a patch by jcharest and the Broadcom SDK.

git-svn-id: svn://svn.openwrt.org/openwrt/trunk@35582 3c298f89-4303-0410-b956-a3cf2f4a3e73

package/switch/src/switch-robo.c

index 0ab2f69..0e39c8f 100644 (file)
@@ -78,7 +78,7 @@ struct robo_switch {
        int gpio_lanports_enable;
        struct ifreq ifr;
        struct net_device *dev;
-       unsigned char port[6];
+       unsigned char port[9];
 };
 
 /* Currently we can only have one device in the system. */
@@ -308,9 +308,6 @@ static int robo_probe(char *devname)
        }
 
        robo.device = devname;
-       for (i = 0; i < 5; i++)
-               robo.port[i] = i;
-       robo.port[5] = 8;
 
        /* try access using MII ioctls - get phy address */
        err = do_ioctl(SIOCGMIIPHY);
@@ -386,6 +383,14 @@ static int robo_probe(char *devname)
                robo.is_5365 = false;
 
        robo.gmii = robo_gmii();
+       if (robo.devid == ROBO_DEVICE_ID_5325) {
+               for (i = 0; i < 5; i++)
+                       robo.port[i] = i;
+       } else {
+               for (i = 0; i < 8; i++)
+                       robo.port[i] = i;
+       }
+       robo.port[i] = ROBO_IM_PORT_CTRL;
 
        robo_switch_reset();
        err = robo_switch_enable();