hc
2024-10-12 a5969cabbb4660eab42b6ef0412cbbd1200cf14d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
/* SPDX-License-Identifier: GPL-2.0+ */
/*
 * include/linux/mfd/serdes/gpio.h -- GPIO for different serdes chip
 *
 * Copyright (c) 2023-2028 Rockchip Electronics Co. Ltd.
 *
 * Author: luowei <lw@rock-chips.com>
 *
 */
 
#ifndef __MFD_SERDES_ROHM_BU18RL82_H__
#define __MFD_SERDES_ROHM_BU18RL82_H__
#define BU18RL82_REG_RESET 0X000E
 
#define BU18RL82_BLOCK_EN_CLLRX0 0x0011    //h [0] 1’b1
#define BU18RL82_BLOCK_EN_LVDSTX0 0x0011    //h [1] 1’b0
#define BU18RL82_BLOCK_EN_VPLL0 0x0011    //h [3] 1’b0
#define BU18RL82_BLOCK_EN_SSCG0 0x0011    //h [4] 1’b0
#define BU18RL82_BLOCK_EN_CLLRX1 0x0012    //h [0] 1’b1
#define BU18RL82_BLOCK_EN_LVDSTX1 0x0012    //h [1] 1’b0
#define BU18RL82_BLOCK_EN_VPLL1 0x0012    //h [3] 1’b0
#define BU18RL82_BLOCK_EN_SSCG1 0x0012    //h [4] 1’b0
#define BU18RL82_BLOCK_EN_CLLTX 0x0013    //h [0] 1’b0
#define BU18RL82_BLOCK_EN_FSAFETY 0x0013    //h [1] 1’b0
 
#define BU18RL82_IO_SW_GPIO0 0x0057        //h [2:1] 2’b00
#define BU18RL82_IO_OEN_GPIO0 0x0057    //h [3] 1’b1
#define BU18RL82_IO_PDEN_GPIO0 0x0057    //h [4] 1’b1
#define BU18RL82_IO_SW_GPIO1 0x005A        //h [2:1] 2’b00
#define BU18RL82_IO_OEN_GPIO1 0x005A    //h [3] 1’b1
#define BU18RL82_IO_PDEN_GPIO1 0x005A    //h [4] 1’b1
#define BU18RL82_IO_SW_GPIO2 0x005D        //h [2:1] 2’b00
#define BU18RL82_IO_OEN_GPIO2 0x005D    //h [3] 1’b1
#define BU18RL82_IO_PDEN_GPIO2 0x005D    //h [4] 1’b1
#define BU18RL82_IO_SW_GPIO3 0x0060        //h [2:1] 2’b00
#define BU18RL82_IO_OEN_GPIO3 0x0060    //h [3] 1’b1
#define BU18RL82_IO_PDEN_GPIO3 0x0060    //h [4] 1’b1
#define BU18RL82_IO_SW_GPIO4 0x0063        //h [2:1] 2’b00
#define BU18RL82_IO_OEN_GPIO4 0x0063    //h [3] 1’b1
#define BU18RL82_IO_PDEN_GPIO4 0x0063    //h [4] 1’b1
#define BU18RL82_IO_SW_GPIO5 0x0066        //h [2:1] 2’b00
#define BU18RL82_IO_OEN_GPIO5 0x0066    //h [2:1] 2’b00
#define BU18RL82_IO_PDEN_GPIO5 0x0066    //h [3] 1’b1
#define BU18RL82_IO_SW_GPIO6 0x0069        //h [2:1] 2’b00
#define BU18RL82_IO_OEN_GPIO6 0x0069    //h [3] 1’b1
#define BU18RL82_IO_PDEN_GPIO6 0x0069    //h [4] 1’b1
#define BU18RL82_IO_SW_GPIO7 0x006C        //h [2:1] 2’b00
#define BU18RL82_IO_OEN_GPIO7 0x006C    //h [3] 1’b1
#define BU18RL82_IO_PDEN_GPIO7 0x006C    //h [4] 1’b1
 
