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 int rk32_edp_init_edp(struct rk32_edp *edp)
38 struct rk_screen *screen = &edp->screen;
40 #ifndef CONFIG_RK_FPGA
41 if (screen->lcdc_id == 0) /*select lcdc*/
42 val = EDP_SEL_VOP_LIT | (EDP_SEL_VOP_LIT << 16);
44 val = EDP_SEL_VOP_LIT << 16;
45 writel_relaxed(val, RK_GRF_VIRT + RK3288_GRF_SOC_CON6);
48 rk32_edp_init_refclk(edp);
49 rk32_edp_init_interrupt(edp);
51 rk32_edp_enable_sw_function(edp);
53 rk32_edp_init_analog_func(edp);
55 rk32_edp_init_hpd(edp);
56 rk32_edp_init_aux(edp);
61 static int rk32_edp_detect_hpd(struct rk32_edp *edp)
65 rk32_edp_init_hpd(edp);
69 while (rk32_edp_get_plug_in_status(edp) != 0) {
71 if (DP_TIMEOUT_LOOP_CNT < timeout_loop) {
72 dev_err(edp->dev, "failed to get hpd plug status\n");
81 static int rk32_edp_read_edid(struct rk32_edp *edp)
83 unsigned char edid[EDID_LENGTH * 2];
84 unsigned int extend_block = 0;
86 unsigned char test_vector;
90 * EDID device address is 0x50.
91 * However, if necessary, you must have set upper address
92 * into E-EDID in I2C device, 0x30.
95 /* Read Extension Flag, Number of 128-byte EDID extension blocks */
96 retval = rk32_edp_read_byte_from_i2c(edp, EDID_ADDR, EDID_EXTENSION_FLAG,
99 dev_err(edp->dev, "EDID extension flag failed!\n");
103 if (extend_block > 0) {
104 dev_dbg(edp->dev, "EDID data includes a single extension!\n");
107 retval = rk32_edp_read_bytes_from_i2c(edp, EDID_ADDR, EDID_HEADER,
108 EDID_LENGTH, &edid[EDID_HEADER]);
110 dev_err(edp->dev, "EDID Read failed!\n");
113 sum = edp_calc_edid_check_sum(edid);
115 dev_warn(edp->dev, "EDID bad checksum!\n");
119 /* Read additional EDID data */
120 retval = rk32_edp_read_bytes_from_i2c(edp, EDID_ADDR, EDID_LENGTH,
121 EDID_LENGTH, &edid[EDID_LENGTH]);
123 dev_err(edp->dev, "EDID Read failed!\n");
126 sum = edp_calc_edid_check_sum(&edid[EDID_LENGTH]);
128 dev_warn(edp->dev, "EDID bad checksum!\n");
132 retval = rk32_edp_read_byte_from_dpcd(edp, DPCD_TEST_REQUEST,
135 dev_err(edp->dev, "DPCD EDID Read failed!\n");
139 if (test_vector & DPCD_TEST_EDID_READ) {
140 retval = rk32_edp_write_byte_to_dpcd(edp,
141 DPCD_TEST_EDID_CHECKSUM,
142 edid[EDID_LENGTH + EDID_CHECKSUM]);
144 dev_err(edp->dev, "DPCD EDID Write failed!\n");
147 retval = rk32_edp_write_byte_to_dpcd(edp,
149 DPCD_TEST_EDID_CHECKSUM_WRITE);
151 dev_err(edp->dev, "DPCD EDID checksum failed!\n");
156 dev_info(edp->dev, "EDID data does not include any extensions.\n");
159 retval = rk32_edp_read_bytes_from_i2c(edp, EDID_ADDR, EDID_HEADER,
160 EDID_LENGTH, &edid[EDID_HEADER]);
162 dev_err(edp->dev, "EDID Read failed!\n");
165 sum = edp_calc_edid_check_sum(edid);
167 dev_warn(edp->dev, "EDID bad checksum!\n");
171 retval = rk32_edp_read_byte_from_dpcd(edp,DPCD_TEST_REQUEST,
174 dev_err(edp->dev, "DPCD EDID Read failed!\n");
178 if (test_vector & DPCD_TEST_EDID_READ) {
179 retval = rk32_edp_write_byte_to_dpcd(edp,
180 DPCD_TEST_EDID_CHECKSUM,
181 edid[EDID_CHECKSUM]);
183 dev_err(edp->dev, "DPCD EDID Write failed!\n");
186 retval = rk32_edp_write_byte_to_dpcd(edp,
188 DPCD_TEST_EDID_CHECKSUM_WRITE);
190 dev_err(edp->dev, "DPCD EDID checksum failed!\n");
196 dev_err(edp->dev, "EDID Read success!\n");
200 static int rk32_edp_handle_edid(struct rk32_edp *edp)
206 /* Read DPCD DPCD_ADDR_DPCD_REV~RECEIVE_PORT1_CAP_1 */
207 retval = rk32_edp_read_bytes_from_dpcd(edp, DPCD_REV, 12, buf);
212 for (i = 0; i < 3; i++) {
213 retval = rk32_edp_read_edid(edp);
221 static int rk32_edp_enable_rx_to_enhanced_mode(struct rk32_edp *edp,
227 retval = rk32_edp_read_byte_from_dpcd(edp,
228 DPCD_LANE_CNT_SET, &data);
233 retval = rk32_edp_write_byte_to_dpcd(edp,
235 DPCD_ENHANCED_FRAME_EN |
236 DPCD_LANE_COUNT_SET(data));
238 /*retval = rk32_edp_write_byte_to_dpcd(edp,
239 DPCD_ADDR_CONFIGURATION_SET, 0);*/
241 retval = rk32_edp_write_byte_to_dpcd(edp,
243 DPCD_LANE_COUNT_SET(data));
249 void rk32_edp_rx_control(struct rk32_edp *edp, bool enable)
251 /*rk32_edp_write_byte_to_dpcd(edp, DPCD_ADDR_USER_DEFINED1,0);
252 rk32_edp_write_byte_to_dpcd(edp, DPCD_ADDR_USER_DEFINED2,0x90);
255 rk32_edp_write_byte_to_dpcd(edp, DPCD_ADDR_USER_DEFINED3,0x84);
256 rk32_edp_write_byte_to_dpcd(edp, DPCD_ADDR_USER_DEFINED3,0x00);
258 rk32_edp_write_byte_to_dpcd(edp, DPCD_ADDR_USER_DEFINED3,0x80);
262 static int rk32_edp_is_enhanced_mode_available(struct rk32_edp *edp)
267 retval = rk32_edp_read_byte_from_dpcd(edp,
268 DPCD_MAX_LANE_CNT, &data);
272 return DPCD_ENHANCED_FRAME_CAP(data);
275 static void rk32_edp_disable_rx_zmux(struct rk32_edp *edp)
277 /*rk32_edp_write_byte_to_dpcd(edp,
278 DPCD_ADDR_USER_DEFINED1, 0);
279 rk32_edp_write_byte_to_dpcd(edp,
280 DPCD_ADDR_USER_DEFINED2, 0x83);
281 rk32_edp_write_byte_to_dpcd(edp,
282 DPCD_ADDR_USER_DEFINED3, 0x27);*/
285 static int rk32_edp_set_enhanced_mode(struct rk32_edp *edp)
290 retval = rk32_edp_is_enhanced_mode_available(edp);
295 retval = rk32_edp_enable_rx_to_enhanced_mode(edp, data);
299 rk32_edp_enable_enhanced_mode(edp, data);
304 static int rk32_edp_training_pattern_dis(struct rk32_edp *edp)
308 rk32_edp_set_training_pattern(edp, DP_NONE);
310 retval = rk32_edp_write_byte_to_dpcd(edp,
311 DPCD_TRAINING_PATTERN_SET,
312 DPCD_TRAINING_PATTERN_DISABLED);
319 static void rk32_edp_set_lane_lane_pre_emphasis(struct rk32_edp *edp,
320 int pre_emphasis, int lane)
324 rk32_edp_set_lane0_pre_emphasis(edp, pre_emphasis);
327 rk32_edp_set_lane1_pre_emphasis(edp, pre_emphasis);
331 rk32_edp_set_lane2_pre_emphasis(edp, pre_emphasis);
335 rk32_edp_set_lane3_pre_emphasis(edp, pre_emphasis);
340 static int rk32_edp_link_start(struct rk32_edp *edp)
347 lane_count = edp->link_train.lane_count;
349 edp->link_train.lt_state = LT_CLK_RECOVERY;
350 edp->link_train.eq_loop = 0;
352 for (lane = 0; lane < lane_count; lane++)
353 edp->link_train.cr_loop[lane] = 0;
355 /* Set sink to D0 (Sink Not Ready) mode. */
356 retval = rk32_edp_write_byte_to_dpcd(edp, DPCD_SINK_POWER_STATE,
357 DPCD_SET_POWER_STATE_D0);
359 dev_err(edp->dev, "failed to set sink device to D0!\n");
363 /* Set link rate and count as you want to establish*/
364 rk32_edp_set_link_bandwidth(edp, edp->link_train.link_rate);
365 rk32_edp_set_lane_count(edp, edp->link_train.lane_count);
367 /* Setup RX configuration */
368 buf[0] = edp->link_train.link_rate;
369 buf[1] = edp->link_train.lane_count;
370 retval = rk32_edp_write_bytes_to_dpcd(edp, DPCD_LINK_BW_SET,
373 dev_err(edp->dev, "failed to set bandwidth and lane count!\n");
377 /* Set TX pre-emphasis to level1 */
378 for (lane = 0; lane < lane_count; lane++)
379 rk32_edp_set_lane_lane_pre_emphasis(edp,
380 PRE_EMPHASIS_LEVEL_1, lane);
382 /* Set training pattern 1 */
383 rk32_edp_set_training_pattern(edp, TRAINING_PTN1);
385 /* Set RX training pattern */
386 retval = rk32_edp_write_byte_to_dpcd(edp,
387 DPCD_TRAINING_PATTERN_SET,
388 DPCD_SCRAMBLING_DISABLED |
389 DPCD_TRAINING_PATTERN_1);
391 dev_err(edp->dev, "failed to set training pattern 1!\n");
395 for (lane = 0; lane < lane_count; lane++)
396 buf[lane] = DPCD_PRE_EMPHASIS_PATTERN2_LEVEL0 |
397 DPCD_VOLTAGE_SWING_PATTERN1_LEVEL0;
398 retval = rk32_edp_write_bytes_to_dpcd(edp,
399 DPCD_TRAINING_LANE0_SET,
402 dev_err(edp->dev, "failed to set training lane!\n");
409 static unsigned char rk32_edp_get_lane_status(u8 link_status[2], int lane)
411 int shift = (lane & 1) * 4;
412 u8 link_value = link_status[lane>>1];
414 return (link_value >> shift) & 0xf;
417 static int rk32_edp_clock_recovery_ok(u8 link_status[2], int lane_count)
422 for (lane = 0; lane < lane_count; lane++) {
423 lane_status = rk32_edp_get_lane_status(link_status, lane);
424 if ((lane_status & DPCD_LANE_CR_DONE) == 0)
430 static int rk32_edp_channel_eq_ok(u8 link_align[3], int lane_count)
436 lane_align = link_align[2];
437 if ((lane_align & DPCD_INTERLANE_ALIGN_DONE) == 0)
440 for (lane = 0; lane < lane_count; lane++) {
441 lane_status = rk32_edp_get_lane_status(link_align, lane);
442 lane_status &= DPCD_CHANNEL_EQ_BITS;
443 if (lane_status != DPCD_CHANNEL_EQ_BITS)
450 static unsigned char rk32_edp_get_adjust_request_voltage(u8 adjust_request[2],
453 int shift = (lane & 1) * 4;
454 u8 link_value = adjust_request[lane>>1];
456 return (link_value >> shift) & 0x3;
459 static unsigned char rk32_edp_get_adjust_request_pre_emphasis(
460 u8 adjust_request[2],
463 int shift = (lane & 1) * 4;
464 u8 link_value = adjust_request[lane>>1];
466 return ((link_value >> shift) & 0xc) >> 2;
469 static void rk32_edp_set_lane_link_training(struct rk32_edp *edp,
470 u8 training_lane_set, int lane)
474 rk32_edp_set_lane0_link_training(edp, training_lane_set);
477 rk32_edp_set_lane1_link_training(edp, training_lane_set);
481 rk32_edp_set_lane2_link_training(edp, training_lane_set);
485 rk32_edp_set_lane3_link_training(edp, training_lane_set);
490 static unsigned int rk32_edp_get_lane_link_training(
491 struct rk32_edp *edp,
498 reg = rk32_edp_get_lane0_link_training(edp);
501 reg = rk32_edp_get_lane1_link_training(edp);
504 reg = rk32_edp_get_lane2_link_training(edp);
507 reg = rk32_edp_get_lane3_link_training(edp);
514 static void rk32_edp_reduce_link_rate(struct rk32_edp *edp)
516 rk32_edp_training_pattern_dis(edp);
518 edp->link_train.lt_state = FAILED;
521 static int rk32_edp_process_clock_recovery(struct rk32_edp *edp)
527 u8 adjust_request[2];
535 lane_count = edp->link_train.lane_count;
537 retval = rk32_edp_read_bytes_from_dpcd(edp,
541 dev_err(edp->dev, "failed to read lane status!\n");
545 if (rk32_edp_clock_recovery_ok(link_status, lane_count) == 0) {
546 /* set training pattern 2 for EQ */
547 rk32_edp_set_training_pattern(edp, TRAINING_PTN2);
549 for (lane = 0; lane < lane_count; lane++) {
550 retval = rk32_edp_read_bytes_from_dpcd(edp,
551 DPCD_ADJUST_REQUEST_LANE0_1,
554 dev_err(edp->dev, "failed to read adjust request!\n");
558 voltage_swing = rk32_edp_get_adjust_request_voltage(
559 adjust_request, lane);
560 pre_emphasis = rk32_edp_get_adjust_request_pre_emphasis(
561 adjust_request, lane);
562 training_lane = DPCD_VOLTAGE_SWING_SET(voltage_swing) |
563 DPCD_PRE_EMPHASIS_SET(pre_emphasis);
565 if (voltage_swing == VOLTAGE_LEVEL_3)
566 training_lane |= DPCD_MAX_SWING_REACHED;
567 if (pre_emphasis == PRE_EMPHASIS_LEVEL_3)
568 training_lane |= DPCD_MAX_PRE_EMPHASIS_REACHED;
570 edp->link_train.training_lane[lane] = training_lane;
572 rk32_edp_set_lane_link_training(edp,
573 edp->link_train.training_lane[lane],
577 retval = rk32_edp_write_byte_to_dpcd(edp,
578 DPCD_TRAINING_PATTERN_SET,
579 DPCD_SCRAMBLING_DISABLED |
580 DPCD_TRAINING_PATTERN_2);
582 dev_err(edp->dev, "failed to set training pattern 2!\n");
586 retval = rk32_edp_write_bytes_to_dpcd(edp,
587 DPCD_TRAINING_LANE0_SET,
589 edp->link_train.training_lane);
591 dev_err(edp->dev, "failed to set training lane!\n");
595 dev_info(edp->dev, "Link Training Clock Recovery success\n");
596 edp->link_train.lt_state = LT_EQ_TRAINING;
598 for (lane = 0; lane < lane_count; lane++) {
599 training_lane = rk32_edp_get_lane_link_training(
601 retval = rk32_edp_read_bytes_from_dpcd(edp,
602 DPCD_ADJUST_REQUEST_LANE0_1,
605 dev_err(edp->dev, "failed to read adjust request!\n");
609 voltage_swing = rk32_edp_get_adjust_request_voltage(
610 adjust_request, lane);
611 pre_emphasis = rk32_edp_get_adjust_request_pre_emphasis(
612 adjust_request, lane);
614 if (voltage_swing == VOLTAGE_LEVEL_3 ||
615 pre_emphasis == PRE_EMPHASIS_LEVEL_3) {
616 dev_err(edp->dev, "voltage or pre emphasis reached max level\n");
617 goto reduce_link_rate;
620 if ((DPCD_VOLTAGE_SWING_GET(training_lane) ==
622 (DPCD_PRE_EMPHASIS_GET(training_lane) ==
624 edp->link_train.cr_loop[lane]++;
625 if (edp->link_train.cr_loop[lane] == MAX_CR_LOOP) {
626 dev_err(edp->dev, "CR Max loop\n");
627 goto reduce_link_rate;
631 training_lane = DPCD_VOLTAGE_SWING_SET(voltage_swing) |
632 DPCD_PRE_EMPHASIS_SET(pre_emphasis);
634 if (voltage_swing == VOLTAGE_LEVEL_3)
635 training_lane |= DPCD_MAX_SWING_REACHED;
636 if (pre_emphasis == PRE_EMPHASIS_LEVEL_3)
637 training_lane |= DPCD_MAX_PRE_EMPHASIS_REACHED;
639 edp->link_train.training_lane[lane] = training_lane;
641 rk32_edp_set_lane_link_training(edp,
642 edp->link_train.training_lane[lane], lane);
645 retval = rk32_edp_write_bytes_to_dpcd(edp,
646 DPCD_TRAINING_LANE0_SET,
648 edp->link_train.training_lane);
650 dev_err(edp->dev, "failed to set training lane!\n");
658 rk32_edp_reduce_link_rate(edp);
662 static int rk32_edp_process_equalizer_training(struct rk32_edp *edp)
670 u8 adjust_request[2];
678 lane_count = edp->link_train.lane_count;
680 retval = rk32_edp_read_bytes_from_dpcd(edp,
684 dev_err(edp->dev, "failed to read lane status!\n");
688 if (rk32_edp_clock_recovery_ok(link_status, lane_count) == 0) {
689 link_align[0] = link_status[0];
690 link_align[1] = link_status[1];
692 retval = rk32_edp_read_byte_from_dpcd(edp,
693 DPCD_LANE_ALIGN_STATUS_UPDATED,
696 dev_err(edp->dev, "failed to read lane aligne status!\n");
700 for (lane = 0; lane < lane_count; lane++) {
701 retval = rk32_edp_read_bytes_from_dpcd(edp,
702 DPCD_ADJUST_REQUEST_LANE0_1,
705 dev_err(edp->dev, "failed to read adjust request!\n");
709 voltage_swing = rk32_edp_get_adjust_request_voltage(
710 adjust_request, lane);
711 pre_emphasis = rk32_edp_get_adjust_request_pre_emphasis(
712 adjust_request, lane);
713 training_lane = DPCD_VOLTAGE_SWING_SET(voltage_swing) |
714 DPCD_PRE_EMPHASIS_SET(pre_emphasis);
716 if (voltage_swing == VOLTAGE_LEVEL_3)
717 training_lane |= DPCD_MAX_SWING_REACHED;
718 if (pre_emphasis == PRE_EMPHASIS_LEVEL_3)
719 training_lane |= DPCD_MAX_PRE_EMPHASIS_REACHED;
721 edp->link_train.training_lane[lane] = training_lane;
724 if (rk32_edp_channel_eq_ok(link_align, lane_count) == 0) {
725 /* traing pattern Set to Normal */
726 retval = rk32_edp_training_pattern_dis(edp);
728 dev_err(edp->dev, "failed to disable training pattern!\n");
732 dev_info(edp->dev, "Link Training success!\n");
734 rk32_edp_get_link_bandwidth(edp, ®);
735 edp->link_train.link_rate = reg;
736 dev_dbg(edp->dev, "final bandwidth = %.2x\n",
737 edp->link_train.link_rate);
739 rk32_edp_get_lane_count(edp, ®);
740 edp->link_train.lane_count = reg;
741 dev_dbg(edp->dev, "final lane count = %.2x\n",
742 edp->link_train.lane_count);
744 edp->link_train.lt_state = FINISHED;
747 edp->link_train.eq_loop++;
749 if (edp->link_train.eq_loop > MAX_EQ_LOOP) {
750 dev_err(edp->dev, "EQ Max loop\n");
751 goto reduce_link_rate;
754 for (lane = 0; lane < lane_count; lane++)
755 rk32_edp_set_lane_link_training(edp,
756 edp->link_train.training_lane[lane],
759 retval = rk32_edp_write_bytes_to_dpcd(edp,
760 DPCD_TRAINING_LANE0_SET,
762 edp->link_train.training_lane);
764 dev_err(edp->dev, "failed to set training lane!\n");
769 goto reduce_link_rate;
775 rk32_edp_reduce_link_rate(edp);
779 static int rk32_edp_get_max_rx_bandwidth(struct rk32_edp *edp,
786 * For DP rev.1.1, Maximum link rate of Main Link lanes
787 * 0x06 = 1.62 Gbps, 0x0a = 2.7 Gbps
789 retval = rk32_edp_read_byte_from_dpcd(edp,
790 DPCD_MAX_LINK_RATE, &data);
798 static int rk32_edp_get_max_rx_lane_count(struct rk32_edp *edp,
805 * For DP rev.1.1, Maximum number of Main Link lanes
806 * 0x01 = 1 lane, 0x02 = 2 lanes, 0x04 = 4 lanes
808 retval = rk32_edp_read_byte_from_dpcd(edp,
809 DPCD_MAX_LANE_CNT, &data);
813 *lane_count = DPCD_MAX_LANE_COUNT(data);
817 static int rk32_edp_init_training(struct rk32_edp *edp,
818 enum link_lane_count_type max_lane,
824 * MACRO_RST must be applied after the PLL_LOCK to avoid
825 * the DP inter pair skew issue for at least 10 us
827 rk32_edp_reset_macro(edp);
830 retval = rk32_edp_get_max_rx_bandwidth(edp, &edp->link_train.link_rate);
834 retval = rk32_edp_get_max_rx_lane_count(edp, &edp->link_train.lane_count);
837 dev_info(edp->dev, "max link rate:%d.%dGps max number of lanes:%d\n",
838 edp->link_train.link_rate * 27/100,
839 edp->link_train.link_rate*27%100,
840 edp->link_train.lane_count);
842 if ((edp->link_train.link_rate != LINK_RATE_1_62GBPS) &&
843 (edp->link_train.link_rate != LINK_RATE_2_70GBPS)) {
844 dev_err(edp->dev, "Rx Max Link Rate is abnormal :%x !\n",
845 edp->link_train.link_rate);
846 edp->link_train.link_rate = LINK_RATE_1_62GBPS;
849 if (edp->link_train.lane_count == 0) {
850 dev_err(edp->dev, "Rx Max Lane count is abnormal :%x !\n",
851 edp->link_train.lane_count);
852 edp->link_train.lane_count = (u8)LANE_CNT1;
856 if (edp->link_train.lane_count > max_lane)
857 edp->link_train.lane_count = max_lane;
858 if (edp->link_train.link_rate > max_rate)
859 edp->link_train.link_rate = max_rate;
862 rk32_edp_analog_power_ctr(edp, 1);
867 static int rk32_edp_sw_link_training(struct rk32_edp *edp)
870 int training_finished = 0;
872 edp->link_train.lt_state = LT_START;
875 while (!training_finished) {
876 switch (edp->link_train.lt_state) {
878 retval = rk32_edp_link_start(edp);
880 dev_err(edp->dev, "LT Start failed\n");
882 case LT_CLK_RECOVERY:
883 retval = rk32_edp_process_clock_recovery(edp);
885 dev_err(edp->dev, "LT CR failed\n");
888 retval = rk32_edp_process_equalizer_training(edp);
890 dev_err(edp->dev, "LT EQ failed\n");
893 training_finished = 1;
904 static int rk32_edp_hw_link_training(struct rk32_edp *edp)
908 /* Set link rate and count as you want to establish*/
909 rk32_edp_set_link_bandwidth(edp, edp->link_train.link_rate);
910 rk32_edp_set_lane_count(edp, edp->link_train.lane_count);
911 rk32_edp_hw_link_training_en(edp);
913 val = rk32_edp_wait_hw_lt_done(edp);
916 dev_err(edp->dev, "hw lt timeout");
920 val = rk32_edp_wait_hw_lt_done(edp);
923 val = rk32_edp_get_hw_lt_status(edp);
925 dev_err(edp->dev, "hw lt err:%d\n", val);
929 static int rk32_edp_set_link_train(struct rk32_edp *edp,
935 retval = rk32_edp_init_training(edp, count, bwtype);
937 dev_err(edp->dev, "DP LT init failed!\n");
939 retval = rk32_edp_sw_link_training(edp);
941 retval = rk32_edp_hw_link_training(edp);
947 static int rk32_edp_config_video(struct rk32_edp *edp,
948 struct video_info *video_info)
951 int timeout_loop = 0;
954 rk32_edp_config_video_slave_mode(edp, video_info);
956 rk32_edp_set_video_color_format(edp, video_info->color_depth,
957 video_info->color_space,
958 video_info->dynamic_range,
959 video_info->ycbcr_coeff);
961 if (rk32_edp_get_pll_lock_status(edp) == DP_PLL_UNLOCKED) {
962 dev_err(edp->dev, "PLL is not locked yet.\n");
968 if (rk32_edp_is_slave_video_stream_clock_on(edp) == 0)
970 if (DP_TIMEOUT_LOOP_CNT < timeout_loop) {
971 dev_err(edp->dev, "Timeout of video streamclk ok\n");
978 /* Set to use the register calculated M/N video */
979 rk32_edp_set_video_cr_mn(edp, CALCULATED_M, 0, 0);
981 /* For video bist, Video timing must be generated by register */
982 rk32_edp_set_video_timing_mode(edp, VIDEO_TIMING_FROM_CAPTURE);
984 /* Disable video mute */
985 rk32_edp_enable_video_mute(edp, 0);
987 /* Configure video slave mode */
988 rk32_edp_enable_video_master(edp, 0);
991 rk32_edp_start_video(edp);
997 if (rk32_edp_is_video_stream_on(edp) == 0) {
1001 } else if (done_count) {
1004 if (DP_TIMEOUT_LOOP_CNT < timeout_loop) {
1005 dev_err(edp->dev, "Timeout of video streamclk ok\n");
1009 usleep_range(1000, 1000);
1013 dev_err(edp->dev, "Video stream is not detected!\n");
1018 static int rk32_edp_enable_scramble(struct rk32_edp *edp, bool enable)
1024 rk32_edp_enable_scrambling(edp);
1026 retval = rk32_edp_read_byte_from_dpcd(edp,
1027 DPCD_TRAINING_PATTERN_SET,
1032 retval = rk32_edp_write_byte_to_dpcd(edp,
1033 DPCD_TRAINING_PATTERN_SET,
1034 (u8)(data & ~DPCD_SCRAMBLING_DISABLED));
1038 rk32_edp_disable_scrambling(edp);
1040 retval = rk32_edp_read_byte_from_dpcd(edp,
1041 DPCD_TRAINING_PATTERN_SET,
1046 retval = rk32_edp_write_byte_to_dpcd(edp,
1047 DPCD_TRAINING_PATTERN_SET,
1048 (u8)(data | DPCD_SCRAMBLING_DISABLED));
1056 static irqreturn_t rk32_edp_isr(int irq, void *arg)
1058 struct rk32_edp *edp = arg;
1060 dev_info(edp->dev, "rk32_edp_isr\n");
1064 static int rk32_edp_enable(struct rk32_edp *edp)
1073 clk_prepare_enable(edp->clk_edp);
1074 clk_prepare_enable(edp->clk_24m);
1078 rk32_edp_init_edp(edp);
1081 ret = rk32_edp_handle_edid(edp);
1083 dev_err(edp->dev, "unable to handle edid\n");
1088 ret = rk32_edp_enable_scramble(edp, 0);
1090 dev_err(edp->dev, "unable to set scramble\n");
1094 ret = rk32_edp_enable_rx_to_enhanced_mode(edp, 0);
1096 dev_err(edp->dev, "unable to set enhanced mode\n");
1099 rk32_edp_enable_enhanced_mode(edp, 0);
1102 ret = rk32_edp_set_link_train(edp, LANE_CNT4, LINK_RATE_2_70GBPS);
1104 dev_err(edp->dev, "link train failed\n");
1108 rk32_edp_set_lane_count(edp, edp->video_info.lane_count);
1109 rk32_edp_set_link_bandwidth(edp, edp->video_info.link_rate);
1111 #ifdef EDP_BIST_MODE
1112 rk32_edp_bist_cfg(edp);
1114 rk32_edp_init_video(edp);
1115 ret = rk32_edp_config_video(edp, &edp->video_info);
1117 dev_err(edp->dev, "unable to config video\n");
1131 dev_err(edp->dev, "DP LT exceeds max retry count");
1136 static void rk32_edp_disable(struct rk32_edp *edp)
1143 rk32_edp_reset(edp);
1144 rk32_edp_analog_power_ctr(edp, 0);
1146 clk_disable(edp->clk_24m);
1147 clk_disable(edp->clk_edp);
1152 static void rk32_edp_init(struct rk32_edp *edp)
1155 rk32_edp_enable(edp);
1157 static int rk32_edp_probe(struct platform_device *pdev)
1159 struct rk32_edp *edp;
1160 struct resource *res;
1161 struct device_node *np = pdev->dev.of_node;
1165 dev_err(&pdev->dev, "Missing device tree node.\n");
1169 edp = devm_kzalloc(&pdev->dev, sizeof(struct rk32_edp), GFP_KERNEL);
1171 dev_err(&pdev->dev, "no memory for state\n");
1174 edp->dev = &pdev->dev;
1175 edp->video_info.h_sync_polarity = 0;
1176 edp->video_info.v_sync_polarity = 0;
1177 edp->video_info.interlaced = 0;
1178 edp->video_info.color_space = CS_RGB;
1179 edp->video_info.dynamic_range = VESA;
1180 edp->video_info.ycbcr_coeff = COLOR_YCBCR601;
1181 edp->video_info.color_depth = COLOR_8;
1183 edp->video_info.link_rate = LINK_RATE_2_70GBPS;
1184 edp->video_info.lane_count = LANE_CNT4;
1185 rk_fb_get_prmry_screen(&edp->screen);
1186 if (edp->screen.type != SCREEN_EDP) {
1187 dev_err(&pdev->dev, "screen is not edp!\n");
1190 platform_set_drvdata(pdev, edp);
1191 dev_set_name(edp->dev, "rk32-edp");
1193 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1194 edp->regs = devm_ioremap_resource(&pdev->dev, res);
1195 if (IS_ERR(edp->regs)) {
1196 dev_err(&pdev->dev, "ioremap reg failed\n");
1197 return PTR_ERR(edp->regs);
1201 edp->irq = platform_get_irq(pdev, 0);
1203 dev_err(&pdev->dev, "cannot find IRQ\n");
1206 ret = devm_request_irq(&pdev->dev, edp->irq, rk32_edp_isr, 0,
1207 dev_name(&pdev->dev), edp);
1209 dev_err(&pdev->dev, "cannot claim IRQ %d\n", edp->irq);
1214 dev_info(&pdev->dev, "rk32 edp driver probe success\n");
1219 static void rk32_edp_shutdown(struct platform_device *pdev)
1224 #if defined(CONFIG_OF)
1225 static const struct of_device_id rk32_edp_dt_ids[] = {
1226 {.compatible = "rockchip, rk32-edp",},
1230 MODULE_DEVICE_TABLE(of, rk32_edp_dt_ids);
1233 static struct platform_driver rk32_edp_driver = {
1234 .probe = rk32_edp_probe,
1237 .owner = THIS_MODULE,
1238 #if defined(CONFIG_OF)
1239 .of_match_table = of_match_ptr(rk32_edp_dt_ids),
1242 .shutdown = rk32_edp_shutdown,
1245 static int __init rk32_edp_module_init(void)
1247 return platform_driver_register(&rk32_edp_driver);
1250 static void __exit rk32_edp_module_exit(void)
1255 fs_initcall(rk32_edp_module_init);
1256 module_exit(rk32_edp_module_exit);