drm/i915: Add .atomic_{get, set}_property() entrypoints to planes
When we flip on the DRIVER_ATOMIC bit, the DRM core will start calling this entrypoint to set and lookup driver-specific plane property values, rather than maintaining a shadow copy in object->properties. Note that although we add these functions to the plane vtable, they will not yet be called. Future patches that switch our .set_property() handler and/or enable full atomic functionality are required before these code paths will be executed. Signed-off-by: Matt Roper <matthew.d.roper@intel.com> Reviewed-by: Ander Conselvan de Oliveira <conselvan2@gmail.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
This commit is contained in:
parent
65a3fea0a6
commit
a98b3431af
|
@ -177,3 +177,61 @@ const struct drm_plane_helper_funcs intel_plane_helper_funcs = {
|
|||
.atomic_update = intel_plane_atomic_update,
|
||||
};
|
||||
|
||||
/**
|
||||
* intel_plane_atomic_get_property - fetch plane property value
|
||||
* @plane: plane to fetch property for
|
||||
* @state: state containing the property value
|
||||
* @property: property to look up
|
||||
* @val: pointer to write property value into
|
||||
*
|
||||
* The DRM core does not store shadow copies of properties for
|
||||
* atomic-capable drivers. This entrypoint is used to fetch
|
||||
* the current value of a driver-specific plane property.
|
||||
*/
|
||||
int
|
||||
intel_plane_atomic_get_property(struct drm_plane *plane,
|
||||
const struct drm_plane_state *state,
|
||||
struct drm_property *property,
|
||||
uint64_t *val)
|
||||
{
|
||||
struct drm_mode_config *config = &plane->dev->mode_config;
|
||||
|
||||
if (property == config->rotation_property) {
|
||||
*val = state->rotation;
|
||||
} else {
|
||||
DRM_DEBUG_KMS("Unknown plane property '%s'\n", property->name);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* intel_plane_atomic_set_property - set plane property value
|
||||
* @plane: plane to set property for
|
||||
* @state: state to update property value in
|
||||
* @property: property to set
|
||||
* @val: value to set property to
|
||||
*
|
||||
* Writes the specified property value for a plane into the provided atomic
|
||||
* state object.
|
||||
*
|
||||
* Returns 0 on success, -EINVAL on unrecognized properties
|
||||
*/
|
||||
int
|
||||
intel_plane_atomic_set_property(struct drm_plane *plane,
|
||||
struct drm_plane_state *state,
|
||||
struct drm_property *property,
|
||||
uint64_t val)
|
||||
{
|
||||
struct drm_mode_config *config = &plane->dev->mode_config;
|
||||
|
||||
if (property == config->rotation_property) {
|
||||
state->rotation = val;
|
||||
} else {
|
||||
DRM_DEBUG_KMS("Unknown plane property '%s'\n", property->name);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -12054,6 +12054,8 @@ const struct drm_plane_funcs intel_plane_funcs = {
|
|||
.disable_plane = drm_plane_helper_disable,
|
||||
.destroy = intel_plane_destroy,
|
||||
.set_property = intel_plane_set_property,
|
||||
.atomic_get_property = intel_plane_atomic_get_property,
|
||||
.atomic_set_property = intel_plane_atomic_set_property,
|
||||
.atomic_duplicate_state = intel_plane_duplicate_state,
|
||||
.atomic_destroy_state = intel_plane_destroy_state,
|
||||
|
||||
|
|
|
@ -945,6 +945,14 @@ int intel_prepare_plane_fb(struct drm_plane *plane,
|
|||
struct drm_framebuffer *fb);
|
||||
void intel_cleanup_plane_fb(struct drm_plane *plane,
|
||||
struct drm_framebuffer *fb);
|
||||
int intel_plane_atomic_get_property(struct drm_plane *plane,
|
||||
const struct drm_plane_state *state,
|
||||
struct drm_property *property,
|
||||
uint64_t *val);
|
||||
int intel_plane_atomic_set_property(struct drm_plane *plane,
|
||||
struct drm_plane_state *state,
|
||||
struct drm_property *property,
|
||||
uint64_t val);
|
||||
|
||||
/* shared dpll functions */
|
||||
struct intel_shared_dpll *intel_crtc_to_shared_dpll(struct intel_crtc *crtc);
|
||||
|
|
Loading…
Reference in a new issue