/*
 * gpio register for define connection with des gpiox.
 * 11bits such as 0x002c:002b=[b2..b0 b7...b0]
 *
 * default value:
 * ser gpio0-->des gpio0
 * ser gpio1-->des gpio1
 * ser gpio2-->des gpio2
 * ser gpio3-->des gpio3
 */
#define BU18RL82_GPIO_SEL0_HIGH 0x0059    //h [2:0],
#define BU18RL82_GPIO_SEL0_LOW 0x0058    //h [7:0]} 11’h002
#define BU18RL82_GPIO_SEL1_HIGH 0x005C    //h [2:0],
#define BU18RL82_GPIO_SEL1_LOW 0x005B    //h [7:0]} 11’h003
#define BU18RL82_GPIO_SEL2_HIGH 0x005F    //h [2:0],
#define BU18RL82_GPIO_SEL2_LOW 0x005E    //h [7:0]} 11’h012
#define BU18RL82_GPIO_SEL3_HIGH 0x0062    //h [2:0],
#define BU18RL82_GPIO_SEL3_LOW 0x0061    //h [7:0]} 11’h013
#define BU18RL82_GPIO_SEL4_HIGH 0x0065    //h [2:0],
#define BU18RL82_GPIO_SEL4_LOW 0x0064    //h [7:0]} 11’h006
#define BU18RL82_GPIO_SEL5_HIGH 0x0068    //h [2:0],
#define BU18RL82_GPIO_SEL5_LOW 0x0067    //h [7:0]} 11’h007
#define BU18RL82_GPIO_SEL6_HIGH 0x006B    //h [2:0],
#define BU18RL82_GPIO_SEL6_LOW 0x006A    //h [7:0]} 11’h008
#define BU18RL82_GPIO_SEL7_HIGH 0x006E    //h [2:0],
#define BU18RL82_GPIO_SEL7_LOW 0x006D    //h [7:0]} 11’h009
 
/*gpio register for define bu18rl82 gpio pin, and gpio0 to gpio0 default*/
#define BU18RL82_BCCTX0__SEL_GPI0 0x042B    //h [5:0] 6’h02
#define BU18RL82_BCCTX0__SEL_GPI1 0x042C    //h [5:0] 6’h03
#define BU18RL82_BCCTX0__SEL_GPI2 0x042D    //h [5:0] 6’h04
#define BU18RL82_BCCTX0__SEL_GPI3 0x042E    //h [5:0] 6’h05
#define BU18RL82_BCCTX0__SEL_GPI4 0x042F    //h [5:0] 6’h06
#define BU18RL82_BCCTX0__SEL_GPI5 0x0430    //h [5:0] 6’h07
#define BU18RL82_BCCTX0__SEL_GPI6 0x0431    //h [5:0] 6’h08
#define BU18RL82_BCCTX0__SEL_GPI7 0x0432    //h [5:0] 6’h09
#define BU18RL82_BCCTX1__SEL_GPI0 0x052B    //h [5:0] 6’h02
#define BU18RL82_BCCTX1__SEL_GPI1 0x052C    //h [5:0] 6’h03
#define BU18RL82_BCCTX1__SEL_GPI2 0x052D    //h [5:0] 6’h04
#define BU18RL82_BCCTX1__SEL_GPI3 0x052E    //h [5:0] 6’h05
#define BU18RL82_BCCTX1__SEL_GPI4 0x052F    //h [5:0] 6’h06
#define BU18RL82_BCCTX1__SEL_GPI5 0x0530    //h [5:0] 6’h07
#define BU18RL82_BCCTX1__SEL_GPI6 0x0531    //h [5:0] 6’h08
#define BU18RL82_BCCTX1__SEL_GPI7 0x0532    //h [5:0] 6’h09
 
