• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021-2023 HPMicro
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  *
6  */
7 
8 
9 #ifndef HPM_LCB_H
10 #define HPM_LCB_H
11 
12 typedef struct {
13     __RW uint32_t CTRL;                        /* 0x0: control register */
14     __R  uint8_t  RESERVED0[96];               /* 0x4 - 0x63: Reserved */
15     __R  uint32_t PHY_STAT;                    /* 0x64: LVDS RX PHY Status register */
16     __RW uint32_t PHY_POW_CTRL[2];             /* 0x68 - 0x6C: LVDS0 PHY power control register */
17     __RW uint32_t PHY_D_CTRL[4];               /* 0x70 - 0x7C: LVDS0 PHY Data Channel RX0 Setting */
18     __RW uint32_t PHY_CK_CTRL[2];              /* 0x80 - 0x84: LVDS0 PHY CK Channel Setting */
19     __RW uint32_t PHY_ADJ_CTRL[2];             /* 0x88 - 0x8C: LVDS0 PHY ADJ Setting */
20     __RW uint32_t PHY_SU_CTRL[2];              /* 0x90 - 0x94: LVDS0 PHY SU CTRL */
21 } LCB_Type;
22 
23 
24 /* Bitfield definition for register: CTRL */
25 /*
26  * LVDS_RXCK_SEL (RW)
27  *
28  * just for LVDS Display mode and CAM LINK mode,  clock selection:
29  * 1: LVDS1 RXCK
30  * 0: LVDS0 RXCK
31  */
32 #define LCB_CTRL_LVDS_RXCK_SEL_MASK (0x100U)
33 #define LCB_CTRL_LVDS_RXCK_SEL_SHIFT (8U)
34 #define LCB_CTRL_LVDS_RXCK_SEL_SET(x) (((uint32_t)(x) << LCB_CTRL_LVDS_RXCK_SEL_SHIFT) & LCB_CTRL_LVDS_RXCK_SEL_MASK)
35 #define LCB_CTRL_LVDS_RXCK_SEL_GET(x) (((uint32_t)(x) & LCB_CTRL_LVDS_RXCK_SEL_MASK) >> LCB_CTRL_LVDS_RXCK_SEL_SHIFT)
36 
37 /*
38  * CAM_LINK_WIDTH (RW)
39  *
40  * just for CAM LINK mode,  data width:
41  * 00: 24bit
42  * 01: 30bit
43  * 10: 36bit
44  * 11: reserved
45  */
46 #define LCB_CTRL_CAM_LINK_WIDTH_MASK (0xC0U)
47 #define LCB_CTRL_CAM_LINK_WIDTH_SHIFT (6U)
48 #define LCB_CTRL_CAM_LINK_WIDTH_SET(x) (((uint32_t)(x) << LCB_CTRL_CAM_LINK_WIDTH_SHIFT) & LCB_CTRL_CAM_LINK_WIDTH_MASK)
49 #define LCB_CTRL_CAM_LINK_WIDTH_GET(x) (((uint32_t)(x) & LCB_CTRL_CAM_LINK_WIDTH_MASK) >> LCB_CTRL_CAM_LINK_WIDTH_SHIFT)
50 
51 /*
52  * BIT_MAPPING (RW)
53  *
54  * just for LVDS Display mode,  data protocol:
55  * 1: JEIDA standard
56  * 0: SPWG standard
57  */
58 #define LCB_CTRL_BIT_MAPPING_MASK (0x20U)
59 #define LCB_CTRL_BIT_MAPPING_SHIFT (5U)
60 #define LCB_CTRL_BIT_MAPPING_SET(x) (((uint32_t)(x) << LCB_CTRL_BIT_MAPPING_SHIFT) & LCB_CTRL_BIT_MAPPING_MASK)
61 #define LCB_CTRL_BIT_MAPPING_GET(x) (((uint32_t)(x) & LCB_CTRL_BIT_MAPPING_MASK) >> LCB_CTRL_BIT_MAPPING_SHIFT)
62 
63 /*
64  * DATA_WIDTH (RW)
65  *
66  * just for LVDS Display mode,  data width:
67  * 1: 24bit
68  * 0: 18bit(3line)
69  */
70 #define LCB_CTRL_DATA_WIDTH_MASK (0x10U)
71 #define LCB_CTRL_DATA_WIDTH_SHIFT (4U)
72 #define LCB_CTRL_DATA_WIDTH_SET(x) (((uint32_t)(x) << LCB_CTRL_DATA_WIDTH_SHIFT) & LCB_CTRL_DATA_WIDTH_MASK)
73 #define LCB_CTRL_DATA_WIDTH_GET(x) (((uint32_t)(x) & LCB_CTRL_DATA_WIDTH_MASK) >> LCB_CTRL_DATA_WIDTH_SHIFT)
74 
75 /*
76  * MODE (RW)
77  *
78  * mode selection:
79  * 00: lvds display(4 line), two LVDS RX PHY must be LVDS display mode
80  * 01: cam link(4 line), two LVDS RX PHY must be LVDS display mode
81  * 10: sync code(2 line), LVDS RX PHY must be LVDS cameral mode
82  * 11: sync code(1line), LVDS RX PHY must be LVDS cameral mode
83  */
84 #define LCB_CTRL_MODE_MASK (0x3U)
85 #define LCB_CTRL_MODE_SHIFT (0U)
86 #define LCB_CTRL_MODE_SET(x) (((uint32_t)(x) << LCB_CTRL_MODE_SHIFT) & LCB_CTRL_MODE_MASK)
87 #define LCB_CTRL_MODE_GET(x) (((uint32_t)(x) & LCB_CTRL_MODE_MASK) >> LCB_CTRL_MODE_SHIFT)
88 
89 /* Bitfield definition for register: PHY_STAT */
90 /*
91  * LVDS1_RX_PHY_DLL_LOCK (RO)
92  *
93  * LVDS1 RX PHY DLL Lock indication Signal, 1 means dll already locked
94  */
95 #define LCB_PHY_STAT_LVDS1_RX_PHY_DLL_LOCK_MASK (0x2U)
96 #define LCB_PHY_STAT_LVDS1_RX_PHY_DLL_LOCK_SHIFT (1U)
97 #define LCB_PHY_STAT_LVDS1_RX_PHY_DLL_LOCK_GET(x) (((uint32_t)(x) & LCB_PHY_STAT_LVDS1_RX_PHY_DLL_LOCK_MASK) >> LCB_PHY_STAT_LVDS1_RX_PHY_DLL_LOCK_SHIFT)
98 
99 /*
100  * LVDS0_RX_PHY_DLL_LOCK (RO)
101  *
102  * LVDS0 RX PHY DLL Lock indication Signal, 1 means dll already locked
103  */
104 #define LCB_PHY_STAT_LVDS0_RX_PHY_DLL_LOCK_MASK (0x1U)
105 #define LCB_PHY_STAT_LVDS0_RX_PHY_DLL_LOCK_SHIFT (0U)
106 #define LCB_PHY_STAT_LVDS0_RX_PHY_DLL_LOCK_GET(x) (((uint32_t)(x) & LCB_PHY_STAT_LVDS0_RX_PHY_DLL_LOCK_MASK) >> LCB_PHY_STAT_LVDS0_RX_PHY_DLL_LOCK_SHIFT)
107 
108 /* Bitfield definition for register array: PHY_POW_CTRL */
109 /*
110  * IDDQ_EN (RW)
111  *
112  * Power down control signal of channel rxck/rx1/rx0
113  * 0: Normal operation
114  * 1: Power down channel
115  */
116 #define LCB_PHY_POW_CTRL_IDDQ_EN_MASK (0x8U)
117 #define LCB_PHY_POW_CTRL_IDDQ_EN_SHIFT (3U)
118 #define LCB_PHY_POW_CTRL_IDDQ_EN_SET(x) (((uint32_t)(x) << LCB_PHY_POW_CTRL_IDDQ_EN_SHIFT) & LCB_PHY_POW_CTRL_IDDQ_EN_MASK)
119 #define LCB_PHY_POW_CTRL_IDDQ_EN_GET(x) (((uint32_t)(x) & LCB_PHY_POW_CTRL_IDDQ_EN_MASK) >> LCB_PHY_POW_CTRL_IDDQ_EN_SHIFT)
120 
121 /*
122  * RXCK_PD (RW)
123  *
124  * Power down control signal of channel rxck
125  * 0: Normal operation
126  * 1: Power down channel
127  */
128 #define LCB_PHY_POW_CTRL_RXCK_PD_MASK (0x4U)
129 #define LCB_PHY_POW_CTRL_RXCK_PD_SHIFT (2U)
130 #define LCB_PHY_POW_CTRL_RXCK_PD_SET(x) (((uint32_t)(x) << LCB_PHY_POW_CTRL_RXCK_PD_SHIFT) & LCB_PHY_POW_CTRL_RXCK_PD_MASK)
131 #define LCB_PHY_POW_CTRL_RXCK_PD_GET(x) (((uint32_t)(x) & LCB_PHY_POW_CTRL_RXCK_PD_MASK) >> LCB_PHY_POW_CTRL_RXCK_PD_SHIFT)
132 
133 /*
134  * RX1_PD (RW)
135  *
136  * Power down control signal of channel rx1
137  * 0: Normal operation
138  * 1: Power down channel
139  */
140 #define LCB_PHY_POW_CTRL_RX1_PD_MASK (0x2U)
141 #define LCB_PHY_POW_CTRL_RX1_PD_SHIFT (1U)
142 #define LCB_PHY_POW_CTRL_RX1_PD_SET(x) (((uint32_t)(x) << LCB_PHY_POW_CTRL_RX1_PD_SHIFT) & LCB_PHY_POW_CTRL_RX1_PD_MASK)
143 #define LCB_PHY_POW_CTRL_RX1_PD_GET(x) (((uint32_t)(x) & LCB_PHY_POW_CTRL_RX1_PD_MASK) >> LCB_PHY_POW_CTRL_RX1_PD_SHIFT)
144 
145 /*
146  * RX0_PD (RW)
147  *
148  * Power down control signal of channel rx0
149  * 0: Normal operation
150  * 1: Power down channel
151  */
152 #define LCB_PHY_POW_CTRL_RX0_PD_MASK (0x1U)
153 #define LCB_PHY_POW_CTRL_RX0_PD_SHIFT (0U)
154 #define LCB_PHY_POW_CTRL_RX0_PD_SET(x) (((uint32_t)(x) << LCB_PHY_POW_CTRL_RX0_PD_SHIFT) & LCB_PHY_POW_CTRL_RX0_PD_MASK)
155 #define LCB_PHY_POW_CTRL_RX0_PD_GET(x) (((uint32_t)(x) & LCB_PHY_POW_CTRL_RX0_PD_MASK) >> LCB_PHY_POW_CTRL_RX0_PD_SHIFT)
156 
157 /* Bitfield definition for register array: PHY_D_CTRL */
158 /*
159  * RX_VCOM (RW)
160  *
161  * bit 1: Receiver hysteresis enable signal. 0: enable; 1: disable
162  * bit 0: Terminal impedance common mode selection control signal. 0: floating; 1: Ground
163  */
164 #define LCB_PHY_D_CTRL_RX_VCOM_MASK (0x300000UL)
165 #define LCB_PHY_D_CTRL_RX_VCOM_SHIFT (20U)
166 #define LCB_PHY_D_CTRL_RX_VCOM_SET(x) (((uint32_t)(x) << LCB_PHY_D_CTRL_RX_VCOM_SHIFT) & LCB_PHY_D_CTRL_RX_VCOM_MASK)
167 #define LCB_PHY_D_CTRL_RX_VCOM_GET(x) (((uint32_t)(x) & LCB_PHY_D_CTRL_RX_VCOM_MASK) >> LCB_PHY_D_CTRL_RX_VCOM_SHIFT)
168 
169 /*
170  * RX_RTERM (RW)
171  *
172  * Terminal impedance regulation control signal
173  * 0000: hi-z;
174  * 0001: 150ohm;
175  * 1000:100ohm;
176  * 1111:75ohm
177  */
178 #define LCB_PHY_D_CTRL_RX_RTERM_MASK (0xF0000UL)
179 #define LCB_PHY_D_CTRL_RX_RTERM_SHIFT (16U)
180 #define LCB_PHY_D_CTRL_RX_RTERM_SET(x) (((uint32_t)(x) << LCB_PHY_D_CTRL_RX_RTERM_SHIFT) & LCB_PHY_D_CTRL_RX_RTERM_MASK)
181 #define LCB_PHY_D_CTRL_RX_RTERM_GET(x) (((uint32_t)(x) & LCB_PHY_D_CTRL_RX_RTERM_MASK) >> LCB_PHY_D_CTRL_RX_RTERM_SHIFT)
182 
183 /*
184  * RX_CTL (RW)
185  *
186  * bit 0 :  Lane N Data MSB first enable signal. 0: LSB ; 1: MSB
187  * bit 1 :  Lane N Data Polarity signal. 0: Not inverting; 1: Inverting
188  * bit [4:2] : Phase difference between the output first bit data (rxN[6:0]) and the input clock (RCKP/N) in LVDS Display Mode.
189  * bit 5 : Reserved
190  * bit 6 : Output data sampling clock control signal
191  * 0: Sampling using the rising edge of the clock pck.
192  * 1: Sampling using the falling edge of the clock pck.
193  * bit 7 : Reserved
194  * bit 8 : Data Lane N Skew adjust enable in LVDS Camera Mode.
195  * bit [12:9] : Data Lane N Skew adjust; 0000: min; 0111: default; 1111: max.
196  * bit [15:13] : Reserved
197  */
198 #define LCB_PHY_D_CTRL_RX_CTL_MASK (0xFFFFU)
199 #define LCB_PHY_D_CTRL_RX_CTL_SHIFT (0U)
200 #define LCB_PHY_D_CTRL_RX_CTL_SET(x) (((uint32_t)(x) << LCB_PHY_D_CTRL_RX_CTL_SHIFT) & LCB_PHY_D_CTRL_RX_CTL_MASK)
201 #define LCB_PHY_D_CTRL_RX_CTL_GET(x) (((uint32_t)(x) & LCB_PHY_D_CTRL_RX_CTL_MASK) >> LCB_PHY_D_CTRL_RX_CTL_SHIFT)
202 
203 /* Bitfield definition for register array: PHY_CK_CTRL */
204 /*
205  * RX_VCOM (RW)
206  *
207  * bit 1: Receiver hysteresis enable signal. 0: enable; 1: disable
208  * bit 0: Terminal impedance common mode selection control signal. 0: floating; 1: Ground
209  */
210 #define LCB_PHY_CK_CTRL_RX_VCOM_MASK (0x300000UL)
211 #define LCB_PHY_CK_CTRL_RX_VCOM_SHIFT (20U)
212 #define LCB_PHY_CK_CTRL_RX_VCOM_SET(x) (((uint32_t)(x) << LCB_PHY_CK_CTRL_RX_VCOM_SHIFT) & LCB_PHY_CK_CTRL_RX_VCOM_MASK)
213 #define LCB_PHY_CK_CTRL_RX_VCOM_GET(x) (((uint32_t)(x) & LCB_PHY_CK_CTRL_RX_VCOM_MASK) >> LCB_PHY_CK_CTRL_RX_VCOM_SHIFT)
214 
215 /*
216  * RX_RTERM (RW)
217  *
218  * Terminal impedance regulation control signal
219  * 0000: hi-z;
220  * 0001: 150ohm;
221  * 1000:100ohm;
222  * 1111:75ohm
223  */
224 #define LCB_PHY_CK_CTRL_RX_RTERM_MASK (0xF0000UL)
225 #define LCB_PHY_CK_CTRL_RX_RTERM_SHIFT (16U)
226 #define LCB_PHY_CK_CTRL_RX_RTERM_SET(x) (((uint32_t)(x) << LCB_PHY_CK_CTRL_RX_RTERM_SHIFT) & LCB_PHY_CK_CTRL_RX_RTERM_MASK)
227 #define LCB_PHY_CK_CTRL_RX_RTERM_GET(x) (((uint32_t)(x) & LCB_PHY_CK_CTRL_RX_RTERM_MASK) >> LCB_PHY_CK_CTRL_RX_RTERM_SHIFT)
228 
229 /*
230  * RX_CTL (RW)
231  *
232  * bit 0 : DLL loop delay adjustment minimum control signal
233  * 0: used for RCKP/RCKN’s frequency is 40Mhz~70Mhz
234  * 1:used for RCKP/RCKN’s frequency is 70Mhz~110Mhz
235  * bit [2:1] : DLL loop delay adjustment current regulation control signal. 00: min; 11: max
236  * bit 3 : Reserved
237  * bit 4 : Clock Lane Skew adjust enable in LVDS Camera Mode.
238  * bit [7:5] : Bus width selection in LVDS Camera Mode
239  * 000: 4bit; 001:6bit; 010:7bit; 011:8bit; 100:9bit; 101:10bit; 110:11bit; 111:12bit.
240  * bit [10:8] : DDR Clock duty cycle adjust in LVDS Camera Mode.
241  * bit [15:11] : Reserved
242  */
243 #define LCB_PHY_CK_CTRL_RX_CTL_MASK (0xFFFFU)
244 #define LCB_PHY_CK_CTRL_RX_CTL_SHIFT (0U)
245 #define LCB_PHY_CK_CTRL_RX_CTL_SET(x) (((uint32_t)(x) << LCB_PHY_CK_CTRL_RX_CTL_SHIFT) & LCB_PHY_CK_CTRL_RX_CTL_MASK)
246 #define LCB_PHY_CK_CTRL_RX_CTL_GET(x) (((uint32_t)(x) & LCB_PHY_CK_CTRL_RX_CTL_MASK) >> LCB_PHY_CK_CTRL_RX_CTL_SHIFT)
247 
248 /* Bitfield definition for register array: PHY_ADJ_CTRL */
249 /*
250  * LVDS_RX0_DLINE_ADJ (RW)
251  *
252  * LVDS RX PHY RX0 line:
253  * bit [7:0] : Lane N skew adjustment control signal between data and clock
254  * 0000000: max; 1111111: min
255  * bit 8 : Reserved
256  */
257 #define LCB_PHY_ADJ_CTRL_LVDS_RX0_DLINE_ADJ_MASK (0xFF000000UL)
258 #define LCB_PHY_ADJ_CTRL_LVDS_RX0_DLINE_ADJ_SHIFT (24U)
259 #define LCB_PHY_ADJ_CTRL_LVDS_RX0_DLINE_ADJ_SET(x) (((uint32_t)(x) << LCB_PHY_ADJ_CTRL_LVDS_RX0_DLINE_ADJ_SHIFT) & LCB_PHY_ADJ_CTRL_LVDS_RX0_DLINE_ADJ_MASK)
260 #define LCB_PHY_ADJ_CTRL_LVDS_RX0_DLINE_ADJ_GET(x) (((uint32_t)(x) & LCB_PHY_ADJ_CTRL_LVDS_RX0_DLINE_ADJ_MASK) >> LCB_PHY_ADJ_CTRL_LVDS_RX0_DLINE_ADJ_SHIFT)
261 
262 /*
263  * LVDS_RX1_DLINE_ADJ (RW)
264  *
265  * LVDS RX PHY RX1 line:
266  * bit [7:0] : Lane N skew adjustment control signal between data and clock
267  * 0000000: max; 1111111: min
268  * bit 8 : Reserved
269  */
270 #define LCB_PHY_ADJ_CTRL_LVDS_RX1_DLINE_ADJ_MASK (0xFF0000UL)
271 #define LCB_PHY_ADJ_CTRL_LVDS_RX1_DLINE_ADJ_SHIFT (16U)
272 #define LCB_PHY_ADJ_CTRL_LVDS_RX1_DLINE_ADJ_SET(x) (((uint32_t)(x) << LCB_PHY_ADJ_CTRL_LVDS_RX1_DLINE_ADJ_SHIFT) & LCB_PHY_ADJ_CTRL_LVDS_RX1_DLINE_ADJ_MASK)
273 #define LCB_PHY_ADJ_CTRL_LVDS_RX1_DLINE_ADJ_GET(x) (((uint32_t)(x) & LCB_PHY_ADJ_CTRL_LVDS_RX1_DLINE_ADJ_MASK) >> LCB_PHY_ADJ_CTRL_LVDS_RX1_DLINE_ADJ_SHIFT)
274 
275 /*
276  * LVDS_DLL_TUNING_INT (RW)
277  *
278  * LVDS RX PHY RXCK line:
279  * DLL loop delay coarse adjustment initial signal
280  * 00000000: min ; 11111111: max
281  */
282 #define LCB_PHY_ADJ_CTRL_LVDS_DLL_TUNING_INT_MASK (0x1FFU)
283 #define LCB_PHY_ADJ_CTRL_LVDS_DLL_TUNING_INT_SHIFT (0U)
284 #define LCB_PHY_ADJ_CTRL_LVDS_DLL_TUNING_INT_SET(x) (((uint32_t)(x) << LCB_PHY_ADJ_CTRL_LVDS_DLL_TUNING_INT_SHIFT) & LCB_PHY_ADJ_CTRL_LVDS_DLL_TUNING_INT_MASK)
285 #define LCB_PHY_ADJ_CTRL_LVDS_DLL_TUNING_INT_GET(x) (((uint32_t)(x) & LCB_PHY_ADJ_CTRL_LVDS_DLL_TUNING_INT_MASK) >> LCB_PHY_ADJ_CTRL_LVDS_DLL_TUNING_INT_SHIFT)
286 
287 /* Bitfield definition for register array: PHY_SU_CTRL */
288 /*
289  * SU_CTRL (RW)
290  *
291  * bit [2:0] : Reference voltage/current adjustment control signal. 000: min; 111: max
292  * bit [3] : Internal bias circuit selection signal. 0: from Bandgap Mode; 1: from self-bias mode
293  * bit [7:4] : Reserved
294  */
295 #define LCB_PHY_SU_CTRL_SU_CTRL_MASK (0xFFU)
296 #define LCB_PHY_SU_CTRL_SU_CTRL_SHIFT (0U)
297 #define LCB_PHY_SU_CTRL_SU_CTRL_SET(x) (((uint32_t)(x) << LCB_PHY_SU_CTRL_SU_CTRL_SHIFT) & LCB_PHY_SU_CTRL_SU_CTRL_MASK)
298 #define LCB_PHY_SU_CTRL_SU_CTRL_GET(x) (((uint32_t)(x) & LCB_PHY_SU_CTRL_SU_CTRL_MASK) >> LCB_PHY_SU_CTRL_SU_CTRL_SHIFT)
299 
300 
301 
302 /* PHY_POW_CTRL register group index macro definition */
303 #define LCB_PHY_POW_CTRL_LVDS0 (0UL)
304 #define LCB_PHY_POW_CTRL_LVDS1 (1UL)
305 
306 /* PHY_D_CTRL register group index macro definition */
307 #define LCB_PHY_D_CTRL_LVDS0_RX0 (0UL)
308 #define LCB_PHY_D_CTRL_LVDS0_RX1 (1UL)
309 #define LCB_PHY_D_CTRL_LVDS1_RX0 (2UL)
310 #define LCB_PHY_D_CTRL_LVDS1_RX1 (3UL)
311 
312 /* PHY_CK_CTRL register group index macro definition */
313 #define LCB_PHY_CK_CTRL_LVDS0_RXCK (0UL)
314 #define LCB_PHY_CK_CTRL_LVDS1_RXCK (1UL)
315 
316 /* PHY_ADJ_CTRL register group index macro definition */
317 #define LCB_PHY_ADJ_CTRL_LVDS0 (0UL)
318 #define LCB_PHY_ADJ_CTRL_LVDS1 (1UL)
319 
320 /* PHY_SU_CTRL register group index macro definition */
321 #define LCB_PHY_SU_CTRL_LVDS0 (0UL)
322 #define LCB_PHY_SU_CTRL_LVDS1 (1UL)
323 
324 
325 #endif /* HPM_LCB_H */
326