#include <linux/delay.h>
#include <linux/err.h>
#include <linux/gpio/consumer.h>
#include <linux/i2c.h>
#include <linux/interrupt.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/of_platform.h>
#include <linux/regmap.h>
#include <linux/regulator/consumer.h>
#include <linux/types.h>
#include <drm/display/drm_dp_helper.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_of.h>
#include <drm/drm_panel.h>
#include <drm/drm_print.h>
#include <drm/drm_probe_helper.h>
#include "analogix-i2c-dptx.h"
#include "analogix-i2c-txcommon.h"
#define POLL_DELAY …
#define POLL_TIMEOUT …
#define I2C_IDX_DPTX …
#define I2C_IDX_TXCOM …
static const u8 anx6345_i2c_addresses[] = …;
#define I2C_NUM_ADDRESSES …
struct anx6345 { … };
static inline struct anx6345 *connector_to_anx6345(struct drm_connector *c)
{ … }
static inline struct anx6345 *bridge_to_anx6345(struct drm_bridge *bridge)
{ … }
static int anx6345_set_bits(struct regmap *map, u8 reg, u8 mask)
{ … }
static int anx6345_clear_bits(struct regmap *map, u8 reg, u8 mask)
{ … }
static ssize_t anx6345_aux_transfer(struct drm_dp_aux *aux,
struct drm_dp_aux_msg *msg)
{ … }
static int anx6345_dp_link_training(struct anx6345 *anx6345)
{ … }
static int anx6345_tx_initialization(struct anx6345 *anx6345)
{ … }
static void anx6345_poweron(struct anx6345 *anx6345)
{ … }
static void anx6345_poweroff(struct anx6345 *anx6345)
{ … }
static int anx6345_start(struct anx6345 *anx6345)
{ … }
static int anx6345_config_dp_output(struct anx6345 *anx6345)
{ … }
static int anx6345_get_downstream_info(struct anx6345 *anx6345)
{ … }
static int anx6345_get_modes(struct drm_connector *connector)
{ … }
static const struct drm_connector_helper_funcs anx6345_connector_helper_funcs = …;
static void
anx6345_connector_destroy(struct drm_connector *connector)
{ … }
static const struct drm_connector_funcs anx6345_connector_funcs = …;
static int anx6345_bridge_attach(struct drm_bridge *bridge,
enum drm_bridge_attach_flags flags)
{ … }
static void anx6345_bridge_detach(struct drm_bridge *bridge)
{ … }
static enum drm_mode_status
anx6345_bridge_mode_valid(struct drm_bridge *bridge,
const struct drm_display_info *info,
const struct drm_display_mode *mode)
{ … }
static void anx6345_bridge_disable(struct drm_bridge *bridge)
{ … }
static void anx6345_bridge_enable(struct drm_bridge *bridge)
{ … }
static const struct drm_bridge_funcs anx6345_bridge_funcs = …;
static void unregister_i2c_dummy_clients(struct anx6345 *anx6345)
{ … }
static const struct regmap_config anx6345_regmap_config = …;
static const u16 anx6345_chipid_list[] = …;
static bool anx6345_get_chip_id(struct anx6345 *anx6345)
{ … }
static int anx6345_i2c_probe(struct i2c_client *client)
{ … }
static void anx6345_i2c_remove(struct i2c_client *client)
{ … }
static const struct i2c_device_id anx6345_id[] = …;
MODULE_DEVICE_TABLE(i2c, anx6345_id);
static const struct of_device_id anx6345_match_table[] = …;
MODULE_DEVICE_TABLE(of, anx6345_match_table);
static struct i2c_driver anx6345_driver = …;
module_i2c_driver(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_AUTHOR(…) …;
MODULE_LICENSE(…) …;