summaryrefslogtreecommitdiffstats
path: root/meta/recipes-kernel/linux/linux-omap-2.6.29/dss2/0043-DSS2-Swap-field-0-and-field-1-registers.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta/recipes-kernel/linux/linux-omap-2.6.29/dss2/0043-DSS2-Swap-field-0-and-field-1-registers.patch')
-rw-r--r--meta/recipes-kernel/linux/linux-omap-2.6.29/dss2/0043-DSS2-Swap-field-0-and-field-1-registers.patch170
1 files changed, 170 insertions, 0 deletions
diff --git a/meta/recipes-kernel/linux/linux-omap-2.6.29/dss2/0043-DSS2-Swap-field-0-and-field-1-registers.patch b/meta/recipes-kernel/linux/linux-omap-2.6.29/dss2/0043-DSS2-Swap-field-0-and-field-1-registers.patch
new file mode 100644
index 0000000000..76e37817c4
--- /dev/null
+++ b/meta/recipes-kernel/linux/linux-omap-2.6.29/dss2/0043-DSS2-Swap-field-0-and-field-1-registers.patch
@@ -0,0 +1,170 @@
1From 35e88797e93b107ba602dee1e2ac8ea761dccd4b Mon Sep 17 00:00:00 2001
2From: =?utf-8?q?Ville=20Syrj=C3=A4l=C3=A4?= <ville.syrjala@nokia.com>
3Date: Mon, 20 Apr 2009 16:26:20 +0200
4Subject: [PATCH] DSS2: Swap field 0 and field 1 registers
5MIME-Version: 1.0
6Content-Type: text/plain; charset=utf-8
7Content-Transfer-Encoding: 8bit
8
9The values for the registers which have alternate values for each field
10were reveresed to what the hardware expects. For the hardware field 0
11is the even field or the bottom field, field 1 is the odd field or the
12top field. So simply swap the register values.
13
14Signed-off-by: Ville Syrjälä <ville.syrjala@nokia.com>
15---
16 drivers/video/omap2/dss/dispc.c | 66 ++++++++++++++++++++++-----------------
17 1 files changed, 37 insertions(+), 29 deletions(-)
18
19diff --git a/drivers/video/omap2/dss/dispc.c b/drivers/video/omap2/dss/dispc.c
20index 1c036c1..9bab6cf 100644
21--- a/drivers/video/omap2/dss/dispc.c
22+++ b/drivers/video/omap2/dss/dispc.c
23@@ -1072,12 +1072,16 @@ static void _dispc_set_scaling(enum omap_plane plane,
24
25 dispc_write_reg(dispc_reg_att[plane], l);
26
27+ /*
28+ * field 0 = even field = bottom field
29+ * field 1 = odd field = top field
30+ */
31 if (ilace && !fieldmode) {
32- accu0 = 0;
33- accu1 = fir_vinc / 2;
34- if (accu1 >= 1024/2) {
35- accu0 = 1024/2;
36- accu1 -= accu0;
37+ accu1 = 0;
38+ accu0 = fir_vinc / 2;
39+ if (accu0 >= 1024/2) {
40+ accu1 = 1024/2;
41+ accu0 -= accu1;
42 }
43 }
44
45@@ -1266,34 +1270,38 @@ static void calc_dma_rotation_offset(u8 rotation, bool mirror,
46 fbh = width;
47 }
48
49+ /*
50+ * field 0 = even field = bottom field
51+ * field 1 = odd field = top field
52+ */
53 switch (rotation + mirror * 4) {
54 case 0:
55- *offset0 = 0;
56+ *offset1 = 0;
57 if (fieldmode)
58- *offset1 = screen_width * ps;
59+ *offset0 = screen_width * ps;
60 else
61- *offset1 = 0;
62+ *offset0 = 0;
63 *row_inc = pixinc(1 + (screen_width - fbw) +
64 (fieldmode ? screen_width : 0),
65 ps);
66 *pix_inc = pixinc(1, ps);
67 break;
68 case 1:
69- *offset0 = screen_width * (fbh - 1) * ps;
70+ *offset1 = screen_width * (fbh - 1) * ps;
71 if (fieldmode)
72- *offset1 = *offset0 + ps;
73+ *offset0 = *offset1 + ps;
74 else
75- *offset1 = *offset0;
76+ *offset0 = *offset1;
77 *row_inc = pixinc(screen_width * (fbh - 1) + 1 +
78 (fieldmode ? 1 : 0), ps);
79 *pix_inc = pixinc(-screen_width, ps);
80 break;
81 case 2:
82- *offset0 = (screen_width * (fbh - 1) + fbw - 1) * ps;
83+ *offset1 = (screen_width * (fbh - 1) + fbw - 1) * ps;
84 if (fieldmode)
85- *offset1 = *offset0 - screen_width * ps;
86+ *offset0 = *offset1 - screen_width * ps;
87 else
88- *offset1 = *offset0;
89+ *offset0 = *offset1;
90 *row_inc = pixinc(-1 -
91 (screen_width - fbw) -
92 (fieldmode ? screen_width : 0),
93@@ -1301,11 +1309,11 @@ static void calc_dma_rotation_offset(u8 rotation, bool mirror,
94 *pix_inc = pixinc(-1, ps);
95 break;
96 case 3:
97- *offset0 = (fbw - 1) * ps;
98+ *offset1 = (fbw - 1) * ps;
99 if (fieldmode)
100- *offset1 = *offset0 - ps;
101+ *offset0 = *offset1 - ps;
102 else
103- *offset1 = *offset0;
104+ *offset0 = *offset1;
105 *row_inc = pixinc(-screen_width * (fbh - 1) - 1 -
106 (fieldmode ? 1 : 0), ps);
107 *pix_inc = pixinc(screen_width, ps);
108@@ -1313,11 +1321,11 @@ static void calc_dma_rotation_offset(u8 rotation, bool mirror,
109
110 /* mirroring */
111 case 0 + 4:
112- *offset0 = (fbw - 1) * ps;
113+ *offset1 = (fbw - 1) * ps;
114 if (fieldmode)
115- *offset1 = *offset0 + screen_width * ps;
116+ *offset0 = *offset1 + screen_width * ps;
117 else
118- *offset1 = *offset0;
119+ *offset0 = *offset1;
120 *row_inc = pixinc(screen_width * 2 - 1 +
121 (fieldmode ? screen_width : 0),
122 ps);
123@@ -1325,11 +1333,11 @@ static void calc_dma_rotation_offset(u8 rotation, bool mirror,
124 break;
125
126 case 1 + 4:
127- *offset0 = 0;
128+ *offset1 = 0;
129 if (fieldmode)
130- *offset1 = *offset0 + screen_width * ps;
131+ *offset0 = *offset1 + screen_width * ps;
132 else
133- *offset1 = *offset0;
134+ *offset0 = *offset1;
135 *row_inc = pixinc(-screen_width * (fbh - 1) + 1 +
136 (fieldmode ? 1 : 0),
137 ps);
138@@ -1337,11 +1345,11 @@ static void calc_dma_rotation_offset(u8 rotation, bool mirror,
139 break;
140
141 case 2 + 4:
142- *offset0 = screen_width * (fbh - 1) * ps;
143+ *offset1 = screen_width * (fbh - 1) * ps;
144 if (fieldmode)
145- *offset1 = *offset0 + screen_width * ps;
146+ *offset0 = *offset1 + screen_width * ps;
147 else
148- *offset1 = *offset0;
149+ *offset0 = *offset1;
150 *row_inc = pixinc(1 - screen_width * 2 -
151 (fieldmode ? screen_width : 0),
152 ps);
153@@ -1349,11 +1357,11 @@ static void calc_dma_rotation_offset(u8 rotation, bool mirror,
154 break;
155
156 case 3 + 4:
157- *offset0 = (screen_width * (fbh - 1) + fbw - 1) * ps;
158+ *offset1 = (screen_width * (fbh - 1) + fbw - 1) * ps;
159 if (fieldmode)
160- *offset1 = *offset0 + screen_width * ps;
161+ *offset0 = *offset1 + screen_width * ps;
162 else
163- *offset1 = *offset0;
164+ *offset0 = *offset1;
165 *row_inc = pixinc(screen_width * (fbh - 1) - 1 -
166 (fieldmode ? 1 : 0),
167 ps);
168--
1691.5.6.5
170