| From 9ecb41bd8cf002fd8f3e063db4df81647ddd623c Mon Sep 17 00:00:00 2001 |
| From: Rabin Vincent <rabin.vincent@stericsson.com> |
| Date: Mon, 27 May 2013 16:03:40 +0200 |
| Subject: dmaengine: ste_dma40: fix pm runtime ref counting |
| |
| From: Rabin Vincent <rabin.vincent@stericsson.com> |
| |
| commit 9ecb41bd8cf002fd8f3e063db4df81647ddd623c upstream. |
| |
| The pm runtime reference counting of the driver is broken for the case |
| when there is more than one transfer queued, leading to the device being |
| runtime suspend while active. Fix it. |
| |
| Signed-off-by: Rabin Vincent <rabin.vincent@stericsson.com> |
| Acked-by: Linus Walleij <linus.walleij@linaro.org> |
| Signed-off-by: Vinod Koul <vinod.koul@intel.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/dma/ste_dma40.c | 8 +++++--- |
| 1 file changed, 5 insertions(+), 3 deletions(-) |
| |
| --- a/drivers/dma/ste_dma40.c |
| +++ b/drivers/dma/ste_dma40.c |
| @@ -1566,10 +1566,12 @@ static void dma_tc_handle(struct d40_cha |
| return; |
| } |
| |
| - if (d40_queue_start(d40c) == NULL) |
| + if (d40_queue_start(d40c) == NULL) { |
| d40c->busy = false; |
| - pm_runtime_mark_last_busy(d40c->base->dev); |
| - pm_runtime_put_autosuspend(d40c->base->dev); |
| + |
| + pm_runtime_mark_last_busy(d40c->base->dev); |
| + pm_runtime_put_autosuspend(d40c->base->dev); |
| + } |
| |
| d40_desc_remove(d40d); |
| d40_desc_done(d40c, d40d); |