mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-18 03:06:43 +00:00
drm/simple-kms: Add plane-state helpers
Just like regular plane-state helpers, drivers can use these new callbacks to create and destroy private plane state. v2: * make duplicate_state interface compatible with struct drm_plane_funcs Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de> Tested-by: Gerd Hoffmann <kraxel@redhat.com> Acked-by: Gerd Hoffmann <kraxel@redhat.com> Link: https://patchwork.freedesktop.org/patch/msgid/20210208115538.6430-2-tzimmermann@suse.de
This commit is contained in:
parent
1d048afe7e
commit
40f302adbd
@ -253,13 +253,47 @@ static const struct drm_plane_helper_funcs drm_simple_kms_plane_helper_funcs = {
|
||||
.atomic_update = drm_simple_kms_plane_atomic_update,
|
||||
};
|
||||
|
||||
static void drm_simple_kms_plane_reset(struct drm_plane *plane)
|
||||
{
|
||||
struct drm_simple_display_pipe *pipe;
|
||||
|
||||
pipe = container_of(plane, struct drm_simple_display_pipe, plane);
|
||||
if (!pipe->funcs || !pipe->funcs->reset_plane)
|
||||
return drm_atomic_helper_plane_reset(plane);
|
||||
|
||||
return pipe->funcs->reset_plane(pipe);
|
||||
}
|
||||
|
||||
static struct drm_plane_state *drm_simple_kms_plane_duplicate_state(struct drm_plane *plane)
|
||||
{
|
||||
struct drm_simple_display_pipe *pipe;
|
||||
|
||||
pipe = container_of(plane, struct drm_simple_display_pipe, plane);
|
||||
if (!pipe->funcs || !pipe->funcs->duplicate_plane_state)
|
||||
return drm_atomic_helper_plane_duplicate_state(plane);
|
||||
|
||||
return pipe->funcs->duplicate_plane_state(pipe);
|
||||
}
|
||||
|
||||
static void drm_simple_kms_plane_destroy_state(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->destroy_plane_state)
|
||||
drm_atomic_helper_plane_destroy_state(plane, state);
|
||||
else
|
||||
pipe->funcs->destroy_plane_state(pipe, state);
|
||||
}
|
||||
|
||||
static const struct drm_plane_funcs drm_simple_kms_plane_funcs = {
|
||||
.update_plane = drm_atomic_helper_update_plane,
|
||||
.disable_plane = drm_atomic_helper_disable_plane,
|
||||
.destroy = drm_plane_cleanup,
|
||||
.reset = drm_atomic_helper_plane_reset,
|
||||
.atomic_duplicate_state = drm_atomic_helper_plane_duplicate_state,
|
||||
.atomic_destroy_state = drm_atomic_helper_plane_destroy_state,
|
||||
.reset = drm_simple_kms_plane_reset,
|
||||
.atomic_duplicate_state = drm_simple_kms_plane_duplicate_state,
|
||||
.atomic_destroy_state = drm_simple_kms_plane_destroy_state,
|
||||
.format_mod_supported = drm_simple_kms_format_mod_supported,
|
||||
};
|
||||
|
||||
|
@ -149,6 +149,33 @@ struct drm_simple_display_pipe_funcs {
|
||||
* more details.
|
||||
*/
|
||||
void (*disable_vblank)(struct drm_simple_display_pipe *pipe);
|
||||
|
||||
/**
|
||||
* @reset_plane:
|
||||
*
|
||||
* Optional, called by &drm_plane_funcs.reset. Please read the
|
||||
* documentation for the &drm_plane_funcs.reset hook for more details.
|
||||
*/
|
||||
void (*reset_plane)(struct drm_simple_display_pipe *pipe);
|
||||
|
||||
/**
|
||||
* @duplicate_plane_state:
|
||||
*
|
||||
* Optional, called by &drm_plane_funcs.atomic_duplicate_state. Please
|
||||
* read the documentation for the &drm_plane_funcs.atomic_duplicate_state
|
||||
* hook for more details.
|
||||
*/
|
||||
struct drm_plane_state * (*duplicate_plane_state)(struct drm_simple_display_pipe *pipe);
|
||||
|
||||
/**
|
||||
* @destroy_plane_state:
|
||||
*
|
||||
* Optional, called by &drm_plane_funcs.atomic_destroy_state. Please
|
||||
* read the documentation for the &drm_plane_funcs.atomic_destroy_state
|
||||
* hook for more details.
|
||||
*/
|
||||
void (*destroy_plane_state)(struct drm_simple_display_pipe *pipe,
|
||||
struct drm_plane_state *plane_state);
|
||||
};
|
||||
|
||||
/**
|
||||
|
Loading…
x
Reference in New Issue
Block a user