Merge tag 'topic/drm-misc-2015-02-25' of git://anongit.freedesktop.org/drm-intel into drm-next
misc atomic and dp macros * tag 'topic/drm-misc-2015-02-25' of git://anongit.freedesktop.org/drm-intel: drm: Adding edp1.4 specific dpcd macros drm/atomic-helpers: make mode_set hooks optional drm/atomic-helper: Rename commmit_post/pre_planes drm/atomic: Rename drm_atomic_helper_commit_pre_planes() state argument drm: If available use atomic state in getcrtc ioctl drm: Add DRM_DEBUG_ATOMIC drm/atomic-helpers: Fix documentation typos and wrong copy&paste drm: Fix the CRTC_STEREO_DOUBLE_ONLY define to include stero modes drm: Fix drm_crtc_vblank_get() documentation
This commit is contained in:
commit
329414c4e7
|
@ -92,7 +92,7 @@ drm_atomic_state_alloc(struct drm_device *dev)
|
|||
|
||||
state->dev = dev;
|
||||
|
||||
DRM_DEBUG_KMS("Allocate atomic state %p\n", state);
|
||||
DRM_DEBUG_ATOMIC("Allocate atomic state %p\n", state);
|
||||
|
||||
return state;
|
||||
fail:
|
||||
|
@ -122,7 +122,7 @@ void drm_atomic_state_clear(struct drm_atomic_state *state)
|
|||
struct drm_mode_config *config = &dev->mode_config;
|
||||
int i;
|
||||
|
||||
DRM_DEBUG_KMS("Clearing atomic state %p\n", state);
|
||||
DRM_DEBUG_ATOMIC("Clearing atomic state %p\n", state);
|
||||
|
||||
for (i = 0; i < state->num_connector; i++) {
|
||||
struct drm_connector *connector = state->connectors[i];
|
||||
|
@ -172,7 +172,7 @@ void drm_atomic_state_free(struct drm_atomic_state *state)
|
|||
{
|
||||
drm_atomic_state_clear(state);
|
||||
|
||||
DRM_DEBUG_KMS("Freeing atomic state %p\n", state);
|
||||
DRM_DEBUG_ATOMIC("Freeing atomic state %p\n", state);
|
||||
|
||||
kfree_state(state);
|
||||
}
|
||||
|
@ -217,8 +217,8 @@ drm_atomic_get_crtc_state(struct drm_atomic_state *state,
|
|||
state->crtcs[index] = crtc;
|
||||
crtc_state->state = state;
|
||||
|
||||
DRM_DEBUG_KMS("Added [CRTC:%d] %p state to %p\n",
|
||||
crtc->base.id, crtc_state, state);
|
||||
DRM_DEBUG_ATOMIC("Added [CRTC:%d] %p state to %p\n",
|
||||
crtc->base.id, crtc_state, state);
|
||||
|
||||
return crtc_state;
|
||||
}
|
||||
|
@ -293,8 +293,8 @@ static int drm_atomic_crtc_check(struct drm_crtc *crtc,
|
|||
*/
|
||||
|
||||
if (state->active && !state->enable) {
|
||||
DRM_DEBUG_KMS("[CRTC:%d] active without enabled\n",
|
||||
crtc->base.id);
|
||||
DRM_DEBUG_ATOMIC("[CRTC:%d] active without enabled\n",
|
||||
crtc->base.id);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
|
@ -340,8 +340,8 @@ drm_atomic_get_plane_state(struct drm_atomic_state *state,
|
|||
state->planes[index] = plane;
|
||||
plane_state->state = state;
|
||||
|
||||
DRM_DEBUG_KMS("Added [PLANE:%d] %p state to %p\n",
|
||||
plane->base.id, plane_state, state);
|
||||
DRM_DEBUG_ATOMIC("Added [PLANE:%d] %p state to %p\n",
|
||||
plane->base.id, plane_state, state);
|
||||
|
||||
if (plane_state->crtc) {
|
||||
struct drm_crtc_state *crtc_state;
|
||||
|
@ -477,10 +477,10 @@ static int drm_atomic_plane_check(struct drm_plane *plane,
|
|||
|
||||
/* either *both* CRTC and FB must be set, or neither */
|
||||
if (WARN_ON(state->crtc && !state->fb)) {
|
||||
DRM_DEBUG_KMS("CRTC set but no FB\n");
|
||||
DRM_DEBUG_ATOMIC("CRTC set but no FB\n");
|
||||
return -EINVAL;
|
||||
} else if (WARN_ON(state->fb && !state->crtc)) {
|
||||
DRM_DEBUG_KMS("FB set but no CRTC\n");
|
||||
DRM_DEBUG_ATOMIC("FB set but no CRTC\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
|
@ -490,7 +490,7 @@ static int drm_atomic_plane_check(struct drm_plane *plane,
|
|||
|
||||
/* Check whether this plane is usable on this CRTC */
|
||||
if (!(plane->possible_crtcs & drm_crtc_mask(state->crtc))) {
|
||||
DRM_DEBUG_KMS("Invalid crtc for plane\n");
|
||||
DRM_DEBUG_ATOMIC("Invalid crtc for plane\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
|
@ -499,8 +499,8 @@ static int drm_atomic_plane_check(struct drm_plane *plane,
|
|||
if (state->fb->pixel_format == plane->format_types[i])
|
||||
break;
|
||||
if (i == plane->format_count) {
|
||||
DRM_DEBUG_KMS("Invalid pixel format %s\n",
|
||||
drm_get_format_name(state->fb->pixel_format));
|
||||
DRM_DEBUG_ATOMIC("Invalid pixel format %s\n",
|
||||
drm_get_format_name(state->fb->pixel_format));
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
|
@ -509,9 +509,9 @@ static int drm_atomic_plane_check(struct drm_plane *plane,
|
|||
state->crtc_x > INT_MAX - (int32_t) state->crtc_w ||
|
||||
state->crtc_h > INT_MAX ||
|
||||
state->crtc_y > INT_MAX - (int32_t) state->crtc_h) {
|
||||
DRM_DEBUG_KMS("Invalid CRTC coordinates %ux%u+%d+%d\n",
|
||||
state->crtc_w, state->crtc_h,
|
||||
state->crtc_x, state->crtc_y);
|
||||
DRM_DEBUG_ATOMIC("Invalid CRTC coordinates %ux%u+%d+%d\n",
|
||||
state->crtc_w, state->crtc_h,
|
||||
state->crtc_x, state->crtc_y);
|
||||
return -ERANGE;
|
||||
}
|
||||
|
||||
|
@ -523,12 +523,12 @@ static int drm_atomic_plane_check(struct drm_plane *plane,
|
|||
state->src_x > fb_width - state->src_w ||
|
||||
state->src_h > fb_height ||
|
||||
state->src_y > fb_height - state->src_h) {
|
||||
DRM_DEBUG_KMS("Invalid source coordinates "
|
||||
"%u.%06ux%u.%06u+%u.%06u+%u.%06u\n",
|
||||
state->src_w >> 16, ((state->src_w & 0xffff) * 15625) >> 10,
|
||||
state->src_h >> 16, ((state->src_h & 0xffff) * 15625) >> 10,
|
||||
state->src_x >> 16, ((state->src_x & 0xffff) * 15625) >> 10,
|
||||
state->src_y >> 16, ((state->src_y & 0xffff) * 15625) >> 10);
|
||||
DRM_DEBUG_ATOMIC("Invalid source coordinates "
|
||||
"%u.%06ux%u.%06u+%u.%06u+%u.%06u\n",
|
||||
state->src_w >> 16, ((state->src_w & 0xffff) * 15625) >> 10,
|
||||
state->src_h >> 16, ((state->src_h & 0xffff) * 15625) >> 10,
|
||||
state->src_x >> 16, ((state->src_x & 0xffff) * 15625) >> 10,
|
||||
state->src_y >> 16, ((state->src_y & 0xffff) * 15625) >> 10);
|
||||
return -ENOSPC;
|
||||
}
|
||||
|
||||
|
@ -575,7 +575,7 @@ drm_atomic_get_connector_state(struct drm_atomic_state *state,
|
|||
* at most the array is a bit too large.
|
||||
*/
|
||||
if (index >= state->num_connector) {
|
||||
DRM_DEBUG_KMS("Hot-added connector would overflow state array, restarting\n");
|
||||
DRM_DEBUG_ATOMIC("Hot-added connector would overflow state array, restarting\n");
|
||||
return ERR_PTR(-EAGAIN);
|
||||
}
|
||||
|
||||
|
@ -590,8 +590,8 @@ drm_atomic_get_connector_state(struct drm_atomic_state *state,
|
|||
state->connectors[index] = connector;
|
||||
connector_state->state = state;
|
||||
|
||||
DRM_DEBUG_KMS("Added [CONNECTOR:%d] %p state to %p\n",
|
||||
connector->base.id, connector_state, state);
|
||||
DRM_DEBUG_ATOMIC("Added [CONNECTOR:%d] %p state to %p\n",
|
||||
connector->base.id, connector_state, state);
|
||||
|
||||
if (connector_state->crtc) {
|
||||
struct drm_crtc_state *crtc_state;
|
||||
|
@ -752,10 +752,11 @@ drm_atomic_set_crtc_for_plane(struct drm_plane_state *plane_state,
|
|||
}
|
||||
|
||||
if (crtc)
|
||||
DRM_DEBUG_KMS("Link plane state %p to [CRTC:%d]\n",
|
||||
plane_state, crtc->base.id);
|
||||
DRM_DEBUG_ATOMIC("Link plane state %p to [CRTC:%d]\n",
|
||||
plane_state, crtc->base.id);
|
||||
else
|
||||
DRM_DEBUG_KMS("Link plane state %p to [NOCRTC]\n", plane_state);
|
||||
DRM_DEBUG_ATOMIC("Link plane state %p to [NOCRTC]\n",
|
||||
plane_state);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -782,10 +783,11 @@ drm_atomic_set_fb_for_plane(struct drm_plane_state *plane_state,
|
|||
plane_state->fb = fb;
|
||||
|
||||
if (fb)
|
||||
DRM_DEBUG_KMS("Set [FB:%d] for plane state %p\n",
|
||||
fb->base.id, plane_state);
|
||||
DRM_DEBUG_ATOMIC("Set [FB:%d] for plane state %p\n",
|
||||
fb->base.id, plane_state);
|
||||
else
|
||||
DRM_DEBUG_KMS("Set [NOFB] for plane state %p\n", plane_state);
|
||||
DRM_DEBUG_ATOMIC("Set [NOFB] for plane state %p\n",
|
||||
plane_state);
|
||||
}
|
||||
EXPORT_SYMBOL(drm_atomic_set_fb_for_plane);
|
||||
|
||||
|
@ -818,11 +820,11 @@ drm_atomic_set_crtc_for_connector(struct drm_connector_state *conn_state,
|
|||
conn_state->crtc = crtc;
|
||||
|
||||
if (crtc)
|
||||
DRM_DEBUG_KMS("Link connector state %p to [CRTC:%d]\n",
|
||||
conn_state, crtc->base.id);
|
||||
DRM_DEBUG_ATOMIC("Link connector state %p to [CRTC:%d]\n",
|
||||
conn_state, crtc->base.id);
|
||||
else
|
||||
DRM_DEBUG_KMS("Link connector state %p to [NOCRTC]\n",
|
||||
conn_state);
|
||||
DRM_DEBUG_ATOMIC("Link connector state %p to [NOCRTC]\n",
|
||||
conn_state);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -858,8 +860,8 @@ drm_atomic_add_affected_connectors(struct drm_atomic_state *state,
|
|||
if (ret)
|
||||
return ret;
|
||||
|
||||
DRM_DEBUG_KMS("Adding all current connectors for [CRTC:%d] to %p\n",
|
||||
crtc->base.id, state);
|
||||
DRM_DEBUG_ATOMIC("Adding all current connectors for [CRTC:%d] to %p\n",
|
||||
crtc->base.id, state);
|
||||
|
||||
/*
|
||||
* Changed connectors are already in @state, so only need to look at the
|
||||
|
@ -901,8 +903,8 @@ drm_atomic_connectors_for_crtc(struct drm_atomic_state *state,
|
|||
num_connected_connectors++;
|
||||
}
|
||||
|
||||
DRM_DEBUG_KMS("State %p has %i connectors for [CRTC:%d]\n",
|
||||
state, num_connected_connectors, crtc->base.id);
|
||||
DRM_DEBUG_ATOMIC("State %p has %i connectors for [CRTC:%d]\n",
|
||||
state, num_connected_connectors, crtc->base.id);
|
||||
|
||||
return num_connected_connectors;
|
||||
}
|
||||
|
@ -953,7 +955,7 @@ int drm_atomic_check_only(struct drm_atomic_state *state)
|
|||
int ncrtcs = config->num_crtc;
|
||||
int i, ret = 0;
|
||||
|
||||
DRM_DEBUG_KMS("checking %p\n", state);
|
||||
DRM_DEBUG_ATOMIC("checking %p\n", state);
|
||||
|
||||
for (i = 0; i < nplanes; i++) {
|
||||
struct drm_plane *plane = state->planes[i];
|
||||
|
@ -963,8 +965,8 @@ int drm_atomic_check_only(struct drm_atomic_state *state)
|
|||
|
||||
ret = drm_atomic_plane_check(plane, state->plane_states[i]);
|
||||
if (ret) {
|
||||
DRM_DEBUG_KMS("[PLANE:%d] atomic core check failed\n",
|
||||
plane->base.id);
|
||||
DRM_DEBUG_ATOMIC("[PLANE:%d] atomic core check failed\n",
|
||||
plane->base.id);
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
@ -977,8 +979,8 @@ int drm_atomic_check_only(struct drm_atomic_state *state)
|
|||
|
||||
ret = drm_atomic_crtc_check(crtc, state->crtc_states[i]);
|
||||
if (ret) {
|
||||
DRM_DEBUG_KMS("[CRTC:%d] atomic core check failed\n",
|
||||
crtc->base.id);
|
||||
DRM_DEBUG_ATOMIC("[CRTC:%d] atomic core check failed\n",
|
||||
crtc->base.id);
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
@ -996,8 +998,8 @@ int drm_atomic_check_only(struct drm_atomic_state *state)
|
|||
|
||||
if (crtc_state->mode_changed ||
|
||||
crtc_state->active_changed) {
|
||||
DRM_DEBUG_KMS("[CRTC:%d] requires full modeset\n",
|
||||
crtc->base.id);
|
||||
DRM_DEBUG_ATOMIC("[CRTC:%d] requires full modeset\n",
|
||||
crtc->base.id);
|
||||
return -EINVAL;
|
||||
}
|
||||
}
|
||||
|
@ -1032,7 +1034,7 @@ int drm_atomic_commit(struct drm_atomic_state *state)
|
|||
if (ret)
|
||||
return ret;
|
||||
|
||||
DRM_DEBUG_KMS("commiting %p\n", state);
|
||||
DRM_DEBUG_ATOMIC("commiting %p\n", state);
|
||||
|
||||
return config->funcs->atomic_commit(state->dev, state, false);
|
||||
}
|
||||
|
@ -1063,7 +1065,7 @@ int drm_atomic_async_commit(struct drm_atomic_state *state)
|
|||
if (ret)
|
||||
return ret;
|
||||
|
||||
DRM_DEBUG_KMS("commiting %p asynchronously\n", state);
|
||||
DRM_DEBUG_ATOMIC("commiting %p asynchronously\n", state);
|
||||
|
||||
return config->funcs->atomic_commit(state->dev, state, true);
|
||||
}
|
||||
|
|
|
@ -116,9 +116,9 @@ steal_encoder(struct drm_atomic_state *state,
|
|||
*/
|
||||
WARN_ON(!drm_modeset_is_locked(&config->connection_mutex));
|
||||
|
||||
DRM_DEBUG_KMS("[ENCODER:%d:%s] in use on [CRTC:%d], stealing it\n",
|
||||
encoder->base.id, encoder->name,
|
||||
encoder_crtc->base.id);
|
||||
DRM_DEBUG_ATOMIC("[ENCODER:%d:%s] in use on [CRTC:%d], stealing it\n",
|
||||
encoder->base.id, encoder->name,
|
||||
encoder_crtc->base.id);
|
||||
|
||||
crtc_state = drm_atomic_get_crtc_state(state, encoder_crtc);
|
||||
if (IS_ERR(crtc_state))
|
||||
|
@ -130,9 +130,9 @@ steal_encoder(struct drm_atomic_state *state,
|
|||
if (connector->state->best_encoder != encoder)
|
||||
continue;
|
||||
|
||||
DRM_DEBUG_KMS("Stealing encoder from [CONNECTOR:%d:%s]\n",
|
||||
connector->base.id,
|
||||
connector->name);
|
||||
DRM_DEBUG_ATOMIC("Stealing encoder from [CONNECTOR:%d:%s]\n",
|
||||
connector->base.id,
|
||||
connector->name);
|
||||
|
||||
connector_state = drm_atomic_get_connector_state(state,
|
||||
connector);
|
||||
|
@ -165,9 +165,9 @@ update_connector_routing(struct drm_atomic_state *state, int conn_idx)
|
|||
if (!connector)
|
||||
return 0;
|
||||
|
||||
DRM_DEBUG_KMS("Updating routing for [CONNECTOR:%d:%s]\n",
|
||||
connector->base.id,
|
||||
connector->name);
|
||||
DRM_DEBUG_ATOMIC("Updating routing for [CONNECTOR:%d:%s]\n",
|
||||
connector->base.id,
|
||||
connector->name);
|
||||
|
||||
if (connector->state->crtc != connector_state->crtc) {
|
||||
if (connector->state->crtc) {
|
||||
|
@ -186,7 +186,7 @@ update_connector_routing(struct drm_atomic_state *state, int conn_idx)
|
|||
}
|
||||
|
||||
if (!connector_state->crtc) {
|
||||
DRM_DEBUG_KMS("Disabling [CONNECTOR:%d:%s]\n",
|
||||
DRM_DEBUG_ATOMIC("Disabling [CONNECTOR:%d:%s]\n",
|
||||
connector->base.id,
|
||||
connector->name);
|
||||
|
||||
|
@ -199,19 +199,19 @@ update_connector_routing(struct drm_atomic_state *state, int conn_idx)
|
|||
new_encoder = funcs->best_encoder(connector);
|
||||
|
||||
if (!new_encoder) {
|
||||
DRM_DEBUG_KMS("No suitable encoder found for [CONNECTOR:%d:%s]\n",
|
||||
connector->base.id,
|
||||
connector->name);
|
||||
DRM_DEBUG_ATOMIC("No suitable encoder found for [CONNECTOR:%d:%s]\n",
|
||||
connector->base.id,
|
||||
connector->name);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (new_encoder == connector_state->best_encoder) {
|
||||
DRM_DEBUG_KMS("[CONNECTOR:%d:%s] keeps [ENCODER:%d:%s], now on [CRTC:%d]\n",
|
||||
connector->base.id,
|
||||
connector->name,
|
||||
new_encoder->base.id,
|
||||
new_encoder->name,
|
||||
connector_state->crtc->base.id);
|
||||
DRM_DEBUG_ATOMIC("[CONNECTOR:%d:%s] keeps [ENCODER:%d:%s], now on [CRTC:%d]\n",
|
||||
connector->base.id,
|
||||
connector->name,
|
||||
new_encoder->base.id,
|
||||
new_encoder->name,
|
||||
connector_state->crtc->base.id);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -222,9 +222,9 @@ update_connector_routing(struct drm_atomic_state *state, int conn_idx)
|
|||
if (encoder_crtc) {
|
||||
ret = steal_encoder(state, new_encoder, encoder_crtc);
|
||||
if (ret) {
|
||||
DRM_DEBUG_KMS("Encoder stealing failed for [CONNECTOR:%d:%s]\n",
|
||||
connector->base.id,
|
||||
connector->name);
|
||||
DRM_DEBUG_ATOMIC("Encoder stealing failed for [CONNECTOR:%d:%s]\n",
|
||||
connector->base.id,
|
||||
connector->name);
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
@ -235,12 +235,12 @@ update_connector_routing(struct drm_atomic_state *state, int conn_idx)
|
|||
crtc_state = state->crtc_states[idx];
|
||||
crtc_state->mode_changed = true;
|
||||
|
||||
DRM_DEBUG_KMS("[CONNECTOR:%d:%s] using [ENCODER:%d:%s] on [CRTC:%d]\n",
|
||||
connector->base.id,
|
||||
connector->name,
|
||||
new_encoder->base.id,
|
||||
new_encoder->name,
|
||||
connector_state->crtc->base.id);
|
||||
DRM_DEBUG_ATOMIC("[CONNECTOR:%d:%s] using [ENCODER:%d:%s] on [CRTC:%d]\n",
|
||||
connector->base.id,
|
||||
connector->name,
|
||||
new_encoder->base.id,
|
||||
new_encoder->name,
|
||||
connector_state->crtc->base.id);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -292,7 +292,7 @@ mode_fixup(struct drm_atomic_state *state)
|
|||
encoder->bridge, &crtc_state->mode,
|
||||
&crtc_state->adjusted_mode);
|
||||
if (!ret) {
|
||||
DRM_DEBUG_KMS("Bridge fixup failed\n");
|
||||
DRM_DEBUG_ATOMIC("Bridge fixup failed\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
}
|
||||
|
@ -301,16 +301,16 @@ mode_fixup(struct drm_atomic_state *state)
|
|||
ret = funcs->atomic_check(encoder, crtc_state,
|
||||
conn_state);
|
||||
if (ret) {
|
||||
DRM_DEBUG_KMS("[ENCODER:%d:%s] check failed\n",
|
||||
encoder->base.id, encoder->name);
|
||||
DRM_DEBUG_ATOMIC("[ENCODER:%d:%s] check failed\n",
|
||||
encoder->base.id, encoder->name);
|
||||
return ret;
|
||||
}
|
||||
} else {
|
||||
ret = funcs->mode_fixup(encoder, &crtc_state->mode,
|
||||
&crtc_state->adjusted_mode);
|
||||
if (!ret) {
|
||||
DRM_DEBUG_KMS("[ENCODER:%d:%s] fixup failed\n",
|
||||
encoder->base.id, encoder->name);
|
||||
DRM_DEBUG_ATOMIC("[ENCODER:%d:%s] fixup failed\n",
|
||||
encoder->base.id, encoder->name);
|
||||
return -EINVAL;
|
||||
}
|
||||
}
|
||||
|
@ -330,8 +330,8 @@ mode_fixup(struct drm_atomic_state *state)
|
|||
ret = funcs->mode_fixup(crtc, &crtc_state->mode,
|
||||
&crtc_state->adjusted_mode);
|
||||
if (!ret) {
|
||||
DRM_DEBUG_KMS("[CRTC:%d] fixup failed\n",
|
||||
crtc->base.id);
|
||||
DRM_DEBUG_ATOMIC("[CRTC:%d] fixup failed\n",
|
||||
crtc->base.id);
|
||||
return -EINVAL;
|
||||
}
|
||||
}
|
||||
|
@ -384,14 +384,14 @@ drm_atomic_helper_check_modeset(struct drm_device *dev,
|
|||
continue;
|
||||
|
||||
if (!drm_mode_equal(&crtc->state->mode, &crtc_state->mode)) {
|
||||
DRM_DEBUG_KMS("[CRTC:%d] mode changed\n",
|
||||
crtc->base.id);
|
||||
DRM_DEBUG_ATOMIC("[CRTC:%d] mode changed\n",
|
||||
crtc->base.id);
|
||||
crtc_state->mode_changed = true;
|
||||
}
|
||||
|
||||
if (crtc->state->enable != crtc_state->enable) {
|
||||
DRM_DEBUG_KMS("[CRTC:%d] enable changed\n",
|
||||
crtc->base.id);
|
||||
DRM_DEBUG_ATOMIC("[CRTC:%d] enable changed\n",
|
||||
crtc->base.id);
|
||||
crtc_state->mode_changed = true;
|
||||
}
|
||||
}
|
||||
|
@ -428,17 +428,17 @@ drm_atomic_helper_check_modeset(struct drm_device *dev,
|
|||
* a full modeset because update_connector_routing force that.
|
||||
*/
|
||||
if (crtc->state->active != crtc_state->active) {
|
||||
DRM_DEBUG_KMS("[CRTC:%d] active changed\n",
|
||||
crtc->base.id);
|
||||
DRM_DEBUG_ATOMIC("[CRTC:%d] active changed\n",
|
||||
crtc->base.id);
|
||||
crtc_state->active_changed = true;
|
||||
}
|
||||
|
||||
if (!needs_modeset(crtc_state))
|
||||
continue;
|
||||
|
||||
DRM_DEBUG_KMS("[CRTC:%d] needs all connectors, enable: %c, active: %c\n",
|
||||
crtc->base.id,
|
||||
crtc_state->enable ? 'y' : 'n',
|
||||
DRM_DEBUG_ATOMIC("[CRTC:%d] needs all connectors, enable: %c, active: %c\n",
|
||||
crtc->base.id,
|
||||
crtc_state->enable ? 'y' : 'n',
|
||||
crtc_state->active ? 'y' : 'n');
|
||||
|
||||
ret = drm_atomic_add_affected_connectors(state, crtc);
|
||||
|
@ -449,8 +449,8 @@ drm_atomic_helper_check_modeset(struct drm_device *dev,
|
|||
crtc);
|
||||
|
||||
if (crtc_state->enable != !!num_connectors) {
|
||||
DRM_DEBUG_KMS("[CRTC:%d] enabled/connectors mismatch\n",
|
||||
crtc->base.id);
|
||||
DRM_DEBUG_ATOMIC("[CRTC:%d] enabled/connectors mismatch\n",
|
||||
crtc->base.id);
|
||||
|
||||
return -EINVAL;
|
||||
}
|
||||
|
@ -497,8 +497,8 @@ drm_atomic_helper_check_planes(struct drm_device *dev,
|
|||
|
||||
ret = funcs->atomic_check(plane, plane_state);
|
||||
if (ret) {
|
||||
DRM_DEBUG_KMS("[PLANE:%d] atomic driver check failed\n",
|
||||
plane->base.id);
|
||||
DRM_DEBUG_ATOMIC("[PLANE:%d] atomic driver check failed\n",
|
||||
plane->base.id);
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
@ -517,8 +517,8 @@ drm_atomic_helper_check_planes(struct drm_device *dev,
|
|||
|
||||
ret = funcs->atomic_check(crtc, state->crtc_states[i]);
|
||||
if (ret) {
|
||||
DRM_DEBUG_KMS("[CRTC:%d] atomic driver check failed\n",
|
||||
crtc->base.id);
|
||||
DRM_DEBUG_ATOMIC("[CRTC:%d] atomic driver check failed\n",
|
||||
crtc->base.id);
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
@ -600,8 +600,8 @@ disable_outputs(struct drm_device *dev, struct drm_atomic_state *old_state)
|
|||
|
||||
funcs = encoder->helper_private;
|
||||
|
||||
DRM_DEBUG_KMS("disabling [ENCODER:%d:%s]\n",
|
||||
encoder->base.id, encoder->name);
|
||||
DRM_DEBUG_ATOMIC("disabling [ENCODER:%d:%s]\n",
|
||||
encoder->base.id, encoder->name);
|
||||
|
||||
/*
|
||||
* Each encoder has at most one connector (since we always steal
|
||||
|
@ -639,8 +639,8 @@ disable_outputs(struct drm_device *dev, struct drm_atomic_state *old_state)
|
|||
|
||||
funcs = crtc->helper_private;
|
||||
|
||||
DRM_DEBUG_KMS("disabling [CRTC:%d]\n",
|
||||
crtc->base.id);
|
||||
DRM_DEBUG_ATOMIC("disabling [CRTC:%d]\n",
|
||||
crtc->base.id);
|
||||
|
||||
|
||||
/* Right function depends upon target state. */
|
||||
|
@ -723,9 +723,9 @@ crtc_set_mode(struct drm_device *dev, struct drm_atomic_state *old_state)
|
|||
|
||||
funcs = crtc->helper_private;
|
||||
|
||||
if (crtc->state->enable) {
|
||||
DRM_DEBUG_KMS("modeset on [CRTC:%d]\n",
|
||||
crtc->base.id);
|
||||
if (crtc->state->enable && funcs->mode_set_nofb) {
|
||||
DRM_DEBUG_ATOMIC("modeset on [CRTC:%d]\n",
|
||||
crtc->base.id);
|
||||
|
||||
funcs->mode_set_nofb(crtc);
|
||||
}
|
||||
|
@ -752,14 +752,15 @@ crtc_set_mode(struct drm_device *dev, struct drm_atomic_state *old_state)
|
|||
if (!new_crtc_state->mode_changed)
|
||||
continue;
|
||||
|
||||
DRM_DEBUG_KMS("modeset on [ENCODER:%d:%s]\n",
|
||||
encoder->base.id, encoder->name);
|
||||
DRM_DEBUG_ATOMIC("modeset on [ENCODER:%d:%s]\n",
|
||||
encoder->base.id, encoder->name);
|
||||
|
||||
/*
|
||||
* Each encoder has at most one connector (since we always steal
|
||||
* it away), so we won't call call mode_set hooks twice.
|
||||
*/
|
||||
funcs->mode_set(encoder, mode, adjusted_mode);
|
||||
if (funcs->mode_set)
|
||||
funcs->mode_set(encoder, mode, adjusted_mode);
|
||||
|
||||
if (encoder->bridge && encoder->bridge->funcs->mode_set)
|
||||
encoder->bridge->funcs->mode_set(encoder->bridge,
|
||||
|
@ -768,34 +769,44 @@ crtc_set_mode(struct drm_device *dev, struct drm_atomic_state *old_state)
|
|||
}
|
||||
|
||||
/**
|
||||
* drm_atomic_helper_commit_pre_planes - modeset commit before plane updates
|
||||
* @dev: DRM device
|
||||
* @state: atomic state
|
||||
*
|
||||
* This function commits the modeset changes that need to be committed before
|
||||
* updating planes. It shuts down all the outputs that need to be shut down and
|
||||
* prepares them (if required) with the new mode.
|
||||
*/
|
||||
void drm_atomic_helper_commit_pre_planes(struct drm_device *dev,
|
||||
struct drm_atomic_state *state)
|
||||
{
|
||||
disable_outputs(dev, state);
|
||||
set_routing_links(dev, state);
|
||||
crtc_set_mode(dev, state);
|
||||
}
|
||||
EXPORT_SYMBOL(drm_atomic_helper_commit_pre_planes);
|
||||
|
||||
/**
|
||||
* drm_atomic_helper_commit_post_planes - modeset commit after plane updates
|
||||
* drm_atomic_helper_commit_modeset_disables - modeset commit to disable outputs
|
||||
* @dev: DRM device
|
||||
* @old_state: atomic state object with old state structures
|
||||
*
|
||||
* This function commits the modeset changes that need to be committed after
|
||||
* updating planes: It enables all the outputs with the new configuration which
|
||||
* had to be turned off for the update.
|
||||
* This function shuts down all the outputs that need to be shut down and
|
||||
* prepares them (if required) with the new mode.
|
||||
*
|
||||
* For compatability with legacy crtc helpers this should be called before
|
||||
* drm_atomic_helper_commit_planes(), which is what the default commit function
|
||||
* does. But drivers with different needs can group the modeset commits together
|
||||
* and do the plane commits at the end. This is useful for drivers doing runtime
|
||||
* PM since planes updates then only happen when the CRTC is actually enabled.
|
||||
*/
|
||||
void drm_atomic_helper_commit_post_planes(struct drm_device *dev,
|
||||
struct drm_atomic_state *old_state)
|
||||
void drm_atomic_helper_commit_modeset_disables(struct drm_device *dev,
|
||||
struct drm_atomic_state *old_state)
|
||||
{
|
||||
disable_outputs(dev, old_state);
|
||||
set_routing_links(dev, old_state);
|
||||
crtc_set_mode(dev, old_state);
|
||||
}
|
||||
EXPORT_SYMBOL(drm_atomic_helper_commit_modeset_disables);
|
||||
|
||||
/**
|
||||
* drm_atomic_helper_commit_modeset_enables - modeset commit to enable outputs
|
||||
* @dev: DRM device
|
||||
* @old_state: atomic state object with old state structures
|
||||
*
|
||||
* This function enables all the outputs with the new configuration which had to
|
||||
* be turned off for the update.
|
||||
*
|
||||
* For compatability with legacy crtc helpers this should be called after
|
||||
* drm_atomic_helper_commit_planes(), which is what the default commit function
|
||||
* does. But drivers with different needs can group the modeset commits together
|
||||
* and do the plane commits at the end. This is useful for drivers doing runtime
|
||||
* PM since planes updates then only happen when the CRTC is actually enabled.
|
||||
*/
|
||||
void drm_atomic_helper_commit_modeset_enables(struct drm_device *dev,
|
||||
struct drm_atomic_state *old_state)
|
||||
{
|
||||
int ncrtcs = old_state->dev->mode_config.num_crtc;
|
||||
int i;
|
||||
|
@ -816,8 +827,8 @@ void drm_atomic_helper_commit_post_planes(struct drm_device *dev,
|
|||
funcs = crtc->helper_private;
|
||||
|
||||
if (crtc->state->enable) {
|
||||
DRM_DEBUG_KMS("enabling [CRTC:%d]\n",
|
||||
crtc->base.id);
|
||||
DRM_DEBUG_ATOMIC("enabling [CRTC:%d]\n",
|
||||
crtc->base.id);
|
||||
|
||||
if (funcs->enable)
|
||||
funcs->enable(crtc);
|
||||
|
@ -842,8 +853,8 @@ void drm_atomic_helper_commit_post_planes(struct drm_device *dev,
|
|||
encoder = connector->state->best_encoder;
|
||||
funcs = encoder->helper_private;
|
||||
|
||||
DRM_DEBUG_KMS("enabling [ENCODER:%d:%s]\n",
|
||||
encoder->base.id, encoder->name);
|
||||
DRM_DEBUG_ATOMIC("enabling [ENCODER:%d:%s]\n",
|
||||
encoder->base.id, encoder->name);
|
||||
|
||||
/*
|
||||
* Each encoder has at most one connector (since we always steal
|
||||
|
@ -861,7 +872,7 @@ void drm_atomic_helper_commit_post_planes(struct drm_device *dev,
|
|||
encoder->bridge->funcs->enable(encoder->bridge);
|
||||
}
|
||||
}
|
||||
EXPORT_SYMBOL(drm_atomic_helper_commit_post_planes);
|
||||
EXPORT_SYMBOL(drm_atomic_helper_commit_modeset_enables);
|
||||
|
||||
static void wait_for_fences(struct drm_device *dev,
|
||||
struct drm_atomic_state *state)
|
||||
|
@ -1030,11 +1041,11 @@ int drm_atomic_helper_commit(struct drm_device *dev,
|
|||
|
||||
wait_for_fences(dev, state);
|
||||
|
||||
drm_atomic_helper_commit_pre_planes(dev, state);
|
||||
drm_atomic_helper_commit_modeset_disables(dev, state);
|
||||
|
||||
drm_atomic_helper_commit_planes(dev, state);
|
||||
|
||||
drm_atomic_helper_commit_post_planes(dev, state);
|
||||
drm_atomic_helper_commit_modeset_enables(dev, state);
|
||||
|
||||
drm_atomic_helper_wait_for_vblanks(dev, state);
|
||||
|
||||
|
@ -1678,12 +1689,13 @@ backoff:
|
|||
EXPORT_SYMBOL(drm_atomic_helper_set_config);
|
||||
|
||||
/**
|
||||
* drm_atomic_helper_crtc_set_property - helper for crtc prorties
|
||||
* drm_atomic_helper_crtc_set_property - helper for crtc properties
|
||||
* @crtc: DRM crtc
|
||||
* @property: DRM property
|
||||
* @val: value of property
|
||||
*
|
||||
* Provides a default plane disablle handler using the atomic driver interface.
|
||||
* Provides a default crtc set_property handler using the atomic driver
|
||||
* interface.
|
||||
*
|
||||
* RETURNS:
|
||||
* Zero on success, error code on failure
|
||||
|
@ -1737,12 +1749,13 @@ backoff:
|
|||
EXPORT_SYMBOL(drm_atomic_helper_crtc_set_property);
|
||||
|
||||
/**
|
||||
* drm_atomic_helper_plane_set_property - helper for plane prorties
|
||||
* drm_atomic_helper_plane_set_property - helper for plane properties
|
||||
* @plane: DRM plane
|
||||
* @property: DRM property
|
||||
* @val: value of property
|
||||
*
|
||||
* Provides a default plane disable handler using the atomic driver interface.
|
||||
* Provides a default plane set_property handler using the atomic driver
|
||||
* interface.
|
||||
*
|
||||
* RETURNS:
|
||||
* Zero on success, error code on failure
|
||||
|
@ -1796,12 +1809,13 @@ backoff:
|
|||
EXPORT_SYMBOL(drm_atomic_helper_plane_set_property);
|
||||
|
||||
/**
|
||||
* drm_atomic_helper_connector_set_property - helper for connector prorties
|
||||
* drm_atomic_helper_connector_set_property - helper for connector properties
|
||||
* @connector: DRM connector
|
||||
* @property: DRM property
|
||||
* @val: value of property
|
||||
*
|
||||
* Provides a default plane disablle handler using the atomic driver interface.
|
||||
* Provides a default connector set_property handler using the atomic driver
|
||||
* interface.
|
||||
*
|
||||
* RETURNS:
|
||||
* Zero on success, error code on failure
|
||||
|
|
|
@ -2009,21 +2009,32 @@ int drm_mode_getcrtc(struct drm_device *dev,
|
|||
return -ENOENT;
|
||||
|
||||
drm_modeset_lock_crtc(crtc, crtc->primary);
|
||||
crtc_resp->x = crtc->x;
|
||||
crtc_resp->y = crtc->y;
|
||||
crtc_resp->gamma_size = crtc->gamma_size;
|
||||
if (crtc->primary->fb)
|
||||
crtc_resp->fb_id = crtc->primary->fb->base.id;
|
||||
else
|
||||
crtc_resp->fb_id = 0;
|
||||
|
||||
if (crtc->enabled) {
|
||||
|
||||
drm_crtc_convert_to_umode(&crtc_resp->mode, &crtc->mode);
|
||||
crtc_resp->mode_valid = 1;
|
||||
if (crtc->state) {
|
||||
crtc_resp->x = crtc->primary->state->src_x >> 16;
|
||||
crtc_resp->y = crtc->primary->state->src_y >> 16;
|
||||
if (crtc->state->enable) {
|
||||
drm_crtc_convert_to_umode(&crtc_resp->mode, &crtc->state->mode);
|
||||
crtc_resp->mode_valid = 1;
|
||||
|
||||
} else {
|
||||
crtc_resp->mode_valid = 0;
|
||||
}
|
||||
} else {
|
||||
crtc_resp->mode_valid = 0;
|
||||
crtc_resp->x = crtc->x;
|
||||
crtc_resp->y = crtc->y;
|
||||
if (crtc->enabled) {
|
||||
drm_crtc_convert_to_umode(&crtc_resp->mode, &crtc->mode);
|
||||
crtc_resp->mode_valid = 1;
|
||||
|
||||
} else {
|
||||
crtc_resp->mode_valid = 0;
|
||||
}
|
||||
}
|
||||
drm_modeset_unlock_crtc(crtc);
|
||||
|
||||
|
|
|
@ -1052,7 +1052,7 @@ EXPORT_SYMBOL(drm_vblank_get);
|
|||
* Acquire a reference count on vblank events to avoid having them disabled
|
||||
* while in use.
|
||||
*
|
||||
* This is the native kms version of drm_vblank_off().
|
||||
* This is the native kms version of drm_vblank_get().
|
||||
*
|
||||
* Returns:
|
||||
* Zero on success, nonzero on failure.
|
||||
|
|
|
@ -134,9 +134,9 @@ int intel_atomic_commit(struct drm_device *dev,
|
|||
* FIXME: The proper sequence here will eventually be:
|
||||
*
|
||||
* drm_atomic_helper_swap_state(dev, state)
|
||||
* drm_atomic_helper_commit_pre_planes(dev, state);
|
||||
* drm_atomic_helper_commit_modeset_disables(dev, state);
|
||||
* drm_atomic_helper_commit_planes(dev, state);
|
||||
* drm_atomic_helper_commit_post_planes(dev, state);
|
||||
* drm_atomic_helper_commit_modeset_enables(dev, state);
|
||||
* drm_atomic_helper_wait_for_vblanks(dev, state);
|
||||
* drm_atomic_helper_cleanup_planes(dev, state);
|
||||
* drm_atomic_state_free(state);
|
||||
|
|
|
@ -96,11 +96,11 @@ static void complete_commit(struct msm_commit *c)
|
|||
|
||||
kms->funcs->prepare_commit(kms, state);
|
||||
|
||||
drm_atomic_helper_commit_pre_planes(dev, state);
|
||||
drm_atomic_helper_commit_modeset_disables(dev, state);
|
||||
|
||||
drm_atomic_helper_commit_planes(dev, state);
|
||||
|
||||
drm_atomic_helper_commit_post_planes(dev, state);
|
||||
drm_atomic_helper_commit_modeset_enables(dev, state);
|
||||
|
||||
/* NOTE: _wait_for_vblanks() only waits for vblank on
|
||||
* enabled CRTCs. So we end up faulting when disabling
|
||||
|
|
|
@ -55,9 +55,9 @@ static void tegra_atomic_complete(struct tegra_drm *tegra,
|
|||
* current layout.
|
||||
*/
|
||||
|
||||
drm_atomic_helper_commit_pre_planes(drm, state);
|
||||
drm_atomic_helper_commit_modeset_disables(drm, state);
|
||||
drm_atomic_helper_commit_planes(drm, state);
|
||||
drm_atomic_helper_commit_post_planes(drm, state);
|
||||
drm_atomic_helper_commit_modeset_enables(drm, state);
|
||||
|
||||
drm_atomic_helper_wait_for_vblanks(drm, state);
|
||||
|
||||
|
|
|
@ -104,6 +104,9 @@ struct dma_buf_attachment;
|
|||
* PRIME: used in the prime code.
|
||||
* This is the category used by the DRM_DEBUG_PRIME() macro.
|
||||
*
|
||||
* ATOMIC: used in the atomic code.
|
||||
* This is the category used by the DRM_DEBUG_ATOMIC() macro.
|
||||
*
|
||||
* Enabling verbose debug messages is done through the drm.debug parameter,
|
||||
* each category being enabled by a bit.
|
||||
*
|
||||
|
@ -121,6 +124,7 @@ struct dma_buf_attachment;
|
|||
#define DRM_UT_DRIVER 0x02
|
||||
#define DRM_UT_KMS 0x04
|
||||
#define DRM_UT_PRIME 0x08
|
||||
#define DRM_UT_ATOMIC 0x10
|
||||
|
||||
extern __printf(2, 3)
|
||||
void drm_ut_debug_printk(const char *function_name,
|
||||
|
@ -207,6 +211,11 @@ void drm_err(const char *format, ...);
|
|||
if (unlikely(drm_debug & DRM_UT_PRIME)) \
|
||||
drm_ut_debug_printk(__func__, fmt, ##args); \
|
||||
} while (0)
|
||||
#define DRM_DEBUG_ATOMIC(fmt, args...) \
|
||||
do { \
|
||||
if (unlikely(drm_debug & DRM_UT_ATOMIC)) \
|
||||
drm_ut_debug_printk(__func__, fmt, ##args); \
|
||||
} while (0)
|
||||
|
||||
/*@}*/
|
||||
|
||||
|
|
|
@ -43,9 +43,9 @@ int drm_atomic_helper_commit(struct drm_device *dev,
|
|||
void drm_atomic_helper_wait_for_vblanks(struct drm_device *dev,
|
||||
struct drm_atomic_state *old_state);
|
||||
|
||||
void drm_atomic_helper_commit_pre_planes(struct drm_device *dev,
|
||||
struct drm_atomic_state *state);
|
||||
void drm_atomic_helper_commit_post_planes(struct drm_device *dev,
|
||||
void drm_atomic_helper_commit_modeset_disables(struct drm_device *dev,
|
||||
struct drm_atomic_state *state);
|
||||
void drm_atomic_helper_commit_modeset_enables(struct drm_device *dev,
|
||||
struct drm_atomic_state *old_state);
|
||||
|
||||
int drm_atomic_helper_prepare_planes(struct drm_device *dev,
|
||||
|
|
|
@ -89,6 +89,7 @@ struct drm_crtc_helper_funcs {
|
|||
int (*mode_set)(struct drm_crtc *crtc, struct drm_display_mode *mode,
|
||||
struct drm_display_mode *adjusted_mode, int x, int y,
|
||||
struct drm_framebuffer *old_fb);
|
||||
/* Actually set the mode for atomic helpers, optional */
|
||||
void (*mode_set_nofb)(struct drm_crtc *crtc);
|
||||
|
||||
/* Move the crtc on the current fb to the given position *optional* */
|
||||
|
@ -119,7 +120,7 @@ struct drm_crtc_helper_funcs {
|
|||
* @mode_fixup: try to fixup proposed mode for this connector
|
||||
* @prepare: part of the disable sequence, called before the CRTC modeset
|
||||
* @commit: called after the CRTC modeset
|
||||
* @mode_set: set this mode
|
||||
* @mode_set: set this mode, optional for atomic helpers
|
||||
* @get_crtc: return CRTC that the encoder is currently attached to
|
||||
* @detect: connection status detection
|
||||
* @disable: disable encoder when not in use (overrides DPMS off)
|
||||
|
|
|
@ -92,6 +92,9 @@
|
|||
# define DP_MSA_TIMING_PAR_IGNORED (1 << 6) /* eDP */
|
||||
# define DP_OUI_SUPPORT (1 << 7)
|
||||
|
||||
#define DP_SUPPORTED_LINK_RATES 0x010 /*eDP 1.4*/
|
||||
#define DP_MAX_SUPPORTED_RATES 0x8
|
||||
|
||||
#define DP_I2C_SPEED_CAP 0x00c /* DPI */
|
||||
# define DP_I2C_SPEED_1K 0x01
|
||||
# define DP_I2C_SPEED_5K 0x02
|
||||
|
@ -101,6 +104,7 @@
|
|||
# define DP_I2C_SPEED_1M 0x20
|
||||
|
||||
#define DP_EDP_CONFIGURATION_CAP 0x00d /* XXX 1.2? */
|
||||
# define DP_DPCD_DISPLAY_CONTROL_CAPABLE (1 << 3) /* edp v1.2 or higher */
|
||||
#define DP_TRAINING_AUX_RD_INTERVAL 0x00e /* XXX 1.2? */
|
||||
|
||||
/* Multiple stream transport */
|
||||
|
@ -221,6 +225,8 @@
|
|||
# define DP_UP_REQ_EN (1 << 1)
|
||||
# define DP_UPSTREAM_IS_SRC (1 << 2)
|
||||
|
||||
#define DP_LINK_RATE_SET 0x115
|
||||
|
||||
#define DP_PSR_EN_CFG 0x170 /* XXX 1.2? */
|
||||
# define DP_PSR_ENABLE (1 << 0)
|
||||
# define DP_PSR_MAIN_LINK_ACTIVE (1 << 1)
|
||||
|
@ -332,6 +338,8 @@
|
|||
# define DP_SET_POWER_D3 0x2
|
||||
# define DP_SET_POWER_MASK 0x3
|
||||
|
||||
#define DP_EDP_DPCD_REV 0x700
|
||||
|
||||
#define DP_SIDEBAND_MSG_DOWN_REQ_BASE 0x1000 /* 1.2 MST */
|
||||
#define DP_SIDEBAND_MSG_UP_REP_BASE 0x1200 /* 1.2 MST */
|
||||
#define DP_SIDEBAND_MSG_DOWN_REP_BASE 0x1400 /* 1.2 MST */
|
||||
|
|
|
@ -92,7 +92,7 @@ enum drm_mode_status {
|
|||
#define CRTC_STEREO_DOUBLE (1 << 1) /* adjust timings for stereo modes */
|
||||
#define CRTC_NO_DBLSCAN (1 << 2) /* don't adjust doublescan */
|
||||
#define CRTC_NO_VSCAN (1 << 3) /* don't adjust doublescan */
|
||||
#define CRTC_STEREO_DOUBLE_ONLY (CRTC_NO_DBLSCAN | CRTC_NO_VSCAN)
|
||||
#define CRTC_STEREO_DOUBLE_ONLY (CRTC_STEREO_DOUBLE | CRTC_NO_DBLSCAN | CRTC_NO_VSCAN)
|
||||
|
||||
#define DRM_MODE_FLAG_3D_MAX DRM_MODE_FLAG_3D_SIDE_BY_SIDE_HALF
|
||||
|
||||
|
|
Loading…
Reference in New Issue