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 writel_relaxed(val, RK_CRU_VIRT + 0x01d0);
60 writel_relaxed(val, RK_CRU_VIRT + 0x01d0);
63 rk32_edp_init_refclk(edp);
64 rk32_edp_init_interrupt(edp);
66 rk32_edp_enable_sw_function(edp);
68 rk32_edp_init_analog_func(edp);
70 rk32_edp_init_hpd(edp);
71 rk32_edp_init_aux(edp);
76 static int rk32_edp_detect_hpd(struct rk32_edp *edp)
80 rk32_edp_init_hpd(edp);
84 while (rk32_edp_get_plug_in_status(edp) != 0) {
86 if (DP_TIMEOUT_LOOP_CNT < timeout_loop) {
87 dev_err(edp->dev, "failed to get hpd plug status\n");
96 static int rk32_edp_read_edid(struct rk32_edp *edp)
98 unsigned char edid[EDID_LENGTH * 2];
99 unsigned int extend_block = 0;
101 unsigned char test_vector;
105 * EDID device address is 0x50.
106 * However, if necessary, you must have set upper address
107 * into E-EDID in I2C device, 0x30.
110 /* Read Extension Flag, Number of 128-byte EDID extension blocks */
111 retval = rk32_edp_read_byte_from_i2c(edp, EDID_ADDR, EDID_EXTENSION_FLAG,
114 dev_err(edp->dev, "EDID extension flag failed!\n");
118 if (extend_block > 0) {
119 dev_dbg(edp->dev, "EDID data includes a single extension!\n");
122 retval = rk32_edp_read_bytes_from_i2c(edp, EDID_ADDR, EDID_HEADER,
123 EDID_LENGTH, &edid[EDID_HEADER]);
125 dev_err(edp->dev, "EDID Read failed!\n");
128 sum = edp_calc_edid_check_sum(edid);
130 dev_warn(edp->dev, "EDID bad checksum!\n");
134 /* Read additional EDID data */
135 retval = rk32_edp_read_bytes_from_i2c(edp, EDID_ADDR, EDID_LENGTH,
136 EDID_LENGTH, &edid[EDID_LENGTH]);
138 dev_err(edp->dev, "EDID Read failed!\n");
141 sum = edp_calc_edid_check_sum(&edid[EDID_LENGTH]);
143 dev_warn(edp->dev, "EDID bad checksum!\n");
147 retval = rk32_edp_read_byte_from_dpcd(edp, DPCD_TEST_REQUEST,
150 dev_err(edp->dev, "DPCD EDID Read failed!\n");
154 if (test_vector & DPCD_TEST_EDID_READ) {
155 retval = rk32_edp_write_byte_to_dpcd(edp,
156 DPCD_TEST_EDID_CHECKSUM,
157 edid[EDID_LENGTH + EDID_CHECKSUM]);
159 dev_err(edp->dev, "DPCD EDID Write failed!\n");
162 retval = rk32_edp_write_byte_to_dpcd(edp,
164 DPCD_TEST_EDID_CHECKSUM_WRITE);
166 dev_err(edp->dev, "DPCD EDID checksum failed!\n");
171 dev_info(edp->dev, "EDID data does not include any extensions.\n");
174 retval = rk32_edp_read_bytes_from_i2c(edp, EDID_ADDR, EDID_HEADER,
175 EDID_LENGTH, &edid[EDID_HEADER]);
177 dev_err(edp->dev, "EDID Read failed!\n");
180 sum = edp_calc_edid_check_sum(edid);
182 dev_warn(edp->dev, "EDID bad checksum!\n");
186 retval = rk32_edp_read_byte_from_dpcd(edp,DPCD_TEST_REQUEST,
189 dev_err(edp->dev, "DPCD EDID Read failed!\n");
193 if (test_vector & DPCD_TEST_EDID_READ) {
194 retval = rk32_edp_write_byte_to_dpcd(edp,
195 DPCD_TEST_EDID_CHECKSUM,
196 edid[EDID_CHECKSUM]);
198 dev_err(edp->dev, "DPCD EDID Write failed!\n");
201 retval = rk32_edp_write_byte_to_dpcd(edp,
203 DPCD_TEST_EDID_CHECKSUM_WRITE);
205 dev_err(edp->dev, "DPCD EDID checksum failed!\n");
210 fb_edid_to_monspecs(edid, &edp->specs);
211 dev_err(edp->dev, "EDID Read success!\n");
215 static int rk32_edp_handle_edid(struct rk32_edp *edp)
221 /* Read DPCD DPCD_ADDR_DPCD_REV~RECEIVE_PORT1_CAP_1 */
222 retval = rk32_edp_read_bytes_from_dpcd(edp, DPCD_REV, 12, buf);
226 for (i=0 ;i < 12; i++)
227 dev_info(edp->dev, "%d:>>0x%02x\n", i, buf[i]);
229 for (i = 0; i < 3; i++) {
230 retval = rk32_edp_read_edid(edp);
238 static int rk32_edp_enable_rx_to_enhanced_mode(struct rk32_edp *edp,
244 retval = rk32_edp_read_byte_from_dpcd(edp,
245 DPCD_LANE_CNT_SET, &data);
250 retval = rk32_edp_write_byte_to_dpcd(edp,
252 DPCD_ENHANCED_FRAME_EN |
253 DPCD_LANE_COUNT_SET(data));
255 /*retval = rk32_edp_write_byte_to_dpcd(edp,
256 DPCD_ADDR_CONFIGURATION_SET, 0);*/
258 retval = rk32_edp_write_byte_to_dpcd(edp,
260 DPCD_LANE_COUNT_SET(data));
266 void rk32_edp_rx_control(struct rk32_edp *edp, bool enable)
268 /*rk32_edp_write_byte_to_dpcd(edp, DPCD_ADDR_USER_DEFINED1,0);
269 rk32_edp_write_byte_to_dpcd(edp, DPCD_ADDR_USER_DEFINED2,0x90);
272 rk32_edp_write_byte_to_dpcd(edp, DPCD_ADDR_USER_DEFINED3,0x84);
273 rk32_edp_write_byte_to_dpcd(edp, DPCD_ADDR_USER_DEFINED3,0x00);
275 rk32_edp_write_byte_to_dpcd(edp, DPCD_ADDR_USER_DEFINED3,0x80);
279 static int rk32_edp_is_enhanced_mode_available(struct rk32_edp *edp)
284 retval = rk32_edp_read_byte_from_dpcd(edp,
285 DPCD_MAX_LANE_CNT, &data);
289 return DPCD_ENHANCED_FRAME_CAP(data);
292 static void rk32_edp_disable_rx_zmux(struct rk32_edp *edp)
294 /*rk32_edp_write_byte_to_dpcd(edp,
295 DPCD_ADDR_USER_DEFINED1, 0);
296 rk32_edp_write_byte_to_dpcd(edp,
297 DPCD_ADDR_USER_DEFINED2, 0x83);
298 rk32_edp_write_byte_to_dpcd(edp,
299 DPCD_ADDR_USER_DEFINED3, 0x27);*/
302 static int rk32_edp_set_enhanced_mode(struct rk32_edp *edp)
307 retval = rk32_edp_is_enhanced_mode_available(edp);
312 retval = rk32_edp_enable_rx_to_enhanced_mode(edp, data);
316 rk32_edp_enable_enhanced_mode(edp, data);
321 static int rk32_edp_training_pattern_dis(struct rk32_edp *edp)
325 rk32_edp_set_training_pattern(edp, DP_NONE);
327 retval = rk32_edp_write_byte_to_dpcd(edp,
328 DPCD_TRAINING_PATTERN_SET,
329 DPCD_TRAINING_PATTERN_DISABLED);
336 static void rk32_edp_set_lane_lane_pre_emphasis(struct rk32_edp *edp,
337 int pre_emphasis, int lane)
341 rk32_edp_set_lane0_pre_emphasis(edp, pre_emphasis);
344 rk32_edp_set_lane1_pre_emphasis(edp, pre_emphasis);
348 rk32_edp_set_lane2_pre_emphasis(edp, pre_emphasis);
352 rk32_edp_set_lane3_pre_emphasis(edp, pre_emphasis);
357 static int rk32_edp_link_start(struct rk32_edp *edp)
364 lane_count = edp->link_train.lane_count;
366 edp->link_train.lt_state = LT_CLK_RECOVERY;
367 edp->link_train.eq_loop = 0;
369 for (lane = 0; lane < lane_count; lane++)
370 edp->link_train.cr_loop[lane] = 0;
372 /* Set sink to D0 (Sink Not Ready) mode. */
373 retval = rk32_edp_write_byte_to_dpcd(edp, DPCD_SINK_POWER_STATE,
374 DPCD_SET_POWER_STATE_D0);
376 dev_err(edp->dev, "failed to set sink device to D0!\n");
380 /* Set link rate and count as you want to establish*/
381 rk32_edp_set_link_bandwidth(edp, edp->link_train.link_rate);
382 rk32_edp_set_lane_count(edp, edp->link_train.lane_count);
384 /* Setup RX configuration */
385 buf[0] = edp->link_train.link_rate;
386 buf[1] = edp->link_train.lane_count;
387 retval = rk32_edp_write_bytes_to_dpcd(edp, DPCD_LINK_BW_SET,
390 dev_err(edp->dev, "failed to set bandwidth and lane count!\n");
394 /* Set TX pre-emphasis to level1 */
395 for (lane = 0; lane < lane_count; lane++)
396 rk32_edp_set_lane_lane_pre_emphasis(edp,
397 PRE_EMPHASIS_LEVEL_1, lane);
399 /* Set training pattern 1 */
400 rk32_edp_set_training_pattern(edp, TRAINING_PTN1);
402 /* Set RX training pattern */
403 retval = rk32_edp_write_byte_to_dpcd(edp,
404 DPCD_TRAINING_PATTERN_SET,
405 DPCD_SCRAMBLING_DISABLED |
406 DPCD_TRAINING_PATTERN_1);
408 dev_err(edp->dev, "failed to set training pattern 1!\n");
412 for (lane = 0; lane < lane_count; lane++)
413 buf[lane] = DPCD_PRE_EMPHASIS_PATTERN2_LEVEL0 |
414 DPCD_VOLTAGE_SWING_PATTERN1_LEVEL0;
415 retval = rk32_edp_write_bytes_to_dpcd(edp,
416 DPCD_TRAINING_LANE0_SET,
419 dev_err(edp->dev, "failed to set training lane!\n");
426 static unsigned char rk32_edp_get_lane_status(u8 link_status[2], int lane)
428 int shift = (lane & 1) * 4;
429 u8 link_value = link_status[lane>>1];
431 return (link_value >> shift) & 0xf;
434 static int rk32_edp_clock_recovery_ok(u8 link_status[2], int lane_count)
439 for (lane = 0; lane < lane_count; lane++) {
440 lane_status = rk32_edp_get_lane_status(link_status, lane);
441 if ((lane_status & DPCD_LANE_CR_DONE) == 0)
447 static int rk32_edp_channel_eq_ok(u8 link_align[3], int lane_count)
453 lane_align = link_align[2];
454 if ((lane_align & DPCD_INTERLANE_ALIGN_DONE) == 0)
457 for (lane = 0; lane < lane_count; lane++) {
458 lane_status = rk32_edp_get_lane_status(link_align, lane);
459 lane_status &= DPCD_CHANNEL_EQ_BITS;
460 if (lane_status != DPCD_CHANNEL_EQ_BITS)
467 static unsigned char rk32_edp_get_adjust_request_voltage(u8 adjust_request[2],
470 int shift = (lane & 1) * 4;
471 u8 link_value = adjust_request[lane>>1];
473 return (link_value >> shift) & 0x3;
476 static unsigned char rk32_edp_get_adjust_request_pre_emphasis(
477 u8 adjust_request[2],
480 int shift = (lane & 1) * 4;
481 u8 link_value = adjust_request[lane>>1];
483 return ((link_value >> shift) & 0xc) >> 2;
486 static void rk32_edp_set_lane_link_training(struct rk32_edp *edp,
487 u8 training_lane_set, int lane)
491 rk32_edp_set_lane0_link_training(edp, training_lane_set);
494 rk32_edp_set_lane1_link_training(edp, training_lane_set);
498 rk32_edp_set_lane2_link_training(edp, training_lane_set);
502 rk32_edp_set_lane3_link_training(edp, training_lane_set);
507 static unsigned int rk32_edp_get_lane_link_training(
508 struct rk32_edp *edp,
515 reg = rk32_edp_get_lane0_link_training(edp);
518 reg = rk32_edp_get_lane1_link_training(edp);
521 reg = rk32_edp_get_lane2_link_training(edp);
524 reg = rk32_edp_get_lane3_link_training(edp);
531 static void rk32_edp_reduce_link_rate(struct rk32_edp *edp)
533 rk32_edp_training_pattern_dis(edp);
535 edp->link_train.lt_state = FAILED;
538 static int rk32_edp_process_clock_recovery(struct rk32_edp *edp)
544 u8 adjust_request[2];
552 lane_count = edp->link_train.lane_count;
554 retval = rk32_edp_read_bytes_from_dpcd(edp,
558 dev_err(edp->dev, "failed to read lane status!\n");
562 if (rk32_edp_clock_recovery_ok(link_status, lane_count) == 0) {
563 /* set training pattern 2 for EQ */
564 rk32_edp_set_training_pattern(edp, TRAINING_PTN2);
566 for (lane = 0; lane < lane_count; lane++) {
567 retval = rk32_edp_read_bytes_from_dpcd(edp,
568 DPCD_ADJUST_REQUEST_LANE0_1,
571 dev_err(edp->dev, "failed to read adjust request!\n");
575 voltage_swing = rk32_edp_get_adjust_request_voltage(
576 adjust_request, lane);
577 pre_emphasis = rk32_edp_get_adjust_request_pre_emphasis(
578 adjust_request, lane);
579 training_lane = DPCD_VOLTAGE_SWING_SET(voltage_swing) |
580 DPCD_PRE_EMPHASIS_SET(pre_emphasis);
582 if (voltage_swing == VOLTAGE_LEVEL_3)
583 training_lane |= DPCD_MAX_SWING_REACHED;
584 if (pre_emphasis == PRE_EMPHASIS_LEVEL_3)
585 training_lane |= DPCD_MAX_PRE_EMPHASIS_REACHED;
587 edp->link_train.training_lane[lane] = training_lane;
589 rk32_edp_set_lane_link_training(edp,
590 edp->link_train.training_lane[lane],
594 retval = rk32_edp_write_byte_to_dpcd(edp,
595 DPCD_TRAINING_PATTERN_SET,
596 DPCD_SCRAMBLING_DISABLED |
597 DPCD_TRAINING_PATTERN_2);
599 dev_err(edp->dev, "failed to set training pattern 2!\n");
603 retval = rk32_edp_write_bytes_to_dpcd(edp,
604 DPCD_TRAINING_LANE0_SET,
606 edp->link_train.training_lane);
608 dev_err(edp->dev, "failed to set training lane!\n");
612 dev_info(edp->dev, "Link Training Clock Recovery success\n");
613 edp->link_train.lt_state = LT_EQ_TRAINING;
615 for (lane = 0; lane < lane_count; lane++) {
616 training_lane = rk32_edp_get_lane_link_training(
618 retval = rk32_edp_read_bytes_from_dpcd(edp,
619 DPCD_ADJUST_REQUEST_LANE0_1,
622 dev_err(edp->dev, "failed to read adjust request!\n");
626 voltage_swing = rk32_edp_get_adjust_request_voltage(
627 adjust_request, lane);
628 pre_emphasis = rk32_edp_get_adjust_request_pre_emphasis(
629 adjust_request, lane);
631 if (voltage_swing == VOLTAGE_LEVEL_3 ||
632 pre_emphasis == PRE_EMPHASIS_LEVEL_3) {
633 dev_err(edp->dev, "voltage or pre emphasis reached max level\n");
634 goto reduce_link_rate;
637 if ((DPCD_VOLTAGE_SWING_GET(training_lane) ==
639 (DPCD_PRE_EMPHASIS_GET(training_lane) ==
641 edp->link_train.cr_loop[lane]++;
642 if (edp->link_train.cr_loop[lane] == MAX_CR_LOOP) {
643 dev_err(edp->dev, "CR Max loop\n");
644 goto reduce_link_rate;
648 training_lane = DPCD_VOLTAGE_SWING_SET(voltage_swing) |
649 DPCD_PRE_EMPHASIS_SET(pre_emphasis);
651 if (voltage_swing == VOLTAGE_LEVEL_3)
652 training_lane |= DPCD_MAX_SWING_REACHED;
653 if (pre_emphasis == PRE_EMPHASIS_LEVEL_3)
654 training_lane |= DPCD_MAX_PRE_EMPHASIS_REACHED;
656 edp->link_train.training_lane[lane] = training_lane;
658 rk32_edp_set_lane_link_training(edp,
659 edp->link_train.training_lane[lane], lane);
662 retval = rk32_edp_write_bytes_to_dpcd(edp,
663 DPCD_TRAINING_LANE0_SET,
665 edp->link_train.training_lane);
667 dev_err(edp->dev, "failed to set training lane!\n");
675 rk32_edp_reduce_link_rate(edp);
679 static int rk32_edp_process_equalizer_training(struct rk32_edp *edp)
687 u8 adjust_request[2];
695 lane_count = edp->link_train.lane_count;
697 retval = rk32_edp_read_bytes_from_dpcd(edp,
701 dev_err(edp->dev, "failed to read lane status!\n");
705 if (rk32_edp_clock_recovery_ok(link_status, lane_count) == 0) {
706 link_align[0] = link_status[0];
707 link_align[1] = link_status[1];
709 retval = rk32_edp_read_byte_from_dpcd(edp,
710 DPCD_LANE_ALIGN_STATUS_UPDATED,
713 dev_err(edp->dev, "failed to read lane aligne status!\n");
717 for (lane = 0; lane < lane_count; lane++) {
718 retval = rk32_edp_read_bytes_from_dpcd(edp,
719 DPCD_ADJUST_REQUEST_LANE0_1,
722 dev_err(edp->dev, "failed to read adjust request!\n");
726 voltage_swing = rk32_edp_get_adjust_request_voltage(
727 adjust_request, lane);
728 pre_emphasis = rk32_edp_get_adjust_request_pre_emphasis(
729 adjust_request, lane);
730 training_lane = DPCD_VOLTAGE_SWING_SET(voltage_swing) |
731 DPCD_PRE_EMPHASIS_SET(pre_emphasis);
733 if (voltage_swing == VOLTAGE_LEVEL_3)
734 training_lane |= DPCD_MAX_SWING_REACHED;
735 if (pre_emphasis == PRE_EMPHASIS_LEVEL_3)
736 training_lane |= DPCD_MAX_PRE_EMPHASIS_REACHED;
738 edp->link_train.training_lane[lane] = training_lane;
741 if (rk32_edp_channel_eq_ok(link_align, lane_count) == 0) {
742 /* traing pattern Set to Normal */
743 retval = rk32_edp_training_pattern_dis(edp);
745 dev_err(edp->dev, "failed to disable training pattern!\n");
749 dev_info(edp->dev, "Link Training success!\n");
751 rk32_edp_get_link_bandwidth(edp, ®);
752 edp->link_train.link_rate = reg;
753 dev_dbg(edp->dev, "final bandwidth = %.2x\n",
754 edp->link_train.link_rate);
756 rk32_edp_get_lane_count(edp, ®);
757 edp->link_train.lane_count = reg;
758 dev_dbg(edp->dev, "final lane count = %.2x\n",
759 edp->link_train.lane_count);
761 edp->link_train.lt_state = FINISHED;
764 edp->link_train.eq_loop++;
766 if (edp->link_train.eq_loop > MAX_EQ_LOOP) {
767 dev_err(edp->dev, "EQ Max loop\n");
768 goto reduce_link_rate;
771 for (lane = 0; lane < lane_count; lane++)
772 rk32_edp_set_lane_link_training(edp,
773 edp->link_train.training_lane[lane],
776 retval = rk32_edp_write_bytes_to_dpcd(edp,
777 DPCD_TRAINING_LANE0_SET,
779 edp->link_train.training_lane);
781 dev_err(edp->dev, "failed to set training lane!\n");
786 goto reduce_link_rate;
792 rk32_edp_reduce_link_rate(edp);
796 static int rk32_edp_get_max_rx_bandwidth(struct rk32_edp *edp,
803 * For DP rev.1.1, Maximum link rate of Main Link lanes
804 * 0x06 = 1.62 Gbps, 0x0a = 2.7 Gbps
806 retval = rk32_edp_read_byte_from_dpcd(edp,
807 DPCD_MAX_LINK_RATE, &data);
815 static int rk32_edp_get_max_rx_lane_count(struct rk32_edp *edp,
822 * For DP rev.1.1, Maximum number of Main Link lanes
823 * 0x01 = 1 lane, 0x02 = 2 lanes, 0x04 = 4 lanes
825 retval = rk32_edp_read_byte_from_dpcd(edp,
826 DPCD_MAX_LANE_CNT, &data);
830 *lane_count = DPCD_MAX_LANE_COUNT(data);
834 static int rk32_edp_init_training(struct rk32_edp *edp)
839 * MACRO_RST must be applied after the PLL_LOCK to avoid
840 * the DP inter pair skew issue for at least 10 us
842 rk32_edp_reset_macro(edp);
845 retval = rk32_edp_get_max_rx_bandwidth(edp, &edp->link_train.link_rate);
846 retval = rk32_edp_get_max_rx_lane_count(edp, &edp->link_train.lane_count);
847 dev_info(edp->dev, "max link rate:%d.%dGps max number of lanes:%d\n",
848 edp->link_train.link_rate * 27/100,
849 edp->link_train.link_rate*27%100,
850 edp->link_train.lane_count);
852 if ((edp->link_train.link_rate != LINK_RATE_1_62GBPS) &&
853 (edp->link_train.link_rate != LINK_RATE_2_70GBPS)) {
854 dev_warn(edp->dev, "Rx Max Link Rate is abnormal :%x !"
855 "use default link rate:%d.%dGps\n",
856 edp->link_train.link_rate,
857 edp->video_info.link_rate*27/100,
858 edp->video_info.link_rate*27%100);
859 edp->link_train.link_rate = edp->video_info.link_rate;
862 if (edp->link_train.lane_count == 0) {
863 dev_err(edp->dev, "Rx Max Lane count is abnormal :%x !"
864 "use default lanes:%d\n",
865 edp->link_train.lane_count,
866 edp->video_info.lane_count);
867 edp->link_train.lane_count = edp->video_info.lane_count;
870 rk32_edp_analog_power_ctr(edp, 1);
876 static int rk32_edp_sw_link_training(struct rk32_edp *edp)
879 int training_finished = 0;
881 edp->link_train.lt_state = LT_START;
884 while (!training_finished) {
885 switch (edp->link_train.lt_state) {
887 retval = rk32_edp_link_start(edp);
889 dev_err(edp->dev, "LT Start failed\n");
891 case LT_CLK_RECOVERY:
892 retval = rk32_edp_process_clock_recovery(edp);
894 dev_err(edp->dev, "LT CR failed\n");
897 retval = rk32_edp_process_equalizer_training(edp);
899 dev_err(edp->dev, "LT EQ failed\n");
902 training_finished = 1;
913 static int rk32_edp_hw_link_training(struct rk32_edp *edp)
917 /* Set link rate and count as you want to establish*/
918 rk32_edp_set_link_bandwidth(edp, edp->link_train.link_rate);
919 rk32_edp_set_lane_count(edp, edp->link_train.lane_count);
920 rk32_edp_hw_link_training_en(edp);
922 val = rk32_edp_wait_hw_lt_done(edp);
925 dev_err(edp->dev, "hw lt timeout");
929 val = rk32_edp_wait_hw_lt_done(edp);
932 val = rk32_edp_get_hw_lt_status(edp);
934 dev_err(edp->dev, "hw lt err:%d\n", val);
938 static int rk32_edp_set_link_train(struct rk32_edp *edp)
942 retval = rk32_edp_init_training(edp);
944 dev_err(edp->dev, "DP LT init failed!\n");
946 retval = rk32_edp_sw_link_training(edp);
948 retval = rk32_edp_hw_link_training(edp);
954 static int rk32_edp_config_video(struct rk32_edp *edp,
955 struct video_info *video_info)
958 int timeout_loop = 0;
961 rk32_edp_config_video_slave_mode(edp, video_info);
963 rk32_edp_set_video_color_format(edp, video_info->color_depth,
964 video_info->color_space,
965 video_info->dynamic_range,
966 video_info->ycbcr_coeff);
968 if (rk32_edp_get_pll_lock_status(edp) == DP_PLL_UNLOCKED) {
969 dev_err(edp->dev, "PLL is not locked yet.\n");
975 if (rk32_edp_is_slave_video_stream_clock_on(edp) == 0)
977 if (DP_TIMEOUT_LOOP_CNT < timeout_loop) {
978 dev_err(edp->dev, "Timeout of video streamclk ok\n");
985 /* Set to use the register calculated M/N video */
986 rk32_edp_set_video_cr_mn(edp, CALCULATED_M, 0, 0);
988 /* For video bist, Video timing must be generated by register */
989 rk32_edp_set_video_timing_mode(edp, VIDEO_TIMING_FROM_CAPTURE);
991 /* Disable video mute */
992 rk32_edp_enable_video_mute(edp, 0);
994 /* Configure video slave mode */
995 rk32_edp_enable_video_master(edp, 0);
998 rk32_edp_start_video(edp);
1004 if (rk32_edp_is_video_stream_on(edp) == 0) {
1006 if (done_count > 10)
1008 } else if (done_count) {
1011 if (DP_TIMEOUT_LOOP_CNT < timeout_loop) {
1012 dev_err(edp->dev, "Timeout of video streamclk ok\n");
1016 usleep_range(1000, 1000);
1020 dev_err(edp->dev, "Video stream is not detected!\n");
1025 static int rk32_edp_enable_scramble(struct rk32_edp *edp, bool enable)
1031 rk32_edp_enable_scrambling(edp);
1033 retval = rk32_edp_read_byte_from_dpcd(edp,
1034 DPCD_TRAINING_PATTERN_SET,
1039 retval = rk32_edp_write_byte_to_dpcd(edp,
1040 DPCD_TRAINING_PATTERN_SET,
1041 (u8)(data & ~DPCD_SCRAMBLING_DISABLED));
1045 rk32_edp_disable_scrambling(edp);
1047 retval = rk32_edp_read_byte_from_dpcd(edp,
1048 DPCD_TRAINING_PATTERN_SET,
1053 retval = rk32_edp_write_byte_to_dpcd(edp,
1054 DPCD_TRAINING_PATTERN_SET,
1055 (u8)(data | DPCD_SCRAMBLING_DISABLED));
1063 static irqreturn_t rk32_edp_isr(int irq, void *arg)
1065 struct rk32_edp *edp = arg;
1066 enum dp_irq_type irq_type;
1068 irq_type = rk32_edp_get_irq_type(edp);
1073 static int rk32_edp_enable(void)
1077 struct rk32_edp *edp = rk32_edp;
1079 clk_enable(edp->pclk);
1080 clk_enable(edp->clk_edp);
1081 clk_enable(edp->clk_24m);
1083 rk32_edp_init_edp(edp);
1085 /*ret = rk32_edp_handle_edid(edp);
1087 dev_err(edp->dev, "unable to handle edid\n");
1092 ret = rk32_edp_enable_scramble(edp, 0);
1094 dev_err(edp->dev, "unable to set scramble\n");
1098 ret = rk32_edp_enable_rx_to_enhanced_mode(edp, 0);
1100 dev_err(edp->dev, "unable to set enhanced mode\n");
1103 rk32_edp_enable_enhanced_mode(edp, 1);*/
1105 ret = rk32_edp_set_link_train(edp);
1107 dev_err(edp->dev, "link train failed>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n");
1109 dev_info(edp->dev, "link training success.\n");
1111 rk32_edp_set_lane_count(edp, edp->link_train.lane_count);
1112 rk32_edp_set_link_bandwidth(edp, edp->link_train.link_rate);
1114 #ifdef EDP_BIST_MODE
1115 rk32_edp_bist_cfg(edp);
1117 rk32_edp_init_video(edp);
1118 ret = rk32_edp_config_video(edp, &edp->video_info);
1120 dev_err(edp->dev, "unable to config video\n");
1128 static int rk32_edp_disable(void )
1130 struct rk32_edp *edp = rk32_edp;
1132 rk32_edp_reset(edp);
1133 rk32_edp_analog_power_ctr(edp, 0);
1135 clk_disable(edp->clk_24m);
1136 clk_disable(edp->clk_edp);
1137 clk_disable(edp->pclk);
1143 static struct rk_fb_trsm_ops trsm_edp_ops = {
1144 .enable = rk32_edp_enable,
1145 .disable = rk32_edp_disable,
1147 static int rk32_edp_probe(struct platform_device *pdev)
1149 struct rk32_edp *edp;
1150 struct resource *res;
1151 struct device_node *np = pdev->dev.of_node;
1155 dev_err(&pdev->dev, "Missing device tree node.\n");
1159 edp = devm_kzalloc(&pdev->dev, sizeof(struct rk32_edp), GFP_KERNEL);
1161 dev_err(&pdev->dev, "no memory for state\n");
1164 edp->dev = &pdev->dev;
1165 edp->video_info.h_sync_polarity = 0;
1166 edp->video_info.v_sync_polarity = 0;
1167 edp->video_info.interlaced = 0;
1168 edp->video_info.color_space = CS_RGB;
1169 edp->video_info.dynamic_range = VESA;
1170 edp->video_info.ycbcr_coeff = COLOR_YCBCR601;
1171 edp->video_info.color_depth = COLOR_8;
1173 edp->video_info.link_rate = LINK_RATE_1_62GBPS;
1174 edp->video_info.lane_count = LANE_CNT4;
1175 rk_fb_get_prmry_screen(&edp->screen);
1176 if (edp->screen.type != SCREEN_EDP) {
1177 dev_err(&pdev->dev, "screen is not edp!\n");
1180 platform_set_drvdata(pdev, edp);
1181 dev_set_name(edp->dev, "rk32-edp");
1183 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1184 edp->regs = devm_ioremap_resource(&pdev->dev, res);
1185 if (IS_ERR(edp->regs)) {
1186 dev_err(&pdev->dev, "ioremap reg failed\n");
1187 return PTR_ERR(edp->regs);
1190 edp->clk_edp = devm_clk_get(&pdev->dev,"clk_edp");
1191 if (IS_ERR(edp->clk_edp)) {
1192 dev_err(&pdev->dev, "cannot get clk_edp\n");
1193 return PTR_ERR(edp->clk_edp);
1196 edp->clk_24m = devm_clk_get(&pdev->dev,"clk_edp_24m");
1197 if (IS_ERR(edp->clk_24m)) {
1198 dev_err(&pdev->dev, "cannot get clk_edp_24m\n");
1199 return PTR_ERR(edp->clk_24m);
1202 edp->pclk = devm_clk_get(&pdev->dev,"pclk_edp");
1203 if (IS_ERR(edp->pclk)) {
1204 dev_err(&pdev->dev, "cannot get pclk\n");
1205 return PTR_ERR(edp->pclk);
1208 /*edp->irq = platform_get_irq(pdev, 0);
1210 dev_err(&pdev->dev, "cannot find IRQ\n");
1213 ret = devm_request_irq(&pdev->dev, edp->irq, rk32_edp_isr, 0,
1214 dev_name(&pdev->dev), edp);
1216 dev_err(&pdev->dev, "cannot claim IRQ %d\n", edp->irq);
1219 disable_irq(edp->irq);*/
1221 clk_prepare(edp->pclk);
1222 clk_prepare(edp->clk_edp);
1223 clk_prepare(edp->clk_24m);
1224 rk_fb_trsm_ops_register(&trsm_edp_ops, SCREEN_EDP);
1225 dev_info(&pdev->dev, "rk32 edp driver probe success\n");
1230 static void rk32_edp_shutdown(struct platform_device *pdev)
1235 #if defined(CONFIG_OF)
1236 static const struct of_device_id rk32_edp_dt_ids[] = {
1237 {.compatible = "rockchip, rk32-edp",},
1241 MODULE_DEVICE_TABLE(of, rk32_edp_dt_ids);
1244 static struct platform_driver rk32_edp_driver = {
1245 .probe = rk32_edp_probe,
1248 .owner = THIS_MODULE,
1249 #if defined(CONFIG_OF)
1250 .of_match_table = of_match_ptr(rk32_edp_dt_ids),
1253 .shutdown = rk32_edp_shutdown,
1256 static int __init rk32_edp_module_init(void)
1258 return platform_driver_register(&rk32_edp_driver);
1261 static void __exit rk32_edp_module_exit(void)
1266 subsys_initcall_sync(rk32_edp_module_init);
1267 module_exit(rk32_edp_module_exit);