return phy_write(phydev, DP83848_MICR, control);
 }
 
+static int dp83848_config_init(struct phy_device *phydev)
+{
+       int err;
+       int val;
+
+       err = genphy_config_init(phydev);
+       if (err < 0)
+               return err;
+
+       /* DP83620 always reports Auto Negotiation Ability on BMSR. Instead,
+        * we check initial value of BMCR Auto negotiation enable bit
+        */
+       val = phy_read(phydev, MII_BMCR);
+       if (!(val & BMCR_ANENABLE))
+               phydev->autoneg = AUTONEG_DISABLE;
+
+       return 0;
+}
+
 static struct mdio_device_id __maybe_unused dp83848_tbl[] = {
        { TI_DP83848C_PHY_ID, 0xfffffff0 },
        { NS_DP83848C_PHY_ID, 0xfffffff0 },
 };
 MODULE_DEVICE_TABLE(mdio, dp83848_tbl);
 
-#define DP83848_PHY_DRIVER(_id, _name)                         \
+#define DP83848_PHY_DRIVER(_id, _name, _config_init)           \
        {                                                       \
                .phy_id         = _id,                          \
                .phy_id_mask    = 0xfffffff0,                   \
                .flags          = PHY_HAS_INTERRUPT,            \
                                                                \
                .soft_reset     = genphy_soft_reset,            \
-               .config_init    = genphy_config_init,           \
+               .config_init    = _config_init,                 \
                .suspend        = genphy_suspend,               \
                .resume         = genphy_resume,                \
                                                                \
        }
 
 static struct phy_driver dp83848_driver[] = {
-       DP83848_PHY_DRIVER(TI_DP83848C_PHY_ID, "TI DP83848C 10/100 Mbps PHY"),
-       DP83848_PHY_DRIVER(NS_DP83848C_PHY_ID, "NS DP83848C 10/100 Mbps PHY"),
-       DP83848_PHY_DRIVER(TI_DP83620_PHY_ID, "TI DP83620 10/100 Mbps PHY"),
-       DP83848_PHY_DRIVER(TLK10X_PHY_ID, "TI TLK10X 10/100 Mbps PHY"),
+       DP83848_PHY_DRIVER(TI_DP83848C_PHY_ID, "TI DP83848C 10/100 Mbps PHY",
+                          genphy_config_init),
+       DP83848_PHY_DRIVER(NS_DP83848C_PHY_ID, "NS DP83848C 10/100 Mbps PHY",
+                          genphy_config_init),
+       DP83848_PHY_DRIVER(TI_DP83620_PHY_ID, "TI DP83620 10/100 Mbps PHY",
+                          dp83848_config_init),
+       DP83848_PHY_DRIVER(TLK10X_PHY_ID, "TI TLK10X 10/100 Mbps PHY",
+                          genphy_config_init),
 };
 module_phy_driver(dp83848_driver);