From 9aeff2b5c57982a5ffd17881e62e94404b10834b Mon Sep 17 00:00:00 2001 From: Ander Conselvan de Oliveira Date: Mon, 30 Mar 2015 10:03:00 +0300 Subject: [PATCH] lib/kms: Add a way to override an output's mode So that it is possible to use a custom mode with the simplified mode set API. v2: Add documentation for igt_output_override_mode(). (Thomas) Signed-off-by: Ander Conselvan de Oliveira Signed-off-by: Thomas Wood --- lib/igt_kms.c | 18 ++++++++++++++++++ lib/igt_kms.h | 3 +++ 2 files changed, 21 insertions(+) diff --git a/lib/igt_kms.c b/lib/igt_kms.c index 6cb1f088..9cdb204c 100644 --- a/lib/igt_kms.c +++ b/lib/igt_kms.c @@ -905,6 +905,9 @@ static void igt_output_refresh(igt_output_t *output) if (!output->valid) return; + if (output->use_override_mode) + output->config.default_mode = output->override_mode; + if (!output->name) { drmModeConnector *c = output->config.connector; @@ -1656,6 +1659,21 @@ drmModeModeInfo *igt_output_get_mode(igt_output_t *output) return &output->config.default_mode; } +/** + * igt_output_override_mode: + * @output: Output of which the mode will be overriden + * @mode: New mode + * + * Overrides the output's mode with @mode, so that it is used instead of the + * mode obtained with get connectors. Note that the mode is used without + * checking if the output supports it, so this might lead to unexpect results. + */ +void igt_output_override_mode(igt_output_t *output, drmModeModeInfo *mode) +{ + output->override_mode = *mode; + output->use_override_mode = true; +} + void igt_output_set_pipe(igt_output_t *output, enum pipe pipe) { igt_display_t *display = output->display; diff --git a/lib/igt_kms.h b/lib/igt_kms.h index 565df147..067402ca 100644 --- a/lib/igt_kms.h +++ b/lib/igt_kms.h @@ -217,6 +217,8 @@ typedef struct { char *name; bool valid; unsigned long pending_crtc_idx_mask; + bool use_override_mode; + drmModeModeInfo override_mode; } igt_output_t; struct igt_display { @@ -239,6 +241,7 @@ int igt_display_get_n_pipes(igt_display_t *display); const char *igt_output_name(igt_output_t *output); drmModeModeInfo *igt_output_get_mode(igt_output_t *output); +void igt_output_override_mode(igt_output_t *output, drmModeModeInfo *mode); void igt_output_set_pipe(igt_output_t *output, enum pipe pipe); igt_plane_t *igt_output_get_plane(igt_output_t *output, enum igt_plane plane);