From: Thomas Wood Date: Wed, 28 May 2014 13:06:01 +0000 (+0100) Subject: lib: add igt_enable_connectors and igt_reset_connectors X-Git-Tag: intel-gpu-tools-1.8~216 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=b6ed9fb0d9a68cd3e07154b80e78e60778a4887b;p=platform%2Fupstream%2Fintel-gpu-tools.git lib: add igt_enable_connectors and igt_reset_connectors 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. --- diff --git a/lib/igt_kms.c b/lib/igt_kms.c index 4a2551a..aa54844 100644 --- a/lib/igt_kms.c +++ b/lib/igt_kms.c @@ -1381,3 +1381,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 e97febe..07c2418 100644 --- a/lib/igt_kms.h +++ b/lib/igt_kms.h @@ -228,5 +228,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__ */