13 #include <soc/addressmap.h>
14 #include <soc/clock.h>
15 #include <soc/display.h>
26 #define DO_FAST_LINK_TRAINING 0
57 u32 temp = timeout_us;
62 if (timeout_us > poll_interval_us)
63 timeout_us -= poll_interval_us;
66 }
while ((reg_val &
mask) != exp_val);
68 if ((reg_val &
mask) == exp_val)
71 "dpaux_poll_register 0x%x: timeout: "
72 "(reg_val)0x%08x & (mask)0x%08x != (exp_val)0x%08x\n",
73 reg, reg_val,
mask, exp_val);
117 memcpy(&temp_data, data, 4);
128 while ((timeout_retries > 0) && (defer_retries > 0)) {
145 if (timeout_retries-- > 0) {
148 *aux_stat, timeout_retries);
155 " (0x%x)\n", *aux_stat);
162 if (defer_retries-- > 0) {
164 " -- %d\n", *aux_stat, defer_retries);
171 " max retries (0x%x)\n", *aux_stat);
226 while ((timeout_retries > 0) && (defer_retries > 0)) {
243 if (timeout_retries-- > 0) {
245 " -- %d\n", *aux_stat,
253 " (0x%x)\n", *aux_stat);
260 if (defer_retries-- > 0) {
262 " -- %d\n", *aux_stat, defer_retries);
269 " max retries (0x%x)\n", *aux_stat);
284 memcpy(data, temp_data, *size);
298 #if DO_FAST_LINK_TRAINING
307 cur_size = *size - finished;
312 data, &cur_size, aux_stat);
319 finished += cur_size;
321 }
while (*size > finished);
336 cmd, data_ptr, &size, &status);
339 "dp: Failed to read DPCD data. CMD 0x%x, Status 0x%x\n",
353 cmd, &data, &size, &status);
356 "dp: Failed to write DPCD data. CMD 0x%x, Status 0x%x\n",
373 &
addr, &len, aux_stat);
382 data, &cur_size, aux_stat);
391 finished += cur_size;
392 }
while (*size > finished);
487 const u64 f = 100000;
489 u32 num_linkclk_line;
499 u64 accumulated_error_f = 0;
500 u32 lowest_neg_activecount = 0;
501 u32 lowest_neg_activepolarity = 0;
502 u32 lowest_neg_tusize = 64;
503 u32 num_symbols_per_line;
504 u64 lowest_neg_activefrac = 0;
505 u64 lowest_neg_error_f = 64 * f;
528 for (i = 64; i >= 32; --i) {
529 activesym_f = ratio_f * i;
530 activecount_f = (
u64)(activesym_f / (
u32)f) * f;
531 frac_f = activesym_f - activecount_f;
532 activecount = (
u32)((
u64)(activecount_f / (
u32)f));
534 if (frac_f < (f / 2))
542 frac_f = (
u64)((f * f) / frac_f);
543 if (frac_f > (15 * f))
544 activefrac = activepolarity ? 1 : 15;
546 activefrac = activepolarity ?
554 if (activepolarity == 1)
555 approx_value_f = activefrac ? (
u64)(
556 (activecount_f + (activefrac * f - f) * f) /
560 approx_value_f = activefrac ?
561 activecount_f + (
u64)(f / activefrac) :
564 if (activesym_f < approx_value_f) {
565 accumulated_error_f = num_linkclk_line *
566 (
u64)((approx_value_f - activesym_f) / i);
569 accumulated_error_f = num_linkclk_line *
570 (
u64)((activesym_f - approx_value_f) / i);
574 if ((neg && (lowest_neg_error_f > accumulated_error_f)) ||
575 (accumulated_error_f == 0)) {
576 lowest_neg_error_f = accumulated_error_f;
577 lowest_neg_tusize = i;
578 lowest_neg_activecount = activecount;
579 lowest_neg_activepolarity = activepolarity;
580 lowest_neg_activefrac = activefrac;
582 if (accumulated_error_f == 0)
587 if (lowest_neg_activefrac == 0) {
590 lowest_neg_activecount : lowest_neg_activecount - 1;
608 "dp: sor setting: unable to get a good tusize, "
609 "force watermark to 30.\n");
614 "dp: sor setting: force watermark to the number "
615 "of symbols in the line.\n");
753 #if DO_FAST_LINK_TRAINING
787 for (cnt = 0; cnt < n_lanes / 2; cnt++) {
820 for (cnt = 0; cnt < n_lanes / 2; cnt++) {
842 for (cnt = 0; cnt < n_lanes / 2; cnt++) {
859 for (cnt = 0; cnt < n_lanes; cnt++) {
860 pc[cnt] = (data_ptr >>
871 is_clk_recovery ?
udelay(200) :
897 "Can not set link config.\n");
970 for (cnt = 0; cnt < n_lanes; cnt++) {
972 u32 pe_reg, vs_reg, pc_reg;
994 "dp: incorrect lane cnt\n");
1002 vs_reg << shift, pc_reg << shift, pc_supported);
1008 for (cnt = 0; cnt < n_lanes; cnt++) {
1025 for (cnt = 0; cnt < n_lanes / 2; cnt++) {
1044 u32 vs[4],
u32 pc[4],
u8 pc_supported,
1049 for (retry_cnt = 0; retry_cnt < 4; retry_cnt++) {
1091 u32 vs[4],
u32 pc[4],
u8 pc_supported,
1104 memcpy(vs_temp, vs,
sizeof(vs_temp));
1107 if (
memcmp(vs_temp, vs,
sizeof(vs_temp)))
1111 }
while (retry_cnt < 5);
1136 u32 pe[4], vs[4], pc[4];
1161 "dp: channel equalization failed\n");
1177 #if DO_FAST_LINK_TRAINING
1207 size =
sizeof(data16);
1210 status =
mask & 0x1111;
1211 if ((data16 & status) != status) {
1213 "dp: Link training error for TP1 (%#x)\n", data16);
1228 size =
sizeof(data32);
1231 if ((data32 &
mask) != (0x7777 &
mask)) {
1233 "dp: Link training error for TP2/3 (0x%x)\n", data32);
1245 "Fast link trainging failed, link bw %d, lane # %d\n",
1246 link_bw, lane_count);
1251 "Fast link trainging succeeded, link bw %d, lane %d\n",
1263 #if DO_FAST_LINK_TRAINING
1306 "dp: error mode configuration");
1311 "dp: error link configuration");
1317 memcpy(&temp_cfg, link_cfg,
sizeof(temp_cfg));
1329 memcpy(link_cfg, &temp_cfg,
sizeof(temp_cfg));
1339 u32 size =
sizeof(
buf), aux_stat = 0;
1414 (
config->dp.hpd_unplug_min_us <<
1424 u32 timeout = timeout_ms * 1000;
1431 }
while (timeout > 0);
1449 "SINK receive port 0 is out of synchronization\n");
1452 "SINK is in synchronization\n");
1524 "dp: failed to power on panel (0x%x)\n", ret);
1538 "dp: failed to read the revision number from sink\n");
1565 (
void *)
config->display_controller;
1567 u32 framebuffer_size_mb =
config->framebuffer_size /
MiB;
1568 u32 framebuffer_base_mb =
config->framebuffer_base /
MiB;
1575 __func__, disp_ctrl);
1577 if (disp_ctrl ==
NULL) {
1582 dc->
base = (
void *)disp_ctrl;
1589 if (framebuffer_size_mb == 0) {
1595 config->framebuffer_size = framebuffer_size_mb *
MiB;
1596 config->framebuffer_base = framebuffer_base_mb *
MiB;
1603 if (plld_rate == 0) {
1606 }
else if (plld_rate !=
config->pixel_clock * 2) {
1608 config->pixel_clock = plld_rate / 2;
1636 &pwm->pwm[
config->dp.pwm].csr);
void * memcpy(void *dest, const void *src, size_t n)
void * memset(void *dstpp, int c, size_t len)
#define retry(attempts, condition,...)
#define printk(level,...)
void pass_mode_info_to_payload(struct soc_nvidia_tegra210_config *config)
unsigned long READL(void *p)
void WRITEL(unsigned long value, void *p)
void mdelay(unsigned int msecs)
#define DPAUX_DP_AUXSTAT_REPLYTYPE_MASK
#define DPAUX_DP_AUXSTAT_TIMEOUT_ERROR_PENDING
#define NV_DPCD_TRAINING_LANEX_SET_DC_SHIFT
#define NV_DPCD_MAX_LANE_COUNT
#define NV_DPCD_LANE0_1_STATUS
#define DPAUX_DP_AUXSTAT_REPLYTYPE_DEFER
#define NV_DPCD_TRAINING_PATTERN_SET
#define NV_DPCD_SET_POWER_VAL_D3_PWRDWN
#define NV_DPCD_LINK_BANDWIDTH_SET
#define DP_POWER_ON_MAX_TRIES
#define NV_DPCD_ADJUST_REQ_LANEXPLUS1_DC_SHIFT
#define NV_DPCD_LANEX_SET2_PC2_MAX_REACHED_F
#define NV_DPCD_TRAINING_PATTERN_SET_TPS_TP1
#define NV_DPCD_MAIN_LINK_CHANNEL_CODING_SET_ANSI_8B10B
#define DPAUX_DP_AUXSTAT_HPD_STATUS_PLUGGED
#define DPAUX_DP_AUXSTAT_NO_STOP_ERROR_PENDING
#define DPAUX_DP_AUXCTL_TRANSACTREQ_PENDING
#define DPAUX_DP_AUXCTL_CMD_MOTWR
#define DPAUX_DP_AUXCTL_CMD_I2CREQWSTAT
#define DP_AUX_TIMEOUT_MAX_TRIES
#define NV_DPCD_ADJUST_REQ_LANEX_PE_SHIFT
#define DPAUX_HYBRID_PADCTL_AUX_DRVZ_OHM_50
#define DPAUX_HYBRID_SPARE
static const u32 tegra_dp_vs_regs[][4][4]
#define NV_DPCD_STATUS_LANEX_CHN_EQ_DONE_SHIFT
#define NV_DPCD_MAX_DOWNSPREAD_VAL_0_5_PCT
#define NV_DPCD_EDP_CONFIG_CAP_FRAMING_CHANGE_YES
#define NV_DPCD_STATUS_LANEXPLUS1_SYMBOL_LOCKED_YES
#define DP_AUX_TIMEOUT_MS
#define DPAUX_DP_AUXSTAT_RX_ERROR_PENDING
#define NV_DPCD_TRAINING_LANEX_SET_PE_MAX_REACHED_T
#define NV_DPCD_LANEX_SET2_PC2_SHIFT
#define NV_DPCD_ADJUST_REQ_POST_CURSOR2
#define NV_DPCD_LANE_COUNT_SET
#define DPAUX_HPD_CONFIG_UNPLUG_MIN_TIME_SHIFT
#define DPAUX_HYBRID_PADCTL
#define NV_DPCD_ADJUST_REQ_POST_CURSOR2_LANE_MASK
#define NV_DPCD_STATUS_LANEX_SYMBOL_LOCKED_SHFIT
#define NV_DPCD_ADJUST_REQ_LANEXPLUS1_PE_SHIFT
#define NV_DPCD_ADJUST_REQ_POST_CURSOR2_LANE_SHIFT(i)
#define NV_DPCD_ADJUST_REQ_LANEX_DC_MASK
#define NV_DPCD_STATUS_LANEXPLUS1_CR_DONE_YES
static int tegra_dp_is_max_pe(u32 pe, u32 vs)
#define DPAUX_DP_AUXCTL_CMD_MASK
#define DPAUX_DP_AUXSTAT_REPLYTYPE_ACK
#define NV_DPCD_TRAINING_AUX_RD_INTERVAL
#define DPAUX_DP_AUXCTL_CMD_I2CWR
static int tegra_dp_is_max_pc(u32 pc)
#define DP_DPCP_RETRY_SLEEP_NS
#define NV_DPCD_SET_POWER_VAL_D0_NORMAL
static const u32 tegra_dp_pe_regs[][4][4]
static int tegra_dp_is_max_vs(u32 pe, u32 vs)
#define DPAUX_DP_AUXDATA_WRITE_W(i)
#define DPAUX_DP_AUXCTL_CMDLEN_SHIFT
#define NV_DPCD_STATUS_LANEXPLUS1_CHN_EQ_DONE_SHIFT
#define NV_DPCD_LANEXPLUS1_SET2_PC2_MAX_REACHED_F
#define NV_DPCD_SET_POWER
#define NV_DPCD_ADJUST_REQ_LANEXPLUS1_PE_MASK
#define NV_DPCD_STATUS_LANEXPLUS1_CHN_EQ_DONE_YES
#define NV_DPCD_LANE_ALIGN_STATUS_UPDATED_DONE_YES
#define NV_DPCD_LANE_ALIGN_STATUS_UPDATED
#define NV_DPCD_STATUS_LANEX_SYMBOL_LOCKED_YES
#define DPAUX_DP_AUXCTL_CMDLEN_FIELD
#define DPAUX_INTR_EN_AUX
#define NV_DPCD_TRAINING_LANE0_SET
#define NV_DPCD_MAIN_LINK_CHANNEL_CODING_SET
#define NV_DPCD_STATUS_LANEX_CHN_EQ_DONE_YES
#define NV_DPCD_TRAINING_LANEX_SET_PE_SHIFT
#define DPAUX_DP_AUXSTAT_REPLYTYPE_I2CDEFER
#define NV_DPCD_LANEX_SET2_PC2_MAX_REACHED_T
#define NV_DPCD_TRAINING_LANE0_1_SET2
#define NV_DPCD_ADJUST_REQ_LANEX_DC_SHIFT
#define DPAUX_DP_AUXCTL_CMD_I2CRD
#define NV_DPCD_EDP_CONFIG_CAP
#define NV_DPCD_ADJUST_REQ_LANEXPLUS1_DC_MASK
static const u32 tegra_dp_pc_regs[][4][4]
#define NV_DPCD_TRAINING_LANEX_SET_DC_MAX_REACHED_T
#define NV_DPCD_EDP_CONFIG_CAP_ASC_RESET_YES
#define DP_AUX_DEFER_MAX_TRIES
#define NV_DPCD_MAX_LANE_COUNT_TPS3_SUPPORTED_YES
#define DPAUX_DP_AUXSTAT_REPLY_M_MASK
#define NV_DPCD_STATUS_LANEX_CR_DONE_YES
#define DPAUX_HYBRID_PADCTL_AUX_INPUT_RCV_ENABLE
#define NV_DPCD_TRAINING_PATTERN_SET_SC_DISABLED_F
#define NV_DPCD_LANE_COUNT_SET_ENHANCEDFRAMING_T
#define DPAUX_DP_AUXCTL_CMD_AUXWR
#define NV_DPCD_MAX_LANE_COUNT_MASK
#define DPAUX_HYBRID_PADCTL_AUX_CMH_V0_70
#define DPAUX_HYBRID_PADCTL_AUX_DRVI_SHIFT
#define NV_DPCD_EDP_CONFIG_SET_ASC_RESET_ENABLE
#define NV_DPCD_MAX_DOWNSPREAD
#define DPAUX_DP_AUXCTL_TRANSACTREQ_MASK
#define NV_DPCD_EDP_CONFIG_SET_ASC_RESET_DISABLE
#define DPAUX_DP_AUXCTL_TRANSACTREQ_DONE
#define NV_DPCD_LANEXPLUS1_SET2_PC2_SHIFT
#define NV_DPCD_ADJUST_REQ_LANEX_PE_MASK
#define NV_DPCD_STATUS_LANEXPLUS1_SYMBOL_LOCKED_SHIFT
#define NV_DPCD_TRAINING_LANEX_SET_DC_MAX_REACHED_F
#define NV_DPCD_TRAINING_LANEX_SET_PE_MAX_REACHED_F
#define NV_DPCD_SINK_STATUS_PORT0_IN_SYNC
#define DPAUX_DP_AUXCTL_CMD_MOTRD
#define DPAUX_DP_AUXSTAT_SINKSTAT_ERROR_PENDING
#define NV_DPCD_MAX_LANE_COUNT_ENHANCED_FRAMING_YES
#define DPAUX_HYBRID_SPARE_PAD_PWR_POWERUP
#define NV_DPCD_LANE2_3_STATUS
#define NV_DPCD_TRAINING_PATTERN_SET_SC_DISABLED_T
#define NV_DPCD_EDP_CONFIG_SET
#define DPAUX_HPD_IRQ_CONFIG
#define NV_DPCD_SINK_STATUS
#define DPAUX_DP_AUXDATA_READ_W(i)
#define NV_DPCD_LANEXPLUS1_SET2_PC2_MAX_REACHED_T
#define DPAUX_DP_AUXCTL_CMD_AUXRD
#define NV_DPCD_MAX_LINK_BANDWIDTH
#define NV_DPCD_LANE0_1_ADJUST_REQ
int decode_edid(unsigned char *edid, int size, struct edid *out)
#define BIOS_INFO
BIOS_INFO - Expected events.
#define BIOS_ERR
BIOS_ERR - System in incomplete state.
#define BIOS_SPEW
BIOS_SPEW - Excessively verbose output.
#define BIOS_WARNING
BIOS_WARNING - Bad configuration.
void dp_init(void *_config)
static int tegra_dc_dpaux_read(struct tegra_dc_dp_data *dp, u32 cmd, u32 addr, u8 *data, u32 *size, u32 *aux_stat)
static int tegra_dc_dp_link_trained(struct tegra_dc_dp_data *dp, const struct tegra_dc_dp_link_config *cfg)
struct tegra_dc_dp_data dp_data
void dp_enable(void *_dp)
static int tegra_dc_dp_fast_link_training(struct tegra_dc_dp_data *dp, const struct tegra_dc_dp_link_config *link_cfg)
static int tegra_dp_do_link_training(struct tegra_dc_dp_data *dp, const struct tegra_dc_dp_link_config *link_cfg)
static int tegra_dc_dp_explore_link_cfg(struct tegra_dc_dp_data *dp, struct tegra_dc_dp_link_config *link_cfg, const struct soc_nvidia_tegra210_config *config)
static u32 tegra_dpaux_readl(struct tegra_dc_dp_data *dp, u32 reg)
static int _tegra_dp_channel_eq(struct tegra_dc_dp_data *dp, u32 pe[4], u32 vs[4], u32 pc[4], u8 pc_supported, u32 n_lanes)
static int tegra_dc_dp_dpcd_read(struct tegra_dc_dp_data *dp, u32 cmd, u8 *data_ptr)
static void tegra_dc_dpaux_enable(struct tegra_dc_dp_data *dp)
static int tegra_dc_dp_calc_config(struct tegra_dc_dp_data *dp, const struct soc_nvidia_tegra210_config *config, struct tegra_dc_dp_link_config *link_cfg)
static int tegra_dp_clk_recovery(struct tegra_dc_dp_data *dp, u32 pe[4], u32 vs[4], u32 pc[4])
static int tegra_dc_dpaux_write_chunk(struct tegra_dc_dp_data *dp, u32 cmd, u32 addr, u8 *data, u32 *size, u32 *aux_stat)
static int tegra_dc_dp_dpcd_write(struct tegra_dc_dp_data *dp, u32 cmd, u8 data)
static int tegra_dc_i2c_aux_read(struct tegra_dc_dp_data *dp, u32 i2c_addr, u8 addr, u8 *data, u32 *size, u32 *aux_stat)
static int tegra_dp_set_lane_count(struct tegra_dc_dp_data *dp, const struct tegra_dc_dp_link_config *link_cfg)
static int tegra_dp_channel_eq_status(struct tegra_dc_dp_data *dp)
static u32 tegra_dp_wait_aux_training(struct tegra_dc_dp_data *dp, u8 is_clk_recovery)
static int tegra_dp_link_config(struct tegra_dc_dp_data *dp, const struct tegra_dc_dp_link_config *link_cfg)
static int _tegra_dp_clk_recovery(struct tegra_dc_dp_data *dp, u32 pe[4], u32 vs[4], u32 pc[4], u8 pc_supported, u32 n_lanes)
static int tegra_dc_dp_sink_out_of_sync(struct tegra_dc_dp_data *dp, u32 delay_ms)
static int _tegra_dp_lower_link_config(struct tegra_dc_dp_data *dp, struct tegra_dc_dp_link_config *link_cfg)
static int tegra_dp_channel_eq(struct tegra_dc_dp_data *dp, u32 pe[4], u32 vs[4], u32 pc[4])
static int tegra_dp_lower_link_config(struct tegra_dc_dp_data *dp, struct tegra_dc_dp_link_config *cfg)
static u8 tegra_dp_clock_recovery_status(struct tegra_dc_dp_data *dp)
static int tegra_dc_dp_set_assr(struct tegra_dc_dp_data *dp, int ena)
static int tegra_dc_dp_init_max_link_cfg(struct soc_nvidia_tegra210_config *config, struct tegra_dc_dp_data *dp, struct tegra_dc_dp_link_config *link_cfg)
static void tegra_dc_dp_dump_link_cfg(struct tegra_dc_dp_data *dp, const struct tegra_dc_dp_link_config *link_cfg)
static void tegra_dp_tpg(struct tegra_dc_dp_data *dp, u32 tp, u32 n_lanes)
static void tegra_dp_lt_adjust(struct tegra_dc_dp_data *dp, u32 pe[4], u32 vs[4], u32 pc[4], u8 pc_supported)
static int tegra_dpaux_wait_transaction(struct tegra_dc_dp_data *dp)
static u32 tegra_dc_dpaux_poll_register(struct tegra_dc_dp_data *dp, u32 reg, u32 mask, u32 exp_val, u32 poll_interval_us, u32 timeout_us)
static void tegra_dp_lt_config(struct tegra_dc_dp_data *dp, u32 pe[4], u32 vs[4], u32 pc[4])
static void tegra_dpaux_writel(struct tegra_dc_dp_data *dp, u32 reg, u32 val)
void dp_display_startup(struct device *dev)
static int tegra_dp_hpd_plug(struct tegra_dc_dp_data *dp, int timeout_ms)
static int tegra_dp_set_link_bandwidth(struct tegra_dc_dp_data *dp, u8 link_bw)
static void tegra_dc_dp_check_sink(struct tegra_dc_dp_data *dp, struct soc_nvidia_tegra210_config *config)
static void tegra_dp_update_config(struct tegra_dc_dp_data *dp, struct soc_nvidia_tegra210_config *config)
static int tegra_dc_dp_full_link_training(struct tegra_dc_dp_data *dp)
static int tegra_dc_dpaux_read_chunk(struct tegra_dc_dp_data *dp, u32 cmd, u32 addr, u8 *data, u32 *size, u32 *aux_stat)
static void tegra_dp_hpd_config(struct tegra_dc_dp_data *dp, struct soc_nvidia_tegra210_config *config)
#define NV_PWM_CSR_PULSE_WIDTH_SHIFT
#define NV_PWM_CSR_ENABLE_SHIFT
static void update_window(struct display_controller *disp_ctrl, struct soc_nvidia_tegra124_config *config)
static int update_display_mode(struct display_controller *disp_ctrl, struct soc_nvidia_tegra124_config *config)
static int tegra_dc_init(struct display_controller *disp_ctrl)
#define clock_configure_source(device, src, freq)
#define PLLD(_n, _m, _p, _kcp, _kvco)
u32 clock_configure_plld(u32 frequency)
int memcmp(const void *s1, const void *s2, size_t n)
DEVTREE_CONST void * chip_info
unsigned int panel_bits_per_pixel
unsigned int panel_bits_per_color
struct soc_nvidia_tegra210_config::@1287 dp
struct tegra_dc_sor_data sor
struct tegra_dc_dp_link_config link_cfg
int alt_scramber_reset_cap
int only_enhanced_framing
int support_enhanced_framing
struct tegra_dc_dp_link_config * link_cfg
void tegra_dc_sor_set_lane_count(struct tegra_dc_sor_data *sor, u8 lane_count)
void tegra_dc_sor_attach(struct tegra_dc_sor_data *sor)
#define NV_SOR_PR_LANE0_DP_LANE2_SHIFT
#define NV_SOR_PR_LANE2_DP_LANE0_MASK
#define NV_SOR_PR_LANE0_DP_LANE2_MASK
#define NV_SOR_PR_LANE2_DP_LANE0_SHIFT
#define NV_SOR_PR_LANE1_DP_LANE1_SHIFT
void tegra_dc_sor_read_link_config(struct tegra_dc_sor_data *sor, u8 *link_bw, u8 *lane_count)
#define NV_SOR_PR_LANE1_DP_LANE1_MASK
void tegra_dc_sor_set_dp_linkctl(struct tegra_dc_sor_data *sor, int ena, u8 training_pattern, const struct tegra_dc_dp_link_config *link_cfg)
void tegra_dc_sor_set_voltage_swing(struct tegra_dc_sor_data *sor)
@ training_pattern_disabled
#define SOR_LINK_SPEED_G1_62
void tegra_dc_sor_set_internal_panel(struct tegra_dc_sor_data *sor, int is_int)
#define SOR_LINK_SPEED_G5_4
void tegra_dp_disable_tx_pu(struct tegra_dc_sor_data *sor)
void tegra_dc_sor_set_link_bandwidth(struct tegra_dc_sor_data *sor, u8 link_bw)
int tegra_dc_sor_set_power_state(struct tegra_dc_sor_data *sor, int pu_pd)
void tegra_dc_sor_set_lane_parm(struct tegra_dc_sor_data *sor, const struct tegra_dc_dp_link_config *link_cfg)
#define SOR_LINK_SPEED_G2_7
void tegra_sor_precharge_lanes(struct tegra_dc_sor_data *sor)
#define NV_SOR_PR_LANE3_DP_LANE3_SHIFT
void tegra_dc_sor_enable_dp(struct tegra_dc_sor_data *sor)
#define NV_SOR_PR_LANE3_DP_LANE3_MASK
void tegra_dc_sor_set_panel_power(struct tegra_dc_sor_data *sor, int power_up)
void tegra_dc_sor_power_down_unused_lanes(struct tegra_dc_sor_data *sor)
void tegra_dp_set_pe_vs_pc(struct tegra_dc_sor_data *sor, u32 mask, u32 pe_reg, u32 vs_reg, u32 pc_reg, u8 pc_supported)
void tegra_dc_detach(struct tegra_dc_sor_data *sor)