diff options
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.patch | 170 |
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 @@ | |||
1 | From 35e88797e93b107ba602dee1e2ac8ea761dccd4b Mon Sep 17 00:00:00 2001 | ||
2 | From: =?utf-8?q?Ville=20Syrj=C3=A4l=C3=A4?= <ville.syrjala@nokia.com> | ||
3 | Date: Mon, 20 Apr 2009 16:26:20 +0200 | ||
4 | Subject: [PATCH] DSS2: Swap field 0 and field 1 registers | ||
5 | MIME-Version: 1.0 | ||
6 | Content-Type: text/plain; charset=utf-8 | ||
7 | Content-Transfer-Encoding: 8bit | ||
8 | |||
9 | The values for the registers which have alternate values for each field | ||
10 | were reveresed to what the hardware expects. For the hardware field 0 | ||
11 | is the even field or the bottom field, field 1 is the odd field or the | ||
12 | top field. So simply swap the register values. | ||
13 | |||
14 | Signed-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 | |||
19 | diff --git a/drivers/video/omap2/dss/dispc.c b/drivers/video/omap2/dss/dispc.c | ||
20 | index 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 | -- | ||
169 | 1.5.6.5 | ||
170 | |||