prevent vblank set while dpms set executing
[platform/core/uifw/libtdm.git] / src / tdm_output.c
index d6e1cc3..13163e0 100644 (file)
@@ -1270,6 +1270,13 @@ tdm_output_wait_vblank(tdm_output *output, int interval, int sync,
                return TDM_ERROR_DPMS_OFF;
        }
 
+       if (private_output->waiting_dpms_change) {
+               TDM_WRN("output(%d) dpms is changing: %s", private_output->pipe,
+                               tdm_dpms_str(private_output->current_dpms_value));
+               _pthread_mutex_unlock(&private_display->lock);
+               return TDM_ERROR_DPMS_OFF;
+       }
+
        ret = _tdm_output_wait_vblank(private_output, interval, sync, func, user_data, 0);
 
        _pthread_mutex_unlock(&private_display->lock);
@@ -1293,6 +1300,13 @@ tdm_output_wait_vblank_add_front(tdm_output *output, int interval, int sync,
                return TDM_ERROR_DPMS_OFF;
        }
 
+       if (private_output->waiting_dpms_change) {
+               TDM_WRN("output(%d) dpms is changing: %s", private_output->pipe,
+                               tdm_dpms_str(private_output->current_dpms_value));
+               _pthread_mutex_unlock(&private_display->lock);
+               return TDM_ERROR_DPMS_OFF;
+       }
+
        ret = _tdm_output_wait_vblank(private_output, interval, sync, func, user_data, 1);
 
        _pthread_mutex_unlock(&private_display->lock);
@@ -1953,6 +1967,22 @@ tdm_output_get_dpms_internal(tdm_output *output, tdm_output_dpms *dpms_value)
        return ret;
 }
 
+INTERN tdm_error
+tdm_output_get_dpms_changing(tdm_output *output, int *changing)
+{
+       tdm_private_output *private_output;
+
+       TDM_RETURN_VAL_IF_FAIL(output != NULL, TDM_ERROR_INVALID_PARAMETER);
+       TDM_RETURN_VAL_IF_FAIL(changing != NULL, TDM_ERROR_INVALID_PARAMETER);
+
+       private_output = (tdm_private_output*)output;
+
+       *changing = private_output->waiting_dpms_change;
+
+       return TDM_ERROR_NONE;
+}
+
+
 EXTERN tdm_error
 tdm_output_get_dpms(tdm_output *output, tdm_output_dpms *dpms_value)
 {