#include <drm/drm_atomic.h>
#include <drm/drm_atomic_helper.h>
#include <drm/drm_blend.h>
#include <drm/drm_bridge.h>
#include <drm/drm_bridge_connector.h>
#include <drm/drm_connector.h>
#include <drm/drm_crtc.h>
#include <drm/drm_device.h>
#include <drm/drm_drv.h>
#include <drm/drm_encoder.h>
#include <drm/drm_fbdev_dma.h>
#include <drm/drm_fourcc.h>
#include <drm/drm_framebuffer.h>
#include <drm/drm_gem_dma_helper.h>
#include <drm/drm_gem_framebuffer_helper.h>
#include <drm/drm_managed.h>
#include <drm/drm_mode_config.h>
#include <drm/drm_plane.h>
#include <drm/drm_probe_helper.h>
#include <drm/drm_simple_kms_helper.h>
#include <drm/drm_vblank.h>
#include <linux/clk.h>
#include <linux/delay.h>
#include <linux/pm_runtime.h>
#include <linux/spinlock.h>
#include "zynqmp_disp.h"
#include "zynqmp_dp.h"
#include "zynqmp_dpsub.h"
#include "zynqmp_kms.h"
static inline struct zynqmp_dpsub *to_zynqmp_dpsub(struct drm_device *drm)
{ … }
static int zynqmp_dpsub_plane_atomic_check(struct drm_plane *plane,
struct drm_atomic_state *state)
{ … }
static void zynqmp_dpsub_plane_atomic_disable(struct drm_plane *plane,
struct drm_atomic_state *state)
{ … }
static void zynqmp_dpsub_plane_atomic_update(struct drm_plane *plane,
struct drm_atomic_state *state)
{ … }
static const struct drm_plane_helper_funcs zynqmp_dpsub_plane_helper_funcs = …;
static const struct drm_plane_funcs zynqmp_dpsub_plane_funcs = …;
static int zynqmp_dpsub_create_planes(struct zynqmp_dpsub *dpsub)
{ … }
static inline struct zynqmp_dpsub *crtc_to_dpsub(struct drm_crtc *crtc)
{ … }
static void zynqmp_dpsub_crtc_atomic_enable(struct drm_crtc *crtc,
struct drm_atomic_state *state)
{ … }
static void zynqmp_dpsub_crtc_atomic_disable(struct drm_crtc *crtc,
struct drm_atomic_state *state)
{ … }
static int zynqmp_dpsub_crtc_atomic_check(struct drm_crtc *crtc,
struct drm_atomic_state *state)
{ … }
static void zynqmp_dpsub_crtc_atomic_begin(struct drm_crtc *crtc,
struct drm_atomic_state *state)
{ … }
static void zynqmp_dpsub_crtc_atomic_flush(struct drm_crtc *crtc,
struct drm_atomic_state *state)
{ … }
static const struct drm_crtc_helper_funcs zynqmp_dpsub_crtc_helper_funcs = …;
static int zynqmp_dpsub_crtc_enable_vblank(struct drm_crtc *crtc)
{ … }
static void zynqmp_dpsub_crtc_disable_vblank(struct drm_crtc *crtc)
{ … }
static const struct drm_crtc_funcs zynqmp_dpsub_crtc_funcs = …;
static int zynqmp_dpsub_create_crtc(struct zynqmp_dpsub *dpsub)
{ … }
static void zynqmp_dpsub_map_crtc_to_plane(struct zynqmp_dpsub *dpsub)
{ … }
void zynqmp_dpsub_drm_handle_vblank(struct zynqmp_dpsub *dpsub)
{ … }
static int zynqmp_dpsub_dumb_create(struct drm_file *file_priv,
struct drm_device *drm,
struct drm_mode_create_dumb *args)
{ … }
static struct drm_framebuffer *
zynqmp_dpsub_fb_create(struct drm_device *drm, struct drm_file *file_priv,
const struct drm_mode_fb_cmd2 *mode_cmd)
{ … }
static const struct drm_mode_config_funcs zynqmp_dpsub_mode_config_funcs = …;
DEFINE_DRM_GEM_DMA_FOPS(zynqmp_dpsub_drm_fops);
static const struct drm_driver zynqmp_dpsub_drm_driver = …;
static int zynqmp_dpsub_kms_init(struct zynqmp_dpsub *dpsub)
{ … }
static void zynqmp_dpsub_drm_release(struct drm_device *drm, void *res)
{ … }
int zynqmp_dpsub_drm_init(struct zynqmp_dpsub *dpsub)
{ … }
void zynqmp_dpsub_drm_cleanup(struct zynqmp_dpsub *dpsub)
{ … }