From 2857a5a8ed34a02ef22ad39293f73cea875ba02b Mon Sep 17 00:00:00 2001 From: Junghoon Date: Tue, 7 Jul 2015 16:19:58 +0900 Subject: [PATCH] drm: bugfix: find crtc for output Change-Id: I65ecb0ab0ce4b2b8b3110091c46b45903c7b1895 --- drm/src/drm-output.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/drm/src/drm-output.c b/drm/src/drm-output.c index 4bd10a8..7483d2e 100644 --- a/drm/src/drm-output.c +++ b/drm/src/drm-output.c @@ -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; -- 2.7.4