123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- --- a/drivers/net/ethernet/broadcom/b44.c
- +++ b/drivers/net/ethernet/broadcom/b44.c
- @@ -431,10 +431,34 @@ static void b44_wap54g10_workaround(stru
- error:
- pr_warn("PHY: cannot reset MII transceiver isolate bit\n");
- }
- +
- +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 (sdev->bus->sprom.board_num == 100) {
- + bp->phy_addr = B44_PHY_ADDR_NO_LOCAL_PHY;
- + } else {
- + /* WL-HDD */
- + if (bcm47xx_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_LOCAL_PHY;
- + }
- + }
- + return;
- +}
- #else
- static inline void b44_wap54g10_workaround(struct b44 *bp)
- {
- }
- +
- +static inline void b44_bcm47xx_workarounds(struct b44 *bp)
- +{
- +}
- #endif
-
- static int b44_setup_phy(struct b44 *bp)
- @@ -443,6 +467,7 @@ static int b44_setup_phy(struct b44 *bp)
- int err;
-
- b44_wap54g10_workaround(bp);
- + b44_bcm47xx_workarounds(bp);
-
- if (bp->flags & B44_FLAG_EXTERNAL_PHY)
- return 0;
- @@ -2169,6 +2194,8 @@ static int b44_get_invariants(struct b44
- * valid PHY address. */
- bp->phy_addr &= 0x1F;
-
- + b44_bcm47xx_workarounds(bp);
- +
- memcpy(bp->dev->dev_addr, addr, ETH_ALEN);
-
- if (!is_valid_ether_addr(&bp->dev->dev_addr[0])){
|