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);
57 rk32_edp_init_refclk(edp);
58 rk32_edp_init_interrupt(edp);
60 rk32_edp_enable_sw_function(edp);
62 rk32_edp_init_analog_func(edp);
64 rk32_edp_init_hpd(edp);
65 rk32_edp_init_aux(edp);
70 static int rk32_edp_detect_hpd(struct rk32_edp *edp)
74 rk32_edp_init_hpd(edp);
78 while (rk32_edp_get_plug_in_status(edp) != 0) {
80 if (DP_TIMEOUT_LOOP_CNT < timeout_loop) {
81 dev_err(edp->dev, "failed to get hpd plug status\n");
90 static int rk32_edp_read_edid(struct rk32_edp *edp)
92 unsigned char edid[EDID_LENGTH * 2];
93 unsigned int extend_block = 0;
95 unsigned char test_vector;
99 * EDID device address is 0x50.
100 * However, if necessary, you must have set upper address
101 * into E-EDID in I2C device, 0x30.
104 /* Read Extension Flag, Number of 128-byte EDID extension blocks */
105 retval = rk32_edp_read_byte_from_i2c(edp, EDID_ADDR, EDID_EXTENSION_FLAG,
108 dev_err(edp->dev, "EDID extension flag failed!\n");
112 if (extend_block > 0) {
113 dev_dbg(edp->dev, "EDID data includes a single extension!\n");
116 retval = rk32_edp_read_bytes_from_i2c(edp, EDID_ADDR, EDID_HEADER,
117 EDID_LENGTH, &edid[EDID_HEADER]);
119 dev_err(edp->dev, "EDID Read failed!\n");
122 sum = edp_calc_edid_check_sum(edid);
124 dev_warn(edp->dev, "EDID bad checksum!\n");
128 /* Read additional EDID data */
129 retval = rk32_edp_read_bytes_from_i2c(edp, EDID_ADDR, EDID_LENGTH,
130 EDID_LENGTH, &edid[EDID_LENGTH]);
132 dev_err(edp->dev, "EDID Read failed!\n");
135 sum = edp_calc_edid_check_sum(&edid[EDID_LENGTH]);
137 dev_warn(edp->dev, "EDID bad checksum!\n");
141 retval = rk32_edp_read_byte_from_dpcd(edp, DPCD_TEST_REQUEST,
144 dev_err(edp->dev, "DPCD EDID Read failed!\n");
148 if (test_vector & DPCD_TEST_EDID_READ) {
149 retval = rk32_edp_write_byte_to_dpcd(edp,
150 DPCD_TEST_EDID_CHECKSUM,
151 edid[EDID_LENGTH + EDID_CHECKSUM]);
153 dev_err(edp->dev, "DPCD EDID Write failed!\n");
156 retval = rk32_edp_write_byte_to_dpcd(edp,
158 DPCD_TEST_EDID_CHECKSUM_WRITE);
160 dev_err(edp->dev, "DPCD EDID checksum failed!\n");
165 dev_info(edp->dev, "EDID data does not include any extensions.\n");
168 retval = rk32_edp_read_bytes_from_i2c(edp, EDID_ADDR, EDID_HEADER,
169 EDID_LENGTH, &edid[EDID_HEADER]);
171 dev_err(edp->dev, "EDID Read failed!\n");
174 sum = edp_calc_edid_check_sum(edid);
176 dev_warn(edp->dev, "EDID bad checksum!\n");
180 retval = rk32_edp_read_byte_from_dpcd(edp,DPCD_TEST_REQUEST,
183 dev_err(edp->dev, "DPCD EDID Read failed!\n");
187 if (test_vector & DPCD_TEST_EDID_READ) {
188 retval = rk32_edp_write_byte_to_dpcd(edp,
189 DPCD_TEST_EDID_CHECKSUM,
190 edid[EDID_CHECKSUM]);
192 dev_err(edp->dev, "DPCD EDID Write failed!\n");
195 retval = rk32_edp_write_byte_to_dpcd(edp,
197 DPCD_TEST_EDID_CHECKSUM_WRITE);
199 dev_err(edp->dev, "DPCD EDID checksum failed!\n");
204 fb_edid_to_monspecs(edid, &edp->specs);
205 dev_err(edp->dev, "EDID Read success!\n");
209 static int rk32_edp_handle_edid(struct rk32_edp *edp)
215 /* Read DPCD DPCD_ADDR_DPCD_REV~RECEIVE_PORT1_CAP_1 */
216 retval = rk32_edp_read_bytes_from_dpcd(edp, DPCD_REV, 12, buf);
220 for (i=0 ;i < 12; i++)
221 dev_info(edp->dev, "%d:>>0x%02x\n", i, buf[i]);
223 for (i = 0; i < 3; i++) {
224 retval = rk32_edp_read_edid(edp);
232 static int rk32_edp_enable_rx_to_enhanced_mode(struct rk32_edp *edp,
238 retval = rk32_edp_read_byte_from_dpcd(edp,
239 DPCD_LANE_CNT_SET, &data);
244 retval = rk32_edp_write_byte_to_dpcd(edp,
246 DPCD_ENHANCED_FRAME_EN |
247 DPCD_LANE_COUNT_SET(data));
249 /*retval = rk32_edp_write_byte_to_dpcd(edp,
250 DPCD_ADDR_CONFIGURATION_SET, 0);*/
252 retval = rk32_edp_write_byte_to_dpcd(edp,
254 DPCD_LANE_COUNT_SET(data));
260 void rk32_edp_rx_control(struct rk32_edp *edp, bool enable)
262 /*rk32_edp_write_byte_to_dpcd(edp, DPCD_ADDR_USER_DEFINED1,0);
263 rk32_edp_write_byte_to_dpcd(edp, DPCD_ADDR_USER_DEFINED2,0x90);
266 rk32_edp_write_byte_to_dpcd(edp, DPCD_ADDR_USER_DEFINED3,0x84);
267 rk32_edp_write_byte_to_dpcd(edp, DPCD_ADDR_USER_DEFINED3,0x00);
269 rk32_edp_write_byte_to_dpcd(edp, DPCD_ADDR_USER_DEFINED3,0x80);
273 static int rk32_edp_is_enhanced_mode_available(struct rk32_edp *edp)
278 retval = rk32_edp_read_byte_from_dpcd(edp,
279 DPCD_MAX_LANE_CNT, &data);
283 return DPCD_ENHANCED_FRAME_CAP(data);
286 static void rk32_edp_disable_rx_zmux(struct rk32_edp *edp)
288 /*rk32_edp_write_byte_to_dpcd(edp,
289 DPCD_ADDR_USER_DEFINED1, 0);
290 rk32_edp_write_byte_to_dpcd(edp,
291 DPCD_ADDR_USER_DEFINED2, 0x83);
292 rk32_edp_write_byte_to_dpcd(edp,
293 DPCD_ADDR_USER_DEFINED3, 0x27);*/
296 static int rk32_edp_set_enhanced_mode(struct rk32_edp *edp)
301 retval = rk32_edp_is_enhanced_mode_available(edp);
306 retval = rk32_edp_enable_rx_to_enhanced_mode(edp, data);
310 rk32_edp_enable_enhanced_mode(edp, data);
315 static int rk32_edp_training_pattern_dis(struct rk32_edp *edp)
319 rk32_edp_set_training_pattern(edp, DP_NONE);
321 retval = rk32_edp_write_byte_to_dpcd(edp,
322 DPCD_TRAINING_PATTERN_SET,
323 DPCD_TRAINING_PATTERN_DISABLED);
330 static void rk32_edp_set_lane_lane_pre_emphasis(struct rk32_edp *edp,
331 int pre_emphasis, int lane)
335 rk32_edp_set_lane0_pre_emphasis(edp, pre_emphasis);
338 rk32_edp_set_lane1_pre_emphasis(edp, pre_emphasis);
342 rk32_edp_set_lane2_pre_emphasis(edp, pre_emphasis);
346 rk32_edp_set_lane3_pre_emphasis(edp, pre_emphasis);
351 static int rk32_edp_link_start(struct rk32_edp *edp)
358 lane_count = edp->link_train.lane_count;
360 edp->link_train.lt_state = LT_CLK_RECOVERY;
361 edp->link_train.eq_loop = 0;
363 for (lane = 0; lane < lane_count; lane++)
364 edp->link_train.cr_loop[lane] = 0;
366 /* Set sink to D0 (Sink Not Ready) mode. */
367 retval = rk32_edp_write_byte_to_dpcd(edp, DPCD_SINK_POWER_STATE,
368 DPCD_SET_POWER_STATE_D0);
370 dev_err(edp->dev, "failed to set sink device to D0!\n");
374 /* Set link rate and count as you want to establish*/
375 rk32_edp_set_link_bandwidth(edp, edp->link_train.link_rate);
376 rk32_edp_set_lane_count(edp, edp->link_train.lane_count);
378 /* Setup RX configuration */
379 buf[0] = edp->link_train.link_rate;
380 buf[1] = edp->link_train.lane_count;
381 retval = rk32_edp_write_bytes_to_dpcd(edp, DPCD_LINK_BW_SET,
384 dev_err(edp->dev, "failed to set bandwidth and lane count!\n");
388 /* Set TX pre-emphasis to level1 */
389 for (lane = 0; lane < lane_count; lane++)
390 rk32_edp_set_lane_lane_pre_emphasis(edp,
391 PRE_EMPHASIS_LEVEL_1, lane);
393 /* Set training pattern 1 */
394 rk32_edp_set_training_pattern(edp, TRAINING_PTN1);
396 /* Set RX training pattern */
397 retval = rk32_edp_write_byte_to_dpcd(edp,
398 DPCD_TRAINING_PATTERN_SET,
399 DPCD_SCRAMBLING_DISABLED |
400 DPCD_TRAINING_PATTERN_1);
402 dev_err(edp->dev, "failed to set training pattern 1!\n");
406 for (lane = 0; lane < lane_count; lane++)
407 buf[lane] = DPCD_PRE_EMPHASIS_PATTERN2_LEVEL0 |
408 DPCD_VOLTAGE_SWING_PATTERN1_LEVEL0;
409 retval = rk32_edp_write_bytes_to_dpcd(edp,
410 DPCD_TRAINING_LANE0_SET,
413 dev_err(edp->dev, "failed to set training lane!\n");
420 static unsigned char rk32_edp_get_lane_status(u8 link_status[2], int lane)
422 int shift = (lane & 1) * 4;
423 u8 link_value = link_status[lane>>1];
425 return (link_value >> shift) & 0xf;
428 static int rk32_edp_clock_recovery_ok(u8 link_status[2], int lane_count)
433 for (lane = 0; lane < lane_count; lane++) {
434 lane_status = rk32_edp_get_lane_status(link_status, lane);
435 if ((lane_status & DPCD_LANE_CR_DONE) == 0)
441 static int rk32_edp_channel_eq_ok(u8 link_align[3], int lane_count)
447 lane_align = link_align[2];
448 if ((lane_align & DPCD_INTERLANE_ALIGN_DONE) == 0)
451 for (lane = 0; lane < lane_count; lane++) {
452 lane_status = rk32_edp_get_lane_status(link_align, lane);
453 lane_status &= DPCD_CHANNEL_EQ_BITS;
454 if (lane_status != DPCD_CHANNEL_EQ_BITS)
461 static unsigned char rk32_edp_get_adjust_request_voltage(u8 adjust_request[2],
464 int shift = (lane & 1) * 4;
465 u8 link_value = adjust_request[lane>>1];
467 return (link_value >> shift) & 0x3;
470 static unsigned char rk32_edp_get_adjust_request_pre_emphasis(
471 u8 adjust_request[2],
474 int shift = (lane & 1) * 4;
475 u8 link_value = adjust_request[lane>>1];
477 return ((link_value >> shift) & 0xc) >> 2;
480 static void rk32_edp_set_lane_link_training(struct rk32_edp *edp,
481 u8 training_lane_set, int lane)
485 rk32_edp_set_lane0_link_training(edp, training_lane_set);
488 rk32_edp_set_lane1_link_training(edp, training_lane_set);
492 rk32_edp_set_lane2_link_training(edp, training_lane_set);
496 rk32_edp_set_lane3_link_training(edp, training_lane_set);
501 static unsigned int rk32_edp_get_lane_link_training(
502 struct rk32_edp *edp,
509 reg = rk32_edp_get_lane0_link_training(edp);
512 reg = rk32_edp_get_lane1_link_training(edp);
515 reg = rk32_edp_get_lane2_link_training(edp);
518 reg = rk32_edp_get_lane3_link_training(edp);
525 static void rk32_edp_reduce_link_rate(struct rk32_edp *edp)
527 rk32_edp_training_pattern_dis(edp);
529 edp->link_train.lt_state = FAILED;
532 static int rk32_edp_process_clock_recovery(struct rk32_edp *edp)
538 u8 adjust_request[2];
546 lane_count = edp->link_train.lane_count;
548 retval = rk32_edp_read_bytes_from_dpcd(edp,
552 dev_err(edp->dev, "failed to read lane status!\n");
556 if (rk32_edp_clock_recovery_ok(link_status, lane_count) == 0) {
557 /* set training pattern 2 for EQ */
558 rk32_edp_set_training_pattern(edp, TRAINING_PTN2);
560 for (lane = 0; lane < lane_count; lane++) {
561 retval = rk32_edp_read_bytes_from_dpcd(edp,
562 DPCD_ADJUST_REQUEST_LANE0_1,
565 dev_err(edp->dev, "failed to read adjust request!\n");
569 voltage_swing = rk32_edp_get_adjust_request_voltage(
570 adjust_request, lane);
571 pre_emphasis = rk32_edp_get_adjust_request_pre_emphasis(
572 adjust_request, lane);
573 training_lane = DPCD_VOLTAGE_SWING_SET(voltage_swing) |
574 DPCD_PRE_EMPHASIS_SET(pre_emphasis);
576 if (voltage_swing == VOLTAGE_LEVEL_3)
577 training_lane |= DPCD_MAX_SWING_REACHED;
578 if (pre_emphasis == PRE_EMPHASIS_LEVEL_3)
579 training_lane |= DPCD_MAX_PRE_EMPHASIS_REACHED;
581 edp->link_train.training_lane[lane] = training_lane;
583 rk32_edp_set_lane_link_training(edp,
584 edp->link_train.training_lane[lane],
588 retval = rk32_edp_write_byte_to_dpcd(edp,
589 DPCD_TRAINING_PATTERN_SET,
590 DPCD_SCRAMBLING_DISABLED |
591 DPCD_TRAINING_PATTERN_2);
593 dev_err(edp->dev, "failed to set training pattern 2!\n");
597 retval = rk32_edp_write_bytes_to_dpcd(edp,
598 DPCD_TRAINING_LANE0_SET,
600 edp->link_train.training_lane);
602 dev_err(edp->dev, "failed to set training lane!\n");
606 dev_info(edp->dev, "Link Training Clock Recovery success\n");
607 edp->link_train.lt_state = LT_EQ_TRAINING;
609 for (lane = 0; lane < lane_count; lane++) {
610 training_lane = rk32_edp_get_lane_link_training(
612 retval = rk32_edp_read_bytes_from_dpcd(edp,
613 DPCD_ADJUST_REQUEST_LANE0_1,
616 dev_err(edp->dev, "failed to read adjust request!\n");
620 voltage_swing = rk32_edp_get_adjust_request_voltage(
621 adjust_request, lane);
622 pre_emphasis = rk32_edp_get_adjust_request_pre_emphasis(
623 adjust_request, lane);
625 if (voltage_swing == VOLTAGE_LEVEL_3 ||
626 pre_emphasis == PRE_EMPHASIS_LEVEL_3) {
627 dev_err(edp->dev, "voltage or pre emphasis reached max level\n");
628 goto reduce_link_rate;
631 if ((DPCD_VOLTAGE_SWING_GET(training_lane) ==
633 (DPCD_PRE_EMPHASIS_GET(training_lane) ==
635 edp->link_train.cr_loop[lane]++;
636 if (edp->link_train.cr_loop[lane] == MAX_CR_LOOP) {
637 dev_err(edp->dev, "CR Max loop\n");
638 goto reduce_link_rate;
642 training_lane = DPCD_VOLTAGE_SWING_SET(voltage_swing) |
643 DPCD_PRE_EMPHASIS_SET(pre_emphasis);
645 if (voltage_swing == VOLTAGE_LEVEL_3)
646 training_lane |= DPCD_MAX_SWING_REACHED;
647 if (pre_emphasis == PRE_EMPHASIS_LEVEL_3)
648 training_lane |= DPCD_MAX_PRE_EMPHASIS_REACHED;
650 edp->link_train.training_lane[lane] = training_lane;
652 rk32_edp_set_lane_link_training(edp,
653 edp->link_train.training_lane[lane], lane);
656 retval = rk32_edp_write_bytes_to_dpcd(edp,
657 DPCD_TRAINING_LANE0_SET,
659 edp->link_train.training_lane);
661 dev_err(edp->dev, "failed to set training lane!\n");
669 rk32_edp_reduce_link_rate(edp);
673 static int rk32_edp_process_equalizer_training(struct rk32_edp *edp)
681 u8 adjust_request[2];
689 lane_count = edp->link_train.lane_count;
691 retval = rk32_edp_read_bytes_from_dpcd(edp,
695 dev_err(edp->dev, "failed to read lane status!\n");
699 if (rk32_edp_clock_recovery_ok(link_status, lane_count) == 0) {
700 link_align[0] = link_status[0];
701 link_align[1] = link_status[1];
703 retval = rk32_edp_read_byte_from_dpcd(edp,
704 DPCD_LANE_ALIGN_STATUS_UPDATED,
707 dev_err(edp->dev, "failed to read lane aligne status!\n");
711 for (lane = 0; lane < lane_count; lane++) {
712 retval = rk32_edp_read_bytes_from_dpcd(edp,
713 DPCD_ADJUST_REQUEST_LANE0_1,
716 dev_err(edp->dev, "failed to read adjust request!\n");
720 voltage_swing = rk32_edp_get_adjust_request_voltage(
721 adjust_request, lane);
722 pre_emphasis = rk32_edp_get_adjust_request_pre_emphasis(
723 adjust_request, lane);
724 training_lane = DPCD_VOLTAGE_SWING_SET(voltage_swing) |
725 DPCD_PRE_EMPHASIS_SET(pre_emphasis);
727 if (voltage_swing == VOLTAGE_LEVEL_3)
728 training_lane |= DPCD_MAX_SWING_REACHED;
729 if (pre_emphasis == PRE_EMPHASIS_LEVEL_3)
730 training_lane |= DPCD_MAX_PRE_EMPHASIS_REACHED;
732 edp->link_train.training_lane[lane] = training_lane;
735 if (rk32_edp_channel_eq_ok(link_align, lane_count) == 0) {
736 /* traing pattern Set to Normal */
737 retval = rk32_edp_training_pattern_dis(edp);
739 dev_err(edp->dev, "failed to disable training pattern!\n");
743 dev_info(edp->dev, "Link Training success!\n");
745 rk32_edp_get_link_bandwidth(edp, ®);
746 edp->link_train.link_rate = reg;
747 dev_dbg(edp->dev, "final bandwidth = %.2x\n",
748 edp->link_train.link_rate);
750 rk32_edp_get_lane_count(edp, ®);
751 edp->link_train.lane_count = reg;
752 dev_dbg(edp->dev, "final lane count = %.2x\n",
753 edp->link_train.lane_count);
755 edp->link_train.lt_state = FINISHED;
758 edp->link_train.eq_loop++;
760 if (edp->link_train.eq_loop > MAX_EQ_LOOP) {
761 dev_err(edp->dev, "EQ Max loop\n");
762 goto reduce_link_rate;
765 for (lane = 0; lane < lane_count; lane++)
766 rk32_edp_set_lane_link_training(edp,
767 edp->link_train.training_lane[lane],
770 retval = rk32_edp_write_bytes_to_dpcd(edp,
771 DPCD_TRAINING_LANE0_SET,
773 edp->link_train.training_lane);
775 dev_err(edp->dev, "failed to set training lane!\n");
780 goto reduce_link_rate;
786 rk32_edp_reduce_link_rate(edp);
790 static int rk32_edp_get_max_rx_bandwidth(struct rk32_edp *edp,
797 * For DP rev.1.1, Maximum link rate of Main Link lanes
798 * 0x06 = 1.62 Gbps, 0x0a = 2.7 Gbps
800 retval = rk32_edp_read_byte_from_dpcd(edp,
801 DPCD_MAX_LINK_RATE, &data);
809 static int rk32_edp_get_max_rx_lane_count(struct rk32_edp *edp,
816 * For DP rev.1.1, Maximum number of Main Link lanes
817 * 0x01 = 1 lane, 0x02 = 2 lanes, 0x04 = 4 lanes
819 retval = rk32_edp_read_byte_from_dpcd(edp,
820 DPCD_MAX_LANE_CNT, &data);
824 *lane_count = DPCD_MAX_LANE_COUNT(data);
828 static int rk32_edp_init_training(struct rk32_edp *edp,
829 enum link_lane_count_type max_lane,
835 * MACRO_RST must be applied after the PLL_LOCK to avoid
836 * the DP inter pair skew issue for at least 10 us
838 rk32_edp_reset_macro(edp);
841 retval = rk32_edp_get_max_rx_bandwidth(edp, &edp->link_train.link_rate);
845 retval = rk32_edp_get_max_rx_lane_count(edp, &edp->link_train.lane_count);
848 dev_info(edp->dev, "max link rate:%d.%dGps max number of lanes:%d\n",
849 edp->link_train.link_rate * 27/100,
850 edp->link_train.link_rate*27%100,
851 edp->link_train.lane_count);
853 if ((edp->link_train.link_rate != LINK_RATE_1_62GBPS) &&
854 (edp->link_train.link_rate != LINK_RATE_2_70GBPS)) {
855 dev_err(edp->dev, "Rx Max Link Rate is abnormal :%x !\n",
856 edp->link_train.link_rate);
857 edp->link_train.link_rate = LINK_RATE_1_62GBPS;
860 if (edp->link_train.lane_count == 0) {
861 dev_err(edp->dev, "Rx Max Lane count is abnormal :%x !\n",
862 edp->link_train.lane_count);
863 edp->link_train.lane_count = (u8)LANE_CNT1;
867 if (edp->link_train.lane_count > max_lane)
868 edp->link_train.lane_count = max_lane;
869 if (edp->link_train.link_rate > max_rate)
870 edp->link_train.link_rate = max_rate;
873 rk32_edp_analog_power_ctr(edp, 1);
878 static int rk32_edp_sw_link_training(struct rk32_edp *edp)
881 int training_finished = 0;
883 edp->link_train.lt_state = LT_START;
886 while (!training_finished) {
887 switch (edp->link_train.lt_state) {
889 retval = rk32_edp_link_start(edp);
891 dev_err(edp->dev, "LT Start failed\n");
893 case LT_CLK_RECOVERY:
894 retval = rk32_edp_process_clock_recovery(edp);
896 dev_err(edp->dev, "LT CR failed\n");
899 retval = rk32_edp_process_equalizer_training(edp);
901 dev_err(edp->dev, "LT EQ failed\n");
904 training_finished = 1;
915 static int rk32_edp_hw_link_training(struct rk32_edp *edp)
919 /* Set link rate and count as you want to establish*/
920 rk32_edp_set_link_bandwidth(edp, edp->link_train.link_rate);
921 rk32_edp_set_lane_count(edp, edp->link_train.lane_count);
922 rk32_edp_hw_link_training_en(edp);
924 val = rk32_edp_wait_hw_lt_done(edp);
927 dev_err(edp->dev, "hw lt timeout");
931 val = rk32_edp_wait_hw_lt_done(edp);
934 val = rk32_edp_get_hw_lt_status(edp);
936 dev_err(edp->dev, "hw lt err:%d\n", val);
940 static int rk32_edp_set_link_train(struct rk32_edp *edp,
946 retval = rk32_edp_init_training(edp, count, bwtype);
948 dev_err(edp->dev, "DP LT init failed!\n");
950 retval = rk32_edp_sw_link_training(edp);
952 retval = rk32_edp_hw_link_training(edp);
958 static int rk32_edp_config_video(struct rk32_edp *edp,
959 struct video_info *video_info)
962 int timeout_loop = 0;
965 rk32_edp_config_video_slave_mode(edp, video_info);
967 rk32_edp_set_video_color_format(edp, video_info->color_depth,
968 video_info->color_space,
969 video_info->dynamic_range,
970 video_info->ycbcr_coeff);
972 if (rk32_edp_get_pll_lock_status(edp) == DP_PLL_UNLOCKED) {
973 dev_err(edp->dev, "PLL is not locked yet.\n");
979 if (rk32_edp_is_slave_video_stream_clock_on(edp) == 0)
981 if (DP_TIMEOUT_LOOP_CNT < timeout_loop) {
982 dev_err(edp->dev, "Timeout of video streamclk ok\n");
989 /* Set to use the register calculated M/N video */
990 rk32_edp_set_video_cr_mn(edp, CALCULATED_M, 0, 0);
992 /* For video bist, Video timing must be generated by register */
993 rk32_edp_set_video_timing_mode(edp, VIDEO_TIMING_FROM_CAPTURE);
995 /* Disable video mute */
996 rk32_edp_enable_video_mute(edp, 0);
998 /* Configure video slave mode */
999 rk32_edp_enable_video_master(edp, 0);
1002 rk32_edp_start_video(edp);
1008 if (rk32_edp_is_video_stream_on(edp) == 0) {
1010 if (done_count > 10)
1012 } else if (done_count) {
1015 if (DP_TIMEOUT_LOOP_CNT < timeout_loop) {
1016 dev_err(edp->dev, "Timeout of video streamclk ok\n");
1020 usleep_range(1000, 1000);
1024 dev_err(edp->dev, "Video stream is not detected!\n");
1029 static int rk32_edp_enable_scramble(struct rk32_edp *edp, bool enable)
1035 rk32_edp_enable_scrambling(edp);
1037 retval = rk32_edp_read_byte_from_dpcd(edp,
1038 DPCD_TRAINING_PATTERN_SET,
1043 retval = rk32_edp_write_byte_to_dpcd(edp,
1044 DPCD_TRAINING_PATTERN_SET,
1045 (u8)(data & ~DPCD_SCRAMBLING_DISABLED));
1049 rk32_edp_disable_scrambling(edp);
1051 retval = rk32_edp_read_byte_from_dpcd(edp,
1052 DPCD_TRAINING_PATTERN_SET,
1057 retval = rk32_edp_write_byte_to_dpcd(edp,
1058 DPCD_TRAINING_PATTERN_SET,
1059 (u8)(data | DPCD_SCRAMBLING_DISABLED));
1067 static irqreturn_t rk32_edp_isr(int irq, void *arg)
1069 struct rk32_edp *edp = arg;
1071 //dev_info(edp->dev, "rk32_edp_isr\n");
1075 static int rk32_edp_enable(void)
1079 struct rk32_edp *edp = rk32_edp;
1084 clk_enable(edp->pclk);
1085 clk_enable(edp->clk_edp);
1086 clk_enable(edp->clk_24m);
1090 rk32_edp_init_edp(edp);
1092 ret = rk32_edp_handle_edid(edp);
1094 dev_err(edp->dev, "unable to handle edid\n");
1099 ret = rk32_edp_enable_scramble(edp, 0);
1101 dev_err(edp->dev, "unable to set scramble\n");
1105 ret = rk32_edp_enable_rx_to_enhanced_mode(edp, 0);
1107 dev_err(edp->dev, "unable to set enhanced mode\n");
1110 rk32_edp_enable_enhanced_mode(edp, 0);
1113 ret = rk32_edp_set_link_train(edp, LANE_CNT4, LINK_RATE_1_62GBPS);
1115 dev_err(edp->dev, "link train failed\n");
1119 rk32_edp_set_lane_count(edp, edp->video_info.lane_count);
1120 rk32_edp_set_link_bandwidth(edp, edp->video_info.link_rate);
1122 #ifdef EDP_BIST_MODE
1123 rk32_edp_bist_cfg(edp);
1125 rk32_edp_init_video(edp);
1126 ret = rk32_edp_config_video(edp, &edp->video_info);
1128 dev_err(edp->dev, "unable to config video\n");
1141 dev_err(edp->dev, "DP LT exceeds max retry count");
1145 static int rk32_edp_disable(void )
1147 struct rk32_edp *edp = rk32_edp;
1154 rk32_edp_reset(edp);
1155 rk32_edp_analog_power_ctr(edp, 0);
1157 clk_disable(edp->clk_24m);
1158 clk_disable(edp->clk_edp);
1159 clk_disable(edp->pclk);
1165 static struct rk_fb_trsm_ops trsm_edp_ops = {
1166 .enable = rk32_edp_enable,
1167 .disable = rk32_edp_disable,
1169 static int rk32_edp_probe(struct platform_device *pdev)
1171 struct rk32_edp *edp;
1172 struct resource *res;
1173 struct device_node *np = pdev->dev.of_node;
1177 dev_err(&pdev->dev, "Missing device tree node.\n");
1181 edp = devm_kzalloc(&pdev->dev, sizeof(struct rk32_edp), GFP_KERNEL);
1183 dev_err(&pdev->dev, "no memory for state\n");
1186 edp->dev = &pdev->dev;
1187 edp->video_info.h_sync_polarity = 0;
1188 edp->video_info.v_sync_polarity = 0;
1189 edp->video_info.interlaced = 0;
1190 edp->video_info.color_space = CS_RGB;
1191 edp->video_info.dynamic_range = VESA;
1192 edp->video_info.ycbcr_coeff = COLOR_YCBCR601;
1193 edp->video_info.color_depth = COLOR_8;
1195 edp->video_info.link_rate = LINK_RATE_1_62GBPS;
1196 edp->video_info.lane_count = LANE_CNT4;
1197 rk_fb_get_prmry_screen(&edp->screen);
1198 if (edp->screen.type != SCREEN_EDP) {
1199 dev_err(&pdev->dev, "screen is not edp!\n");
1202 platform_set_drvdata(pdev, edp);
1203 dev_set_name(edp->dev, "rk32-edp");
1205 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1206 edp->regs = devm_ioremap_resource(&pdev->dev, res);
1207 if (IS_ERR(edp->regs)) {
1208 dev_err(&pdev->dev, "ioremap reg failed\n");
1209 return PTR_ERR(edp->regs);
1212 edp->clk_edp = devm_clk_get(&pdev->dev,"clk_edp");
1213 if (IS_ERR(edp->clk_edp)) {
1214 dev_err(&pdev->dev, "cannot get clk_edp\n");
1215 return PTR_ERR(edp->clk_edp);
1218 edp->clk_24m = devm_clk_get(&pdev->dev,"clk_edp_24m");
1219 if (IS_ERR(edp->clk_24m)) {
1220 dev_err(&pdev->dev, "cannot get clk_edp_24m\n");
1221 return PTR_ERR(edp->clk_24m);
1224 edp->pclk = devm_clk_get(&pdev->dev,"pclk_edp");
1225 if (IS_ERR(edp->pclk)) {
1226 dev_err(&pdev->dev, "cannot get pclk\n");
1227 return PTR_ERR(edp->pclk);
1230 /*edp->irq = platform_get_irq(pdev, 0);
1232 dev_err(&pdev->dev, "cannot find IRQ\n");
1235 ret = devm_request_irq(&pdev->dev, edp->irq, rk32_edp_isr, 0,
1236 dev_name(&pdev->dev), edp);
1238 dev_err(&pdev->dev, "cannot claim IRQ %d\n", edp->irq);
1241 disable_irq(edp->irq);*/
1243 clk_prepare(edp->pclk);
1244 clk_prepare(edp->clk_edp);
1245 clk_prepare(edp->clk_24m);
1246 rk_fb_trsm_ops_register(&trsm_edp_ops, SCREEN_EDP);
1247 dev_info(&pdev->dev, "rk32 edp driver probe success\n");
1252 static void rk32_edp_shutdown(struct platform_device *pdev)
1257 #if defined(CONFIG_OF)
1258 static const struct of_device_id rk32_edp_dt_ids[] = {
1259 {.compatible = "rockchip, rk32-edp",},
1263 MODULE_DEVICE_TABLE(of, rk32_edp_dt_ids);
1266 static struct platform_driver rk32_edp_driver = {
1267 .probe = rk32_edp_probe,
1270 .owner = THIS_MODULE,
1271 #if defined(CONFIG_OF)
1272 .of_match_table = of_match_ptr(rk32_edp_dt_ids),
1275 .shutdown = rk32_edp_shutdown,
1278 static int __init rk32_edp_module_init(void)
1280 return platform_driver_register(&rk32_edp_driver);
1283 static void __exit rk32_edp_module_exit(void)
1288 subsys_initcall_sync(rk32_edp_module_init);
1289 module_exit(rk32_edp_module_exit);