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/clk.h>
16 #include <linux/delay.h>
17 #include <linux/errno.h>
18 #include <linux/init.h>
19 #include <linux/interrupt.h>
20 #include <linux/kernel.h>
21 #include <linux/module.h>
22 #include <linux/platform_device.h>
23 #include <linux/rockchip/cpu.h>
24 #include <linux/rockchip/iomap.h>
25 #include <linux/rockchip/grf.h>
26 #include <linux/string.h>
27 #include <linux/slab.h>
28 #include <linux/uaccess.h>
30 #if defined(CONFIG_OF)
34 #if defined(CONFIG_DEBUG_FS)
36 #include <linux/debugfs.h>
37 #include <linux/seq_file.h>
42 /*#define EDP_BIST_MODE*/
45 #define RK3368_GRF_SOC_CON4 0x410
47 static struct rk32_edp *rk32_edp;
49 static int rk32_edp_clk_enable(struct rk32_edp *edp)
55 clk_prepare_enable(edp->pd);
56 clk_prepare_enable(edp->pclk);
57 clk_prepare_enable(edp->clk_edp);
58 ret = clk_set_rate(edp->clk_24m, 24000000);
60 dev_err(edp->dev, "cannot set edp clk_24m %d\n", ret);
61 clk_prepare_enable(edp->clk_24m);
68 static int rk32_edp_clk_disable(struct rk32_edp *edp)
71 clk_disable_unprepare(edp->pclk);
72 clk_disable_unprepare(edp->clk_edp);
73 clk_disable_unprepare(edp->clk_24m);
75 clk_disable_unprepare(edp->pd);
82 static int rk32_edp_pre_init(struct rk32_edp *edp)
86 if (cpu_is_rk3288()) {
87 val = GRF_EDP_REF_CLK_SEL_INTER |
88 (GRF_EDP_REF_CLK_SEL_INTER << 16);
89 writel_relaxed(val, RK_GRF_VIRT + RK3288_GRF_SOC_CON12);
92 writel_relaxed(val, RK_CRU_VIRT + 0x01d0); /*reset edp*/
96 writel_relaxed(val, RK_CRU_VIRT + 0x01d0);
100 /* The rk3368 reset the edp 24M clock and apb bus
101 * according to the CRU_SOFTRST6_CON and CRU_SOFTRST7_CON.
103 val = 0x01 | (0x01 << 16);
104 regmap_write(edp->grf, RK3368_GRF_SOC_CON4, val);
106 reset_control_assert(edp->rst_24m);
107 usleep_range(10, 20);
108 reset_control_deassert(edp->rst_24m);
110 reset_control_assert(edp->rst_apb);
111 usleep_range(10, 20);
112 reset_control_deassert(edp->rst_apb);
117 static int rk32_edp_init_edp(struct rk32_edp *edp)
119 struct rk_screen *screen = &edp->screen;
122 rk_fb_get_prmry_screen(screen);
124 if (cpu_is_rk3288()) {
125 if (screen->lcdc_id == 1) /*select lcdc*/
126 val = EDP_SEL_VOP_LIT | (EDP_SEL_VOP_LIT << 16);
128 val = EDP_SEL_VOP_LIT << 16;
129 writel_relaxed(val, RK_GRF_VIRT + RK3288_GRF_SOC_CON6);
133 rk32_edp_init_refclk(edp);
134 rk32_edp_init_interrupt(edp);
135 rk32_edp_enable_sw_function(edp);
136 rk32_edp_init_analog_func(edp);
137 rk32_edp_init_hpd(edp);
138 rk32_edp_init_aux(edp);
144 static int rk32_edp_detect_hpd(struct rk32_edp *edp)
146 int timeout_loop = 0;
148 rk32_edp_init_hpd(edp);
152 while (rk32_edp_get_plug_in_status(edp) != 0) {
154 if (DP_TIMEOUT_LOOP_CNT < timeout_loop) {
155 dev_err(edp->dev, "failed to get hpd plug status\n");
165 static int rk32_edp_read_edid(struct rk32_edp *edp)
167 unsigned char edid[EDID_LENGTH * 2];
168 unsigned int extend_block = 0;
170 unsigned char test_vector;
174 * EDID device address is 0x50.
175 * However, if necessary, you must have set upper address
176 * into E-EDID in I2C device, 0x30.
179 /* Read Extension Flag, Number of 128-byte EDID extension blocks */
180 retval = rk32_edp_read_byte_from_i2c
182 EDID_ADDR, EDID_EXTENSION_FLAG, &extend_block);
184 dev_err(edp->dev, "EDID extension flag failed!\n");
188 if (extend_block > 0) {
189 dev_dbg(edp->dev, "EDID data includes a single extension!\n");
192 retval = rk32_edp_read_bytes_from_i2c
194 EDID_ADDR, EDID_HEADER,
195 EDID_LENGTH, &edid[EDID_HEADER]);
197 dev_err(edp->dev, "EDID Read failed!\n");
200 sum = edp_calc_edid_check_sum(edid);
202 dev_warn(edp->dev, "EDID bad checksum!\n");
206 /* Read additional EDID data */
207 retval = rk32_edp_read_bytes_from_i2c
209 EDID_ADDR, EDID_LENGTH,
210 EDID_LENGTH, &edid[EDID_LENGTH]);
212 dev_err(edp->dev, "EDID Read failed!\n");
215 sum = edp_calc_edid_check_sum(&edid[EDID_LENGTH]);
217 dev_warn(edp->dev, "EDID bad checksum!\n");
221 retval = rk32_edp_read_byte_from_dpcd
223 DPCD_TEST_REQUEST, &test_vector);
225 dev_err(edp->dev, "DPCD EDID Read failed!\n");
229 if (test_vector & DPCD_TEST_EDID_READ) {
230 retval = rk32_edp_write_byte_to_dpcd
232 DPCD_TEST_EDID_CHECKSUM,
233 edid[EDID_LENGTH + EDID_CHECKSUM]);
235 dev_err(edp->dev, "DPCD EDID Write failed!\n");
238 retval = rk32_edp_write_byte_to_dpcd
241 DPCD_TEST_EDID_CHECKSUM_WRITE);
243 dev_err(edp->dev, "DPCD EDID checksum failed!\n");
248 dev_info(edp->dev, "EDID data does not include any extensions.\n");
251 retval = rk32_edp_read_bytes_from_i2c
253 EDID_ADDR, EDID_HEADER,
254 EDID_LENGTH, &edid[EDID_HEADER]);
256 dev_err(edp->dev, "EDID Read failed!\n");
259 sum = edp_calc_edid_check_sum(edid);
261 dev_warn(edp->dev, "EDID bad checksum!\n");
265 retval = rk32_edp_read_byte_from_dpcd
267 DPCD_TEST_REQUEST, &test_vector);
269 dev_err(edp->dev, "DPCD EDID Read failed!\n");
273 if (test_vector & DPCD_TEST_EDID_READ) {
274 retval = rk32_edp_write_byte_to_dpcd
276 DPCD_TEST_EDID_CHECKSUM,
277 edid[EDID_CHECKSUM]);
279 dev_err(edp->dev, "DPCD EDID Write failed!\n");
282 retval = rk32_edp_write_byte_to_dpcd
285 DPCD_TEST_EDID_CHECKSUM_WRITE);
287 dev_err(edp->dev, "DPCD EDID checksum failed!\n");
292 fb_edid_to_monspecs(edid, &edp->specs);
293 dev_err(edp->dev, "EDID Read success!\n");
298 static int rk32_edp_handle_edid(struct rk32_edp *edp)
304 /* Read DPCD DPCD_ADDR_DPCD_REV~RECEIVE_PORT1_CAP_1 */
305 retval = rk32_edp_read_bytes_from_dpcd(edp, DPCD_REV, 12, buf);
309 for (i = 0; i < 12; i++)
310 dev_info(edp->dev, "%d:>>0x%02x\n", i, buf[i]);
312 for (i = 0; i < 3; i++) {
313 retval = rk32_edp_read_edid(edp);
322 static int rk32_edp_enable_rx_to_enhanced_mode(struct rk32_edp *edp,
328 retval = rk32_edp_read_byte_from_dpcd
330 DPCD_LANE_CNT_SET, &data);
335 retval = rk32_edp_write_byte_to_dpcd
338 DPCD_ENHANCED_FRAME_EN |
339 DPCD_LANE_COUNT_SET(data));
341 /*retval = rk32_edp_write_byte_to_dpcd(edp,
342 DPCD_ADDR_CONFIGURATION_SET, 0);*/
344 retval = rk32_edp_write_byte_to_dpcd
347 DPCD_LANE_COUNT_SET(data));
353 void rk32_edp_rx_control(struct rk32_edp *edp, bool enable)
355 /*rk32_edp_write_byte_to_dpcd(edp, DPCD_ADDR_USER_DEFINED1,0);
356 rk32_edp_write_byte_to_dpcd(edp, DPCD_ADDR_USER_DEFINED2,0x90);
359 rk32_edp_write_byte_to_dpcd(edp, DPCD_ADDR_USER_DEFINED3,0x84);
360 rk32_edp_write_byte_to_dpcd(edp, DPCD_ADDR_USER_DEFINED3,0x00);
362 rk32_edp_write_byte_to_dpcd(edp, DPCD_ADDR_USER_DEFINED3,0x80);
367 static int rk32_edp_is_enhanced_mode_available(struct rk32_edp *edp)
372 retval = rk32_edp_read_byte_from_dpcd
374 DPCD_MAX_LANE_CNT, &data);
378 return DPCD_ENHANCED_FRAME_CAP(data);
382 static void rk32_edp_disable_rx_zmux(struct rk32_edp *edp)
384 /*rk32_edp_write_byte_to_dpcd(edp,
385 DPCD_ADDR_USER_DEFINED1, 0);
386 rk32_edp_write_byte_to_dpcd(edp,
387 DPCD_ADDR_USER_DEFINED2, 0x83);
388 rk32_edp_write_byte_to_dpcd(edp,
389 DPCD_ADDR_USER_DEFINED3, 0x27);*/
392 static int rk32_edp_set_enhanced_mode(struct rk32_edp *edp)
397 retval = rk32_edp_is_enhanced_mode_available(edp);
402 retval = rk32_edp_enable_rx_to_enhanced_mode(edp, data);
406 rk32_edp_enable_enhanced_mode(edp, data);
414 static int rk32_edp_training_pattern_dis(struct rk32_edp *edp)
418 rk32_edp_set_training_pattern(edp, DP_NONE);
420 retval = rk32_edp_write_byte_to_dpcd(edp,
421 DPCD_TRAINING_PATTERN_SET,
422 DPCD_TRAINING_PATTERN_DISABLED);
429 static void rk32_edp_set_lane_lane_pre_emphasis(struct rk32_edp *edp,
430 int pre_emphasis, int lane)
434 rk32_edp_set_lane0_pre_emphasis(edp, pre_emphasis);
437 rk32_edp_set_lane1_pre_emphasis(edp, pre_emphasis);
441 rk32_edp_set_lane2_pre_emphasis(edp, pre_emphasis);
445 rk32_edp_set_lane3_pre_emphasis(edp, pre_emphasis);
450 static int rk32_edp_link_start(struct rk32_edp *edp)
457 lane_count = edp->link_train.lane_count;
459 edp->link_train.lt_state = LT_CLK_RECOVERY;
460 edp->link_train.eq_loop = 0;
462 for (lane = 0; lane < lane_count; lane++)
463 edp->link_train.cr_loop[lane] = 0;
465 /* Set sink to D0 (Sink Not Ready) mode. */
466 retval = rk32_edp_write_byte_to_dpcd(edp, DPCD_SINK_POWER_STATE,
467 DPCD_SET_POWER_STATE_D0);
469 dev_err(edp->dev, "failed to set sink device to D0!\n");
473 /* Set link rate and count as you want to establish*/
474 rk32_edp_set_link_bandwidth(edp, edp->link_train.link_rate);
475 rk32_edp_set_lane_count(edp, edp->link_train.lane_count);
477 /* Setup RX configuration */
478 buf[0] = edp->link_train.link_rate;
479 buf[1] = edp->link_train.lane_count;
480 retval = rk32_edp_write_bytes_to_dpcd(edp, DPCD_LINK_BW_SET,
483 dev_err(edp->dev, "failed to set bandwidth and lane count!\n");
487 /* Set TX pre-emphasis to level1 */
488 for (lane = 0; lane < lane_count; lane++)
489 rk32_edp_set_lane_lane_pre_emphasis
491 PRE_EMPHASIS_LEVEL_1, lane);
493 /* Set training pattern 1 */
494 rk32_edp_set_training_pattern(edp, TRAINING_PTN1);
496 /* Set RX training pattern */
497 retval = rk32_edp_write_byte_to_dpcd(edp,
498 DPCD_TRAINING_PATTERN_SET,
499 DPCD_SCRAMBLING_DISABLED |
500 DPCD_TRAINING_PATTERN_1);
502 dev_err(edp->dev, "failed to set training pattern 1!\n");
506 for (lane = 0; lane < lane_count; lane++)
507 buf[lane] = DPCD_PRE_EMPHASIS_PATTERN2_LEVEL0 |
508 DPCD_VOLTAGE_SWING_PATTERN1_LEVEL0;
509 retval = rk32_edp_write_bytes_to_dpcd(edp,
510 DPCD_TRAINING_LANE0_SET,
513 dev_err(edp->dev, "failed to set training lane!\n");
520 static unsigned char rk32_edp_get_lane_status(u8 link_status[2], int lane)
522 int shift = (lane & 1) * 4;
523 u8 link_value = link_status[lane>>1];
525 return (link_value >> shift) & 0xf;
528 static int rk32_edp_clock_recovery_ok(u8 link_status[2], int lane_count)
533 for (lane = 0; lane < lane_count; lane++) {
534 lane_status = rk32_edp_get_lane_status(link_status, lane);
535 if ((lane_status & DPCD_LANE_CR_DONE) == 0)
541 static int rk32_edp_channel_eq_ok(u8 link_align[3], int lane_count)
547 lane_align = link_align[2];
548 if ((lane_align & DPCD_INTERLANE_ALIGN_DONE) == 0)
551 for (lane = 0; lane < lane_count; lane++) {
552 lane_status = rk32_edp_get_lane_status(link_align, lane);
553 lane_status &= DPCD_CHANNEL_EQ_BITS;
554 if (lane_status != DPCD_CHANNEL_EQ_BITS)
561 static unsigned char rk32_edp_get_adjust_request_voltage(u8 adjust_request[2],
564 int shift = (lane & 1) * 4;
565 u8 link_value = adjust_request[lane>>1];
567 return (link_value >> shift) & 0x3;
570 static unsigned char rk32_edp_get_adjust_request_pre_emphasis(
571 u8 adjust_request[2],
574 int shift = (lane & 1) * 4;
575 u8 link_value = adjust_request[lane>>1];
577 return ((link_value >> shift) & 0xc) >> 2;
580 static void rk32_edp_set_lane_link_training(struct rk32_edp *edp,
581 u8 training_lane_set, int lane)
585 rk32_edp_set_lane0_link_training(edp, training_lane_set);
588 rk32_edp_set_lane1_link_training(edp, training_lane_set);
592 rk32_edp_set_lane2_link_training(edp, training_lane_set);
596 rk32_edp_set_lane3_link_training(edp, training_lane_set);
601 static unsigned int rk32_edp_get_lane_link_training(
602 struct rk32_edp *edp,
609 reg = rk32_edp_get_lane0_link_training(edp);
612 reg = rk32_edp_get_lane1_link_training(edp);
615 reg = rk32_edp_get_lane2_link_training(edp);
618 reg = rk32_edp_get_lane3_link_training(edp);
625 static void rk32_edp_reduce_link_rate(struct rk32_edp *edp)
627 rk32_edp_training_pattern_dis(edp);
629 edp->link_train.lt_state = FAILED;
632 static int rk32_edp_process_clock_recovery(struct rk32_edp *edp)
638 u8 adjust_request[2];
645 usleep_range(99, 100);
647 lane_count = edp->link_train.lane_count;
649 retval = rk32_edp_read_bytes_from_dpcd(edp,
653 dev_err(edp->dev, "failed to read lane status!\n");
657 if (rk32_edp_clock_recovery_ok(link_status, lane_count) == 0) {
658 /* set training pattern 2 for EQ */
659 rk32_edp_set_training_pattern(edp, TRAINING_PTN2);
661 for (lane = 0; lane < lane_count; lane++) {
662 retval = rk32_edp_read_bytes_from_dpcd
664 DPCD_ADJUST_REQUEST_LANE0_1,
667 dev_err(edp->dev, "failed to read adjust request!\n");
671 voltage_swing = rk32_edp_get_adjust_request_voltage(
672 adjust_request, lane);
673 pre_emphasis = rk32_edp_get_adjust_request_pre_emphasis(
674 adjust_request, lane);
675 training_lane = DPCD_VOLTAGE_SWING_SET(voltage_swing) |
676 DPCD_PRE_EMPHASIS_SET(pre_emphasis);
678 if (voltage_swing == VOLTAGE_LEVEL_3)
679 training_lane |= DPCD_MAX_SWING_REACHED;
680 if (pre_emphasis == PRE_EMPHASIS_LEVEL_3)
681 training_lane |= DPCD_MAX_PRE_EMPHASIS_REACHED;
683 edp->link_train.training_lane[lane] = training_lane;
685 rk32_edp_set_lane_link_training
687 edp->link_train.training_lane[lane],
691 retval = rk32_edp_write_byte_to_dpcd(edp,
692 DPCD_TRAINING_PATTERN_SET,
693 DPCD_SCRAMBLING_DISABLED |
694 DPCD_TRAINING_PATTERN_2);
696 dev_err(edp->dev, "failed to set training pattern 2!\n");
700 retval = rk32_edp_write_bytes_to_dpcd(edp,
701 DPCD_TRAINING_LANE0_SET,
703 edp->link_train.training_lane);
705 dev_err(edp->dev, "failed to set training lane!\n");
709 dev_info(edp->dev, "Link Training Clock Recovery success\n");
710 edp->link_train.lt_state = LT_EQ_TRAINING;
712 for (lane = 0; lane < lane_count; lane++) {
713 training_lane = rk32_edp_get_lane_link_training(
715 retval = rk32_edp_read_bytes_from_dpcd
717 DPCD_ADJUST_REQUEST_LANE0_1,
720 dev_err(edp->dev, "failed to read adjust request!\n");
724 voltage_swing = rk32_edp_get_adjust_request_voltage(
725 adjust_request, lane);
726 pre_emphasis = rk32_edp_get_adjust_request_pre_emphasis(
727 adjust_request, lane);
729 if (voltage_swing == VOLTAGE_LEVEL_3 ||
730 pre_emphasis == PRE_EMPHASIS_LEVEL_3) {
731 dev_err(edp->dev, "voltage or pre emphasis reached max level\n");
732 goto reduce_link_rate;
735 if ((DPCD_VOLTAGE_SWING_GET(training_lane) ==
737 (DPCD_PRE_EMPHASIS_GET(training_lane) ==
739 edp->link_train.cr_loop[lane]++;
740 if (edp->link_train.cr_loop[lane] ==
742 dev_err(edp->dev, "CR Max loop\n");
743 goto reduce_link_rate;
747 training_lane = DPCD_VOLTAGE_SWING_SET(voltage_swing) |
748 DPCD_PRE_EMPHASIS_SET(pre_emphasis);
750 if (voltage_swing == VOLTAGE_LEVEL_3)
751 training_lane |= DPCD_MAX_SWING_REACHED;
752 if (pre_emphasis == PRE_EMPHASIS_LEVEL_3)
753 training_lane |= DPCD_MAX_PRE_EMPHASIS_REACHED;
755 edp->link_train.training_lane[lane] = training_lane;
757 rk32_edp_set_lane_link_training
759 edp->link_train.training_lane[lane], lane);
762 retval = rk32_edp_write_bytes_to_dpcd
764 DPCD_TRAINING_LANE0_SET,
766 edp->link_train.training_lane);
768 dev_err(edp->dev, "failed to set training lane!\n");
776 rk32_edp_reduce_link_rate(edp);
780 static int rk32_edp_process_equalizer_training(struct rk32_edp *edp)
788 u8 adjust_request[2];
795 usleep_range(399, 400);
797 lane_count = edp->link_train.lane_count;
799 retval = rk32_edp_read_bytes_from_dpcd(edp,
803 dev_err(edp->dev, "failed to read lane status!\n");
807 if (rk32_edp_clock_recovery_ok(link_status, lane_count) == 0) {
808 link_align[0] = link_status[0];
809 link_align[1] = link_status[1];
811 retval = rk32_edp_read_byte_from_dpcd
813 DPCD_LANE_ALIGN_STATUS_UPDATED,
816 dev_err(edp->dev, "failed to read lane aligne status!\n");
820 for (lane = 0; lane < lane_count; lane++) {
821 retval = rk32_edp_read_bytes_from_dpcd
823 DPCD_ADJUST_REQUEST_LANE0_1,
826 dev_err(edp->dev, "failed to read adjust request!\n");
830 voltage_swing = rk32_edp_get_adjust_request_voltage(
831 adjust_request, lane);
832 pre_emphasis = rk32_edp_get_adjust_request_pre_emphasis(
833 adjust_request, lane);
834 training_lane = DPCD_VOLTAGE_SWING_SET(voltage_swing) |
835 DPCD_PRE_EMPHASIS_SET(pre_emphasis);
837 if (voltage_swing == VOLTAGE_LEVEL_3)
838 training_lane |= DPCD_MAX_SWING_REACHED;
839 if (pre_emphasis == PRE_EMPHASIS_LEVEL_3)
840 training_lane |= DPCD_MAX_PRE_EMPHASIS_REACHED;
842 edp->link_train.training_lane[lane] = training_lane;
845 if (rk32_edp_channel_eq_ok(link_align, lane_count) == 0) {
846 /* traing pattern Set to Normal */
847 retval = rk32_edp_training_pattern_dis(edp);
849 dev_err(edp->dev, "failed to disable training pattern!\n");
853 dev_info(edp->dev, "Link Training success!\n");
855 rk32_edp_get_link_bandwidth(edp, ®);
856 edp->link_train.link_rate = reg;
857 dev_dbg(edp->dev, "final bandwidth = %.2x\n",
858 edp->link_train.link_rate);
860 rk32_edp_get_lane_count(edp, ®);
861 edp->link_train.lane_count = reg;
862 dev_dbg(edp->dev, "final lane count = %.2x\n",
863 edp->link_train.lane_count);
865 edp->link_train.lt_state = FINISHED;
868 edp->link_train.eq_loop++;
870 if (edp->link_train.eq_loop > MAX_EQ_LOOP) {
871 dev_err(edp->dev, "EQ Max loop\n");
872 goto reduce_link_rate;
875 for (lane = 0; lane < lane_count; lane++)
876 rk32_edp_set_lane_link_training
878 edp->link_train.training_lane[lane],
881 retval = rk32_edp_write_bytes_to_dpcd
883 DPCD_TRAINING_LANE0_SET,
885 edp->link_train.training_lane);
887 dev_err(edp->dev, "failed to set training lane!\n");
892 goto reduce_link_rate;
898 rk32_edp_reduce_link_rate(edp);
902 static int rk32_edp_get_max_rx_bandwidth(struct rk32_edp *edp,
909 * For DP rev.1.1, Maximum link rate of Main Link lanes
910 * 0x06 = 1.62 Gbps, 0x0a = 2.7 Gbps
912 retval = rk32_edp_read_byte_from_dpcd(edp,
913 DPCD_MAX_LINK_RATE, &data);
921 static int rk32_edp_get_max_rx_lane_count(struct rk32_edp *edp,
928 * For DP rev.1.1, Maximum number of Main Link lanes
929 * 0x01 = 1 lane, 0x02 = 2 lanes, 0x04 = 4 lanes
931 retval = rk32_edp_read_byte_from_dpcd(edp,
932 DPCD_MAX_LANE_CNT, &data);
936 *lane_count = DPCD_MAX_LANE_COUNT(data);
940 static int rk32_edp_init_training(struct rk32_edp *edp)
945 * MACRO_RST must be applied after the PLL_LOCK to avoid
946 * the DP inter pair skew issue for at least 10 us
948 rk32_edp_reset_macro(edp);
951 retval = rk32_edp_get_max_rx_bandwidth(edp,
952 &edp->link_train.link_rate);
953 retval = rk32_edp_get_max_rx_lane_count(edp,
954 &edp->link_train.lane_count);
955 dev_info(edp->dev, "max link rate:%d.%dGps max number of lanes:%d\n",
956 edp->link_train.link_rate * 27/100,
957 edp->link_train.link_rate*27%100,
958 edp->link_train.lane_count);
960 if ((edp->link_train.link_rate != LINK_RATE_1_62GBPS) &&
961 (edp->link_train.link_rate != LINK_RATE_2_70GBPS)) {
964 "Rx Mx Link Rate is abnormal:%x!default link rate:%d.%dGps\n",
965 edp->link_train.link_rate,
966 edp->video_info.link_rate*27/100,
967 edp->video_info.link_rate*27%100);
968 edp->link_train.link_rate = edp->video_info.link_rate;
971 if (edp->link_train.lane_count == 0) {
974 "Rx Max Lane count is abnormal :%x !use default lanes:%d\n",
975 edp->link_train.lane_count,
976 edp->video_info.lane_count);
977 edp->link_train.lane_count = edp->video_info.lane_count;
980 rk32_edp_analog_power_ctr(edp, 1);
987 static int rk32_edp_sw_link_training(struct rk32_edp *edp)
990 int training_finished = 0;
992 edp->link_train.lt_state = LT_START;
995 while (!training_finished) {
996 switch (edp->link_train.lt_state) {
998 retval = rk32_edp_link_start(edp);
1000 dev_err(edp->dev, "LT Start failed\n");
1002 case LT_CLK_RECOVERY:
1003 retval = rk32_edp_process_clock_recovery(edp);
1005 dev_err(edp->dev, "LT CR failed\n");
1007 case LT_EQ_TRAINING:
1008 retval = rk32_edp_process_equalizer_training(edp);
1010 dev_err(edp->dev, "LT EQ failed\n");
1013 training_finished = 1;
1024 static int rk32_edp_hw_link_training(struct rk32_edp *edp)
1028 /* Set link rate and count as you want to establish*/
1029 rk32_edp_set_link_bandwidth(edp, edp->link_train.link_rate);
1030 rk32_edp_set_lane_count(edp, edp->link_train.lane_count);
1031 rk32_edp_hw_link_training_en(edp);
1032 val = rk32_edp_wait_hw_lt_done(edp);
1035 dev_err(edp->dev, "hw lt timeout");
1039 val = rk32_edp_wait_hw_lt_done(edp);
1042 val = rk32_edp_get_hw_lt_status(edp);
1044 dev_err(edp->dev, "hw lt err:%d\n", val);
1049 static int rk32_edp_set_link_train(struct rk32_edp *edp)
1053 retval = rk32_edp_init_training(edp);
1055 dev_err(edp->dev, "DP LT init failed!\n");
1057 retval = rk32_edp_sw_link_training(edp);
1059 retval = rk32_edp_hw_link_training(edp);
1065 static int rk32_edp_config_video(struct rk32_edp *edp,
1066 struct video_info *video_info)
1069 int timeout_loop = 0;
1072 rk32_edp_config_video_slave_mode(edp, video_info);
1074 rk32_edp_set_video_color_format(edp, video_info->color_depth,
1075 video_info->color_space,
1076 video_info->dynamic_range,
1077 video_info->ycbcr_coeff);
1079 if (rk32_edp_get_pll_lock_status(edp) == DP_PLL_UNLOCKED) {
1080 dev_err(edp->dev, "PLL is not locked yet.\n");
1086 if (rk32_edp_is_slave_video_stream_clock_on(edp) == 0)
1088 if (DP_TIMEOUT_LOOP_CNT < timeout_loop) {
1089 dev_err(edp->dev, "Timeout of video streamclk ok\n");
1096 /* Set to use the register calculated M/N video */
1097 rk32_edp_set_video_cr_mn(edp, CALCULATED_M, 0, 0);
1099 /* For video bist, Video timing must be generated by register */
1100 #ifndef EDP_BIST_MODE
1101 rk32_edp_set_video_timing_mode(edp, VIDEO_TIMING_FROM_CAPTURE);
1103 /* Disable video mute */
1104 rk32_edp_enable_video_mute(edp, 0);
1106 /* Configure video slave mode */
1107 rk32_edp_enable_video_master(edp, 0);
1110 rk32_edp_start_video(edp);
1116 if (rk32_edp_is_video_stream_on(edp) == 0) {
1118 if (done_count > 10)
1120 } else if (done_count) {
1123 if (DP_TIMEOUT_LOOP_CNT < timeout_loop) {
1124 dev_err(edp->dev, "Timeout of video streamclk ok\n");
1132 dev_err(edp->dev, "Video stream is not detected!\n");
1137 static irqreturn_t rk32_edp_isr(int irq, void *arg)
1139 struct rk32_edp *edp = arg;
1140 enum dp_irq_type irq_type;
1142 irq_type = rk32_edp_get_irq_type(edp);
1144 case DP_IRQ_TYPE_HP_CABLE_IN:
1145 dev_info(edp->dev, "Received irq - cable in\n");
1146 rk32_edp_clear_hotplug_interrupts(edp);
1148 case DP_IRQ_TYPE_HP_CABLE_OUT:
1149 dev_info(edp->dev, "Received irq - cable out\n");
1150 rk32_edp_clear_hotplug_interrupts(edp);
1152 case DP_IRQ_TYPE_HP_CHANGE:
1154 * We get these change notifications once in a while, but there
1155 * is nothing we can do with them. Just ignore it for now and
1156 * only handle cable changes.
1158 dev_info(edp->dev, "Received irq - hotplug change; ignoring.\n");
1159 rk32_edp_clear_hotplug_interrupts(edp);
1162 dev_err(edp->dev, "Received irq - unknown type!\n");
1168 static int rk32_edp_enable(void)
1171 struct rk32_edp *edp = rk32_edp;
1174 rk32_edp_clk_enable(edp);
1175 rk32_edp_pre_init(edp);
1176 rk32_edp_init_edp(edp);
1177 enable_irq(edp->irq);
1178 /*ret = rk32_edp_handle_edid(edp);
1180 dev_err(edp->dev, "unable to handle edid\n");
1184 ret = rk32_edp_enable_scramble(edp, 0);
1186 dev_err(edp->dev, "unable to set scramble\n");
1190 ret = rk32_edp_enable_rx_to_enhanced_mode(edp, 0);
1192 dev_err(edp->dev, "unable to set enhanced mode\n");
1195 rk32_edp_enable_enhanced_mode(edp, 1);*/
1197 ret = rk32_edp_set_link_train(edp);
1199 dev_err(edp->dev, "link train failed!\n");
1201 dev_info(edp->dev, "link training success.\n");
1203 rk32_edp_set_lane_count(edp, edp->link_train.lane_count);
1204 rk32_edp_set_link_bandwidth(edp, edp->link_train.link_rate);
1205 rk32_edp_init_video(edp);
1207 #ifdef EDP_BIST_MODE
1208 rk32_edp_bist_cfg(edp);
1210 ret = rk32_edp_config_video(edp, &edp->video_info);
1212 dev_err(edp->dev, "unable to config video\n");
1219 static int rk32_edp_disable(void)
1221 struct rk32_edp *edp = rk32_edp;
1224 disable_irq(edp->irq);
1225 rk32_edp_reset(edp);
1226 rk32_edp_analog_power_ctr(edp, 0);
1227 rk32_edp_clk_disable(edp);
1228 edp->edp_en = false;
1235 static struct rk_fb_trsm_ops trsm_edp_ops = {
1236 .enable = rk32_edp_enable,
1237 .disable = rk32_edp_disable,
1241 static int rk32_edp_enable_scramble(struct rk32_edp *edp, bool enable)
1247 rk32_edp_enable_scrambling(edp);
1249 retval = rk32_edp_read_byte_from_dpcd
1251 DPCD_TRAINING_PATTERN_SET,
1256 retval = rk32_edp_write_byte_to_dpcd
1258 DPCD_TRAINING_PATTERN_SET,
1259 (u8)(data & ~DPCD_SCRAMBLING_DISABLED));
1263 rk32_edp_disable_scrambling(edp);
1265 retval = rk32_edp_read_byte_from_dpcd
1267 DPCD_TRAINING_PATTERN_SET,
1272 retval = rk32_edp_write_byte_to_dpcd
1274 DPCD_TRAINING_PATTERN_SET,
1275 (u8)(data | DPCD_SCRAMBLING_DISABLED));
1283 static int rk32_edp_psr_enable(struct rk32_edp *edp)
1287 char date, psr_version;
1290 retval = rk32_edp_read_byte_from_dpcd
1292 PANEL_SELF_REFRESH_CAPABILITY_SUPPORTED_AND_VERSION,
1295 dev_err(edp->dev, "PSR DPCD Read failed!\n");
1298 pr_info("PSR supporter and version:%x\n", psr_version);
1301 /*PSR capabilities*/
1302 retval = rk32_edp_read_byte_from_dpcd
1304 PANEL_SELF_REFRESH_CAPABILITIES, &date);
1306 dev_err(edp->dev, "PSR DPCD Read failed!\n");
1309 pr_info("PSR capabilities:%x\n", date);
1312 if (psr_version & PSR_SUPPORT) {
1313 pr_info("PSR config psr\n");
1317 retval = rk32_edp_write_bytes_to_dpcd(edp, PSR_ENABLE,
1320 dev_err(edp->dev, "PSR failed to config sink PSR!\n");
1325 retval = rk32_edp_write_bytes_to_dpcd(edp,
1329 dev_err(edp->dev, "PSR failed to enable the PSR!\n");
1332 /*read sink config state*/
1333 retval = rk32_edp_read_byte_from_dpcd
1337 dev_err(edp->dev, "PSR DPCD Read failed!\n");
1340 pr_info("PSR sink config state:%x\n", date);
1345 retval = rk32_edp_read_byte_from_dpcd(edp, 0x270, &buf);
1347 retval = rk32_edp_write_bytes_to_dpcd(edp, 0x270, 1, &buf);
1352 static int psr_header_HB_PB(struct rk32_edp *edp)
1357 writel(val, edp->regs + HB0);/*HB0*/
1359 writel(val, edp->regs + HB1);/*HB1*/
1361 writel(val, edp->regs + HB2);/*HB2*/
1363 writel(val, edp->regs + HB3);/*HB3*/
1365 writel(val, edp->regs + PB0);/*PB0*/
1367 writel(val, edp->regs + PB1);/*PB1*/
1369 writel(val, edp->regs + PB2);/*PB2*/
1371 writel(val, edp->regs + PB3);/*PB3*/
1376 static int psr_enable_sdp(struct rk32_edp *edp)
1380 val = readl(edp->regs + SPDIF_AUDIO_CTL_0);
1382 writel(val, edp->regs + SPDIF_AUDIO_CTL_0);/*enable SDP*/
1383 val = readl(edp->regs + SPDIF_AUDIO_CTL_0);
1384 pr_info("PSR reuse_spd_en:%x\n", val);
1387 writel(val, edp->regs + IF_TYPE);/*enable IF_TYPE*/
1388 val = readl(edp->regs + IF_TYPE);
1389 pr_info("PSR IF_TYPE :%x\n", val);
1391 val = readl(edp->regs + PKT_SEND_CTL);
1393 writel(val, edp->regs + PKT_SEND_CTL);/*enable IF_UP*/
1394 val = readl(edp->regs + PKT_SEND_CTL);
1395 pr_info("PSR if_up :%x\n", val);
1397 val = readl(edp->regs + PKT_SEND_CTL);
1399 writel(val, edp->regs + PKT_SEND_CTL);/*enable IF_EN*/
1400 val = readl(edp->regs + PKT_SEND_CTL);
1401 pr_info("PSR if_en:%x\n", val);
1404 static int edp_disable_psr(struct rk32_edp *edp)
1410 /*disable sink PSR*/
1411 retval = rk32_edp_read_byte_from_dpcd(edp,
1414 dev_err(edp->dev, "PSR sink original config Read failed!\n");
1418 retval = rk32_edp_write_bytes_to_dpcd
1423 dev_err(edp->dev, "PSR failed to disable sink PSR!\n");
1427 pr_info("PSR disable success!!\n");
1431 static int edp_psr_state(struct rk32_edp *edp, int state)
1434 /*wait for VD blank*/
1435 if (rk_fb_poll_wait_frame_complete()) {
1436 psr_header_HB_PB(edp);
1439 writel(val, edp->regs + DB1);
1440 /*val = readl(edp->regs + DB1);
1441 pr_info("PSR set DB1 state 0x0:%x\n", val);
1443 for (i = 0; i < 22; i++)
1444 writel(0, edp->regs + DB2 + 4 * i);*/
1446 psr_enable_sdp(edp);
1452 static int phy_power_channel(struct rk32_edp *edp, int state)
1457 writel(val, edp->regs + DP_PD);
1462 #if defined(CONFIG_DEBUG_FS)
1464 static int edp_dpcd_debugfs_show(struct seq_file *s, void *v)
1467 unsigned char buf[12];
1468 struct rk32_edp *edp = s->private;
1471 dev_err(edp->dev, "no edp device!\n");
1475 retval = rk32_edp_read_byte_from_dpcd
1477 PANEL_SELF_REFRESH_CAPABILITY_SUPPORTED_AND_VERSION,
1479 seq_printf(s, "0x70 %x\n", buf[0]);
1481 /*PSR capabilities*/
1482 retval = rk32_edp_read_byte_from_dpcd
1484 PANEL_SELF_REFRESH_CAPABILITIES, &buf[0]);
1485 seq_printf(s, "0x71 %x\n", buf[0]);
1487 retval = rk32_edp_read_byte_from_dpcd
1489 PSR_ENABLE, &buf[0]);
1490 seq_printf(s, "0x170 %x\n", buf[0]);
1492 retval = rk32_edp_read_byte_from_dpcd(edp, 0x2006, &buf[0]);
1493 seq_printf(s, "0x2006 %x\n", buf[0]);
1495 retval = rk32_edp_read_byte_from_dpcd(edp, 0x2007, &buf[0]);
1496 seq_printf(s, "0x2007 %x\n", buf[0]);
1498 retval = rk32_edp_read_byte_from_dpcd(edp, 0x2008, &buf[0]);
1499 seq_printf(s, "0x2008 %x\n", buf[0]);
1500 retval = rk32_edp_read_byte_from_dpcd(edp, 0x2009, &buf[0]);
1501 seq_printf(s, "0x2009 %x\n", buf[0]);
1503 retval = rk32_edp_read_byte_from_dpcd(edp, 0x200a, &buf[0]);
1504 seq_printf(s, "0x200a %x\n", buf[0]);
1506 retval = rk32_edp_read_byte_from_dpcd(edp, 0x240, &buf[0]);
1507 seq_printf(s, "0x240 %x\n", buf[0]);
1508 retval = rk32_edp_read_byte_from_dpcd(edp, 0x241, &buf[0]);
1509 seq_printf(s, "0x241 %x\n", buf[0]);
1510 retval = rk32_edp_read_byte_from_dpcd(edp, 0x242, &buf[0]);
1511 seq_printf(s, "0x242 %x\n", buf[0]);
1512 retval = rk32_edp_read_byte_from_dpcd(edp, 0x243, &buf[0]);
1513 seq_printf(s, "0x243 %x\n", buf[0]);
1514 retval = rk32_edp_read_byte_from_dpcd(edp, 0x244, &buf[0]);
1515 seq_printf(s, "0x244 %x\n", buf[0]);
1516 retval = rk32_edp_read_byte_from_dpcd(edp, 0x245, &buf[0]);
1517 seq_printf(s, "0x245 %x\n", buf[0]);
1518 retval = rk32_edp_read_byte_from_dpcd(edp, 0x270, &buf[0]);
1519 seq_printf(s, "0x270 %x\n", buf[0]);
1520 retval = rk32_edp_read_byte_from_dpcd(edp, 0x246, &buf[0]);
1521 seq_printf(s, "0x246 %x\n", buf[0]);
1523 /*retval = rk32_edp_read_byte_from_dpcd(edp, 0x222, &buf[0]);
1524 seq_printf(s, "0x222 %x\n", buf[0]);
1525 retval = rk32_edp_read_byte_from_dpcd(edp, 0x223, &buf[0]);
1526 seq_printf(s, "0x223 %x\n", buf[0]);
1527 retval = rk32_edp_read_byte_from_dpcd(edp, 0x224, &buf[0]);
1528 seq_printf(s, "0x224 %x\n", buf[0]);
1529 retval = rk32_edp_read_byte_from_dpcd(edp, 0x225, &buf[0]);
1530 seq_printf(s, "0x225 %x\n", buf[0]);
1531 retval = rk32_edp_read_byte_from_dpcd(edp, 0x226, &buf[0]);
1532 seq_printf(s, "0x226 %x\n", buf[0]);
1533 retval = rk32_edp_read_byte_from_dpcd(edp, 0x227, &buf[0]);
1534 seq_printf(s, "0x227 %x\n", buf[0]);
1535 retval = rk32_edp_read_byte_from_dpcd(edp, 0x228, &buf[0]);
1536 seq_printf(s, "0x228 %x\n", buf[0]);
1537 retval = rk32_edp_read_byte_from_dpcd(edp, 0x229, &buf[0]);
1538 seq_printf(s, "0x229 %x\n", buf[0]);
1539 retval = rk32_edp_read_byte_from_dpcd(edp, 0x22a, &buf[0]);
1540 seq_printf(s, "0x22a %x\n", buf[0]);
1541 retval = rk32_edp_read_byte_from_dpcd(edp, 0x22b, &buf[0]);
1542 seq_printf(s, "0x22b %x\n", buf[0]);
1543 retval = rk32_edp_read_byte_from_dpcd(edp, 0x22c, &buf[0]);
1544 seq_printf(s, "0x22c %x\n", buf[0]);
1545 retval = rk32_edp_read_byte_from_dpcd(edp, 0x22d, &buf[0]);
1546 seq_printf(s, "0x22d %x\n", buf[0]);
1547 retval = rk32_edp_read_byte_from_dpcd(edp, 0x22e, &buf[0]);
1548 seq_printf(s, "0x22e %x\n", buf[0]);
1549 retval = rk32_edp_read_byte_from_dpcd(edp, 0x22f, &buf[0]);
1550 seq_printf(s, "0x22f %x\n", buf[0]);
1551 retval = rk32_edp_read_byte_from_dpcd(edp, 0x230, &buf[0]);
1552 seq_printf(s, "0x230 %x\n", buf[0]);
1553 retval = rk32_edp_read_byte_from_dpcd(edp, 0x231, &buf[0]);
1554 seq_printf(s, "0x231 %x\n", buf[0]);*/
1556 /*rk32_edp_read_bytes_from_dpcd(edp,
1557 DPCD_SYMBOL_ERR_CONUT_LANE0, 12, buf);
1558 for (i = 0; i < 12; i++)
1559 seq_printf(s, "0x%02x>>0x%02x\n", 0x210 + i, buf[i]);*/
1563 static ssize_t edp_dpcd_write(struct file *file,
1564 const char __user *buf,
1571 static int edp_edid_debugfs_show(struct seq_file *s, void *v)
1573 struct rk32_edp *edp = s->private;
1576 dev_err(edp->dev, "no edp device!\n");
1579 rk32_edp_read_edid(edp);
1580 seq_puts(s, "edid");
1584 static ssize_t edp_edid_write(struct file *file,
1585 const char __user *buf,
1589 struct rk32_edp *edp =
1590 ((struct seq_file *)file->private_data)->private;
1593 dev_err(edp->dev, "no edp device!\n");
1601 static int edp_reg_debugfs_show(struct seq_file *s, void *v)
1604 struct rk32_edp *edp = s->private;
1607 dev_err(edp->dev, "no edp device!\n");
1611 for (i = 0; i < 0x284; i++) {
1613 seq_printf(s, "\n%08x: ", i*4);
1614 seq_printf(s, "%08x ", readl(edp->regs + i*4));
1619 static ssize_t edp_reg_write(struct file *file,
1620 const char __user *buf, size_t count,
1626 static int edp_psr_debugfs_show(struct seq_file *s, void *v)
1630 static ssize_t edp_psr_write(struct file *file,
1631 const char __user *buf,
1632 size_t count, loff_t *ppos)
1637 struct rk32_edp *edp =
1638 ((struct seq_file *)file->private_data)->private;
1641 dev_err(edp->dev, "no edp device!\n");
1644 memset(kbuf, 0, 25);
1645 if (copy_from_user(kbuf, buf, count))
1647 retval = kstrtoint(kbuf, 0, &a);
1650 /*retval = sscanf(kbuf, "%d", &a);
1652 dev_err(edp->dev, "PSR failed sscanf!\n");
1657 edp_disable_psr(edp);
1660 rk32_edp_psr_enable(edp);
1663 edp_psr_state(edp, 0x0);
1666 edp_psr_state(edp, 0x01);
1669 edp_psr_state(edp, 0x03);
1672 phy_power_channel(edp, 0xff);
1673 usleep_range(9, 10);
1674 phy_power_channel(edp, 0x7f);
1675 usleep_range(9, 10);
1676 phy_power_channel(edp, 0x0);
1680 phy_power_channel(edp, 0x7f);
1681 usleep_range(9, 10);
1682 phy_power_channel(edp, 0x0f);
1688 #define EDP_DEBUG_ENTRY(name) \
1689 static int edp_##name##_debugfs_open(struct inode *inode, struct file *file) \
1691 return single_open(file, edp_##name##_debugfs_show, inode->i_private); \
1694 static const struct file_operations edp_##name##_debugfs_fops = { \
1695 .owner = THIS_MODULE, \
1696 .open = edp_##name##_debugfs_open, \
1698 .write = edp_##name##_write, \
1699 .llseek = seq_lseek, \
1700 .release = single_release, \
1703 EDP_DEBUG_ENTRY(psr);
1704 EDP_DEBUG_ENTRY(dpcd);
1705 EDP_DEBUG_ENTRY(edid);
1706 EDP_DEBUG_ENTRY(reg);
1709 static int rk32_edp_probe(struct platform_device *pdev)
1711 struct rk32_edp *edp;
1712 struct resource *res;
1713 struct device_node *np = pdev->dev.of_node;
1717 dev_err(&pdev->dev, "Missing device tree node.\n");
1721 edp = devm_kzalloc(&pdev->dev, sizeof(struct rk32_edp), GFP_KERNEL);
1723 dev_err(&pdev->dev, "no memory for state\n");
1726 edp->dev = &pdev->dev;
1727 edp->video_info.h_sync_polarity = 0;
1728 edp->video_info.v_sync_polarity = 0;
1729 edp->video_info.interlaced = 0;
1730 edp->video_info.color_space = CS_RGB;
1731 edp->video_info.dynamic_range = VESA;
1732 edp->video_info.ycbcr_coeff = COLOR_YCBCR601;
1733 edp->video_info.color_depth = COLOR_8;
1735 edp->video_info.link_rate = LINK_RATE_1_62GBPS;
1736 edp->video_info.lane_count = LANE_CNT4;
1737 rk_fb_get_prmry_screen(&edp->screen);
1738 if (edp->screen.type != SCREEN_EDP) {
1739 dev_err(&pdev->dev, "screen is not edp!\n");
1742 platform_set_drvdata(pdev, edp);
1743 dev_set_name(edp->dev, "rk32-edp");
1745 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1746 edp->regs = devm_ioremap_resource(&pdev->dev, res);
1747 if (IS_ERR(edp->regs)) {
1748 dev_err(&pdev->dev, "ioremap reg failed\n");
1749 return PTR_ERR(edp->regs);
1752 edp->grf = syscon_regmap_lookup_by_phandle(np, "rockchip,grf");
1753 if (IS_ERR(edp->grf) && !cpu_is_rk3288()) {
1754 dev_err(&pdev->dev, "can't find rockchip,grf property\n");
1755 return PTR_ERR(edp->grf);
1758 edp->pd = devm_clk_get(&pdev->dev, "pd_edp");
1759 if (IS_ERR(edp->pd)) {
1760 dev_err(&pdev->dev, "cannot get pd\n");
1764 edp->clk_edp = devm_clk_get(&pdev->dev, "clk_edp");
1765 if (IS_ERR(edp->clk_edp)) {
1766 dev_err(&pdev->dev, "cannot get clk_edp\n");
1767 return PTR_ERR(edp->clk_edp);
1770 edp->clk_24m = devm_clk_get(&pdev->dev, "clk_edp_24m");
1771 if (IS_ERR(edp->clk_24m)) {
1772 dev_err(&pdev->dev, "cannot get clk_edp_24m\n");
1773 return PTR_ERR(edp->clk_24m);
1776 edp->pclk = devm_clk_get(&pdev->dev, "pclk_edp");
1777 if (IS_ERR(edp->pclk)) {
1778 dev_err(&pdev->dev, "cannot get pclk\n");
1779 return PTR_ERR(edp->pclk);
1782 /* We use the reset API to control the software reset at this version
1783 * and later, and we reserve the code that setting the cru regs directly
1786 /*edp 24m need sorft reset*/
1787 edp->rst_24m = devm_reset_control_get(&pdev->dev, "edp_24m");
1788 if (IS_ERR(edp->rst_24m))
1789 dev_err(&pdev->dev, "failed to get reset\n");
1790 /* edp ctrl apb bus need sorft reset */
1791 edp->rst_apb = devm_reset_control_get(&pdev->dev, "edp_apb");
1792 if (IS_ERR(edp->rst_apb))
1793 dev_err(&pdev->dev, "failed to get reset\n");
1794 rk32_edp_clk_enable(edp);
1795 if (!support_uboot_display())
1796 rk32_edp_pre_init(edp);
1797 edp->irq = platform_get_irq(pdev, 0);
1799 dev_err(&pdev->dev, "cannot find IRQ\n");
1802 ret = devm_request_irq(&pdev->dev, edp->irq, rk32_edp_isr, 0,
1803 dev_name(&pdev->dev), edp);
1805 dev_err(&pdev->dev, "cannot claim IRQ %d\n", edp->irq);
1808 disable_irq_nosync(edp->irq);
1809 if (!support_uboot_display())
1810 rk32_edp_clk_disable(edp);
1812 rk_fb_trsm_ops_register(&trsm_edp_ops, SCREEN_EDP);
1813 #if defined(CONFIG_DEBUG_FS)
1814 edp->debugfs_dir = debugfs_create_dir("edp", NULL);
1815 if (IS_ERR(edp->debugfs_dir)) {
1816 dev_err(edp->dev, "failed to create debugfs dir for edp!\n");
1818 debugfs_create_file("dpcd", S_IRUSR, edp->debugfs_dir,
1819 edp, &edp_dpcd_debugfs_fops);
1820 debugfs_create_file("edid", S_IRUSR, edp->debugfs_dir,
1821 edp, &edp_edid_debugfs_fops);
1822 debugfs_create_file("reg", S_IRUSR, edp->debugfs_dir,
1823 edp, &edp_reg_debugfs_fops);
1824 debugfs_create_file("psr", S_IRUSR, edp->debugfs_dir,
1825 edp, &edp_psr_debugfs_fops);
1829 dev_info(&pdev->dev, "rk32 edp driver probe success\n");
1834 static void rk32_edp_shutdown(struct platform_device *pdev)
1838 #if defined(CONFIG_OF)
1839 static const struct of_device_id rk32_edp_dt_ids[] = {
1840 {.compatible = "rockchip,rk32-edp",},
1844 MODULE_DEVICE_TABLE(of, rk32_edp_dt_ids);
1847 static struct platform_driver rk32_edp_driver = {
1848 .probe = rk32_edp_probe,
1851 .owner = THIS_MODULE,
1852 #if defined(CONFIG_OF)
1853 .of_match_table = of_match_ptr(rk32_edp_dt_ids),
1856 .shutdown = rk32_edp_shutdown,
1859 static int __init rk32_edp_module_init(void)
1861 return platform_driver_register(&rk32_edp_driver);
1864 static void __exit rk32_edp_module_exit(void)
1868 fs_initcall(rk32_edp_module_init);
1869 module_exit(rk32_edp_module_exit);