tdm_output: add sync parameter of tdm_output_set_dpms_async 81/210781/3
authorJunkyeong Kim <jk0430.kim@samsung.com>
Wed, 24 Jul 2019 12:27:37 +0000 (21:27 +0900)
committerJunkyeong Kim <jk0430.kim@samsung.com>
Thu, 25 Jul 2019 01:25:08 +0000 (10:25 +0900)
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 <jk0430.kim@samsung.com>
include/tdm_backend.h
src/tdm_output.c

index f9a1b22..c5e9e8e 100644 (file)
@@ -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
index 4605183..1a0e980 100644 (file)
@@ -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;