clk: rockchip: support setting ddr clock via SCPI APIs
[firefly-linux-kernel-4.4.55.git] / drivers / video / rockchip / dp / cdn-dp-fb-reg.h
1 /*
2  * Copyright (C) Fuzhou Rockchip Electronics Co.Ltd
3  * Author: Chris Zhong <zyw@rock-chips.com>
4  *
5  * This software is licensed under the terms of the GNU General Public
6  * License version 2, as published by the Free Software Foundation, and
7  * may be copied, distributed, and modified under those terms.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  */
14
15 #ifndef _CDN_DP_REG_H
16 #define _CDN_DP_REG_H
17
18 #include <linux/wakelock.h>
19 #include <linux/mutex.h>
20 #include <linux/bitops.h>
21 #include <drm/drmP.h>
22 #include <drm/drm_crtc_helper.h>
23 #include <drm/drm_dp_helper.h>
24 #include <drm/drm_panel.h>
25
26 #define MAX_PHY         2
27
28 #define ADDR_IMEM               0x10000
29 #define ADDR_DMEM               0x20000
30
31 /* APB CFG addr */
32 #define APB_CTRL                        0
33 #define XT_INT_CTRL                     0x04
34 #define MAILBOX_FULL_ADDR               0x08
35 #define MAILBOX_EMPTY_ADDR              0x0c
36 #define MAILBOX0_WR_DATA                0x10
37 #define MAILBOX0_RD_DATA                0x14
38 #define KEEP_ALIVE                      0x18
39 #define VER_L                           0x1c
40 #define VER_H                           0x20
41 #define VER_LIB_L_ADDR                  0x24
42 #define VER_LIB_H_ADDR                  0x28
43 #define SW_DEBUG_L                      0x2c
44 #define SW_DEBUG_H                      0x30
45 #define MAILBOX_INT_MASK                0x34
46 #define MAILBOX_INT_STATUS              0x38
47 #define SW_CLK_L                        0x3c
48 #define SW_CLK_H                        0x40
49 #define SW_EVENTS0                      0x44
50 #define SW_EVENTS1                      0x48
51 #define SW_EVENTS2                      0x4c
52 #define SW_EVENTS3                      0x50
53 #define XT_OCD_CTRL                     0x60
54 #define APB_INT_MASK                    0x6c
55 #define APB_STATUS_MASK                 0x70
56
57 /* audio decoder addr */
58 #define AUDIO_SRC_CNTL                  0x30000
59 #define AUDIO_SRC_CNFG                  0x30004
60 #define COM_CH_STTS_BITS                0x30008
61 #define STTS_BIT_CH(x)                  (0x3000c + ((x) << 2))
62 #define SPDIF_CTRL_ADDR                 0x3004c
63 #define SPDIF_CH1_CS_3100_ADDR          0x30050
64 #define SPDIF_CH1_CS_6332_ADDR          0x30054
65 #define SPDIF_CH1_CS_9564_ADDR          0x30058
66 #define SPDIF_CH1_CS_12796_ADDR         0x3005c
67 #define SPDIF_CH1_CS_159128_ADDR        0x30060
68 #define SPDIF_CH1_CS_191160_ADDR        0x30064
69 #define SPDIF_CH2_CS_3100_ADDR          0x30068
70 #define SPDIF_CH2_CS_6332_ADDR          0x3006c
71 #define SPDIF_CH2_CS_9564_ADDR          0x30070
72 #define SPDIF_CH2_CS_12796_ADDR         0x30074
73 #define SPDIF_CH2_CS_159128_ADDR        0x30078
74 #define SPDIF_CH2_CS_191160_ADDR        0x3007c
75 #define SMPL2PKT_CNTL                   0x30080
76 #define SMPL2PKT_CNFG                   0x30084
77 #define FIFO_CNTL                       0x30088
78 #define FIFO_STTS                       0x3008c
79
80 /* source pif addr */
81 #define SOURCE_PIF_WR_ADDR              0x30800
82 #define SOURCE_PIF_WR_REQ               0x30804
83 #define SOURCE_PIF_RD_ADDR              0x30808
84 #define SOURCE_PIF_RD_REQ               0x3080c
85 #define SOURCE_PIF_DATA_WR              0x30810
86 #define SOURCE_PIF_DATA_RD              0x30814
87 #define SOURCE_PIF_FIFO1_FLUSH          0x30818
88 #define SOURCE_PIF_FIFO2_FLUSH          0x3081c
89 #define SOURCE_PIF_STATUS               0x30820
90 #define SOURCE_PIF_INTERRUPT_SOURCE     0x30824
91 #define SOURCE_PIF_INTERRUPT_MASK       0x30828
92 #define SOURCE_PIF_PKT_ALLOC_REG        0x3082c
93 #define SOURCE_PIF_PKT_ALLOC_WR_EN      0x30830
94 #define SOURCE_PIF_SW_RESET             0x30834
95
96 /* bellow registers need access by mailbox */
97 /* source car addr */
98 #define SOURCE_HDTX_CAR                 0x0900
99 #define SOURCE_DPTX_CAR                 0x0904
100 #define SOURCE_PHY_CAR                  0x0908
101 #define SOURCE_CEC_CAR                  0x090c
102 #define SOURCE_CBUS_CAR                 0x0910
103 #define SOURCE_PKT_CAR                  0x0918
104 #define SOURCE_AIF_CAR                  0x091c
105 #define SOURCE_CIPHER_CAR               0x0920
106 #define SOURCE_CRYPTO_CAR               0x0924
107
108 /* clock meters addr */
109 #define CM_CTRL                         0x0a00
110 #define CM_I2S_CTRL                     0x0a04
111 #define CM_SPDIF_CTRL                   0x0a08
112 #define CM_VID_CTRL                     0x0a0c
113 #define CM_LANE_CTRL                    0x0a10
114 #define I2S_NM_STABLE                   0x0a14
115 #define I2S_NCTS_STABLE                 0x0a18
116 #define SPDIF_NM_STABLE                 0x0a1c
117 #define SPDIF_NCTS_STABLE               0x0a20
118 #define NMVID_MEAS_STABLE               0x0a24
119 #define I2S_MEAS                        0x0a40
120 #define SPDIF_MEAS                      0x0a80
121 #define NMVID_MEAS                      0x0ac0
122
123 /* source vif addr */
124 #define BND_HSYNC2VSYNC                 0x0b00
125 #define HSYNC2VSYNC_F1_L1               0x0b04
126 #define HSYNC2VSYNC_F2_L1               0x0b08
127 #define HSYNC2VSYNC_STATUS              0x0b0c
128 #define HSYNC2VSYNC_POL_CTRL            0x0b10
129
130 /* dptx phy addr */
131 #define DP_TX_PHY_CONFIG_REG            0x2000
132 #define DP_TX_PHY_STATUS_REG            0x2004
133 #define DP_TX_PHY_SW_RESET              0x2008
134 #define DP_TX_PHY_SCRAMBLER_SEED        0x200c
135 #define DP_TX_PHY_TRAINING_01_04        0x2010
136 #define DP_TX_PHY_TRAINING_05_08        0x2014
137 #define DP_TX_PHY_TRAINING_09_10        0x2018
138 #define TEST_COR                        0x23fc
139
140 /* dptx hpd addr */
141 #define HPD_IRQ_DET_MIN_TIMER           0x2100
142 #define HPD_IRQ_DET_MAX_TIMER           0x2104
143 #define HPD_UNPLGED_DET_MIN_TIMER       0x2108
144 #define HPD_STABLE_TIMER                0x210c
145 #define HPD_FILTER_TIMER                0x2110
146 #define HPD_EVENT_MASK                  0x211c
147 #define HPD_EVENT_DET                   0x2120
148
149 /* dpyx framer addr */
150 #define DP_FRAMER_GLOBAL_CONFIG         0x2200
151 #define DP_SW_RESET                     0x2204
152 #define DP_FRAMER_TU                    0x2208
153 #define DP_FRAMER_PXL_REPR              0x220c
154 #define DP_FRAMER_SP                    0x2210
155 #define AUDIO_PACK_CONTROL              0x2214
156 #define DP_VC_TABLE(x)                  (0x2218 + ((x) << 2))
157 #define DP_VB_ID                        0x2258
158 #define DP_MTPH_LVP_CONTROL             0x225c
159 #define DP_MTPH_SYMBOL_VALUES           0x2260
160 #define DP_MTPH_ECF_CONTROL             0x2264
161 #define DP_MTPH_ACT_CONTROL             0x2268
162 #define DP_MTPH_STATUS                  0x226c
163 #define DP_INTERRUPT_SOURCE             0x2270
164 #define DP_INTERRUPT_MASK               0x2274
165 #define DP_FRONT_BACK_PORCH             0x2278
166 #define DP_BYTE_COUNT                   0x227c
167
168 /* dptx stream addr */
169 #define MSA_HORIZONTAL_0                0x2280
170 #define MSA_HORIZONTAL_1                0x2284
171 #define MSA_VERTICAL_0                  0x2288
172 #define MSA_VERTICAL_1                  0x228c
173 #define MSA_MISC                        0x2290
174 #define STREAM_CONFIG                   0x2294
175 #define AUDIO_PACK_STATUS               0x2298
176 #define VIF_STATUS                      0x229c
177 #define PCK_STUFF_STATUS_0              0x22a0
178 #define PCK_STUFF_STATUS_1              0x22a4
179 #define INFO_PACK_STATUS                0x22a8
180 #define RATE_GOVERNOR_STATUS            0x22ac
181 #define DP_HORIZONTAL                   0x22b0
182 #define DP_VERTICAL_0                   0x22b4
183 #define DP_VERTICAL_1                   0x22b8
184 #define DP_BLOCK_SDP                    0x22bc
185
186 /* dptx glbl addr */
187 #define DPTX_LANE_EN                    0x2300
188 #define DPTX_ENHNCD                     0x2304
189 #define DPTX_INT_MASK                   0x2308
190 #define DPTX_INT_STATUS                 0x230c
191
192 /* dp aux addr */
193 #define DP_AUX_HOST_CONTROL             0x2800
194 #define DP_AUX_INTERRUPT_SOURCE         0x2804
195 #define DP_AUX_INTERRUPT_MASK           0x2808
196 #define DP_AUX_SWAP_INVERSION_CONTROL   0x280c
197 #define DP_AUX_SEND_NACK_TRANSACTION    0x2810
198 #define DP_AUX_CLEAR_RX                 0x2814
199 #define DP_AUX_CLEAR_TX                 0x2818
200 #define DP_AUX_TIMER_STOP               0x281c
201 #define DP_AUX_TIMER_CLEAR              0x2820
202 #define DP_AUX_RESET_SW                 0x2824
203 #define DP_AUX_DIVIDE_2M                0x2828
204 #define DP_AUX_TX_PREACHARGE_LENGTH     0x282c
205 #define DP_AUX_FREQUENCY_1M_MAX         0x2830
206 #define DP_AUX_FREQUENCY_1M_MIN         0x2834
207 #define DP_AUX_RX_PRE_MIN               0x2838
208 #define DP_AUX_RX_PRE_MAX               0x283c
209 #define DP_AUX_TIMER_PRESET             0x2840
210 #define DP_AUX_NACK_FORMAT              0x2844
211 #define DP_AUX_TX_DATA                  0x2848
212 #define DP_AUX_RX_DATA                  0x284c
213 #define DP_AUX_TX_STATUS                0x2850
214 #define DP_AUX_RX_STATUS                0x2854
215 #define DP_AUX_RX_CYCLE_COUNTER         0x2858
216 #define DP_AUX_MAIN_STATES              0x285c
217 #define DP_AUX_MAIN_TIMER               0x2860
218 #define DP_AUX_AFE_OUT                  0x2864
219
220 /* crypto addr */
221 #define CRYPTO_HDCP_REVISION            0x5800
222 #define HDCP_CRYPTO_CONFIG              0x5804
223 #define CRYPTO_INTERRUPT_SOURCE         0x5808
224 #define CRYPTO_INTERRUPT_MASK           0x580c
225 #define CRYPTO22_CONFIG                 0x5818
226 #define CRYPTO22_STATUS                 0x581c
227 #define SHA_256_DATA_IN                 0x583c
228 #define SHA_256_DATA_OUT_(x)            (0x5850 + ((x) << 2))
229 #define AES_32_KEY_(x)                  (0x5870 + ((x) << 2))
230 #define AES_32_DATA_IN                  0x5880
231 #define AES_32_DATA_OUT_(x)             (0x5884 + ((x) << 2))
232 #define CRYPTO14_CONFIG                 0x58a0
233 #define CRYPTO14_STATUS                 0x58a4
234 #define CRYPTO14_PRNM_OUT               0x58a8
235 #define CRYPTO14_KM_0                   0x58ac
236 #define CRYPTO14_KM_1                   0x58b0
237 #define CRYPTO14_AN_0                   0x58b4
238 #define CRYPTO14_AN_1                   0x58b8
239 #define CRYPTO14_YOUR_KSV_0             0x58bc
240 #define CRYPTO14_YOUR_KSV_1             0x58c0
241 #define CRYPTO14_MI_0                   0x58c4
242 #define CRYPTO14_MI_1                   0x58c8
243 #define CRYPTO14_TI_0                   0x58cc
244 #define CRYPTO14_KI_0                   0x58d0
245 #define CRYPTO14_KI_1                   0x58d4
246 #define CRYPTO14_BLOCKS_NUM             0x58d8
247 #define CRYPTO14_KEY_MEM_DATA_0         0x58dc
248 #define CRYPTO14_KEY_MEM_DATA_1         0x58e0
249 #define CRYPTO14_SHA1_MSG_DATA          0x58e4
250 #define CRYPTO14_SHA1_V_VALUE_(x)       (0x58e8 + ((x) << 2))
251 #define TRNG_CTRL                       0x58fc
252 #define TRNG_DATA_RDY                   0x5900
253 #define TRNG_DATA                       0x5904
254
255 /* cipher addr */
256 #define HDCP_REVISION                   0x60000
257 #define INTERRUPT_SOURCE                0x60004
258 #define INTERRUPT_MASK                  0x60008
259 #define HDCP_CIPHER_CONFIG              0x6000c
260 #define AES_128_KEY_0                   0x60010
261 #define AES_128_KEY_1                   0x60014
262 #define AES_128_KEY_2                   0x60018
263 #define AES_128_KEY_3                   0x6001c
264 #define AES_128_RANDOM_0                0x60020
265 #define AES_128_RANDOM_1                0x60024
266 #define CIPHER14_KM_0                   0x60028
267 #define CIPHER14_KM_1                   0x6002c
268 #define CIPHER14_STATUS                 0x60030
269 #define CIPHER14_RI_PJ_STATUS           0x60034
270 #define CIPHER_MODE                     0x60038
271 #define CIPHER14_AN_0                   0x6003c
272 #define CIPHER14_AN_1                   0x60040
273 #define CIPHER22_AUTH                   0x60044
274 #define CIPHER14_R0_DP_STATUS           0x60048
275 #define CIPHER14_BOOTSTRAP              0x6004c
276
277 #define DPTX_FRMR_DATA_CLK_RSTN_EN      BIT(11)
278 #define DPTX_FRMR_DATA_CLK_EN           BIT(10)
279 #define DPTX_PHY_DATA_RSTN_EN           BIT(9)
280 #define DPTX_PHY_DATA_CLK_EN            BIT(8)
281 #define DPTX_PHY_CHAR_RSTN_EN           BIT(7)
282 #define DPTX_PHY_CHAR_CLK_EN            BIT(6)
283 #define SOURCE_AUX_SYS_CLK_RSTN_EN      BIT(5)
284 #define SOURCE_AUX_SYS_CLK_EN           BIT(4)
285 #define DPTX_SYS_CLK_RSTN_EN            BIT(3)
286 #define DPTX_SYS_CLK_EN                 BIT(2)
287 #define CFG_DPTX_VIF_CLK_RSTN_EN        BIT(1)
288 #define CFG_DPTX_VIF_CLK_EN             BIT(0)
289
290 #define SOURCE_PHY_RSTN_EN              BIT(1)
291 #define SOURCE_PHY_CLK_EN               BIT(0)
292
293 #define SOURCE_PKT_SYS_RSTN_EN          BIT(3)
294 #define SOURCE_PKT_SYS_CLK_EN           BIT(2)
295 #define SOURCE_PKT_DATA_RSTN_EN         BIT(1)
296 #define SOURCE_PKT_DATA_CLK_EN          BIT(0)
297
298 #define SPDIF_CDR_CLK_RSTN_EN           BIT(5)
299 #define SPDIF_CDR_CLK_EN                BIT(4)
300 #define SOURCE_AIF_SYS_RSTN_EN          BIT(3)
301 #define SOURCE_AIF_SYS_CLK_EN           BIT(2)
302 #define SOURCE_AIF_CLK_RSTN_EN          BIT(1)
303 #define SOURCE_AIF_CLK_EN               BIT(0)
304
305 #define SOURCE_CIPHER_SYSTEM_CLK_RSTN_EN        BIT(3)
306 #define SOURCE_CIPHER_SYS_CLK_EN                BIT(2)
307 #define SOURCE_CIPHER_CHAR_CLK_RSTN_EN          BIT(1)
308 #define SOURCE_CIPHER_CHAR_CLK_EN               BIT(0)
309
310 #define SOURCE_CRYPTO_SYS_CLK_RSTN_EN   BIT(1)
311 #define SOURCE_CRYPTO_SYS_CLK_EN        BIT(0)
312
313 #define APB_IRAM_PATH                   BIT(2)
314 #define APB_DRAM_PATH                   BIT(1)
315 #define APB_XT_RESET                    BIT(0)
316
317 #define MAILBOX_INT_MASK_BIT            BIT(1)
318 #define PIF_INT_MASK_BIT                BIT(0)
319 #define ALL_INT_MASK                    3
320
321 /* mailbox */
322 #define MB_OPCODE_ID                    0
323 #define MB_MODULE_ID                    1
324 #define MB_SIZE_MSB_ID                  2
325 #define MB_SIZE_LSB_ID                  3
326 #define MB_DATA_ID                      4
327
328 #define MB_MODULE_ID_DP_TX              0x01
329 #define MB_MODULE_ID_HDCP_TX            0x07
330 #define MB_MODULE_ID_HDCP_RX            0x08
331 #define MB_MODULE_ID_HDCP_GENERAL       0x09
332 #define MB_MODULE_ID_GENERAL            0x0a
333
334 /* general opcode */
335 #define GENERAL_MAIN_CONTROL            0x01
336 #define GENERAL_TEST_ECHO               0x02
337 #define GENERAL_BUS_SETTINGS            0x03
338 #define GENERAL_TEST_ACCESS             0x04
339
340 #define DPTX_SET_POWER_MNG                      0x00
341 #define DPTX_SET_HOST_CAPABILITIES              0x01
342 #define DPTX_GET_EDID                           0x02
343 #define DPTX_READ_DPCD                          0x03
344 #define DPTX_WRITE_DPCD                         0x04
345 #define DPTX_ENABLE_EVENT                       0x05
346 #define DPTX_WRITE_REGISTER                     0x06
347 #define DPTX_READ_REGISTER                      0x07
348 #define DPTX_WRITE_FIELD                        0x08
349 #define DPTX_TRAINING_CONTROL                   0x09
350 #define DPTX_READ_EVENT                         0x0a
351 #define DPTX_READ_LINK_STAT                     0x0b
352 #define DPTX_SET_VIDEO                          0x0c
353 #define DPTX_SET_AUDIO                          0x0d
354 #define DPTX_GET_LAST_AUX_STAUS                 0x0e
355 #define DPTX_SET_LINK_BREAK_POINT               0x0f
356 #define DPTX_FORCE_LANES                        0x10
357 #define DPTX_HPD_STATE                          0x11
358
359 #define FW_STANDBY                              0
360 #define FW_ACTIVE                               1
361
362 #define DPTX_EVENT_ENABLE_HPD                   BIT(0)
363 #define DPTX_EVENT_ENABLE_TRAINING              BIT(1)
364
365 #define LINK_TRAINING_NOT_ACTIVE                0
366 #define LINK_TRAINING_RUN                       1
367 #define LINK_TRAINING_RESTART                   2
368
369 #define CONTROL_VIDEO_IDLE                      0
370 #define CONTROL_VIDEO_VALID                     1
371
372 #define VIF_BYPASS_INTERLACE                    BIT(13)
373 #define INTERLACE_FMT_DET                       BIT(12)
374 #define INTERLACE_DTCT_WIN                      0x20
375
376 #define DP_FRAMER_SP_INTERLACE_EN               BIT(2)
377 #define DP_FRAMER_SP_HSP                        BIT(1)
378 #define DP_FRAMER_SP_VSP                        BIT(0)
379
380 /* capability */
381 #define AUX_HOST_INVERT                         3
382 #define FAST_LT_SUPPORT                         1
383 #define FAST_LT_NOT_SUPPORT                     0
384 #define LANE_MAPPING_NORMAL                     0x1b
385 #define LANE_MAPPING_FLIPPED                    0xe4
386 #define ENHANCED                                1
387
388 #define FULL_LT_STARTED                         BIT(0)
389 #define FASE_LT_STARTED                         BIT(1)
390 #define CLK_RECOVERY_FINISHED                   BIT(2)
391 #define EQ_PHASE_FINISHED                       BIT(3)
392 #define FASE_LT_START_FINISHED                  BIT(4)
393 #define CLK_RECOVERY_FAILED                     BIT(5)
394 #define EQ_PHASE_FAILED                         BIT(6)
395 #define FASE_LT_FAILED                          BIT(7)
396
397 #define DPTX_HPD_EVENT                          BIT(0)
398 #define DPTX_TRAINING_EVENT                     BIT(1)
399 #define HDCP_TX_STATUS_EVENT                    BIT(4)
400 #define HDCP2_TX_IS_KM_STORED_EVENT             BIT(5)
401 #define HDCP2_TX_STORE_KM_EVENT                 BIT(6)
402 #define HDCP_TX_IS_RECEIVER_ID_VALID_EVENT      BIT(7)
403
404 #define TU_SIZE                                 30
405 #define CDN_DP_MAX_LINK_RATE                    DP_LINK_BW_5_4
406
407 /* audio */
408 #define AUDIO_PACK_EN                           BIT(8)
409 #define SAMPLING_FREQ(x)                        (((x) & 0xf) << 16)
410 #define ORIGINAL_SAMP_FREQ(x)                   (((x) & 0xf) << 24)
411 #define SYNC_WR_TO_CH_ZERO                      BIT(1)
412 #define I2S_DEC_START                           BIT(1)
413 #define AUDIO_SW_RST                            BIT(0)
414 #define SMPL2PKT_EN                             BIT(1)
415 #define MAX_NUM_CH(x)                           (((x) & 0x1f) - 1)
416 #define NUM_OF_I2S_PORTS(x)                     ((((x) / 2 - 1) & 0x3) << 5)
417 #define AUDIO_TYPE_LPCM                         (2 << 7)
418 #define CFG_SUB_PCKT_NUM(x)                     ((((x) - 1) & 0x7) << 11)
419 #define AUDIO_CH_NUM(x)                         ((((x) - 1) & 0x1f) << 2)
420 #define TRANS_SMPL_WIDTH_16                     0
421 #define TRANS_SMPL_WIDTH_24                     BIT(11)
422 #define TRANS_SMPL_WIDTH_32                     (2 << 11)
423 #define I2S_DEC_PORT_EN(x)                      (((x) & 0xf) << 17)
424 #define SPDIF_ENABLE                            BIT(21)
425 #define SPDIF_AVG_SEL                           BIT(20)
426 #define SPDIF_JITTER_BYPASS                     BIT(19)
427 #define SPDIF_FIFO_MID_RANGE(x)                 (((x) & 0xff) << 11)
428 #define SPDIF_JITTER_THRSH(x)                   (((x) & 0xff) << 3)
429 #define SPDIF_JITTER_AVG_WIN(x)                 ((x) & 0x7)
430
431 /* Refernce cycles when using lane clock as refernce */
432 #define LANE_REF_CYC                            0x8000
433
434 enum voltage_swing_level {
435         VOLTAGE_LEVEL_0,
436         VOLTAGE_LEVEL_1,
437         VOLTAGE_LEVEL_2,
438         VOLTAGE_LEVEL_3,
439 };
440
441 enum pre_emphasis_level {
442         PRE_EMPHASIS_LEVEL_0,
443         PRE_EMPHASIS_LEVEL_1,
444         PRE_EMPHASIS_LEVEL_2,
445         PRE_EMPHASIS_LEVEL_3,
446 };
447
448 enum pattern_set {
449         PTS1            = BIT(0),
450         PTS2            = BIT(1),
451         PTS3            = BIT(2),
452         PTS4            = BIT(3),
453         DP_NONE         = BIT(4)
454 };
455
456 enum vic_color_depth {
457         BCS_6 = 0x1,
458         BCS_8 = 0x2,
459         BCS_10 = 0x4,
460         BCS_12 = 0x8,
461         BCS_16 = 0x10,
462 };
463
464 enum vic_bt_type {
465         BT_601 = 0x0,
466         BT_709 = 0x1,
467 };
468
469 enum audio_format {
470         AFMT_I2S = 0,
471         AFMT_SPDIF = 1,
472         AFMT_UNUSED,
473 };
474
475 struct audio_info {
476         enum audio_format format;
477         int sample_rate;
478         int channels;
479         int sample_width;
480 };
481
482 enum vic_pxl_encoding_format {
483         PXL_RGB = 0x1,
484         YCBCR_4_4_4 = 0x2,
485         YCBCR_4_2_2 = 0x4,
486         YCBCR_4_2_0 = 0x8,
487         Y_ONLY = 0x10,
488 };
489
490 struct video_info {
491         bool h_sync_polarity;
492         bool v_sync_polarity;
493         bool interlaced;
494         int color_depth;
495         enum vic_pxl_encoding_format color_fmt;
496 };
497
498 struct cdn_firmware_header {
499         u32 size_bytes; /* size of the entire header+image(s) in bytes */
500         u32 header_size; /* size of just the header in bytes */
501         u32 iram_size; /* size of iram */
502         u32 dram_size; /* size of dram */
503 };
504
505 struct cdn_dp_port {
506         struct cdn_dp_device *dp;
507         struct notifier_block event_nb;
508         struct delayed_work event_wq;
509         struct extcon_dev *extcon;
510         struct phy *phy;
511         u8 cap_lanes;
512         bool phy_status;
513         u8 id;
514 };
515
516 struct cdn_dp_device {
517         struct device *dev;
518         struct drm_device *drm_dev;
519         struct drm_connector connector;
520         struct drm_encoder encoder;
521         struct drm_display_mode mode;
522         struct platform_device *audio_pdev;
523
524         const struct firmware *fw;      /* cdn dp firmware */
525         unsigned int fw_version;        /* cdn fw version */
526         u32 fw_wait;
527         bool fw_loaded;
528         bool fw_actived;
529         bool fw_clk_enabled;
530         void __iomem *regs;
531         struct regmap *grf;
532         struct clk *grf_clk;
533         struct clk *core_clk;
534         struct clk *pclk;
535         struct clk *spdif_clk;
536         struct reset_control *spdif_rst;
537         struct reset_control *dptx_rst;
538         struct reset_control *apb_rst;
539         struct reset_control *core_rst;
540         struct audio_info audio_info;
541         struct video_info video_info;
542         struct drm_dp_link link;
543         struct cdn_dp_port *port[MAX_PHY];
544         u8 ports;
545
546         u8 dpcd[DP_RECEIVER_CAP_SIZE];
547         enum drm_connector_status hpd_status;
548         int dpms_mode;
549         bool suspend;
550         bool sink_has_audio;
551
552         struct mutex lock;
553         struct wake_lock        wake_lock;
554 };
555
556 void cdn_dp_fb_clock_reset(struct cdn_dp_device *dp);
557
558 void cdn_dp_fb_set_fw_clk(struct cdn_dp_device *dp, u32 clk);
559 int cdn_dp_fb_load_firmware(struct cdn_dp_device *dp, const u32 *i_mem,
560                          u32 i_size, const u32 *d_mem, u32 d_size);
561 int cdn_dp_fb_set_firmware_active(struct cdn_dp_device *dp, bool enable);
562 int cdn_dp_fb_set_host_cap(struct cdn_dp_device *dp, u8 lanes, bool flip);
563 int cdn_dp_fb_event_config(struct cdn_dp_device *dp);
564 u32 cdn_dp_fb_get_event(struct cdn_dp_device *dp);
565 int cdn_dp_fb_get_hpd_status(struct cdn_dp_device *dp);
566 int cdn_dp_fb_dpcd_write(struct cdn_dp_device *dp, u32 addr, u8 value);
567 int cdn_dp_fb_dpcd_read(struct cdn_dp_device *dp, u32 addr, u8 *data, u16 len);
568 int cdn_dp_fb_get_edid_block(void *dp, u8 *edid,
569                           unsigned int block, size_t length);
570 int cdn_dp_fb_training_start(struct cdn_dp_device *dp);
571 int cdn_dp_fb_get_training_status(struct cdn_dp_device *dp);
572 int cdn_dp_fb_set_video_status(struct cdn_dp_device *dp, int active);
573 int cdn_dp_fb_config_video(struct cdn_dp_device *dp);
574 int cdn_dp_fb_audio_stop(struct cdn_dp_device *dp, struct audio_info *audio);
575 int cdn_dp_fb_audio_mute(struct cdn_dp_device *dp, bool enable);
576 int cdn_dp_fb_audio_config(struct cdn_dp_device *dp, struct audio_info *audio);
577 #endif /* _CDN_DP_REG_H */