#include <linux/bitfield.h>
#include <linux/clk.h>
#include <linux/delay.h>
#include <linux/mfd/syscon.h>
#include <linux/module.h>
#include <linux/of.h>
#include <linux/of_platform.h>
#include <linux/phy/phy.h>
#include <linux/platform_device.h>
#include <linux/rational.h>
#include <linux/regmap.h>
#include <linux/reset.h>
#define GRF_HDPTX_CON0 …
#define HDPTX_I_PLL_EN …
#define HDPTX_I_BIAS_EN …
#define HDPTX_I_BGR_EN …
#define GRF_HDPTX_STATUS …
#define HDPTX_O_PLL_LOCK_DONE …
#define HDPTX_O_PHY_CLK_RDY …
#define HDPTX_O_PHY_RDY …
#define HDPTX_O_SB_RDY …
#define HDTPX_REG(_n, _min, _max) …
#define CMN_REG(n) …
#define SB_REG(n) …
#define LNTOP_REG(n) …
#define LANE_REG(n) …
#define LCPLL_EN_MASK …
#define LCPLL_LCVCO_MODE_EN_MASK …
#define LCPLL_PI_EN_MASK …
#define LCPLL_100M_CLK_EN_MASK …
#define LCPLL_PMS_IQDIV_RSTN …
#define LCPLL_SDC_FRAC_EN …
#define LCPLL_SDC_FRAC_RSTN …
#define LCPLL_SDC_N_MASK …
#define LCPLL_SDC_NUMBERATOR_MASK …
#define LCPLL_SDC_DENOMINATOR_MASK …
#define LCPLL_SDC_NDIV_RSTN …
#define ROPLL_LCVCO_EN …
#define ROPLL_PI_EN …
#define ROPLL_PMS_IQDIV_RSTN …
#define ROPLL_SDM_EN_MASK …
#define ROPLL_SDM_FRAC_EN_RBR …
#define ROPLL_SDM_FRAC_EN_HBR …
#define ROPLL_SDM_FRAC_EN_HBR2 …
#define ROPLL_SDM_FRAC_EN_HBR3 …
#define ROPLL_SDM_NUM_SIGN_RBR_MASK …
#define ROPLL_SDC_N_RBR_MASK …
#define ROPLL_SDC_NDIV_RSTN …
#define ROPLL_SSC_EN …
#define OVRD_PLL_CD_CLK_EN …
#define PLL_CD_HSCLK_EAST_EN …
#define PLL_PCG_POSTDIV_SEL_MASK …
#define PLL_PCG_CLK_SEL_MASK …
#define PLL_PCG_CLK_EN …
#define PLL_FRL_MODE_EN …
#define PLL_TX_HS_CLK_EN …
#define LCPLL_ALONE_MODE …
#define DIG_CLK_SEL …
#define ROPLL_REF …
#define LCPLL_REF …
#define CMN_ROPLL_ALONE_MODE …
#define ROPLL_ALONE_MODE …
#define HS_SPEED_SEL …
#define DIV_10_CLOCK …
#define IS_SPEED_SEL …
#define LINK_SYMBOL_CLOCK …
#define LINK_SYMBOL_CLOCK1_2 …
#define OVRD_SB_RXTERM_EN_MASK …
#define SB_RXTERM_EN_MASK …
#define ANA_SB_RXTERM_OFFSP_MASK …
#define ANA_SB_RXTERM_OFFSN_MASK …
#define OVRD_SB_RX_RESCAL_DONE_MASK …
#define SB_RX_RESCAL_DONE_MASK …
#define OVRD_SB_EN_MASK …
#define SB_EN_MASK …
#define OVRD_SB_EARC_CMDC_EN_MASK …
#define SB_EARC_CMDC_EN_MASK …
#define ANA_SB_TX_HLVL_PROG_MASK …
#define ANA_SB_TX_LLVL_PROG_MASK …
#define ANA_SB_DMRX_AFC_DIV_RATIO_MASK …
#define OVRD_SB_VREG_EN_MASK …
#define SB_VREG_EN_MASK …
#define OVRD_SB_VREG_LPF_BYPASS_MASK …
#define SB_VREG_LPF_BYPASS_MASK …
#define ANA_SB_VREG_GAIN_CTRL_MASK …
#define ANA_SB_VREG_REF_SEL_MASK …
#define SB_RX_RCAL_OPT_CODE_MASK …
#define SB_RX_RTERM_CTRL_MASK …
#define SB_TG_SB_EN_DELAY_TIME_MASK …
#define SB_TG_RXTERM_EN_DELAY_TIME_MASK …
#define SB_READY_DELAY_TIME_MASK …
#define SB_TG_OSC_EN_DELAY_TIME_MASK …
#define AFC_RSTN_DELAY_TIME_MASK …
#define FAST_PULSE_TIME_MASK …
#define SB_EARC_SIG_DET_BYPASS_MASK …
#define SB_AFC_TOL_MASK …
#define SB_PWM_AFC_CTRL_MASK …
#define SB_RCAL_RSTN_MASK …
#define SB_EARC_EN_MASK …
#define SB_EARC_AFC_EN_MASK …
#define OVRD_SB_READY_MASK …
#define SB_READY_MASK …
#define PROTOCOL_SEL …
#define HDMI_MODE …
#define HDMI_TMDS_FRL_SEL …
#define DATA_BUS_SEL …
#define DATA_BUS_36_40 …
#define LANE_EN …
#define ALL_LANE_EN …
#define LN0_TX_SER_RATE_SEL_RBR …
#define LN0_TX_SER_RATE_SEL_HBR …
#define LN0_TX_SER_RATE_SEL_HBR2 …
#define LN0_TX_SER_RATE_SEL_HBR3 …
#define LN1_TX_SER_RATE_SEL_RBR …
#define LN1_TX_SER_RATE_SEL_HBR …
#define LN1_TX_SER_RATE_SEL_HBR2 …
#define LN1_TX_SER_RATE_SEL_HBR3 …
#define LN2_TX_SER_RATE_SEL_RBR …
#define LN2_TX_SER_RATE_SEL_HBR …
#define LN2_TX_SER_RATE_SEL_HBR2 …
#define LN2_TX_SER_RATE_SEL_HBR3 …
#define LN3_TX_SER_RATE_SEL_RBR …
#define LN3_TX_SER_RATE_SEL_HBR …
#define LN3_TX_SER_RATE_SEL_HBR2 …
#define LN3_TX_SER_RATE_SEL_HBR3 …
struct lcpll_config { … };
struct ropll_config { … };
enum rk_hdptx_reset { … };
struct rk_hdptx_phy { … };
static const struct ropll_config ropll_tmds_cfg[] = …;
static const struct reg_sequence rk_hdtpx_common_cmn_init_seq[] = …;
static const struct reg_sequence rk_hdtpx_tmds_cmn_init_seq[] = …;
static const struct reg_sequence rk_hdtpx_common_sb_init_seq[] = …;
static const struct reg_sequence rk_hdtpx_tmds_lntop_highbr_seq[] = …;
static const struct reg_sequence rk_hdtpx_tmds_lntop_lowbr_seq[] = …;
static const struct reg_sequence rk_hdtpx_common_lane_init_seq[] = …;
static const struct reg_sequence rk_hdtpx_tmds_lane_init_seq[] = …;
static bool rk_hdptx_phy_is_rw_reg(struct device *dev, unsigned int reg)
{ … }
static const struct regmap_config rk_hdptx_phy_regmap_config = …;
#define rk_hdptx_multi_reg_write(hdptx, seq) …
static void rk_hdptx_pre_power_up(struct rk_hdptx_phy *hdptx)
{ … }
static int rk_hdptx_post_enable_lane(struct rk_hdptx_phy *hdptx)
{ … }
static int rk_hdptx_post_enable_pll(struct rk_hdptx_phy *hdptx)
{ … }
static void rk_hdptx_phy_disable(struct rk_hdptx_phy *hdptx)
{ … }
static bool rk_hdptx_phy_clk_pll_calc(unsigned int data_rate,
struct ropll_config *cfg)
{ … }
static int rk_hdptx_ropll_tmds_cmn_config(struct rk_hdptx_phy *hdptx,
unsigned int rate)
{ … }
static int rk_hdptx_ropll_tmds_mode_config(struct rk_hdptx_phy *hdptx,
unsigned int rate)
{ … }
static int rk_hdptx_phy_power_on(struct phy *phy)
{ … }
static int rk_hdptx_phy_power_off(struct phy *phy)
{ … }
static const struct phy_ops rk_hdptx_phy_ops = …;
static int rk_hdptx_phy_runtime_suspend(struct device *dev)
{ … }
static int rk_hdptx_phy_runtime_resume(struct device *dev)
{ … }
static int rk_hdptx_phy_probe(struct platform_device *pdev)
{ … }
static const struct dev_pm_ops rk_hdptx_phy_pm_ops = …;
static const struct of_device_id rk_hdptx_phy_of_match[] = …;
MODULE_DEVICE_TABLE(of, rk_hdptx_phy_of_match);
static struct platform_driver rk_hdptx_phy_driver = …;
module_platform_driver(…) …;
MODULE_AUTHOR(…) …;
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;