diff options
| -rw-r--r-- | target/linux/brcm47xx/patches-3.2/210-b44_phy_fix.patch | 25 | 
1 files changed, 9 insertions, 16 deletions
diff --git a/target/linux/brcm47xx/patches-3.2/210-b44_phy_fix.patch b/target/linux/brcm47xx/patches-3.2/210-b44_phy_fix.patch index d9cf29f6e..2d0536552 100644 --- a/target/linux/brcm47xx/patches-3.2/210-b44_phy_fix.patch +++ b/target/linux/brcm47xx/patches-3.2/210-b44_phy_fix.patch @@ -1,29 +1,22 @@  --- a/drivers/net/ethernet/broadcom/b44.c  +++ b/drivers/net/ethernet/broadcom/b44.c -@@ -410,10 +410,41 @@ static void b44_wap54g10_workaround(stru +@@ -410,10 +410,34 @@ static void b44_wap54g10_workaround(stru   error:   	pr_warning("PHY: cannot reset MII transceiver isolate bit\n");   }  + -+static inline int startswith (const char *source, const char *cmp)  -+{  -+       return !strncmp(source,cmp,strlen(cmp));  -+} -+ -+static inline void b44_bcm47xx_workarounds(struct b44 *bp) ++static void b44_bcm47xx_workarounds(struct b44 *bp)  +{  +	char buf[20]; ++	struct ssb_device *sdev = bp->sdev; ++  +	/* Toshiba WRC-1000, Siemens SE505 v1, Askey RT-210W, RT-220W */ -+	if (nvram_getenv("boardnum", buf, sizeof(buf)) > 0) -+		return; -+	if (simple_strtoul(buf, NULL, 0) == 100) { ++	if (sdev->bus->sprom.board_num == 100) {  +		bp->phy_addr = B44_PHY_ADDR_NO_PHY;  +	} else {  +		/* WL-HDD */ -+		struct ssb_device *sdev = bp->sdev; -+		if (nvram_getenv("hardware_version", buf, sizeof(buf)) > 0) -+			return; -+		if (startswith(buf, "WL300-")) { ++		if (nvram_getenv("hardware_version", buf, sizeof(buf)) >= 0 && ++		    !strncmp(buf, "WL300-", strlen("WL300-"))) {  +			if (sdev->bus->sprom.et0phyaddr == 0 &&  +			    sdev->bus->sprom.et1phyaddr == 1)  +				bp->phy_addr = B44_PHY_ADDR_NO_PHY; @@ -42,7 +35,7 @@   #endif   static int b44_setup_phy(struct b44 *bp) -@@ -422,6 +453,7 @@ static int b44_setup_phy(struct b44 *bp) +@@ -422,6 +446,7 @@ static int b44_setup_phy(struct b44 *bp)   	int err;   	b44_wap54g10_workaround(bp); @@ -50,7 +43,7 @@   	if (bp->phy_addr == B44_PHY_ADDR_NO_PHY)   		return 0; -@@ -2088,6 +2120,8 @@ static int __devinit b44_get_invariants( +@@ -2088,6 +2113,8 @@ static int __devinit b44_get_invariants(   	 * valid PHY address. */   	bp->phy_addr &= 0x1F;  | 
