value = phy_read(phydev, AT803X_INTR_ENABLE);
 
        if (phydev->interrupts == PHY_INTERRUPT_ENABLED) {
+               /* Clear any pending interrupts */
+               err = at803x_ack_interrupt(phydev);
+               if (err)
+                       return err;
+
                value |= AT803X_INTR_ENABLE_AUTONEG_ERR;
                value |= AT803X_INTR_ENABLE_SPEED_CHANGED;
                value |= AT803X_INTR_ENABLE_DUPLEX_CHANGED;
                value |= AT803X_INTR_ENABLE_LINK_SUCCESS;
 
                err = phy_write(phydev, AT803X_INTR_ENABLE, value);
-       }
-       else
+       } else {
                err = phy_write(phydev, AT803X_INTR_ENABLE, 0);
+               if (err)
+                       return err;
+
+               /* Clear any pending interrupts */
+               err = at803x_ack_interrupt(phydev);
+       }
 
        return err;
 }
        .resume                 = at803x_resume,
        /* PHY_GBIT_FEATURES */
        .read_status            = at803x_read_status,
-       .ack_interrupt          = at803x_ack_interrupt,
        .config_intr            = at803x_config_intr,
        .handle_interrupt       = at803x_handle_interrupt,
        .get_tunable            = at803x_get_tunable,
        .suspend                = at803x_suspend,
        .resume                 = at803x_resume,
        /* PHY_BASIC_FEATURES */
-       .ack_interrupt          = at803x_ack_interrupt,
        .config_intr            = at803x_config_intr,
        .handle_interrupt       = at803x_handle_interrupt,
 }, {
        /* PHY_GBIT_FEATURES */
        .read_status            = at803x_read_status,
        .aneg_done              = at803x_aneg_done,
-       .ack_interrupt          = &at803x_ack_interrupt,
        .config_intr            = &at803x_config_intr,
        .handle_interrupt       = at803x_handle_interrupt,
        .get_tunable            = at803x_get_tunable,
        .suspend                = at803x_suspend,
        .resume                 = at803x_resume,
        /* PHY_BASIC_FEATURES */
-       .ack_interrupt          = at803x_ack_interrupt,
        .config_intr            = at803x_config_intr,
        .handle_interrupt       = at803x_handle_interrupt,
        .cable_test_start       = at803x_cable_test_start,
        .resume                 = at803x_resume,
        .flags                  = PHY_POLL_CABLE_TEST,
        /* PHY_BASIC_FEATURES */
-       .ack_interrupt          = &at803x_ack_interrupt,
        .config_intr            = &at803x_config_intr,
        .handle_interrupt       = at803x_handle_interrupt,
        .cable_test_start       = at803x_cable_test_start,