Change-Id: I5b3f14d081203395c4fd7e781f216f4871a16bf6
TDM_ERR("output disconnected");
return TDM_ERROR_OUTPUT_DISCONNECTED;
}
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;
}
}
return TDM_ERROR_DPMS_OFF;
}
}
TDM_ERR("output disconnected");
return TDM_ERROR_OUTPUT_DISCONNECTED;
}
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;
}
}
return TDM_ERROR_DPMS_OFF;
}
}
_pthread_mutex_lock(&private_display->lock);
private_output = private_capture->private_output;
_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);
TDM_ERR("output(%d) dpms: %s", private_output->pipe,
tdm_dpms_str(private_output->current_dpms_value));
_pthread_mutex_unlock(&private_display->lock);
if (tdm_debug_module & TDM_DEBUG_COMMIT)
TDM_INFO("layer commit: output(%d) commit", private_output->pipe);
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);
/* 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);
LIST_ADDTAIL(&lm->link, &private_output->layer_commit_handler_list);
}
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);
_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);
private_output->commit_type = TDM_COMMIT_TYPE_LAYER;
}
private_output->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);
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);
#define TDM_SWAP(a, b) ({ int t; t = a; a = b; b = t; })
#define TDM_ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]))
#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;
struct tdm_type_name {
int type;
const char *name;
_pthread_mutex_lock(&private_display->lock);
_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);
TDM_WRN("output(%d) dpms: %s", private_output->pipe,
tdm_dpms_str(private_output->current_dpms_value));
_pthread_mutex_unlock(&private_display->lock);
_pthread_mutex_lock(&private_display->lock);
_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);
TDM_WRN("output(%d) dpms: %s", private_output->pipe,
tdm_dpms_str(private_output->current_dpms_value));
_pthread_mutex_unlock(&private_display->lock);
ret = tdm_output_get_dpms_internal(output, &dpms_value);
TDM_RETURN_VAL_IF_FAIL(ret == TDM_ERROR_NONE, ret);
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;
if (func) {
if (!private_output->regist_commit_cb) {
private_output->regist_commit_cb = 1;
private_layer->committed_buffer->buffer);
}
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);
}
if (func)
func(output, 0, 0, 0, user_data);
}
return TDM_ERROR_BAD_REQUEST;
}
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);
TDM_ERR("output(%d) dpms: %s", private_output->pipe,
tdm_dpms_str(private_output->current_dpms_value));
_pthread_mutex_unlock(&private_display->lock);
tdm_func_output *func_output;
OUTPUT_FUNC_ENTRY();
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) {
_pthread_mutex_lock(&private_display->lock);
if (private_output->waiting_dpms_change) {
return TDM_ERROR_BAD_REQUEST;
}
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) {
_pthread_mutex_lock(&private_display->lock);
if (private_output->waiting_dpms_change) {
case TDM_OUTPUT_CHANGE_DPMS:
VIN("dpms %s", tdm_dpms_str(value.u32));
private_vblank->check_HW_or_SW = 1;
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
if (private_vblank->enable_fake)
_tdm_vblank_change_to_SW(private_vblank);
else
VER("can't wait a vblank: output disconnected");
return TDM_ERROR_OUTPUT_DISCONNECTED;
}
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;
}
}
return TDM_ERROR_DPMS_OFF;
}
}
*/
if (private_vblank->vrefresh % fps)
wait_info->type = VBLANK_TYPE_SW;
*/
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)
private_vblank->connection == TDM_OUTPUT_CONN_STATUS_DISCONNECTED)
wait_info->type = VBLANK_TYPE_SW_FAKE;
else if (private_vblank->offset == 0)