#include <linux/gpio/consumer.h>
#include <linux/i2c.h>
#include <linux/media-bus-format.h>
#include <linux/module.h>
#include <linux/of_graph.h>
#include <linux/platform_device.h>
#include <linux/workqueue.h>
#include <drm/drm_atomic_helper.h>
#include <drm/drm_bridge.h>
#include <drm/drm_crtc.h>
#include <drm/drm_edid.h>
#include <drm/drm_print.h>
#include <drm/drm_probe_helper.h>
#define HOTPLUG_DEBOUNCE_MS …
struct tfp410 { … };
static inline struct tfp410 *
drm_bridge_to_tfp410(struct drm_bridge *bridge)
{ … }
static inline struct tfp410 *
drm_connector_to_tfp410(struct drm_connector *connector)
{ … }
static int tfp410_get_modes(struct drm_connector *connector)
{ … }
static const struct drm_connector_helper_funcs tfp410_con_helper_funcs = …;
static enum drm_connector_status
tfp410_connector_detect(struct drm_connector *connector, bool force)
{ … }
static const struct drm_connector_funcs tfp410_con_funcs = …;
static void tfp410_hpd_work_func(struct work_struct *work)
{ … }
static void tfp410_hpd_callback(void *arg, enum drm_connector_status status)
{ … }
static int tfp410_attach(struct drm_bridge *bridge,
enum drm_bridge_attach_flags flags)
{ … }
static void tfp410_detach(struct drm_bridge *bridge)
{ … }
static void tfp410_enable(struct drm_bridge *bridge)
{ … }
static void tfp410_disable(struct drm_bridge *bridge)
{ … }
static enum drm_mode_status tfp410_mode_valid(struct drm_bridge *bridge,
const struct drm_display_info *info,
const struct drm_display_mode *mode)
{ … }
static u32 *tfp410_get_input_bus_fmts(struct drm_bridge *bridge,
struct drm_bridge_state *bridge_state,
struct drm_crtc_state *crtc_state,
struct drm_connector_state *conn_state,
u32 output_fmt,
unsigned int *num_input_fmts)
{ … }
static int tfp410_atomic_check(struct drm_bridge *bridge,
struct drm_bridge_state *bridge_state,
struct drm_crtc_state *crtc_state,
struct drm_connector_state *conn_state)
{ … }
static const struct drm_bridge_funcs tfp410_bridge_funcs = …;
static const struct drm_bridge_timings tfp410_default_timings = …;
static int tfp410_parse_timings(struct tfp410 *dvi, bool i2c)
{ … }
static int tfp410_init(struct device *dev, bool i2c)
{ … }
static void tfp410_fini(struct device *dev)
{ … }
static int tfp410_probe(struct platform_device *pdev)
{ … }
static void tfp410_remove(struct platform_device *pdev)
{ … }
static const struct of_device_id tfp410_match[] = …;
MODULE_DEVICE_TABLE(of, tfp410_match);
static struct platform_driver tfp410_platform_driver = …;
#if IS_ENABLED(CONFIG_I2C)
static int tfp410_i2c_probe(struct i2c_client *client)
{ … }
static void tfp410_i2c_remove(struct i2c_client *client)
{ … }
static const struct i2c_device_id tfp410_i2c_ids[] = …;
MODULE_DEVICE_TABLE(i2c, tfp410_i2c_ids);
static struct i2c_driver tfp410_i2c_driver = …;
#endif
static struct { … } tfp410_registered_driver;
static int __init tfp410_module_init(void)
{ … }
module_init(…) …;
static void __exit tfp410_module_exit(void)
{ … }
module_exit(tfp410_module_exit);
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;