#include <linux/clk.h>
#include <linux/component.h>
#include <linux/i2c.h>
#include <linux/iopoll.h>
#include <linux/module.h>
#include <linux/of.h>
#include <linux/platform_device.h>
#include <linux/pm_runtime.h>
#include <linux/regmap.h>
#include <linux/reset.h>
#include <drm/drm_atomic.h>
#include <drm/drm_atomic_helper.h>
#include <drm/drm_edid.h>
#include <drm/drm_encoder.h>
#include <drm/drm_of.h>
#include <drm/drm_panel.h>
#include <drm/drm_print.h>
#include <drm/drm_probe_helper.h>
#include <drm/drm_simple_kms_helper.h>
#include <drm/display/drm_hdmi_helper.h>
#include <drm/display/drm_hdmi_state_helper.h>
#include "sun4i_backend.h"
#include "sun4i_crtc.h"
#include "sun4i_drv.h"
#include "sun4i_hdmi.h"
#define drm_encoder_to_sun4i_hdmi(e) …
#define drm_connector_to_sun4i_hdmi(c) …
static int sun4i_hdmi_write_infoframe(struct drm_connector *connector,
enum hdmi_infoframe_type type,
const u8 *buffer, size_t len)
{ … }
static void sun4i_hdmi_disable(struct drm_encoder *encoder,
struct drm_atomic_state *state)
{ … }
static void sun4i_hdmi_enable(struct drm_encoder *encoder,
struct drm_atomic_state *state)
{ … }
static const struct drm_encoder_helper_funcs sun4i_hdmi_helper_funcs = …;
static enum drm_mode_status
sun4i_hdmi_connector_clock_valid(const struct drm_connector *connector,
const struct drm_display_mode *mode,
unsigned long long clock)
{ … }
static int sun4i_hdmi_connector_atomic_check(struct drm_connector *connector,
struct drm_atomic_state *state)
{ … }
static enum drm_mode_status
sun4i_hdmi_connector_mode_valid(struct drm_connector *connector,
struct drm_display_mode *mode)
{ … }
static int sun4i_hdmi_get_modes(struct drm_connector *connector)
{ … }
static struct i2c_adapter *sun4i_hdmi_get_ddc(struct device *dev)
{ … }
static const struct drm_connector_hdmi_funcs sun4i_hdmi_hdmi_connector_funcs = …;
static const struct drm_connector_helper_funcs sun4i_hdmi_connector_helper_funcs = …;
static enum drm_connector_status
sun4i_hdmi_connector_detect(struct drm_connector *connector, bool force)
{ … }
static void sun4i_hdmi_connector_reset(struct drm_connector *connector)
{ … }
static const struct drm_connector_funcs sun4i_hdmi_connector_funcs = …;
#ifdef CONFIG_DRM_SUN4I_HDMI_CEC
static int sun4i_hdmi_cec_pin_read(struct cec_adapter *adap)
{ … }
static void sun4i_hdmi_cec_pin_low(struct cec_adapter *adap)
{ … }
static void sun4i_hdmi_cec_pin_high(struct cec_adapter *adap)
{ … }
static const struct cec_pin_ops sun4i_hdmi_cec_pin_ops = …;
#endif
#define SUN4I_HDMI_PAD_CTRL1_MASK …
#define SUN4I_HDMI_PLL_CTRL_MASK …
static const struct sun4i_hdmi_variant sun4i_variant = …;
static const struct sun4i_hdmi_variant sun5i_variant = …;
static const struct sun4i_hdmi_variant sun6i_variant = …;
static const struct regmap_config sun4i_hdmi_regmap_config = …;
static int sun4i_hdmi_bind(struct device *dev, struct device *master,
void *data)
{ … }
static void sun4i_hdmi_unbind(struct device *dev, struct device *master,
void *data)
{ … }
static const struct component_ops sun4i_hdmi_ops = …;
static int sun4i_hdmi_probe(struct platform_device *pdev)
{ … }
static void sun4i_hdmi_remove(struct platform_device *pdev)
{ … }
static const struct of_device_id sun4i_hdmi_of_table[] = …;
MODULE_DEVICE_TABLE(of, sun4i_hdmi_of_table);
static struct platform_driver sun4i_hdmi_driver = …;
module_platform_driver(…) …;
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;