aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/phy/phy_device.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/phy/phy_device.c')
-rw-r--r--drivers/net/phy/phy_device.c19
1 files changed, 10 insertions, 9 deletions
diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c
index 82514e72b3d8..2f6989b1e0dc 100644
--- a/drivers/net/phy/phy_device.c
+++ b/drivers/net/phy/phy_device.c
@@ -683,10 +683,9 @@ EXPORT_SYMBOL(phy_detach);
683int phy_suspend(struct phy_device *phydev) 683int phy_suspend(struct phy_device *phydev)
684{ 684{
685 struct phy_driver *phydrv = to_phy_driver(phydev->dev.driver); 685 struct phy_driver *phydrv = to_phy_driver(phydev->dev.driver);
686 struct ethtool_wolinfo wol; 686 struct ethtool_wolinfo wol = { .cmd = ETHTOOL_GWOL };
687 687
688 /* If the device has WOL enabled, we cannot suspend the PHY */ 688 /* If the device has WOL enabled, we cannot suspend the PHY */
689 wol.cmd = ETHTOOL_GWOL;
690 phy_ethtool_get_wol(phydev, &wol); 689 phy_ethtool_get_wol(phydev, &wol);
691 if (wol.wolopts) 690 if (wol.wolopts)
692 return -EBUSY; 691 return -EBUSY;
@@ -916,6 +915,8 @@ int genphy_read_status(struct phy_device *phydev)
916 int err; 915 int err;
917 int lpa; 916 int lpa;
918 int lpagb = 0; 917 int lpagb = 0;
918 int common_adv;
919 int common_adv_gb = 0;
919 920
920 /* Update the link, but return if there was an error */ 921 /* Update the link, but return if there was an error */
921 err = genphy_update_link(phydev); 922 err = genphy_update_link(phydev);
@@ -937,7 +938,7 @@ int genphy_read_status(struct phy_device *phydev)
937 938
938 phydev->lp_advertising = 939 phydev->lp_advertising =
939 mii_stat1000_to_ethtool_lpa_t(lpagb); 940 mii_stat1000_to_ethtool_lpa_t(lpagb);
940 lpagb &= adv << 2; 941 common_adv_gb = lpagb & adv << 2;
941 } 942 }
942 943
943 lpa = phy_read(phydev, MII_LPA); 944 lpa = phy_read(phydev, MII_LPA);
@@ -950,25 +951,25 @@ int genphy_read_status(struct phy_device *phydev)
950 if (adv < 0) 951 if (adv < 0)
951 return adv; 952 return adv;
952 953
953 lpa &= adv; 954 common_adv = lpa & adv;
954 955
955 phydev->speed = SPEED_10; 956 phydev->speed = SPEED_10;
956 phydev->duplex = DUPLEX_HALF; 957 phydev->duplex = DUPLEX_HALF;
957 phydev->pause = 0; 958 phydev->pause = 0;
958 phydev->asym_pause = 0; 959 phydev->asym_pause = 0;
959 960
960 if (lpagb & (LPA_1000FULL | LPA_1000HALF)) { 961 if (common_adv_gb & (LPA_1000FULL | LPA_1000HALF)) {
961 phydev->speed = SPEED_1000; 962 phydev->speed = SPEED_1000;
962 963
963 if (lpagb & LPA_1000FULL) 964 if (common_adv_gb & LPA_1000FULL)
964 phydev->duplex = DUPLEX_FULL; 965 phydev->duplex = DUPLEX_FULL;
965 } else if (lpa & (LPA_100FULL | LPA_100HALF)) { 966 } else if (common_adv & (LPA_100FULL | LPA_100HALF)) {
966 phydev->speed = SPEED_100; 967 phydev->speed = SPEED_100;
967 968
968 if (lpa & LPA_100FULL) 969 if (common_adv & LPA_100FULL)
969 phydev->duplex = DUPLEX_FULL; 970 phydev->duplex = DUPLEX_FULL;
970 } else 971 } else
971 if (lpa & LPA_10FULL) 972 if (common_adv & LPA_10FULL)
972 phydev->duplex = DUPLEX_FULL; 973 phydev->duplex = DUPLEX_FULL;
973 974
974 if (phydev->duplex == DUPLEX_FULL) { 975 if (phydev->duplex == DUPLEX_FULL) {