From b6a7ab72bd6e6547c917d5ffed9f415369e658c3 Mon Sep 17 00:00:00 2001 From: Haijian Ma Date: Wed, 4 Nov 2020 14:43:36 +0800 Subject: [PATCH] spi: disable_depth > 0 when pm runtime get sync Port the spi changes from bq-6125. when unit suspend, pm_runtime_disalbe() would be called. And then dev.power.disable_depth number will +1. And its value will be -1 when pm_runtime_enable() is called. And if spi bus want to work as soon as system resume, it will call pm_runtime_get_sync(), which would check the value of disable_depth. If its value is not 0, spi operation will fail. The sequence is as following: runtime_suspend pm_runtime_disable()-> disable_depth +1 rumtime_resume pm_runtime_eanble() -> disable_depth -1 spi_sync() pm_runtime_get_sync -> check the value of disable_depth But for sometimes, spi operation will earlier than pm_runtime_enable() called. Then spi_sync() will fail duel to non-zero disable_depth value. So we add a checking logic before pm_runtime_get_sync() to make sure disable_depth is 0. Change-Id: I673363bfd861402b5c54874137b12700ef2df14d Signed-off-by: wengjun1 Reviewed-on: https://gerrit.mot.com/1793166 SLTApproved: Slta Waiver SME-Granted: SME Approvals Granted Tested-by: Jira Key Reviewed-by: Wei Wei Reviewed-by: Huosheng Liao Submit-Approved: Jira Key --- drivers/spi/spi-msm-geni.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/spi/spi-msm-geni.c b/drivers/spi/spi-msm-geni.c index 200955a3a6db..4a20a269906e 100644 --- a/drivers/spi/spi-msm-geni.c +++ b/drivers/spi/spi-msm-geni.c @@ -1366,6 +1366,12 @@ static int spi_geni_prepare_transfer_hardware(struct spi_master *spi) "%s: Error %d pinctrl_select_state\n", __func__, ret); } + if (mas->dev->power.disable_depth > 0) { + dev_err(mas->dev, "%s:disable_depth not zero %d\n", + __func__, mas->dev->power.disable_depth); + pm_runtime_enable(mas->dev); + } + if (!mas->setup || !mas->shared_ee) { ret = pm_runtime_get_sync(mas->dev); if (ret < 0) {