#define BU18RL82_IEN_CLLRX0_LINK_UNLOCK 0x0109    //h [1] 1’b0
#define BU18RL82_IEN_CLLRX0_BIT_ERR 0x0109        //h [3] 1’b0
#define BU18RL82_IEN_CLLRX0_ERR_CNT_OVF 0x0109    //h [4] 1’b0
#define BU18RL82_IEN_CLLRX1_LINK_UNLOCK 0x010B    //h [1] 1’b0
#define BU18RL82_IEN_CLLRX1_BIT_ERR 0x010B        //h [3] 1’b0
#define BU18RL82_IEN_CLLRX1_ERR_CNT_OVF 0x010B    //h [4] 1’b0
#define BU18RL82_IEN_FCCRX0_CRCERR 0x010D        //h [0] 1’b0
#define BU18RL82_IEN_FCCRX1_CRCERR 0x010E        //h [0] 1’b0
#define BU18RL82_IEN_BCCDES0_ERR_CRC 0x010F        //h [3] 1’b0
#define BU18RL82_IEN_CLLRX0_CRCERR_R  0x0110    //h [0] 1’b0
#define BU18RL82_IEN_CLLRX0_CRCERR_G 0x0110        //h [1] 1’b0
#define BU18RL82_IEN_CLLRX0_CRCERR_B 0x0110        //h [2] 1’b0
#define BU18RL82_IEN_CLLRX1_CRCERR_R 0x0111        //h [0] 1’b0
#define BU18RL82_IEN_CLLRX1_CRCERR_G 0x0111        //h [1] 1’b0
#define BU18RL82_IEN_CLLRX1_CRCERR_B 0x0111        //h [2] 1’b0
#define BU18RL82_IEN_FS_IMG_STATUS0 0x0112        //h [0] 1’b0
#define BU18RL82_IEN_FS_IMG_STATUS1 0x0112        //h [1] 1’b0
#define BU18RL82_IEN_FS_IMG_STATUS2 0x0112        //h [2] 1’b0
#define BU18RL82_IEN_FS_IMG_STATUS3 0x0112        //h [3] 1’b0
#define BU18RL82_IEN_FS_IMG_ERR_REGION0 0x0113    //h [0] 1’b0
#define BU18RL82_IEN_FS_IMG_ERR_REGION1 0x0113    //h [1] 1’b0
#define BU18RL82_IEN_FS_IMG_ERR_REGION2 0x0113    //h [2] 1’b0
#define BU18RL82_IEN_FS_IMG_ERR_REGION3 0x0113    //h [3] 1’b0
#define BU18RL82_IEN_FS_IMG_ERR_REGION4 0x0113    //h [4] 1’b0
#define BU18RL82_IEN_FS_IMG_ERR_REGION5 0x0113    //h [5] 1’b0
#define BU18RL82_IEN_FS_IMG_ERR_REGION6 0x0113    //h [6] 1’b0
#define BU18RL82_IEN_FS_IMG_ERR_REGION7 0x0113    //h [7] 1’b0
#define BU18RL82_IEN_IO_STUCK_GPIO0 0x0114        //h [0] 1’b0
#define BU18RL82_IEN_IO_STUCK_GPIO1 0x0114        //h [1] 1’b0
#define BU18RL82_IEN_IO_STUCK_GPIO2 0x0114        //h [2] 1’b0
#define BU18RL82_IEN_IO_STUCK_GPIO3 0x0114        //h [3] 1’b0
#define BU18RL82_IEN_IO_STUCK_GPIO4 0x0114        //h [4] 1’b0
#define BU18RL82_IEN_IO_STUCK_GPIO5 0x0114        //h [5] 1’b0
#define BU18RL82_IEN_IO_STUCK_GPIO6 0x0114        //h [6] 1’b0
#define BU18RL82_IEN_IO_STUCK_GPIO7 0x0114        //h [7] 1’b0
#define BU18RL82_IEN_IO_STUCK_IRQ 0x0115        //h [1] 1’b0
#define BU18RL82_IEN_IDS_UNSTABLE 0x0115        //h [7] 1’b0
#define BU18RL82_IEN_I2C_A_TIMEOUT 0x0116        //h [0] 1’b0
#define BU18RL82_IEN_I2C_A_XMIT_ERR 0x0116        //h [1] 1’b0
#define BU18RL82_IEN_REGCRC_ERR_PAGE0 0x0117    //h [0] 1’b0
#define BU18RL82_IEN_REGCRC_ERR_PAGE1 0x0117    //h [1] 1’b0
#define BU18RL82_IEN_REGCRC_ERR_PAGE2 0x0117    //h [2] 1’b0
#define BU18RL82_IEN_REGCRC_ERR_PAGE3 0x0117    //h [3] 1’b0
#define BU18RL82_IEN_REGCRC_ERR_PAGE4 0x0117    //h [4] 1’b0
#define BU18RL82_IEN_REGCRC_ERR_PAGE5 0x0117    //h [5] 1’b0
#define BU18RL82_IEN_REGCRC_ERR_PAGE6 0x0117    //h [6] 1’b0
#define BU18RL82_IEN_REGCRC_ERR_PAGE7 0x0117    //h [7] 1’b0
#define BU18RL82_IEN_CLKDETECT_CLKIN_STOP 0x0118            //h [0] 1’b0
#define BU18RL82_IEN_CLKDETECT_CLKIN_UNLOCK 0x0118            //h [1] 1’b0
#define BU18RL82_IEN_CLKDETECT_OSC_STOP 0x0118                //h [4] 1’b0
#define BU18RL82_IEN_CLKDETECT_OSC_UNLOCK 0x0118            //h [5] 1’b0
#define BU18RL82_IEN_CLKDETECT_CLLRX0_PCLK_STOP 0x0119        //h [0] 1’b0
#define BU18RL82_IEN_CLKDETECT_CLLRX0_PCLK_UNLOCK 0x0119    //h [1] 1’b0
#define BU18RL82_IEN_CLKDETECT_LVDSTX0_CLK_STOP 0x0119        //h [4] 1’b0
#define BU18RL82_IEN_CLKDETECT_LVDSTX0_CLK_UNLOCK 0x0119    //h [5] 1’b0
#define BU18RL82_IEN_CLKDETECT_CLLRX1_PCLK_STOP 0x011A        //h [0] 1’b0
#define BU18RL82_IEN_CLKDETECT_CLLRX1_PCLK_UNLOCK 0x011A    //h [1] 1’b0
#define BU18RL82_IEN_CLKDETECT_LVDSTX1_CLK_STOP 0x011A        //h [4] 1’b0
#define BU18RL82_IEN_CLKDETECT_LVDSTX1_CLK_UNLOCK 0x011A    //h [5] 1’b0
#define BU18RL82_IEN_CLKDETECT_CLLTX0_SCLK_STOP 0x011B        //h [0] 1’b0
#define BU18RL82_IEN_CLKDETECT_CLLTX0_SCLK_UNLOCK 0x011B    //h [1] 1’b0
#define BU18RL82_IEN_CLKDETECT_CLLTX0_PLLREF_STOP 0x011B    //h [4] 1’b0
#define BU18RL82_IEN_CLKDETECT_CLLTX0_PLLREF_UNLOCK 0x011B    //h [5] 1’b0
#define BU18RL82_IEN_CLKDETECT_LVDSTX0_PLLREF_STOP 0x011C    //h [0] 1’b0
#define BU18RL82_IEN_CLKDETECT_LVDSTX0_PLLREF_UNLOCK0x011C    //h [1] 1’b0
#define BU18RL82_IEN_CLKDETECT_LVDSTX1_PLLREF_STOP 0x011C    //h [4] 1’b0
#define BU18RL82_IEN_CLKDETECT_LVDSTX1_PLLREF_UNLOCK 0x011C    //h [5] 1’b0
 
