aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKrzysztof Kozlowski <k.kozlowski@samsung.com>2013-10-21 09:42:50 -0400
committerMark Brown <broonie@linaro.org>2013-10-22 04:35:30 -0400
commit9d7fd21acb2094d38d8560b0b3c91fa31efa6a71 (patch)
tree87cd6330fe79baecc1a2043a9c56678907da2e4e
parent347de6bab4bd0166115a5c90491a05bf9df508ee (diff)
spi/s3c64xx: Fix doubled clock disable on suspend
Fix doubled clock disable and unprepare during PM suspend which triggered the warnings: WARNING: at drivers/clk/clk.c:800 clk_disable+0x18/0x24() Modules linked in: CPU: 0 PID: 1745 Comm: sh Not tainted 3.10.14-01211-ge2549bb-dirty #62 [<c0015980>] (unwind_backtrace+0x0/0x138) from [<c0012a44>] (show_stack+0x10/0x14) [<c0012a44>] (show_stack+0x10/0x14) from [<c0022818>] (warn_slowpath_common+0x4c/0x68) [<c0022818>] (warn_slowpath_common+0x4c/0x68) from [<c0022850>] (warn_slowpath_null+0x1c/0x24) [<c0022850>] (warn_slowpath_null+0x1c/0x24) from [<c036e274>] (clk_disable+0x18/0x24) [<c036e274>] (clk_disable+0x18/0x24) from [<c02d5f78>] (s3c64xx_spi_suspend+0x28/0x54) [<c02d5f78>] (s3c64xx_spi_suspend+0x28/0x54) from [<c02b3a54>] (platform_pm_suspend+0x2c/0x5c) [<c02b3a54>] (platform_pm_suspend+0x2c/0x5c) from [<c02b8a30>] (dpm_run_callback+0x44/0x7c) [<c02b8a30>] (dpm_run_callback+0x44/0x7c) from [<c02b8b70>] (__device_suspend+0x108/0x300) [<c02b8b70>] (__device_suspend+0x108/0x300) from [<c02ba4e0>] (dpm_suspend+0x54/0x208) [<c02ba4e0>] (dpm_suspend+0x54/0x208) from [<c0066bcc>] (suspend_devices_and_enter+0x98/0x458) [<c0066bcc>] (suspend_devices_and_enter+0x98/0x458) from [<c0067150>] (pm_suspend+0x1c4/0x25c) [<c0067150>] (pm_suspend+0x1c4/0x25c) from [<c0066044>] (state_store+0x6c/0xbc) [<c0066044>] (state_store+0x6c/0xbc) from [<c0203290>] (kobj_attr_store+0x14/0x20) [<c0203290>] (kobj_attr_store+0x14/0x20) from [<c0157530>] (sysfs_write_file+0xfc/0x164) [<c0157530>] (sysfs_write_file+0xfc/0x164) from [<c00fd6b0>] (vfs_write+0xbc/0x1bc) [<c00fd6b0>] (vfs_write+0xbc/0x1bc) from [<c00fdaf0>] (SyS_write+0x40/0x68) [<c00fdaf0>] (SyS_write+0x40/0x68) from [<c000ea80>] (ret_fast_syscall+0x0/0x3c) The clocks may be already disabled before suspending. Check PM runtime suspend status and disable clocks only if device is not suspended. During resume do not enable the clocks if device is runtime suspended. Signed-off-by: Krzysztof Kozlowski <k.kozlowski@samsung.com> Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com> Reviewed-by: Sylwester Nawrocki <s.nawrocki@samsung.com> Signed-off-by: Mark Brown <broonie@linaro.org>
-rw-r--r--drivers/spi/spi-s3c64xx.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/drivers/spi/spi-s3c64xx.c b/drivers/spi/spi-s3c64xx.c
index 435406b48fda..1dbdcc7b9ea7 100644
--- a/drivers/spi/spi-s3c64xx.c
+++ b/drivers/spi/spi-s3c64xx.c
@@ -1481,9 +1481,10 @@ static int s3c64xx_spi_suspend(struct device *dev)
1481 if (ret) 1481 if (ret)
1482 return ret; 1482 return ret;
1483 1483
1484 /* Disable the clock */ 1484 if (!pm_runtime_suspended(dev)) {
1485 clk_disable_unprepare(sdd->src_clk); 1485 clk_disable_unprepare(sdd->clk);
1486 clk_disable_unprepare(sdd->clk); 1486 clk_disable_unprepare(sdd->src_clk);
1487 }
1487 1488
1488 sdd->cur_speed = 0; /* Output Clock is stopped */ 1489 sdd->cur_speed = 0; /* Output Clock is stopped */
1489 1490
@@ -1499,9 +1500,10 @@ static int s3c64xx_spi_resume(struct device *dev)
1499 if (sci->cfg_gpio) 1500 if (sci->cfg_gpio)
1500 sci->cfg_gpio(); 1501 sci->cfg_gpio();
1501 1502
1502 /* Enable the clock */ 1503 if (!pm_runtime_suspended(dev)) {
1503 clk_prepare_enable(sdd->src_clk); 1504 clk_prepare_enable(sdd->src_clk);
1504 clk_prepare_enable(sdd->clk); 1505 clk_prepare_enable(sdd->clk);
1506 }
1505 1507
1506 s3c64xx_spi_hwinit(sdd, sdd->port_id); 1508 s3c64xx_spi_hwinit(sdd, sdd->port_id);
1507 1509