diff options
Diffstat (limited to 'drivers/net/phy/phy.c')
-rw-r--r-- | drivers/net/phy/phy.c | 9 |
1 files changed, 3 insertions, 6 deletions
diff --git a/drivers/net/phy/phy.c b/drivers/net/phy/phy.c index 2b1e67bc1e73..ed10d1fc8f59 100644 --- a/drivers/net/phy/phy.c +++ b/drivers/net/phy/phy.c | |||
@@ -828,7 +828,6 @@ EXPORT_SYMBOL(phy_stop); | |||
828 | */ | 828 | */ |
829 | void phy_start(struct phy_device *phydev) | 829 | void phy_start(struct phy_device *phydev) |
830 | { | 830 | { |
831 | bool do_resume = false; | ||
832 | int err = 0; | 831 | int err = 0; |
833 | 832 | ||
834 | mutex_lock(&phydev->lock); | 833 | mutex_lock(&phydev->lock); |
@@ -841,6 +840,9 @@ void phy_start(struct phy_device *phydev) | |||
841 | phydev->state = PHY_UP; | 840 | phydev->state = PHY_UP; |
842 | break; | 841 | break; |
843 | case PHY_HALTED: | 842 | case PHY_HALTED: |
843 | /* if phy was suspended, bring the physical link up again */ | ||
844 | phy_resume(phydev); | ||
845 | |||
844 | /* make sure interrupts are re-enabled for the PHY */ | 846 | /* make sure interrupts are re-enabled for the PHY */ |
845 | if (phydev->irq != PHY_POLL) { | 847 | if (phydev->irq != PHY_POLL) { |
846 | err = phy_enable_interrupts(phydev); | 848 | err = phy_enable_interrupts(phydev); |
@@ -849,17 +851,12 @@ void phy_start(struct phy_device *phydev) | |||
849 | } | 851 | } |
850 | 852 | ||
851 | phydev->state = PHY_RESUMING; | 853 | phydev->state = PHY_RESUMING; |
852 | do_resume = true; | ||
853 | break; | 854 | break; |
854 | default: | 855 | default: |
855 | break; | 856 | break; |
856 | } | 857 | } |
857 | mutex_unlock(&phydev->lock); | 858 | mutex_unlock(&phydev->lock); |
858 | 859 | ||
859 | /* if phy was suspended, bring the physical link up again */ | ||
860 | if (do_resume) | ||
861 | phy_resume(phydev); | ||
862 | |||
863 | phy_trigger_machine(phydev, true); | 860 | phy_trigger_machine(phydev, true); |
864 | } | 861 | } |
865 | EXPORT_SYMBOL(phy_start); | 862 | EXPORT_SYMBOL(phy_start); |