]> git.ipfire.org Git - thirdparty/openembedded/openembedded-core-contrib.git/blob
cc6663fa212c11ebeaedf07b187df78d9d4c2f3d
[thirdparty/openembedded/openembedded-core-contrib.git] /
1 From e34564db95627ad20e918b240c45e2bd5555f7e8 Mon Sep 17 00:00:00 2001
2 From: Tomi Valkeinen <tomi.valkeinen@nokia.com>
3 Date: Wed, 22 Apr 2009 10:06:08 +0300
4 Subject: [PATCH] OMAP2/3: DMA: implement trans copy and const fill
5
6 Implement transparent copy and constant fill features for OMAP2/3.
7
8 Signed-off-by: Tomi Valkeinen <tomi.valkeinen@nokia.com>
9 ---
10 arch/arm/plat-omap/dma.c | 81 +++++++++++++++++++++------------
11 arch/arm/plat-omap/include/mach/dma.h | 1 +
12 2 files changed, 52 insertions(+), 30 deletions(-)
13
14 diff --git a/arch/arm/plat-omap/dma.c b/arch/arm/plat-omap/dma.c
15 index 3fd0e77..060ac71 100755
16 --- a/arch/arm/plat-omap/dma.c
17 +++ b/arch/arm/plat-omap/dma.c
18 @@ -310,41 +310,62 @@ EXPORT_SYMBOL(omap_set_dma_transfer_params);
19
20 void omap_set_dma_color_mode(int lch, enum omap_dma_color_mode mode, u32 color)
21 {
22 - u16 w;
23 -
24 BUG_ON(omap_dma_in_1510_mode());
25
26 - if (cpu_class_is_omap2()) {
27 - REVISIT_24XX();
28 - return;
29 - }
30 + if (cpu_class_is_omap1()) {
31 + u16 w;
32
33 - w = dma_read(CCR2(lch));
34 - w &= ~0x03;
35 + w = dma_read(CCR2(lch));
36 + w &= ~0x03;
37
38 - switch (mode) {
39 - case OMAP_DMA_CONSTANT_FILL:
40 - w |= 0x01;
41 - break;
42 - case OMAP_DMA_TRANSPARENT_COPY:
43 - w |= 0x02;
44 - break;
45 - case OMAP_DMA_COLOR_DIS:
46 - break;
47 - default:
48 - BUG();
49 + switch (mode) {
50 + case OMAP_DMA_CONSTANT_FILL:
51 + w |= 0x01;
52 + break;
53 + case OMAP_DMA_TRANSPARENT_COPY:
54 + w |= 0x02;
55 + break;
56 + case OMAP_DMA_COLOR_DIS:
57 + break;
58 + default:
59 + BUG();
60 + }
61 + dma_write(w, CCR2(lch));
62 +
63 + w = dma_read(LCH_CTRL(lch));
64 + w &= ~0x0f;
65 + /* Default is channel type 2D */
66 + if (mode) {
67 + dma_write((u16)color, COLOR_L(lch));
68 + dma_write((u16)(color >> 16), COLOR_U(lch));
69 + w |= 1; /* Channel type G */
70 + }
71 + dma_write(w, LCH_CTRL(lch));
72 }
73 - dma_write(w, CCR2(lch));
74
75 - w = dma_read(LCH_CTRL(lch));
76 - w &= ~0x0f;
77 - /* Default is channel type 2D */
78 - if (mode) {
79 - dma_write((u16)color, COLOR_L(lch));
80 - dma_write((u16)(color >> 16), COLOR_U(lch));
81 - w |= 1; /* Channel type G */
82 + if (cpu_class_is_omap2()) {
83 + u32 val;
84 +
85 + val = dma_read(CCR(lch));
86 + val &= ~((1 << 17) | (1 << 16));
87 +
88 + switch (mode) {
89 + case OMAP_DMA_CONSTANT_FILL:
90 + val |= 1 << 16;
91 + break;
92 + case OMAP_DMA_TRANSPARENT_COPY:
93 + val |= 1 << 17;
94 + break;
95 + case OMAP_DMA_COLOR_DIS:
96 + break;
97 + default:
98 + BUG();
99 + }
100 + dma_write(val, CCR(lch));
101 +
102 + color &= 0xffffff;
103 + dma_write(color, COLOR(lch));
104 }
105 - dma_write(w, LCH_CTRL(lch));
106 }
107 EXPORT_SYMBOL(omap_set_dma_color_mode);
108
109 diff --git a/arch/arm/plat-omap/include/mach/dma.h b/arch/arm/plat-omap/include/mach/dma.h
110 index 224b077..4e34f47 100644
111 --- a/arch/arm/plat-omap/include/mach/dma.h
112 +++ b/arch/arm/plat-omap/include/mach/dma.h
113 @@ -144,6 +144,7 @@
114 #define OMAP_DMA4_CSSA_U(n) 0
115 #define OMAP_DMA4_CDSA_L(n) 0
116 #define OMAP_DMA4_CDSA_U(n) 0
117 +#define OMAP1_DMA_COLOR(n) 0
118
119 /*----------------------------------------------------------------------------*/
120
121 --
122 1.5.6.5
123