|
@@ -640,15 +640,17 @@ void sde_connector_set_qsync_params(struct drm_connector *connector)
|
|
|
if (prop_dirty) {
|
|
|
qsync_propval = sde_connector_get_property(c_conn->base.state,
|
|
|
CONNECTOR_PROP_QSYNC_MODE);
|
|
|
- SDE_DEBUG("updated qsync mode %d -> %d\n", c_conn->qsync_mode,
|
|
|
- qsync_propval);
|
|
|
- c_conn->qsync_updated = true;
|
|
|
- c_conn->qsync_mode = qsync_propval;
|
|
|
+ if (qsync_propval != c_conn->qsync_mode) {
|
|
|
+ SDE_DEBUG("updated qsync mode %d -> %d\n",
|
|
|
+ c_conn->qsync_mode, qsync_propval);
|
|
|
+ c_conn->qsync_updated = true;
|
|
|
+ c_conn->qsync_mode = qsync_propval;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
|
void sde_connector_complete_qsync_commit(struct drm_connector *conn,
|
|
|
- struct msm_display_kickoff_params *params)
|
|
|
+ struct msm_display_conn_params *params)
|
|
|
{
|
|
|
struct sde_connector *c_conn;
|
|
|
|
|
@@ -782,19 +784,49 @@ int sde_connector_pre_kickoff(struct drm_connector *connector)
|
|
|
|
|
|
params.rois = &c_state->rois;
|
|
|
params.hdr_meta = &c_state->hdr_meta;
|
|
|
- params.qsync_update = false;
|
|
|
+
|
|
|
+ SDE_EVT32_VERBOSE(connector->base.id);
|
|
|
+
|
|
|
+ rc = c_conn->ops.pre_kickoff(connector, c_conn->display, ¶ms);
|
|
|
+
|
|
|
+end:
|
|
|
+ return rc;
|
|
|
+}
|
|
|
+
|
|
|
+int sde_connector_prepare_commit(struct drm_connector *connector)
|
|
|
+{
|
|
|
+ struct sde_connector *c_conn;
|
|
|
+ struct sde_connector_state *c_state;
|
|
|
+ struct msm_display_conn_params params;
|
|
|
+ int rc;
|
|
|
+
|
|
|
+ if (!connector) {
|
|
|
+ SDE_ERROR("invalid argument\n");
|
|
|
+ return -EINVAL;
|
|
|
+ }
|
|
|
+
|
|
|
+ c_conn = to_sde_connector(connector);
|
|
|
+ c_state = to_sde_connector_state(connector->state);
|
|
|
+ if (!c_conn->display) {
|
|
|
+ SDE_ERROR("invalid connector display\n");
|
|
|
+ return -EINVAL;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!c_conn->ops.prepare_commit)
|
|
|
+ return 0;
|
|
|
+
|
|
|
+ memset(¶ms, 0, sizeof(params));
|
|
|
|
|
|
if (c_conn->qsync_updated) {
|
|
|
params.qsync_mode = c_conn->qsync_mode;
|
|
|
params.qsync_update = true;
|
|
|
- SDE_EVT32(connector->base.id, params.qsync_mode);
|
|
|
}
|
|
|
|
|
|
- SDE_EVT32_VERBOSE(connector->base.id);
|
|
|
+ rc = c_conn->ops.prepare_commit(c_conn->display, ¶ms);
|
|
|
|
|
|
- rc = c_conn->ops.pre_kickoff(connector, c_conn->display, ¶ms);
|
|
|
+ SDE_EVT32(connector->base.id, params.qsync_mode,
|
|
|
+ params.qsync_update, rc);
|
|
|
|
|
|
-end:
|
|
|
return rc;
|
|
|
}
|
|
|
|