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>
This commit is contained in:
Ander Conselvan de Oliveira 2015-03-30 10:03:00 +03:00 committed by Thomas Wood
parent 2f0e3cdcab
commit 9aeff2b5c5
2 changed files with 21 additions and 0 deletions

View File

@ -905,6 +905,9 @@ static void igt_output_refresh(igt_output_t *output)
if (!output->valid) if (!output->valid)
return; return;
if (output->use_override_mode)
output->config.default_mode = output->override_mode;
if (!output->name) { if (!output->name) {
drmModeConnector *c = output->config.connector; drmModeConnector *c = output->config.connector;
@ -1656,6 +1659,21 @@ drmModeModeInfo *igt_output_get_mode(igt_output_t *output)
return &output->config.default_mode; 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) void igt_output_set_pipe(igt_output_t *output, enum pipe pipe)
{ {
igt_display_t *display = output->display; igt_display_t *display = output->display;

View File

@ -217,6 +217,8 @@ typedef struct {
char *name; char *name;
bool valid; bool valid;
unsigned long pending_crtc_idx_mask; unsigned long pending_crtc_idx_mask;
bool use_override_mode;
drmModeModeInfo override_mode;
} igt_output_t; } igt_output_t;
struct igt_display { 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); const char *igt_output_name(igt_output_t *output);
drmModeModeInfo *igt_output_get_mode(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); 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); igt_plane_t *igt_output_get_plane(igt_output_t *output, enum igt_plane plane);