The duplex bit in MACCONTROL wasn't changed.

Signed-off-by: Troy Kisky <[email protected]>
Signed-off-by: Troy Kisky <[email protected]>

diff --git a/drivers/net/davinci_emac.c b/drivers/net/davinci_emac.c
index 8d83400..8466bef 100644
--- a/drivers/net/davinci_emac.c
+++ b/drivers/net/davinci_emac.c
@@ -485,7 +485,7 @@ struct emac_priv {
        struct emac_rxch *rxch[EMAC_DEF_MAX_RX_CH];
        u32 link; /* 1=link on, 0=link off */
        u32 speed; /* 0=Auto Neg, 1=No PHY, 10,100, 1000 - mbps */
-       u32 duplex; /* Link duplex: 1=Unknown, 2=Half, 3=Full */
+       u32 duplex; /* Link duplex: -1=Unknown, 0=Half, 1=Full */
        u32 rx_buf_size;
        u32 isr_count;
        u8 rmii_en;
@@ -746,17 +746,19 @@ static void emac_update_phystatus(struct emac_priv *priv)
 {
        u32 mac_control;
        u32 new_duplex;
+       u32 cur_duplex;
        struct net_device *ndev = priv->ndev;
 
        mac_control = emac_read(EMAC_MACCONTROL);
-
+       cur_duplex = (mac_control & EMAC_MACCONTROL_FULLDUPLEXEN) ?
+                       DUPLEX_FULL : DUPLEX_HALF;
        if (priv->phy_mask)
                new_duplex = priv->phydev->duplex;
        else
                new_duplex = DUPLEX_FULL;
 
        /* We get called only if link has changed (speed/duplex/status) */
-       if ((priv->link) && (new_duplex != priv->duplex)) {
+       if ((priv->link) && (new_duplex != cur_duplex)) {
                priv->duplex = new_duplex;
                if (DUPLEX_FULL == priv->duplex)
                        mac_control |= (EMAC_MACCONTROL_FULLDUPLEXEN);
-- 
1.5.4.3


_______________________________________________
Davinci-linux-open-source mailing list
[email protected]
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source

Reply via email to