#include <linux/clk.h>
#include <linux/component.h>
#include <linux/iopoll.h>
#include <linux/irq.h>
#include <linux/mfd/syscon.h>
#include <linux/of.h>
#include <linux/platform_device.h>
#include <linux/pm_runtime.h>
#include <linux/regmap.h>
#include <drm/drm_blend.h>
#include <drm/drm_fourcc.h>
#include <drm/drm_framebuffer.h>
#include <drm/drm_vblank.h>
#include "exynos_drm_crtc.h"
#include "exynos_drm_drv.h"
#include "exynos_drm_fb.h"
#include "exynos_drm_plane.h"
#include "regs-decon5433.h"
#define DSD_CFG_MUX …
#define DSD_CFG_MUX_TE_UNMASK_GLOBAL …
#define WINDOWS_NR …
#define PRIMARY_WIN …
#define CURSON_WIN …
#define MIN_FB_WIDTH_FOR_16WORD_BURST …
#define I80_HW_TRG …
#define IFTYPE_HDMI …
static const char * const decon_clks_name[] = …;
struct decon_context { … };
static const uint32_t decon_formats[] = …;
static const enum drm_plane_type decon_win_types[WINDOWS_NR] = …;
static const unsigned int capabilities[WINDOWS_NR] = …;
static inline void decon_set_bits(struct decon_context *ctx, u32 reg, u32 mask,
u32 val)
{ … }
static int decon_enable_vblank(struct exynos_drm_crtc *crtc)
{ … }
static void decon_disable_vblank(struct exynos_drm_crtc *crtc)
{ … }
static u32 decon_get_frame_count(struct decon_context *ctx, bool end)
{ … }
static void decon_setup_trigger(struct decon_context *ctx)
{ … }
static void decon_commit(struct exynos_drm_crtc *crtc)
{ … }
static void decon_win_set_bldeq(struct decon_context *ctx, unsigned int win,
unsigned int alpha, unsigned int pixel_alpha)
{ … }
static void decon_win_set_bldmod(struct decon_context *ctx, unsigned int win,
unsigned int alpha, unsigned int pixel_alpha)
{ … }
static void decon_win_set_pixfmt(struct decon_context *ctx, unsigned int win,
struct drm_framebuffer *fb)
{ … }
static void decon_shadow_protect(struct decon_context *ctx, bool protect)
{ … }
static void decon_atomic_begin(struct exynos_drm_crtc *crtc)
{ … }
#define BIT_VAL(x, e, s) …
#define COORDINATE_X(x) …
#define COORDINATE_Y(x) …
static void decon_update_plane(struct exynos_drm_crtc *crtc,
struct exynos_drm_plane *plane)
{ … }
static void decon_disable_plane(struct exynos_drm_crtc *crtc,
struct exynos_drm_plane *plane)
{ … }
static void decon_atomic_flush(struct exynos_drm_crtc *crtc)
{ … }
static void decon_swreset(struct decon_context *ctx)
{ … }
static void decon_atomic_enable(struct exynos_drm_crtc *crtc)
{ … }
static void decon_atomic_disable(struct exynos_drm_crtc *crtc)
{ … }
static irqreturn_t decon_te_irq_handler(int irq, void *dev_id)
{ … }
static void decon_clear_channels(struct exynos_drm_crtc *crtc)
{ … }
static enum drm_mode_status decon_mode_valid(struct exynos_drm_crtc *crtc,
const struct drm_display_mode *mode)
{ … }
static const struct exynos_drm_crtc_ops decon_crtc_ops = …;
static int decon_bind(struct device *dev, struct device *master, void *data)
{ … }
static void decon_unbind(struct device *dev, struct device *master, void *data)
{ … }
static const struct component_ops decon_component_ops = …;
static void decon_handle_vblank(struct decon_context *ctx)
{ … }
static irqreturn_t decon_irq_handler(int irq, void *dev_id)
{ … }
static int exynos5433_decon_suspend(struct device *dev)
{ … }
static int exynos5433_decon_resume(struct device *dev)
{ … }
static DEFINE_RUNTIME_DEV_PM_OPS(exynos5433_decon_pm_ops,
exynos5433_decon_suspend,
exynos5433_decon_resume, NULL);
static const struct of_device_id exynos5433_decon_driver_dt_match[] = …;
MODULE_DEVICE_TABLE(of, exynos5433_decon_driver_dt_match);
static int decon_conf_irq(struct decon_context *ctx, const char *name,
irq_handler_t handler, unsigned long int flags)
{ … }
static int exynos5433_decon_probe(struct platform_device *pdev)
{ … }
static void exynos5433_decon_remove(struct platform_device *pdev)
{ … }
struct platform_driver exynos5433_decon_driver = …;