igt_enable_connectors forces connectors to be enabled where doing so is known to work well. igt_reset_connectors resets the force state on all connectors. --- lib/igt_kms.c | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ lib/igt_kms.h | 3 +++ 2 files changed, 73 insertions(+) diff --git a/lib/igt_kms.c b/lib/igt_kms.c index 86dec51..3fcb0da 100644 --- a/lib/igt_kms.c +++ b/lib/igt_kms.c @@ -1148,3 +1148,73 @@ void igt_wait_for_vblank(int drm_fd, enum pipe pipe) igt_assert(drmWaitVBlank(drm_fd, &wait_vbl) == 0); } + +static void reset_connectors_at_exit(int sig) +{ + igt_reset_connectors(); +} + +/** + * igt_enable_connectors: + * + * Force connectors to be enabled where this is known to work well. Use + * #igt_reset_connectors to revert the changes. + * + * An exit handler is installed to ensure connectors are reset when the test + * exits. + */ +void igt_enable_connectors(void) +{ + drmModeRes *res; + drmModeConnector *c; + int drm_fd; + + drm_fd = drm_open_any(); + + res = drmModeGetResources(drm_fd); + + for (int i = 0; i < res->count_connectors; i++) { + + c = drmModeGetConnector(drm_fd, res->connectors[i]); + + /* don't attempt to force connectors that are already connected + */ + if (c->connection == DRM_MODE_CONNECTED) + continue; + + /* just enable VGA for now */ + if (c->connector_type == DRM_MODE_CONNECTOR_VGA) + kmstest_force_connector(drm_fd, c, FORCE_CONNECTOR_ON); + + drmModeFreeConnector(c); + } + close(drm_fd); + + igt_install_exit_handler(reset_connectors_at_exit); +} + +/** + * igt_reset_connectors: + * + * Remove any forced state from the connectors. + */ +void igt_reset_connectors(void) +{ + drmModeRes *res; + drmModeConnector *c; + int drm_fd; + + drm_fd = drm_open_any(); + res = drmModeGetResources(drm_fd); + + for (int i = 0; i < res->count_connectors; i++) { + + c = drmModeGetConnector(drm_fd, res->connectors[i]); + + kmstest_force_connector(drm_fd, c, FORCE_CONNECTOR_UNSPECIFIED); + + drmModeFreeConnector(c); + } + + close(drm_fd); +} diff --git a/lib/igt_kms.h b/lib/igt_kms.h index 4cf74e8..d9b2c64 100644 --- a/lib/igt_kms.h +++ b/lib/igt_kms.h @@ -217,5 +217,8 @@ void igt_wait_for_vblank(int drm_fd, enum pipe pipe); #define IGT_FIXED(i,f) ((i) << 16 | (f)) +void igt_enable_connectors(void); +void igt_reset_connectors(void); + #endif /* __IGT_KMS_H__ */ -- 1.9.3 _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/intel-gfx