output: use tdm_output_get_dpms_internal to get the DPMS value. 47/117347/1
authorBoram Park <boram1288.park@samsung.com>
Sat, 4 Mar 2017 14:07:12 +0000 (23:07 +0900)
committerBoram Park <boram1288.park@samsung.com>
Sat, 4 Mar 2017 14:07:12 +0000 (23:07 +0900)
To make sure that the backend's output_get_dpms is called inside of a function
because it can change the current_dpms_value variable.

Change-Id: I207213776aa90033c2e03068ef86ff7d1986ce31

src/tdm_output.c
src/tdm_private.h

index 1eaaae72601623054446343959973c9568209c2a..6b83f36b37b1d20ac6541d5c11f6b3e238a8b654 100644 (file)
@@ -816,20 +816,7 @@ tdm_output_commit_internal(tdm_output *output, int sync, tdm_output_commit_handl
                return TDM_ERROR_NOT_IMPLEMENTED;
        }
 
-       if (!func_output->output_get_dpms) {
-               dpms_value = private_output->current_dpms_value;
-       } else {
-               ret = func_output->output_get_dpms(private_output->output_backend, &dpms_value);
-               if (ret != TDM_ERROR_NONE) {
-                       TDM_ERR("output_get_dpms failed");
-                       dpms_value = TDM_OUTPUT_DPMS_OFF;
-               }
-
-               if (dpms_value != private_output->current_dpms_value) {
-                       private_output->current_dpms_value = dpms_value;
-                       TDM_WRN("current_dpms_value changed: %s", tdm_dpms_str(dpms_value));
-               }
-       }
+       tdm_output_get_dpms_internal(output, &dpms_value);
 
        if (dpms_value == TDM_OUTPUT_DPMS_ON) {
                if (func) {
@@ -1111,32 +1098,47 @@ tdm_output_set_dpms(tdm_output *output, tdm_output_dpms dpms_value)
        return ret;
 }
 
-EXTERN tdm_error
-tdm_output_get_dpms(tdm_output *output, tdm_output_dpms *dpms_value)
+INTERN tdm_error
+tdm_output_get_dpms_internal(tdm_output *output, tdm_output_dpms *dpms_value)
 {
        tdm_func_output *func_output;
        OUTPUT_FUNC_ENTRY();
 
-       TDM_RETURN_VAL_IF_FAIL(dpms_value != NULL, TDM_ERROR_INVALID_PARAMETER);
-
-       _pthread_mutex_lock(&private_display->lock);
+       TDM_RETURN_VAL_IF_FAIL(private_output != NULL, TDM_ERROR_INVALID_PARAMETER);
 
        func_output = &private_display->func_output;
 
        if (!func_output->output_get_dpms) {
                *dpms_value = private_output->current_dpms_value;
-               _pthread_mutex_unlock(&private_display->lock);
                TDM_WRN("not implemented!!");
                return TDM_ERROR_NONE;
        }
 
        ret = func_output->output_get_dpms(private_output->output_backend, dpms_value);
+       if (ret != TDM_ERROR_NONE) {
+               TDM_ERR("output_get_dpms failed");
+               *dpms_value = TDM_OUTPUT_DPMS_OFF;
+       }
 
        if (*dpms_value != private_output->current_dpms_value) {
                private_output->current_dpms_value = *dpms_value;
-               TDM_WRN("current_dpms_value changed: %s", tdm_dpms_str(*dpms_value));
+               TDM_ERR("output(%d) dpms changed suddenly: %s", private_output->pipe, tdm_dpms_str(*dpms_value));
        }
 
+       return ret;
+}
+
+EXTERN tdm_error
+tdm_output_get_dpms(tdm_output *output, tdm_output_dpms *dpms_value)
+{
+       OUTPUT_FUNC_ENTRY();
+
+       TDM_RETURN_VAL_IF_FAIL(dpms_value != NULL, TDM_ERROR_INVALID_PARAMETER);
+
+       _pthread_mutex_lock(&private_display->lock);
+
+       ret = tdm_output_get_dpms_internal(output, dpms_value);
+
        _pthread_mutex_unlock(&private_display->lock);
 
        return ret;
index 82799034fbd880173a6a78e459f3a1c4a6d8c9d4..eb5e5315ea68f279079f7ea25d5ec76c32f11c2a 100644 (file)
@@ -424,6 +424,9 @@ tdm_output_wait_vblank_add_front(tdm_output *output, int interval, int sync,
                                                                 tdm_output_vblank_handler func, void *user_data);
 tdm_error
 tdm_output_commit_internal(tdm_output *output, int sync, tdm_output_commit_handler func, void *user_data);
+tdm_error
+tdm_output_get_dpms_internal(tdm_output *output, tdm_output_dpms *dpms_value);
+
 void
 tdm_layer_committed(tdm_private_layer *private_layer, tdm_private_layer_buffer **committed_buffer);