jme_phy_on(jme);
        if (test_bit(JME_FLAG_SSET, &jme->flags))
-               jme_set_settings(netdev, &jme->old_ecmd);
+               jme_set_link_ksettings(netdev, &jme->old_cmd);
        else
                jme_reset_phy_processor(jme);
        jme_phy_calibration(jme);
        jme->phylink = 0;
        jme_reset_phy_processor(jme);
        if (test_bit(JME_FLAG_SSET, &jme->flags))
-               jme_set_settings(netdev, &jme->old_ecmd);
+               jme_set_link_ksettings(netdev, &jme->old_cmd);
 
        /*
         * Force to Reset the link again
 }
 
 static int
-jme_get_settings(struct net_device *netdev,
-                    struct ethtool_cmd *ecmd)
+jme_get_link_ksettings(struct net_device *netdev,
+                      struct ethtool_link_ksettings *cmd)
 {
        struct jme_adapter *jme = netdev_priv(netdev);
        int rc;
 
        spin_lock_bh(&jme->phy_lock);
-       rc = mii_ethtool_gset(&(jme->mii_if), ecmd);
+       rc = mii_ethtool_get_link_ksettings(&jme->mii_if, cmd);
        spin_unlock_bh(&jme->phy_lock);
        return rc;
 }
 
 static int
-jme_set_settings(struct net_device *netdev,
-                    struct ethtool_cmd *ecmd)
+jme_set_link_ksettings(struct net_device *netdev,
+                      const struct ethtool_link_ksettings *cmd)
 {
        struct jme_adapter *jme = netdev_priv(netdev);
        int rc, fdc = 0;
 
-       if (ethtool_cmd_speed(ecmd) == SPEED_1000
-           && ecmd->autoneg != AUTONEG_ENABLE)
+       if (cmd->base.speed == SPEED_1000 &&
+           cmd->base.autoneg != AUTONEG_ENABLE)
                return -EINVAL;
 
        /*
         * Hardware would not generate link change interrupt.
         */
        if (jme->mii_if.force_media &&
-       ecmd->autoneg != AUTONEG_ENABLE &&
-       (jme->mii_if.full_duplex != ecmd->duplex))
+           cmd->base.autoneg != AUTONEG_ENABLE &&
+           (jme->mii_if.full_duplex != cmd->base.duplex))
                fdc = 1;
 
        spin_lock_bh(&jme->phy_lock);
-       rc = mii_ethtool_sset(&(jme->mii_if), ecmd);
+       rc = mii_ethtool_set_link_ksettings(&jme->mii_if, cmd);
        spin_unlock_bh(&jme->phy_lock);
 
        if (!rc) {
                if (fdc)
                        jme_reset_link(jme);
-               jme->old_ecmd = *ecmd;
+               jme->old_cmd = *cmd;
                set_bit(JME_FLAG_SSET, &jme->flags);
        }
 
        if (!rc && (cmd == SIOCSMIIREG)) {
                if (duplex_chg)
                        jme_reset_link(jme);
-               jme_get_settings(netdev, &jme->old_ecmd);
+               jme_get_link_ksettings(netdev, &jme->old_cmd);
                set_bit(JME_FLAG_SSET, &jme->flags);
        }
 
        .set_pauseparam         = jme_set_pauseparam,
        .get_wol                = jme_get_wol,
        .set_wol                = jme_set_wol,
-       .get_settings           = jme_get_settings,
-       .set_settings           = jme_set_settings,
        .get_link               = jme_get_link,
        .get_msglevel           = jme_get_msglevel,
        .set_msglevel           = jme_set_msglevel,
        .get_eeprom_len         = jme_get_eeprom_len,
        .get_eeprom             = jme_get_eeprom,
        .set_eeprom             = jme_set_eeprom,
+       .get_link_ksettings     = jme_get_link_ksettings,
+       .set_link_ksettings     = jme_set_link_ksettings,
 };
 
 static int
        jme_clear_pm_disable_wol(jme);
        jme_phy_on(jme);
        if (test_bit(JME_FLAG_SSET, &jme->flags))
-               jme_set_settings(netdev, &jme->old_ecmd);
+               jme_set_link_ksettings(netdev, &jme->old_cmd);
        else
                jme_reset_phy_processor(jme);
        jme_phy_calibration(jme);