X-Git-Url: https://git.rohieb.name/openwrt.git/blobdiff_plain/c848213af99e1bd4242e3ab619f51ee464a44a10..319b23364588659de57b9c526048319130bcdd6a:/package/switch/src/switch-robo.c?ds=sidebyside diff --git a/package/switch/src/switch-robo.c b/package/switch/src/switch-robo.c index 779b89f61..a0051a32f 100644 --- a/package/switch/src/switch-robo.c +++ b/package/switch/src/switch-robo.c @@ -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 */ @@ -67,6 +68,14 @@ #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; }