gianfar: Fix Wake-on-LAN support

Submitted by Anton Vorontsov on Jan. 28, 2009, 8:35 p.m.

Details

Message ID 20090128203545.GA13928@oksana.dev.rtsoft.ru
State Accepted, archived
Delegated to: Kumar Gala
Headers show

Commit Message

Anton Vorontsov Jan. 28, 2009, 8:35 p.m.
commit 0f0ca340e57bd7446855fefd07a64249acf81223 ("phy: power
management support") caused a regression in the gianfar driver.

Now phylib turns off PHY power during suspend, and thus WOL
doesn't work anymore.

This patch workarounds the issue by enabling wakeup in the MDIO
device, i.e. just restores the old behaviour for the gianfar
driver. Note that this way all PHYs on a given MDIO bus won't
be turned off during suspend, which isn't good from the power
saving point of view.

A proper, per netdevice wakeup management support will need
a bit reworked phylib suspend/resume logic.

Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com>
---
 drivers/net/gianfar_mii.c |    2 ++
 1 files changed, 2 insertions(+), 0 deletions(-)

Comments

David Miller Jan. 30, 2009, 1:31 a.m.
From: Anton Vorontsov <avorontsov@ru.mvista.com>
Date: Wed, 28 Jan 2009 23:35:45 +0300

> commit 0f0ca340e57bd7446855fefd07a64249acf81223 ("phy: power
> management support") caused a regression in the gianfar driver.
> 
> Now phylib turns off PHY power during suspend, and thus WOL
> doesn't work anymore.
> 
> This patch workarounds the issue by enabling wakeup in the MDIO
> device, i.e. just restores the old behaviour for the gianfar
> driver. Note that this way all PHYs on a given MDIO bus won't
> be turned off during suspend, which isn't good from the power
> saving point of view.
> 
> A proper, per netdevice wakeup management support will need
> a bit reworked phylib suspend/resume logic.
> 
> Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com>

Applied, thanks Anton.

Patch hide | download patch | download mbox

diff --git a/drivers/net/gianfar_mii.c b/drivers/net/gianfar_mii.c
index f3706e4..f49a426 100644
--- a/drivers/net/gianfar_mii.c
+++ b/drivers/net/gianfar_mii.c
@@ -234,6 +234,8 @@  static int gfar_mdio_probe(struct of_device *ofdev,
 	if (NULL == new_bus)
 		return -ENOMEM;
 
+	device_init_wakeup(&ofdev->dev, 1);
+
 	new_bus->name = "Gianfar MII Bus",
 	new_bus->read = &gfar_mdio_read,
 	new_bus->write = &gfar_mdio_write,