#define BU18RL82_ISR_CLEAR_ALL 0x0105            //h [0] 1’b0
#define BU18RL82_ISR_CLLRX0_LINK_UNLOCK 0x0129    //h [1] 1’b0
#define BU18RL82_ISR_CLLRX0_BIT_ERR 0x0129        //h [3] 1’b0
#define BU18RL82_ISR_CLLRX0_ERR_CNT_OVF 0x0129    //h [4] 1’b0
#define BU18RL82_ISR_CLLRX1_ERR_CNT_OVF 0x012B    //h [4] 1’b0
#define BU18RL82_ISR_CLLRX1_LINK_UNLOCK 0x012B    //h [1] 1’b0
#define BU18RL82_ISR_CLLRX1_BIT_ERR 0x012B        //h [3] 1’b0
#define BU18RL82_ISR_FCCRX0_CRCERR 0x012D        //h [0] 1’b0
#define BU18RL82_ISR_FCCRX1_CRCERR 0x012E        //h [0] 1’b0
#define BU18RL82_ISR_BCCDES0_ERR_CRC 0x012F        //h [3] 1’b0
#define BU18RL82_ISR_CLLRX0_CRCERR_R  0x0130    //h [0] 1’b0
#define BU18RL82_ISR_CLLRX0_CRCERR_G 0x0130        //h [1] 1’b0
#define BU18RL82_ISR_CLLRX0_CRCERR_B 0x0130        //h [2] 1’b0
#define BU18RL82_ISR_CLLRX1_CRCERR_R 0x0131        //h [0] 1’b0
#define BU18RL82_ISR_CLLRX1_CRCERR_G 0x0131        //h [1] 1’b0
#define BU18RL82_ISR_CLLRX1_CRCERR_B 0x0131        //h [2] 1’b0
#define BU18RL82_ISR_FS_IMG_STATUS0 0x0132        //h [0] 1’b0
#define BU18RL82_ISR_FS_IMG_STATUS1 0x0132        //h [1] 1’b0
#define BU18RL82_ISR_FS_IMG_STATUS2 0x0132        //h [2] 1’b0
#define BU18RL82_ISR_FS_IMG_STATUS3 0x0132        //h [3] 1’b0
#define BU18RL82_ISR_FS_IMG_ERR_REGION0 0x0133    //h [0] 1’b0
#define BU18RL82_ISR_FS_IMG_ERR_REGION1 0x0133    //h [1] 1’b0
#define BU18RL82_ISR_FS_IMG_ERR_REGION2 0x0133    //h [2] 1’b0
#define BU18RL82_ISR_FS_IMG_ERR_REGION3 0x0133    //h [3] 1’b0
#define BU18RL82_ISR_FS_IMG_ERR_REGION4 0x0133    //h [4] 1’b0
#define BU18RL82_ISR_FS_IMG_ERR_REGION5 0x0133    //h [5] 1’b0
#define BU18RL82_ISR_FS_IMG_ERR_REGION6 0x0133    //h [6] 1’b0
#define BU18RL82_ISR_FS_IMG_ERR_REGION7 0x0133    //h [7] 1’b0
#define BU18RL82_ISR_IO_STUCK_GPIO0 0x0134    //h [0] 1’b0
#define BU18RL82_ISR_IO_STUCK_GPIO1 0x0134    //h [1] 1’b0
#define BU18RL82_ISR_IO_STUCK_GPIO2 0x0134    //h [2] 1’b0
#define BU18RL82_ISR_IO_STUCK_GPIO3 0x0134    //h [3] 1’b0
#define BU18RL82_ISR_IO_STUCK_GPIO4 0x0134    //h [4] 1’b0
#define BU18RL82_ISR_IO_STUCK_GPIO5 0x0134    //h [5] 1’b0
#define BU18RL82_ISR_IO_STUCK_GPIO6 0x0134    //h [6] 1’b0
#define BU18RL82_ISR_IO_STUCK_GPIO7 0x0134    //h [7] 1’b0
#define BU18RL82_ISR_IO_STUCK_IRQ 0x0135    //h [1] 1’b0
#define BU18RL82_ISR_IDS_UNSTABLE 0x0135    //h [7] 1’b0
#define BU18RL82_ISR_I2C_A_TIMEOUT 0x0136    //h [0] 1’b0
#define BU18RL82_ISR_I2C_A_XMIT_ERR 0x0136    //h [1] 1’b0
#define BU18RL82_ISR_REGCRC_ERR_PAGE0 0x0137    //h [0] 1’b0
#define BU18RL82_ISR_REGCRC_ERR_PAGE1 0x0137    //h [1] 1’b0
#define BU18RL82_ISR_REGCRC_ERR_PAGE2 0x0137    //h [2] 1’b0
#define BU18RL82_ISR_REGCRC_ERR_PAGE3 0x0137    //h [3] 1’b0
#define BU18RL82_ISR_REGCRC_ERR_PAGE4 0x0137    //h [4] 1’b0
#define BU18RL82_ISR_REGCRC_ERR_PAGE5 0x0137    //h [5] 1’b0
#define BU18RL82_ISR_REGCRC_ERR_PAGE6 0x0137    //h [6] 1’b0
#define BU18RL82_ISR_REGCRC_ERR_PAGE7 0x0137    //h [7] 1’b0
#define BU18RL82_ISR_CLKDETECT_CLKIN_STOP 0x0138            //h [0] 1’b0
#define BU18RL82_ISR_CLKDETECT_CLKIN_UNLOCK 0x0138            //h [1] 1’b0
#define BU18RL82_ISR_CLKDETECT_OSC_STOP 0x0138                //h [4] 1’b0
#define BU18RL82_ISR_CLKDETECT_OSC_UNLOCK 0x0138            //h [5] 1’b0
#define BU18RL82_ISR_CLKDETECT_CLLRX0_PCLK_STOP 0x0139        //h [0] 1’b0
#define BU18RL82_ISR_CLKDETECT_CLLRX0_PCLK_UNLOCK 0x0139    //h [1] 1’b0
#define BU18RL82_ISR_CLKDETECT_LVDSTX0_CLK_STOP 0x0139        //h [4] 1’b0
#define BU18RL82_ISR_CLKDETECT_LVDSTX0_CLK_UNLOCK 0x0139    //h [5] 1’b0
#define BU18RL82_ISR_CLKDETECT_CLLRX1_PCLK_STOP 0x013A        //h [0] 1’b0
#define BU18RL82_ISR_CLKDETECT_CLLRX1_PCLK_UNLOCK 0x013A    //h [1] 1’b0
#define BU18RL82_ISR_CLKDETECT_LVDSTX1_CLK_STOP 0x013A        //h [4] 1’b0
#define BU18RL82_ISR_CLKDETECT_LVDSTX1_CLK_UNLOCK 0x013A    //h [5] 1’b0
#define BU18RL82_ISR_CLKDETECT_CLLTX0_SCLK_STOP 0x013B        //h [0] 1’b0
#define BU18RL82_ISR_CLKDETECT_CLLTX0_SCLK_UNLOCK 0x013B    //h [1] 1’b0
#define BU18RL82_ISR_CLKDETECT_CLLTX0_PLLREF_STOP 0x013B    //h [4] 1’b0
#define BU18RL82_ISR_CLKDETECT_CLLTX0_PLLREF_UNLOCK 0x013B    //h [5] 1’b0
#define BU18RL82_ISR_CLKDETECT_LVDSTX0_PLLREF_STOP 0x013C    //h [0] 1’b0
#define BU18RL82_ISR_CLKDETECT_LVDSTX0_PLLREF_UNLOCK0x013C    //h [1] 1’b0
#define BU18RL82_ISR_CLKDETECT_LVDSTX1_PLLREF_STOP 0x013C    //h [4] 1’b0
#define BU18RL82_ISR_CLKDETECT_LVDSTX1_PLLREF_UNLOCK 0x013C    //h [5] 1’b0
 
