]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - drivers/net/phy/microchip.c
net: phy: phy drivers should not set SUPPORTED_[Asym_]Pause
[linux.git] / drivers / net / phy / microchip.c
index 7c00e508a101cc13bf1eb542c8e8c26fa51106bf..324fbf6ad8ff8fcc51e92cd2f4d26399b00dfc41 100644 (file)
@@ -106,21 +106,54 @@ static int lan88xx_set_wol(struct phy_device *phydev,
        return 0;
 }
 
+static void lan88xx_set_mdix(struct phy_device *phydev)
+{
+       int buf;
+       int val;
+
+       switch (phydev->mdix_ctrl) {
+       case ETH_TP_MDI:
+               val = LAN88XX_EXT_MODE_CTRL_MDI_;
+               break;
+       case ETH_TP_MDI_X:
+               val = LAN88XX_EXT_MODE_CTRL_MDI_X_;
+               break;
+       case ETH_TP_MDI_AUTO:
+               val = LAN88XX_EXT_MODE_CTRL_AUTO_MDIX_;
+               break;
+       default:
+               return;
+       }
+
+       phy_write(phydev, LAN88XX_EXT_PAGE_ACCESS, LAN88XX_EXT_PAGE_SPACE_1);
+       buf = phy_read(phydev, LAN88XX_EXT_MODE_CTRL);
+       buf &= ~LAN88XX_EXT_MODE_CTRL_MDIX_MASK_;
+       buf |= val;
+       phy_write(phydev, LAN88XX_EXT_MODE_CTRL, buf);
+       phy_write(phydev, LAN88XX_EXT_PAGE_ACCESS, LAN88XX_EXT_PAGE_SPACE_0);
+}
+
+static int lan88xx_config_aneg(struct phy_device *phydev)
+{
+       lan88xx_set_mdix(phydev);
+
+       return genphy_config_aneg(phydev);
+}
+
 static struct phy_driver microchip_phy_driver[] = {
 {
        .phy_id         = 0x0007c130,
        .phy_id_mask    = 0xfffffff0,
        .name           = "Microchip LAN88xx",
 
-       .features       = (PHY_GBIT_FEATURES |
-                          SUPPORTED_Pause | SUPPORTED_Asym_Pause),
+       .features       = PHY_GBIT_FEATURES,
        .flags          = PHY_HAS_INTERRUPT | PHY_HAS_MAGICANEG,
 
        .probe          = lan88xx_probe,
        .remove         = lan88xx_remove,
 
        .config_init    = genphy_config_init,
-       .config_aneg    = genphy_config_aneg,
+       .config_aneg    = lan88xx_config_aneg,
        .read_status    = genphy_read_status,
 
        .ack_interrupt  = lan88xx_phy_ack_interrupt,