xref: /rk3399_rockchip-uboot/drivers/video/drm/analogix_dp.h (revision f05ce84792cbd2e5573a414010d421eb8fbb7689)
1 /*
2  * (C) Copyright 2008-2017 Fuzhou Rockchip Electronics Co., Ltd
3  *
4  * SPDX-License-Identifier:	GPL-2.0+
5  */
6 
7 #ifndef __DRM_ANALOGIX_DP_H__
8 #define __DRM_ANALOGIX_DP_H__
9 
10 /*
11  * Unless otherwise noted, all values are from the DP 1.1a spec.  Note that
12  * DP and DPCD versions are independent.  Differences from 1.0 are not noted,
13  * 1.0 devices basically don't exist in the wild.
14  *
15  * Abbreviations, in chronological order:
16  *
17  * eDP: Embedded DisplayPort version 1
18  * DPI: DisplayPort Interoperability Guideline v1.1a
19  * 1.2: DisplayPort 1.2
20  * MST: Multistream Transport - part of DP 1.2a
21  *
22  * 1.2 formally includes both eDP and DPI definitions.
23  */
24 
25 #define DP_AUX_MAX_PAYLOAD_BYTES	16
26 
27 #define DP_AUX_I2C_WRITE		0x0
28 #define DP_AUX_I2C_READ			0x1
29 #define DP_AUX_I2C_WRITE_STATUS_UPDATE	0x2
30 #define DP_AUX_I2C_MOT			0x4
31 #define DP_AUX_NATIVE_WRITE		0x8
32 #define DP_AUX_NATIVE_READ		0x9
33 
34 #define DP_AUX_NATIVE_REPLY_ACK		(0x0 << 0)
35 #define DP_AUX_NATIVE_REPLY_NACK	(0x1 << 0)
36 #define DP_AUX_NATIVE_REPLY_DEFER	(0x2 << 0)
37 #define DP_AUX_NATIVE_REPLY_MASK	(0x3 << 0)
38 
39 #define DP_AUX_I2C_REPLY_ACK		(0x0 << 2)
40 #define DP_AUX_I2C_REPLY_NACK		(0x1 << 2)
41 #define DP_AUX_I2C_REPLY_DEFER		(0x2 << 2)
42 #define DP_AUX_I2C_REPLY_MASK		(0x3 << 2)
43 
44 /* AUX CH addresses */
45 /* DPCD */
46 #define DP_DPCD_REV                         0x000
47 
48 #define DP_MAX_LINK_RATE                    0x001
49 
50 #define DP_MAX_LANE_COUNT                   0x002
51 # define DP_MAX_LANE_COUNT_MASK		    0x1f
52 # define DP_TPS3_SUPPORTED		    (1 << 6) /* 1.2 */
53 # define DP_ENHANCED_FRAME_CAP		    (1 << 7)
54 
55 #define DP_MAX_DOWNSPREAD                   0x003
56 # define DP_NO_AUX_HANDSHAKE_LINK_TRAINING  (1 << 6)
57 
58 #define DP_NORP                             0x004
59 
60 #define DP_DOWNSTREAMPORT_PRESENT           0x005
61 # define DP_DWN_STRM_PORT_PRESENT           (1 << 0)
62 # define DP_DWN_STRM_PORT_TYPE_MASK         0x06
63 # define DP_DWN_STRM_PORT_TYPE_DP           (0 << 1)
64 # define DP_DWN_STRM_PORT_TYPE_ANALOG       (1 << 1)
65 # define DP_DWN_STRM_PORT_TYPE_TMDS         (2 << 1)
66 # define DP_DWN_STRM_PORT_TYPE_OTHER        (3 << 1)
67 # define DP_FORMAT_CONVERSION               (1 << 3)
68 # define DP_DETAILED_CAP_INFO_AVAILABLE	    (1 << 4) /* DPI */
69 
70 #define DP_MAIN_LINK_CHANNEL_CODING         0x006
71 
72 #define DP_DOWN_STREAM_PORT_COUNT	    0x007
73 # define DP_PORT_COUNT_MASK		    0x0f
74 # define DP_MSA_TIMING_PAR_IGNORED	    (1 << 6) /* eDP */
75 # define DP_OUI_SUPPORT			    (1 << 7)
76 
77 #define DP_RECEIVE_PORT_0_CAP_0		    0x008
78 # define DP_LOCAL_EDID_PRESENT		    (1 << 1)
79 # define DP_ASSOCIATED_TO_PRECEDING_PORT    (1 << 2)
80 
81 #define DP_RECEIVE_PORT_0_BUFFER_SIZE	    0x009
82 
83 #define DP_RECEIVE_PORT_1_CAP_0		    0x00a
84 #define DP_RECEIVE_PORT_1_BUFFER_SIZE       0x00b
85 
86 #define DP_I2C_SPEED_CAP		    0x00c    /* DPI */
87 # define DP_I2C_SPEED_1K		    0x01
88 # define DP_I2C_SPEED_5K		    0x02
89 # define DP_I2C_SPEED_10K		    0x04
90 # define DP_I2C_SPEED_100K		    0x08
91 # define DP_I2C_SPEED_400K		    0x10
92 # define DP_I2C_SPEED_1M		    0x20
93 
94 #define DP_EDP_CONFIGURATION_CAP            0x00d   /* XXX 1.2? */
95 # define DP_ALTERNATE_SCRAMBLER_RESET_CAP   (1 << 0)
96 # define DP_FRAMING_CHANGE_CAP		    (1 << 1)
97 # define DP_DPCD_DISPLAY_CONTROL_CAPABLE     (1 << 3) /* edp v1.2 or higher */
98 
99 #define DP_TRAINING_AUX_RD_INTERVAL         0x00e   /* XXX 1.2? */
100 
101 #define DP_ADAPTER_CAP			    0x00f   /* 1.2 */
102 # define DP_FORCE_LOAD_SENSE_CAP	    (1 << 0)
103 # define DP_ALTERNATE_I2C_PATTERN_CAP	    (1 << 1)
104 
105 #define DP_SUPPORTED_LINK_RATES		    0x010 /* eDP 1.4 */
106 # define DP_MAX_SUPPORTED_RATES		     8	    /* 16-bit little-endian */
107 
108 /* Multiple stream transport */
109 #define DP_FAUX_CAP			    0x020   /* 1.2 */
110 # define DP_FAUX_CAP_1			    (1 << 0)
111 
112 #define DP_MSTM_CAP			    0x021   /* 1.2 */
113 # define DP_MST_CAP			    (1 << 0)
114 
115 #define DP_NUMBER_OF_AUDIO_ENDPOINTS	    0x022   /* 1.2 */
116 
117 /* AV_SYNC_DATA_BLOCK                                  1.2 */
118 #define DP_AV_GRANULARITY		    0x023
119 # define DP_AG_FACTOR_MASK		    (0xf << 0)
120 # define DP_AG_FACTOR_3MS		    (0 << 0)
121 # define DP_AG_FACTOR_2MS		    (1 << 0)
122 # define DP_AG_FACTOR_1MS		    (2 << 0)
123 # define DP_AG_FACTOR_500US		    (3 << 0)
124 # define DP_AG_FACTOR_200US		    (4 << 0)
125 # define DP_AG_FACTOR_100US		    (5 << 0)
126 # define DP_AG_FACTOR_10US		    (6 << 0)
127 # define DP_AG_FACTOR_1US		    (7 << 0)
128 # define DP_VG_FACTOR_MASK		    (0xf << 4)
129 # define DP_VG_FACTOR_3MS		    (0 << 4)
130 # define DP_VG_FACTOR_2MS		    (1 << 4)
131 # define DP_VG_FACTOR_1MS		    (2 << 4)
132 # define DP_VG_FACTOR_500US		    (3 << 4)
133 # define DP_VG_FACTOR_200US		    (4 << 4)
134 # define DP_VG_FACTOR_100US		    (5 << 4)
135 
136 #define DP_AUD_DEC_LAT0			    0x024
137 #define DP_AUD_DEC_LAT1			    0x025
138 
139 #define DP_AUD_PP_LAT0			    0x026
140 #define DP_AUD_PP_LAT1			    0x027
141 
142 #define DP_VID_INTER_LAT		    0x028
143 
144 #define DP_VID_PROG_LAT			    0x029
145 
146 #define DP_REP_LAT			    0x02a
147 
148 #define DP_AUD_DEL_INS0			    0x02b
149 #define DP_AUD_DEL_INS1			    0x02c
150 #define DP_AUD_DEL_INS2			    0x02d
151 /* End of AV_SYNC_DATA_BLOCK */
152 
153 #define DP_RECEIVER_ALPM_CAP		    0x02e   /* eDP 1.4 */
154 # define DP_ALPM_CAP			    (1 << 0)
155 
156 #define DP_SINK_DEVICE_AUX_FRAME_SYNC_CAP   0x02f   /* eDP 1.4 */
157 # define DP_AUX_FRAME_SYNC_CAP		    (1 << 0)
158 
159 #define DP_GUID				    0x030   /* 1.2 */
160 
161 #define DP_PSR_SUPPORT                      0x070   /* XXX 1.2? */
162 # define DP_PSR_IS_SUPPORTED                1
163 # define DP_PSR2_IS_SUPPORTED		    2	    /* eDP 1.4 */
164 
165 #define DP_PSR_CAPS                         0x071   /* XXX 1.2? */
166 # define DP_PSR_NO_TRAIN_ON_EXIT            1
167 # define DP_PSR_SETUP_TIME_330              (0 << 1)
168 # define DP_PSR_SETUP_TIME_275              (1 << 1)
169 # define DP_PSR_SETUP_TIME_220              (2 << 1)
170 # define DP_PSR_SETUP_TIME_165              (3 << 1)
171 # define DP_PSR_SETUP_TIME_110              (4 << 1)
172 # define DP_PSR_SETUP_TIME_55               (5 << 1)
173 # define DP_PSR_SETUP_TIME_0                (6 << 1)
174 # define DP_PSR_SETUP_TIME_MASK             (7 << 1)
175 # define DP_PSR_SETUP_TIME_SHIFT            1
176 
177 /*
178  * 0x80-0x8f describe downstream port capabilities, but there are two layouts
179  * based on whether DP_DETAILED_CAP_INFO_AVAILABLE was set.  If it was not,
180  * each port's descriptor is one byte wide.  If it was set, each port's is
181  * four bytes wide, starting with the one byte from the base info.  As of
182  * DP interop v1.1a only VGA defines additional detail.
183  */
184 
185 /* offset 0 */
186 #define DP_DOWNSTREAM_PORT_0		    0x80
187 # define DP_DS_PORT_TYPE_MASK		    (7 << 0)
188 # define DP_DS_PORT_TYPE_DP		    0
189 # define DP_DS_PORT_TYPE_VGA		    1
190 # define DP_DS_PORT_TYPE_DVI		    2
191 # define DP_DS_PORT_TYPE_HDMI		    3
192 # define DP_DS_PORT_TYPE_NON_EDID	    4
193 # define DP_DS_PORT_HPD			    (1 << 3)
194 /* offset 1 for VGA is maximum megapixels per second / 8 */
195 /* offset 2 */
196 # define DP_DS_VGA_MAX_BPC_MASK		    (3 << 0)
197 # define DP_DS_VGA_8BPC			    0
198 # define DP_DS_VGA_10BPC		    1
199 # define DP_DS_VGA_12BPC		    2
200 # define DP_DS_VGA_16BPC		    3
201 
202 /* link configuration */
203 #define	DP_LINK_BW_SET		            0x100
204 # define DP_LINK_RATE_TABLE		    0x00    /* eDP 1.4 */
205 # define DP_LINK_BW_1_62		    0x06
206 # define DP_LINK_BW_2_7			    0x0a
207 # define DP_LINK_BW_5_4			    0x14    /* 1.2 */
208 
209 #define DP_LANE_COUNT_SET	            0x101
210 # define DP_LANE_COUNT_MASK		    0x0f
211 # define DP_LANE_COUNT_ENHANCED_FRAME_EN    (1 << 7)
212 
213 #define DP_TRAINING_PATTERN_SET	            0x102
214 # define DP_TRAINING_PATTERN_DISABLE	    0
215 # define DP_TRAINING_PATTERN_1		    1
216 # define DP_TRAINING_PATTERN_2		    2
217 # define DP_TRAINING_PATTERN_3		    3	    /* 1.2 */
218 # define DP_TRAINING_PATTERN_MASK	    0x3
219 
220 /* DPCD 1.1 only. For DPCD >= 1.2 see per-lane DP_LINK_QUAL_LANEn_SET */
221 # define DP_LINK_QUAL_PATTERN_11_DISABLE    (0 << 2)
222 # define DP_LINK_QUAL_PATTERN_11_D10_2	    (1 << 2)
223 # define DP_LINK_QUAL_PATTERN_11_ERROR_RATE (2 << 2)
224 # define DP_LINK_QUAL_PATTERN_11_PRBS7	    (3 << 2)
225 # define DP_LINK_QUAL_PATTERN_11_MASK	    (3 << 2)
226 
227 # define DP_RECOVERED_CLOCK_OUT_EN	    (1 << 4)
228 # define DP_LINK_SCRAMBLING_DISABLE	    (1 << 5)
229 
230 # define DP_SYMBOL_ERROR_COUNT_BOTH	    (0 << 6)
231 # define DP_SYMBOL_ERROR_COUNT_DISPARITY    (1 << 6)
232 # define DP_SYMBOL_ERROR_COUNT_SYMBOL	    (2 << 6)
233 # define DP_SYMBOL_ERROR_COUNT_MASK	    (3 << 6)
234 
235 #define DP_TRAINING_LANE0_SET		    0x103
236 #define DP_TRAINING_LANE1_SET		    0x104
237 #define DP_TRAINING_LANE2_SET		    0x105
238 #define DP_TRAINING_LANE3_SET		    0x106
239 
240 # define DP_TRAIN_VOLTAGE_SWING_MASK	    0x3
241 # define DP_TRAIN_VOLTAGE_SWING_SHIFT	    0
242 # define DP_TRAIN_MAX_SWING_REACHED	    (1 << 2)
243 # define DP_TRAIN_VOLTAGE_SWING_LEVEL_0 (0 << 0)
244 # define DP_TRAIN_VOLTAGE_SWING_LEVEL_1 (1 << 0)
245 # define DP_TRAIN_VOLTAGE_SWING_LEVEL_2 (2 << 0)
246 # define DP_TRAIN_VOLTAGE_SWING_LEVEL_3 (3 << 0)
247 
248 # define DP_TRAIN_PRE_EMPHASIS_MASK	    (3 << 3)
249 # define DP_TRAIN_PRE_EMPH_LEVEL_0		(0 << 3)
250 # define DP_TRAIN_PRE_EMPH_LEVEL_1		(1 << 3)
251 # define DP_TRAIN_PRE_EMPH_LEVEL_2		(2 << 3)
252 # define DP_TRAIN_PRE_EMPH_LEVEL_3		(3 << 3)
253 
254 # define DP_TRAIN_PRE_EMPHASIS_SHIFT	    3
255 # define DP_TRAIN_MAX_PRE_EMPHASIS_REACHED  (1 << 5)
256 
257 #define DP_DOWNSPREAD_CTRL		    0x107
258 # define DP_SPREAD_AMP_0_5		    (1 << 4)
259 # define DP_MSA_TIMING_PAR_IGNORE_EN	    (1 << 7) /* eDP */
260 
261 #define DP_MAIN_LINK_CHANNEL_CODING_SET	    0x108
262 # define DP_SET_ANSI_8B10B		    (1 << 0)
263 
264 #define DP_I2C_SPEED_CONTROL_STATUS	    0x109   /* DPI */
265 /* bitmask as for DP_I2C_SPEED_CAP */
266 
267 #define DP_EDP_CONFIGURATION_SET            0x10a   /* XXX 1.2? */
268 # define DP_ALTERNATE_SCRAMBLER_RESET_ENABLE (1 << 0)
269 # define DP_FRAMING_CHANGE_ENABLE	    (1 << 1)
270 # define DP_PANEL_SELF_TEST_ENABLE	    (1 << 7)
271 
272 #define DP_LINK_QUAL_LANE0_SET		    0x10b   /* DPCD >= 1.2 */
273 #define DP_LINK_QUAL_LANE1_SET		    0x10c
274 #define DP_LINK_QUAL_LANE2_SET		    0x10d
275 #define DP_LINK_QUAL_LANE3_SET		    0x10e
276 # define DP_LINK_QUAL_PATTERN_DISABLE	    0
277 # define DP_LINK_QUAL_PATTERN_D10_2	    1
278 # define DP_LINK_QUAL_PATTERN_ERROR_RATE    2
279 # define DP_LINK_QUAL_PATTERN_PRBS7	    3
280 # define DP_LINK_QUAL_PATTERN_80BIT_CUSTOM  4
281 # define DP_LINK_QUAL_PATTERN_HBR2_EYE      5
282 # define DP_LINK_QUAL_PATTERN_MASK	    7
283 
284 #define DP_TRAINING_LANE0_1_SET2	    0x10f
285 #define DP_TRAINING_LANE2_3_SET2	    0x110
286 # define DP_LANE02_POST_CURSOR2_SET_MASK    (3 << 0)
287 # define DP_LANE02_MAX_POST_CURSOR2_REACHED (1 << 2)
288 # define DP_LANE13_POST_CURSOR2_SET_MASK    (3 << 4)
289 # define DP_LANE13_MAX_POST_CURSOR2_REACHED (1 << 6)
290 
291 #define DP_MSTM_CTRL			    0x111   /* 1.2 */
292 # define DP_MST_EN			    (1 << 0)
293 # define DP_UP_REQ_EN			    (1 << 1)
294 # define DP_UPSTREAM_IS_SRC		    (1 << 2)
295 
296 #define DP_AUDIO_DELAY0			    0x112   /* 1.2 */
297 #define DP_AUDIO_DELAY1			    0x113
298 #define DP_AUDIO_DELAY2			    0x114
299 
300 #define DP_LINK_RATE_SET		    0x115   /* eDP 1.4 */
301 # define DP_LINK_RATE_SET_SHIFT		    0
302 # define DP_LINK_RATE_SET_MASK		    (7 << 0)
303 
304 #define DP_RECEIVER_ALPM_CONFIG		    0x116   /* eDP 1.4 */
305 # define DP_ALPM_ENABLE			    (1 << 0)
306 # define DP_ALPM_LOCK_ERROR_IRQ_HPD_ENABLE  (1 << 1)
307 
308 #define DP_SINK_DEVICE_AUX_FRAME_SYNC_CONF  0x117   /* eDP 1.4 */
309 # define DP_AUX_FRAME_SYNC_ENABLE	    (1 << 0)
310 # define DP_IRQ_HPD_ENABLE		    (1 << 1)
311 
312 #define DP_UPSTREAM_DEVICE_DP_PWR_NEED	    0x118   /* 1.2 */
313 # define DP_PWR_NOT_NEEDED		    (1 << 0)
314 
315 #define DP_AUX_FRAME_SYNC_VALUE		    0x15c   /* eDP 1.4 */
316 # define DP_AUX_FRAME_SYNC_VALID	    (1 << 0)
317 
318 #define DP_PSR_EN_CFG			    0x170   /* XXX 1.2? */
319 # define DP_PSR_ENABLE			    (1 << 0)
320 # define DP_PSR_MAIN_LINK_ACTIVE	    (1 << 1)
321 # define DP_PSR_CRC_VERIFICATION	    (1 << 2)
322 # define DP_PSR_FRAME_CAPTURE		    (1 << 3)
323 # define DP_PSR_SELECTIVE_UPDATE	    (1 << 4)
324 # define DP_PSR_IRQ_HPD_WITH_CRC_ERRORS     (1 << 5)
325 
326 #define DP_ADAPTER_CTRL			    0x1a0
327 # define DP_ADAPTER_CTRL_FORCE_LOAD_SENSE   (1 << 0)
328 
329 #define DP_BRANCH_DEVICE_CTRL		    0x1a1
330 # define DP_BRANCH_DEVICE_IRQ_HPD	    (1 << 0)
331 
332 #define DP_PAYLOAD_ALLOCATE_SET		    0x1c0
333 #define DP_PAYLOAD_ALLOCATE_START_TIME_SLOT 0x1c1
334 #define DP_PAYLOAD_ALLOCATE_TIME_SLOT_COUNT 0x1c2
335 
336 #define DP_SINK_COUNT			    0x200
337 /* prior to 1.2 bit 7 was reserved mbz */
338 # define DP_GET_SINK_COUNT(x)		    ((((x) & 0x80) >> 1) | ((x) & 0x3f))
339 # define DP_SINK_CP_READY		    (1 << 6)
340 
341 #define DP_DEVICE_SERVICE_IRQ_VECTOR	    0x201
342 # define DP_REMOTE_CONTROL_COMMAND_PENDING  (1 << 0)
343 # define DP_AUTOMATED_TEST_REQUEST	    (1 << 1)
344 # define DP_CP_IRQ			    (1 << 2)
345 # define DP_MCCS_IRQ			    (1 << 3)
346 # define DP_DOWN_REP_MSG_RDY		    (1 << 4) /* 1.2 MST */
347 # define DP_UP_REQ_MSG_RDY		    (1 << 5) /* 1.2 MST */
348 # define DP_SINK_SPECIFIC_IRQ		    (1 << 6)
349 
350 #define DP_LANE0_1_STATUS		    0x202
351 #define DP_LANE2_3_STATUS		    0x203
352 # define DP_LANE_CR_DONE		    (1 << 0)
353 # define DP_LANE_CHANNEL_EQ_DONE	    (1 << 1)
354 # define DP_LANE_SYMBOL_LOCKED		    (1 << 2)
355 
356 #define DP_CHANNEL_EQ_BITS (DP_LANE_CR_DONE |		\
357 			    DP_LANE_CHANNEL_EQ_DONE |	\
358 			    DP_LANE_SYMBOL_LOCKED)
359 
360 #define DP_LANE_ALIGN_STATUS_UPDATED	    0x204
361 
362 #define DP_INTERLANE_ALIGN_DONE		    (1 << 0)
363 #define DP_DOWNSTREAM_PORT_STATUS_CHANGED   (1 << 6)
364 #define DP_LINK_STATUS_UPDATED		    (1 << 7)
365 
366 #define DP_SINK_STATUS			    0x205
367 
368 #define DP_RECEIVE_PORT_0_STATUS	    (1 << 0)
369 #define DP_RECEIVE_PORT_1_STATUS	    (1 << 1)
370 
371 #define DP_ADJUST_REQUEST_LANE0_1	    0x206
372 #define DP_ADJUST_REQUEST_LANE2_3	    0x207
373 # define DP_ADJUST_VOLTAGE_SWING_LANE0_MASK  0x03
374 # define DP_ADJUST_VOLTAGE_SWING_LANE0_SHIFT 0
375 # define DP_ADJUST_PRE_EMPHASIS_LANE0_MASK   0x0c
376 # define DP_ADJUST_PRE_EMPHASIS_LANE0_SHIFT  2
377 # define DP_ADJUST_VOLTAGE_SWING_LANE1_MASK  0x30
378 # define DP_ADJUST_VOLTAGE_SWING_LANE1_SHIFT 4
379 # define DP_ADJUST_PRE_EMPHASIS_LANE1_MASK   0xc0
380 # define DP_ADJUST_PRE_EMPHASIS_LANE1_SHIFT  6
381 
382 #define DP_TEST_REQUEST			    0x218
383 # define DP_TEST_LINK_TRAINING		    (1 << 0)
384 # define DP_TEST_LINK_VIDEO_PATTERN	    (1 << 1)
385 # define DP_TEST_LINK_EDID_READ		    (1 << 2)
386 # define DP_TEST_LINK_PHY_TEST_PATTERN	    (1 << 3) /* DPCD >= 1.1 */
387 # define DP_TEST_LINK_FAUX_PATTERN	    (1 << 4) /* DPCD >= 1.2 */
388 
389 #define DP_TEST_LINK_RATE		    0x219
390 # define DP_LINK_RATE_162		    (0x6)
391 # define DP_LINK_RATE_27		    (0xa)
392 
393 #define DP_TEST_LANE_COUNT		    0x220
394 
395 #define DP_TEST_PATTERN			    0x221
396 
397 #define DP_TEST_CRC_R_CR		    0x240
398 #define DP_TEST_CRC_G_Y			    0x242
399 #define DP_TEST_CRC_B_CB		    0x244
400 
401 #define DP_TEST_SINK_MISC		    0x246
402 # define DP_TEST_CRC_SUPPORTED		    (1 << 5)
403 # define DP_TEST_COUNT_MASK		    0xf
404 
405 #define DP_TEST_RESPONSE		    0x260
406 # define DP_TEST_ACK			    (1 << 0)
407 # define DP_TEST_NAK			    (1 << 1)
408 # define DP_TEST_EDID_CHECKSUM_WRITE	    (1 << 2)
409 
410 #define DP_TEST_EDID_CHECKSUM		    0x261
411 
412 #define DP_TEST_SINK			    0x270
413 # define DP_TEST_SINK_START		    (1 << 0)
414 
415 #define DP_PAYLOAD_TABLE_UPDATE_STATUS      0x2c0   /* 1.2 MST */
416 # define DP_PAYLOAD_TABLE_UPDATED           (1 << 0)
417 # define DP_PAYLOAD_ACT_HANDLED             (1 << 1)
418 
419 #define DP_VC_PAYLOAD_ID_SLOT_1             0x2c1   /* 1.2 MST */
420 /* up to ID_SLOT_63 at 0x2ff */
421 
422 #define DP_SOURCE_OUI			    0x300
423 #define DP_SINK_OUI			    0x400
424 #define DP_BRANCH_OUI			    0x500
425 
426 #define DP_SET_POWER                        0x600
427 # define DP_SET_POWER_D0                    0x1
428 # define DP_SET_POWER_D3                    0x2
429 # define DP_SET_POWER_MASK                  0x3
430 
431 #define DP_EDP_DPCD_REV			    0x700    /* eDP 1.2 */
432 # define DP_EDP_11			    0x00
433 # define DP_EDP_12			    0x01
434 # define DP_EDP_13			    0x02
435 # define DP_EDP_14			    0x03
436 
437 #define DP_EDP_GENERAL_CAP_1		    0x701
438 
439 #define DP_EDP_BACKLIGHT_ADJUSTMENT_CAP     0x702
440 
441 #define DP_EDP_GENERAL_CAP_2		    0x703
442 
443 #define DP_EDP_GENERAL_CAP_3		    0x704    /* eDP 1.4 */
444 
445 #define DP_EDP_DISPLAY_CONTROL_REGISTER     0x720
446 
447 #define DP_EDP_BACKLIGHT_MODE_SET_REGISTER  0x721
448 
449 #define DP_EDP_BACKLIGHT_BRIGHTNESS_MSB     0x722
450 #define DP_EDP_BACKLIGHT_BRIGHTNESS_LSB     0x723
451 
452 #define DP_EDP_PWMGEN_BIT_COUNT             0x724
453 #define DP_EDP_PWMGEN_BIT_COUNT_CAP_MIN     0x725
454 #define DP_EDP_PWMGEN_BIT_COUNT_CAP_MAX     0x726
455 
456 #define DP_EDP_BACKLIGHT_CONTROL_STATUS     0x727
457 
458 #define DP_EDP_BACKLIGHT_FREQ_SET           0x728
459 
460 #define DP_EDP_BACKLIGHT_FREQ_CAP_MIN_MSB   0x72a
461 #define DP_EDP_BACKLIGHT_FREQ_CAP_MIN_MID   0x72b
462 #define DP_EDP_BACKLIGHT_FREQ_CAP_MIN_LSB   0x72c
463 
464 #define DP_EDP_BACKLIGHT_FREQ_CAP_MAX_MSB   0x72d
465 #define DP_EDP_BACKLIGHT_FREQ_CAP_MAX_MID   0x72e
466 #define DP_EDP_BACKLIGHT_FREQ_CAP_MAX_LSB   0x72f
467 
468 #define DP_EDP_DBC_MINIMUM_BRIGHTNESS_SET   0x732
469 #define DP_EDP_DBC_MAXIMUM_BRIGHTNESS_SET   0x733
470 
471 #define DP_EDP_REGIONAL_BACKLIGHT_BASE      0x740    /* eDP 1.4 */
472 #define DP_EDP_REGIONAL_BACKLIGHT_0	    0x741    /* eDP 1.4 */
473 
474 #define DP_SIDEBAND_MSG_DOWN_REQ_BASE	    0x1000   /* 1.2 MST */
475 #define DP_SIDEBAND_MSG_UP_REP_BASE	    0x1200   /* 1.2 MST */
476 #define DP_SIDEBAND_MSG_DOWN_REP_BASE	    0x1400   /* 1.2 MST */
477 #define DP_SIDEBAND_MSG_UP_REQ_BASE	    0x1600   /* 1.2 MST */
478 
479 #define DP_SINK_COUNT_ESI		    0x2002   /* 1.2 */
480 /* 0-5 sink count */
481 # define DP_SINK_COUNT_CP_READY             (1 << 6)
482 
483 #define DP_DEVICE_SERVICE_IRQ_VECTOR_ESI0   0x2003   /* 1.2 */
484 
485 #define DP_DEVICE_SERVICE_IRQ_VECTOR_ESI1   0x2004   /* 1.2 */
486 
487 #define DP_LINK_SERVICE_IRQ_VECTOR_ESI0     0x2005   /* 1.2 */
488 
489 #define DP_PSR_ERROR_STATUS                 0x2006  /* XXX 1.2? */
490 # define DP_PSR_LINK_CRC_ERROR              (1 << 0)
491 # define DP_PSR_RFB_STORAGE_ERROR           (1 << 1)
492 # define DP_PSR_VSC_SDP_UNCORRECTABLE_ERROR (1 << 2) /* eDP 1.4 */
493 
494 #define DP_PSR_ESI                          0x2007  /* XXX 1.2? */
495 # define DP_PSR_CAPS_CHANGE                 (1 << 0)
496 
497 #define DP_PSR_STATUS                       0x2008  /* XXX 1.2? */
498 # define DP_PSR_SINK_INACTIVE               0
499 # define DP_PSR_SINK_ACTIVE_SRC_SYNCED      1
500 # define DP_PSR_SINK_ACTIVE_RFB             2
501 # define DP_PSR_SINK_ACTIVE_SINK_SYNCED     3
502 # define DP_PSR_SINK_ACTIVE_RESYNC          4
503 # define DP_PSR_SINK_INTERNAL_ERROR         7
504 # define DP_PSR_SINK_STATE_MASK             0x07
505 
506 #define DP_RECEIVER_ALPM_STATUS		    0x200b  /* eDP 1.4 */
507 # define DP_ALPM_LOCK_TIMEOUT_ERROR	    (1 << 0)
508 
509 /* DP 1.2 Sideband message defines */
510 /* peer device type - DP 1.2a Table 2-92 */
511 #define DP_PEER_DEVICE_NONE		0x0
512 #define DP_PEER_DEVICE_SOURCE_OR_SST	0x1
513 #define DP_PEER_DEVICE_MST_BRANCHING	0x2
514 #define DP_PEER_DEVICE_SST_SINK		0x3
515 #define DP_PEER_DEVICE_DP_LEGACY_CONV	0x4
516 
517 /* DP 1.2 MST sideband request names DP 1.2a Table 2-80 */
518 #define DP_LINK_ADDRESS			0x01
519 #define DP_CONNECTION_STATUS_NOTIFY	0x02
520 #define DP_ENUM_PATH_RESOURCES		0x10
521 #define DP_ALLOCATE_PAYLOAD		0x11
522 #define DP_QUERY_PAYLOAD		0x12
523 #define DP_RESOURCE_STATUS_NOTIFY	0x13
524 #define DP_CLEAR_PAYLOAD_ID_TABLE	0x14
525 #define DP_REMOTE_DPCD_READ		0x20
526 #define DP_REMOTE_DPCD_WRITE		0x21
527 #define DP_REMOTE_I2C_READ		0x22
528 #define DP_REMOTE_I2C_WRITE		0x23
529 #define DP_POWER_UP_PHY			0x24
530 #define DP_POWER_DOWN_PHY		0x25
531 #define DP_SINK_EVENT_NOTIFY		0x30
532 #define DP_QUERY_STREAM_ENC_STATUS	0x38
533 
534 /* DP 1.2 MST sideband nak reasons - table 2.84 */
535 #define DP_NAK_WRITE_FAILURE		0x01
536 #define DP_NAK_INVALID_READ		0x02
537 #define DP_NAK_CRC_FAILURE		0x03
538 #define DP_NAK_BAD_PARAM		0x04
539 #define DP_NAK_DEFER			0x05
540 #define DP_NAK_LINK_FAILURE		0x06
541 #define DP_NAK_NO_RESOURCES		0x07
542 #define DP_NAK_DPCD_FAIL		0x08
543 #define DP_NAK_I2C_NAK			0x09
544 #define DP_NAK_ALLOCATE_FAIL		0x0a
545 
546 #define ANALOGIX_DP_TX_SW_RESET			0x14
547 #define ANALOGIX_DP_FUNC_EN_1			0x18
548 #define ANALOGIX_DP_FUNC_EN_2			0x1C
549 #define ANALOGIX_DP_VIDEO_CTL_1			0x20
550 #define ANALOGIX_DP_VIDEO_CTL_2			0x24
551 #define ANALOGIX_DP_VIDEO_CTL_3			0x28
552 
553 #define ANALOGIX_DP_VIDEO_CTL_8			0x3C
554 #define ANALOGIX_DP_VIDEO_CTL_10		0x44
555 
556 #define ANALOGIX_DP_PLL_REG_1			0xfc
557 #define ANALOGIX_DP_PLL_REG_2			0x9e4
558 #define ANALOGIX_DP_PLL_REG_3			0x9e8
559 #define ANALOGIX_DP_PLL_REG_4			0x9ec
560 #define ANALOGIX_DP_PLL_REG_5			0xa00
561 
562 #define ANALOGIX_DP_PD				0x12c
563 
564 #define ANALOGIX_DP_LANE_MAP			0x35C
565 
566 #define ANALOGIX_DP_ANALOG_CTL_1		0x370
567 #define ANALOGIX_DP_ANALOG_CTL_2		0x374
568 #define ANALOGIX_DP_ANALOG_CTL_3		0x378
569 #define ANALOGIX_DP_PLL_FILTER_CTL_1		0x37C
570 #define ANALOGIX_DP_TX_AMP_TUNING_CTL		0x380
571 
572 #define ANALOGIX_DP_AUX_HW_RETRY_CTL		0x390
573 
574 #define ANALOGIX_DP_COMMON_INT_STA_1		0x3C4
575 #define ANALOGIX_DP_COMMON_INT_STA_2		0x3C8
576 #define ANALOGIX_DP_COMMON_INT_STA_3		0x3CC
577 #define ANALOGIX_DP_COMMON_INT_STA_4		0x3D0
578 #define ANALOGIX_DP_INT_STA			0x3DC
579 #define ANALOGIX_DP_COMMON_INT_MASK_1		0x3E0
580 #define ANALOGIX_DP_COMMON_INT_MASK_2		0x3E4
581 #define ANALOGIX_DP_COMMON_INT_MASK_3		0x3E8
582 #define ANALOGIX_DP_COMMON_INT_MASK_4		0x3EC
583 #define ANALOGIX_DP_INT_STA_MASK		0x3F8
584 #define ANALOGIX_DP_INT_CTL			0x3FC
585 
586 #define ANALOGIX_DP_SYS_CTL_1			0x600
587 #define ANALOGIX_DP_SYS_CTL_2			0x604
588 #define ANALOGIX_DP_SYS_CTL_3			0x608
589 #define ANALOGIX_DP_SYS_CTL_4			0x60C
590 
591 #define ANALOGIX_DP_PKT_SEND_CTL		0x640
592 #define ANALOGIX_DP_HDCP_CTL			0x648
593 
594 #define ANALOGIX_DP_LINK_BW_SET			0x680
595 #define ANALOGIX_DP_LANE_COUNT_SET		0x684
596 #define ANALOGIX_DP_TRAINING_PTN_SET		0x688
597 #define ANALOGIX_DP_LN0_LINK_TRAINING_CTL	0x68C
598 #define ANALOGIX_DP_LN1_LINK_TRAINING_CTL	0x690
599 #define ANALOGIX_DP_LN2_LINK_TRAINING_CTL	0x694
600 #define ANALOGIX_DP_LN3_LINK_TRAINING_CTL	0x698
601 
602 #define ANALOGIX_DP_DEBUG_CTL			0x6C0
603 #define ANALOGIX_DP_HPD_DEGLITCH_L		0x6C4
604 #define ANALOGIX_DP_HPD_DEGLITCH_H		0x6C8
605 #define ANALOGIX_DP_LINK_DEBUG_CTL		0x6E0
606 
607 #define ANALOGIX_DP_M_VID_0			0x700
608 #define ANALOGIX_DP_M_VID_1			0x704
609 #define ANALOGIX_DP_M_VID_2			0x708
610 #define ANALOGIX_DP_N_VID_0			0x70C
611 #define ANALOGIX_DP_N_VID_1			0x710
612 #define ANALOGIX_DP_N_VID_2			0x714
613 
614 #define ANALOGIX_DP_PLL_CTL			0x71C
615 #define ANALOGIX_DP_PHY_PD			0x720
616 #define ANALOGIX_DP_PHY_TEST			0x724
617 
618 #define ANALOGIX_DP_VIDEO_FIFO_THRD		0x730
619 #define ANALOGIX_DP_AUDIO_MARGIN		0x73C
620 
621 #define ANALOGIX_DP_M_VID_GEN_FILTER_TH		0x764
622 #define ANALOGIX_DP_M_AUD_GEN_FILTER_TH		0x778
623 #define ANALOGIX_DP_AUX_CH_STA			0x780
624 #define ANALOGIX_DP_AUX_CH_DEFER_CTL		0x788
625 #define ANALOGIX_DP_AUX_RX_COMM			0x78C
626 #define ANALOGIX_DP_BUFFER_DATA_CTL		0x790
627 #define ANALOGIX_DP_AUX_CH_CTL_1		0x794
628 #define ANALOGIX_DP_AUX_ADDR_7_0		0x798
629 #define ANALOGIX_DP_AUX_ADDR_15_8		0x79C
630 #define ANALOGIX_DP_AUX_ADDR_19_16		0x7A0
631 #define ANALOGIX_DP_AUX_CH_CTL_2		0x7A4
632 
633 #define ANALOGIX_DP_BUF_DATA_0			0x7C0
634 
635 #define ANALOGIX_DP_SOC_GENERAL_CTL		0x800
636 
637 /* ANALOGIX_DP_TX_SW_RESET */
638 #define RESET_DP_TX				(0x1 << 0)
639 
640 /* ANALOGIX_DP_FUNC_EN_1 */
641 #define MASTER_VID_FUNC_EN_N			(0x1 << 7)
642 #define SLAVE_VID_FUNC_EN_N			(0x1 << 5)
643 #define AUD_FIFO_FUNC_EN_N			(0x1 << 4)
644 #define AUD_FUNC_EN_N				(0x1 << 3)
645 #define HDCP_FUNC_EN_N				(0x1 << 2)
646 #define CRC_FUNC_EN_N				(0x1 << 1)
647 #define SW_FUNC_EN_N				(0x1 << 0)
648 
649 /* ANALOGIX_DP_FUNC_EN_2 */
650 #define SSC_FUNC_EN_N				(0x1 << 7)
651 #define AUX_FUNC_EN_N				(0x1 << 2)
652 #define SERDES_FIFO_FUNC_EN_N			(0x1 << 1)
653 #define LS_CLK_DOMAIN_FUNC_EN_N			(0x1 << 0)
654 
655 /* ANALOGIX_DP_VIDEO_CTL_1 */
656 #define VIDEO_EN				(0x1 << 7)
657 #define HDCP_VIDEO_MUTE				(0x1 << 6)
658 
659 /* ANALOGIX_DP_VIDEO_CTL_1 */
660 #define IN_D_RANGE_MASK				(0x1 << 7)
661 #define IN_D_RANGE_SHIFT			(7)
662 #define IN_D_RANGE_CEA				(0x1 << 7)
663 #define IN_D_RANGE_VESA				(0x0 << 7)
664 #define IN_BPC_MASK				(0x7 << 4)
665 #define IN_BPC_SHIFT				(4)
666 #define IN_BPC_12_BITS				(0x3 << 4)
667 #define IN_BPC_10_BITS				(0x2 << 4)
668 #define IN_BPC_8_BITS				(0x1 << 4)
669 #define IN_BPC_6_BITS				(0x0 << 4)
670 #define IN_COLOR_F_MASK				(0x3 << 0)
671 #define IN_COLOR_F_SHIFT			(0)
672 #define IN_COLOR_F_YCBCR444			(0x2 << 0)
673 #define IN_COLOR_F_YCBCR422			(0x1 << 0)
674 #define IN_COLOR_F_RGB				(0x0 << 0)
675 
676 /* ANALOGIX_DP_VIDEO_CTL_3 */
677 #define IN_YC_COEFFI_MASK			(0x1 << 7)
678 #define IN_YC_COEFFI_SHIFT			(7)
679 #define IN_YC_COEFFI_ITU709			(0x1 << 7)
680 #define IN_YC_COEFFI_ITU601			(0x0 << 7)
681 #define VID_CHK_UPDATE_TYPE_MASK		(0x1 << 4)
682 #define VID_CHK_UPDATE_TYPE_SHIFT		(4)
683 #define VID_CHK_UPDATE_TYPE_1			(0x1 << 4)
684 #define VID_CHK_UPDATE_TYPE_0			(0x0 << 4)
685 
686 /* ANALOGIX_DP_VIDEO_CTL_8 */
687 #define VID_HRES_TH(x)				(((x) & 0xf) << 4)
688 #define VID_VRES_TH(x)				(((x) & 0xf) << 0)
689 
690 /* ANALOGIX_DP_VIDEO_CTL_10 */
691 #define FORMAT_SEL				(0x1 << 4)
692 #define INTERACE_SCAN_CFG			(0x1 << 2)
693 #define VSYNC_POLARITY_CFG			(0x1 << 1)
694 #define HSYNC_POLARITY_CFG			(0x1 << 0)
695 
696 /* ANALOGIX_DP_PLL_REG_1 */
697 #define REF_CLK_24M				(0x1 << 0)
698 #define REF_CLK_27M				(0x0 << 0)
699 #define REF_CLK_MASK				(0x1 << 0)
700 
701 /* ANALOGIX_DP_LANE_MAP */
702 #define LANE3_MAP_LOGIC_LANE_0			(0x0 << 6)
703 #define LANE3_MAP_LOGIC_LANE_1			(0x1 << 6)
704 #define LANE3_MAP_LOGIC_LANE_2			(0x2 << 6)
705 #define LANE3_MAP_LOGIC_LANE_3			(0x3 << 6)
706 #define LANE2_MAP_LOGIC_LANE_0			(0x0 << 4)
707 #define LANE2_MAP_LOGIC_LANE_1			(0x1 << 4)
708 #define LANE2_MAP_LOGIC_LANE_2			(0x2 << 4)
709 #define LANE2_MAP_LOGIC_LANE_3			(0x3 << 4)
710 #define LANE1_MAP_LOGIC_LANE_0			(0x0 << 2)
711 #define LANE1_MAP_LOGIC_LANE_1			(0x1 << 2)
712 #define LANE1_MAP_LOGIC_LANE_2			(0x2 << 2)
713 #define LANE1_MAP_LOGIC_LANE_3			(0x3 << 2)
714 #define LANE0_MAP_LOGIC_LANE_0			(0x0 << 0)
715 #define LANE0_MAP_LOGIC_LANE_1			(0x1 << 0)
716 #define LANE0_MAP_LOGIC_LANE_2			(0x2 << 0)
717 #define LANE0_MAP_LOGIC_LANE_3			(0x3 << 0)
718 
719 /* ANALOGIX_DP_ANALOG_CTL_1 */
720 #define TX_TERMINAL_CTRL_50_OHM			(0x1 << 4)
721 
722 /* ANALOGIX_DP_ANALOG_CTL_2 */
723 #define SEL_24M					(0x1 << 3)
724 #define TX_DVDD_BIT_1_0625V			(0x4 << 0)
725 
726 /* ANALOGIX_DP_ANALOG_CTL_3 */
727 #define DRIVE_DVDD_BIT_1_0625V			(0x4 << 5)
728 #define VCO_BIT_600_MICRO			(0x5 << 0)
729 
730 /* ANALOGIX_DP_PLL_FILTER_CTL_1 */
731 #define PD_RING_OSC				(0x1 << 6)
732 #define AUX_TERMINAL_CTRL_50_OHM		(0x2 << 4)
733 #define TX_CUR1_2X				(0x1 << 2)
734 #define TX_CUR_16_MA				(0x3 << 0)
735 
736 /* ANALOGIX_DP_TX_AMP_TUNING_CTL */
737 #define CH3_AMP_400_MV				(0x0 << 24)
738 #define CH2_AMP_400_MV				(0x0 << 16)
739 #define CH1_AMP_400_MV				(0x0 << 8)
740 #define CH0_AMP_400_MV				(0x0 << 0)
741 
742 /* ANALOGIX_DP_AUX_HW_RETRY_CTL */
743 #define AUX_BIT_PERIOD_EXPECTED_DELAY(x)	(((x) & 0x7) << 8)
744 #define AUX_HW_RETRY_INTERVAL_MASK		(0x3 << 3)
745 #define AUX_HW_RETRY_INTERVAL_600_MICROSECONDS	(0x0 << 3)
746 #define AUX_HW_RETRY_INTERVAL_800_MICROSECONDS	(0x1 << 3)
747 #define AUX_HW_RETRY_INTERVAL_1000_MICROSECONDS	(0x2 << 3)
748 #define AUX_HW_RETRY_INTERVAL_1800_MICROSECONDS	(0x3 << 3)
749 #define AUX_HW_RETRY_COUNT_SEL(x)		(((x) & 0x7) << 0)
750 
751 /* ANALOGIX_DP_COMMON_INT_STA_1 */
752 #define VSYNC_DET				(0x1 << 7)
753 #define PLL_LOCK_CHG				(0x1 << 6)
754 #define SPDIF_ERR				(0x1 << 5)
755 #define SPDIF_UNSTBL				(0x1 << 4)
756 #define VID_FORMAT_CHG				(0x1 << 3)
757 #define AUD_CLK_CHG				(0x1 << 2)
758 #define VID_CLK_CHG				(0x1 << 1)
759 #define SW_INT					(0x1 << 0)
760 
761 /* ANALOGIX_DP_COMMON_INT_STA_2 */
762 #define ENC_EN_CHG				(0x1 << 6)
763 #define HW_BKSV_RDY				(0x1 << 3)
764 #define HW_SHA_DONE				(0x1 << 2)
765 #define HW_AUTH_STATE_CHG			(0x1 << 1)
766 #define HW_AUTH_DONE				(0x1 << 0)
767 
768 /* ANALOGIX_DP_COMMON_INT_STA_3 */
769 #define AFIFO_UNDER				(0x1 << 7)
770 #define AFIFO_OVER				(0x1 << 6)
771 #define R0_CHK_FLAG				(0x1 << 5)
772 
773 /* ANALOGIX_DP_COMMON_INT_STA_4 */
774 #define PSR_ACTIVE				(0x1 << 7)
775 #define PSR_INACTIVE				(0x1 << 6)
776 #define SPDIF_BI_PHASE_ERR			(0x1 << 5)
777 #define HOTPLUG_CHG				(0x1 << 2)
778 #define HPD_LOST				(0x1 << 1)
779 #define PLUG					(0x1 << 0)
780 
781 /* ANALOGIX_DP_INT_STA */
782 #define INT_HPD					(0x1 << 6)
783 #define HW_TRAINING_FINISH			(0x1 << 5)
784 #define RPLY_RECEIV				(0x1 << 1)
785 #define AUX_ERR					(0x1 << 0)
786 
787 /* ANALOGIX_DP_INT_CTL */
788 #define SOFT_INT_CTRL				(0x1 << 2)
789 #define INT_POL1				(0x1 << 1)
790 #define INT_POL0				(0x1 << 0)
791 
792 /* ANALOGIX_DP_SYS_CTL_1 */
793 #define DET_STA					(0x1 << 2)
794 #define FORCE_DET				(0x1 << 1)
795 #define DET_CTRL				(0x1 << 0)
796 
797 /* ANALOGIX_DP_SYS_CTL_2 */
798 #define CHA_CRI(x)				(((x) & 0xf) << 4)
799 #define CHA_STA					(0x1 << 2)
800 #define FORCE_CHA				(0x1 << 1)
801 #define CHA_CTRL				(0x1 << 0)
802 
803 /* ANALOGIX_DP_SYS_CTL_3 */
804 #define HPD_STATUS				(0x1 << 6)
805 #define F_HPD					(0x1 << 5)
806 #define HPD_CTRL				(0x1 << 4)
807 #define HDCP_RDY				(0x1 << 3)
808 #define STRM_VALID				(0x1 << 2)
809 #define F_VALID					(0x1 << 1)
810 #define VALID_CTRL				(0x1 << 0)
811 
812 /* ANALOGIX_DP_SYS_CTL_4 */
813 #define FIX_M_AUD				(0x1 << 4)
814 #define ENHANCED				(0x1 << 3)
815 #define FIX_M_VID				(0x1 << 2)
816 #define M_VID_UPDATE_CTRL			(0x3 << 0)
817 
818 /* ANALOGIX_DP_TRAINING_PTN_SET */
819 #define SCRAMBLER_TYPE				(0x1 << 9)
820 #define HW_LINK_TRAINING_PATTERN		(0x1 << 8)
821 #define SCRAMBLING_DISABLE			(0x1 << 5)
822 #define SCRAMBLING_ENABLE			(0x0 << 5)
823 #define LINK_QUAL_PATTERN_SET_MASK		(0x3 << 2)
824 #define LINK_QUAL_PATTERN_SET_PRBS7		(0x3 << 2)
825 #define LINK_QUAL_PATTERN_SET_D10_2		(0x1 << 2)
826 #define LINK_QUAL_PATTERN_SET_DISABLE		(0x0 << 2)
827 #define SW_TRAINING_PATTERN_SET_MASK		(0x3 << 0)
828 #define SW_TRAINING_PATTERN_SET_PTN2		(0x2 << 0)
829 #define SW_TRAINING_PATTERN_SET_PTN1		(0x1 << 0)
830 #define SW_TRAINING_PATTERN_SET_NORMAL		(0x0 << 0)
831 
832 /* ANALOGIX_DP_LN0_LINK_TRAINING_CTL */
833 #define PRE_EMPHASIS_SET_MASK			(0x3 << 3)
834 #define PRE_EMPHASIS_SET_SHIFT			(3)
835 
836 /* ANALOGIX_DP_DEBUG_CTL */
837 #define PLL_LOCK				(0x1 << 4)
838 #define F_PLL_LOCK				(0x1 << 3)
839 #define PLL_LOCK_CTRL				(0x1 << 2)
840 #define PN_INV					(0x1 << 0)
841 
842 /* ANALOGIX_DP_PLL_CTL */
843 #define DP_PLL_PD				(0x1 << 7)
844 #define DP_PLL_RESET				(0x1 << 6)
845 #define DP_PLL_LOOP_BIT_DEFAULT			(0x1 << 4)
846 #define DP_PLL_REF_BIT_1_1250V			(0x5 << 0)
847 #define DP_PLL_REF_BIT_1_2500V			(0x7 << 0)
848 
849 /* ANALOGIX_DP_PHY_PD */
850 #define DP_PHY_PD				(0x1 << 5)
851 #define AUX_PD					(0x1 << 4)
852 #define CH3_PD					(0x1 << 3)
853 #define CH2_PD					(0x1 << 2)
854 #define CH1_PD					(0x1 << 1)
855 #define CH0_PD					(0x1 << 0)
856 
857 /* ANALOGIX_DP_PHY_TEST */
858 #define MACRO_RST				(0x1 << 5)
859 #define CH1_TEST				(0x1 << 1)
860 #define CH0_TEST				(0x1 << 0)
861 
862 /* ANALOGIX_DP_AUX_CH_STA */
863 #define AUX_BUSY				(0x1 << 4)
864 #define AUX_STATUS_MASK				(0xf << 0)
865 
866 /* ANALOGIX_DP_AUX_CH_DEFER_CTL */
867 #define DEFER_CTRL_EN				(0x1 << 7)
868 #define DEFER_COUNT(x)				(((x) & 0x7f) << 0)
869 
870 /* ANALOGIX_DP_AUX_RX_COMM */
871 #define AUX_RX_COMM_I2C_DEFER			(0x2 << 2)
872 #define AUX_RX_COMM_AUX_DEFER			(0x2 << 0)
873 
874 /* ANALOGIX_DP_BUFFER_DATA_CTL */
875 #define BUF_CLR					(0x1 << 7)
876 #define BUF_DATA_COUNT(x)			(((x) & 0x1f) << 0)
877 
878 /* ANALOGIX_DP_AUX_CH_CTL_1 */
879 #define AUX_LENGTH(x)				(((x - 1) & 0xf) << 4)
880 #define AUX_TX_COMM_MASK			(0xf << 0)
881 #define AUX_TX_COMM_DP_TRANSACTION		(0x1 << 3)
882 #define AUX_TX_COMM_I2C_TRANSACTION		(0x0 << 3)
883 #define AUX_TX_COMM_MOT				(0x1 << 2)
884 #define AUX_TX_COMM_WRITE			(0x0 << 0)
885 #define AUX_TX_COMM_READ			(0x1 << 0)
886 
887 /* ANALOGIX_DP_AUX_ADDR_7_0 */
888 #define AUX_ADDR_7_0(x)				(((x) >> 0) & 0xff)
889 
890 /* ANALOGIX_DP_AUX_ADDR_15_8 */
891 #define AUX_ADDR_15_8(x)			(((x) >> 8) & 0xff)
892 
893 /* ANALOGIX_DP_AUX_ADDR_19_16 */
894 #define AUX_ADDR_19_16(x)			(((x) >> 16) & 0x0f)
895 
896 /* ANALOGIX_DP_AUX_CH_CTL_2 */
897 #define ADDR_ONLY				(0x1 << 1)
898 #define AUX_EN					(0x1 << 0)
899 
900 /* ANALOGIX_DP_SOC_GENERAL_CTL */
901 #define AUDIO_MODE_SPDIF_MODE			(0x1 << 8)
902 #define AUDIO_MODE_MASTER_MODE			(0x0 << 8)
903 #define MASTER_VIDEO_INTERLACE_EN		(0x1 << 4)
904 #define VIDEO_MASTER_CLK_SEL			(0x1 << 2)
905 #define VIDEO_MASTER_MODE_EN			(0x1 << 1)
906 #define VIDEO_MODE_MASK				(0x1 << 0)
907 #define VIDEO_MODE_SLAVE_MODE			(0x1 << 0)
908 #define VIDEO_MODE_MASTER_MODE			(0x0 << 0)
909 
910 #define DP_TIMEOUT_LOOP_COUNT 100
911 #define MAX_CR_LOOP 5
912 #define MAX_EQ_LOOP 5
913 
914 /* I2C EDID Chip ID, Slave Address */
915 #define I2C_EDID_DEVICE_ADDR			0x50
916 #define I2C_E_EDID_DEVICE_ADDR			0x30
917 
918 #define EDID_BLOCK_LENGTH			0x80
919 #define EDID_HEADER_PATTERN			0x00
920 #define EDID_EXTENSION_FLAG			0x7e
921 #define EDID_CHECKSUM				0x7f
922 
923 /* DP_MAX_LANE_COUNT */
924 #define DPCD_ENHANCED_FRAME_CAP(x)		(((x) >> 7) & 0x1)
925 #define DPCD_MAX_LANE_COUNT(x)			((x) & 0x1f)
926 
927 /* DP_LANE_COUNT_SET */
928 #define DPCD_LANE_COUNT_SET(x)			((x) & 0x1f)
929 
930 /* DP_TRAINING_LANE0_SET */
931 #define DPCD_PRE_EMPHASIS_SET(x)		(((x) & 0x3) << 3)
932 #define DPCD_PRE_EMPHASIS_GET(x)		(((x) >> 3) & 0x3)
933 #define DPCD_VOLTAGE_SWING_SET(x)		(((x) & 0x3) << 0)
934 #define DPCD_VOLTAGE_SWING_GET(x)		(((x) >> 0) & 0x3)
935 
936 enum link_lane_count_type {
937 	LANE_COUNT1 = 1,
938 	LANE_COUNT2 = 2,
939 	LANE_COUNT4 = 4
940 };
941 
942 enum link_training_state {
943 	START,
944 	CLOCK_RECOVERY,
945 	EQUALIZER_TRAINING,
946 	FINISHED,
947 	FAILED
948 };
949 
950 enum voltage_swing_level {
951 	VOLTAGE_LEVEL_0,
952 	VOLTAGE_LEVEL_1,
953 	VOLTAGE_LEVEL_2,
954 	VOLTAGE_LEVEL_3,
955 };
956 
957 enum pre_emphasis_level {
958 	PRE_EMPHASIS_LEVEL_0,
959 	PRE_EMPHASIS_LEVEL_1,
960 	PRE_EMPHASIS_LEVEL_2,
961 	PRE_EMPHASIS_LEVEL_3,
962 };
963 
964 enum pattern_set {
965 	PRBS7,
966 	D10_2,
967 	TRAINING_PTN1,
968 	TRAINING_PTN2,
969 	DP_NONE
970 };
971 
972 enum color_space {
973 	COLOR_RGB,
974 	COLOR_YCBCR422,
975 	COLOR_YCBCR444
976 };
977 
978 enum color_depth {
979 	COLOR_6,
980 	COLOR_8,
981 	COLOR_10,
982 	COLOR_12
983 };
984 
985 enum color_coefficient {
986 	COLOR_YCBCR601,
987 	COLOR_YCBCR709
988 };
989 
990 enum dynamic_range {
991 	VESA,
992 	CEA
993 };
994 
995 enum pll_status {
996 	PLL_UNLOCKED,
997 	PLL_LOCKED
998 };
999 
1000 enum clock_recovery_m_value_type {
1001 	CALCULATED_M,
1002 	REGISTER_M
1003 };
1004 
1005 enum video_timing_recognition_type {
1006 	VIDEO_TIMING_FROM_CAPTURE,
1007 	VIDEO_TIMING_FROM_REGISTER
1008 };
1009 
1010 enum analog_power_block {
1011 	AUX_BLOCK,
1012 	CH0_BLOCK,
1013 	CH1_BLOCK,
1014 	CH2_BLOCK,
1015 	CH3_BLOCK,
1016 	ANALOG_TOTAL,
1017 	POWER_ALL
1018 };
1019 
1020 enum dp_irq_type {
1021 	DP_IRQ_TYPE_HP_CABLE_IN  = BIT(0),
1022 	DP_IRQ_TYPE_HP_CABLE_OUT = BIT(1),
1023 	DP_IRQ_TYPE_HP_CHANGE    = BIT(2),
1024 	DP_IRQ_TYPE_UNKNOWN      = BIT(3),
1025 };
1026 
1027 struct video_info {
1028 	char *name;
1029 
1030 	bool h_sync_polarity;
1031 	bool v_sync_polarity;
1032 	bool interlaced;
1033 
1034 	enum color_space color_space;
1035 	enum dynamic_range dynamic_range;
1036 	enum color_coefficient ycbcr_coeff;
1037 	enum color_depth color_depth;
1038 
1039 	int max_link_rate;
1040 	enum link_lane_count_type max_lane_count;
1041 };
1042 
1043 struct link_train {
1044 	int eq_loop;
1045 	int cr_loop[4];
1046 
1047 	u8 link_rate;
1048 	u8 lane_count;
1049 	u8 training_lane[4];
1050 
1051 	enum link_training_state lt_state;
1052 };
1053 
1054 enum analogix_dp_devtype {
1055 	EXYNOS_DP,
1056 	ROCKCHIP_DP,
1057 };
1058 
1059 enum analogix_dp_sub_devtype {
1060 	RK3288_DP,
1061 	RK3368_EDP,
1062 	RK3399_EDP,
1063 };
1064 
1065 struct analogix_dp_plat_data {
1066 	enum analogix_dp_devtype dev_type;
1067 	enum analogix_dp_sub_devtype subdev_type;
1068 };
1069 
1070 struct analogix_dp_device {
1071 	struct udevice *dev;
1072 	void *reg_base;
1073 	void *grf;
1074 	struct gpio_desc hpd_gpio;
1075 	struct video_info	video_info;
1076 	struct link_train	link_train;
1077 	struct drm_display_mode *mode;
1078 	struct analogix_dp_plat_data plat_data;
1079 	unsigned char edid[EDID_BLOCK_LENGTH * 2];
1080 };
1081 
1082 /* analogix_dp_reg.c */
1083 void analogix_dp_enable_video_mute(struct analogix_dp_device *dp, bool enable);
1084 void analogix_dp_stop_video(struct analogix_dp_device *dp);
1085 void analogix_dp_lane_swap(struct analogix_dp_device *dp, bool enable);
1086 void analogix_dp_init_analog_param(struct analogix_dp_device *dp);
1087 void analogix_dp_init_interrupt(struct analogix_dp_device *dp);
1088 void analogix_dp_reset(struct analogix_dp_device *dp);
1089 void analogix_dp_swreset(struct analogix_dp_device *dp);
1090 void analogix_dp_config_interrupt(struct analogix_dp_device *dp);
1091 void analogix_dp_mute_hpd_interrupt(struct analogix_dp_device *dp);
1092 void analogix_dp_unmute_hpd_interrupt(struct analogix_dp_device *dp);
1093 enum pll_status analogix_dp_get_pll_lock_status(struct analogix_dp_device *dp);
1094 void analogix_dp_set_pll_power_down(struct analogix_dp_device *dp, bool enable);
1095 void analogix_dp_set_analog_power_down(struct analogix_dp_device *dp,
1096 				       enum analog_power_block block,
1097 				       bool enable);
1098 void analogix_dp_init_analog_func(struct analogix_dp_device *dp);
1099 void analogix_dp_init_hpd(struct analogix_dp_device *dp);
1100 void analogix_dp_force_hpd(struct analogix_dp_device *dp);
1101 enum dp_irq_type analogix_dp_get_irq_type(struct analogix_dp_device *dp);
1102 void analogix_dp_clear_hotplug_interrupts(struct analogix_dp_device *dp);
1103 void analogix_dp_reset_aux(struct analogix_dp_device *dp);
1104 void analogix_dp_init_aux(struct analogix_dp_device *dp);
1105 int analogix_dp_get_plug_in_status(struct analogix_dp_device *dp);
1106 void analogix_dp_enable_sw_function(struct analogix_dp_device *dp);
1107 int analogix_dp_start_aux_transaction(struct analogix_dp_device *dp);
1108 int analogix_dp_write_byte_to_dpcd(struct analogix_dp_device *dp,
1109 				   unsigned int reg_addr,
1110 				   unsigned char data);
1111 int analogix_dp_read_byte_from_dpcd(struct analogix_dp_device *dp,
1112 				    unsigned int reg_addr,
1113 				    unsigned char *data);
1114 int analogix_dp_write_bytes_to_dpcd(struct analogix_dp_device *dp,
1115 				    unsigned int reg_addr,
1116 				    unsigned int count,
1117 				    unsigned char data[]);
1118 int analogix_dp_read_bytes_from_dpcd(struct analogix_dp_device *dp,
1119 				     unsigned int reg_addr,
1120 				     unsigned int count,
1121 				     unsigned char data[]);
1122 int analogix_dp_select_i2c_device(struct analogix_dp_device *dp,
1123 				  unsigned int device_addr,
1124 				  unsigned int reg_addr);
1125 int analogix_dp_read_byte_from_i2c(struct analogix_dp_device *dp,
1126 				   unsigned int device_addr,
1127 				   unsigned int reg_addr,
1128 				   unsigned int *data);
1129 int analogix_dp_read_bytes_from_i2c(struct analogix_dp_device *dp,
1130 				    unsigned int device_addr,
1131 				    unsigned int reg_addr,
1132 				    unsigned int count,
1133 				    unsigned char edid[]);
1134 void analogix_dp_set_link_bandwidth(struct analogix_dp_device *dp, u32 bwtype);
1135 void analogix_dp_get_link_bandwidth(struct analogix_dp_device *dp, u32 *bwtype);
1136 void analogix_dp_set_lane_count(struct analogix_dp_device *dp, u32 count);
1137 void analogix_dp_get_lane_count(struct analogix_dp_device *dp, u32 *count);
1138 void analogix_dp_enable_enhanced_mode(struct analogix_dp_device *dp,
1139 				      bool enable);
1140 void analogix_dp_set_training_pattern(struct analogix_dp_device *dp,
1141 				      enum pattern_set pattern);
1142 void analogix_dp_set_lane0_pre_emphasis(struct analogix_dp_device *dp,
1143 					u32 level);
1144 void analogix_dp_set_lane1_pre_emphasis(struct analogix_dp_device *dp,
1145 					u32 level);
1146 void analogix_dp_set_lane2_pre_emphasis(struct analogix_dp_device *dp,
1147 					u32 level);
1148 void analogix_dp_set_lane3_pre_emphasis(struct analogix_dp_device *dp,
1149 					u32 level);
1150 void analogix_dp_set_lane0_link_training(struct analogix_dp_device *dp,
1151 					 u32 training_lane);
1152 void analogix_dp_set_lane1_link_training(struct analogix_dp_device *dp,
1153 					 u32 training_lane);
1154 void analogix_dp_set_lane2_link_training(struct analogix_dp_device *dp,
1155 					 u32 training_lane);
1156 void analogix_dp_set_lane3_link_training(struct analogix_dp_device *dp,
1157 					 u32 training_lane);
1158 u32 analogix_dp_get_lane0_link_training(struct analogix_dp_device *dp);
1159 u32 analogix_dp_get_lane1_link_training(struct analogix_dp_device *dp);
1160 u32 analogix_dp_get_lane2_link_training(struct analogix_dp_device *dp);
1161 u32 analogix_dp_get_lane3_link_training(struct analogix_dp_device *dp);
1162 void analogix_dp_reset_macro(struct analogix_dp_device *dp);
1163 void analogix_dp_init_video(struct analogix_dp_device *dp);
1164 
1165 void analogix_dp_set_video_color_format(struct analogix_dp_device *dp);
1166 int analogix_dp_is_slave_video_stream_clock_on(struct analogix_dp_device *dp);
1167 void analogix_dp_set_video_cr_mn(struct analogix_dp_device *dp,
1168 				 enum clock_recovery_m_value_type type,
1169 				 u32 m_value,
1170 				 u32 n_value);
1171 void analogix_dp_set_video_timing_mode(struct analogix_dp_device *dp, u32 type);
1172 void analogix_dp_enable_video_master(struct analogix_dp_device *dp,
1173 				     bool enable);
1174 void analogix_dp_start_video(struct analogix_dp_device *dp);
1175 int analogix_dp_is_video_stream_on(struct analogix_dp_device *dp);
1176 void analogix_dp_config_video_slave_mode(struct analogix_dp_device *dp);
1177 void analogix_dp_enable_scrambling(struct analogix_dp_device *dp);
1178 void analogix_dp_disable_scrambling(struct analogix_dp_device *dp);
1179 
1180 #endif /* __DRM_ANALOGIX_DP__ */
1181