Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c196e1d6 authored by Matt Roper's avatar Matt Roper Committed by Daniel Vetter
Browse files

drm/i915: Switch plane properties to full atomic helper.



This will exercise our atomic pipeline for legacy property updates.

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 1356837e
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -117,6 +117,15 @@ static int intel_plane_atomic_check(struct drm_plane *plane,
	crtc = crtc ? crtc : plane->crtc;
	intel_crtc = to_intel_crtc(crtc);

	/*
	 * Both crtc and plane->crtc could be NULL if we're updating a
	 * property while the plane is disabled.  We don't actually have
	 * anything driver-specific we need to test in that case, so
	 * just return success.
	 */
	if (!crtc)
		return 0;

	/*
	 * The original src/dest coordinates are stored in state->base, but
	 * we want to keep another copy internal to our driver that we can
+2 −1
Original line number Diff line number Diff line
@@ -37,6 +37,7 @@
#include <drm/i915_drm.h>
#include "i915_drv.h"
#include "i915_trace.h"
#include <drm/drm_atomic_helper.h>
#include <drm/drm_dp_helper.h>
#include <drm/drm_crtc_helper.h>
#include <drm/drm_plane_helper.h>
@@ -12055,7 +12056,7 @@ const struct drm_plane_funcs intel_plane_funcs = {
	.update_plane = drm_plane_helper_update,
	.disable_plane = drm_plane_helper_disable,
	.destroy = intel_plane_destroy,
	.set_property = intel_plane_set_property,
	.set_property = drm_atomic_helper_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,
+0 −26
Original line number Diff line number Diff line
@@ -1362,32 +1362,6 @@ int intel_sprite_get_colorkey(struct drm_device *dev, void *data,
	return ret;
}

int intel_plane_set_property(struct drm_plane *plane,
			     struct drm_property *prop,
			     uint64_t val)
{
	struct drm_device *dev = plane->dev;
	uint64_t old_val;
	int ret = -ENOENT;

	if (prop == dev->mode_config.rotation_property) {
		/* exactly one rotation angle please */
		if (hweight32(val & 0xf) != 1)
			return -EINVAL;

		if (plane->state->rotation == val)
			return 0;

		old_val = plane->state->rotation;
		plane->state->rotation = val;
		ret = intel_plane_restore(plane);
		if (ret)
			plane->state->rotation = old_val;
	}

	return ret;
}

int intel_plane_restore(struct drm_plane *plane)
{
	if (!plane->crtc || !plane->fb)