summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaarten Lankhorst <maarten.lankhorst@linux.intel.com>2018-04-06 12:59:46 +0200
committerMaarten Lankhorst <maarten.lankhorst@linux.intel.com>2018-04-11 09:45:37 +0200
commit2c3e1ca6496de3b0377a43f4e8060cebd2c9920b (patch)
tree9b27919de95a1c36510e770153f79fc834010c30
parente5829165c2ef96140c222429c0f174fb72c4324b (diff)
lib/igt_kms: Handle outputs with no modes better
Pretend that outputs without modes are disabled, and try reprobing if no modes are initially detected, just in case that the reprobe will find modes. Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=105798 Reviewed-by: Marta Lofstedt <marta.lofstedt@intel.com>
-rw-r--r--lib/igt_kms.c13
-rw-r--r--lib/igt_kms.h3
2 files changed, 10 insertions, 6 deletions
diff --git a/lib/igt_kms.c b/lib/igt_kms.c
index 19d650a8..4b25f836 100644
--- a/lib/igt_kms.c
+++ b/lib/igt_kms.c
@@ -1033,9 +1033,10 @@ static bool _kmstest_connector_config(int drm_fd, uint32_t connector_id,
goto err2;
if (!connector->count_modes) {
- igt_warn("connector %d/%s-%d has no modes\n", connector_id,
- kmstest_connector_type_str(connector->connector_type),
- connector->connector_type_id);
+ if (probe)
+ igt_warn("connector %d/%s-%d has no modes\n", connector_id,
+ kmstest_connector_type_str(connector->connector_type),
+ connector->connector_type_id);
goto err2;
}
@@ -1950,6 +1951,7 @@ void igt_display_init(igt_display_t *display, int drm_fd)
for (i = 0; i < display->n_outputs; i++) {
igt_output_t *output = &display->outputs[i];
+ drmModeConnector *connector;
/*
* We don't assign each output a pipe unless
@@ -1961,8 +1963,9 @@ void igt_display_init(igt_display_t *display, int drm_fd)
igt_output_refresh(output);
- if (output->config.connector &&
- output->config.connector->connection == DRM_MODE_UNKNOWNCONNECTION) {
+ connector = output->config.connector;
+ if (connector && (!connector->count_modes ||
+ connector->connection == DRM_MODE_UNKNOWNCONNECTION)) {
output->force_reprobe = true;
igt_output_refresh(output);
}
diff --git a/lib/igt_kms.h b/lib/igt_kms.h
index b37370a0..0e75d0c9 100644
--- a/lib/igt_kms.h
+++ b/lib/igt_kms.h
@@ -411,7 +411,8 @@ void igt_wait_for_vblank_count(int drm_fd, enum pipe pipe, int count);
static inline bool igt_output_is_connected(igt_output_t *output)
{
/* Something went wrong during probe? */
- if (!output->config.connector)
+ if (!output->config.connector ||
+ !output->config.connector->count_modes)
return false;
if (output->config.connector->connection == DRM_MODE_CONNECTED)