struct bu18rl82_gpio_sw_reg {
   unsigned int reg;
   unsigned int mask;    //2/4/6/8ma
};
 
struct bu18rl82_gpio_oen_reg {
   unsigned int reg;
   unsigned int mask;    //0:output 1:input
};
 
struct bu18rl82_gpio_pden_reg {
   unsigned int reg;
   unsigned int mask;    //0:no pulldown 1:connect pulldown
};
 
struct bu18rl82_gpio_id_low_reg {
   unsigned int reg;
   unsigned int mask;    //b2b1b0
};
 
struct bu18rl82_gpio_id_high_reg {
   unsigned int reg;
   unsigned int mask;    //b11b10b9b8b7b6b5b4b3
};
 
static const struct bu18rl82_gpio_sw_reg bu18rl82_gpio_sw[8] = {
   {BU18RL82_IO_SW_GPIO0, BIT(2) | BIT(1)},
   {BU18RL82_IO_SW_GPIO1, BIT(2) | BIT(1)},
   {BU18RL82_IO_SW_GPIO2, BIT(2) | BIT(1)},
   {BU18RL82_IO_SW_GPIO3, BIT(2) | BIT(1)},
   {BU18RL82_IO_SW_GPIO4, BIT(2) | BIT(1)},
   {BU18RL82_IO_SW_GPIO5, BIT(2) | BIT(1)},
   {BU18RL82_IO_SW_GPIO6, BIT(2) | BIT(1)},
   {BU18RL82_IO_SW_GPIO7, BIT(2) | BIT(1)},
};
 
