dpms: add macro to check dpms status
authorBoram Park <boram1288.park@samsung.com>
Tue, 28 Nov 2017 02:47:13 +0000 (11:47 +0900)
committerBoram Park <boram1288.park@samsung.com>
Mon, 8 Jan 2018 03:37:34 +0000 (12:37 +0900)
Change-Id: Iae7c09052f7df07c50d9b7d2dff7acaac179ec39

client/tdm_client.c
src/tdm_capture.c
src/tdm_layer.c
src/tdm_macro.h
src/tdm_output.c
src/tdm_vblank.c

index e576c3d..cd76a0c 100644 (file)
@@ -874,8 +874,8 @@ tdm_client_vblank_wait(tdm_client_vblank *vblank, unsigned int interval, tdm_cli
                        TDM_ERR("output disconnected");
                        return TDM_ERROR_OUTPUT_DISCONNECTED;
                }
-               if (private_output->dpms != TDM_OUTPUT_DPMS_ON) {
-                       TDM_ERR("dpms off");
+               if (TDM_OUTPUT_DPMS_VSYNC_IS_OFF(private_output->dpms)) {
+                       TDM_ERR("dpms %s", tdm_dpms_str(private_output->dpms));
                        return TDM_ERROR_DPMS_OFF;
                }
        }
@@ -959,8 +959,8 @@ tdm_client_vblank_wait_seq(tdm_client_vblank *vblank, unsigned int sequence,
                        TDM_ERR("output disconnected");
                        return TDM_ERROR_OUTPUT_DISCONNECTED;
                }
-               if (private_output->dpms != TDM_OUTPUT_DPMS_ON) {
-                       TDM_ERR("dpms off");
+               if (TDM_OUTPUT_DPMS_VSYNC_IS_OFF(private_output->dpms)) {
+                       TDM_ERR("dpms %s", tdm_dpms_str(private_output->dpms));
                        return TDM_ERROR_DPMS_OFF;
                }
        }
index 895b367..2c443ad 100644 (file)
@@ -559,7 +559,9 @@ tdm_capture_commit(tdm_capture *capture)
        _pthread_mutex_lock(&private_display->lock);
 
        private_output = private_capture->private_output;
