drm: bugfix: find crtc for output
authorJunghoon <jh13.son@samsung.com>
Tue, 7 Jul 2015 07:19:58 +0000 (16:19 +0900)
committerJunghoon <jh13.son@samsung.com>
Tue, 7 Jul 2015 07:19:58 +0000 (16:19 +0900)
Change-Id: I65ecb0ab0ce4b2b8b3110091c46b45903c7b1895

drm/src/drm-output.c

index 4bd10a80c199c81cfa8a21161097ebba02d19ed3..7483d2ed0327582c806d5e9c3361fd0433957a64 100644 (file)
@@ -407,7 +407,7 @@ error:
 static int
 find_crtc(pepper_drm_t *drm, drmModeRes *res, drmModeConnector *conn)
 {
-    unsigned int    i, j;
+    int             i, j;
     drmModeEncoder *enc;
     drm_output_t   *output;
 
@@ -419,17 +419,27 @@ find_crtc(pepper_drm_t *drm, drmModeRes *res, drmModeConnector *conn)
 
         for (j = 0; j < res->count_crtcs; j++)
         {
+            pepper_bool_t crtc_used = PEPPER_FALSE;
+
             if (!(enc->possible_crtcs & (1 << j)))
                 continue;
 
             wl_list_for_each(output, &drm->output_list, link)
             {
                 if (res->crtcs[j] == output->crtc_id)
-                    continue;
+                {
+                    crtc_used = PEPPER_TRUE;
+                    break;
+                }
             }
 
-            return res->crtcs[j];
+            if (!crtc_used)
+            {
+                drmModeFreeEncoder(enc);
+                return res->crtcs[j];
+            }
         }
+        drmModeFreeEncoder(enc);
     }
 
     return -1;