diff options
author | Ulf Hansson <ulf.hansson@linaro.org> | 2016-10-27 13:23:54 +0200 |
---|---|---|
committer | Simon Horman <horms+renesas@verge.net.au> | 2016-12-05 11:31:47 +0100 |
commit | 783b51fe2e1d2e51d5c0db65f66f4002a5619177 (patch) | |
tree | 0451cd889a5b6ab2f52afc200996aba4478de22f | |
parent | a909d3e636995ba7c349e2ca5dbb528154d4ac30 (diff) | |
download | renesas-backport-backport/v4.9-rc3/smsc911x.tar.gz |
net: smsc911x: Synchronize the runtime PM status during system suspendbackport/v4.9-rc3/smsc911x-to-next-20161205backport/v4.9-rc3/smsc911x
The smsc911c driver puts its device into low power state when entering
system suspend. Although it doesn't update the device's runtime PM status
to RPM_SUSPENDED, which causes problems for a parent device.
In particular, when the runtime PM status of the parent is requested to be
updated to RPM_SUSPENDED, the runtime PM core prevent this, because it's
forbidden to runtime suspend a device, which has an active child.
Fix this by updating the runtime PM status of the smsc911x device to
RPM_SUSPENDED during system suspend. In system resume, let's reverse that
action by runtime resuming the device and thus also the parent.
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
Tested-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
(cherry picked from commit 8812872960824681147fad051e6e1406fdfa07f9)
Signed-off-by: Simon Horman <horms+renesas@verge.net.au>
-rw-r--r-- | drivers/net/ethernet/smsc/smsc911x.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/drivers/net/ethernet/smsc/smsc911x.c b/drivers/net/ethernet/smsc/smsc911x.c index e9b8579e624147..65fca9ca26bac5 100644 --- a/drivers/net/ethernet/smsc/smsc911x.c +++ b/drivers/net/ethernet/smsc/smsc911x.c @@ -2584,6 +2584,9 @@ static int smsc911x_suspend(struct device *dev) PMT_CTRL_PM_MODE_D1_ | PMT_CTRL_WOL_EN_ | PMT_CTRL_ED_EN_ | PMT_CTRL_PME_EN_); + pm_runtime_disable(dev); + pm_runtime_set_suspended(dev); + return 0; } @@ -2593,6 +2596,9 @@ static int smsc911x_resume(struct device *dev) struct smsc911x_data *pdata = netdev_priv(ndev); unsigned int to = 100; + pm_runtime_enable(dev); + pm_runtime_resume(dev); + /* Note 3.11 from the datasheet: * "When the LAN9220 is in a power saving state, a write of any * data to the BYTE_TEST register will wake-up the device." |