diff options
author | Ander Conselvan de Oliveira <ander.conselvan.de.oliveira@intel.com> | 2015-03-30 10:03:00 +0300 |
---|---|---|
committer | Thomas Wood <thomas.wood@intel.com> | 2015-03-31 10:21:54 +0100 |
commit | 9aeff2b5c57982a5ffd17881e62e94404b10834b (patch) | |
tree | 9e9119988fb204d6894372fb40e2ebda5660f1e2 /lib | |
parent | 2f0e3cdcab423e86efc8e5aee113844ccd7b5295 (diff) |
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 <ander.conselvan.de.oliveira@intel.com>
Signed-off-by: Thomas Wood <thomas.wood@intel.com>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/igt_kms.c | 18 | ||||
-rw-r--r-- | lib/igt_kms.h | 3 |
2 files changed, 21 insertions, 0 deletions
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); |