diff options
Diffstat (limited to 'drivers/net/phy/phy_device.c')
-rw-r--r-- | drivers/net/phy/phy_device.c | 19 |
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); | |||
683 | int phy_suspend(struct phy_device *phydev) | 683 | int 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) { |