#include <linux/clk.h>
#include <drm/drm_atomic_helper.h>
#include <drm/drm_debugfs.h>
#include <drm/drm_device.h>
#include <drm/drm_drv.h>
#include <drm/drm_edid.h>
#include <drm/drm_fb_dma_helper.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_module.h>
#include <drm/drm_of.h>
#include <drm/drm_probe_helper.h>
#include <drm/drm_simple_kms_helper.h>
#include <linux/dma-mapping.h>
#include <linux/module.h>
#include <linux/of_reserved_mem.h>
#include <linux/platform_device.h>
#define ARCPGU_REG_CTRL …
#define ARCPGU_REG_STAT …
#define ARCPGU_REG_FMT …
#define ARCPGU_REG_HSYNC …
#define ARCPGU_REG_VSYNC …
#define ARCPGU_REG_ACTIVE …
#define ARCPGU_REG_BUF0_ADDR …
#define ARCPGU_REG_STRIDE …
#define ARCPGU_REG_START_SET …
#define ARCPGU_REG_ID …
#define ARCPGU_CTRL_ENABLE_MASK …
#define ARCPGU_CTRL_VS_POL_MASK …
#define ARCPGU_CTRL_VS_POL_OFST …
#define ARCPGU_CTRL_HS_POL_MASK …
#define ARCPGU_CTRL_HS_POL_OFST …
#define ARCPGU_MODE_XRGB8888 …
#define ARCPGU_STAT_BUSY_MASK …
struct arcpgu_drm_private { … };
#define dev_to_arcpgu(x) …
#define pipe_to_arcpgu_priv(x) …
static inline void arc_pgu_write(struct arcpgu_drm_private *arcpgu,
unsigned int reg, u32 value)
{ … }
static inline u32 arc_pgu_read(struct arcpgu_drm_private *arcpgu,
unsigned int reg)
{ … }
#define XRES_DEF …
#define YRES_DEF …
#define XRES_MAX …
#define YRES_MAX …
static int arcpgu_drm_connector_get_modes(struct drm_connector *connector)
{ … }
static const struct drm_connector_helper_funcs
arcpgu_drm_connector_helper_funcs = …;
static const struct drm_connector_funcs arcpgu_drm_connector_funcs = …;
static int arcpgu_drm_sim_init(struct drm_device *drm, struct drm_connector *connector)
{ … }
#define ENCODE_PGU_XY(x, y) …
static const u32 arc_pgu_supported_formats[] = …;
static void arc_pgu_set_pxl_fmt(struct arcpgu_drm_private *arcpgu)
{ … }
static enum drm_mode_status arc_pgu_mode_valid(struct drm_simple_display_pipe *pipe,
const struct drm_display_mode *mode)
{ … }
static void arc_pgu_mode_set(struct arcpgu_drm_private *arcpgu)
{ … }
static void arc_pgu_enable(struct drm_simple_display_pipe *pipe,
struct drm_crtc_state *crtc_state,
struct drm_plane_state *plane_state)
{ … }
static void arc_pgu_disable(struct drm_simple_display_pipe *pipe)
{ … }
static void arc_pgu_update(struct drm_simple_display_pipe *pipe,
struct drm_plane_state *state)
{ … }
static const struct drm_simple_display_pipe_funcs arc_pgu_pipe_funcs = …;
static const struct drm_mode_config_funcs arcpgu_drm_modecfg_funcs = …;
DEFINE_DRM_GEM_DMA_FOPS(arcpgu_drm_ops);
static int arcpgu_load(struct arcpgu_drm_private *arcpgu)
{ … }
static int arcpgu_unload(struct drm_device *drm)
{ … }
#ifdef CONFIG_DEBUG_FS
static int arcpgu_show_pxlclock(struct seq_file *m, void *arg)
{ … }
static struct drm_info_list arcpgu_debugfs_list[] = …;
static void arcpgu_debugfs_init(struct drm_minor *minor)
{ … }
#endif
static const struct drm_driver arcpgu_drm_driver = …;
static int arcpgu_probe(struct platform_device *pdev)
{ … }
static void arcpgu_remove(struct platform_device *pdev)
{ … }
static const struct of_device_id arcpgu_of_table[] = …;
MODULE_DEVICE_TABLE(of, arcpgu_of_table);
static struct platform_driver arcpgu_platform_driver = …;
drm_module_platform_driver(…);
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;