diff options
author | Yuji Sasaki <sasakiy@chromium.org> | 2020-02-14 13:13:40 +0530 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2020-02-21 13:48:08 +0000 |
commit | 136b5cd2e2f97581ae560cff0db2a3b5369112da (patch) | |
tree | f339c4383ef6cb07de6d613a24b6bc1400395e83 /drivers | |
parent | 32f2fc5dc3992b4b60cc6b1a6a31be605cc9c3a2 (diff) | |
download | linux-136b5cd2e2f97581ae560cff0db2a3b5369112da.tar.bz2 |
spi: qup: call spi_qup_pm_resume_runtime before suspending
spi_qup_suspend() will cause synchronous external abort when
runtime suspend is enabled and applied, as it tries to
access SPI controller register while clock is already disabled
in spi_qup_pm_suspend_runtime().
Signed-off-by: Yuji sasaki <sasakiy@chromium.org>
Signed-off-by: Vinod Koul <vkoul@kernel.org>
Link: https://lore.kernel.org/r/20200214074340.2286170-1-vkoul@kernel.org
Signed-off-by: Mark Brown <broonie@kernel.org>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/spi/spi-qup.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/drivers/spi/spi-qup.c b/drivers/spi/spi-qup.c index dd3434a407ea..a364b99497e2 100644 --- a/drivers/spi/spi-qup.c +++ b/drivers/spi/spi-qup.c @@ -1217,6 +1217,11 @@ static int spi_qup_suspend(struct device *device) struct spi_qup *controller = spi_master_get_devdata(master); int ret; + if (pm_runtime_suspended(device)) { + ret = spi_qup_pm_resume_runtime(device); + if (ret) + return ret; + } ret = spi_master_suspend(master); if (ret) return ret; @@ -1225,10 +1230,8 @@ static int spi_qup_suspend(struct device *device) if (ret) return ret; - if (!pm_runtime_suspended(device)) { - clk_disable_unprepare(controller->cclk); - clk_disable_unprepare(controller->iclk); - } + clk_disable_unprepare(controller->cclk); + clk_disable_unprepare(controller->iclk); return 0; } |