summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcel Ziswiler <marcel.ziswiler@toradex.com>2018-12-27 14:59:47 +0100
committerPhilippe Schenker <philippe.schenker@toradex.com>2018-12-27 15:57:49 +0100
commit26c1553bcb7a1f9ee5a7b5ccdea16decb37df07b (patch)
tree09a43c73917eace7161948b6aa213a62e5bfcb4c
parent50dc45b5d9874b553612adefcbd59ae6c9d9d79b (diff)
Revert "MLK-16769-5: mtd: gpmi-nand runtime pm code change"
This reverts commit 6df9c073cb10a0f10d2fc2bea28f8133b5a89a66. This fixes gpmi-nand being defunct on i.MX 6ULL and i.MX 7S/D just hanging the ubifs background task during DMA. Signed-off-by: Marcel Ziswiler <marcel.ziswiler@toradex.com> Acked-by: Philippe Schenker <philippe.schenker@toradex.com>
-rw-r--r--drivers/mtd/nand/gpmi-nand/gpmi-nand.c29
1 files changed, 11 insertions, 18 deletions
diff --git a/drivers/mtd/nand/gpmi-nand/gpmi-nand.c b/drivers/mtd/nand/gpmi-nand/gpmi-nand.c
index bea204284cd5..f6048409622b 100644
--- a/drivers/mtd/nand/gpmi-nand/gpmi-nand.c
+++ b/drivers/mtd/nand/gpmi-nand/gpmi-nand.c
@@ -900,6 +900,10 @@ static int acquire_resources(struct gpmi_nand_data *this)
if (ret)
goto exit_regs;
+ ret = acquire_dma_channels(this);
+ if (ret)
+ goto exit_regs;
+
ret = gpmi_get_clks(this);
if (ret)
goto exit_clock;
@@ -2468,12 +2472,11 @@ static int gpmi_nand_remove(struct platform_device *pdev)
#ifdef CONFIG_PM_SLEEP
static int gpmi_pm_suspend(struct device *dev)
{
- int ret;
+ struct gpmi_nand_data *this = dev_get_drvdata(dev);
+ release_dma_channels(this);
pinctrl_pm_select_sleep_state(dev);
- ret = pm_runtime_force_suspend(dev);
-
- return ret;
+ return 0;
}
static int gpmi_pm_resume(struct device *dev)
@@ -2481,15 +2484,12 @@ static int gpmi_pm_resume(struct device *dev)
struct gpmi_nand_data *this = dev_get_drvdata(dev);
int ret;
- /* enable clock, acquire dma */
- ret = pm_runtime_force_resume(dev);
- if (ret) {
- dev_err(this->dev, "Error in resume: %d\n", ret);
- return ret;
- }
-
pinctrl_pm_select_default_state(dev);
+ ret = acquire_dma_channels(this);
+ if (ret < 0)
+ return ret;
+
/* re-init the GPMI registers */
this->flags &= ~GPMI_TIMING_INIT_OK;
ret = gpmi_init(this);
@@ -2521,8 +2521,6 @@ int gpmi_runtime_suspend(struct device *dev)
gpmi_disable_clk(this);
release_bus_freq(BUS_FREQ_HIGH);
- release_dma_channels(this);
-
return 0;
}
@@ -2536,11 +2534,6 @@ int gpmi_runtime_resume(struct device *dev)
return ret;
request_bus_freq(BUS_FREQ_HIGH);
-
- ret = acquire_dma_channels(this);
- if (ret < 0)
- return ret;
-
return 0;
}