diff options
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-.patch | 99 |
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 + |