OpenWrt – Blame information for rev 1
?pathlinks?
Rev | Author | Line No. | Line |
---|---|---|---|
1 | office | 1 | --- a/drivers/net/ethernet/broadcom/b44.c |
2 | +++ b/drivers/net/ethernet/broadcom/b44.c |
||
3 | @@ -431,10 +431,34 @@ static void b44_wap54g10_workaround(stru |
||
4 | error: |
||
5 | pr_warn("PHY: cannot reset MII transceiver isolate bit\n"); |
||
6 | } |
||
7 | + |
||
8 | +static void b44_bcm47xx_workarounds(struct b44 *bp) |
||
9 | +{ |
||
10 | + char buf[20]; |
||
11 | + struct ssb_device *sdev = bp->sdev; |
||
12 | + |
||
13 | + /* Toshiba WRC-1000, Siemens SE505 v1, Askey RT-210W, RT-220W */ |
||
14 | + if (sdev->bus->sprom.board_num == 100) { |
||
15 | + bp->phy_addr = B44_PHY_ADDR_NO_LOCAL_PHY; |
||
16 | + } else { |
||
17 | + /* WL-HDD */ |
||
18 | + if (bcm47xx_nvram_getenv("hardware_version", buf, sizeof(buf)) >= 0 && |
||
19 | + !strncmp(buf, "WL300-", strlen("WL300-"))) { |
||
20 | + if (sdev->bus->sprom.et0phyaddr == 0 && |
||
21 | + sdev->bus->sprom.et1phyaddr == 1) |
||
22 | + bp->phy_addr = B44_PHY_ADDR_NO_LOCAL_PHY; |
||
23 | + } |
||
24 | + } |
||
25 | + return; |
||
26 | +} |
||
27 | #else |
||
28 | static inline void b44_wap54g10_workaround(struct b44 *bp) |
||
29 | { |
||
30 | } |
||
31 | + |
||
32 | +static inline void b44_bcm47xx_workarounds(struct b44 *bp) |
||
33 | +{ |
||
34 | +} |
||
35 | #endif |
||
36 | |||
37 | static int b44_setup_phy(struct b44 *bp) |
||
38 | @@ -443,6 +467,7 @@ static int b44_setup_phy(struct b44 *bp) |
||
39 | int err; |
||
40 | |||
41 | b44_wap54g10_workaround(bp); |
||
42 | + b44_bcm47xx_workarounds(bp); |
||
43 | |||
44 | if (bp->flags & B44_FLAG_EXTERNAL_PHY) |
||
45 | return 0; |
||
46 | @@ -2178,6 +2203,8 @@ static int b44_get_invariants(struct b44 |
||
47 | * valid PHY address. */ |
||
48 | bp->phy_addr &= 0x1F; |
||
49 | |||
50 | + b44_bcm47xx_workarounds(bp); |
||
51 | + |
||
52 | memcpy(bp->dev->dev_addr, addr, ETH_ALEN); |
||
53 | |||
54 | if (!is_valid_ether_addr(&bp->dev->dev_addr[0])){ |