#include <drm/drm_atomic.h>
#include <drm/drm_atomic_helper.h>
#include <drm/drm_blend.h>
#include <drm/drm_fb_dma_helper.h>
#include <drm/drm_fourcc.h>
#include <drm/drm_framebuffer.h>
#include <drm/drm_gem_atomic_helper.h>
#include <drm/drm_gem_dma_helper.h>
#include <drm/drm_managed.h>
#include <video/imx-ipu-v3.h>
#include "imx-drm.h"
#include "ipuv3-plane.h"
struct ipu_plane_state { … };
static inline struct ipu_plane_state *
to_ipu_plane_state(struct drm_plane_state *p)
{ … }
static unsigned int ipu_src_rect_width(const struct drm_plane_state *state)
{ … }
static inline struct ipu_plane *to_ipu_plane(struct drm_plane *p)
{ … }
static const uint32_t ipu_plane_all_formats[] = …;
static const uint32_t ipu_plane_rgb_formats[] = …;
static const uint64_t ipu_format_modifiers[] = …;
static const uint64_t pre_format_modifiers[] = …;
int ipu_plane_irq(struct ipu_plane *ipu_plane)
{ … }
static inline unsigned long
drm_plane_state_to_eba(struct drm_plane_state *state, int plane)
{ … }
static inline unsigned long
drm_plane_state_to_ubo(struct drm_plane_state *state)
{ … }
static inline unsigned long
drm_plane_state_to_vbo(struct drm_plane_state *state)
{ … }
static void ipu_plane_put_resources(struct drm_device *dev, void *ptr)
{ … }
static int ipu_plane_get_resources(struct drm_device *dev,
struct ipu_plane *ipu_plane)
{ … }
static bool ipu_plane_separate_alpha(struct ipu_plane *ipu_plane)
{ … }
static void ipu_plane_enable(struct ipu_plane *ipu_plane)
{ … }
void ipu_plane_disable(struct ipu_plane *ipu_plane, bool disable_dp_channel)
{ … }
void ipu_plane_disable_deferred(struct drm_plane *plane)
{ … }
static void ipu_plane_state_reset(struct drm_plane *plane)
{ … }
static struct drm_plane_state *
ipu_plane_duplicate_state(struct drm_plane *plane)
{ … }
static void ipu_plane_destroy_state(struct drm_plane *plane,
struct drm_plane_state *state)
{ … }
static bool ipu_plane_format_mod_supported(struct drm_plane *plane,
uint32_t format, uint64_t modifier)
{ … }
static const struct drm_plane_funcs ipu_plane_funcs = …;
static int ipu_plane_atomic_check(struct drm_plane *plane,
struct drm_atomic_state *state)
{ … }
static void ipu_plane_atomic_disable(struct drm_plane *plane,
struct drm_atomic_state *state)
{ … }
static int ipu_chan_assign_axi_id(int ipu_chan)
{ … }
static void ipu_calculate_bursts(u32 width, u32 cpp, u32 stride,
u8 *burstsize, u8 *num_bursts)
{ … }
static void ipu_plane_atomic_update(struct drm_plane *plane,
struct drm_atomic_state *state)
{ … }
static const struct drm_plane_helper_funcs ipu_plane_helper_funcs = …;
static const struct drm_plane_helper_funcs ipu_primary_plane_helper_funcs = …;
bool ipu_plane_atomic_update_pending(struct drm_plane *plane)
{ … }
int ipu_planes_assign_pre(struct drm_device *dev,
struct drm_atomic_state *state)
{ … }
struct ipu_plane *ipu_plane_init(struct drm_device *dev, struct ipu_soc *ipu,
int dma, int dp, unsigned int possible_crtcs,
enum drm_plane_type type)
{ … }