generic: ar8216: use ar8216_read_port_link to get the CPU port link parameters
authorGabor Juhos <juhosg@openwrt.org>
Wed, 7 Mar 2012 16:32:43 +0000 (16:32 +0000)
committerGabor Juhos <juhosg@openwrt.org>
Wed, 7 Mar 2012 16:32:43 +0000 (16:32 +0000)
SVN-Revision: 30846

target/linux/generic/files/drivers/net/phy/ar8216.c

index 38ccaa36a7aed4119634f515c16e928a59bf7123..2e3a8426b0ec9364b839fa97be23c99dd914bf52 100644 (file)
@@ -929,14 +929,31 @@ static int
 ar8216_read_status(struct phy_device *phydev)
 {
        struct ar8216_priv *priv = phydev->priv;
+       struct switch_port_link link;
        int ret;
        if (phydev->addr != 0) {
                return genphy_read_status(phydev);
        }
 
-       phydev->speed = priv->chip == AR8316 ? SPEED_1000 : SPEED_100;
-       phydev->duplex = DUPLEX_FULL;
-       phydev->link = 1;
+       ar8216_read_port_link(priv, phydev->addr, &link);
+       phydev->link = !!link.link;
+       if (!phydev->link)
+               return 0;
+
+       switch (link.speed) {
+       case SWITCH_PORT_SPEED_10:
+               phydev->speed = SPEED_10;
+               break;
+       case SWITCH_PORT_SPEED_100:
+               phydev->speed = SPEED_100;
+               break;
+       case SWITCH_PORT_SPEED_1000:
+               phydev->speed = SPEED_1000;
+               break;
+       default:
+               phydev->speed = 0;
+       }
+       phydev->duplex = link.duplex ? DUPLEX_FULL : DUPLEX_HALF;
 
        /* flush the address translation unit */
        mutex_lock(&priv->reg_mutex);