Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
[cascardo/linux.git] / drivers / net / ethernet / renesas / sh_eth.c
index 054e795..440ae27 100644 (file)
@@ -1728,7 +1728,7 @@ out:
 static void sh_eth_adjust_link(struct net_device *ndev)
 {
        struct sh_eth_private *mdp = netdev_priv(ndev);
-       struct phy_device *phydev = mdp->phydev;
+       struct phy_device *phydev = ndev->phydev;
        int new_state = 0;
 
        if (phydev->link) {
@@ -1805,51 +1805,48 @@ static int sh_eth_phy_init(struct net_device *ndev)
 
        phy_attached_info(phydev);
 
-       mdp->phydev = phydev;
-
        return 0;
 }
 
 /* PHY control start function */
 static int sh_eth_phy_start(struct net_device *ndev)
 {
-       struct sh_eth_private *mdp = netdev_priv(ndev);
        int ret;
 
        ret = sh_eth_phy_init(ndev);
        if (ret)
                return ret;
 
-       phy_start(mdp->phydev);
+       phy_start(ndev->phydev);
 
        return 0;
 }
 
-static int sh_eth_get_settings(struct net_device *ndev,
-                              struct ethtool_cmd *ecmd)
+static int sh_eth_get_link_ksettings(struct net_device *ndev,
+                                    struct ethtool_link_ksettings *cmd)
 {
        struct sh_eth_private *mdp = netdev_priv(ndev);
        unsigned long flags;
        int ret;
 
-       if (!mdp->phydev)
+       if (!ndev->phydev)
                return -ENODEV;
 
        spin_lock_irqsave(&mdp->lock, flags);
-       ret = phy_ethtool_gset(mdp->phydev, ecmd);
+       ret = phy_ethtool_ksettings_get(ndev->phydev, cmd);
        spin_unlock_irqrestore(&mdp->lock, flags);
 
        return ret;
 }
 
-static int sh_eth_set_settings(struct net_device *ndev,
-                              struct ethtool_cmd *ecmd)
+static int sh_eth_set_link_ksettings(struct net_device *ndev,
+                                    const struct ethtool_link_ksettings *cmd)
 {
        struct sh_eth_private *mdp = netdev_priv(ndev);
        unsigned long flags;
        int ret;
 
-       if (!mdp->phydev)
+       if (!ndev->phydev)
                return -ENODEV;
 
        spin_lock_irqsave(&mdp->lock, flags);
@@ -1857,11 +1854,11 @@ static int sh_eth_set_settings(struct net_device *ndev,
        /* disable tx and rx */
        sh_eth_rcv_snd_disable(ndev);
 
-       ret = phy_ethtool_sset(mdp->phydev, ecmd);
+       ret = phy_ethtool_ksettings_set(ndev->phydev, cmd);
        if (ret)
                goto error_exit;
 
-       if (ecmd->duplex == DUPLEX_FULL)
+       if (cmd->base.duplex == DUPLEX_FULL)
                mdp->duplex = 1;
        else
                mdp->duplex = 0;
@@ -2072,11 +2069,11 @@ static int sh_eth_nway_reset(struct net_device *ndev)
        unsigned long flags;
        int ret;
 
-       if (!mdp->phydev)
+       if (!ndev->phydev)
                return -ENODEV;
 
        spin_lock_irqsave(&mdp->lock, flags);
-       ret = phy_start_aneg(mdp->phydev);
+       ret = phy_start_aneg(ndev->phydev);
        spin_unlock_irqrestore(&mdp->lock, flags);
 
        return ret;
@@ -2203,8 +2200,6 @@ static int sh_eth_set_ringparam(struct net_device *ndev,
 }
 
 static const struct ethtool_ops sh_eth_ethtool_ops = {
-       .get_settings   = sh_eth_get_settings,
-       .set_settings   = sh_eth_set_settings,
        .get_regs_len   = sh_eth_get_regs_len,
        .get_regs       = sh_eth_get_regs,
        .nway_reset     = sh_eth_nway_reset,
@@ -2216,6 +2211,8 @@ static const struct ethtool_ops sh_eth_ethtool_ops = {
        .get_sset_count     = sh_eth_get_sset_count,
        .get_ringparam  = sh_eth_get_ringparam,
        .set_ringparam  = sh_eth_set_ringparam,
+       .get_link_ksettings = sh_eth_get_link_ksettings,
+       .set_link_ksettings = sh_eth_set_link_ksettings,
 };
 
 /* network device open function */
@@ -2413,10 +2410,9 @@ static int sh_eth_close(struct net_device *ndev)
        sh_eth_dev_exit(ndev);
 
        /* PHY Disconnect */
-       if (mdp->phydev) {
-               phy_stop(mdp->phydev);
-               phy_disconnect(mdp->phydev);
-               mdp->phydev = NULL;
+       if (ndev->phydev) {
+               phy_stop(ndev->phydev);
+               phy_disconnect(ndev->phydev);
        }
 
        free_irq(ndev->irq, ndev);
@@ -2434,8 +2430,7 @@ static int sh_eth_close(struct net_device *ndev)
 /* ioctl to device function */
 static int sh_eth_do_ioctl(struct net_device *ndev, struct ifreq *rq, int cmd)
 {
-       struct sh_eth_private *mdp = netdev_priv(ndev);
-       struct phy_device *phydev = mdp->phydev;
+       struct phy_device *phydev = ndev->phydev;
 
        if (!netif_running(ndev))
                return -EINVAL;