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 @@ | |||
1 | From 07396a332c4f3d6ed4ff498cb08d0338c98dc612 Mon Sep 17 00:00:00 2001 | ||
2 | From: Tim Yamin <plasm@roo.me.uk> | ||
3 | Date: Mon, 20 Apr 2009 20:29:11 -0700 | ||
4 | Subject: [PATCH 08/17] DSS2: OMAPFB: Translate X/Y coordinates for the video planes when rotating. | ||
5 | |||
6 | When rotating the video planes, translate the X/Y coordinates such that | ||
7 | a [0,0] from userspace always maps to the correct upper left corner of | ||
8 | the display. This patch assumes that you rotate plane 0 before rotating | ||
9 | plane 1. Patch also corrects the scaling parameters so that the video is | ||
10 | displayed in the correct orientation (vertically, instead of horizontally) | ||
11 | when rotating by 90 / 270 degrees. | ||
12 | |||
13 | Signed-off-by: Tim Yamin <plasm@roo.me.uk> | ||
14 | --- | ||
15 | drivers/video/omap2/dss/dispc.c | 16 ++++++++++++---- | ||
16 | drivers/video/omap2/dss/manager.c | 2 +- | ||
17 | drivers/video/omap2/dss/overlay.c | 19 ++++++++++++++----- | ||
18 | 3 files changed, 27 insertions(+), 10 deletions(-) | ||
19 | |||
20 | diff --git a/drivers/video/omap2/dss/dispc.c b/drivers/video/omap2/dss/dispc.c | ||
21 | index c6d5fc5..1b38c49 100644 | ||
22 | --- a/drivers/video/omap2/dss/dispc.c | ||
23 | +++ b/drivers/video/omap2/dss/dispc.c | ||
24 | @@ -1685,10 +1685,18 @@ static int _dispc_setup_plane(enum omap_plane plane, | ||
25 | _dispc_set_pic_size(plane, width, height); | ||
26 | |||
27 | if (plane != OMAP_DSS_GFX) { | ||
28 | - _dispc_set_scaling(plane, width, height, | ||
29 | - out_width, out_height, | ||
30 | - ilace, five_taps, fieldmode); | ||
31 | - _dispc_set_vid_size(plane, out_width, out_height); | ||
32 | + if (rotation == 1 || rotation == 3) { | ||
33 | + _dispc_set_scaling(plane, width, height, | ||
34 | + out_height, out_width, | ||
35 | + ilace, five_taps, fieldmode); | ||
36 | + _dispc_set_vid_size(plane, out_height, out_width); | ||
37 | + } else { | ||
38 | + _dispc_set_scaling(plane, width, height, | ||
39 | + out_width, out_height, | ||
40 | + ilace, five_taps, fieldmode); | ||
41 | + _dispc_set_vid_size(plane, out_width, out_height); | ||
42 | + } | ||
43 | + | ||
44 | _dispc_set_vid_color_conv(plane, cconv); | ||
45 | } | ||
46 | |||
47 | diff --git a/drivers/video/omap2/dss/manager.c b/drivers/video/omap2/dss/manager.c | ||
48 | index 27d9c46..7c62dea 100644 | ||
49 | --- a/drivers/video/omap2/dss/manager.c | ||
50 | +++ b/drivers/video/omap2/dss/manager.c | ||
51 | @@ -702,7 +702,7 @@ static int configure_overlay(enum omap_plane plane) | ||
52 | u16 outw, outh; | ||
53 | u16 x, y, w, h; | ||
54 | u32 paddr; | ||
55 | - int r; | ||
56 | + int r, pos_x = 0, pos_y = 0; | ||
57 | |||
58 | DSSDBGF("%d", plane); | ||
59 | |||
60 | diff --git a/drivers/video/omap2/dss/overlay.c b/drivers/video/omap2/dss/overlay.c | ||
61 | index b7f9a73..0bc0592 100644 | ||
62 | --- a/drivers/video/omap2/dss/overlay.c | ||
63 | +++ b/drivers/video/omap2/dss/overlay.c | ||
64 | @@ -374,6 +374,20 @@ int dss_check_overlay(struct omap_overlay *ovl, struct omap_dss_device *dssdev) | ||
65 | outh = info->out_height; | ||
66 | } | ||
67 | |||
68 | + if ((ovl->supported_modes & info->color_mode) == 0) { | ||
69 | + DSSERR("overlay doesn't support mode %d\n", info->color_mode); | ||
70 | + return -EINVAL; | ||
71 | + } | ||
72 | + | ||
73 | + if (ovl->id != OMAP_DSS_GFX && (info->rotation == 1 || | ||
74 | + info->rotation == 3)) { | ||
75 | + if(outw > dh || outh > dw) | ||
76 | + return -EINVAL; | ||
77 | + | ||
78 | + /* If coordinates are invalid, they will be clipped later... */ | ||
79 | + return 0; | ||
80 | + } | ||
81 | + | ||
82 | if (dw < info->pos_x + outw) { | ||
83 | DSSDBG("check_overlay failed 1: %d < %d + %d\n", | ||
84 | dw, info->pos_x, outw); | ||
85 | @@ -386,11 +400,6 @@ int dss_check_overlay(struct omap_overlay *ovl, struct omap_dss_device *dssdev) | ||
86 | return -EINVAL; | ||
87 | } | ||
88 | |||
89 | - if ((ovl->supported_modes & info->color_mode) == 0) { | ||
90 | - DSSERR("overlay doesn't support mode %d\n", info->color_mode); | ||
91 | - return -EINVAL; | ||
92 | - } | ||
93 | - | ||
94 | return 0; | ||
95 | } | ||
96 | |||
97 | -- | ||
98 | 1.6.6.1 | ||
99 | |||