[Sound-open-firmware] [PATCH] dma: dw: improve state handling in dw dma driver
Liam Girdwood
liam.r.girdwood at linux.intel.com
Thu Oct 12 23:31:04 CEST 2017
Use the COMP_STATE_READY to indicate a channel has an assigned user and
ready for use.
Signed-off-by: Liam Girdwood <liam.r.girdwood at linux.intel.com>
---
src/drivers/dw-dma.c | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)
diff --git a/src/drivers/dw-dma.c b/src/drivers/dw-dma.c
index 3606611..2289787 100644
--- a/src/drivers/dw-dma.c
+++ b/src/drivers/dw-dma.c
@@ -215,10 +215,10 @@ static int dw_dma_channel_get(struct dma *dma)
for (i = 0; i < DW_MAX_CHAN; i++) {
/* use channel if it's free */
- if (p->chan[i].status != COMP_STATE_READY)
+ if (p->chan[i].status != COMP_STATE_INIT)
continue;
- p->chan[i].status = COMP_STATE_PREPARE;
+ p->chan[i].status = COMP_STATE_READY;
/* unmask block, transfer and error interrupts for channel */
dw_write(dma, DW_MASK_TFR, INT_UNMASK(i));
@@ -255,7 +255,7 @@ static void dw_dma_channel_put_unlocked(struct dma *dma, int channel)
}
/* set new state */
- p->chan[channel].status = COMP_STATE_READY;
+ p->chan[channel].status = COMP_STATE_INIT;
p->chan[channel].cb = NULL;
p->chan[channel].desc_count = 0;
}
@@ -406,7 +406,7 @@ static int dw_dma_stop(struct dma *dma, int channel)
goto out;
}
- p->chan[channel].status = COMP_STATE_PAUSED;
+ p->chan[channel].status = COMP_STATE_PREPARE;
out:
spin_unlock_irq(&dma->lock, flags);
@@ -578,6 +578,7 @@ static int dw_dma_set_config(struct dma *dma, int channel,
#endif
}
+ p->chan[channel].status = COMP_STATE_PREPARE;
spin_unlock_irq(&dma->lock, flags);
return 0;
@@ -842,7 +843,7 @@ static int dw_dma_probe(struct dma *dma)
for (i = 0; i < DW_MAX_CHAN; i++) {
dw_pdata->chan[i].dma = dma;
dw_pdata->chan[i].channel = i;
- dw_pdata->chan[i].status = COMP_STATE_READY;
+ dw_pdata->chan[i].status = COMP_STATE_INIT;
}
/* register our IRQ handler */
--
2.11.0
More information about the Sound-open-firmware
mailing list