return 0;
 }
 
+static int bcm7xxx_apd_enable(struct phy_device *phydev)
+{
+       int val;
+
+       /* Enable powering down of the DLL during auto-power down */
+       val = bcm54xx_shadow_read(phydev, BCM54XX_SHD_SCR3);
+       if (val < 0)
+               return val;
+
+       val |= BCM54XX_SHD_SCR3_DLLAPD_DIS;
+       bcm54xx_shadow_write(phydev, BCM54XX_SHD_SCR3, val);
+
+       /* Enable auto-power down */
+       val = bcm54xx_shadow_read(phydev, BCM54XX_SHD_APD);
+       if (val < 0)
+               return val;
+
+       val |= BCM54XX_SHD_APD_EN;
+       return bcm54xx_shadow_write(phydev, BCM54XX_SHD_APD, val);
+}
+
 static int bcm7xxx_28nm_config_init(struct phy_device *phydev)
 {
        int ret;
        if (ret)
                return ret;
 
-       return bcm7xxx_28nm_afe_config_init(phydev);
+       ret = bcm7xxx_28nm_afe_config_init(phydev);
+       if (ret)
+               return ret;
+
+       return bcm7xxx_apd_enable(phydev);
 }
 
 static int bcm7xxx_28nm_resume(struct phy_device *phydev)