-       if (private_output->current_dpms_value > TDM_OUTPUT_DPMS_ON) {
+
+       /* TODO: possible when standby mode? can't decide it yet. no scenario. */
+       if (TDM_OUTPUT_DPMS_VSYNC_IS_OFF(private_output->current_dpms_value)) {
                TDM_ERR("output(%d) dpms: %s", private_output->pipe,
                                tdm_dpms_str(private_output->current_dpms_value));
                _pthread_mutex_unlock(&private_display->lock);
index b0cc887..4408e9d 100644 (file)
@@ -590,7 +590,7 @@ _tdm_layer_got_output_vblank(tdm_private_output *private_output, unsigned int se
        if (tdm_debug_module & TDM_DEBUG_COMMIT)
                TDM_INFO("layer commit: output(%d) commit", private_output->pipe);
 
-       if (private_output->current_dpms_value == TDM_OUTPUT_DPMS_ON) {
+       if (!TDM_OUTPUT_DPMS_VSYNC_IS_OFF(private_output->current_dpms_value)) {
                /* tdm_vblank APIs is for server. it should be called in unlock status*/
                if (!private_output->layer_waiting_vblank) {
                        _pthread_mutex_unlock(&private_display->lock);
@@ -609,8 +609,8 @@ _tdm_layer_got_output_vblank(tdm_private_output *private_output, unsigned int se
                LIST_ADDTAIL(&lm->link, &private_output->layer_commit_handler_list);
        }
 
-       if (private_output->current_dpms_value != TDM_OUTPUT_DPMS_ON) {
-               TDM_WRN("TDM_OUTPUT_DPMS_OFF. Directly call vblank callback.");
+       if (TDM_OUTPUT_DPMS_VSYNC_IS_OFF(private_output->current_dpms_value)) {
+               TDM_WRN("dpms %s. Directly call vblank callback.", tdm_dpms_str(private_output->current_dpms_value));
                _pthread_mutex_unlock(&private_display->lock);
                _tdm_layer_cb_wait_vblank(private_output->vblank, 0, 0, 0, 0, private_output);
                _pthread_mutex_lock(&private_display->lock);
@@ -932,7 +932,7 @@ tdm_layer_commit(tdm_layer *layer, tdm_layer_commit_handler func, void *user_dat
                        private_display->commit_type = TDM_COMMIT_TYPE_LAYER;
        }
 
-       if (private_output->current_dpms_value > TDM_OUTPUT_DPMS_ON) {
+       if (TDM_OUTPUT_DPMS_VSYNC_IS_OFF(private_output->current_dpms_value)) {
                TDM_ERR("layer(%p)'s output(%d) dpms: %s", layer, private_output->pipe,
                                tdm_dpms_str(private_output->current_dpms_value));
                _pthread_mutex_unlock(&private_display->lock);
index 504315a..775354e 100644 (file)
@@ -159,6 +159,12 @@ extern "C" {
 #define TDM_SWAP(a, b)      ({ int t; t = a; a = b; b = t; })
 #define TDM_ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]))
 
+/* can't export VSYNC macro because we can't define the exact meaning of vsync off
+ * at this time. Does committing in standy mode work? Doesn't committing in suspend mode work?
+ */
+#define TDM_OUTPUT_DPMS_VSYNC_OFF_MASK       0x2
+#define TDM_OUTPUT_DPMS_VSYNC_IS_OFF(dpms)   ((dpms) & TDM_OUTPUT_DPMS_VSYNC_OFF_MASK)
+
 struct tdm_type_name {
        int type;
        const char *name;
index af2b40a..1e29397 100644 (file)
@@ -770,7 +770,7 @@ tdm_output_wait_vblank(tdm_output *output, int interval, int sync,
 
        _pthread_mutex_lock(&private_display->lock);
 
-       if (private_output->current_dpms_value > TDM_OUTPUT_DPMS_ON) {
+       if (TDM_OUTPUT_DPMS_VSYNC_IS_OFF(private_output->current_dpms_value)) {
                TDM_WRN("output(%d) dpms: %s", private_output->pipe,
                                tdm_dpms_str(private_output->current_dpms_value));
                _pthread_mutex_unlock(&private_display->lock);
@@ -792,7 +792,7 @@ tdm_output_wait_vblank_add_front(tdm_output *output, int interval, int sync,
 
        _pthread_mutex_lock(&private_display->lock);
 
-       if (private_output->current_dpms_value > TDM_OUTPUT_DPMS_ON) {
+       if (TDM_OUTPUT_DPMS_VSYNC_IS_OFF(private_output->current_dpms_value)) {
                TDM_WRN("output(%d) dpms: %s", private_output->pipe,
                                tdm_dpms_str(private_output->current_dpms_value));
                _pthread_mutex_unlock(&private_display->lock);
@@ -892,7 +892,7 @@ tdm_output_commit_internal(tdm_output *output, int sync, tdm_output_commit_handl
        ret = tdm_output_get_dpms_internal(output, &dpms_value);
        TDM_RETURN_VAL_IF_FAIL(ret == TDM_ERROR_NONE, ret);
 
-       if (dpms_value == TDM_OUTPUT_DPMS_ON) {
+       if (!TDM_OUTPUT_DPMS_VSYNC_IS_OFF(dpms_value)) {
                if (func) {
                        if (!private_output->regist_commit_cb) {
                                private_output->regist_commit_cb = 1;
@@ -938,8 +938,8 @@ tdm_output_commit_internal(tdm_output *output, int sync, tdm_output_commit_handl
                                         private_layer->committed_buffer->buffer);
        }
 
-       if (dpms_value != TDM_OUTPUT_DPMS_ON) {
-               TDM_WRN("TDM_OUTPUT_DPMS_OFF. Directly call commit handler instead of commit.");
+       if (TDM_OUTPUT_DPMS_VSYNC_IS_OFF(dpms_value)) {
+               TDM_WRN("dpms %s. Directly call commit handler instead of commit.", tdm_dpms_str(dpms_value));
                if (func)
                        func(output, 0, 0, 0, user_data);
        }
@@ -978,7 +978,7 @@ tdm_output_commit(tdm_output *output, int sync, tdm_output_commit_handler func,
                return TDM_ERROR_BAD_REQUEST;
        }
 
-       if (private_output->current_dpms_value > TDM_OUTPUT_DPMS_ON) {
+       if (TDM_OUTPUT_DPMS_VSYNC_IS_OFF(private_output->current_dpms_value)) {
                TDM_ERR("output(%d) dpms: %s", private_output->pipe,
                                tdm_dpms_str(private_output->current_dpms_value));
                _pthread_mutex_unlock(&private_display->lock);
@@ -1114,9 +1114,6 @@ tdm_output_set_dpms(tdm_output *output, tdm_output_dpms dpms_value)
        tdm_func_output *func_output;
        OUTPUT_FUNC_ENTRY();
 
-       if (dpms_value > TDM_OUTPUT_DPMS_OFF)
-               dpms_value = TDM_OUTPUT_DPMS_OFF;
-
        _pthread_mutex_lock(&private_display->lock);
 
        if (private_output->waiting_dpms_change) {
@@ -1195,9 +1192,6 @@ tdm_output_set_dpms_async(tdm_output *output, tdm_output_dpms dpms_value)
                return TDM_ERROR_BAD_REQUEST;
        }
 
-       if (dpms_value > TDM_OUTPUT_DPMS_OFF)
-               dpms_value = TDM_OUTPUT_DPMS_OFF;
-
        _pthread_mutex_lock(&private_display->lock);
 
        if (private_output->waiting_dpms_change) {
index 0ad8aca..a0030ca 100644 (file)
@@ -379,7 +379,7 @@ _tdm_vblank_cb_output_change(tdm_output *output, tdm_output_change_type type,
        case TDM_OUTPUT_CHANGE_DPMS:
                VIN("dpms %s", tdm_dpms_str(value.u32));
                private_vblank->check_HW_or_SW = 1;
-               if (value.u32 != TDM_OUTPUT_DPMS_ON) {
+               if (TDM_OUTPUT_DPMS_VSYNC_IS_OFF(value.u32)) {
                        if (private_vblank->enable_fake)
                                _tdm_vblank_change_to_SW(private_vblank);
                        else
@@ -1178,8 +1178,8 @@ tdm_vblank_wait(tdm_vblank *vblank, unsigned int req_sec, unsigned int req_usec,
                        VER("can't wait a vblank: output disconnected");
                        return TDM_ERROR_OUTPUT_DISCONNECTED;
                }
-               if (dpms != TDM_OUTPUT_DPMS_ON) {
-                       VER("can't wait a vblank: DPMS off");
+               if (TDM_OUTPUT_DPMS_VSYNC_IS_OFF(dpms)) {
+                       VER("can't wait a vblank: DPMS %s", tdm_dpms_str(dpms));
                        return TDM_ERROR_DPMS_OFF;
                }
        }
@@ -1229,7 +1229,7 @@ tdm_vblank_wait(tdm_vblank *vblank, unsigned int req_sec, unsigned int req_usec,
         */
        if (private_vblank->vrefresh % fps)
                wait_info->type = VBLANK_TYPE_SW;
-       else if (dpms == TDM_OUTPUT_DPMS_OFF ||
+       else if (TDM_OUTPUT_DPMS_VSYNC_IS_OFF(dpms) ||
                         private_vblank->connection == TDM_OUTPUT_CONN_STATUS_DISCONNECTED)
                wait_info->type = VBLANK_TYPE_SW_FAKE;
        else if (private_vblank->offset == 0)