171 lines
4.9 KiB
Diff
171 lines
4.9 KiB
Diff
From 35e88797e93b107ba602dee1e2ac8ea761dccd4b Mon Sep 17 00:00:00 2001
|
|
From: =?utf-8?q?Ville=20Syrj=C3=A4l=C3=A4?= <ville.syrjala@nokia.com>
|
|
Date: Mon, 20 Apr 2009 16:26:20 +0200
|
|
Subject: [PATCH] DSS2: Swap field 0 and field 1 registers
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain; charset=utf-8
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
The values for the registers which have alternate values for each field
|
|
were reveresed to what the hardware expects. For the hardware field 0
|
|
is the even field or the bottom field, field 1 is the odd field or the
|
|
top field. So simply swap the register values.
|
|
|
|
Signed-off-by: Ville Syrjälä <ville.syrjala@nokia.com>
|
|
---
|
|
drivers/video/omap2/dss/dispc.c | 66 ++++++++++++++++++++++-----------------
|
|
1 files changed, 37 insertions(+), 29 deletions(-)
|
|
|
|
diff --git a/drivers/video/omap2/dss/dispc.c b/drivers/video/omap2/dss/dispc.c
|
|
index 1c036c1..9bab6cf 100644
|
|
--- a/drivers/video/omap2/dss/dispc.c
|
|
+++ b/drivers/video/omap2/dss/dispc.c
|
|
@@ -1072,12 +1072,16 @@ static void _dispc_set_scaling(enum omap_plane plane,
|
|
|
|
dispc_write_reg(dispc_reg_att[plane], l);
|
|
|
|
+ /*
|
|
+ * field 0 = even field = bottom field
|
|
+ * field 1 = odd field = top field
|
|
+ */
|
|
if (ilace && !fieldmode) {
|
|
- accu0 = 0;
|
|
- accu1 = fir_vinc / 2;
|
|
- if (accu1 >= 1024/2) {
|
|
- accu0 = 1024/2;
|
|
- accu1 -= accu0;
|
|
+ accu1 = 0;
|
|
+ accu0 = fir_vinc / 2;
|
|
+ if (accu0 >= 1024/2) {
|
|
+ accu1 = 1024/2;
|
|
+ accu0 -= accu1;
|
|
}
|
|
}
|
|
|
|
@@ -1266,34 +1270,38 @@ static void calc_dma_rotation_offset(u8 rotation, bool mirror,
|
|
fbh = width;
|
|
}
|
|
|
|
+ /*
|
|
+ * field 0 = even field = bottom field
|
|
+ * field 1 = odd field = top field
|
|
+ */
|
|
switch (rotation + mirror * 4) {
|
|
case 0:
|
|
- *offset0 = 0;
|
|
+ *offset1 = 0;
|
|
if (fieldmode)
|
|
- *offset1 = screen_width * ps;
|
|
+ *offset0 = screen_width * ps;
|
|
else
|
|
- *offset1 = 0;
|
|
+ *offset0 = 0;
|
|
*row_inc = pixinc(1 + (screen_width - fbw) +
|
|
(fieldmode ? screen_width : 0),
|
|
ps);
|
|
*pix_inc = pixinc(1, ps);
|
|
break;
|
|
case 1:
|
|
- *offset0 = screen_width * (fbh - 1) * ps;
|
|
+ *offset1 = screen_width * (fbh - 1) * ps;
|
|
if (fieldmode)
|
|
- *offset1 = *offset0 + ps;
|
|
+ *offset0 = *offset1 + ps;
|
|
else
|
|
- *offset1 = *offset0;
|
|
+ *offset0 = *offset1;
|
|
*row_inc = pixinc(screen_width * (fbh - 1) + 1 +
|
|
(fieldmode ? 1 : 0), ps);
|
|
*pix_inc = pixinc(-screen_width, ps);
|
|
break;
|
|
case 2:
|
|
- *offset0 = (screen_width * (fbh - 1) + fbw - 1) * ps;
|
|
+ *offset1 = (screen_width * (fbh - 1) + fbw - 1) * ps;
|
|
if (fieldmode)
|
|
- *offset1 = *offset0 - screen_width * ps;
|
|
+ *offset0 = *offset1 - screen_width * ps;
|
|
else
|
|
- *offset1 = *offset0;
|
|
+ *offset0 = *offset1;
|
|
*row_inc = pixinc(-1 -
|
|
(screen_width - fbw) -
|
|
(fieldmode ? screen_width : 0),
|
|
@@ -1301,11 +1309,11 @@ static void calc_dma_rotation_offset(u8 rotation, bool mirror,
|
|
*pix_inc = pixinc(-1, ps);
|
|
break;
|
|
case 3:
|
|
- *offset0 = (fbw - 1) * ps;
|
|
+ *offset1 = (fbw - 1) * ps;
|
|
if (fieldmode)
|
|
- *offset1 = *offset0 - ps;
|
|
+ *offset0 = *offset1 - ps;
|
|
else
|
|
- *offset1 = *offset0;
|
|
+ *offset0 = *offset1;
|
|
*row_inc = pixinc(-screen_width * (fbh - 1) - 1 -
|
|
(fieldmode ? 1 : 0), ps);
|
|
*pix_inc = pixinc(screen_width, ps);
|
|
@@ -1313,11 +1321,11 @@ static void calc_dma_rotation_offset(u8 rotation, bool mirror,
|
|
|
|
/* mirroring */
|
|
case 0 + 4:
|
|
- *offset0 = (fbw - 1) * ps;
|
|
+ *offset1 = (fbw - 1) * ps;
|
|
if (fieldmode)
|
|
- *offset1 = *offset0 + screen_width * ps;
|
|
+ *offset0 = *offset1 + screen_width * ps;
|
|
else
|
|
- *offset1 = *offset0;
|
|
+ *offset0 = *offset1;
|
|
*row_inc = pixinc(screen_width * 2 - 1 +
|
|
(fieldmode ? screen_width : 0),
|
|
ps);
|
|
@@ -1325,11 +1333,11 @@ static void calc_dma_rotation_offset(u8 rotation, bool mirror,
|
|
break;
|
|
|
|
case 1 + 4:
|
|
- *offset0 = 0;
|
|
+ *offset1 = 0;
|
|
if (fieldmode)
|
|
- *offset1 = *offset0 + screen_width * ps;
|
|
+ *offset0 = *offset1 + screen_width * ps;
|
|
else
|
|
- *offset1 = *offset0;
|
|
+ *offset0 = *offset1;
|
|
*row_inc = pixinc(-screen_width * (fbh - 1) + 1 +
|
|
(fieldmode ? 1 : 0),
|
|
ps);
|
|
@@ -1337,11 +1345,11 @@ static void calc_dma_rotation_offset(u8 rotation, bool mirror,
|
|
break;
|
|
|
|
case 2 + 4:
|
|
- *offset0 = screen_width * (fbh - 1) * ps;
|
|
+ *offset1 = screen_width * (fbh - 1) * ps;
|
|
if (fieldmode)
|
|
- *offset1 = *offset0 + screen_width * ps;
|
|
+ *offset0 = *offset1 + screen_width * ps;
|
|
else
|
|
- *offset1 = *offset0;
|
|
+ *offset0 = *offset1;
|
|
*row_inc = pixinc(1 - screen_width * 2 -
|
|
(fieldmode ? screen_width : 0),
|
|
ps);
|
|
@@ -1349,11 +1357,11 @@ static void calc_dma_rotation_offset(u8 rotation, bool mirror,
|
|
break;
|
|
|
|
case 3 + 4:
|
|
- *offset0 = (screen_width * (fbh - 1) + fbw - 1) * ps;
|
|
+ *offset1 = (screen_width * (fbh - 1) + fbw - 1) * ps;
|
|
if (fieldmode)
|
|
- *offset1 = *offset0 + screen_width * ps;
|
|
+ *offset0 = *offset1 + screen_width * ps;
|
|
else
|
|
- *offset1 = *offset0;
|
|
+ *offset0 = *offset1;
|
|
*row_inc = pixinc(screen_width * (fbh - 1) - 1 -
|
|
(fieldmode ? 1 : 0),
|
|
ps);
|
|
--
|
|
1.5.6.5
|
|
|