]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - drivers/net/phy/phy.c
net: phy: simplify handling of PHY_RESUMING in state machine
[linux.git] / drivers / net / phy / phy.c
index 696955d38dd698850154bbb2f015c36e581834df..d03bdbbd1eafef8badf21203dea82d4a4b378526 100644 (file)
@@ -1059,41 +1059,26 @@ void phy_state_machine(struct work_struct *work)
        case PHY_RESUMING:
                if (AUTONEG_ENABLE == phydev->autoneg) {
                        err = phy_aneg_done(phydev);
-                       if (err < 0)
+                       if (err < 0) {
                                break;
-
-                       /* err > 0 if AN is done.
-                        * Otherwise, it's 0, and we're  still waiting for AN
-                        */
-                       if (err > 0) {
-                               err = phy_read_status(phydev);
-                               if (err)
-                                       break;
-
-                               if (phydev->link) {
-                                       phydev->state = PHY_RUNNING;
-                                       phy_link_up(phydev);
-                               } else  {
-                                       phydev->state = PHY_NOLINK;
-                                       phy_link_down(phydev, false);
-                               }
-                       } else {
+                       } else if (!err) {
                                phydev->state = PHY_AN;
                                phydev->link_timeout = PHY_AN_TIMEOUT;
-                       }
-               } else {
-                       err = phy_read_status(phydev);
-                       if (err)
                                break;
-
-                       if (phydev->link) {
-                               phydev->state = PHY_RUNNING;
-                               phy_link_up(phydev);
-                       } else  {
-                               phydev->state = PHY_NOLINK;
-                               phy_link_down(phydev, false);
                        }
                }
+
+               err = phy_read_status(phydev);
+               if (err)
+                       break;
+
+               if (phydev->link) {
+                       phydev->state = PHY_RUNNING;
+                       phy_link_up(phydev);
+               } else  {
+                       phydev->state = PHY_NOLINK;
+                       phy_link_down(phydev, false);
+               }
                break;
        }