dmaengine: qcom_hidma: report transfer errors with new interface
authorSinan Kaya <okaya@codeaurora.org>
Wed, 31 Aug 2016 15:10:28 +0000 (11:10 -0400)
committerVinod Koul <vinod.koul@intel.com>
Wed, 31 Aug 2016 15:57:32 +0000 (21:27 +0530)
Pass the DMA errors to the client by passing a result argument. The HW only
supports a generic error when something goes wrong. That's why, using
DMA_TRANS_ABORTED all the time.

Signed-off-by: Sinan Kaya <okaya@codeaurora.org>
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
drivers/dma/qcom/hidma.c

index b8493ba..ea24863 100644 (file)
@@ -126,6 +126,7 @@ static void hidma_process_completed(struct hidma_chan *mchan)
        list_for_each_entry_safe(mdesc, next, &list, node) {
                enum dma_status llstat;
                struct dmaengine_desc_callback cb;
+               struct dmaengine_result result;
 
                desc = &mdesc->desc;
 
@@ -141,10 +142,15 @@ static void hidma_process_completed(struct hidma_chan *mchan)
 
                spin_lock_irqsave(&mchan->lock, irqflags);
                list_move(&mdesc->node, &mchan->free);
-               spin_unlock_irqrestore(&mchan->lock, irqflags);
 
                if (llstat == DMA_COMPLETE)
-                       dmaengine_desc_callback_invoke(&cb, NULL);
+                       result.result = DMA_TRANS_NOERROR;
+               else
+                       result.result = DMA_TRANS_ABORTED;
+
+               spin_unlock_irqrestore(&mchan->lock, irqflags);
+
+               dmaengine_desc_callback_invoke(&cb, &result);
        }
 }