aboutsummaryrefslogtreecommitdiffstats
path: root/extras/recipes-kernel/linux/linux-omap-psp-2.6.32/omap3-touchbook/0008-DSS2-OMAPFB-Translate-X-Y-coordinates-for-the-video-.patch
diff options
context:
space:
mode:
Diffstat (limited to 'extras/recipes-kernel/linux/linux-omap-psp-2.6.32/omap3-touchbook/0008-DSS2-OMAPFB-Translate-X-Y-coordinates-for-the-video-.patch')
-rw-r--r--extras/recipes-kernel/linux/linux-omap-psp-2.6.32/omap3-touchbook/0008-DSS2-OMAPFB-Translate-X-Y-coordinates-for-the-video-.patch99
1 files changed, 99 insertions, 0 deletions
diff --git a/extras/recipes-kernel/linux/linux-omap-psp-2.6.32/omap3-touchbook/0008-DSS2-OMAPFB-Translate-X-Y-coordinates-for-the-video-.patch b/extras/recipes-kernel/linux/linux-omap-psp-2.6.32/omap3-touchbook/0008-DSS2-OMAPFB-Translate-X-Y-coordinates-for-the-video-.patch
new file mode 100644
index 00000000..5d6ff3fb
--- /dev/null
+++ b/extras/recipes-kernel/linux/linux-omap-psp-2.6.32/omap3-touchbook/0008-DSS2-OMAPFB-Translate-X-Y-coordinates-for-the-video-.patch
@@ -0,0 +1,99 @@
+From 07396a332c4f3d6ed4ff498cb08d0338c98dc612 Mon Sep 17 00:00:00 2001
+From: Tim Yamin <plasm@roo.me.uk>
+Date: Mon, 20 Apr 2009 20:29:11 -0700
+Subject: [PATCH 08/17] DSS2: OMAPFB: Translate X/Y coordinates for the video planes when rotating.
+
+When rotating the video planes, translate the X/Y coordinates such that
+a [0,0] from userspace always maps to the correct upper left corner of
+the display. This patch assumes that you rotate plane 0 before rotating
+plane 1. Patch also corrects the scaling parameters so that the video is
+displayed in the correct orientation (vertically, instead of horizontally)
+when rotating by 90 / 270 degrees.
+
+Signed-off-by: Tim Yamin <plasm@roo.me.uk>
+---
+ drivers/video/omap2/dss/dispc.c | 16 ++++++++++++----
+ drivers/video/omap2/dss/manager.c | 2 +-
+ drivers/video/omap2/dss/overlay.c | 19 ++++++++++++++-----
+ 3 files changed, 27 insertions(+), 10 deletions(-)
+
+diff --git a/drivers/video/omap2/dss/dispc.c b/drivers/video/omap2/dss/dispc.c
+index c6d5fc5..1b38c49 100644
+--- a/drivers/video/omap2/dss/dispc.c
++++ b/drivers/video/omap2/dss/dispc.c
+@@ -1685,10 +1685,18 @@ static int _dispc_setup_plane(enum omap_plane plane,
+ _dispc_set_pic_size(plane, width, height);
+
+ if (plane != OMAP_DSS_GFX) {
+- _dispc_set_scaling(plane, width, height,
+- out_width, out_height,
+- ilace, five_taps, fieldmode);
+- _dispc_set_vid_size(plane, out_width, out_height);
++ if (rotation == 1 || rotation == 3) {
++ _dispc_set_scaling(plane, width, height,
++ out_height, out_width,
++ ilace, five_taps, fieldmode);
++ _dispc_set_vid_size(plane, out_height, out_width);
++ } else {
++ _dispc_set_scaling(plane, width, height,
++ out_width, out_height,
++ ilace, five_taps, fieldmode);
++ _dispc_set_vid_size(plane, out_width, out_height);
++ }
++
+ _dispc_set_vid_color_conv(plane, cconv);
+ }
+
+diff --git a/drivers/video/omap2/dss/manager.c b/drivers/video/omap2/dss/manager.c
+index 27d9c46..7c62dea 100644
+--- a/drivers/video/omap2/dss/manager.c
++++ b/drivers/video/omap2/dss/manager.c
+@@ -702,7 +702,7 @@ static int configure_overlay(enum omap_plane plane)
+ u16 outw, outh;
+ u16 x, y, w, h;
+ u32 paddr;
+- int r;
++ int r, pos_x = 0, pos_y = 0;
+
+ DSSDBGF("%d", plane);
+
+diff --git a/drivers/video/omap2/dss/overlay.c b/drivers/video/omap2/dss/overlay.c
+index b7f9a73..0bc0592 100644
+--- a/drivers/video/omap2/dss/overlay.c
++++ b/drivers/video/omap2/dss/overlay.c
+@@ -374,6 +374,20 @@ int dss_check_overlay(struct omap_overlay *ovl, struct omap_dss_device *dssdev)
+ outh = info->out_height;
+ }
+
++ if ((ovl->supported_modes & info->color_mode) == 0) {
++ DSSERR("overlay doesn't support mode %d\n", info->color_mode);
++ return -EINVAL;
++ }
++
++ if (ovl->id != OMAP_DSS_GFX && (info->rotation == 1 ||
++ info->rotation == 3)) {
++ if(outw > dh || outh > dw)
++ return -EINVAL;
++
++ /* If coordinates are invalid, they will be clipped later... */
++ return 0;
++ }
++
+ if (dw < info->pos_x + outw) {
+ DSSDBG("check_overlay failed 1: %d < %d + %d\n",
+ dw, info->pos_x, outw);
+@@ -386,11 +400,6 @@ int dss_check_overlay(struct omap_overlay *ovl, struct omap_dss_device *dssdev)
+ return -EINVAL;
+ }
+
+- if ((ovl->supported_modes & info->color_mode) == 0) {
+- DSSERR("overlay doesn't support mode %d\n", info->color_mode);
+- return -EINVAL;
+- }
+-
+ return 0;
+ }
+
+--
+1.6.6.1
+