summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorAnder Conselvan de Oliveira <ander.conselvan.de.oliveira@intel.com>2015-03-30 10:03:00 +0300
committerThomas Wood <thomas.wood@intel.com>2015-03-31 10:21:54 +0100
commit9aeff2b5c57982a5ffd17881e62e94404b10834b (patch)
tree9e9119988fb204d6894372fb40e2ebda5660f1e2 /lib
parent2f0e3cdcab423e86efc8e5aee113844ccd7b5295 (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.c18
-rw-r--r--lib/igt_kms.h3
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);