change memcpy dma path
authorroot <root@huangds-desktop.(none)>
Fri, 28 Jan 2011 06:49:56 +0000 (14:49 +0800)
committerroot <root@huangds-desktop.(none)>
Fri, 28 Jan 2011 06:49:56 +0000 (14:49 +0800)
arch/arm/mach-rk29/dma.c
arch/arm/mach-rk29/memcpy_dma.c

index 5799662ca1dff3152609da546d87c547db80e30b..9a78755304888ec7f3c7292727db8f2da053975b 100755 (executable)
@@ -30,7 +30,7 @@ static struct rk29_pl330_platdata rk29_dmac0_pdata = {
                [4] = DMACH_I2S_2CH_TX,
                [5] = DMACH_I2S_2CH_RX,
                [6] = DMACH_SPDIF,
-        [7] = DMACH_DMAC0_MEMTOMEM,
+        [7] = DMACH_MAX,
                [8] = DMACH_MAX,
                [9] = DMACH_MAX,
                [10] = DMACH_MAX,
@@ -83,8 +83,9 @@ static struct rk29_pl330_platdata rk29_dmac2_pdata = {
                [11] = DMACH_SPI0_RX,
                [12] = DMACH_SPI1_TX,
                [13] = DMACH_SPI1_RX,
-               [14] = DMACH_PID_FILTER,
-               [15] = DMACH_MAX,
+               [14] = DMACH_PID_FILTER, 
+        [15] = DMACH_DMAC0_MEMTOMEM,
+               [16] = DMACH_MAX,
        },
 };
 
index da17f9018256adbeb667732a5de07ad23feea719..d7db46d944e1dd72289c9d787430519bd37a536c 100755 (executable)
@@ -14,6 +14,7 @@
 \r
 static DECLARE_WAIT_QUEUE_HEAD(wq);\r
 static int wq_condition = 0;\r
+//wait_queue_head_t    dma_memcpy_wait;\r
 \r
 static struct rk29_dma_client rk29_dma_memcpy_client = {\r
         .name = "rk29-dma-memcpy",\r
@@ -31,6 +32,7 @@ static void rk29_dma_memcpy_callback(struct rk29_dma_chan *dma_ch, void *buf_id,
 {\r
     wq_condition = 1;\r
        wake_up_interruptible(&wq);\r
+       //wake_up_interruptible(&dma_memcpy_wait);\r
 }\r
 \r
 //int slecount = 0;\r
@@ -53,16 +55,14 @@ static ssize_t memcpy_dma_write (struct device *device,struct device_attribute *
     struct Dma_MemToMem  *DmaMemInfo = (struct Dma_MemToMem *)argv;\r
 \r
 \r
-    dma_flag = rk29_dma_request(DMACH_DMAC0_MEMTOMEM, &rk29_dma_memcpy_client, NULL);           \r
-    dma_flag = DMACH_DMAC0_MEMTOMEM;\r
-\r
-    rt = rk29_dma_devconfig(dma_flag, RK29_DMASRC_MEMTOMEM, DmaMemInfo->SrcAddr);\r
-    rt = rk29_dma_config(dma_flag, 8);\r
-    rt = rk29_dma_set_buffdone_fn(dma_flag, rk29_dma_memcpy_callback);\r
-    rt = rk29_dma_enqueue(dma_flag, NULL, DmaMemInfo->DstAddr, DmaMemInfo->MenSize);\r
-    rt = rk29_dma_ctrl(dma_flag, RK29_DMAOP_START);    \r
-    wait_event_interruptible_timeout(wq, wq_condition, HZ/20);\r
\r
+    rt = rk29_dma_devconfig(DMACH_DMAC0_MEMTOMEM, RK29_DMASRC_MEMTOMEM, DmaMemInfo->SrcAddr);\r
+    rt = rk29_dma_enqueue(DMACH_DMAC0_MEMTOMEM, NULL, DmaMemInfo->DstAddr, DmaMemInfo->MenSize);\r
+    rt = rk29_dma_ctrl(DMACH_DMAC0_MEMTOMEM, RK29_DMAOP_START);    \r
+    wait_event_interruptible_timeout(wq, wq_condition, 200);\r
     wq_condition = 0;  \r
+       //init_waitqueue_head(&dma_memcpy_wait);\r
+       //interruptible_sleep_on(&dma_memcpy_wait);\r
     return 0;\r
 }\r
 \r
@@ -74,6 +74,9 @@ static int __init dma_memcpy_probe(struct platform_device *pdev)
     int ret;\r
       \r
     ret = device_create_file(&pdev->dev, &driver_attr_dmamemcpy);\r
+    rk29_dma_request(DMACH_DMAC0_MEMTOMEM, &rk29_dma_memcpy_client, NULL); \r
+    rk29_dma_config(DMACH_DMAC0_MEMTOMEM, 8);\r
+    rk29_dma_set_buffdone_fn(DMACH_DMAC0_MEMTOMEM, rk29_dma_memcpy_callback);\r
     if(ret)\r
     {\r
         printk(">> fb1 dsp win0 info device_create_file err\n");\r