aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorUlf Hansson <ulf.hansson@linaro.org>2016-10-27 13:23:54 +0200
committerSimon Horman <horms+renesas@verge.net.au>2016-12-05 11:31:47 +0100
commit783b51fe2e1d2e51d5c0db65f66f4002a5619177 (patch)
tree0451cd889a5b6ab2f52afc200996aba4478de22f
parenta909d3e636995ba7c349e2ca5dbb528154d4ac30 (diff)
downloadrenesas-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.c6
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."