Lines Matching refs:edp
294 static int rk_edp_link_power_up(struct rk_edp_priv *edp) in rk_edp_link_power_up() argument
300 if (edp->link_train.revision < 0x11) in rk_edp_link_power_up()
303 ret = rk_edp_dpcd_read(edp->regs, DPCD_LINK_POWER_STATE, &value, 1); in rk_edp_link_power_up()
310 ret = rk_edp_dpcd_write(edp->regs, DPCD_LINK_POWER_STATE, &value, 1); in rk_edp_link_power_up()
324 static int rk_edp_link_configure(struct rk_edp_priv *edp) in rk_edp_link_configure() argument
328 values[0] = edp->link_train.link_rate; in rk_edp_link_configure()
329 values[1] = edp->link_train.lane_count; in rk_edp_link_configure()
331 return rk_edp_dpcd_write(edp->regs, DPCD_LINK_BW_SET, values, in rk_edp_link_configure()
335 static void rk_edp_set_link_training(struct rk_edp_priv *edp, in rk_edp_set_link_training() argument
340 for (i = 0; i < edp->link_train.lane_count; i++) in rk_edp_set_link_training()
341 writel(training_values[i], &edp->regs->ln_link_trn_ctl[i]); in rk_edp_set_link_training()
349 static int rk_edp_dpcd_read_link_status(struct rk_edp_priv *edp, in rk_edp_dpcd_read_link_status() argument
352 return rk_edp_dpcd_read(edp->regs, DPCD_LANE0_1_STATUS, link_status, in rk_edp_dpcd_read_link_status()
462 static int rk_edp_link_train_cr(struct rk_edp_priv *edp) in rk_edp_link_train_cr() argument
464 struct rk3288_edp *regs = edp->regs; in rk_edp_link_train_cr()
476 memset(edp->train_set, '\0', sizeof(edp->train_set)); in rk_edp_link_train_cr()
484 rk_edp_set_link_training(edp, edp->train_set); in rk_edp_link_train_cr()
486 edp->train_set, in rk_edp_link_train_cr()
487 edp->link_train.lane_count); in rk_edp_link_train_cr()
493 ret = rk_edp_dpcd_read_link_status(edp, status); in rk_edp_link_train_cr()
500 edp->link_train.lane_count); in rk_edp_link_train_cr()
504 for (i = 0; i < edp->link_train.lane_count; i++) { in rk_edp_link_train_cr()
505 if ((edp->train_set[i] & in rk_edp_link_train_cr()
509 if (i == edp->link_train.lane_count) { in rk_edp_link_train_cr()
514 if ((edp->train_set[0] & DP_TRAIN_VOLTAGE_SWING_MASK) == in rk_edp_link_train_cr()
524 voltage = edp->train_set[0] & DP_TRAIN_VOLTAGE_SWING_MASK; in rk_edp_link_train_cr()
527 edp_get_adjust_train(status, edp->link_train.lane_count, in rk_edp_link_train_cr()
528 edp->train_set); in rk_edp_link_train_cr()
535 edp->train_set[0] & DP_TRAIN_VOLTAGE_SWING_MASK, in rk_edp_link_train_cr()
536 (edp->train_set[0] & DP_TRAIN_PRE_EMPHASIS_MASK) >> in rk_edp_link_train_cr()
542 static int rk_edp_link_train_ce(struct rk_edp_priv *edp) in rk_edp_link_train_ce() argument
544 struct rk3288_edp *regs = edp->regs; in rk_edp_link_train_ce()
560 rk_edp_set_link_training(edp, edp->train_set); in rk_edp_link_train_ce()
563 if (rk_edp_dpcd_read_link_status(edp, status) < 0) { in rk_edp_link_train_ce()
569 edp->link_train.lane_count); in rk_edp_link_train_ce()
572 edp_get_adjust_train(status, edp->link_train.lane_count, in rk_edp_link_train_ce()
573 edp->train_set); in rk_edp_link_train_ce()
582 edp->train_set[0] & DP_TRAIN_VOLTAGE_SWING_MASK, in rk_edp_link_train_ce()
583 (edp->train_set[0] & DP_TRAIN_PRE_EMPHASIS_MASK) in rk_edp_link_train_ce()
589 static int rk_edp_init_training(struct rk_edp_priv *edp) in rk_edp_init_training() argument
594 ret = rk_edp_dpcd_read(edp->regs, DPCD_DPCD_REV, values, in rk_edp_init_training()
599 edp->link_train.revision = values[0]; in rk_edp_init_training()
600 edp->link_train.link_rate = values[1]; in rk_edp_init_training()
601 edp->link_train.lane_count = values[2] & DP_MAX_LANE_COUNT_MASK; in rk_edp_init_training()
604 edp->link_train.link_rate * 27 / 100, in rk_edp_init_training()
605 edp->link_train.link_rate * 27 % 100, in rk_edp_init_training()
606 edp->link_train.lane_count); in rk_edp_init_training()
608 if ((edp->link_train.link_rate != LINK_RATE_1_62GBPS) && in rk_edp_init_training()
609 (edp->link_train.link_rate != LINK_RATE_2_70GBPS)) { in rk_edp_init_training()
611 edp->link_train.link_rate); in rk_edp_init_training()
615 if (edp->link_train.lane_count == 0) { in rk_edp_init_training()
617 edp->link_train.lane_count); in rk_edp_init_training()
621 ret = rk_edp_link_power_up(edp); in rk_edp_init_training()
625 return rk_edp_link_configure(edp); in rk_edp_init_training()
628 static int rk_edp_hw_link_training(struct rk_edp_priv *edp) in rk_edp_hw_link_training() argument
635 writel(edp->link_train.link_rate, &edp->regs->link_bw_set); in rk_edp_hw_link_training()
636 writel(edp->link_train.lane_count, &edp->regs->lane_count_set); in rk_edp_hw_link_training()
638 ret = rk_edp_link_train_cr(edp); in rk_edp_hw_link_training()
641 ret = rk_edp_link_train_ce(edp); in rk_edp_hw_link_training()
645 writel(HW_LT_EN, &edp->regs->dp_hw_link_training); in rk_edp_hw_link_training()
648 val = readl(&edp->regs->dp_hw_link_training); in rk_edp_hw_link_training()
761 static int rk_edp_set_link_train(struct rk_edp_priv *edp) in rk_edp_set_link_train() argument
765 ret = rk_edp_init_training(edp); in rk_edp_set_link_train()
771 ret = rk_edp_hw_link_training(edp); in rk_edp_set_link_train()
842 static int rk_edp_is_video_stream_on(struct rk_edp_priv *edp) in rk_edp_is_video_stream_on() argument
849 val = readl(&edp->regs->sys_ctl_3); in rk_edp_is_video_stream_on()
852 writel(val, &edp->regs->sys_ctl_3); in rk_edp_is_video_stream_on()
854 val = readl(&edp->regs->sys_ctl_3); in rk_edp_is_video_stream_on()
862 static int rk_edp_config_video(struct rk_edp_priv *edp) in rk_edp_config_video() argument
866 rk_edp_config_video_slave_mode(edp->regs); in rk_edp_config_video()
868 if (!rk_edp_get_pll_locked(edp->regs)) { in rk_edp_config_video()
873 ret = rk_edp_is_video_stream_clock_on(edp->regs); in rk_edp_config_video()
878 rk_edp_set_video_cr_mn(edp->regs, CALCULATED_M, 0, 0); in rk_edp_config_video()
881 clrbits_le32(&edp->regs->video_ctl_10, F_SEL); in rk_edp_config_video()
884 clrbits_le32(&edp->regs->video_ctl_1, VIDEO_MUTE); in rk_edp_config_video()
887 setbits_le32(&edp->regs->video_ctl_1, VIDEO_EN); in rk_edp_config_video()
889 return rk_edp_is_video_stream_on(edp); in rk_edp_config_video()
892 static void rockchip_edp_force_hpd(struct rk_edp_priv *edp) in rockchip_edp_force_hpd() argument
894 setbits_le32(&edp->regs->sys_ctl_3, F_HPD | HPD_CTRL); in rockchip_edp_force_hpd()
897 static int rockchip_edp_get_plug_in_status(struct rk_edp_priv *edp) in rockchip_edp_get_plug_in_status() argument
901 val = readl(&edp->regs->sys_ctl_3); in rockchip_edp_get_plug_in_status()
916 static void rockchip_edp_wait_hpd(struct rk_edp_priv *edp) in rockchip_edp_wait_hpd() argument
922 if (rockchip_edp_get_plug_in_status(edp)) in rockchip_edp_wait_hpd()
928 rockchip_edp_force_hpd(edp); in rockchip_edp_wait_hpd()