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

Commit 7d83a155 authored by Marek Vasut's avatar Marek Vasut Committed by Daniel Vetter
Browse files

drm: simple_kms_helper: Add prepare_fb and cleanup_fb hooks



Add .prepare_fb and .cleanup_fb plane hooks into the drm_simple_kms.
These can be used by drivers to call ie. the drm_fb_cma_setup_fence()
helper.

Signed-off-by: default avatarMarek Vasut <marex@denx.de>
Cc: Noralf Trønnes <noralf@tronnes.org>
Cc: Daniel Vetter <daniel@ffwll.ch>
Cc: David Airlie <airlied@linux.ie>
Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
Link: http://patchwork.freedesktop.org/patch/msgid/20161002170124.6099-1-marex@denx.de
parent 587680c1
Loading
Loading
Loading
Loading
+26 −0
Original line number Diff line number Diff line
@@ -125,7 +125,33 @@ static void drm_simple_kms_plane_atomic_update(struct drm_plane *plane,
	pipe->funcs->update(pipe, pstate);
}

static int drm_simple_kms_plane_prepare_fb(struct drm_plane *plane,
					   struct drm_plane_state *state)
{
	struct drm_simple_display_pipe *pipe;

	pipe = container_of(plane, struct drm_simple_display_pipe, plane);
	if (!pipe->funcs || !pipe->funcs->prepare_fb)
		return 0;

	return pipe->funcs->prepare_fb(pipe, state);
}

static void drm_simple_kms_plane_cleanup_fb(struct drm_plane *plane,
					    struct drm_plane_state *state)
{
	struct drm_simple_display_pipe *pipe;

	pipe = container_of(plane, struct drm_simple_display_pipe, plane);
	if (!pipe->funcs || !pipe->funcs->cleanup_fb)
		return;

	pipe->funcs->cleanup_fb(pipe, state);
}

static const struct drm_plane_helper_funcs drm_simple_kms_plane_helper_funcs = {
	.prepare_fb = drm_simple_kms_plane_prepare_fb,
	.cleanup_fb = drm_simple_kms_plane_cleanup_fb,
	.atomic_check = drm_simple_kms_plane_atomic_check,
	.atomic_update = drm_simple_kms_plane_atomic_update,
};
+20 −0
Original line number Diff line number Diff line
@@ -69,6 +69,26 @@ struct drm_simple_display_pipe_funcs {
	 */
	void (*update)(struct drm_simple_display_pipe *pipe,
		       struct drm_plane_state *plane_state);

	/**
	 * @prepare_fb:
	 *
	 * Optional, called by struct &drm_plane_helper_funcs ->prepare_fb .
	 * Please read the documentation for the ->prepare_fb hook in
	 * struct &drm_plane_helper_funcs for more details.
	 */
	int (*prepare_fb)(struct drm_simple_display_pipe *pipe,
			  struct drm_plane_state *plane_state);

	/**
	 * @cleanup_fb:
	 *
	 * Optional, called by struct &drm_plane_helper_funcs ->cleanup_fb .
	 * Please read the documentation for the ->cleanup_fb hook in
	 * struct &drm_plane_helper_funcs for more details.
	 */
	void (*cleanup_fb)(struct drm_simple_display_pipe *pipe,
			   struct drm_plane_state *plane_state);
};

/**