aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux
diff options
context:
space:
mode:
authorHauke Mehrtens <hauke@openwrt.org>2012-04-24 20:35:46 +0000
committerHauke Mehrtens <hauke@openwrt.org>2012-04-24 20:35:46 +0000
commitec90781175aa411780c2a37138605fe1f7483f2c (patch)
treed7f1273ce8e39f9cd62876582246f5b9fa1a3ddd /target/linux
parentcad43b24764d62e7db4d3d19e17b9219e963abff (diff)
downloadupstream-ec90781175aa411780c2a37138605fe1f7483f2c.tar.gz
upstream-ec90781175aa411780c2a37138605fe1f7483f2c.tar.bz2
upstream-ec90781175aa411780c2a37138605fe1f7483f2c.zip
brcm47xx: b44 fix workaround detection on some brcm47xx boards
Because of api change of nvram_getenv, the workaround failed to detect the hardware. Based on patch by b.sander Fixes #11268. git-svn-id: svn://svn.openwrt.org/openwrt/trunk@31470 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'target/linux')
-rw-r--r--target/linux/brcm47xx/patches-3.2/210-b44_phy_fix.patch25
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 d9cf29f6e5..2d0536552a 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;