diff options
author | David S. Miller <davem@davemloft.net> | 2013-12-17 14:42:57 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2013-12-17 14:42:57 -0500 |
commit | b80b376c4451cc0d671a2b2f2191ea3f9857bd9f (patch) | |
tree | ed294b23c4e02b34473e3c56f6c0d2599d8f2a1d /drivers/net/phy/phy.c | |
parent | be78cfcb25fd163ad7c415cdc0ff343fbc8d22ec (diff) | |
parent | be9dad1f9f26604fb71c0d53ccb39a8f1d425807 (diff) |
Merge branch 'phy_power'
Sebastian Hesselbarth says:
====================
net: phy: Ethernet PHY powerdown optimization
This is v2 of the ethernet PHY power optimization patches to reduce
power consumption of network PHYs with link that are either unused or
the corresponding netdev is down.
Compared to the last version, this patch set drops a patch to disable
unused PHYs after late initcall, as it is not compatible with a modular
mdio bus [1]. I'll investigate different ways to have a modular mdio bus
driver get notified when driver loading is done.
Again, a branch with v2 applied to v3.13-rc2 can also be found at
https://github.com/shesselba/linux-dove.git topic/ethphy-power-v2
[1] http://www.spinics.net/lists/arm-kernel/msg293028.html
====================
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/phy/phy.c')
-rw-r--r-- | drivers/net/phy/phy.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/drivers/net/phy/phy.c b/drivers/net/phy/phy.c index e3dd69100da..dea609f86ae 100644 --- a/drivers/net/phy/phy.c +++ b/drivers/net/phy/phy.c @@ -739,7 +739,7 @@ void phy_state_machine(struct work_struct *work) struct delayed_work *dwork = to_delayed_work(work); struct phy_device *phydev = container_of(dwork, struct phy_device, state_queue); - int needs_aneg = 0; + int needs_aneg = 0, do_suspend = 0; int err = 0; mutex_lock(&phydev->lock); @@ -854,6 +854,7 @@ void phy_state_machine(struct work_struct *work) phydev->link = 0; netif_carrier_off(phydev->attached_dev); phydev->adjust_link(phydev->attached_dev); + do_suspend = 1; } break; case PHY_RESUMING: @@ -912,6 +913,9 @@ void phy_state_machine(struct work_struct *work) if (needs_aneg) err = phy_start_aneg(phydev); + if (do_suspend) + phy_suspend(phydev); + if (err < 0) phy_error(phydev); |