2 * DisplayPort driver for rk32xx
4 * Copyright (C) ROCKCHIP, Inc.
5 *Author:yxj<yxj@rock-chips.com>
6 * This software is licensed under the terms of the GNU General Public
7 * License version 2, as published by the Free Software Foundation, and
8 * may be copied, distributed, and modified under those terms.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 #include <linux/module.h>
16 #include <linux/kernel.h>
17 #include <linux/init.h>
18 #include <linux/errno.h>
19 #include <linux/string.h>
20 #include <linux/slab.h>
21 #include <linux/delay.h>
22 #include <linux/interrupt.h>
23 #include <linux/clk.h>
24 #include <linux/platform_device.h>
25 #include <linux/uaccess.h>
26 #include <linux/rockchip/iomap.h>
27 #include <linux/rockchip/grf.h>
30 #if defined(CONFIG_OF)
34 //#define EDP_BIST_MODE
36 static struct rk32_edp *rk32_edp;
37 static int rk32_edp_init_edp(struct rk32_edp *edp)
39 struct rk_screen *screen = &edp->screen;
43 if (screen->lcdc_id == 1) /*select lcdc*/
44 val = EDP_SEL_VOP_LIT | (EDP_SEL_VOP_LIT << 16);
46 val = EDP_SEL_VOP_LIT << 16;
47 writel_relaxed(val, RK_GRF_VIRT + RK3288_GRF_SOC_CON6);
49 val = GRF_EDP_REF_CLK_SEL_INTER |
50 (GRF_EDP_REF_CLK_SEL_INTER << 16);
51 writel_relaxed(val, RK_GRF_VIRT + RK3288_GRF_SOC_CON12);
54 writel_relaxed(val, RK_CRU_VIRT + 0x0d0);
56 rk32_edp_init_refclk(edp);
57 rk32_edp_init_interrupt(edp);
59 rk32_edp_enable_sw_function(edp);
61 rk32_edp_init_analog_func(edp);
63 rk32_edp_init_hpd(edp);
64 rk32_edp_init_aux(edp);
69 static int rk32_edp_detect_hpd(struct rk32_edp *edp)
73 rk32_edp_init_hpd(edp);
77 while (rk32_edp_get_plug_in_status(edp) != 0) {
79 if (DP_TIMEOUT_LOOP_CNT < timeout_loop) {
80 dev_err(edp->dev, "failed to get hpd plug status\n");
89 static int rk32_edp_read_edid(struct rk32_edp *edp)
91 unsigned char edid[EDID_LENGTH * 2];
92 unsigned int extend_block = 0;
94 unsigned char test_vector;
98 * EDID device address is 0x50.
99 * However, if necessary, you must have set upper address
100 * into E-EDID in I2C device, 0x30.
103 /* Read Extension Flag, Number of 128-byte EDID extension blocks */
104 retval = rk32_edp_read_byte_from_i2c(edp, EDID_ADDR, EDID_EXTENSION_FLAG,
107 dev_err(edp->dev, "EDID extension flag failed!\n");
111 if (extend_block > 0) {
112 dev_dbg(edp->dev, "EDID data includes a single extension!\n");
115 retval = rk32_edp_read_bytes_from_i2c(edp, EDID_ADDR, EDID_HEADER,
116 EDID_LENGTH, &edid[EDID_HEADER]);
118 dev_err(edp->dev, "EDID Read failed!\n");
121 sum = edp_calc_edid_check_sum(edid);
123 dev_warn(edp->dev, "EDID bad checksum!\n");
127 /* Read additional EDID data */
128 retval = rk32_edp_read_bytes_from_i2c(edp, EDID_ADDR, EDID_LENGTH,
129 EDID_LENGTH, &edid[EDID_LENGTH]);
131 dev_err(edp->dev, "EDID Read failed!\n");
134 sum = edp_calc_edid_check_sum(&edid[EDID_LENGTH]);
136 dev_warn(edp->dev, "EDID bad checksum!\n");
140 retval = rk32_edp_read_byte_from_dpcd(edp, DPCD_TEST_REQUEST,
143 dev_err(edp->dev, "DPCD EDID Read failed!\n");
147 if (test_vector & DPCD_TEST_EDID_READ) {
148 retval = rk32_edp_write_byte_to_dpcd(edp,
149 DPCD_TEST_EDID_CHECKSUM,
150 edid[EDID_LENGTH + EDID_CHECKSUM]);
152 dev_err(edp->dev, "DPCD EDID Write failed!\n");
155 retval = rk32_edp_write_byte_to_dpcd(edp,
157 DPCD_TEST_EDID_CHECKSUM_WRITE);
159 dev_err(edp->dev, "DPCD EDID checksum failed!\n");
164 dev_info(edp->dev, "EDID data does not include any extensions.\n");
167 retval = rk32_edp_read_bytes_from_i2c(edp, EDID_ADDR, EDID_HEADER,
168 EDID_LENGTH, &edid[EDID_HEADER]);
170 dev_err(edp->dev, "EDID Read failed!\n");
173 sum = edp_calc_edid_check_sum(edid);
175 dev_warn(edp->dev, "EDID bad checksum!\n");
179 retval = rk32_edp_read_byte_from_dpcd(edp,DPCD_TEST_REQUEST,
182 dev_err(edp->dev, "DPCD EDID Read failed!\n");
186 if (test_vector & DPCD_TEST_EDID_READ) {
187 retval = rk32_edp_write_byte_to_dpcd(edp,
188 DPCD_TEST_EDID_CHECKSUM,
189 edid[EDID_CHECKSUM]);
191 dev_err(edp->dev, "DPCD EDID Write failed!\n");
194 retval = rk32_edp_write_byte_to_dpcd(edp,
196 DPCD_TEST_EDID_CHECKSUM_WRITE);
198 dev_err(edp->dev, "DPCD EDID checksum failed!\n");
204 dev_err(edp->dev, "EDID Read success!\n");
208 static int rk32_edp_handle_edid(struct rk32_edp *edp)
214 /* Read DPCD DPCD_ADDR_DPCD_REV~RECEIVE_PORT1_CAP_1 */
215 retval = rk32_edp_read_bytes_from_dpcd(edp, DPCD_REV, 12, buf);
220 for (i = 0; i < 3; i++) {
221 retval = rk32_edp_read_edid(edp);
229 static int rk32_edp_enable_rx_to_enhanced_mode(struct rk32_edp *edp,
235 retval = rk32_edp_read_byte_from_dpcd(edp,
236 DPCD_LANE_CNT_SET, &data);
241 retval = rk32_edp_write_byte_to_dpcd(edp,
243 DPCD_ENHANCED_FRAME_EN |
244 DPCD_LANE_COUNT_SET(data));
246 /*retval = rk32_edp_write_byte_to_dpcd(edp,
247 DPCD_ADDR_CONFIGURATION_SET, 0);*/
249 retval = rk32_edp_write_byte_to_dpcd(edp,
251 DPCD_LANE_COUNT_SET(data));
257 void rk32_edp_rx_control(struct rk32_edp *edp, bool enable)
259 /*rk32_edp_write_byte_to_dpcd(edp, DPCD_ADDR_USER_DEFINED1,0);
260 rk32_edp_write_byte_to_dpcd(edp, DPCD_ADDR_USER_DEFINED2,0x90);
263 rk32_edp_write_byte_to_dpcd(edp, DPCD_ADDR_USER_DEFINED3,0x84);
264 rk32_edp_write_byte_to_dpcd(edp, DPCD_ADDR_USER_DEFINED3,0x00);
266 rk32_edp_write_byte_to_dpcd(edp, DPCD_ADDR_USER_DEFINED3,0x80);
270 static int rk32_edp_is_enhanced_mode_available(struct rk32_edp *edp)
275 retval = rk32_edp_read_byte_from_dpcd(edp,
276 DPCD_MAX_LANE_CNT, &data);
280 return DPCD_ENHANCED_FRAME_CAP(data);
283 static void rk32_edp_disable_rx_zmux(struct rk32_edp *edp)
285 /*rk32_edp_write_byte_to_dpcd(edp,
286 DPCD_ADDR_USER_DEFINED1, 0);
287 rk32_edp_write_byte_to_dpcd(edp,
288 DPCD_ADDR_USER_DEFINED2, 0x83);
289 rk32_edp_write_byte_to_dpcd(edp,
290 DPCD_ADDR_USER_DEFINED3, 0x27);*/
293 static int rk32_edp_set_enhanced_mode(struct rk32_edp *edp)
298 retval = rk32_edp_is_enhanced_mode_available(edp);
303 retval = rk32_edp_enable_rx_to_enhanced_mode(edp, data);
307 rk32_edp_enable_enhanced_mode(edp, data);
312 static int rk32_edp_training_pattern_dis(struct rk32_edp *edp)
316 rk32_edp_set_training_pattern(edp, DP_NONE);
318 retval = rk32_edp_write_byte_to_dpcd(edp,
319 DPCD_TRAINING_PATTERN_SET,
320 DPCD_TRAINING_PATTERN_DISABLED);
327 static void rk32_edp_set_lane_lane_pre_emphasis(struct rk32_edp *edp,
328 int pre_emphasis, int lane)
332 rk32_edp_set_lane0_pre_emphasis(edp, pre_emphasis);
335 rk32_edp_set_lane1_pre_emphasis(edp, pre_emphasis);
339 rk32_edp_set_lane2_pre_emphasis(edp, pre_emphasis);
343 rk32_edp_set_lane3_pre_emphasis(edp, pre_emphasis);
348 static int rk32_edp_link_start(struct rk32_edp *edp)
355 lane_count = edp->link_train.lane_count;
357 edp->link_train.lt_state = LT_CLK_RECOVERY;
358 edp->link_train.eq_loop = 0;
360 for (lane = 0; lane < lane_count; lane++)
361 edp->link_train.cr_loop[lane] = 0;
363 /* Set sink to D0 (Sink Not Ready) mode. */
364 retval = rk32_edp_write_byte_to_dpcd(edp, DPCD_SINK_POWER_STATE,
365 DPCD_SET_POWER_STATE_D0);
367 dev_err(edp->dev, "failed to set sink device to D0!\n");
371 /* Set link rate and count as you want to establish*/
372 rk32_edp_set_link_bandwidth(edp, edp->link_train.link_rate);
373 rk32_edp_set_lane_count(edp, edp->link_train.lane_count);
375 /* Setup RX configuration */
376 buf[0] = edp->link_train.link_rate;
377 buf[1] = edp->link_train.lane_count;
378 retval = rk32_edp_write_bytes_to_dpcd(edp, DPCD_LINK_BW_SET,
381 dev_err(edp->dev, "failed to set bandwidth and lane count!\n");
385 /* Set TX pre-emphasis to level1 */
386 for (lane = 0; lane < lane_count; lane++)
387 rk32_edp_set_lane_lane_pre_emphasis(edp,
388 PRE_EMPHASIS_LEVEL_1, lane);
390 /* Set training pattern 1 */
391 rk32_edp_set_training_pattern(edp, TRAINING_PTN1);
393 /* Set RX training pattern */
394 retval = rk32_edp_write_byte_to_dpcd(edp,
395 DPCD_TRAINING_PATTERN_SET,
396 DPCD_SCRAMBLING_DISABLED |
397 DPCD_TRAINING_PATTERN_1);
399 dev_err(edp->dev, "failed to set training pattern 1!\n");
403 for (lane = 0; lane < lane_count; lane++)
404 buf[lane] = DPCD_PRE_EMPHASIS_PATTERN2_LEVEL0 |
405 DPCD_VOLTAGE_SWING_PATTERN1_LEVEL0;
406 retval = rk32_edp_write_bytes_to_dpcd(edp,
407 DPCD_TRAINING_LANE0_SET,
410 dev_err(edp->dev, "failed to set training lane!\n");
417 static unsigned char rk32_edp_get_lane_status(u8 link_status[2], int lane)
419 int shift = (lane & 1) * 4;
420 u8 link_value = link_status[lane>>1];
422 return (link_value >> shift) & 0xf;
425 static int rk32_edp_clock_recovery_ok(u8 link_status[2], int lane_count)
430 for (lane = 0; lane < lane_count; lane++) {
431 lane_status = rk32_edp_get_lane_status(link_status, lane);
432 if ((lane_status & DPCD_LANE_CR_DONE) == 0)
438 static int rk32_edp_channel_eq_ok(u8 link_align[3], int lane_count)
444 lane_align = link_align[2];
445 if ((lane_align & DPCD_INTERLANE_ALIGN_DONE) == 0)
448 for (lane = 0; lane < lane_count; lane++) {
449 lane_status = rk32_edp_get_lane_status(link_align, lane);
450 lane_status &= DPCD_CHANNEL_EQ_BITS;
451 if (lane_status != DPCD_CHANNEL_EQ_BITS)
458 static unsigned char rk32_edp_get_adjust_request_voltage(u8 adjust_request[2],
461 int shift = (lane & 1) * 4;
462 u8 link_value = adjust_request[lane>>1];
464 return (link_value >> shift) & 0x3;
467 static unsigned char rk32_edp_get_adjust_request_pre_emphasis(
468 u8 adjust_request[2],
471 int shift = (lane & 1) * 4;
472 u8 link_value = adjust_request[lane>>1];
474 return ((link_value >> shift) & 0xc) >> 2;
477 static void rk32_edp_set_lane_link_training(struct rk32_edp *edp,
478 u8 training_lane_set, int lane)
482 rk32_edp_set_lane0_link_training(edp, training_lane_set);
485 rk32_edp_set_lane1_link_training(edp, training_lane_set);
489 rk32_edp_set_lane2_link_training(edp, training_lane_set);
493 rk32_edp_set_lane3_link_training(edp, training_lane_set);
498 static unsigned int rk32_edp_get_lane_link_training(
499 struct rk32_edp *edp,
506 reg = rk32_edp_get_lane0_link_training(edp);
509 reg = rk32_edp_get_lane1_link_training(edp);
512 reg = rk32_edp_get_lane2_link_training(edp);
515 reg = rk32_edp_get_lane3_link_training(edp);
522 static void rk32_edp_reduce_link_rate(struct rk32_edp *edp)
524 rk32_edp_training_pattern_dis(edp);
526 edp->link_train.lt_state = FAILED;
529 static int rk32_edp_process_clock_recovery(struct rk32_edp *edp)
535 u8 adjust_request[2];
543 lane_count = edp->link_train.lane_count;
545 retval = rk32_edp_read_bytes_from_dpcd(edp,
549 dev_err(edp->dev, "failed to read lane status!\n");
553 if (rk32_edp_clock_recovery_ok(link_status, lane_count) == 0) {
554 /* set training pattern 2 for EQ */
555 rk32_edp_set_training_pattern(edp, TRAINING_PTN2);
557 for (lane = 0; lane < lane_count; lane++) {
558 retval = rk32_edp_read_bytes_from_dpcd(edp,
559 DPCD_ADJUST_REQUEST_LANE0_1,
562 dev_err(edp->dev, "failed to read adjust request!\n");
566 voltage_swing = rk32_edp_get_adjust_request_voltage(
567 adjust_request, lane);
568 pre_emphasis = rk32_edp_get_adjust_request_pre_emphasis(
569 adjust_request, lane);
570 training_lane = DPCD_VOLTAGE_SWING_SET(voltage_swing) |
571 DPCD_PRE_EMPHASIS_SET(pre_emphasis);
573 if (voltage_swing == VOLTAGE_LEVEL_3)
574 training_lane |= DPCD_MAX_SWING_REACHED;
575 if (pre_emphasis == PRE_EMPHASIS_LEVEL_3)
576 training_lane |= DPCD_MAX_PRE_EMPHASIS_REACHED;
578 edp->link_train.training_lane[lane] = training_lane;
580 rk32_edp_set_lane_link_training(edp,
581 edp->link_train.training_lane[lane],
585 retval = rk32_edp_write_byte_to_dpcd(edp,
586 DPCD_TRAINING_PATTERN_SET,
587 DPCD_SCRAMBLING_DISABLED |
588 DPCD_TRAINING_PATTERN_2);
590 dev_err(edp->dev, "failed to set training pattern 2!\n");
594 retval = rk32_edp_write_bytes_to_dpcd(edp,
595 DPCD_TRAINING_LANE0_SET,
597 edp->link_train.training_lane);
599 dev_err(edp->dev, "failed to set training lane!\n");
603 dev_info(edp->dev, "Link Training Clock Recovery success\n");
604 edp->link_train.lt_state = LT_EQ_TRAINING;
606 for (lane = 0; lane < lane_count; lane++) {
607 training_lane = rk32_edp_get_lane_link_training(
609 retval = rk32_edp_read_bytes_from_dpcd(edp,
610 DPCD_ADJUST_REQUEST_LANE0_1,
613 dev_err(edp->dev, "failed to read adjust request!\n");
617 voltage_swing = rk32_edp_get_adjust_request_voltage(
618 adjust_request, lane);
619 pre_emphasis = rk32_edp_get_adjust_request_pre_emphasis(
620 adjust_request, lane);
622 if (voltage_swing == VOLTAGE_LEVEL_3 ||
623 pre_emphasis == PRE_EMPHASIS_LEVEL_3) {
624 dev_err(edp->dev, "voltage or pre emphasis reached max level\n");
625 goto reduce_link_rate;
628 if ((DPCD_VOLTAGE_SWING_GET(training_lane) ==
630 (DPCD_PRE_EMPHASIS_GET(training_lane) ==
632 edp->link_train.cr_loop[lane]++;
633 if (edp->link_train.cr_loop[lane] == MAX_CR_LOOP) {
634 dev_err(edp->dev, "CR Max loop\n");
635 goto reduce_link_rate;
639 training_lane = DPCD_VOLTAGE_SWING_SET(voltage_swing) |
640 DPCD_PRE_EMPHASIS_SET(pre_emphasis);
642 if (voltage_swing == VOLTAGE_LEVEL_3)
643 training_lane |= DPCD_MAX_SWING_REACHED;
644 if (pre_emphasis == PRE_EMPHASIS_LEVEL_3)
645 training_lane |= DPCD_MAX_PRE_EMPHASIS_REACHED;
647 edp->link_train.training_lane[lane] = training_lane;
649 rk32_edp_set_lane_link_training(edp,
650 edp->link_train.training_lane[lane], lane);
653 retval = rk32_edp_write_bytes_to_dpcd(edp,
654 DPCD_TRAINING_LANE0_SET,
656 edp->link_train.training_lane);
658 dev_err(edp->dev, "failed to set training lane!\n");
666 rk32_edp_reduce_link_rate(edp);
670 static int rk32_edp_process_equalizer_training(struct rk32_edp *edp)
678 u8 adjust_request[2];
686 lane_count = edp->link_train.lane_count;
688 retval = rk32_edp_read_bytes_from_dpcd(edp,
692 dev_err(edp->dev, "failed to read lane status!\n");
696 if (rk32_edp_clock_recovery_ok(link_status, lane_count) == 0) {
697 link_align[0] = link_status[0];
698 link_align[1] = link_status[1];
700 retval = rk32_edp_read_byte_from_dpcd(edp,
701 DPCD_LANE_ALIGN_STATUS_UPDATED,
704 dev_err(edp->dev, "failed to read lane aligne status!\n");
708 for (lane = 0; lane < lane_count; lane++) {
709 retval = rk32_edp_read_bytes_from_dpcd(edp,
710 DPCD_ADJUST_REQUEST_LANE0_1,
713 dev_err(edp->dev, "failed to read adjust request!\n");
717 voltage_swing = rk32_edp_get_adjust_request_voltage(
718 adjust_request, lane);
719 pre_emphasis = rk32_edp_get_adjust_request_pre_emphasis(
720 adjust_request, lane);
721 training_lane = DPCD_VOLTAGE_SWING_SET(voltage_swing) |
722 DPCD_PRE_EMPHASIS_SET(pre_emphasis);
724 if (voltage_swing == VOLTAGE_LEVEL_3)
725 training_lane |= DPCD_MAX_SWING_REACHED;
726 if (pre_emphasis == PRE_EMPHASIS_LEVEL_3)
727 training_lane |= DPCD_MAX_PRE_EMPHASIS_REACHED;
729 edp->link_train.training_lane[lane] = training_lane;
732 if (rk32_edp_channel_eq_ok(link_align, lane_count) == 0) {
733 /* traing pattern Set to Normal */
734 retval = rk32_edp_training_pattern_dis(edp);
736 dev_err(edp->dev, "failed to disable training pattern!\n");
740 dev_info(edp->dev, "Link Training success!\n");
742 rk32_edp_get_link_bandwidth(edp, ®);
743 edp->link_train.link_rate = reg;
744 dev_dbg(edp->dev, "final bandwidth = %.2x\n",
745 edp->link_train.link_rate);
747 rk32_edp_get_lane_count(edp, ®);
748 edp->link_train.lane_count = reg;
749 dev_dbg(edp->dev, "final lane count = %.2x\n",
750 edp->link_train.lane_count);
752 edp->link_train.lt_state = FINISHED;
755 edp->link_train.eq_loop++;
757 if (edp->link_train.eq_loop > MAX_EQ_LOOP) {
758 dev_err(edp->dev, "EQ Max loop\n");
759 goto reduce_link_rate;
762 for (lane = 0; lane < lane_count; lane++)
763 rk32_edp_set_lane_link_training(edp,
764 edp->link_train.training_lane[lane],
767 retval = rk32_edp_write_bytes_to_dpcd(edp,
768 DPCD_TRAINING_LANE0_SET,
770 edp->link_train.training_lane);
772 dev_err(edp->dev, "failed to set training lane!\n");
777 goto reduce_link_rate;
783 rk32_edp_reduce_link_rate(edp);
787 static int rk32_edp_get_max_rx_bandwidth(struct rk32_edp *edp,
794 * For DP rev.1.1, Maximum link rate of Main Link lanes
795 * 0x06 = 1.62 Gbps, 0x0a = 2.7 Gbps
797 retval = rk32_edp_read_byte_from_dpcd(edp,
798 DPCD_MAX_LINK_RATE, &data);
806 static int rk32_edp_get_max_rx_lane_count(struct rk32_edp *edp,
813 * For DP rev.1.1, Maximum number of Main Link lanes
814 * 0x01 = 1 lane, 0x02 = 2 lanes, 0x04 = 4 lanes
816 retval = rk32_edp_read_byte_from_dpcd(edp,
817 DPCD_MAX_LANE_CNT, &data);
821 *lane_count = DPCD_MAX_LANE_COUNT(data);
825 static int rk32_edp_init_training(struct rk32_edp *edp,
826 enum link_lane_count_type max_lane,
832 * MACRO_RST must be applied after the PLL_LOCK to avoid
833 * the DP inter pair skew issue for at least 10 us
835 rk32_edp_reset_macro(edp);
838 retval = rk32_edp_get_max_rx_bandwidth(edp, &edp->link_train.link_rate);
842 retval = rk32_edp_get_max_rx_lane_count(edp, &edp->link_train.lane_count);
845 dev_info(edp->dev, "max link rate:%d.%dGps max number of lanes:%d\n",
846 edp->link_train.link_rate * 27/100,
847 edp->link_train.link_rate*27%100,
848 edp->link_train.lane_count);
850 if ((edp->link_train.link_rate != LINK_RATE_1_62GBPS) &&
851 (edp->link_train.link_rate != LINK_RATE_2_70GBPS)) {
852 dev_err(edp->dev, "Rx Max Link Rate is abnormal :%x !\n",
853 edp->link_train.link_rate);
854 edp->link_train.link_rate = LINK_RATE_1_62GBPS;
857 if (edp->link_train.lane_count == 0) {
858 dev_err(edp->dev, "Rx Max Lane count is abnormal :%x !\n",
859 edp->link_train.lane_count);
860 edp->link_train.lane_count = (u8)LANE_CNT1;
864 if (edp->link_train.lane_count > max_lane)
865 edp->link_train.lane_count = max_lane;
866 if (edp->link_train.link_rate > max_rate)
867 edp->link_train.link_rate = max_rate;
870 rk32_edp_analog_power_ctr(edp, 1);
875 static int rk32_edp_sw_link_training(struct rk32_edp *edp)
878 int training_finished = 0;
880 edp->link_train.lt_state = LT_START;
883 while (!training_finished) {
884 switch (edp->link_train.lt_state) {
886 retval = rk32_edp_link_start(edp);
888 dev_err(edp->dev, "LT Start failed\n");
890 case LT_CLK_RECOVERY:
891 retval = rk32_edp_process_clock_recovery(edp);
893 dev_err(edp->dev, "LT CR failed\n");
896 retval = rk32_edp_process_equalizer_training(edp);
898 dev_err(edp->dev, "LT EQ failed\n");
901 training_finished = 1;
912 static int rk32_edp_hw_link_training(struct rk32_edp *edp)
916 /* Set link rate and count as you want to establish*/
917 rk32_edp_set_link_bandwidth(edp, edp->link_train.link_rate);
918 rk32_edp_set_lane_count(edp, edp->link_train.lane_count);
919 rk32_edp_hw_link_training_en(edp);
921 val = rk32_edp_wait_hw_lt_done(edp);
924 dev_err(edp->dev, "hw lt timeout");
928 val = rk32_edp_wait_hw_lt_done(edp);
931 val = rk32_edp_get_hw_lt_status(edp);
933 dev_err(edp->dev, "hw lt err:%d\n", val);
937 static int rk32_edp_set_link_train(struct rk32_edp *edp,
943 retval = rk32_edp_init_training(edp, count, bwtype);
945 dev_err(edp->dev, "DP LT init failed!\n");
947 retval = rk32_edp_sw_link_training(edp);
949 retval = rk32_edp_hw_link_training(edp);
955 static int rk32_edp_config_video(struct rk32_edp *edp,
956 struct video_info *video_info)
959 int timeout_loop = 0;
962 rk32_edp_config_video_slave_mode(edp, video_info);
964 rk32_edp_set_video_color_format(edp, video_info->color_depth,
965 video_info->color_space,
966 video_info->dynamic_range,
967 video_info->ycbcr_coeff);
969 if (rk32_edp_get_pll_lock_status(edp) == DP_PLL_UNLOCKED) {
970 dev_err(edp->dev, "PLL is not locked yet.\n");
976 if (rk32_edp_is_slave_video_stream_clock_on(edp) == 0)
978 if (DP_TIMEOUT_LOOP_CNT < timeout_loop) {
979 dev_err(edp->dev, "Timeout of video streamclk ok\n");
986 /* Set to use the register calculated M/N video */
987 rk32_edp_set_video_cr_mn(edp, CALCULATED_M, 0, 0);
989 /* For video bist, Video timing must be generated by register */
990 rk32_edp_set_video_timing_mode(edp, VIDEO_TIMING_FROM_CAPTURE);
992 /* Disable video mute */
993 rk32_edp_enable_video_mute(edp, 0);
995 /* Configure video slave mode */
996 rk32_edp_enable_video_master(edp, 0);
999 rk32_edp_start_video(edp);
1005 if (rk32_edp_is_video_stream_on(edp) == 0) {
1007 if (done_count > 10)
1009 } else if (done_count) {
1012 if (DP_TIMEOUT_LOOP_CNT < timeout_loop) {
1013 dev_err(edp->dev, "Timeout of video streamclk ok\n");
1017 usleep_range(1000, 1000);
1021 dev_err(edp->dev, "Video stream is not detected!\n");
1026 static int rk32_edp_enable_scramble(struct rk32_edp *edp, bool enable)
1032 rk32_edp_enable_scrambling(edp);
1034 retval = rk32_edp_read_byte_from_dpcd(edp,
1035 DPCD_TRAINING_PATTERN_SET,
1040 retval = rk32_edp_write_byte_to_dpcd(edp,
1041 DPCD_TRAINING_PATTERN_SET,
1042 (u8)(data & ~DPCD_SCRAMBLING_DISABLED));
1046 rk32_edp_disable_scrambling(edp);
1048 retval = rk32_edp_read_byte_from_dpcd(edp,
1049 DPCD_TRAINING_PATTERN_SET,
1054 retval = rk32_edp_write_byte_to_dpcd(edp,
1055 DPCD_TRAINING_PATTERN_SET,
1056 (u8)(data | DPCD_SCRAMBLING_DISABLED));
1064 static irqreturn_t rk32_edp_isr(int irq, void *arg)
1066 struct rk32_edp *edp = arg;
1068 //dev_info(edp->dev, "rk32_edp_isr\n");
1072 static int rk32_edp_enable(void)
1076 struct rk32_edp *edp = rk32_edp;
1081 clk_enable(edp->pclk);
1082 clk_enable(edp->clk_edp);
1083 clk_enable(edp->clk_24m);
1087 rk32_edp_init_edp(edp);
1089 /*ret = rk32_edp_handle_edid(edp);
1091 dev_err(edp->dev, "unable to handle edid\n");
1096 ret = rk32_edp_enable_scramble(edp, 0);
1098 dev_err(edp->dev, "unable to set scramble\n");
1102 ret = rk32_edp_enable_rx_to_enhanced_mode(edp, 0);
1104 dev_err(edp->dev, "unable to set enhanced mode\n");
1107 rk32_edp_enable_enhanced_mode(edp, 0);*/
1110 ret = rk32_edp_set_link_train(edp, LANE_CNT4, LINK_RATE_2_70GBPS);
1112 dev_err(edp->dev, "link train failed\n");
1116 rk32_edp_set_lane_count(edp, edp->video_info.lane_count);
1117 rk32_edp_set_link_bandwidth(edp, edp->video_info.link_rate);
1119 #ifdef EDP_BIST_MODE
1120 rk32_edp_bist_cfg(edp);
1122 rk32_edp_init_video(edp);
1123 ret = rk32_edp_config_video(edp, &edp->video_info);
1125 dev_err(edp->dev, "unable to config video\n");
1138 dev_err(edp->dev, "DP LT exceeds max retry count");
1142 static int rk32_edp_disable(void )
1144 struct rk32_edp *edp = rk32_edp;
1151 rk32_edp_reset(edp);
1152 rk32_edp_analog_power_ctr(edp, 0);
1154 clk_disable(edp->clk_24m);
1155 clk_disable(edp->clk_edp);
1156 clk_disable(edp->pclk);
1162 static struct rk_fb_trsm_ops trsm_edp_ops = {
1163 .enable = rk32_edp_enable,
1164 .disable = rk32_edp_disable,
1166 static int rk32_edp_probe(struct platform_device *pdev)
1168 struct rk32_edp *edp;
1169 struct resource *res;
1170 struct device_node *np = pdev->dev.of_node;
1174 dev_err(&pdev->dev, "Missing device tree node.\n");
1178 edp = devm_kzalloc(&pdev->dev, sizeof(struct rk32_edp), GFP_KERNEL);
1180 dev_err(&pdev->dev, "no memory for state\n");
1183 edp->dev = &pdev->dev;
1184 edp->video_info.h_sync_polarity = 0;
1185 edp->video_info.v_sync_polarity = 0;
1186 edp->video_info.interlaced = 0;
1187 edp->video_info.color_space = CS_RGB;
1188 edp->video_info.dynamic_range = VESA;
1189 edp->video_info.ycbcr_coeff = COLOR_YCBCR601;
1190 edp->video_info.color_depth = COLOR_8;
1192 edp->video_info.link_rate = LINK_RATE_1_62GBPS;
1193 edp->video_info.lane_count = LANE_CNT4;
1194 rk_fb_get_prmry_screen(&edp->screen);
1195 if (edp->screen.type != SCREEN_EDP) {
1196 dev_err(&pdev->dev, "screen is not edp!\n");
1199 platform_set_drvdata(pdev, edp);
1200 dev_set_name(edp->dev, "rk32-edp");
1202 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1203 edp->regs = devm_ioremap_resource(&pdev->dev, res);
1204 if (IS_ERR(edp->regs)) {
1205 dev_err(&pdev->dev, "ioremap reg failed\n");
1206 return PTR_ERR(edp->regs);
1209 edp->clk_edp = devm_clk_get(&pdev->dev,"clk_edp");
1210 if (IS_ERR(edp->clk_edp)) {
1211 dev_err(&pdev->dev, "cannot get clk_edp\n");
1212 return PTR_ERR(edp->clk_edp);
1215 edp->clk_24m = devm_clk_get(&pdev->dev,"clk_edp_24m");
1216 if (IS_ERR(edp->clk_24m)) {
1217 dev_err(&pdev->dev, "cannot get clk_edp_24m\n");
1218 return PTR_ERR(edp->clk_24m);
1221 edp->pclk = devm_clk_get(&pdev->dev,"pclk_edp");
1222 if (IS_ERR(edp->pclk)) {
1223 dev_err(&pdev->dev, "cannot get pclk\n");
1224 return PTR_ERR(edp->pclk);
1227 /*edp->irq = platform_get_irq(pdev, 0);
1229 dev_err(&pdev->dev, "cannot find IRQ\n");
1232 ret = devm_request_irq(&pdev->dev, edp->irq, rk32_edp_isr, 0,
1233 dev_name(&pdev->dev), edp);
1235 dev_err(&pdev->dev, "cannot claim IRQ %d\n", edp->irq);
1238 disable_irq(edp->irq);*/
1240 clk_prepare(edp->pclk);
1241 clk_prepare(edp->clk_edp);
1242 clk_prepare(edp->clk_24m);
1243 rk_fb_trsm_ops_register(&trsm_edp_ops, SCREEN_EDP);
1244 dev_info(&pdev->dev, "rk32 edp driver probe success\n");
1249 static void rk32_edp_shutdown(struct platform_device *pdev)
1254 #if defined(CONFIG_OF)
1255 static const struct of_device_id rk32_edp_dt_ids[] = {
1256 {.compatible = "rockchip, rk32-edp",},
1260 MODULE_DEVICE_TABLE(of, rk32_edp_dt_ids);
1263 static struct platform_driver rk32_edp_driver = {
1264 .probe = rk32_edp_probe,
1267 .owner = THIS_MODULE,
1268 #if defined(CONFIG_OF)
1269 .of_match_table = of_match_ptr(rk32_edp_dt_ids),
1272 .shutdown = rk32_edp_shutdown,
1275 static int __init rk32_edp_module_init(void)
1277 return platform_driver_register(&rk32_edp_driver);
1280 static void __exit rk32_edp_module_exit(void)
1285 subsys_initcall_sync(rk32_edp_module_init);
1286 module_exit(rk32_edp_module_exit);