From 4869e538e493732eb1ef98322c9091503a1275e4 Mon Sep 17 00:00:00 2001 From: Junkyeong Kim Date: Wed, 24 Jul 2019 21:27:37 +0900 Subject: [PATCH] tdm_output: add sync parameter of tdm_output_set_dpms_async if backend wants async function works like sync, tdm backend set the sync parameter. if sync set, the dpms handler will not be called. Change-Id: Ibf0ca0a2a5effef02a6479f77581b54a8ab47401 Signed-off-by: Junkyeong Kim --- include/tdm_backend.h | 3 ++- src/tdm_output.c | 14 +++++++++++--- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/include/tdm_backend.h b/include/tdm_backend.h index f9a1b22..c5e9e8e 100644 --- a/include/tdm_backend.h +++ b/include/tdm_backend.h @@ -544,11 +544,12 @@ typedef struct _tdm_func_output { * #output_set_dpms_handler, a backend module needs to call the output dpms handler * to let the TDM frontend know the output DPMS change indeed. * @param[in] dpms_value DPMS value + * @param[out] sync A flag for sync call * @return #TDM_ERROR_NONE if success. Otherwise, error value. * @see #output_set_dpms_handler, #TDM_OUTPUT_CAPABILITY_ASYNC_DPMS * @since 1.7.0 */ - tdm_error (*output_set_dpms_async)(tdm_output *output, tdm_output_dpms dpms_value); + tdm_error (*output_set_dpms_async)(tdm_output *output, tdm_output_dpms dpms_value, int *sync); /** * @brief Get a hwc object of a output object diff --git a/src/tdm_output.c b/src/tdm_output.c index 4605183..1a0e980 100644 --- a/src/tdm_output.c +++ b/src/tdm_output.c @@ -1817,6 +1817,7 @@ tdm_output_set_dpms_async(tdm_output *output, tdm_output_dpms dpms_value) { tdm_private_module *private_module; tdm_func_output *func_output; + int sync = 0; OUTPUT_FUNC_ENTRY(); if (!(private_output->caps.capabilities & TDM_OUTPUT_CAPABILITY_ASYNC_DPMS)) { @@ -1872,11 +1873,18 @@ tdm_output_set_dpms_async(tdm_output *output, tdm_output_dpms dpms_value) TDM_INFO("output(%d) dpms async '%s'", private_output->pipe, tdm_dpms_str(dpms_value)); - ret = func_output->output_set_dpms_async(private_output->output_backend, dpms_value); + ret = func_output->output_set_dpms_async(private_output->output_backend, dpms_value, &sync); if (ret == TDM_ERROR_NONE) { - private_output->waiting_dpms_change = 1; - TDM_INFO("output(%d) dpms async '%s' waiting", private_output->pipe, tdm_dpms_str(dpms_value)); + if (sync) { + tdm_output_dpms temp = TDM_OUTPUT_DPMS_OFF; + + tdm_output_get_dpms_internal(output, &temp); + TDM_INFO("output(%d) dpms async '%s'(%s) done", private_output->pipe, tdm_dpms_str(dpms_value), tdm_dpms_str(temp)); + } else { + private_output->waiting_dpms_change = 1; + TDM_INFO("output(%d) dpms async '%s' waiting", private_output->pipe, tdm_dpms_str(dpms_value)); + } } else { tdm_output_dpms temp = TDM_OUTPUT_DPMS_OFF; -- 2.7.4