--- lib/igt_kms.c | 26 ++++++++++++++++++++++++++ lib/igt_kms.h | 6 ++++++ 2 files changed, 32 insertions(+) diff --git a/lib/igt_kms.c b/lib/igt_kms.c index af63d13b1..4ce5e4a95 100644 --- a/lib/igt_kms.c +++ b/lib/igt_kms.c @@ -6581,3 +6581,29 @@ int get_num_scalers(int drm_fd, enum pipe pipe) return num_scalers; } + +static int toggle_power_saving_policy_prop(int drm_fd, igt_output_t *output, uint64_t policy) +{ + uint32_t type = DRM_MODE_OBJECT_CONNECTOR; + bool prop_exists; + uint32_t prop_id; + + prop_exists = kmstest_get_property( + drm_fd, output->id, type, "power saving policy", + &prop_id, NULL, NULL); + + if (!prop_exists) + return -ENODEV; + + return drmModeObjectSetProperty(drm_fd, output->id, type, prop_id, policy); +} + +int clear_power_saving_policy(int drm_fd, igt_output_t *output) +{ + return toggle_power_saving_policy_prop(drm_fd, output, 0); +} + +int set_panel_power_saving_policy(int drm_fd, igt_output_t *output, uint64_t policy) +{ + return toggle_power_saving_policy_prop(drm_fd, output, policy); +} diff --git a/lib/igt_kms.h b/lib/igt_kms.h index 01604dac9..129b88576 100644 --- a/lib/igt_kms.h +++ b/lib/igt_kms.h @@ -1223,4 +1223,10 @@ bool igt_check_output_is_dp_mst(igt_output_t *output); int igt_get_dp_mst_connector_id(igt_output_t *output); int get_num_scalers(int drm_fd, enum pipe pipe); +#define DRM_MODE_REQUIRE_COLOR_ACCURACY BIT(0) /* Compositor requires color accuracy */ +#define DRM_MODE_REQUIRE_LOW_LATENCY BIT(1) /* Compositor requires low latency */ + +int clear_power_saving_policy(int drm_fd, igt_output_t *output); +int set_panel_power_saving_policy(int drm_fd, igt_output_t *output, uint64_t policy); + #endif /* __IGT_KMS_H__ */ -- 2.43.0