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 lcdc_probed = 0;
38 static int rk32_edp_clk_enable(struct rk32_edp *edp)
41 clk_enable(edp->pclk);
42 clk_enable(edp->clk_edp);
43 clk_enable(edp->clk_24m);
50 static int rk32_edp_clk_disable(struct rk32_edp *edp)
53 clk_disable(edp->pclk);
54 clk_disable(edp->clk_edp);
55 clk_disable(edp->clk_24m);
62 static int rk32_edp_pre_init(void)
65 val = GRF_EDP_REF_CLK_SEL_INTER |
66 (GRF_EDP_REF_CLK_SEL_INTER << 16);
67 writel_relaxed(val, RK_GRF_VIRT + RK3288_GRF_SOC_CON12);
70 writel_relaxed(val, RK_CRU_VIRT + 0x0d0); /*select 24m*/
73 writel_relaxed(val, RK_CRU_VIRT + 0x01d0); /*reset edp*/
76 writel_relaxed(val, RK_CRU_VIRT + 0x01d0);
81 static int rk32_edp_init_edp(struct rk32_edp *edp)
83 struct rk_screen *screen = &edp->screen;
87 if (screen->lcdc_id == 1) /*select lcdc*/
88 val = EDP_SEL_VOP_LIT | (EDP_SEL_VOP_LIT << 16);
90 val = EDP_SEL_VOP_LIT << 16;
91 writel_relaxed(val, RK_GRF_VIRT + RK3288_GRF_SOC_CON6);
95 rk32_edp_init_refclk(edp);
96 rk32_edp_init_interrupt(edp);
98 rk32_edp_enable_sw_function(edp);
100 rk32_edp_init_analog_func(edp);
102 rk32_edp_init_hpd(edp);
103 rk32_edp_init_aux(edp);
108 static int rk32_edp_detect_hpd(struct rk32_edp *edp)
110 int timeout_loop = 0;
112 rk32_edp_init_hpd(edp);
116 while (rk32_edp_get_plug_in_status(edp) != 0) {
118 if (DP_TIMEOUT_LOOP_CNT < timeout_loop) {
119 dev_err(edp->dev, "failed to get hpd plug status\n");
128 static int rk32_edp_read_edid(struct rk32_edp *edp)
130 unsigned char edid[EDID_LENGTH * 2];
131 unsigned int extend_block = 0;
133 unsigned char test_vector;
137 * EDID device address is 0x50.
138 * However, if necessary, you must have set upper address
139 * into E-EDID in I2C device, 0x30.
142 /* Read Extension Flag, Number of 128-byte EDID extension blocks */
143 retval = rk32_edp_read_byte_from_i2c(edp, EDID_ADDR, EDID_EXTENSION_FLAG,
146 dev_err(edp->dev, "EDID extension flag failed!\n");
150 if (extend_block > 0) {
151 dev_dbg(edp->dev, "EDID data includes a single extension!\n");
154 retval = rk32_edp_read_bytes_from_i2c(edp, EDID_ADDR, EDID_HEADER,
155 EDID_LENGTH, &edid[EDID_HEADER]);
157 dev_err(edp->dev, "EDID Read failed!\n");
160 sum = edp_calc_edid_check_sum(edid);
162 dev_warn(edp->dev, "EDID bad checksum!\n");
166 /* Read additional EDID data */
167 retval = rk32_edp_read_bytes_from_i2c(edp, EDID_ADDR, EDID_LENGTH,
168 EDID_LENGTH, &edid[EDID_LENGTH]);
170 dev_err(edp->dev, "EDID Read failed!\n");
173 sum = edp_calc_edid_check_sum(&edid[EDID_LENGTH]);
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_LENGTH + 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");
203 dev_info(edp->dev, "EDID data does not include any extensions.\n");
206 retval = rk32_edp_read_bytes_from_i2c(edp, EDID_ADDR, EDID_HEADER,
207 EDID_LENGTH, &edid[EDID_HEADER]);
209 dev_err(edp->dev, "EDID Read failed!\n");
212 sum = edp_calc_edid_check_sum(edid);
214 dev_warn(edp->dev, "EDID bad checksum!\n");
218 retval = rk32_edp_read_byte_from_dpcd(edp,DPCD_TEST_REQUEST,
221 dev_err(edp->dev, "DPCD EDID Read failed!\n");
225 if (test_vector & DPCD_TEST_EDID_READ) {
226 retval = rk32_edp_write_byte_to_dpcd(edp,
227 DPCD_TEST_EDID_CHECKSUM,
228 edid[EDID_CHECKSUM]);
230 dev_err(edp->dev, "DPCD EDID Write failed!\n");
233 retval = rk32_edp_write_byte_to_dpcd(edp,
235 DPCD_TEST_EDID_CHECKSUM_WRITE);
237 dev_err(edp->dev, "DPCD EDID checksum failed!\n");
242 fb_edid_to_monspecs(edid, &edp->specs);
243 dev_err(edp->dev, "EDID Read success!\n");
247 static int rk32_edp_handle_edid(struct rk32_edp *edp)
253 /* Read DPCD DPCD_ADDR_DPCD_REV~RECEIVE_PORT1_CAP_1 */
254 retval = rk32_edp_read_bytes_from_dpcd(edp, DPCD_REV, 12, buf);
258 for (i=0 ;i < 12; i++)
259 dev_info(edp->dev, "%d:>>0x%02x\n", i, buf[i]);
261 for (i = 0; i < 3; i++) {
262 retval = rk32_edp_read_edid(edp);
270 static int rk32_edp_enable_rx_to_enhanced_mode(struct rk32_edp *edp,
276 retval = rk32_edp_read_byte_from_dpcd(edp,
277 DPCD_LANE_CNT_SET, &data);
282 retval = rk32_edp_write_byte_to_dpcd(edp,
284 DPCD_ENHANCED_FRAME_EN |
285 DPCD_LANE_COUNT_SET(data));
287 /*retval = rk32_edp_write_byte_to_dpcd(edp,
288 DPCD_ADDR_CONFIGURATION_SET, 0);*/
290 retval = rk32_edp_write_byte_to_dpcd(edp,
292 DPCD_LANE_COUNT_SET(data));
298 void rk32_edp_rx_control(struct rk32_edp *edp, bool enable)
300 /*rk32_edp_write_byte_to_dpcd(edp, DPCD_ADDR_USER_DEFINED1,0);
301 rk32_edp_write_byte_to_dpcd(edp, DPCD_ADDR_USER_DEFINED2,0x90);
304 rk32_edp_write_byte_to_dpcd(edp, DPCD_ADDR_USER_DEFINED3,0x84);
305 rk32_edp_write_byte_to_dpcd(edp, DPCD_ADDR_USER_DEFINED3,0x00);
307 rk32_edp_write_byte_to_dpcd(edp, DPCD_ADDR_USER_DEFINED3,0x80);
311 static int rk32_edp_is_enhanced_mode_available(struct rk32_edp *edp)
316 retval = rk32_edp_read_byte_from_dpcd(edp,
317 DPCD_MAX_LANE_CNT, &data);
321 return DPCD_ENHANCED_FRAME_CAP(data);
324 static void rk32_edp_disable_rx_zmux(struct rk32_edp *edp)
326 /*rk32_edp_write_byte_to_dpcd(edp,
327 DPCD_ADDR_USER_DEFINED1, 0);
328 rk32_edp_write_byte_to_dpcd(edp,
329 DPCD_ADDR_USER_DEFINED2, 0x83);
330 rk32_edp_write_byte_to_dpcd(edp,
331 DPCD_ADDR_USER_DEFINED3, 0x27);*/
334 static int rk32_edp_set_enhanced_mode(struct rk32_edp *edp)
339 retval = rk32_edp_is_enhanced_mode_available(edp);
344 retval = rk32_edp_enable_rx_to_enhanced_mode(edp, data);
348 rk32_edp_enable_enhanced_mode(edp, data);
353 static int rk32_edp_training_pattern_dis(struct rk32_edp *edp)
357 rk32_edp_set_training_pattern(edp, DP_NONE);
359 retval = rk32_edp_write_byte_to_dpcd(edp,
360 DPCD_TRAINING_PATTERN_SET,
361 DPCD_TRAINING_PATTERN_DISABLED);
368 static void rk32_edp_set_lane_lane_pre_emphasis(struct rk32_edp *edp,
369 int pre_emphasis, int lane)
373 rk32_edp_set_lane0_pre_emphasis(edp, pre_emphasis);
376 rk32_edp_set_lane1_pre_emphasis(edp, pre_emphasis);
380 rk32_edp_set_lane2_pre_emphasis(edp, pre_emphasis);
384 rk32_edp_set_lane3_pre_emphasis(edp, pre_emphasis);
389 static int rk32_edp_link_start(struct rk32_edp *edp)
396 lane_count = edp->link_train.lane_count;
398 edp->link_train.lt_state = LT_CLK_RECOVERY;
399 edp->link_train.eq_loop = 0;
401 for (lane = 0; lane < lane_count; lane++)
402 edp->link_train.cr_loop[lane] = 0;
404 /* Set sink to D0 (Sink Not Ready) mode. */
405 retval = rk32_edp_write_byte_to_dpcd(edp, DPCD_SINK_POWER_STATE,
406 DPCD_SET_POWER_STATE_D0);
408 dev_err(edp->dev, "failed to set sink device to D0!\n");
412 /* Set link rate and count as you want to establish*/
413 rk32_edp_set_link_bandwidth(edp, edp->link_train.link_rate);
414 rk32_edp_set_lane_count(edp, edp->link_train.lane_count);
416 /* Setup RX configuration */
417 buf[0] = edp->link_train.link_rate;
418 buf[1] = edp->link_train.lane_count;
419 retval = rk32_edp_write_bytes_to_dpcd(edp, DPCD_LINK_BW_SET,
422 dev_err(edp->dev, "failed to set bandwidth and lane count!\n");
426 /* Set TX pre-emphasis to level1 */
427 for (lane = 0; lane < lane_count; lane++)
428 rk32_edp_set_lane_lane_pre_emphasis(edp,
429 PRE_EMPHASIS_LEVEL_1, lane);
431 /* Set training pattern 1 */
432 rk32_edp_set_training_pattern(edp, TRAINING_PTN1);
434 /* Set RX training pattern */
435 retval = rk32_edp_write_byte_to_dpcd(edp,
436 DPCD_TRAINING_PATTERN_SET,
437 DPCD_SCRAMBLING_DISABLED |
438 DPCD_TRAINING_PATTERN_1);
440 dev_err(edp->dev, "failed to set training pattern 1!\n");
444 for (lane = 0; lane < lane_count; lane++)
445 buf[lane] = DPCD_PRE_EMPHASIS_PATTERN2_LEVEL0 |
446 DPCD_VOLTAGE_SWING_PATTERN1_LEVEL0;
447 retval = rk32_edp_write_bytes_to_dpcd(edp,
448 DPCD_TRAINING_LANE0_SET,
451 dev_err(edp->dev, "failed to set training lane!\n");
458 static unsigned char rk32_edp_get_lane_status(u8 link_status[2], int lane)
460 int shift = (lane & 1) * 4;
461 u8 link_value = link_status[lane>>1];
463 return (link_value >> shift) & 0xf;
466 static int rk32_edp_clock_recovery_ok(u8 link_status[2], int lane_count)
471 for (lane = 0; lane < lane_count; lane++) {
472 lane_status = rk32_edp_get_lane_status(link_status, lane);
473 if ((lane_status & DPCD_LANE_CR_DONE) == 0)
479 static int rk32_edp_channel_eq_ok(u8 link_align[3], int lane_count)
485 lane_align = link_align[2];
486 if ((lane_align & DPCD_INTERLANE_ALIGN_DONE) == 0)
489 for (lane = 0; lane < lane_count; lane++) {
490 lane_status = rk32_edp_get_lane_status(link_align, lane);
491 lane_status &= DPCD_CHANNEL_EQ_BITS;
492 if (lane_status != DPCD_CHANNEL_EQ_BITS)
499 static unsigned char rk32_edp_get_adjust_request_voltage(u8 adjust_request[2],
502 int shift = (lane & 1) * 4;
503 u8 link_value = adjust_request[lane>>1];
505 return (link_value >> shift) & 0x3;
508 static unsigned char rk32_edp_get_adjust_request_pre_emphasis(
509 u8 adjust_request[2],
512 int shift = (lane & 1) * 4;
513 u8 link_value = adjust_request[lane>>1];
515 return ((link_value >> shift) & 0xc) >> 2;
518 static void rk32_edp_set_lane_link_training(struct rk32_edp *edp,
519 u8 training_lane_set, int lane)
523 rk32_edp_set_lane0_link_training(edp, training_lane_set);
526 rk32_edp_set_lane1_link_training(edp, training_lane_set);
530 rk32_edp_set_lane2_link_training(edp, training_lane_set);
534 rk32_edp_set_lane3_link_training(edp, training_lane_set);
539 static unsigned int rk32_edp_get_lane_link_training(
540 struct rk32_edp *edp,
547 reg = rk32_edp_get_lane0_link_training(edp);
550 reg = rk32_edp_get_lane1_link_training(edp);
553 reg = rk32_edp_get_lane2_link_training(edp);
556 reg = rk32_edp_get_lane3_link_training(edp);
563 static void rk32_edp_reduce_link_rate(struct rk32_edp *edp)
565 rk32_edp_training_pattern_dis(edp);
567 edp->link_train.lt_state = FAILED;
570 static int rk32_edp_process_clock_recovery(struct rk32_edp *edp)
576 u8 adjust_request[2];
584 lane_count = edp->link_train.lane_count;
586 retval = rk32_edp_read_bytes_from_dpcd(edp,
590 dev_err(edp->dev, "failed to read lane status!\n");
594 if (rk32_edp_clock_recovery_ok(link_status, lane_count) == 0) {
595 /* set training pattern 2 for EQ */
596 rk32_edp_set_training_pattern(edp, TRAINING_PTN2);
598 for (lane = 0; lane < lane_count; lane++) {
599 retval = rk32_edp_read_bytes_from_dpcd(edp,
600 DPCD_ADJUST_REQUEST_LANE0_1,
603 dev_err(edp->dev, "failed to read adjust request!\n");
607 voltage_swing = rk32_edp_get_adjust_request_voltage(
608 adjust_request, lane);
609 pre_emphasis = rk32_edp_get_adjust_request_pre_emphasis(
610 adjust_request, lane);
611 training_lane = DPCD_VOLTAGE_SWING_SET(voltage_swing) |
612 DPCD_PRE_EMPHASIS_SET(pre_emphasis);
614 if (voltage_swing == VOLTAGE_LEVEL_3)
615 training_lane |= DPCD_MAX_SWING_REACHED;
616 if (pre_emphasis == PRE_EMPHASIS_LEVEL_3)
617 training_lane |= DPCD_MAX_PRE_EMPHASIS_REACHED;
619 edp->link_train.training_lane[lane] = training_lane;
621 rk32_edp_set_lane_link_training(edp,
622 edp->link_train.training_lane[lane],
626 retval = rk32_edp_write_byte_to_dpcd(edp,
627 DPCD_TRAINING_PATTERN_SET,
628 DPCD_SCRAMBLING_DISABLED |
629 DPCD_TRAINING_PATTERN_2);
631 dev_err(edp->dev, "failed to set training pattern 2!\n");
635 retval = rk32_edp_write_bytes_to_dpcd(edp,
636 DPCD_TRAINING_LANE0_SET,
638 edp->link_train.training_lane);
640 dev_err(edp->dev, "failed to set training lane!\n");
644 dev_info(edp->dev, "Link Training Clock Recovery success\n");
645 edp->link_train.lt_state = LT_EQ_TRAINING;
647 for (lane = 0; lane < lane_count; lane++) {
648 training_lane = rk32_edp_get_lane_link_training(
650 retval = rk32_edp_read_bytes_from_dpcd(edp,
651 DPCD_ADJUST_REQUEST_LANE0_1,
654 dev_err(edp->dev, "failed to read adjust request!\n");
658 voltage_swing = rk32_edp_get_adjust_request_voltage(
659 adjust_request, lane);
660 pre_emphasis = rk32_edp_get_adjust_request_pre_emphasis(
661 adjust_request, lane);
663 if (voltage_swing == VOLTAGE_LEVEL_3 ||
664 pre_emphasis == PRE_EMPHASIS_LEVEL_3) {
665 dev_err(edp->dev, "voltage or pre emphasis reached max level\n");
666 goto reduce_link_rate;
669 if ((DPCD_VOLTAGE_SWING_GET(training_lane) ==
671 (DPCD_PRE_EMPHASIS_GET(training_lane) ==
673 edp->link_train.cr_loop[lane]++;
674 if (edp->link_train.cr_loop[lane] == MAX_CR_LOOP) {
675 dev_err(edp->dev, "CR Max loop\n");
676 goto reduce_link_rate;
680 training_lane = DPCD_VOLTAGE_SWING_SET(voltage_swing) |
681 DPCD_PRE_EMPHASIS_SET(pre_emphasis);
683 if (voltage_swing == VOLTAGE_LEVEL_3)
684 training_lane |= DPCD_MAX_SWING_REACHED;
685 if (pre_emphasis == PRE_EMPHASIS_LEVEL_3)
686 training_lane |= DPCD_MAX_PRE_EMPHASIS_REACHED;
688 edp->link_train.training_lane[lane] = training_lane;
690 rk32_edp_set_lane_link_training(edp,
691 edp->link_train.training_lane[lane], lane);
694 retval = rk32_edp_write_bytes_to_dpcd(edp,
695 DPCD_TRAINING_LANE0_SET,
697 edp->link_train.training_lane);
699 dev_err(edp->dev, "failed to set training lane!\n");
707 rk32_edp_reduce_link_rate(edp);
711 static int rk32_edp_process_equalizer_training(struct rk32_edp *edp)
719 u8 adjust_request[2];
727 lane_count = edp->link_train.lane_count;
729 retval = rk32_edp_read_bytes_from_dpcd(edp,
733 dev_err(edp->dev, "failed to read lane status!\n");
737 if (rk32_edp_clock_recovery_ok(link_status, lane_count) == 0) {
738 link_align[0] = link_status[0];
739 link_align[1] = link_status[1];
741 retval = rk32_edp_read_byte_from_dpcd(edp,
742 DPCD_LANE_ALIGN_STATUS_UPDATED,
745 dev_err(edp->dev, "failed to read lane aligne status!\n");
749 for (lane = 0; lane < lane_count; lane++) {
750 retval = rk32_edp_read_bytes_from_dpcd(edp,
751 DPCD_ADJUST_REQUEST_LANE0_1,
754 dev_err(edp->dev, "failed to read adjust request!\n");
758 voltage_swing = rk32_edp_get_adjust_request_voltage(
759 adjust_request, lane);
760 pre_emphasis = rk32_edp_get_adjust_request_pre_emphasis(
761 adjust_request, lane);
762 training_lane = DPCD_VOLTAGE_SWING_SET(voltage_swing) |
763 DPCD_PRE_EMPHASIS_SET(pre_emphasis);
765 if (voltage_swing == VOLTAGE_LEVEL_3)
766 training_lane |= DPCD_MAX_SWING_REACHED;
767 if (pre_emphasis == PRE_EMPHASIS_LEVEL_3)
768 training_lane |= DPCD_MAX_PRE_EMPHASIS_REACHED;
770 edp->link_train.training_lane[lane] = training_lane;
773 if (rk32_edp_channel_eq_ok(link_align, lane_count) == 0) {
774 /* traing pattern Set to Normal */
775 retval = rk32_edp_training_pattern_dis(edp);
777 dev_err(edp->dev, "failed to disable training pattern!\n");
781 dev_info(edp->dev, "Link Training success!\n");
783 rk32_edp_get_link_bandwidth(edp, ®);
784 edp->link_train.link_rate = reg;
785 dev_dbg(edp->dev, "final bandwidth = %.2x\n",
786 edp->link_train.link_rate);
788 rk32_edp_get_lane_count(edp, ®);
789 edp->link_train.lane_count = reg;
790 dev_dbg(edp->dev, "final lane count = %.2x\n",
791 edp->link_train.lane_count);
793 edp->link_train.lt_state = FINISHED;
796 edp->link_train.eq_loop++;
798 if (edp->link_train.eq_loop > MAX_EQ_LOOP) {
799 dev_err(edp->dev, "EQ Max loop\n");
800 goto reduce_link_rate;
803 for (lane = 0; lane < lane_count; lane++)
804 rk32_edp_set_lane_link_training(edp,
805 edp->link_train.training_lane[lane],
808 retval = rk32_edp_write_bytes_to_dpcd(edp,
809 DPCD_TRAINING_LANE0_SET,
811 edp->link_train.training_lane);
813 dev_err(edp->dev, "failed to set training lane!\n");
818 goto reduce_link_rate;
824 rk32_edp_reduce_link_rate(edp);
828 static int rk32_edp_get_max_rx_bandwidth(struct rk32_edp *edp,
835 * For DP rev.1.1, Maximum link rate of Main Link lanes
836 * 0x06 = 1.62 Gbps, 0x0a = 2.7 Gbps
838 retval = rk32_edp_read_byte_from_dpcd(edp,
839 DPCD_MAX_LINK_RATE, &data);
847 static int rk32_edp_get_max_rx_lane_count(struct rk32_edp *edp,
854 * For DP rev.1.1, Maximum number of Main Link lanes
855 * 0x01 = 1 lane, 0x02 = 2 lanes, 0x04 = 4 lanes
857 retval = rk32_edp_read_byte_from_dpcd(edp,
858 DPCD_MAX_LANE_CNT, &data);
862 *lane_count = DPCD_MAX_LANE_COUNT(data);
866 static int rk32_edp_init_training(struct rk32_edp *edp)
871 * MACRO_RST must be applied after the PLL_LOCK to avoid
872 * the DP inter pair skew issue for at least 10 us
874 rk32_edp_reset_macro(edp);
877 retval = rk32_edp_get_max_rx_bandwidth(edp, &edp->link_train.link_rate);
878 retval = rk32_edp_get_max_rx_lane_count(edp, &edp->link_train.lane_count);
879 dev_info(edp->dev, "max link rate:%d.%dGps max number of lanes:%d\n",
880 edp->link_train.link_rate * 27/100,
881 edp->link_train.link_rate*27%100,
882 edp->link_train.lane_count);
884 if ((edp->link_train.link_rate != LINK_RATE_1_62GBPS) &&
885 (edp->link_train.link_rate != LINK_RATE_2_70GBPS)) {
886 dev_warn(edp->dev, "Rx Max Link Rate is abnormal :%x !"
887 "use default link rate:%d.%dGps\n",
888 edp->link_train.link_rate,
889 edp->video_info.link_rate*27/100,
890 edp->video_info.link_rate*27%100);
891 edp->link_train.link_rate = edp->video_info.link_rate;
894 if (edp->link_train.lane_count == 0) {
895 dev_err(edp->dev, "Rx Max Lane count is abnormal :%x !"
896 "use default lanes:%d\n",
897 edp->link_train.lane_count,
898 edp->video_info.lane_count);
899 edp->link_train.lane_count = edp->video_info.lane_count;
902 rk32_edp_analog_power_ctr(edp, 1);
908 static int rk32_edp_sw_link_training(struct rk32_edp *edp)
911 int training_finished = 0;
913 edp->link_train.lt_state = LT_START;
916 while (!training_finished) {
917 switch (edp->link_train.lt_state) {
919 retval = rk32_edp_link_start(edp);
921 dev_err(edp->dev, "LT Start failed\n");
923 case LT_CLK_RECOVERY:
924 retval = rk32_edp_process_clock_recovery(edp);
926 dev_err(edp->dev, "LT CR failed\n");
929 retval = rk32_edp_process_equalizer_training(edp);
931 dev_err(edp->dev, "LT EQ failed\n");
934 training_finished = 1;
945 static int rk32_edp_hw_link_training(struct rk32_edp *edp)
949 /* Set link rate and count as you want to establish*/
950 rk32_edp_set_link_bandwidth(edp, edp->link_train.link_rate);
951 rk32_edp_set_lane_count(edp, edp->link_train.lane_count);
952 rk32_edp_hw_link_training_en(edp);
953 val = rk32_edp_wait_hw_lt_done(edp);
956 dev_err(edp->dev, "hw lt timeout");
960 val = rk32_edp_wait_hw_lt_done(edp);
963 val = rk32_edp_get_hw_lt_status(edp);
965 dev_err(edp->dev, "hw lt err:%d\n", val);
969 static int rk32_edp_set_link_train(struct rk32_edp *edp)
973 retval = rk32_edp_init_training(edp);
975 dev_err(edp->dev, "DP LT init failed!\n");
977 retval = rk32_edp_sw_link_training(edp);
979 retval = rk32_edp_hw_link_training(edp);
985 static int rk32_edp_config_video(struct rk32_edp *edp,
986 struct video_info *video_info)
989 int timeout_loop = 0;
992 rk32_edp_config_video_slave_mode(edp, video_info);
994 rk32_edp_set_video_color_format(edp, video_info->color_depth,
995 video_info->color_space,
996 video_info->dynamic_range,
997 video_info->ycbcr_coeff);
999 if (rk32_edp_get_pll_lock_status(edp) == DP_PLL_UNLOCKED) {
1000 dev_err(edp->dev, "PLL is not locked yet.\n");
1006 if (rk32_edp_is_slave_video_stream_clock_on(edp) == 0)
1008 if (DP_TIMEOUT_LOOP_CNT < timeout_loop) {
1009 dev_err(edp->dev, "Timeout of video streamclk ok\n");
1016 /* Set to use the register calculated M/N video */
1017 rk32_edp_set_video_cr_mn(edp, CALCULATED_M, 0, 0);
1019 /* For video bist, Video timing must be generated by register */
1020 rk32_edp_set_video_timing_mode(edp, VIDEO_TIMING_FROM_CAPTURE);
1022 /* Disable video mute */
1023 rk32_edp_enable_video_mute(edp, 0);
1025 /* Configure video slave mode */
1026 rk32_edp_enable_video_master(edp, 0);
1029 rk32_edp_start_video(edp);
1035 if (rk32_edp_is_video_stream_on(edp) == 0) {
1037 if (done_count > 10)
1039 } else if (done_count) {
1042 if (DP_TIMEOUT_LOOP_CNT < timeout_loop) {
1043 dev_err(edp->dev, "Timeout of video streamclk ok\n");
1047 usleep_range(1000, 1000);
1051 dev_err(edp->dev, "Video stream is not detected!\n");
1056 static int rk32_edp_enable_scramble(struct rk32_edp *edp, bool enable)
1062 rk32_edp_enable_scrambling(edp);
1064 retval = rk32_edp_read_byte_from_dpcd(edp,
1065 DPCD_TRAINING_PATTERN_SET,
1070 retval = rk32_edp_write_byte_to_dpcd(edp,
1071 DPCD_TRAINING_PATTERN_SET,
1072 (u8)(data & ~DPCD_SCRAMBLING_DISABLED));
1076 rk32_edp_disable_scrambling(edp);
1078 retval = rk32_edp_read_byte_from_dpcd(edp,
1079 DPCD_TRAINING_PATTERN_SET,
1084 retval = rk32_edp_write_byte_to_dpcd(edp,
1085 DPCD_TRAINING_PATTERN_SET,
1086 (u8)(data | DPCD_SCRAMBLING_DISABLED));
1094 static irqreturn_t rk32_edp_isr(int irq, void *arg)
1096 struct rk32_edp *edp = arg;
1097 enum dp_irq_type irq_type;
1100 disable_irq_nosync(edp->irq);
1104 irq_type = rk32_edp_get_irq_type(edp);
1106 case DP_IRQ_TYPE_HP_CABLE_IN:
1107 dev_info(edp->dev, "Received irq - cable in\n");
1108 rk32_edp_clear_hotplug_interrupts(edp);
1110 case DP_IRQ_TYPE_HP_CABLE_OUT:
1111 dev_info(edp->dev, "Received irq - cable out\n");
1112 rk32_edp_clear_hotplug_interrupts(edp);
1114 case DP_IRQ_TYPE_HP_CHANGE:
1116 * We get these change notifications once in a while, but there
1117 * is nothing we can do with them. Just ignore it for now and
1118 * only handle cable changes.
1120 dev_info(edp->dev, "Received irq - hotplug change; ignoring.\n");
1121 rk32_edp_clear_hotplug_interrupts(edp);
1124 dev_err(edp->dev, "Received irq - unknown type!\n");
1130 static int rk32_edp_enable(void)
1133 struct rk32_edp *edp = rk32_edp;
1136 rk32_edp_clk_enable(edp);
1137 rk32_edp_pre_init();
1139 rk32_edp_init_edp(edp);
1140 enable_irq(edp->irq);
1141 /*ret = rk32_edp_handle_edid(edp);
1143 dev_err(edp->dev, "unable to handle edid\n");
1148 ret = rk32_edp_enable_scramble(edp, 0);
1150 dev_err(edp->dev, "unable to set scramble\n");
1154 ret = rk32_edp_enable_rx_to_enhanced_mode(edp, 0);
1156 dev_err(edp->dev, "unable to set enhanced mode\n");
1159 rk32_edp_enable_enhanced_mode(edp, 1);*/
1161 ret = rk32_edp_set_link_train(edp);
1163 dev_err(edp->dev, "link train failed!\n");
1165 dev_info(edp->dev, "link training success.\n");
1167 rk32_edp_set_lane_count(edp, edp->link_train.lane_count);
1168 rk32_edp_set_link_bandwidth(edp, edp->link_train.link_rate);
1170 #ifdef EDP_BIST_MODE
1171 rk32_edp_bist_cfg(edp);
1173 rk32_edp_init_video(edp);
1174 ret = rk32_edp_config_video(edp, &edp->video_info);
1176 dev_err(edp->dev, "unable to config video\n");
1184 static int rk32_edp_disable(void )
1186 struct rk32_edp *edp = rk32_edp;
1188 disable_irq(edp->irq);
1189 rk32_edp_reset(edp);
1190 rk32_edp_analog_power_ctr(edp, 0);
1191 rk32_edp_clk_disable(edp);
1197 static struct rk_fb_trsm_ops trsm_edp_ops = {
1198 .enable = rk32_edp_enable,
1199 .disable = rk32_edp_disable,
1201 static int rk32_edp_probe(struct platform_device *pdev)
1203 struct rk32_edp *edp;
1204 struct resource *res;
1205 struct device_node *np = pdev->dev.of_node;
1209 dev_err(&pdev->dev, "Missing device tree node.\n");
1213 edp = devm_kzalloc(&pdev->dev, sizeof(struct rk32_edp), GFP_KERNEL);
1215 dev_err(&pdev->dev, "no memory for state\n");
1218 edp->dev = &pdev->dev;
1219 edp->video_info.h_sync_polarity = 0;
1220 edp->video_info.v_sync_polarity = 0;
1221 edp->video_info.interlaced = 0;
1222 edp->video_info.color_space = CS_RGB;
1223 edp->video_info.dynamic_range = VESA;
1224 edp->video_info.ycbcr_coeff = COLOR_YCBCR601;
1225 edp->video_info.color_depth = COLOR_6;
1227 edp->video_info.link_rate = LINK_RATE_1_62GBPS;
1228 edp->video_info.lane_count = LANE_CNT4;
1229 rk_fb_get_prmry_screen(&edp->screen);
1230 if (edp->screen.type != SCREEN_EDP) {
1231 dev_err(&pdev->dev, "screen is not edp!\n");
1234 platform_set_drvdata(pdev, edp);
1235 dev_set_name(edp->dev, "rk32-edp");
1237 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1238 edp->regs = devm_ioremap_resource(&pdev->dev, res);
1239 if (IS_ERR(edp->regs)) {
1240 dev_err(&pdev->dev, "ioremap reg failed\n");
1241 return PTR_ERR(edp->regs);
1244 edp->clk_edp = devm_clk_get(&pdev->dev,"clk_edp");
1245 if (IS_ERR(edp->clk_edp)) {
1246 dev_err(&pdev->dev, "cannot get clk_edp\n");
1247 return PTR_ERR(edp->clk_edp);
1250 edp->clk_24m = devm_clk_get(&pdev->dev,"clk_edp_24m");
1251 if (IS_ERR(edp->clk_24m)) {
1252 dev_err(&pdev->dev, "cannot get clk_edp_24m\n");
1253 return PTR_ERR(edp->clk_24m);
1256 edp->pclk = devm_clk_get(&pdev->dev,"pclk_edp");
1257 if (IS_ERR(edp->pclk)) {
1258 dev_err(&pdev->dev, "cannot get pclk\n");
1259 return PTR_ERR(edp->pclk);
1262 clk_prepare(edp->pclk);
1263 clk_prepare(edp->clk_edp);
1264 clk_prepare(edp->clk_24m);
1265 edp->irq = platform_get_irq(pdev, 0);
1267 dev_err(&pdev->dev, "cannot find IRQ\n");
1270 ret = devm_request_irq(&pdev->dev, edp->irq, rk32_edp_isr, 0,
1271 dev_name(&pdev->dev), edp);
1273 dev_err(&pdev->dev, "cannot claim IRQ %d\n", edp->irq);
1276 disable_irq_nosync(edp->irq);
1278 rk_fb_trsm_ops_register(&trsm_edp_ops, SCREEN_EDP);
1279 dev_info(&pdev->dev, "rk32 edp driver probe success\n");
1284 static void rk32_edp_shutdown(struct platform_device *pdev)
1289 #if defined(CONFIG_OF)
1290 static const struct of_device_id rk32_edp_dt_ids[] = {
1291 {.compatible = "rockchip,rk32-edp",},
1295 MODULE_DEVICE_TABLE(of, rk32_edp_dt_ids);
1298 static struct platform_driver rk32_edp_driver = {
1299 .probe = rk32_edp_probe,
1302 .owner = THIS_MODULE,
1303 #if defined(CONFIG_OF)
1304 .of_match_table = of_match_ptr(rk32_edp_dt_ids),
1307 .shutdown = rk32_edp_shutdown,
1310 static int __init rk32_edp_module_init(void)
1312 return platform_driver_register(&rk32_edp_driver);
1315 static void __exit rk32_edp_module_exit(void)
1320 subsys_initcall_sync(rk32_edp_module_init);
1321 module_exit(rk32_edp_module_exit);