Merge "Merge: migrate appfw from meta-agl-extra"
[AGL/meta-agl.git] / meta-agl-bsp / meta-ti / recipes-arago / weston / weston / 0001-weston-Enabling-DRM-backend-with-multiple-displays.patch
1 From b1829ce962aa4e13d737edb54130bdce05f068f0 Mon Sep 17 00:00:00 2001
2 From: Karthik Ramanan <a0393906@ti.com>
3 Date: Wed, 17 Dec 2014 09:21:49 +0530
4 Subject: [PATCH] weston: Enabling DRM backend with multiple displays
5
6 There are three main issues that this patch tries to address
7
8  1. Black screen when running weston
9  2. Support for multiple displays
10  3. Handling missing VBlanks
11
12 There is an issue with missing VBlanks for LCD and
13 HDMI connectors which leads to display not getting refreshed.
14 This patch can be considered as a workaround.
15
16 Signed-off-by: Karthik Ramanan <a0393906@ti.com>
17 ---
18  src/compositor-drm.c |   10 ++++++++--
19  1 files changed, 8 insertions(+), 2 deletions(-)
20
21 diff --git a/src/compositor-drm.c b/src/compositor-drm.c
22 index e4496e7..3b22aa3 100644
23 --- a/src/compositor-drm.c
24 +++ b/src/compositor-drm.c
25 @@ -646,7 +646,7 @@ drm_output_repaint(struct weston_output *output_base,
26                         .request.sequence = 1,
27                 };
28  
29 -               if ((!s->current && !s->next) ||
30 +               if ((!s->current && !s->next) &&
31                     !drm_sprite_crtc_supported(output_base, s->possible_crtcs))
32                         continue;
33  
34 @@ -757,6 +757,7 @@ page_flip_handler(int fd, unsigned int frame,
35  {
36         struct drm_output *output = (struct drm_output *) data;
37         uint32_t msecs;
38 +       uint32_t bail;
39  
40         /* We don't set page_flip_pending on start_repaint_loop, in that case
41          * we just want to page flip to the current buffer to get an accurate
42 @@ -769,9 +770,14 @@ page_flip_handler(int fd, unsigned int frame,
43  
44         output->page_flip_pending = 0;
45  
46 +       if(output->vblank_pending) {
47 +               weston_log("VBlank is pending for connector = %d, frame = %d\n", output->connector_id, frame);
48 +               bail = 1;
49 +       }
50 +
51         if (output->destroy_pending)
52                 drm_output_destroy(&output->base);
53 -       else if (!output->vblank_pending) {
54 +       else if (!output->vblank_pending || bail ) {
55                 msecs = sec * 1000 + usec / 1000;
56                 weston_output_finish_frame(&output->base, msecs);
57  
58 -- 
59 1.7.9.5
60