updata mmc flush dma when start
authorlhh <lhh@rock-chips.com>
Mon, 24 Jan 2011 08:57:57 +0000 (16:57 +0800)
committerlhh <lhh@rock-chips.com>
Mon, 24 Jan 2011 08:57:57 +0000 (16:57 +0800)
drivers/mmc/host/rk29_sdmmc.c

index bb52797e5fb7cf6f61a3c7e483707d2e81442677..475112ba19333c416dcd5c1e74128628e647e5c8 100755 (executable)
@@ -430,8 +430,7 @@ static void rk29_sdmmc_dma_complete(void *arg, int size, enum rk29_dma_buffresul
 
        if(host->use_dma == 0)
                return;
-       dev_vdbg(&host->pdev->dev, "DMA complete\n");
-                       
+       dev_vdbg(&host->pdev->dev, "DMA complete\n");   
        spin_lock(&host->lock);
        rk29_sdmmc_dma_cleanup(host);
        /*
@@ -490,7 +489,9 @@ static int rk29_sdmmc_submit_data_dma(struct rk29_sdmmc *host, struct mmc_data *
        if(rk29_sdmmc_read(host->regs, SDMMC_STATUS) & SDMMC_STAUTS_FIFO_FULL ) {
                rk29_sdmmc_reset_fifo(host);
                printk("%s %d fifo full reset\n",__FUNCTION__,__LINE__);
-       }                                                       
+       }       
+       rk29_dma_ctrl(host->dma_chn,RK29_DMAOP_STOP);
+       rk29_dma_ctrl(host->dma_chn,RK29_DMAOP_FLUSH);                                          
     rk29_dma_devconfig(host->dma_chn, direction, (unsigned long )(host->dma_addr));
        dma_len = dma_map_sg(&host->pdev->dev, data->sg, data->sg_len, 
                        (data->flags & MMC_DATA_READ)? DMA_FROM_DEVICE : DMA_TO_DEVICE);