diff options
-rw-r--r-- | tests/modetest/modetest.c | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/tests/modetest/modetest.c b/tests/modetest/modetest.c index f1c3bf36..9a82727d 100644 --- a/tests/modetest/modetest.c +++ b/tests/modetest/modetest.c @@ -254,6 +254,7 @@ struct connector { char mode_str[64]; struct drm_mode_modeinfo *mode; drmModeEncoder *encoder; + int crtc; }; static void @@ -318,6 +319,9 @@ connector_find_mode(struct connector *c) drmModeFreeEncoder(c->encoder); } + + if (c->crtc == -1) + c->crtc = c->encoder->crtc_id; } #ifdef HAVE_CAIRO @@ -477,9 +481,14 @@ set_mode(struct connector *c, int count) x = 0; for (i = 0; i < count; i++) { + int crtc_id; if (c[i].mode == NULL) continue; - ret = drmModeSetCrtc(fd, c[i].encoder->crtc_id, fb_id, x, 0, + + printf("setting mode %s on connector %d, crtc %d\n", + c[i].mode_str, c[i].id, c[i].crtc); + + ret = drmModeSetCrtc(fd, c[i].crtc, fb_id, x, 0, &c[i].id, 1, c[i].mode); x += c[i].mode->hdisplay; @@ -503,6 +512,7 @@ void usage(char *name) fprintf(stderr, "\t-m\tlist modes\n"); fprintf(stderr, "\t-f\tlist framebuffers\n"); fprintf(stderr, "\t-s <connector_id>:<mode>\tset a mode\n"); + fprintf(stderr, "\t-s <connector_id>@<crtc_id>:<mode>\tset a mode\n"); fprintf(stderr, "\n\tDefault is to dump all info.\n"); exit(0); } @@ -538,13 +548,15 @@ int main(int argc, char **argv) break; case 's': modeset = strdup(optarg); + con_args[count].crtc = -1; if (sscanf(optarg, "%d:%64s", &con_args[count].id, - &con_args[count].mode_str) != 2) + &con_args[count].mode_str) != 2 && + sscanf(optarg, "%d@%d:%64s", + &con_args[count].id, + &con_args[count].crtc, + &con_args[count].mode_str) != 3) usage(argv[0]); - printf("setting mode %s on connector %d\n", - con_args[count].mode_str, - con_args[count].id); count++; break; default: |