static const struct bu18rl82_gpio_oen_reg bu18rl82_gpio_oen[8] = {
   {BU18RL82_IO_OEN_GPIO0, BIT(3)},
   {BU18RL82_IO_OEN_GPIO1, BIT(3)},
   {BU18RL82_IO_OEN_GPIO2, BIT(3)},
   {BU18RL82_IO_OEN_GPIO3, BIT(3)},
   {BU18RL82_IO_OEN_GPIO4, BIT(3)},
   {BU18RL82_IO_OEN_GPIO5, BIT(3)},
   {BU18RL82_IO_OEN_GPIO6, BIT(3)},
   {BU18RL82_IO_OEN_GPIO7, BIT(3)},
};
 
static const struct bu18rl82_gpio_pden_reg bu18rl82_gpio_pden[8] = {
   {BU18RL82_IO_PDEN_GPIO0, BIT(4)},
   {BU18RL82_IO_PDEN_GPIO1, BIT(4)},
   {BU18RL82_IO_PDEN_GPIO2, BIT(4)},
   {BU18RL82_IO_PDEN_GPIO3, BIT(4)},
   {BU18RL82_IO_PDEN_GPIO4, BIT(4)},
   {BU18RL82_IO_PDEN_GPIO5, BIT(4)},
   {BU18RL82_IO_PDEN_GPIO6, BIT(4)},
   {BU18RL82_IO_PDEN_GPIO7, BIT(4)},
};
 
