| /* SPDX-License-Identifier: GPL-2.0-or-later */ | |
| /* | |
| * Copyright (C) 2016 Noralf Trønnes | |
| */ | |
| /* | |
| * Simple KMS helpers are deprected in favor of regular atomic helpers. Do not | |
| * use the min new code. | |
| */ | |
| #ifndef __LINUX_DRM_SIMPLE_KMS_HELPER_H | |
| #define __LINUX_DRM_SIMPLE_KMS_HELPER_H | |
| #include <drm/drm_crtc.h> | |
| #include <drm/drm_encoder.h> | |
| #include <drm/drm_plane.h> | |
| struct drm_simple_display_pipe; | |
| struct drm_simple_display_pipe_funcs { | |
| enum drm_mode_status (*mode_valid)(struct drm_simple_display_pipe *pipe, | |
| const struct drm_display_mode *mode); | |
| void (*enable)(struct drm_simple_display_pipe *pipe, | |
| struct drm_crtc_state *crtc_state, | |
| struct drm_plane_state *plane_state); | |
| void (*disable)(struct drm_simple_display_pipe *pipe); | |
| int (*check)(struct drm_simple_display_pipe *pipe, | |
| struct drm_plane_state *plane_state, | |
| struct drm_crtc_state *crtc_state); | |
| void (*update)(struct drm_simple_display_pipe *pipe, | |
| struct drm_plane_state *old_plane_state); | |
| int (*prepare_fb)(struct drm_simple_display_pipe *pipe, | |
| struct drm_plane_state *plane_state); | |
| void (*cleanup_fb)(struct drm_simple_display_pipe *pipe, | |
| struct drm_plane_state *plane_state); | |
| int (*begin_fb_access)(struct drm_simple_display_pipe *pipe, | |
| struct drm_plane_state *new_plane_state); | |
| void (*end_fb_access)(struct drm_simple_display_pipe *pipe, | |
| struct drm_plane_state *plane_state); | |
| int (*enable_vblank)(struct drm_simple_display_pipe *pipe); | |
| void (*disable_vblank)(struct drm_simple_display_pipe *pipe); | |
| void (*reset_crtc)(struct drm_simple_display_pipe *pipe); | |
| struct drm_crtc_state * (*duplicate_crtc_state)(struct drm_simple_display_pipe *pipe); | |
| void (*destroy_crtc_state)(struct drm_simple_display_pipe *pipe, | |
| struct drm_crtc_state *crtc_state); | |
| void (*reset_plane)(struct drm_simple_display_pipe *pipe); | |
| struct drm_plane_state * (*duplicate_plane_state)(struct drm_simple_display_pipe *pipe); | |
| void (*destroy_plane_state)(struct drm_simple_display_pipe *pipe, | |
| struct drm_plane_state *plane_state); | |
| }; | |
| struct drm_simple_display_pipe { | |
| struct drm_crtc crtc; | |
| struct drm_plane plane; | |
| struct drm_encoder encoder; | |
| struct drm_connector *connector; | |
| const struct drm_simple_display_pipe_funcs *funcs; | |
| }; | |
| int drm_simple_display_pipe_attach_bridge(struct drm_simple_display_pipe *pipe, | |
| struct drm_bridge *bridge); | |
| int drm_simple_display_pipe_init(struct drm_device *dev, | |
| struct drm_simple_display_pipe *pipe, | |
| const struct drm_simple_display_pipe_funcs *funcs, | |
| const uint32_t *formats, unsigned int format_count, | |
| const uint64_t *format_modifiers, | |
| struct drm_connector *connector); | |
| int drm_simple_encoder_init(struct drm_device *dev, | |
| struct drm_encoder *encoder, | |
| int encoder_type); | |
| void *__drmm_simple_encoder_alloc(struct drm_device *dev, size_t size, | |
| size_t offset, int encoder_type); | |
| #define drmm_simple_encoder_alloc(dev, type, member, encoder_type) \ | |
| ((type *)__drmm_simple_encoder_alloc(dev, sizeof(type), \ | |
| offsetof(type, member), \ | |
| encoder_type)) | |
| #endif /* __LINUX_DRM_SIMPLE_KMS_HELPER_H */ |