[package] make libsas depend on x86, over targets using it may unmask it later
[openwrt.git] / package / switch / src / switch-robo.c
index 779b89f..a0051a3 100644 (file)
@@ -41,6 +41,7 @@
 
 #define ROBO_PHY_ADDR          0x1E    /* robo switch phy address */
 #define ROBO_PHY_ADDR_TG3      0x01    /* Tigon3 PHY address */
+#define ROBO_PHY_ADDR_BCM63XX  0x00    /* BCM63XX PHY address */
 
 /* MII registers */
 #define REG_MII_PAGE   0x10    /* MII Page register */
 #define bool int
 #endif
 
+/* Only available on brcm-2.4/brcm47xx */
+#ifdef BROADCOM
+extern char *nvram_get(const char *name);
+#define getvar(str) (nvram_get(str)?:"")
+#else
+#define getvar(str) ""
+#endif
+
 /* Data structure for a Roboswitch device. */
 struct robo_switch {
        char *device;                   /* The device name string (ethX) */
@@ -270,8 +279,9 @@ static int robo_switch_enable(void)
                        robo_write16(ROBO_CTRL_PAGE, i, 0);
        }
 
-       /* WAN port LED */
-       robo_write16(ROBO_CTRL_PAGE, 0x16, 0x1F);
+       /* WAN port LED, except for Netgear WGT634U */
+       if (strcmp(getvar("nvram_type"), "cfe") != 0)
+               robo_write16(ROBO_CTRL_PAGE, 0x16, 0x1F);
 
        return 0;
 }
@@ -318,13 +328,14 @@ static int robo_probe(char *devname)
                /* got phy address check for robo address */
                struct mii_ioctl_data *mii = (struct mii_ioctl_data *) &robo.ifr.ifr_data;
                if ((mii->phy_id != ROBO_PHY_ADDR) &&
+                   (mii->phy_id != ROBO_PHY_ADDR_BCM63XX) &&
                    (mii->phy_id != ROBO_PHY_ADDR_TG3)) {
                        printk("Invalid phy address (%d)\n", mii->phy_id);
                        return 1;
                }
                robo.use_et = 0;
                /* The robo has a fixed PHY address that is different from the
-                * Tigon3 PHY address. */
+                * Tigon3 and BCM63xx PHY address. */
                robo.phy_addr = ROBO_PHY_ADDR;
        }
 
@@ -332,7 +343,7 @@ static int robo_probe(char *devname)
                (mdio_read(robo.phy_addr, 0x3) << 16);
 
        if (phyid == 0xffffffff || phyid == 0x55210022) {
-               printk("No Robo switch in managed mode found\n");
+               printk("No Robo switch in managed mode found, phy_id = 0x%08x\n", phyid);
                return 1;
        }
 
This page took 0.026286 seconds and 4 git commands to generate.