Commit 1356837e authored by Matt Roper's avatar Matt Roper Committed by Daniel Vetter

drm/i915: Add crtc state duplication/destruction functions

The atomic helpers need these to prepare a new state object when
starting a new atomic operation.
Signed-off-by: default avatarMatt Roper <matthew.d.roper@intel.com>
Reviewed-by: default avatarAnder Conselvan de Oliveira <conselvan2@gmail.com>
Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
parent 2545e4a6
...@@ -200,3 +200,38 @@ intel_connector_atomic_get_property(struct drm_connector *connector, ...@@ -200,3 +200,38 @@ intel_connector_atomic_get_property(struct drm_connector *connector,
return -EINVAL; return -EINVAL;
} }
/*
* intel_crtc_duplicate_state - duplicate crtc state
* @crtc: drm crtc
*
* Allocates and returns a copy of the crtc state (both common and
* Intel-specific) for the specified crtc.
*
* Returns: The newly allocated crtc state, or NULL on failure.
*/
struct drm_crtc_state *
intel_crtc_duplicate_state(struct drm_crtc *crtc)
{
struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
if (WARN_ON(!intel_crtc->config))
return kzalloc(sizeof(*intel_crtc->config), GFP_KERNEL);
return kmemdup(intel_crtc->config, sizeof(*intel_crtc->config),
GFP_KERNEL);
}
/**
* intel_crtc_destroy_state - destroy crtc state
* @crtc: drm crtc
*
* Destroys the crtc state (both common and Intel-specific) for the
* specified crtc.
*/
void
intel_crtc_destroy_state(struct drm_crtc *crtc,
struct drm_crtc_state *state)
{
drm_atomic_helper_crtc_destroy_state(crtc, state);
}
...@@ -11652,6 +11652,8 @@ static const struct drm_crtc_funcs intel_crtc_funcs = { ...@@ -11652,6 +11652,8 @@ static const struct drm_crtc_funcs intel_crtc_funcs = {
.set_config = intel_crtc_set_config, .set_config = intel_crtc_set_config,
.destroy = intel_crtc_destroy, .destroy = intel_crtc_destroy,
.page_flip = intel_crtc_page_flip, .page_flip = intel_crtc_page_flip,
.atomic_duplicate_state = intel_crtc_duplicate_state,
.atomic_destroy_state = intel_crtc_destroy_state,
}; };
static bool ibx_pch_dpll_get_hw_state(struct drm_i915_private *dev_priv, static bool ibx_pch_dpll_get_hw_state(struct drm_i915_private *dev_priv,
......
...@@ -1258,6 +1258,9 @@ int intel_connector_atomic_get_property(struct drm_connector *connector, ...@@ -1258,6 +1258,9 @@ int intel_connector_atomic_get_property(struct drm_connector *connector,
const struct drm_connector_state *state, const struct drm_connector_state *state,
struct drm_property *property, struct drm_property *property,
uint64_t *val); uint64_t *val);
struct drm_crtc_state *intel_crtc_duplicate_state(struct drm_crtc *crtc);
void intel_crtc_destroy_state(struct drm_crtc *crtc,
struct drm_crtc_state *state);
/* intel_atomic_plane.c */ /* intel_atomic_plane.c */
struct intel_plane_state *intel_create_plane_state(struct drm_plane *plane); struct intel_plane_state *intel_create_plane_state(struct drm_plane *plane);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment