Lines Matching +full:input +full:- +full:depth

1 // SPDX-License-Identifier: GPL-2.0-only
3 * Copyright (c) 2012-2020, The Linux Foundation. All rights reserved.
6 #define pr_fmt(fmt) "[drm-dp] %s: " fmt, __func__
56 if (link->revision < 0x11) in dp_aux_link_power_up()
83 if (link->revision < 0x11) in dp_aux_link_power_down()
107 if (drm_dp_dpcd_readb(link->aux, addr, &data) < 0) { in dp_link_get_period()
109 ret = -EINVAL; in dp_link_get_period()
113 /* Period - Bits 3:0 */ in dp_link_get_period()
117 ret = -EINVAL; in dp_link_get_period()
129 struct dp_link_test_audio *req = &link->dp_link.test_audio; in dp_link_parse_audio_channel_period()
132 if (ret == -EINVAL) in dp_link_parse_audio_channel_period()
135 req->test_audio_period_ch_1 = ret; in dp_link_parse_audio_channel_period()
136 drm_dbg_dp(link->drm_dev, "test_audio_period_ch_1 = 0x%x\n", ret); in dp_link_parse_audio_channel_period()
139 if (ret == -EINVAL) in dp_link_parse_audio_channel_period()
142 req->test_audio_period_ch_2 = ret; in dp_link_parse_audio_channel_period()
143 drm_dbg_dp(link->drm_dev, "test_audio_period_ch_2 = 0x%x\n", ret); in dp_link_parse_audio_channel_period()
147 if (ret == -EINVAL) in dp_link_parse_audio_channel_period()
150 req->test_audio_period_ch_3 = ret; in dp_link_parse_audio_channel_period()
151 drm_dbg_dp(link->drm_dev, "test_audio_period_ch_3 = 0x%x\n", ret); in dp_link_parse_audio_channel_period()
154 if (ret == -EINVAL) in dp_link_parse_audio_channel_period()
157 req->test_audio_period_ch_4 = ret; in dp_link_parse_audio_channel_period()
158 drm_dbg_dp(link->drm_dev, "test_audio_period_ch_4 = 0x%x\n", ret); in dp_link_parse_audio_channel_period()
161 if (ret == -EINVAL) in dp_link_parse_audio_channel_period()
164 req->test_audio_period_ch_5 = ret; in dp_link_parse_audio_channel_period()
165 drm_dbg_dp(link->drm_dev, "test_audio_period_ch_5 = 0x%x\n", ret); in dp_link_parse_audio_channel_period()
168 if (ret == -EINVAL) in dp_link_parse_audio_channel_period()
171 req->test_audio_period_ch_6 = ret; in dp_link_parse_audio_channel_period()
172 drm_dbg_dp(link->drm_dev, "test_audio_period_ch_6 = 0x%x\n", ret); in dp_link_parse_audio_channel_period()
175 if (ret == -EINVAL) in dp_link_parse_audio_channel_period()
178 req->test_audio_period_ch_7 = ret; in dp_link_parse_audio_channel_period()
179 drm_dbg_dp(link->drm_dev, "test_audio_period_ch_7 = 0x%x\n", ret); in dp_link_parse_audio_channel_period()
182 if (ret == -EINVAL) in dp_link_parse_audio_channel_period()
185 req->test_audio_period_ch_8 = ret; in dp_link_parse_audio_channel_period()
186 drm_dbg_dp(link->drm_dev, "test_audio_period_ch_8 = 0x%x\n", ret); in dp_link_parse_audio_channel_period()
198 rlen = drm_dp_dpcd_readb(link->aux, in dp_link_parse_audio_pattern_type()
205 /* Audio Pattern Type - Bits 7:0 */ in dp_link_parse_audio_pattern_type()
208 ret = -EINVAL; in dp_link_parse_audio_pattern_type()
212 link->dp_link.test_audio.test_audio_pattern_type = data; in dp_link_parse_audio_pattern_type()
213 drm_dbg_dp(link->drm_dev, "audio pattern type = 0x%x\n", data); in dp_link_parse_audio_pattern_type()
228 rlen = drm_dp_dpcd_readb(link->aux, DP_TEST_AUDIO_MODE, &data); in dp_link_parse_audio_mode()
234 /* Sampling Rate - Bits 3:0 */ in dp_link_parse_audio_mode()
239 ret = -EINVAL; in dp_link_parse_audio_mode()
243 /* Channel Count - Bits 7:4 */ in dp_link_parse_audio_mode()
248 ret = -EINVAL; in dp_link_parse_audio_mode()
252 link->dp_link.test_audio.test_audio_sampling_rate = sampling_rate; in dp_link_parse_audio_mode()
253 link->dp_link.test_audio.test_audio_channel_count = channel_count; in dp_link_parse_audio_mode()
254 drm_dbg_dp(link->drm_dev, in dp_link_parse_audio_mode()
293 * dp_link_is_bit_depth_valid() - validates the bit depth requested
294 * @tbd: bit depth requested by the sink
296 * Returns true if the requested bit depth is supported.
318 return -EINVAL; in dp_link_parse_timing_params1()
321 rlen = drm_dp_dpcd_read(link->aux, addr, bp, len); in dp_link_parse_timing_params1()
324 return -EINVAL; in dp_link_parse_timing_params1()
340 return -EINVAL; in dp_link_parse_timing_params2()
343 rlen = drm_dp_dpcd_read(link->aux, addr, bp, len); in dp_link_parse_timing_params2()
346 return -EINVAL; in dp_link_parse_timing_params2()
362 rlen = drm_dp_dpcd_read(link->aux, addr, &bp, len); in dp_link_parse_timing_params3()
365 return -EINVAL; in dp_link_parse_timing_params3()
373 * dp_link_parse_video_pattern_params() - parses video pattern parameters from DPCD
377 * bit depth requested by the sink and, and if the values parsed are valid.
385 rlen = drm_dp_dpcd_readb(link->aux, DP_TEST_PATTERN, &bp); in dp_link_parse_video_pattern_params()
394 ret = -EINVAL; in dp_link_parse_video_pattern_params()
398 link->dp_link.test_video.test_video_pattern = bp; in dp_link_parse_video_pattern_params()
400 /* Read the requested color bit depth and dynamic range (Byte 0x232) */ in dp_link_parse_video_pattern_params()
401 rlen = drm_dp_dpcd_readb(link->aux, DP_TEST_MISC0, &bp); in dp_link_parse_video_pattern_params()
403 DRM_ERROR("failed to read link bit depth. rlen=%zd\n", rlen); in dp_link_parse_video_pattern_params()
408 link->dp_link.test_video.test_dyn_range = in dp_link_parse_video_pattern_params()
411 /* Color bit depth */ in dp_link_parse_video_pattern_params()
414 DRM_ERROR("invalid link bit depth = 0x%x\n", bp); in dp_link_parse_video_pattern_params()
415 ret = -EINVAL; in dp_link_parse_video_pattern_params()
419 link->dp_link.test_video.test_bit_depth = bp; in dp_link_parse_video_pattern_params()
423 &link->dp_link.test_video.test_h_total); in dp_link_parse_video_pattern_params()
430 &link->dp_link.test_video.test_v_total); in dp_link_parse_video_pattern_params()
437 &link->dp_link.test_video.test_h_start); in dp_link_parse_video_pattern_params()
444 &link->dp_link.test_video.test_v_start); in dp_link_parse_video_pattern_params()
451 &link->dp_link.test_video.test_hsync_pol, in dp_link_parse_video_pattern_params()
452 &link->dp_link.test_video.test_hsync_width); in dp_link_parse_video_pattern_params()
459 &link->dp_link.test_video.test_vsync_pol, in dp_link_parse_video_pattern_params()
460 &link->dp_link.test_video.test_vsync_width); in dp_link_parse_video_pattern_params()
467 &link->dp_link.test_video.test_h_width); in dp_link_parse_video_pattern_params()
474 &link->dp_link.test_video.test_v_height); in dp_link_parse_video_pattern_params()
481 &link->dp_link.test_video.test_rr_d); in dp_link_parse_video_pattern_params()
482 link->dp_link.test_video.test_rr_d &= DP_TEST_REFRESH_DENOMINATOR; in dp_link_parse_video_pattern_params()
489 &link->dp_link.test_video.test_rr_n); in dp_link_parse_video_pattern_params()
495 drm_dbg_dp(link->drm_dev, in dp_link_parse_video_pattern_params()
498 "link bit depth = 0x%x\n" in dp_link_parse_video_pattern_params()
509 link->dp_link.test_video.test_video_pattern, in dp_link_parse_video_pattern_params()
510 link->dp_link.test_video.test_dyn_range, in dp_link_parse_video_pattern_params()
511 link->dp_link.test_video.test_bit_depth, in dp_link_parse_video_pattern_params()
512 link->dp_link.test_video.test_h_total, in dp_link_parse_video_pattern_params()
513 link->dp_link.test_video.test_v_total, in dp_link_parse_video_pattern_params()
514 link->dp_link.test_video.test_h_start, in dp_link_parse_video_pattern_params()
515 link->dp_link.test_video.test_v_start, in dp_link_parse_video_pattern_params()
516 link->dp_link.test_video.test_hsync_pol, in dp_link_parse_video_pattern_params()
517 link->dp_link.test_video.test_hsync_width, in dp_link_parse_video_pattern_params()
518 link->dp_link.test_video.test_vsync_pol, in dp_link_parse_video_pattern_params()
519 link->dp_link.test_video.test_vsync_width, in dp_link_parse_video_pattern_params()
520 link->dp_link.test_video.test_h_width, in dp_link_parse_video_pattern_params()
521 link->dp_link.test_video.test_v_height, in dp_link_parse_video_pattern_params()
522 link->dp_link.test_video.test_rr_d, in dp_link_parse_video_pattern_params()
523 link->dp_link.test_video.test_rr_n); in dp_link_parse_video_pattern_params()
529 * dp_link_parse_link_training_params() - parses link training parameters from
541 rlen = drm_dp_dpcd_readb(link->aux, DP_TEST_LINK_RATE, &bp); in dp_link_parse_link_training_params()
549 return -EINVAL; in dp_link_parse_link_training_params()
552 link->request.test_link_rate = bp; in dp_link_parse_link_training_params()
553 drm_dbg_dp(link->drm_dev, "link rate = 0x%x\n", in dp_link_parse_link_training_params()
554 link->request.test_link_rate); in dp_link_parse_link_training_params()
556 rlen = drm_dp_dpcd_readb(link->aux, DP_TEST_LANE_COUNT, &bp); in dp_link_parse_link_training_params()
565 return -EINVAL; in dp_link_parse_link_training_params()
568 link->request.test_lane_count = bp; in dp_link_parse_link_training_params()
569 drm_dbg_dp(link->drm_dev, "lane count = 0x%x\n", in dp_link_parse_link_training_params()
570 link->request.test_lane_count); in dp_link_parse_link_training_params()
575 * dp_link_parse_phy_test_params() - parses the phy link parameters
586 rlen = drm_dp_dpcd_readb(link->aux, DP_PHY_TEST_PATTERN, in dp_link_parse_phy_test_params()
593 link->dp_link.phy_params.phy_test_pattern_sel = data & 0x07; in dp_link_parse_phy_test_params()
595 drm_dbg_dp(link->drm_dev, "phy_test_pattern_sel = 0x%x\n", data); in dp_link_parse_phy_test_params()
607 return -EINVAL; in dp_link_parse_phy_test_params()
612 * dp_link_is_video_audio_test_requested() - checks for audio/video link request
628 * dp_link_parse_request() - parses link request parameters from sink
644 rlen = drm_dp_dpcd_readb(link->aux, in dp_link_parse_request()
651 drm_dbg_dp(link->drm_dev, "device service irq vector = 0x%x\n", data); in dp_link_parse_request()
654 drm_dbg_dp(link->drm_dev, "no test requested\n"); in dp_link_parse_request()
662 rlen = drm_dp_dpcd_readb(link->aux, DP_TEST_REQUEST, &data); in dp_link_parse_request()
669 drm_dbg_dp(link->drm_dev, "link 0x%x not supported\n", data); in dp_link_parse_request()
673 drm_dbg_dp(link->drm_dev, "Test:(0x%x) requested\n", data); in dp_link_parse_request()
674 link->request.test_requested = data; in dp_link_parse_request()
675 if (link->request.test_requested == DP_TEST_LINK_PHY_TEST_PATTERN) { in dp_link_parse_request()
684 if (link->request.test_requested == DP_TEST_LINK_TRAINING) { in dp_link_parse_request()
691 link->request.test_requested)) { in dp_link_parse_request()
704 link->dp_link.test_response = DP_TEST_NAK; in dp_link_parse_request()
706 if (link->request.test_requested != DP_TEST_LINK_EDID_READ) in dp_link_parse_request()
707 link->dp_link.test_response = DP_TEST_ACK; in dp_link_parse_request()
709 link->dp_link.test_response = in dp_link_parse_request()
717 * dp_link_parse_sink_count() - parses the sink count
732 rlen = drm_dp_dpcd_readb(link->aux, DP_SINK_COUNT, in dp_link_parse_sink_count()
733 &link->dp_link.sink_count); in dp_link_parse_sink_count()
739 cp_ready = link->dp_link.sink_count & DP_SINK_CP_READY; in dp_link_parse_sink_count()
741 link->dp_link.sink_count = in dp_link_parse_sink_count()
742 DP_GET_SINK_COUNT(link->dp_link.sink_count); in dp_link_parse_sink_count()
744 drm_dbg_dp(link->drm_dev, "sink_count = 0x%x, cp_ready = 0x%x\n", in dp_link_parse_sink_count()
745 link->dp_link.sink_count, cp_ready); in dp_link_parse_sink_count()
753 link->prev_sink_count = link->dp_link.sink_count; in dp_link_parse_sink_status_field()
754 len = dp_link_parse_sink_count(&link->dp_link); in dp_link_parse_sink_status_field()
760 len = drm_dp_dpcd_read_link_status(link->aux, in dp_link_parse_sink_status_field()
761 link->link_status); in dp_link_parse_sink_status_field()
771 * dp_link_process_link_training_request() - processes new training requests
779 * otherwise it will return -EINVAL.
783 if (link->request.test_requested != DP_TEST_LINK_TRAINING) in dp_link_process_link_training_request()
784 return -EINVAL; in dp_link_process_link_training_request()
786 drm_dbg_dp(link->drm_dev, in dp_link_process_link_training_request()
789 link->request.test_link_rate, in dp_link_process_link_training_request()
790 link->request.test_lane_count); in dp_link_process_link_training_request()
792 link->dp_link.link_params.num_lanes = link->request.test_lane_count; in dp_link_process_link_training_request()
793 link->dp_link.link_params.rate = in dp_link_process_link_training_request()
794 drm_dp_bw_code_to_link_rate(link->request.test_link_rate); in dp_link_process_link_training_request()
805 DRM_ERROR("invalid input\n"); in dp_link_send_test_response()
811 ret = drm_dp_dpcd_writeb(link->aux, DP_TEST_RESPONSE, in dp_link_send_test_response()
812 dp_link->test_response); in dp_link_send_test_response()
825 return -EINVAL; in dp_link_psm_config()
830 mutex_lock(&link->psm_mutex); in dp_link_psm_config()
832 ret = dp_aux_link_power_down(link->aux, link_info); in dp_link_psm_config()
834 ret = dp_aux_link_power_up(link->aux, link_info); in dp_link_psm_config()
840 dp_link->psm_enabled = enable; in dp_link_psm_config()
842 mutex_unlock(&link->psm_mutex); in dp_link_psm_config()
852 DRM_ERROR("invalid input\n"); in dp_link_send_edid_checksum()
858 ret = drm_dp_dpcd_writeb(link->aux, DP_TEST_EDID_CHECKSUM, in dp_link_send_edid_checksum()
865 drm_dbg_dp(link->drm_dev, "vx: 0=%d, 1=%d, 2=%d, 3=%d\n", in dp_link_parse_vx_px()
866 drm_dp_get_adjust_request_voltage(link->link_status, 0), in dp_link_parse_vx_px()
867 drm_dp_get_adjust_request_voltage(link->link_status, 1), in dp_link_parse_vx_px()
868 drm_dp_get_adjust_request_voltage(link->link_status, 2), in dp_link_parse_vx_px()
869 drm_dp_get_adjust_request_voltage(link->link_status, 3)); in dp_link_parse_vx_px()
871 drm_dbg_dp(link->drm_dev, "px: 0=%d, 1=%d, 2=%d, 3=%d\n", in dp_link_parse_vx_px()
872 drm_dp_get_adjust_request_pre_emphasis(link->link_status, 0), in dp_link_parse_vx_px()
873 drm_dp_get_adjust_request_pre_emphasis(link->link_status, 1), in dp_link_parse_vx_px()
874 drm_dp_get_adjust_request_pre_emphasis(link->link_status, 2), in dp_link_parse_vx_px()
875 drm_dp_get_adjust_request_pre_emphasis(link->link_status, 3)); in dp_link_parse_vx_px()
878 * Update the voltage and pre-emphasis levels as per DPCD request in dp_link_parse_vx_px()
881 drm_dbg_dp(link->drm_dev, in dp_link_parse_vx_px()
883 link->dp_link.phy_params.v_level, in dp_link_parse_vx_px()
884 link->dp_link.phy_params.p_level); in dp_link_parse_vx_px()
885 link->dp_link.phy_params.v_level = in dp_link_parse_vx_px()
886 drm_dp_get_adjust_request_voltage(link->link_status, 0); in dp_link_parse_vx_px()
887 link->dp_link.phy_params.p_level = in dp_link_parse_vx_px()
888 drm_dp_get_adjust_request_pre_emphasis(link->link_status, 0); in dp_link_parse_vx_px()
890 link->dp_link.phy_params.p_level >>= DP_TRAIN_PRE_EMPHASIS_SHIFT; in dp_link_parse_vx_px()
892 drm_dbg_dp(link->drm_dev, in dp_link_parse_vx_px()
894 link->dp_link.phy_params.v_level, in dp_link_parse_vx_px()
895 link->dp_link.phy_params.p_level); in dp_link_parse_vx_px()
899 * dp_link_process_phy_test_pattern_request() - process new phy link requests
904 * processed, otherwise it will return -EINVAL.
909 if (!(link->request.test_requested & DP_TEST_LINK_PHY_TEST_PATTERN)) { in dp_link_process_phy_test_pattern_request()
910 drm_dbg_dp(link->drm_dev, "no phy test\n"); in dp_link_process_phy_test_pattern_request()
911 return -EINVAL; in dp_link_process_phy_test_pattern_request()
914 if (!is_link_rate_valid(link->request.test_link_rate) || in dp_link_process_phy_test_pattern_request()
915 !is_lane_count_valid(link->request.test_lane_count)) { in dp_link_process_phy_test_pattern_request()
917 link->request.test_link_rate, in dp_link_process_phy_test_pattern_request()
918 link->request.test_lane_count); in dp_link_process_phy_test_pattern_request()
919 return -EINVAL; in dp_link_process_phy_test_pattern_request()
922 drm_dbg_dp(link->drm_dev, in dp_link_process_phy_test_pattern_request()
924 link->dp_link.link_params.rate, in dp_link_process_phy_test_pattern_request()
925 link->dp_link.link_params.num_lanes); in dp_link_process_phy_test_pattern_request()
927 drm_dbg_dp(link->drm_dev, in dp_link_process_phy_test_pattern_request()
929 link->request.test_link_rate, in dp_link_process_phy_test_pattern_request()
930 link->request.test_lane_count); in dp_link_process_phy_test_pattern_request()
932 link->dp_link.link_params.num_lanes = link->request.test_lane_count; in dp_link_process_phy_test_pattern_request()
933 link->dp_link.link_params.rate = in dp_link_process_phy_test_pattern_request()
934 drm_dp_bw_code_to_link_rate(link->request.test_link_rate); in dp_link_process_phy_test_pattern_request()
945 drm_dp_dpcd_read(link->aux, DP_PSR_ERROR_STATUS, &status, 1); in dp_link_read_psr_error_status()
963 drm_dp_dpcd_read(link->aux, DP_PSR_ESI, &status, 1); in dp_link_psr_capability_changed()
966 drm_dbg_dp(link->drm_dev, "PSR Capability Change\n"); in dp_link_psr_capability_changed()
975 return link_status[r - DP_LANE0_1_STATUS]; in get_link_status()
979 * dp_link_process_link_status_update() - processes link status updates
987 * otherwise it will return -EINVAL.
991 bool channel_eq_done = drm_dp_channel_eq_ok(link->link_status, in dp_link_process_link_status_update()
992 link->dp_link.link_params.num_lanes); in dp_link_process_link_status_update()
994 bool clock_recovery_done = drm_dp_clock_recovery_ok(link->link_status, in dp_link_process_link_status_update()
995 link->dp_link.link_params.num_lanes); in dp_link_process_link_status_update()
997 drm_dbg_dp(link->drm_dev, in dp_link_process_link_status_update()
1002 return -EINVAL; in dp_link_process_link_status_update()
1008 * dp_link_process_ds_port_status_change() - process port status changes
1016 * processed, otherwise it will return -EINVAL.
1020 if (get_link_status(link->link_status, DP_LANE_ALIGN_STATUS_UPDATED) & in dp_link_process_ds_port_status_change()
1024 if (link->prev_sink_count == link->dp_link.sink_count) in dp_link_process_ds_port_status_change()
1025 return -EINVAL; in dp_link_process_ds_port_status_change()
1029 link->prev_sink_count = link->dp_link.sink_count; in dp_link_process_ds_port_status_change()
1036 return (link->request.test_requested & DP_TEST_LINK_VIDEO_PATTERN) in dp_link_is_video_pattern_requested()
1037 && !(link->request.test_requested & in dp_link_is_video_pattern_requested()
1043 return (link->request.test_requested & DP_TEST_LINK_AUDIO_PATTERN); in dp_link_is_audio_pattern_requested()
1048 link->request = (const struct dp_link_request){ 0 }; in dp_link_reset_data()
1049 link->dp_link.test_video = (const struct dp_link_test_video){ 0 }; in dp_link_reset_data()
1050 link->dp_link.test_video.test_bit_depth = DP_TEST_BIT_DEPTH_UNKNOWN; in dp_link_reset_data()
1051 link->dp_link.test_audio = (const struct dp_link_test_audio){ 0 }; in dp_link_reset_data()
1052 link->dp_link.phy_params.phy_test_pattern_sel = 0; in dp_link_reset_data()
1053 link->dp_link.sink_request = 0; in dp_link_reset_data()
1054 link->dp_link.test_response = 0; in dp_link_reset_data()
1058 * dp_link_process_request() - handle HPD IRQ transition to HIGH
1071 DRM_ERROR("invalid input\n"); in dp_link_process_request()
1072 return -EINVAL; in dp_link_process_request()
1083 if (link->request.test_requested == DP_TEST_LINK_EDID_READ) { in dp_link_process_request()
1084 dp_link->sink_request |= DP_TEST_LINK_EDID_READ; in dp_link_process_request()
1086 dp_link->sink_request |= DS_PORT_STATUS_CHANGED; in dp_link_process_request()
1088 dp_link->sink_request |= DP_TEST_LINK_TRAINING; in dp_link_process_request()
1090 dp_link->sink_request |= DP_TEST_LINK_PHY_TEST_PATTERN; in dp_link_process_request()
1094 drm_dbg_dp(link->drm_dev, "PSR Capability changed\n"); in dp_link_process_request()
1098 dp_link->sink_request |= DP_LINK_STATUS_UPDATED; in dp_link_process_request()
1102 dp_link->sink_request |= DP_TEST_LINK_VIDEO_PATTERN; in dp_link_process_request()
1105 dp_link->sink_request |= DP_TEST_LINK_AUDIO_PATTERN; in dp_link_process_request()
1106 ret = -EINVAL; in dp_link_process_request()
1111 drm_dbg_dp(link->drm_dev, "sink request=%#x\n", in dp_link_process_request()
1112 dp_link->sink_request); in dp_link_process_request()
1122 DRM_ERROR("invalid input\n"); in dp_link_get_colorimetry_config()
1123 return -EINVAL; in dp_link_get_colorimetry_config()
1133 if (link->dp_link.test_video.test_dyn_range & in dp_link_get_colorimetry_config()
1149 DRM_ERROR("invalid input\n"); in dp_link_adjust_levels()
1150 return -EINVAL; in dp_link_adjust_levels()
1156 for (i = 0; i < dp_link->link_params.num_lanes; i++) { in dp_link_adjust_levels()
1160 drm_dbg_dp(link->drm_dev, in dp_link_adjust_levels()
1169 dp_link->phy_params.v_level = v_max >> DP_TRAIN_VOLTAGE_SWING_SHIFT; in dp_link_adjust_levels()
1170 dp_link->phy_params.p_level = p_max >> DP_TRAIN_PRE_EMPHASIS_SHIFT; in dp_link_adjust_levels()
1173 * Adjust the voltage swing and pre-emphasis level combination to within in dp_link_adjust_levels()
1176 if (dp_link->phy_params.v_level > DP_TRAIN_LEVEL_MAX) { in dp_link_adjust_levels()
1177 drm_dbg_dp(link->drm_dev, in dp_link_adjust_levels()
1179 dp_link->phy_params.v_level, in dp_link_adjust_levels()
1181 dp_link->phy_params.v_level = DP_TRAIN_LEVEL_MAX; in dp_link_adjust_levels()
1184 if (dp_link->phy_params.p_level > DP_TRAIN_LEVEL_MAX) { in dp_link_adjust_levels()
1185 drm_dbg_dp(link->drm_dev, in dp_link_adjust_levels()
1187 dp_link->phy_params.p_level, in dp_link_adjust_levels()
1189 dp_link->phy_params.p_level = DP_TRAIN_LEVEL_MAX; in dp_link_adjust_levels()
1192 max_p_level = DP_TRAIN_LEVEL_MAX - dp_link->phy_params.v_level; in dp_link_adjust_levels()
1193 if (dp_link->phy_params.p_level > max_p_level) { in dp_link_adjust_levels()
1194 drm_dbg_dp(link->drm_dev, in dp_link_adjust_levels()
1196 dp_link->phy_params.p_level, in dp_link_adjust_levels()
1198 dp_link->phy_params.p_level = max_p_level; in dp_link_adjust_levels()
1201 drm_dbg_dp(link->drm_dev, "adjusted: v_level=%d, p_level=%d\n", in dp_link_adjust_levels()
1202 dp_link->phy_params.v_level, dp_link->phy_params.p_level); in dp_link_adjust_levels()
1209 dp_link->phy_params.v_level = 0; in dp_link_reset_phy_params_vx_px()
1210 dp_link->phy_params.p_level = 0; in dp_link_reset_phy_params_vx_px()
1222 * 1. Test bit depth is bit depth per color component in dp_link_get_test_bits_depth()
1236 drm_dbg_dp(link->drm_dev, "bpp=%d not supported, use bpc=8\n", in dp_link_get_test_bits_depth()
1253 DRM_ERROR("invalid input\n"); in dp_link_get()
1254 return ERR_PTR(-EINVAL); in dp_link_get()
1259 return ERR_PTR(-ENOMEM); in dp_link_get()
1261 link->dev = dev; in dp_link_get()
1262 link->aux = aux; in dp_link_get()
1264 mutex_init(&link->psm_mutex); in dp_link_get()
1265 dp_link = &link->dp_link; in dp_link_get()