#include <linux/component.h>
#include <linux/kernel.h>
#include <linux/platform_device.h>
#include <linux/timer.h>
#include <drm/drm_atomic_helper.h>
#include <drm/drm_edid.h>
#include <drm/drm_framebuffer.h>
#include <drm/drm_probe_helper.h>
#include <drm/drm_simple_kms_helper.h>
#include <drm/drm_vblank.h>
#include <drm/exynos_drm.h>
#include "exynos_drm_crtc.h"
#include "exynos_drm_drv.h"
#include "exynos_drm_fb.h"
#include "exynos_drm_plane.h"
#include "exynos_drm_vidi.h"
#define VIDI_REFRESH_TIME …
#define WINDOWS_NR …
#define ctx_from_connector(c) …
struct vidi_context { … };
static inline struct vidi_context *encoder_to_vidi(struct drm_encoder *e)
{ … }
static const char fake_edid_info[] = …;
static const uint32_t formats[] = …;
static const enum drm_plane_type vidi_win_types[WINDOWS_NR] = …;
static int vidi_enable_vblank(struct exynos_drm_crtc *crtc)
{ … }
static void vidi_disable_vblank(struct exynos_drm_crtc *crtc)
{ … }
static void vidi_update_plane(struct exynos_drm_crtc *crtc,
struct exynos_drm_plane *plane)
{ … }
static void vidi_atomic_enable(struct exynos_drm_crtc *crtc)
{ … }
static void vidi_atomic_disable(struct exynos_drm_crtc *crtc)
{ … }
static const struct exynos_drm_crtc_ops vidi_crtc_ops = …;
static void vidi_fake_vblank_timer(struct timer_list *t)
{ … }
static ssize_t vidi_show_connection(struct device *dev,
struct device_attribute *attr, char *buf)
{ … }
static ssize_t vidi_store_connection(struct device *dev,
struct device_attribute *attr,
const char *buf, size_t len)
{ … }
static DEVICE_ATTR(connection, 0644, vidi_show_connection,
vidi_store_connection);
static struct attribute *vidi_attrs[] = …;
ATTRIBUTE_GROUPS(…);
int vidi_connection_ioctl(struct drm_device *drm_dev, void *data,
struct drm_file *file_priv)
{ … }
static enum drm_connector_status vidi_detect(struct drm_connector *connector,
bool force)
{ … }
static void vidi_connector_destroy(struct drm_connector *connector)
{ … }
static const struct drm_connector_funcs vidi_connector_funcs = …;
static int vidi_get_modes(struct drm_connector *connector)
{ … }
static const struct drm_connector_helper_funcs vidi_connector_helper_funcs = …;
static int vidi_create_connector(struct drm_encoder *encoder)
{ … }
static void exynos_vidi_mode_set(struct drm_encoder *encoder,
struct drm_display_mode *mode,
struct drm_display_mode *adjusted_mode)
{ … }
static void exynos_vidi_enable(struct drm_encoder *encoder)
{ … }
static void exynos_vidi_disable(struct drm_encoder *encoder)
{ … }
static const struct drm_encoder_helper_funcs exynos_vidi_encoder_helper_funcs = …;
static int vidi_bind(struct device *dev, struct device *master, void *data)
{ … }
static void vidi_unbind(struct device *dev, struct device *master, void *data)
{ … }
static const struct component_ops vidi_component_ops = …;
static int vidi_probe(struct platform_device *pdev)
{ … }
static void vidi_remove(struct platform_device *pdev)
{ … }
struct platform_driver vidi_driver = …;