b44: always set duplex mode why phy changes
authorHauke Mehrtens <hauke@hauke-m.de>
Sun, 2 Mar 2014 16:29:34 +0000 (17:29 +0100)
committerDavid S. Miller <davem@davemloft.net>
Mon, 3 Mar 2014 00:05:25 +0000 (19:05 -0500)
Without this patch b44_check_phy() was called when the phy called the
adjust callback. This method only change the mac duplex mode when the
carrier was off. When the phy changed the duplex mode after the carrier
was on the mac was not changed. This happened when an external phy was
used.

Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
Acked-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/broadcom/b44.c

index e8046e1ebd1c8f18dff6e79f07b33807e5b2f123..8a7bf7dad89823fadaa7b98f74ae08fe6a56838b 100644 (file)
@@ -2229,7 +2229,12 @@ static void b44_adjust_link(struct net_device *dev)
        }
 
        if (status_changed) {
-               b44_check_phy(bp);
+               u32 val = br32(bp, B44_TX_CTRL);
+               if (bp->flags & B44_FLAG_FULL_DUPLEX)
+                       val |= TX_CTRL_DUPLEX;
+               else
+                       val &= ~TX_CTRL_DUPLEX;
+               bw32(bp, B44_TX_CTRL, val);
                phy_print_status(phydev);
        }
 }