xref: /openbmc/linux/drivers/gpu/drm/msm/dp/dp_link.h (revision 554484e4)
1c943b494SChandan Uddaraju /* SPDX-License-Identifier: GPL-2.0-only */
2c943b494SChandan Uddaraju /*
3c943b494SChandan Uddaraju  * Copyright (c) 2012-2020, The Linux Foundation. All rights reserved.
4c943b494SChandan Uddaraju  */
5c943b494SChandan Uddaraju 
6c943b494SChandan Uddaraju #ifndef _DP_LINK_H_
7c943b494SChandan Uddaraju #define _DP_LINK_H_
8c943b494SChandan Uddaraju 
9c943b494SChandan Uddaraju #include "dp_aux.h"
10c943b494SChandan Uddaraju 
11c943b494SChandan Uddaraju #define DS_PORT_STATUS_CHANGED 0x200
12c943b494SChandan Uddaraju #define DP_TEST_BIT_DEPTH_UNKNOWN 0xFFFFFFFF
13c943b494SChandan Uddaraju #define DP_LINK_CAP_ENHANCED_FRAMING (1 << 0)
14c943b494SChandan Uddaraju 
15c943b494SChandan Uddaraju struct dp_link_info {
16c943b494SChandan Uddaraju 	unsigned char revision;
17c943b494SChandan Uddaraju 	unsigned int rate;
18c943b494SChandan Uddaraju 	unsigned int num_lanes;
19c943b494SChandan Uddaraju 	unsigned long capabilities;
20c943b494SChandan Uddaraju };
21c943b494SChandan Uddaraju 
22554484e4SDmitry Baryshkov #define DP_TRAIN_LEVEL_MAX	3
23c943b494SChandan Uddaraju 
24c943b494SChandan Uddaraju struct dp_link_test_video {
25c943b494SChandan Uddaraju 	u32 test_video_pattern;
26c943b494SChandan Uddaraju 	u32 test_bit_depth;
27c943b494SChandan Uddaraju 	u32 test_dyn_range;
28c943b494SChandan Uddaraju 	u32 test_h_total;
29c943b494SChandan Uddaraju 	u32 test_v_total;
30c943b494SChandan Uddaraju 	u32 test_h_start;
31c943b494SChandan Uddaraju 	u32 test_v_start;
32c943b494SChandan Uddaraju 	u32 test_hsync_pol;
33c943b494SChandan Uddaraju 	u32 test_hsync_width;
34c943b494SChandan Uddaraju 	u32 test_vsync_pol;
35c943b494SChandan Uddaraju 	u32 test_vsync_width;
36c943b494SChandan Uddaraju 	u32 test_h_width;
37c943b494SChandan Uddaraju 	u32 test_v_height;
38c943b494SChandan Uddaraju 	u32 test_rr_d;
39c943b494SChandan Uddaraju 	u32 test_rr_n;
40c943b494SChandan Uddaraju };
41c943b494SChandan Uddaraju 
42c943b494SChandan Uddaraju struct dp_link_test_audio {
43c943b494SChandan Uddaraju 	u32 test_audio_sampling_rate;
44c943b494SChandan Uddaraju 	u32 test_audio_channel_count;
45c943b494SChandan Uddaraju 	u32 test_audio_pattern_type;
46c943b494SChandan Uddaraju 	u32 test_audio_period_ch_1;
47c943b494SChandan Uddaraju 	u32 test_audio_period_ch_2;
48c943b494SChandan Uddaraju 	u32 test_audio_period_ch_3;
49c943b494SChandan Uddaraju 	u32 test_audio_period_ch_4;
50c943b494SChandan Uddaraju 	u32 test_audio_period_ch_5;
51c943b494SChandan Uddaraju 	u32 test_audio_period_ch_6;
52c943b494SChandan Uddaraju 	u32 test_audio_period_ch_7;
53c943b494SChandan Uddaraju 	u32 test_audio_period_ch_8;
54c943b494SChandan Uddaraju };
55c943b494SChandan Uddaraju 
56c943b494SChandan Uddaraju struct dp_link_phy_params {
57c943b494SChandan Uddaraju 	u32 phy_test_pattern_sel;
58c943b494SChandan Uddaraju 	u8 v_level;
59c943b494SChandan Uddaraju 	u8 p_level;
60c943b494SChandan Uddaraju };
61c943b494SChandan Uddaraju 
62c943b494SChandan Uddaraju struct dp_link {
63c943b494SChandan Uddaraju 	u32 sink_request;
64c943b494SChandan Uddaraju 	u32 test_response;
65c943b494SChandan Uddaraju 	bool psm_enabled;
66c943b494SChandan Uddaraju 
67c943b494SChandan Uddaraju 	u8 sink_count;
68c943b494SChandan Uddaraju 	struct dp_link_test_video test_video;
69c943b494SChandan Uddaraju 	struct dp_link_test_audio test_audio;
70c943b494SChandan Uddaraju 	struct dp_link_phy_params phy_params;
71c943b494SChandan Uddaraju 	struct dp_link_info link_params;
72c943b494SChandan Uddaraju };
73c943b494SChandan Uddaraju 
74c943b494SChandan Uddaraju /**
75c943b494SChandan Uddaraju  * mdss_dp_test_bit_depth_to_bpp() - convert test bit depth to bpp
76c943b494SChandan Uddaraju  * @tbd: test bit depth
77c943b494SChandan Uddaraju  *
78c943b494SChandan Uddaraju  * Returns the bits per pixel (bpp) to be used corresponding to the
79c943b494SChandan Uddaraju  * git bit depth value. This function assumes that bit depth has
80c943b494SChandan Uddaraju  * already been validated.
81c943b494SChandan Uddaraju  */
dp_link_bit_depth_to_bpp(u32 tbd)82c943b494SChandan Uddaraju static inline u32 dp_link_bit_depth_to_bpp(u32 tbd)
83c943b494SChandan Uddaraju {
84c943b494SChandan Uddaraju 	/*
85c943b494SChandan Uddaraju 	 * Few simplistic rules and assumptions made here:
86c943b494SChandan Uddaraju 	 *    1. Bit depth is per color component
87c943b494SChandan Uddaraju 	 *    2. If bit depth is unknown return 0
88c943b494SChandan Uddaraju 	 *    3. Assume 3 color components
89c943b494SChandan Uddaraju 	 */
90c943b494SChandan Uddaraju 	switch (tbd) {
91c943b494SChandan Uddaraju 	case DP_TEST_BIT_DEPTH_6:
92c943b494SChandan Uddaraju 		return 18;
93c943b494SChandan Uddaraju 	case DP_TEST_BIT_DEPTH_8:
94c943b494SChandan Uddaraju 		return 24;
95c943b494SChandan Uddaraju 	case DP_TEST_BIT_DEPTH_10:
96c943b494SChandan Uddaraju 		return 30;
97c943b494SChandan Uddaraju 	case DP_TEST_BIT_DEPTH_UNKNOWN:
98c943b494SChandan Uddaraju 	default:
99c943b494SChandan Uddaraju 		return 0;
100c943b494SChandan Uddaraju 	}
101c943b494SChandan Uddaraju }
102c943b494SChandan Uddaraju 
103de3ee254SAbhinav Kumar /**
104de3ee254SAbhinav Kumar  * dp_test_bit_depth_to_bpc() - convert test bit depth to bpc
105de3ee254SAbhinav Kumar  * @tbd: test bit depth
106de3ee254SAbhinav Kumar  *
107de3ee254SAbhinav Kumar  * Returns the bits per comp (bpc) to be used corresponding to the
108de3ee254SAbhinav Kumar  * bit depth value. This function assumes that bit depth has
109de3ee254SAbhinav Kumar  * already been validated.
110de3ee254SAbhinav Kumar  */
dp_link_bit_depth_to_bpc(u32 tbd)111de3ee254SAbhinav Kumar static inline u32 dp_link_bit_depth_to_bpc(u32 tbd)
112de3ee254SAbhinav Kumar {
113de3ee254SAbhinav Kumar 	switch (tbd) {
114de3ee254SAbhinav Kumar 	case DP_TEST_BIT_DEPTH_6:
115de3ee254SAbhinav Kumar 		return 6;
116de3ee254SAbhinav Kumar 	case DP_TEST_BIT_DEPTH_8:
117de3ee254SAbhinav Kumar 		return 8;
118de3ee254SAbhinav Kumar 	case DP_TEST_BIT_DEPTH_10:
119de3ee254SAbhinav Kumar 		return 10;
120de3ee254SAbhinav Kumar 	case DP_TEST_BIT_DEPTH_UNKNOWN:
121de3ee254SAbhinav Kumar 	default:
122de3ee254SAbhinav Kumar 		return 0;
123de3ee254SAbhinav Kumar 	}
124de3ee254SAbhinav Kumar }
125de3ee254SAbhinav Kumar 
1266625e263STanmay Shah void dp_link_reset_phy_params_vx_px(struct dp_link *dp_link);
127c943b494SChandan Uddaraju u32 dp_link_get_test_bits_depth(struct dp_link *dp_link, u32 bpp);
128c943b494SChandan Uddaraju int dp_link_process_request(struct dp_link *dp_link);
129c943b494SChandan Uddaraju int dp_link_get_colorimetry_config(struct dp_link *dp_link);
130c943b494SChandan Uddaraju int dp_link_adjust_levels(struct dp_link *dp_link, u8 *link_status);
131c943b494SChandan Uddaraju bool dp_link_send_test_response(struct dp_link *dp_link);
132c943b494SChandan Uddaraju int dp_link_psm_config(struct dp_link *dp_link,
133c943b494SChandan Uddaraju 		struct dp_link_info *link_info, bool enable);
134c943b494SChandan Uddaraju bool dp_link_send_edid_checksum(struct dp_link *dp_link, u8 checksum);
135c943b494SChandan Uddaraju 
136c943b494SChandan Uddaraju /**
137c943b494SChandan Uddaraju  * dp_link_get() - get the functionalities of dp test module
138c943b494SChandan Uddaraju  *
139c943b494SChandan Uddaraju  *
140c943b494SChandan Uddaraju  * return: a pointer to dp_link struct
141c943b494SChandan Uddaraju  */
142c943b494SChandan Uddaraju struct dp_link *dp_link_get(struct device *dev, struct drm_dp_aux *aux);
143c943b494SChandan Uddaraju 
144c943b494SChandan Uddaraju #endif /* _DP_LINK_H_ */
145