HDMI: init rk3288 hdmi driver code
[firefly-linux-kernel-4.4.55.git] / drivers / video / rockchip / hdmi / chips / rk3288 / rk3288_hdmi_hw.h
1 #ifndef _RK3288_HDMI_HW_H
2 #define _RK3288_HDMI_HW_H
3
4 enum PWR_MODE{
5         NORMAL,
6         LOWER_PWR,
7 };
8 enum {
9         OUTPUT_DVI = 0,
10         OUTPUT_HDMI,
11 };
12
13
14 #define HDMI_SCL_RATE            (100*1000)
15
16 /*Register and Field Descriptions*/
17 /*Identification Registers*/
18 #define IDENTIFICATION_BASE             0x0000
19 enum IDENTIFICATION_REG{
20         DESIGN_ID = IDENTIFICATION_BASE,
21         REVISION_ID,
22         PRODUCT_ID0,
23         PRODUCT_ID1,
24         CONFIG0_ID,
25         CONFIG1_ID,
26         CONFIG2_ID,
27         CONFIG3_ID
28 };
29
30 //CONFIG0_ID
31 #define m_PREPEN                (1 << 7)
32 #define m_AUDSPDIF              (1 << 5)
33 #define m_AUDI2S                (1 << 4)
34 #define m_HDMI14                (1 << 3)
35 #define m_CSC                   (1 << 2)
36 #define m_CEC                   (1 << 1)
37 #define m_HDCP                  (1 << 0)
38
39 //CONFIG1_ID
40 #define m_HDMI20                (1 << 5)
41 #define m_CONFAPB               (1 << 1)
42
43 //CONFIG2_ID
44 enum PHYTYPE {
45         HDMI_TX_PHY = 0x00,
46         MHL_WITH_HEAC_PHY = 0xb2,
47         MHL_PHY = 0xc2,
48         HDMI_3D_TX_WITH_HEAC_PHY = 0xe2,
49         HDMI_3D_TX_PHY = 0xf2
50 };
51
52 //CONFIG3_ID
53 #define m_AHB_AUD_DMA           (1 << 1)
54 #define m_GP_AUD                (1 << 0)
55
56
57 /*Interrupt Registers*/
58 #define INTERRUPT_BASE                  0x0100
59 enum INTERRUPT_REG {
60         IH_FC_STAT0 = INTERRUPT_BASE,
61         IH_FC_STAT1,
62         IH_FC_STAT2,
63         IH_AS_STAT0,
64         IH_PHY_STAT0,
65         IH_I2CM_STAT0,
66         IH_CEC_STAT0,
67         IH_VP_STAT0,
68         IH_I2CMPHY_STAT0,
69         IH_AHBDMAAUD_STAT0,
70         IH_DECODE = 0x0170,
71         IH_MUTE_FC_STAT0 = 0x0180,
72         IH_MUTE_FC_STAT1,
73         IH_MUTE_FC_STAT2,
74         IH_MUTE_AS_STAT0,
75         IH_MUTE_PHY_STAT0,
76         IH_MUTE_I2CM_STAT0,
77         IH_MUTE_CEC_STAT0,
78         IH_MUTE_VP_STAT0,
79         IH_MUTE_I2CMPHY_STAT0,
80         IH_MUTE_AHBDMAAUD_STAT0,
81         IH_MUTE = 0x1ff
82 };
83
84 //IH_FC_STAT0
85 #define m_AUD_INFOFRAME         (1 << 7)
86 #define m_AUD_CONTENT_PROTECT   (1 << 6)
87 #define m_AUD_HBR               (1 << 5)
88 #define m_AUD_SAMPLE            (1 << 2)
89 #define m_AUD_CLK_REGEN         (1 << 1)
90 #define m_NULL_PACKET           (1 << 0)
91
92 //IH_FC_STAT1
93 #define m_GMD                   (1 << 7)
94 #define m_ISCR1                 (1 << 6)
95 #define m_ISCR2                 (1 << 5)
96 #define m_VSD                   (1 << 4)
97 #define m_SPD                   (1 << 3)
98 #define m_AVI_INFOFRAME         (1 << 1)
99 #define m_GCP                   (1 << 0)
100
101 //IH_FC_STAT2
102 #define m_LOWPRIO_OVERFLOW      (1 << 1)
103 #define m_HIGHPRIO_OVERFLOW     (1 << 0)
104
105 //IH_AS_SATA0
106 #define m_FIFO_UNDERRUN         (1 << 4)
107 #define m_FIFO_OVERRUN          (1 << 3)
108 #define m_AUD_FIFO_UDFLOW_THR   (1 << 2)
109 #define m_AUD_FIFO_UDFLOW       (1 << 1)
110 #define m_AUD_FIFO_OVERFLOW     (1 << 0)
111
112 //IH_PHY_STAT0
113 #define m_RX_SENSE3             (1 << 5)
114 #define m_RX_SENSE2             (1 << 4)
115 #define m_RX_SENSE1             (1 << 3)
116 #define m_RX_SENSE0             (1 << 2)
117 #define m_TX_PHY_LOCK           (1 << 1)
118 #define m_HPD                   (1 << 0)
119
120 //IH_I2CM_STAT0
121 #define m_SCDC_READREQ          (1 << 2)
122 #define m_I2CM_DONE             (1 << 1)
123 #define m_I2CM_ERROR            (1 << 0)
124
125 //IH_CEC_STAT0
126 #define m_WAKEUP                (1 << 6)
127 #define m_ERR_FOLLOW            (1 << 5)
128 #define m_ERR_INITIATOR         (1 << 4)
129 #define m_ARB_LOST              (1 << 3)
130 #define m_NACK                  (1 << 2)
131 #define m_EOM                   (1 << 1)
132 #define m_DONE                  (1 << 0)
133
134 //IH_VP_STAT0
135 #define m_FIFOFULL_REPET        (1 << 7)
136 #define m_FIFOEMPTY_REPET       (1 << 6)
137 #define m_FIFOFULL_PACK         (1 << 5)
138 #define m_FIFOEMPTY_PACK        (1 << 4)
139 #define m_FIFOFULL_REMAP        (1 << 3)
140 #define m_FIFOEMPTY_REMAP       (1 << 2)
141 #define m_FIFOFULL_BYPASS       (1 << 1)
142 #define m_FIFOEMPTY_BYPASS      (1 << 0)
143
144 //IH_I2CMPHY_STAT0
145 #define m_I2CMPHY_DONE          (1 << 1)
146 #define m_I2CMPHY_ERR           (1 << 0)
147
148 //IH_AHBDMAAUD_STAT0
149 #define m_AUDDMA_INT_BUFOVERRUN (1 << 6)
150 #define m_AUDDMA_INT_ERR        (1 << 5)
151 #define m_AUDDMA_INT_LOST       (1 << 4)
152 #define m_AUDDMA_INT_RETRYSPLIT (1 << 3)
153 #define m_AUDDMA_INT_DONE       (1 << 2)
154 #define m_AUDDMA_INT_BUFFULL    (1 << 1)
155 #define m_AUDDMA_INT_BUFEMPTY   (1 << 0)
156
157 //IH_DECODE
158 #define m_IH_FC_STAT0           (1 << 7)
159 #define m_IH_FC_STAT1           (1 << 6)
160 #define m_IH_FC_STAT2_VP        (1 << 5)
161 #define m_IH_AS_STAT0           (1 << 4)
162 #define m_IH_PHY                (1 << 3)
163 #define m_IH_I2CM_STAT0         (1 << 2)
164 #define m_IH_CEC_STAT0          (1 << 1)
165 #define m_IH_AHBDMAAUD_STAT0    (1 << 0)
166
167 //IH_MUTE_FC_STAT0
168 #define m_AUDI_MUTE             (1 << 7)
169 #define m_ACP_MUTE              (1 << 6)
170 #define m_DST_MUTE              (1 << 4)
171 #define m_OBA_MUTE              (1 << 3)
172 #define m_AUDS_MUTE             (1 << 2)
173 #define m_ACR_MUTE              (1 << 1)
174 #define m_NULL_MUTE             (1 << 0)
175
176 //Ih_MUTE_FC_STAT1
177 #define m_GMD_MUTE              (1 << 7)
178 #define m_ISCR1_MUTE            (1 << 6)
179 #define m_ISCR2_MUTE            (1 << 5)
180 #define m_VSD_MUTE              (1 << 4)
181 #define m_SPD_MUTE              (1 << 3)
182 #define m_AVI_MUTE              (1 << 1)
183 #define m_GCP_MUTE              (1 << 0)
184
185
186
187 /*Video Sampler Registers*/
188 #define VIDEO_SAMPLER_BASE              0x0200
189 enum {
190         TX_INVID0 = VIDEO_SAMPLER_BASE,
191         TX_INSTUFFING,
192         TX_GYDATA0,
193         TX_GYDATA1,
194         TX_RCRDATA0,
195         TX_RCRDATA1,
196         TX_BCBDATA0,
197         TX_BCBDATA1
198 };
199
200 /*Video Packetizer Registers*/
201 #define VIDEO_PACKETIZER_BASE           0x0800
202 enum {
203         VP_STATUS = VIDEO_PACKETIZER_BASE,
204         VP_PR_CD,
205         VP_STUFF,
206         VP_REMAP,
207         VP_CONF,
208         VP_MASK = 0x0807
209 };
210
211 /*Frame Composer Registers*/
212 #define FRAME_COMPOSER_BASE             0x1000
213 enum {
214         FC_INVIDCONF = FRAME_COMPOSER_BASE,
215         FC_INHACTIV0,
216         FC_INHACTIV1,
217         FC_INHBLANK0,
218         FC_INHBLANK1,
219         FC_INVACTIV0,
220         FC_INVACTIV1,
221         FC_INVBLANK,
222         FC_HSYNCINDELAY0,
223         FC_HSYNCINDELAY1,
224         FC_HSYNCINWIDTH0,
225         FC_HSYNCINWIDTH1,
226         FC_VSYNCINDELAY,
227         FC_VSYNCINWIDTH,
228         FC_INFREQ0,
229         FC_INFREQ1,
230         FC_INFREQ2,
231         FC_CTRLDUR,
232         FC_EXCTRLDUR,
233         FC_EXCTRLSPAC,
234         FC_CH0PREAM,
235         FC_CH1PREAM,
236         FC_CH2PREAM,
237         FC_AVICONF3,
238         FC_GCP,
239         FC_AVICONF0,
240         FC_AVICONF1,
241         FC_AVICONF2,
242         FC_AVIVID,
243         FC_AVIETB0,
244         FC_AVIETB1,
245         FC_AVISBB0,
246         FC_AVISBB1,
247         FC_AVIELB0,
248         FC_AVIELB1,
249         FC_AVISRB0,
250         FC_AVISRB1,
251         FC_AUDICONF0,
252         FC_AUDICONF1,
253         FC_AUDICONF2,
254         FC_AUDICONF3,
255         FC_VSDIEEEID2,
256         FC_VSDSIZE,
257         FC_VSDIEEEID1
258         FC_VSDIEEEID0,
259         FC_VSDPAYLOAD0 = 0x1032,        //0~23
260         FC_SPDVENDORNAME0 = 0x104a,     //0~7
261         FC_SPDPRODUCTNAME0 = 0x1052,    //0~15
262         FC_SPDDEVICEINF = 0x1062,
263         FC_AUDSCONF,
264         FC_AUDSSTAT,
265         FC_AUDSV,
266         FC_AUDSU,
267         FC_AUDSCHNLS0,                  //0~8
268         FC_CTRLQHIGH = 0x1073,
269         FC_CTRLQLOW,
270         FC_ACP0,
271         FC_ACP16 = 0x1082,              //16~1
272         FC_ISCR1_0 = 0x1092,
273         FC_ISCR1_16,                    //16~1
274         FC_ISCR2_15 = 0x10a3,           //15~0
275         FC_DATAUTO0 = 0x10B3,
276         FC_DATAUTO1,
277         FC_DATAUTO2,
278         FC_DATMAN,
279         FC_DATAUTO3,
280         FC_RDRB0,
281         FC_RDRB1,
282         FC_RDRB2,
283         FC_RDRB3,
284         FC_RDRB4,
285         FC_RDRB5,
286         FC_RDRB6,
287         FC_RDRB7,
288         FC_MASK0 = 0x10d2,
289         FC_MASK1 = 0x10d6,
290         FC_MASK2 = 0x10da,
291         FC_PRCONF = 0x10e0,
292         FC_SCRAMBLER_CTRL,
293         FC_GMD_STAT,
294         FC_GMD_EN,
295         FC_GMD_UP,
296         FC_GMD_CONF,
297         FC_GMD_HB,
298         FC_GMD_PB0,                     //0~27
299         FC_DBGFORCE = 0x1200,
300         FC_DBGAUD0CH0,                  //aud0~aud2 ch0
301         FC_DBGAUD0CH1 = 0x1204,         //aud0~aud2 ch1
302         FC_DBGAUD0CH2 = 0x1207,         //aud0~aud2 ch2
303         FC_DBGAUD0CH3 = 0x120a,         //aud0~aud2 ch3
304         FC_DBGAUD0CH4 = 0x120d,         //aud0~aud2 ch4 
305         FC_DBGAUD0CH5 = 0x1210,         //aud0~aud2 ch5
306         FC_DBGAUD0CH6 = 0x1213,         //aud0~aud2 ch6
307         FC_DBGAUD0CH7 = 0x1216,         //aud0~aud2 ch7
308         FC_DBGTMDS0 = 0x1219,
309         FC_DBGTMDS1,
310         FC_DBGTMDS2             
311 };
312
313 /*HDMI Source PHY Registers*/
314 #define HDMI_SOURCE_PHY_BASE            0x3000
315 enum {
316         PHY_CONF0 = HDMI_SOURCE_PHY_BASE,
317         PHY_TST0,
318         PHY_TST1,
319         PHY_TST2,
320         PHY_STAT0,
321         PHY_INT0,
322         PHY_MASK0,
323         PHY_POL0,
324         PHY_PCLFREQ0,
325         PHY_PCLFREQ1,
326         PHY_PLLCFGFREQ0,
327         PHY_PLLCFGFREQ1,
328         PHY_PLLCFGFREQ2
329 };
330
331 /*I2C Master PHY Registers*/
332 #define I2C_MASTER_PHY_BASE             0x3020
333 enum {
334         PHY_I2CM_SLAVE = I2C_MASTER_PHY_BASE,
335         PHY_I2CM_ADDRESS,
336         PHY_I2CM_DATAO_1,
337         PHY_I2CM_DATAO_0,
338         PHY_I2CM_DATAI_1,
339         PHY_I2CM_DATAI_0,
340         PHY_I2CM_OPERATION,
341         PHY_I2CM_INT,
342         PHY_I2CM_CTLINT,
343         PHY_I2CM_DIV,
344         PHY_I2CM_SOFTRSTZ,
345         PHY_I2CM_SS_SCL_HCNT_1_ADDR,
346         PHY_I2CM_SS_SCL_HCNT_0_ADDR,
347         PHY_I2CM_SS_SCL_LCNT_1_ADDR,
348         PHY_I2CM_SS_SCL_LCNT_0_ADDR,
349         PHY_I2CM_FS_SCL_HCNT_1_ADDR,
350         PHY_I2CM_FS_SCL_HCNT_0_ADDR,
351         PHY_I2CM_FS_SCL_LCNT_1_ADDR,
352         PHY_I2CM_FS_SCL_LCNT_0_ADDR,
353         I2CM_PHY_SDA_HOLD
354 };
355
356 /*Audio Sampler Registers*/
357 #define AUDIO_SAMPLER_BASE              0x3100
358 enum {
359         AUD_CONF0 = AUDIO_SAMPLER_BASE,
360         AUD_CONF1,
361         AUD_INT,
362         AUD_CONF2,
363         AUD_INT1,
364         AUD_N1 = 0x3200,
365         AUD_N2,
366         AUD_N3,
367         AUD_CTS1,
368         AUD_CTS2,
369         AUD_CTS3,
370         AUD_INPUTCLKFS,
371         AUD_SPDIF0 = 0x3300,
372         AUD_SPDIF1,
373         AUD_SPDIFINT,
374         AUD_SPDIFINT1
375 };
376
377 /*Generic Parallel Audio Interface Registers*/
378 #define GP_AUDIO_INTERFACE_BASE         0x3500
379 enum {
380         GP_CONF0 = GP_AUDIO_INTERFACE_BASE,
381         GP_CONF1,
382         GP_CONF2,
383         GP_MASK = 0x3506
384 };
385
386 /*Audio DMA Registers*/
387 #define AUDIO_DMA_BASE                  0x3600
388 enum {
389         AHB_DMA_CONF0 = AUDIO_DMA_BASE,
390         AHB_DMA_START,
391         AHB_DMA_STOP,
392         AHB_DMA_THRSLD,
393         AHB_DMA_STRADDR_SET0_0,         //0~3
394         AHB_DMA_STPADDR_SET0_0 = 0x3608,//0~3
395         AHB_DMA_BSTADDR0 = 0x360c,      //0~3
396         AHB_DMA_MBLENGTH0 = 0x3610,     //0~3,
397         AHB_DMA_MASK = 0x3614,
398         AHB_DMA_CONF1 = 0x3616,
399         AHB_DMA_BUFFMASK = 0x3619,
400         AHB_DMA_MASK1 = 0x361b,
401         AHB_DMA_STATUS,
402         AHB_DMA_CONF2,
403         AHB_DMA_STRADDR_SET1_0 = 0x3620,//0~3
404         AHB_DMA_STPADDR_SET1_0 = 0x3624 //0~3
405 };
406
407 /*Main Controller Registers*/
408 #define MAIN_CONTROLLER_BASE            0X4000
409 enum {
410         MC_CLKDIS = 0x4001,
411         MC_SWRSTZREQ,
412         MC_OPCTRL,
413         MC_FLOWCTRL,
414         MC_PHYRSTZ,
415         MC_LOCKONCLOCK,
416         MC_HEACPHY_RST,
417         MC_LOCKONCLOCK2,
418         MC_SWRSTZREQ_2
419 };
420
421 /*Color Space Converter Registers*/
422 #define COLOR_SPACE_CONVERTER_BASE      0x4100
423 enum {
424         CSC_CFG = COLOR_SPACE_CONVERTER_BASE,
425         CSC_SCALE,
426         CSC_COEF_A1_MSB
427         CSC_COEF_A1_LSB,
428         CSC_COEF_A2_MSB,
429         CSC_COEF_A2_LSB,
430         CSC_COEF_A3_MSB,
431         CSC_COEF_A3_LSB,
432         CSC_COEF_A4_MSB,
433         CSC_COEF_A4_LSB,
434         CSC_COEF_B1_MSB,
435         CSC_COEF_B1_LSB,
436         CSC_COEF_B2_MSB,
437         CSC_COEF_B2_LSB,
438         CSC_COEF_B3_MSB,
439         CSC_COEF_B3_LSB,
440         CSC_COEF_B4_MSB,
441         CSC_COEF_B4_LSB,
442         CSC_COEF_C1_MSB,
443         CSC_COEF_C1_LSB,
444         CSC_COEF_C2_MSB,
445         CSC_COEF_C2_LSB,
446         CSC_COEF_C3_MSB,
447         CSC_COEF_C3_LSB,
448         CSC_COEF_C4_MSB,
449         CSC_COEF_C4_LSB,
450         CSC_SPARE_1,
451         CSC_SPARE_2
452 };
453
454 /*HDCP Encryption Engine Registers*/
455 #define HDCP_ENCRYPTION_ENGINE_BASE     0x5000
456 enum {
457         A_HDCPCFG0 = HDCP_ENCRYPTION_ENGINE_BASE,
458         A_HDCPCFG1,
459         A_HDCPOBS0,
460         A_HDCPOBS1,
461         A_HDCPOBS2,
462         A_HDCPOBS3,
463         A_APIINTCLR,
464         A_APIINTSTAT,
465         A_APIINTMSK,
466         A_VIDPOLCFG,
467         A_OESSWCFG,
468         A_COREVERLSB = 0x5014,
469         A_COREVERMSB,
470         A_KSVMEMCTRL,
471         HDCP_BSTATUS_0 = 0x5020,
472         HDCP_BSTATUS_1,
473         HDCP_M0_0,
474         HDCP_M0_1,
475         HDCP_M0_2,
476         HDCP_M0_3,
477         HDCP_M0_4,
478         HDCP_M0_5,
479         HDCP_M0_6,
480         HDCP_M0_7,
481         HDCP_KSV,                       //0~634
482         HDCP_VH = 0x52a5,               //0~19
483         HDCP_REVOC_SIZE_0 = 0x52b9,
484         HDCP_REVOC_SIZE_1,
485         HDCP_REVOC_LIST,                //0~5059
486 };
487
488 /*HDCP BKSV Registers*/
489 #define HDCP_BKSV_BASE                  0x7800
490 enum {
491         HDCPREG_BKSV0 = HDCP_BKSV_BASE,
492         HDCPREG_BKSV1,
493         HDCPREG_BKSV2,
494         HDCPREG_BKSV3,
495         HDCPREG_BKSV4
496 };
497
498 /*HDCP AN Registers*/
499 #define HDCP_AN_BASE                    0x7805
500 enum {
501         HDCPREG_ANCONF = HDCP_AN_BASE,
502         HDCPREG_AN0,
503         HDCPREG_AN1,
504         HDCPREG_AN2,
505         HDCPREG_AN3,
506         HDCPREG_AN4,
507         HDCPREG_AN5,
508         HDCPREG_AN6,
509         HDCPREG_AN7
510 };
511
512 /*Encrypted DPK Embedded Storage Registers*/
513 #define ENCRYPTED_DPK_EMBEDDED_BASE     0x780e
514 enum {
515         HDCPREG_RMCTL = ENCRYPTED_DPK_EMBEDDED_BASE,
516         HDCPREG_RMSTS,
517         HDCPREG_SEED0,
518         HDCPREG_SEED1,
519         HDCPREG_DPK0,
520         HDCPREG_DPK1,
521         HDCPREG_DPK2,
522         HDCPREG_DPK3,
523         HDCPREG_DPK4,
524         HDCPREG_DPK5,
525         HDCPREG_DPK6
526 };
527
528 /*CEC Engine Registers*/
529 #define CEC_ENGINE_BASE                 0x7d00
530 enum {
531         CEC_CTRL = CEC_ENGINE_BASE,
532         CEC_MASK = 0x7d02,
533         CEC_ADDR_L = 0x7d05,
534         CEC_ADDR_H,
535         CEC_TX_CNT,
536         CEC_RX_CNT,
537         CEC_TX_DATA0 = 0x7d10,          //txdata0~txdata15
538         CEC_RX_DATA0 = 0x7d20,          //rxdata0~rxdata15
539         CEC_LOCK = 0x7d30,
540         CEC_WKUPCTRL
541 };
542
543 /*I2C Master Registers*/
544 #define I2C_MASTER_BASE                 0x7e00
545 enum {
546         I2CM_SLAVE = I2C_MASTER_BASE,
547         I2CM_ADDRESS,
548         I2CM_DATAO,
549         I2CM_DATAI,
550         I2CM_OPERATION,
551         I2CM_INT,
552         I2CM_CTLINT,
553         I2CM_DIV,
554         I2CM_SEGADDR,
555         I2CM_SOFTRSTZ,
556         I2CM_SEGPTR,
557         I2CM_SS_SCL_HCNT_1_ADDR,
558         I2CM_SS_SCL_HCNT_0_ADDR,
559         I2CM_SS_SCL_LCNT_1_ADDR,
560         I2CM_SS_SCL_LCNT_0_ADDR,
561         I2CM_FS_SCL_HCNT_1_ADDR,
562         I2CM_FS_SCL_HCNT_0_ADDR,
563         I2CM_FS_SCL_LCNT_1_ADDR,
564         I2CM_FS_SCL_LCNT_0_ADDR,
565         I2CM_SDA_HOLD,
566         I2CM_SCDC_READ_UPDATE,
567         I2CM_READ_BUFF0 = 0x7e20,               //buff0~buff7
568         I2CM_SCDC_UPDATE0 = 0x7e30,
569         I2CM_SCDC_UPDATE1
570 };   
571
572
573
574
575 extern struct hdmi *hdmi;
576 static inline int hdmi_readl(u16 offset, u32 *val)
577 {
578         int ret = 0;
579         *val = readl_relaxed(hdmi->regbase + (offset) * 0x04);
580         return ret;
581 }
582
583 static inline int hdmi_writel(u16 offset, u32 val)
584 {
585         int ret = 0;
586         writel_relaxed(val, hdmi->regbase + (offset) * 0x04);
587         return ret;
588 }
589
590 static inline int hdmi_msk_reg(u16 offset, u32 msk, u32 val)
591 {
592         int ret = 0;
593         u32 temp;
594         temp = readl_relaxed(hdmi->regbase + (offset) * 0x04) & (0xFF - (msk));
595         writel_relaxed(temp | ( (val) & (msk) ),  hdmi->regbase + (offset) * 0x04);
596         return ret;
597 }
598 static inline void rk3028_hdmi_reset_pclk(void)
599 {
600         writel_relaxed(0x00010001,RK2928_CRU_BASE+ 0x128);
601         msleep(100);
602         writel_relaxed(0x00010000, RK2928_CRU_BASE + 0x128);
603 }
604
605
606 #endif