xref: /OK3568_Linux_fs/kernel/drivers/media/i2c/rk628/rk628_hdmirx.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * Copyright (c) 2020 Rockchip Electronics Co. Ltd.
4*4882a593Smuzhiyun  *
5*4882a593Smuzhiyun  * Author: Shunqing Chen <csq@rock-chips.com>
6*4882a593Smuzhiyun  */
7*4882a593Smuzhiyun 
8*4882a593Smuzhiyun #ifndef __RK628_HDMIRX_H
9*4882a593Smuzhiyun #define __RK628_HDMIRX_H
10*4882a593Smuzhiyun 
11*4882a593Smuzhiyun #include "rk628.h"
12*4882a593Smuzhiyun 
13*4882a593Smuzhiyun /* --------- EDID and HDCP KEY ------- */
14*4882a593Smuzhiyun #define EDID_BASE			0x000a0000
15*4882a593Smuzhiyun #define HDCP_KEY_BASE			0x000a8000
16*4882a593Smuzhiyun #define HDCP_KEY_KSV0			(HDCP_KEY_BASE + 4)
17*4882a593Smuzhiyun #define HDCP_KEY_DPK0			(HDCP_KEY_BASE + 36)
18*4882a593Smuzhiyun 
19*4882a593Smuzhiyun #define KEY_MAX_REGISTER		0x000a8490
20*4882a593Smuzhiyun 
21*4882a593Smuzhiyun /* --------- GPIO0 REG --------------- */
22*4882a593Smuzhiyun #define GPIO0_SWPORT_DDR_L		0xd0008
23*4882a593Smuzhiyun #define GPIO1_SWPORT_DR_L		0xe0000
24*4882a593Smuzhiyun #define GPIO1_SWPORT_DDR_L		0xe0008
25*4882a593Smuzhiyun #define GPIO1_VER_ID			0xe0078
26*4882a593Smuzhiyun 
27*4882a593Smuzhiyun /* --------- HDMI RX REG ------------- */
28*4882a593Smuzhiyun #define HDMI_RX_BASE			0x00030000
29*4882a593Smuzhiyun #define HDMI_RX_HDMI_SETUP_CTRL		(HDMI_RX_BASE + 0x0000)
30*4882a593Smuzhiyun #define HOT_PLUG_DETECT_INPUT_A_MASK	BIT(24)
31*4882a593Smuzhiyun #define HOT_PLUG_DETECT_INPUT_A(x)	UPDATE(x, 24, 24)
32*4882a593Smuzhiyun #define HOT_PLUG_DETECT_MASK		BIT(0)
33*4882a593Smuzhiyun #define HOT_PLUG_DETECT(x)		UPDATE(x, 0, 0)
34*4882a593Smuzhiyun #define HDMI_RX_HDMI_TIMER_CTRL		(HDMI_RX_BASE + 0x0008)
35*4882a593Smuzhiyun #define HDMI_RX_HDMI_RES_OVR		(HDMI_RX_BASE + 0x0010)
36*4882a593Smuzhiyun #define HDMI_RX_HDMI_PLL_FRQSET2	(HDMI_RX_BASE + 0x0020)
37*4882a593Smuzhiyun #define HDMI_RX_HDMI_PCB_CTRL		(HDMI_RX_BASE + 0x0038)
38*4882a593Smuzhiyun #define SEL_PIXCLKSRC(x)		UPDATE(x, 19, 18)
39*4882a593Smuzhiyun #define INPUT_SELECT_MASK		BIT(16)
40*4882a593Smuzhiyun #define INPUT_SELECT(x)			UPDATE(x, 16, 16)
41*4882a593Smuzhiyun #define HDMI_RX_HDMI_PHS_CTR		(HDMI_RX_BASE + 0x0040)
42*4882a593Smuzhiyun #define HDMI_RX_HDMI_EQ_MEAS_CTRL	(HDMI_RX_BASE + 0x005c)
43*4882a593Smuzhiyun #define HDMI_RX_HDMI_CTRL		(HDMI_RX_BASE + 0x0064)
44*4882a593Smuzhiyun #define HDMI_RX_HDMI_MODE_RECOVER	(HDMI_RX_BASE + 0x0080)
45*4882a593Smuzhiyun #define SPIKE_FILTER_EN_MASK		BIT(18)
46*4882a593Smuzhiyun #define SPIKE_FILTER_EN(x)		UPDATE(x, 18, 18)
47*4882a593Smuzhiyun #define DVI_MODE_HYST_MASK		GENMASK(17, 13)
48*4882a593Smuzhiyun #define DVI_MODE_HYST(x)		UPDATE(x, 17, 13)
49*4882a593Smuzhiyun #define HDMI_MODE_HYST_MASK		GENMASK(12, 8)
50*4882a593Smuzhiyun #define HDMI_MODE_HYST(x)		UPDATE(x, 12, 8)
51*4882a593Smuzhiyun #define HDMI_MODE_MASK			GENMASK(7, 6)
52*4882a593Smuzhiyun #define HDMI_MODE(x)			UPDATE(x, 7, 6)
53*4882a593Smuzhiyun #define GB_DET_MASK			GENMASK(5, 4)
54*4882a593Smuzhiyun #define GB_DET(x)			UPDATE(x, 5, 4)
55*4882a593Smuzhiyun #define EESS_OESS_MASK			GENMASK(3, 2)
56*4882a593Smuzhiyun #define EESS_OESS(x)			UPDATE(x, 3, 2)
57*4882a593Smuzhiyun #define SEL_CTL01_MASK			GENMASK(1, 0)
58*4882a593Smuzhiyun #define SEL_CTL01(x)			UPDATE(x, 1, 0)
59*4882a593Smuzhiyun #define HDMI_RX_HDMI_ERROR_PROTECT	(HDMI_RX_BASE + 0x0084)
60*4882a593Smuzhiyun #define RG_BLOCK_OFF(x)			UPDATE(x, 20, 20)
61*4882a593Smuzhiyun #define BLOCK_OFF(x)			UPDATE(x, 19, 19)
62*4882a593Smuzhiyun #define VALID_MODE(x)			UPDATE(x, 18, 16)
63*4882a593Smuzhiyun #define CTRL_FILT_SENS(x)		UPDATE(x, 13, 12)
64*4882a593Smuzhiyun #define VS_FILT_SENS(x)			UPDATE(x, 11, 10)
65*4882a593Smuzhiyun #define HS_FILT_SENS(x)			UPDATE(x, 9, 8)
66*4882a593Smuzhiyun #define DE_MEASURE_MODE(x)		UPDATE(x, 7, 6)
67*4882a593Smuzhiyun #define DE_REGEN(x)			UPDATE(x, 5, 5)
68*4882a593Smuzhiyun #define DE_FILTER_SENS(x)		UPDATE(x, 4, 3)
69*4882a593Smuzhiyun #define HDMI_RX_HDMI_ERD_STS		(HDMI_RX_BASE + 0x0088)
70*4882a593Smuzhiyun #define HDMI_RX_HDMI_SYNC_CTRL		(HDMI_RX_BASE + 0x0090)
71*4882a593Smuzhiyun #define VS_POL_ADJ_MODE_MASK		GENMASK(4, 3)
72*4882a593Smuzhiyun #define VS_POL_ADJ_MODE(x)		UPDATE(x, 4, 3)
73*4882a593Smuzhiyun #define HS_POL_ADJ_MODE_MASK		GENMASK(2, 1)
74*4882a593Smuzhiyun #define HS_POL_ADJ_MODE(x)		UPDATE(x, 2, 1)
75*4882a593Smuzhiyun #define HDMI_RX_HDMI_CKM_EVLTM		(HDMI_RX_BASE + 0x0094)
76*4882a593Smuzhiyun #define HDMI_RX_HDMI_CKM_F		(HDMI_RX_BASE + 0x0098)
77*4882a593Smuzhiyun #define HDMI_RX_HDMI_CKM_RESULT		(HDMI_RX_BASE + 0x009c)
78*4882a593Smuzhiyun #define HDMI_RX_HDMI_RESMPL_CTRL	(HDMI_RX_BASE + 0x00a4)
79*4882a593Smuzhiyun #define HDMI_RX_HDMI_DCM_CTRL		(HDMI_RX_BASE + 0x00a8)
80*4882a593Smuzhiyun #define DCM_DEFAULT_PHASE(x)		UPDATE(x, 18, 18)
81*4882a593Smuzhiyun #define DCM_COLOUR_DEPTH_SEL(x)		UPDATE(x, 12, 12)
82*4882a593Smuzhiyun #define DCM_COLOUR_DEPTH(x)		UPDATE(x, 11, 8)
83*4882a593Smuzhiyun #define DCM_GCP_ZERO_FIELDS(x)		UPDATE(x, 5, 2)
84*4882a593Smuzhiyun #define HDMI_VM_CFG_CH2			(HDMI_RX_BASE + 0x00b4)
85*4882a593Smuzhiyun #define HDMI_RX_HDCP_CTRL		(HDMI_RX_BASE + 0x00c0)
86*4882a593Smuzhiyun #define HDCP_ENABLE_MASK		BIT(24)
87*4882a593Smuzhiyun #define HDCP_ENABLE(x)			UPDATE(x, 24, 24)
88*4882a593Smuzhiyun #define FREEZE_HDCP_FSM_MASK		BIT(21)
89*4882a593Smuzhiyun #define FREEZE_HDCP_FSM(x)		UPDATE(x, 21, 21)
90*4882a593Smuzhiyun #define FREEZE_HDCP_STATE_MASK		GENMASK(20, 15)
91*4882a593Smuzhiyun #define FREEZE_HDCP_STATE(x)		UPDATE(x, 20, 15)
92*4882a593Smuzhiyun #define HDCP_CTL_MASK			GENMASK(9, 8)
93*4882a593Smuzhiyun #define HDCP_CTL(x)			UPDATE(x, 9, 8)
94*4882a593Smuzhiyun #define HDCP_RI_RATE_MASK		GENMASK(7, 6)
95*4882a593Smuzhiyun #define HDCP_RI_RATE(x)			UPDATE(x, 7, 6)
96*4882a593Smuzhiyun #define HDMI_MODE_ENABLE_MASK		BIT(2)
97*4882a593Smuzhiyun #define HDMI_MODE_ENABLE(x)		UPDATE(x, 2, 2)
98*4882a593Smuzhiyun #define KEY_DECRIPT_ENABLE_MASK		BIT(1)
99*4882a593Smuzhiyun #define KEY_DECRIPT_ENABLE(x)		UPDATE(x, 1, 1)
100*4882a593Smuzhiyun #define HDCP_ENC_EN_MASK		BIT(0)
101*4882a593Smuzhiyun #define HDCP_ENC_EN(x)			UPDATE(x, 0, 0)
102*4882a593Smuzhiyun #define HDMI_RX_HDCP_SETTINGS		(HDMI_RX_BASE + 0x00c4)
103*4882a593Smuzhiyun #define HDMI_RESERVED(x)		UPDATE(x, 13, 13)
104*4882a593Smuzhiyun #define HDMI_RESERVED_MASK		BIT(13)
105*4882a593Smuzhiyun #define FAST_I2C(x)			UPDATE(x, 12, 12)
106*4882a593Smuzhiyun #define FAST_I2C_MASK			BIT(12)
107*4882a593Smuzhiyun #define ONE_DOT_ONE(x)			UPDATE(x, 9, 9)
108*4882a593Smuzhiyun #define ONE_DOT_ONE_MASK		BIT(9)
109*4882a593Smuzhiyun #define FAST_REAUTH(x)			UPDATE(x, 8, 8)
110*4882a593Smuzhiyun #define FAST_REAUTH_MASK		BIT(8)
111*4882a593Smuzhiyun #define HDMI_RX_HDCP_SEED		(HDMI_RX_BASE + 0x00c8)
112*4882a593Smuzhiyun #define HDMI_RX_HDCP_KIDX		(HDMI_RX_BASE + 0x00d4)
113*4882a593Smuzhiyun #define HDMI_RX_HDCP_DBG		(HDMI_RX_BASE + 0x00e0)
114*4882a593Smuzhiyun #define HDMI_RX_HDCP_AN0		(HDMI_RX_BASE + 0x00f0)
115*4882a593Smuzhiyun #define HDMI_RX_HDCP_STS		(HDMI_RX_BASE + 0x00fc)
116*4882a593Smuzhiyun #define HDMI_RX_MD_HCTRL1		(HDMI_RX_BASE + 0x0140)
117*4882a593Smuzhiyun #define HACT_PIX_ITH(x)			UPDATE(x, 10, 8)
118*4882a593Smuzhiyun #define HACT_PIX_SRC(x)			UPDATE(x, 5, 5)
119*4882a593Smuzhiyun #define HTOT_PIX_SRC(x)			UPDATE(x, 4, 4)
120*4882a593Smuzhiyun #define HDMI_RX_MD_HCTRL2		(HDMI_RX_BASE + 0x0144)
121*4882a593Smuzhiyun #define HS_CLK_ITH(x)			UPDATE(x, 14, 12)
122*4882a593Smuzhiyun #define HTOT32_CLK_ITH(x)		UPDATE(x, 9, 8)
123*4882a593Smuzhiyun #define VS_ACT_TIME(x)			UPDATE(x, 5, 5)
124*4882a593Smuzhiyun #define HS_ACT_TIME(x)			UPDATE(x, 4, 3)
125*4882a593Smuzhiyun #define H_START_POS(x)			UPDATE(x, 1, 0)
126*4882a593Smuzhiyun #define HDMI_RX_MD_HT0			(HDMI_RX_BASE + 0x0148)
127*4882a593Smuzhiyun #define HDMI_RX_MD_HT1			(HDMI_RX_BASE + 0x014c)
128*4882a593Smuzhiyun #define HDMI_RX_MD_HACT_PX		(HDMI_RX_BASE + 0x0150)
129*4882a593Smuzhiyun #define HDMI_RX_MD_VCTRL		(HDMI_RX_BASE + 0x0158)
130*4882a593Smuzhiyun #define V_OFFS_LIN_MODE(x)		UPDATE(x, 4, 4)
131*4882a593Smuzhiyun #define V_EDGE(x)			UPDATE(x, 1, 1)
132*4882a593Smuzhiyun #define V_MODE(x)			UPDATE(x, 0, 0)
133*4882a593Smuzhiyun #define HDMI_RX_MD_VSC			(HDMI_RX_BASE + 0x015c)
134*4882a593Smuzhiyun #define HDMI_RX_MD_VOL			(HDMI_RX_BASE + 0x0164)
135*4882a593Smuzhiyun #define HDMI_RX_MD_VAL			(HDMI_RX_BASE + 0x0168)
136*4882a593Smuzhiyun #define HDMI_RX_MD_VTH			(HDMI_RX_BASE + 0x016c)
137*4882a593Smuzhiyun #define VOFS_LIN_ITH(x)			UPDATE(x, 11, 10)
138*4882a593Smuzhiyun #define VACT_LIN_ITH(x)			UPDATE(x, 9, 8)
139*4882a593Smuzhiyun #define VTOT_LIN_ITH(x)			UPDATE(x, 7, 6)
140*4882a593Smuzhiyun #define VS_CLK_ITH(x)			UPDATE(x, 5, 3)
141*4882a593Smuzhiyun #define VTOT_CLK_ITH(x)			UPDATE(x, 2, 0)
142*4882a593Smuzhiyun #define HDMI_RX_MD_VTL			(HDMI_RX_BASE + 0x0170)
143*4882a593Smuzhiyun #define HDMI_RX_MD_IL_POL		(HDMI_RX_BASE + 0x017c)
144*4882a593Smuzhiyun #define FAFIELDDET_EN(x)		UPDATE(x, 2, 2)
145*4882a593Smuzhiyun #define FIELD_POL_MODE(x)		UPDATE(x, 1, 0)
146*4882a593Smuzhiyun #define HDMI_RX_MD_STS			(HDMI_RX_BASE + 0x0180)
147*4882a593Smuzhiyun #define ILACE_STS			BIT(3)
148*4882a593Smuzhiyun #define HDMI_RX_AUD_CTRL		(HDMI_RX_BASE + 0x0200)
149*4882a593Smuzhiyun #define HDMI_RX_AUD_PLL_CTRL		(HDMI_RX_BASE + 0x0208)
150*4882a593Smuzhiyun #define PLL_LOCK_TOGGLE_DIV_MASK	GENMASK(27, 24)
151*4882a593Smuzhiyun #define PLL_LOCK_TOGGLE_DIV(x)		UPDATE(x, 27, 24)
152*4882a593Smuzhiyun #define HDMI_RX_AUD_CLK_CTRL		(HDMI_RX_BASE + 0x0214)
153*4882a593Smuzhiyun #define CTS_N_REF_MASK			BIT(4)
154*4882a593Smuzhiyun #define CTS_N_REF(x)			UPDATE(x, 4, 4)
155*4882a593Smuzhiyun #define HDMI_RX_AUD_FIFO_CTRL		(HDMI_RX_BASE + 0x0240)
156*4882a593Smuzhiyun #define AFIF_SUBPACKET_DESEL_MASK	GENMASK(27, 24)
157*4882a593Smuzhiyun #define AFIF_SUBPACKET_DESEL(x)		UPDATE(x, 27, 24)
158*4882a593Smuzhiyun #define AFIF_SUBPACKETS_MASK		BIT(16)
159*4882a593Smuzhiyun #define AFIF_SUBPACKETS(x)		UPDATE(x, 16, 16)
160*4882a593Smuzhiyun #define HDMI_RX_AUD_FIFO_TH		(HDMI_RX_BASE + 0x0244)
161*4882a593Smuzhiyun #define AFIF_TH_START_MASK		GENMASK(26, 18)
162*4882a593Smuzhiyun #define AFIF_TH_START(x)		UPDATE(x, 26, 18)
163*4882a593Smuzhiyun #define AFIF_TH_MAX_MASK		GENMASK(17, 9)
164*4882a593Smuzhiyun #define AFIF_TH_MAX(x)			UPDATE(x, 17, 9)
165*4882a593Smuzhiyun #define AFIF_TH_MIN_MASK		GENMASK(8, 0)
166*4882a593Smuzhiyun #define AFIF_TH_MIN(x)			UPDATE(x, 8, 0)
167*4882a593Smuzhiyun #define HDMI_RX_AUD_CHEXTR_CTRL		(HDMI_RX_BASE + 0x0254)
168*4882a593Smuzhiyun #define AUD_LAYOUT_CTRL(x)		UPDATE(x, 1, 0)
169*4882a593Smuzhiyun #define HDMI_RX_AUD_MUTE_CTRL		(HDMI_RX_BASE + 0x0258)
170*4882a593Smuzhiyun #define APPLY_INT_MUTE(x)		UPDATE(x, 31, 31)
171*4882a593Smuzhiyun #define APORT_SHDW_CTRL(x)		UPDATE(x, 22, 21)
172*4882a593Smuzhiyun #define AUTO_ACLK_MUTE(x)		UPDATE(x, 20, 19)
173*4882a593Smuzhiyun #define AUD_MUTE_SPEED(x)		UPDATE(x, 16, 10)
174*4882a593Smuzhiyun #define AUD_AVMUTE_EN(x)		UPDATE(x, 7, 7)
175*4882a593Smuzhiyun #define AUD_MUTE_SEL(x)			UPDATE(x, 6, 5)
176*4882a593Smuzhiyun #define AUD_MUTE_MODE(x)		UPDATE(x, 4, 3)
177*4882a593Smuzhiyun #define HDMI_RX_AUD_FIFO_FILLSTS1	(HDMI_RX_BASE + 0x025c)
178*4882a593Smuzhiyun #define HDMI_RX_AUD_SAO_CTRL		(HDMI_RX_BASE + 0x0260)
179*4882a593Smuzhiyun #define I2S_ENABLE_BITS_MASK		GENMASK(10, 5)
180*4882a593Smuzhiyun #define I2S_ENABLE_BITS(x)		UPDATE(x, 10, 5)
181*4882a593Smuzhiyun #define I2S_LPCM_BPCUV_MASK		BIT(11)
182*4882a593Smuzhiyun #define I2S_LPCM_BPCUV(x)		UPDATE(x, 11, 11)
183*4882a593Smuzhiyun #define I2S_32_16_MASK			BIT(0)
184*4882a593Smuzhiyun #define I2S_32_16(x)			UPDATE(x, 0, 0)
185*4882a593Smuzhiyun #define HDMI_RX_AUD_PAO_CTRL		(HDMI_RX_BASE + 0x0264)
186*4882a593Smuzhiyun #define PAO_RATE(x)			UPDATE(x, 17, 16)
187*4882a593Smuzhiyun #define HDMI_RX_AUD_FIFO_STS		(HDMI_RX_BASE + 0x027c)
188*4882a593Smuzhiyun #define HDMI_RX_AUDPLL_GEN_CTS		(HDMI_RX_BASE + 0x0280)
189*4882a593Smuzhiyun #define HDMI_RX_AUDPLL_GEN_N		(HDMI_RX_BASE + 0x0284)
190*4882a593Smuzhiyun #define HDMI_RX_SNPS_PHYG3_CTRL		(HDMI_RX_BASE + 0x02c0)
191*4882a593Smuzhiyun #define PORTSELECT(x)			UPDATE(x, 3, 2)
192*4882a593Smuzhiyun #define HDMI_RX_PDEC_CTRL		(HDMI_RX_BASE + 0x0300)
193*4882a593Smuzhiyun #define PFIFO_STORE_FILTER_EN_MASK	BIT(31)
194*4882a593Smuzhiyun #define PFIFO_STORE_FILTER_EN(x)	UPDATE(x, 31, 31)
195*4882a593Smuzhiyun #define PFIFO_STORE_DRM_IF_MASK		BIT(29)
196*4882a593Smuzhiyun #define PFIFO_STORE_DRM_IF(x)		UPDATE(x, 29, 29)
197*4882a593Smuzhiyun #define PFIFO_STORE_AMP_MASK		BIT(28)
198*4882a593Smuzhiyun #define PFIFO_STORE_AMP(x)		UPDATE(x, 28, 28)
199*4882a593Smuzhiyun #define PFIFO_STORE_NTSCVBI_IF_MASK	BIT(27)
200*4882a593Smuzhiyun #define PFIFO_STORE_NTSCVBI_IF(x)	UPDATE(x, 27, 27)
201*4882a593Smuzhiyun #define PFIFO_STORE_MPEGS_IF_MASK	BIT(26)
202*4882a593Smuzhiyun #define PFIFO_STORE_MPEGS_IF(x)		UPDATE(x, 26, 26)
203*4882a593Smuzhiyun #define PFIFO_STORE_AUD_IF_MASK		BIT(25)
204*4882a593Smuzhiyun #define PFIFO_STORE_AUD_IF(x)		UPDATE(x, 25, 25)
205*4882a593Smuzhiyun #define PFIFO_STORE_SPD_IF_MASK		BIT(24)
206*4882a593Smuzhiyun #define PFIFO_STORE_SPD_IF(x)		UPDATE(x, 24, 24)
207*4882a593Smuzhiyun #define PFIFO_STORE_AVI_IF_MASK		BIT(23)
208*4882a593Smuzhiyun #define PFIFO_STORE_AVI_IF(x)		UPDATE(x, 23, 23)
209*4882a593Smuzhiyun #define PFIFO_STORE_VS_IF_MASK		BIT(22)
210*4882a593Smuzhiyun #define PFIFO_STORE_VS_IF(x)		UPDATE(x, 22, 22)
211*4882a593Smuzhiyun #define PFIFO_STORE_GMTP_MASK		BIT(21)
212*4882a593Smuzhiyun #define PFIFO_STORE_GMTP(x)		UPDATE(x, 21, 21)
213*4882a593Smuzhiyun #define PFIFO_STORE_ISRC2_MASK		BIT(20)
214*4882a593Smuzhiyun #define PFIFO_STORE_ISRC2(x)		UPDATE(x, 20, 20)
215*4882a593Smuzhiyun #define PFIFO_STORE_ISRC1_MASK		BIT(19)
216*4882a593Smuzhiyun #define PFIFO_STORE_ISRC1(x)		UPDATE(x, 19, 19)
217*4882a593Smuzhiyun #define PFIFO_STORE_ACP_MASK		BIT(18)
218*4882a593Smuzhiyun #define PFIFO_STORE_ACP(x)		UPDATE(x, 18, 18)
219*4882a593Smuzhiyun #define PFIFO_STORE_GCP_MASK		BIT(17)
220*4882a593Smuzhiyun #define PFIFO_STORE_GCP(x)		UPDATE(x, 17, 17)
221*4882a593Smuzhiyun #define PFIFO_STORE_ACR_MASK		BIT(16)
222*4882a593Smuzhiyun #define PFIFO_STORE_ACR(x)		UPDATE(x, 16, 16)
223*4882a593Smuzhiyun #define GCPFORCE_SETAVMUTE_MASK		BIT(13)
224*4882a593Smuzhiyun #define GCPFORCE_SETAVMUTE(x)		UPDATE(x, 13, 13)
225*4882a593Smuzhiyun #define PDEC_BCH_EN_MASK		BIT(0)
226*4882a593Smuzhiyun #define PDEC_BCH_EN(x)			UPDATE(x, 0, 0)
227*4882a593Smuzhiyun #define HDMI_RX_PDEC_FIFO_CFG		(HDMI_RX_BASE + 0x0304)
228*4882a593Smuzhiyun #define HDMI_RX_PDEC_AUDIODET_CTRL	(HDMI_RX_BASE + 0x0310)
229*4882a593Smuzhiyun #define AUDIODET_THRESHOLD(x)		UPDATE(x, 13, 9)
230*4882a593Smuzhiyun #define HDMI_RX_PDEC_ACRM_CTRL		(HDMI_RX_BASE + 0x0330)
231*4882a593Smuzhiyun #define DELTACTS_IRQTRIG(x)		UPDATE(x, 4, 2)
232*4882a593Smuzhiyun #define HDMI_RX_PDEC_ERR_FILTER		(HDMI_RX_BASE + 0x033c)
233*4882a593Smuzhiyun #define HDMI_RX_PDEC_ASP_CTRL		(HDMI_RX_BASE + 0x0340)
234*4882a593Smuzhiyun #define HDMI_RX_PDEC_STS		(HDMI_RX_BASE + 0x0360)
235*4882a593Smuzhiyun #define DVI_DET				BIT(28)
236*4882a593Smuzhiyun #define HDMI_RX_PDEC_GCP_AVMUTE		(HDMI_RX_BASE + 0x0380)
237*4882a593Smuzhiyun #define HDMI_RX_PDEC_AVI_PB		(HDMI_RX_BASE + 0x03a4)
238*4882a593Smuzhiyun #define VIDEO_FORMAT_MASK		GENMASK(6, 5)
239*4882a593Smuzhiyun #define VIDEO_FORMAT(x)			UPDATE(x, 6, 5)
240*4882a593Smuzhiyun #define ACT_INFO_PRESENT_MASK		BIT(4)
241*4882a593Smuzhiyun #define HDMI_RX_PDEC_ACR_CTS		(HDMI_RX_BASE + 0x0390)
242*4882a593Smuzhiyun #define HDMI_RX_PDEC_ACR_N		(HDMI_RX_BASE + 0x0394)
243*4882a593Smuzhiyun #define HDMI_RX_PDEC_AIF_CTRL		(HDMI_RX_BASE + 0x03c0)
244*4882a593Smuzhiyun #define FC_LFE_EXCHG(x)			UPDATE(x, 18, 18)
245*4882a593Smuzhiyun #define HDMI_RX_PDEC_AIF_PB0		(HDMI_RX_BASE + 0x03c8)
246*4882a593Smuzhiyun 
247*4882a593Smuzhiyun #define HDMI_RX_HDMI20_CONTROL		(HDMI_RX_BASE + 0x0800)
248*4882a593Smuzhiyun #define PVO1UNMUTE(x)			UPDATE(x, 29, 29)
249*4882a593Smuzhiyun #define PIXELMODE(x)			UPDATE(x, 28, 28)
250*4882a593Smuzhiyun #define CTRLCHECKEN(x)			UPDATE(x, 8, 8)
251*4882a593Smuzhiyun #define SCDC_ENABLE(x)			UPDATE(x, 4, 4)
252*4882a593Smuzhiyun #define SCRAMBEN_SEL(x)			UPDATE(x, 1, 0)
253*4882a593Smuzhiyun #define HDMI_RX_SCDC_I2CCONFIG		(HDMI_RX_BASE + 0x0804)
254*4882a593Smuzhiyun #define I2CSPIKESUPPR(x)		UPDATE(x, 25, 24)
255*4882a593Smuzhiyun #define HDMI_RX_SCDC_CONFIG		(HDMI_RX_BASE + 0x0808)
256*4882a593Smuzhiyun #define POWERPROVIDED_MASK		BIT(0)
257*4882a593Smuzhiyun #define HDMI_RX_CHLOCK_CONFIG		(HDMI_RX_BASE + 0x080c)
258*4882a593Smuzhiyun #define CHLOCKMAXER(x)			UPDATE(x, 29, 20)
259*4882a593Smuzhiyun #define MILISECTIMERLIMIT(x)		UPDATE(x, 15, 0)
260*4882a593Smuzhiyun #define HDMI_RX_HDCP22_CONTROL		(HDMI_RX_BASE + 0x081c)
261*4882a593Smuzhiyun #define HDMI_RX_SCDC_REGS0		(HDMI_RX_BASE + 0x0820)
262*4882a593Smuzhiyun #define HDMI_RX_SCDC_REGS1		(HDMI_RX_BASE + 0x0824)
263*4882a593Smuzhiyun #define HDMI_RX_SCDC_REGS2		(HDMI_RX_BASE + 0x0828)
264*4882a593Smuzhiyun #define HDMI_RX_SCDC_REGS3		(HDMI_RX_BASE + 0x082c)
265*4882a593Smuzhiyun #define HDMI_RX_SCDC_WRDATA0		(HDMI_RX_BASE + 0x0860)
266*4882a593Smuzhiyun #define MANUFACTUREROUI(x)		UPDATE(x, 31, 8)
267*4882a593Smuzhiyun #define SINKVERSION(x)			UPDATE(x, 7, 0)
268*4882a593Smuzhiyun 
269*4882a593Smuzhiyun #define HDMI_RX_HDMI2_IEN_CLR		(HDMI_RX_BASE + 0x0f60)
270*4882a593Smuzhiyun #define HDMI_RX_HDMI2_ISTS		(HDMI_RX_BASE + 0x0f68)
271*4882a593Smuzhiyun #define HDMI_RX_PDEC_IEN_CLR		(HDMI_RX_BASE + 0x0f78)
272*4882a593Smuzhiyun #define ACR_N_CHG_ICLR			BIT(23)
273*4882a593Smuzhiyun #define ACR_CTS_CHG_ICLR		BIT(22)
274*4882a593Smuzhiyun #define GCP_AV_MUTE_CHG_ENCLR		BIT(21)
275*4882a593Smuzhiyun #define AIF_RCV_ENCLR			BIT(19)
276*4882a593Smuzhiyun #define AVI_RCV_ENCLR			BIT(18)
277*4882a593Smuzhiyun #define GCP_RCV_ENCLR			BIT(16)
278*4882a593Smuzhiyun #define HDMI_RX_PDEC_IEN_SET		(HDMI_RX_BASE + 0x0f7c)
279*4882a593Smuzhiyun #define ACR_N_CHG_IEN			BIT(23)
280*4882a593Smuzhiyun #define ACR_CTS_CHG_IEN			BIT(22)
281*4882a593Smuzhiyun #define GCP_AV_MUTE_CHG_ENSET		BIT(21)
282*4882a593Smuzhiyun #define AIF_RCV_ENSET			BIT(19)
283*4882a593Smuzhiyun #define AVI_RCV_ENSET			BIT(18)
284*4882a593Smuzhiyun #define GCP_RCV_ENSET			BIT(16)
285*4882a593Smuzhiyun #define AMP_RCV_ENSET			BIT(14)
286*4882a593Smuzhiyun #define HDMI_RX_PDEC_ISTS		(HDMI_RX_BASE + 0x0f80)
287*4882a593Smuzhiyun #define GCP_AV_MUTE_CHG_ISTS		BIT(21)
288*4882a593Smuzhiyun #define AIF_RCV_ISTS			BIT(19)
289*4882a593Smuzhiyun #define AVI_RCV_ISTS			BIT(18)
290*4882a593Smuzhiyun #define GCP_RCV_ISTS			BIT(16)
291*4882a593Smuzhiyun #define AMP_RCV_ISTS			BIT(14)
292*4882a593Smuzhiyun #define HDMI_RX_PDEC_IEN		(HDMI_RX_BASE + 0x0f84)
293*4882a593Smuzhiyun #define HDMI_RX_PDEC_ICLR		(HDMI_RX_BASE + 0x0f88)
294*4882a593Smuzhiyun #define HDMI_RX_PDEC_ISET		(HDMI_RX_BASE + 0x0f8c)
295*4882a593Smuzhiyun #define HDMI_RX_AUD_CEC_IEN_CLR		(HDMI_RX_BASE + 0x0f90)
296*4882a593Smuzhiyun #define HDMI_RX_AUD_CEC_IEN		(HDMI_RX_BASE + 0x0f9c)
297*4882a593Smuzhiyun #define HDMI_RX_AUD_FIFO_IEN_CLR	(HDMI_RX_BASE + 0x0fa8)
298*4882a593Smuzhiyun #define HDMI_RX_AUD_FIFO_IEN_SET	(HDMI_RX_BASE + 0x0fac)
299*4882a593Smuzhiyun #define AFIF_OVERFL_ENSET		BIT(4)
300*4882a593Smuzhiyun #define AFIF_UNDERFL_ENSET		BIT(3)
301*4882a593Smuzhiyun #define AFIF_THS_PASS_ENSET		BIT(2)
302*4882a593Smuzhiyun #define AFIF_TH_MAX_ENSET		BIT(1)
303*4882a593Smuzhiyun #define AFIF_TH_MIN_ENSET		BIT(0)
304*4882a593Smuzhiyun #define HDMI_RX_AUD_FIFO_ISTS		(HDMI_RX_BASE + 0x0fb0)
305*4882a593Smuzhiyun #define AFIF_OVERFL_ISTS		BIT(4)
306*4882a593Smuzhiyun #define AFIF_UNDERFL_ISTS		BIT(3)
307*4882a593Smuzhiyun #define AFIF_THS_PASS_ISTS		BIT(2)
308*4882a593Smuzhiyun #define AFIF_TH_MAX_ISTS		BIT(1)
309*4882a593Smuzhiyun #define AFIF_TH_MIN_ISTS		BIT(0)
310*4882a593Smuzhiyun #define HDMI_RX_AUD_FIFO_IEN		(HDMI_RX_BASE + 0x0fb4)
311*4882a593Smuzhiyun #define HDMI_RX_AUD_FIFO_ICLR		(HDMI_RX_BASE + 0x0fb8)
312*4882a593Smuzhiyun #define HDMI_RX_MD_IEN_CLR		(HDMI_RX_BASE + 0x0fc0)
313*4882a593Smuzhiyun #define HDMI_RX_MD_IEN_SET		(HDMI_RX_BASE + 0x0fc4)
314*4882a593Smuzhiyun #define VACT_LIN_ENSET			BIT(9)
315*4882a593Smuzhiyun #define HACT_PIX_ENSET			BIT(6)
316*4882a593Smuzhiyun #define HS_CLK_ENSET			BIT(5)
317*4882a593Smuzhiyun #define DE_ACTIVITY_ENSET		BIT(2)
318*4882a593Smuzhiyun #define VS_ACT_ENSET			BIT(1)
319*4882a593Smuzhiyun #define HS_ACT_ENSET			BIT(0)
320*4882a593Smuzhiyun #define HDMI_RX_MD_ISTS			(HDMI_RX_BASE + 0x0fc8)
321*4882a593Smuzhiyun #define VACT_LIN_ISTS			BIT(9)
322*4882a593Smuzhiyun #define HACT_PIX_ISTS			BIT(6)
323*4882a593Smuzhiyun #define HS_CLK_ISTS			BIT(5)
324*4882a593Smuzhiyun #define DE_ACTIVITY_ISTS		BIT(2)
325*4882a593Smuzhiyun #define VS_ACT_ISTS			BIT(1)
326*4882a593Smuzhiyun #define HS_ACT_ISTS			BIT(0)
327*4882a593Smuzhiyun #define HDMI_RX_MD_IEN			(HDMI_RX_BASE + 0x0fcc)
328*4882a593Smuzhiyun #define HDMI_RX_MD_ICLR			(HDMI_RX_BASE + 0x0fd0)
329*4882a593Smuzhiyun #define HDMI_RX_MD_ISET			(HDMI_RX_BASE + 0x0fd4)
330*4882a593Smuzhiyun #define HDMI_RX_HDMI_IEN_CLR		(HDMI_RX_BASE + 0x0fd8)
331*4882a593Smuzhiyun #define CLK_CHANGE_ENCLR		BIT(6)
332*4882a593Smuzhiyun #define HDMI_RX_HDMI_IEN_SET		(HDMI_RX_BASE + 0x0fdc)
333*4882a593Smuzhiyun #define CLK_CHANGE_ENSET		BIT(6)
334*4882a593Smuzhiyun #define HDMI_RX_HDMI_ISTS		(HDMI_RX_BASE + 0x0fe0)
335*4882a593Smuzhiyun #define CLK_CHANGE_ISTS			BIT(6)
336*4882a593Smuzhiyun #define HDMI_RX_HDMI_IEN		(HDMI_RX_BASE + 0x0fe4)
337*4882a593Smuzhiyun #define HDMI_RX_HDMI_ICLR		(HDMI_RX_BASE + 0x0fe8)
338*4882a593Smuzhiyun #define HDMI_RX_HDMI_ISET		(HDMI_RX_BASE + 0x0fec)
339*4882a593Smuzhiyun #define CLK_CHANGE_CLR			BIT(6)
340*4882a593Smuzhiyun #define HDCP_DKSET_DONE_ISTS_MASK	BIT(31)
341*4882a593Smuzhiyun #define HDMI_RX_DMI_SW_RST		(HDMI_RX_BASE + 0x0ff0)
342*4882a593Smuzhiyun #define HDMI_RX_DMI_DISABLE_IF		(HDMI_RX_BASE + 0x0ff4)
343*4882a593Smuzhiyun #define VID_ENABLE(x)			UPDATE(x, 7, 7)
344*4882a593Smuzhiyun #define VID_ENABLE_MASK			BIT(7)
345*4882a593Smuzhiyun #define AUD_ENABLE(x)			UPDATE(x, 4, 4)
346*4882a593Smuzhiyun #define AUD_ENABLE_MASK			BIT(4)
347*4882a593Smuzhiyun #define HDMI_ENABLE(x)			UPDATE(x, 2, 2)
348*4882a593Smuzhiyun #define HDMI_ENABLE_MASK		BIT(2)
349*4882a593Smuzhiyun 
350*4882a593Smuzhiyun #define HDMI_RX_IVECTOR_INDEX_CB	(HDMI_RX_BASE + 0x32e4)
351*4882a593Smuzhiyun #define HDMI_RX_MAX_REGISTER		HDMI_RX_IVECTOR_INDEX_CB
352*4882a593Smuzhiyun 
353*4882a593Smuzhiyun #define HDCP_KEY_KSV_SIZE		8
354*4882a593Smuzhiyun #define HDCP_PRIVATE_KEY_SIZE		280
355*4882a593Smuzhiyun #define HDCP_KEY_SHA_SIZE		20
356*4882a593Smuzhiyun #define HDCP_KEY_SIZE			308
357*4882a593Smuzhiyun #define HDCP_KEY_SEED_SIZE		2
358*4882a593Smuzhiyun #define KSV_LEN				5
359*4882a593Smuzhiyun 
360*4882a593Smuzhiyun #define HDMIRX_HDCP1X_ID		13
361*4882a593Smuzhiyun 
362*4882a593Smuzhiyun struct hdcp_keys {
363*4882a593Smuzhiyun 	u8 KSV[HDCP_KEY_KSV_SIZE];
364*4882a593Smuzhiyun 	u8 devicekey[HDCP_PRIVATE_KEY_SIZE];
365*4882a593Smuzhiyun 	u8 sha[HDCP_KEY_SHA_SIZE];
366*4882a593Smuzhiyun };
367*4882a593Smuzhiyun 
368*4882a593Smuzhiyun struct rk628_hdcp {
369*4882a593Smuzhiyun 	char *seeds;
370*4882a593Smuzhiyun 	struct hdcp_keys *keys;
371*4882a593Smuzhiyun };
372*4882a593Smuzhiyun 
373*4882a593Smuzhiyun void rk628_hdmirx_set_hdcp(struct rk628 *rk628, struct rk628_hdcp *hdcp, bool en);
374*4882a593Smuzhiyun void rk628_hdmirx_controller_setup(struct rk628 *rk628);
375*4882a593Smuzhiyun 
376*4882a593Smuzhiyun typedef void *HAUDINFO;
377*4882a593Smuzhiyun HAUDINFO rk628_hdmirx_audioinfo_alloc(struct device *dev,
378*4882a593Smuzhiyun 				      struct mutex *confctl_mutex,
379*4882a593Smuzhiyun 				      struct rk628 *rk628,
380*4882a593Smuzhiyun 				      bool en);
381*4882a593Smuzhiyun void rk628_hdmirx_audio_destroy(HAUDINFO info);
382*4882a593Smuzhiyun void rk628_hdmirx_audio_setup(HAUDINFO info);
383*4882a593Smuzhiyun void rk628_hdmirx_audio_cancel_work_audio(HAUDINFO info, bool sync);
384*4882a593Smuzhiyun void rk628_hdmirx_audio_cancel_work_rate_change(HAUDINFO info, bool sync);
385*4882a593Smuzhiyun bool rk628_hdmirx_audio_present(HAUDINFO info);
386*4882a593Smuzhiyun int  rk628_hdmirx_audio_fs(HAUDINFO info);
387*4882a593Smuzhiyun void rk628_hdmirx_audio_i2s_ctrl(HAUDINFO info, bool enable);
388*4882a593Smuzhiyun 
389*4882a593Smuzhiyun /* for audio isr process */
390*4882a593Smuzhiyun bool rk628_audio_fifoints_enabled(HAUDINFO info);
391*4882a593Smuzhiyun bool rk628_audio_ctsnints_enabled(HAUDINFO info);
392*4882a593Smuzhiyun void rk628_csi_isr_ctsn(HAUDINFO info, u32 pdec_ints);
393*4882a593Smuzhiyun void rk628_csi_isr_fifoints(HAUDINFO info, u32 fifo_ints);
394*4882a593Smuzhiyun int rk628_is_avi_ready(struct rk628 *rk628, bool avi_rcv_rdy);
395*4882a593Smuzhiyun 
396*4882a593Smuzhiyun #endif
397