static const struct bu18rl82_gpio_id_low_reg bu18rl82_gpio_id_low[8] = {
   {BU18RL82_GPIO_SEL0_LOW, GENMASK(7, 0)},
   {BU18RL82_GPIO_SEL1_LOW, GENMASK(7, 0)},
   {BU18RL82_GPIO_SEL2_LOW, GENMASK(7, 0)},
   {BU18RL82_GPIO_SEL3_LOW, GENMASK(7, 0)},
   {BU18RL82_GPIO_SEL4_LOW, GENMASK(7, 0)},
   {BU18RL82_GPIO_SEL5_LOW, GENMASK(7, 0)},
   {BU18RL82_GPIO_SEL6_LOW, GENMASK(7, 0)},
   {BU18RL82_GPIO_SEL7_LOW, GENMASK(7, 0)},
};
 
static const struct bu18rl82_gpio_id_high_reg bu18rl82_gpio_id_high[8] = {
   {BU18RL82_GPIO_SEL0_HIGH, GENMASK(2, 0)},
   {BU18RL82_GPIO_SEL1_HIGH, GENMASK(2, 0)},
   {BU18RL82_GPIO_SEL2_HIGH, GENMASK(2, 0)},
   {BU18RL82_GPIO_SEL3_HIGH, GENMASK(2, 0)},
   {BU18RL82_GPIO_SEL4_HIGH, GENMASK(2, 0)},
   {BU18RL82_GPIO_SEL5_HIGH, GENMASK(2, 0)},
   {BU18RL82_GPIO_SEL6_HIGH, GENMASK(2, 0)},
   {BU18RL82_GPIO_SEL7_HIGH, GENMASK(2, 0)},
};
 
struct bu18rl82_ien_reg {
   unsigned int reg;
   unsigned int ien;
};
 
struct bu18rl82_isr_reg {
   unsigned int reg;
   unsigned int isr;
};
 
struct bu18rl82_gpio_reg {
   unsigned int reg;
   unsigned int val;
};
 
