On Thu, Nov 26, 2015 at 05:19:11PM +0200, Andy Shevchenko wrote: > We have to call dw_dma_disable() to stop any ongoing transfer. Ok > On some platforms we can't do that since DMA device is powered off. Umm, you said we have ongoing transfer which means DMA should be on..!! > Moreover we have no > possibility at that point to check if the platform is affected or not. That's > why we call pm_runtime_get_sync() / pm_runtime_put() unconditionally. On the > other hand we can't use pm_runtime_suspended() because runtime PM framework is > not fully used by the driver. Shouldn't that be fixed? > > Signed-off-by: Andy Shevchenko <andriy.shevchenko@xxxxxxxxxxxxxxx> > --- > drivers/dma/dw/platform.c | 12 ++++++++++++ > 1 file changed, 12 insertions(+) > > diff --git a/drivers/dma/dw/platform.c b/drivers/dma/dw/platform.c > index 68a4815..d0734e9 100644 > --- a/drivers/dma/dw/platform.c > +++ b/drivers/dma/dw/platform.c > @@ -239,7 +239,19 @@ static void dw_shutdown(struct platform_device *pdev) > { > struct dw_dma_chip *chip = platform_get_drvdata(pdev); > > + /* > + * We have to call dw_dma_disable() to stop any ongoing transfer. On > + * some platforms we can't do that since DMA device is powered off. > + * Moreover we have no possibility to check if the platform is affected > + * or not. That's why we call pm_runtime_get_sync() / pm_runtime_put() > + * unconditionally. On the other hand we can't use > + * pm_runtime_suspended() because runtime PM framework is not fully > + * used by the driver. > + */ > + pm_runtime_get_sync(chip->dev); > dw_dma_disable(chip); > + pm_runtime_put_sync_suspend(chip->dev); > + > clk_disable_unprepare(chip->clk); > } > > -- > 2.6.2 > -- ~Vinod -- To unsubscribe from this list: send the line "unsubscribe dmaengine" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html