drm: simple_kms_helper: Add prepare_fb and cleanup_fb hooks
authorMarek Vasut <marex@denx.de>
Sun, 2 Oct 2016 17:01:24 +0000 (19:01 +0200)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Wed, 5 Oct 2016 13:18:02 +0000 (15:18 +0200)
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: Marek 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: Daniel Vetter <daniel.vetter@ffwll.ch>
Link: http://patchwork.freedesktop.org/patch/msgid/20161002170124.6099-1-marex@denx.de
drivers/gpu/drm/drm_simple_kms_helper.c
include/drm/drm_simple_kms_helper.h

index 7b6d26e64977b65473a2348f000a94707db20589..7bae08c2bf0a92b9c547550cf61c4b670130d90d 100644 (file)
@@ -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,
 };
index 5d112f75e04c0255e54b9c74ef8093ab46aa03d9..01a8436ccb0a9b02ff38df34857ec1bac9ba8a6f 100644 (file)
@@ -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);
 };
 
 /**