static const struct bu18rl82_ien_reg bu18rl82_reg_ien[18] = {
   {BU18RL82_IEN_CLLRX0_LINK_UNLOCK, BIT(1) | BIT(3) | BIT(4)},
   {BU18RL82_IEN_CLLRX1_LINK_UNLOCK, BIT(1) | BIT(3) | BIT(4)},
   {BU18RL82_IEN_FCCRX0_CRCERR, BIT(0)},
   {BU18RL82_IEN_FCCRX1_CRCERR, BIT(0)},
 
   {BU18RL82_IEN_BCCDES0_ERR_CRC, BIT(3)},
   {BU18RL82_IEN_CLLRX0_CRCERR_R, BIT(0) | BIT(1) | BIT(2)},
   {BU18RL82_IEN_CLLRX1_CRCERR_R, BIT(0) | BIT(1) | BIT(2)},
 
   {BU18RL82_IEN_FS_IMG_STATUS0, BIT(0) | BIT(1) | BIT(2) | BIT(3)},
   {BU18RL82_IEN_FS_IMG_ERR_REGION0, 0xff},
   {BU18RL82_IEN_IO_STUCK_GPIO0, 0xff},
   {BU18RL82_IEN_IO_STUCK_IRQ, BIT(1) | BIT(7)},
   {BU18RL82_IEN_I2C_A_TIMEOUT, BIT(0) | BIT(1)},
 
   {BU18RL82_IEN_REGCRC_ERR_PAGE0, 0xff},
   {BU18RL82_IEN_CLKDETECT_CLKIN_STOP, BIT(0) | BIT(1) | BIT(4) | BIT(5)},
   {BU18RL82_IEN_CLKDETECT_CLLRX0_PCLK_STOP, BIT(0) | BIT(1) | BIT(4) | BIT(5)},
   {BU18RL82_IEN_CLKDETECT_CLLRX1_PCLK_STOP, BIT(0) | BIT(1) | BIT(4) | BIT(5)},
   {BU18RL82_IEN_CLKDETECT_CLLTX0_SCLK_STOP, BIT(0) | BIT(1) | BIT(4) | BIT(5)},
   {BU18RL82_IEN_CLKDETECT_LVDSTX0_PLLREF_STOP, BIT(0) | BIT(1) | BIT(4) | BIT(5)},
};
 
static const struct bu18rl82_isr_reg bu18rl82_reg_isr[18] = {
   {BU18RL82_ISR_CLLRX0_LINK_UNLOCK, BIT(1) | BIT(3) | BIT(4)},
   {BU18RL82_ISR_CLLRX1_LINK_UNLOCK, BIT(1) | BIT(3) | BIT(4)},
   {BU18RL82_ISR_FCCRX0_CRCERR, BIT(0)},
   {BU18RL82_ISR_FCCRX1_CRCERR, BIT(0)},
 
   {BU18RL82_ISR_BCCDES0_ERR_CRC, BIT(3)},
   {BU18RL82_ISR_CLLRX0_CRCERR_R, BIT(0) | BIT(1) | BIT(2)},
   {BU18RL82_ISR_CLLRX1_CRCERR_R, BIT(0) | BIT(1) | BIT(2)},
 
   {BU18RL82_ISR_FS_IMG_STATUS0, BIT(0) | BIT(1) | BIT(2) | BIT(3)},
   {BU18RL82_ISR_FS_IMG_ERR_REGION0, 0xff},
   {BU18RL82_ISR_IO_STUCK_GPIO0, 0xff},
   {BU18RL82_ISR_IO_STUCK_IRQ, BIT(1) | BIT(7)},
   {BU18RL82_ISR_I2C_A_TIMEOUT, BIT(0) | BIT(1)},
 
   {BU18RL82_ISR_REGCRC_ERR_PAGE0, 0xff},
   {BU18RL82_ISR_CLKDETECT_CLKIN_STOP, BIT(0) | BIT(1) | BIT(4) | BIT(5)},
   {BU18RL82_ISR_CLKDETECT_CLLRX0_PCLK_STOP, BIT(0) | BIT(1) | BIT(4) | BIT(5)},
   {BU18RL82_ISR_CLKDETECT_CLLRX1_PCLK_STOP, BIT(0) | BIT(1) | BIT(4) | BIT(5)},
   {BU18RL82_ISR_CLKDETECT_CLLTX0_SCLK_STOP, BIT(0) | BIT(1) | BIT(4) | BIT(5)},
   {BU18RL82_ISR_CLKDETECT_LVDSTX0_PLLREF_STOP, BIT(0) | BIT(1) | BIT(4) | BIT(5)},
};
 
#endif