LAN88XX_INT_MASK_LINK_CHANGE_);
        } else {
                rc = phy_write(phydev, LAN88XX_INT_MASK, 0);
-       }
-
-       return rc < 0 ? rc : 0;
-}
+               if (rc)
+                       return rc;
 
-static int lan88xx_phy_ack_interrupt(struct phy_device *phydev)
-{
-       int rc = phy_read(phydev, LAN88XX_INT_STS);
+               /* Ack interrupts after they have been disabled */
+               rc = phy_read(phydev, LAN88XX_INT_STS);
+       }
 
        return rc < 0 ? rc : 0;
 }
        .config_init    = lan88xx_config_init,
        .config_aneg    = lan88xx_config_aneg,
 
-       .ack_interrupt  = lan88xx_phy_ack_interrupt,
        .config_intr    = lan88xx_phy_config_intr,
        .handle_interrupt = lan88xx_handle_interrupt,
 
 
                rc = phy_write(phydev, LAN87XX_INTERRUPT_MASK, 0x7FFF);
                rc = phy_read(phydev, LAN87XX_INTERRUPT_SOURCE);
                val = LAN87XX_MASK_LINK_UP | LAN87XX_MASK_LINK_DOWN;
-       }
-
-       rc = phy_write(phydev, LAN87XX_INTERRUPT_MASK, val);
-
-       return rc < 0 ? rc : 0;
-}
+               rc = phy_write(phydev, LAN87XX_INTERRUPT_MASK, val);
+       } else {
+               rc = phy_write(phydev, LAN87XX_INTERRUPT_MASK, val);
+               if (rc)
+                       return rc;
 
-static int lan87xx_phy_ack_interrupt(struct phy_device *phydev)
-{
-       int rc = phy_read(phydev, LAN87XX_INTERRUPT_SOURCE);
+               rc = phy_read(phydev, LAN87XX_INTERRUPT_SOURCE);
+       }
 
        return rc < 0 ? rc : 0;
 }
 
                .config_init    = lan87xx_config_init,
 
-               .ack_interrupt  = lan87xx_phy_ack_interrupt,
                .config_intr    = lan87xx_phy_config_intr,
                .handle_interrupt = lan87xx_handle_interrupt,