• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2023 HPMicro
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  *
6  */
7 
8 #ifndef HPM_MT9M114_H
9 #define HPM_MT9M114_H
10 #include "hpm_camera_config.h"
11 #include "hpm_common.h"
12 
13 /* MT9M114_ERROR_ACTION_BLOCK
14  * 0 : return fail
15  * 1 : print error message to console and block
16  */
17 #define MT9M114_ERROR_ACTION_BLOCK 0
18 #define MT9M114_HOST_CMD_TIMEOUT   100
19 
20 #ifndef MT9M114_ACTIVE_IMAGE_WIDTH
21 #define MT9M114_ACTIVE_IMAGE_WIDTH  (640U)
22 #endif
23 
24 #ifndef MT9M114_ACTIVE_IMAGE_HEIGHT
25 #define MT9M114_ACTIVE_IMAGE_HEIGHT (480U)
26 #endif
27 
28 #define DUMMY_LINES             8
29 #define DUMMY_COLUMNS           8
30 
31 #define SENSOR_WIDTH            1296
32 #define SENSOR_HEIGHT           976
33 
34 #define DUMMY_WIDTH_BUFFER      8
35 #define DUMMY_HEIGHT_BUFFER     8
36 
37 #define ACTIVE_SENSOR_WIDTH     (SENSOR_WIDTH - (2 * DUMMY_COLUMNS))
38 #define ACTIVE_SENSOR_HEIGHT    (SENSOR_HEIGHT - (2 * DUMMY_LINES))
39 
40 /**
41  * @brief MT9M114 sensor driver APIs
42  * @defgroup MT9M114_interface sensor driver APIs
43  * @ingroup component_interfaces
44  * @{
45  *
46 
47  */
48 /***********************************************************************************************************************
49  *
50  * Definitions
51  *
52  **********************************************************************************************************************/
53 
54 /**
55  * @brief MT9M114 definition
56  */
57 
58 /*******************************************************************************
59  * Definitions
60  ******************************************************************************/
61 #if defined(MT9M114_DUAL_CAMERA)
62 #define MT9M114_I2C_ADDR 0x48
63 #define MT9M114_I2C_ADDR_IR 0x5D
64 #else
65 #define MT9M114_I2C_ADDR 0x48
66 #endif
67 #define MT9M114_CHIP_ID 0x2481
68 
69 #define MT9M114_REG_ADDR_LEN        (2)
70 
71 /*! @brief MT9M114 register definitions.*/
72 
73 /* 1.Core registers */
74 #define MT9M114_REG_Y_ADDR_START 0x3002
75 #define MT9M114_REG_X_ADDR_START 0x3004
76 #define MT9M114_REG_Y_ADDR_END 0x3006
77 #define MT9M114_REG_X_ADDR_END 0x3008
78 #define MT9M114_REG_FRAME_LENGTH_LINES 0x300A
79 #define MT9M114_REG_LINE_LENGTH_PCK_ 0x300C
80 #define MT9M114_REG_COARSE_INTEGRATION_TIME 0x3012
81 #define MT9M114_REG_FINE_INTEGRATION_TIME 0x3014
82 #define MT9M114_REG_RESET_REGISTER 0x301A
83 #define MT9M114_REG_FLASH 0x3046
84 #define MT9M114_REG_FLASH_COUNT 0x3048
85 #define MT9M114_REG_GREEN1_GAIN 0x3056
86 #define MT9M114_REG_BLUE_GAIN 0x3058
87 #define MT9M114_REG_RED_GAIN 0x305A
88 #define MT9M114_REG_GREEN2_GAIN 0x305C
89 #define MT9M114_REG_GLOBAL_GAIN 0x305E
90 #define MT9M114_REG_FUSE_ID1 0x31F4
91 #define MT9M114_REG_FUSE_ID2 0x31F6
92 #define MT9M114_REG_FUSE_ID3 0x31F8
93 #define MT9M114_REG_FUSE_ID4 0x31FA
94 #define MT9M114_REG_CHAIN_CONTROL 0x31FC
95 #define MT9M114_REG_CUSTOMER_REV 0x31FE
96 
97 /* 2.SOC1 registers */
98 #define MT9M114_REG_COLOR_PIPELINE_CONTROL 0x3210
99 
100 /* 3.SOC2 registers */
101 #define MT9M114_REG_P_G1_P0Q0 0x3640
102 #define MT9M114_REG_P_G1_P0Q1 0x3642
103 #define MT9M114_REG_P_G1_P0Q2 0x3644
104 #define MT9M114_REG_P_G1_P0Q3 0x3646
105 #define MT9M114_REG_P_G1_P0Q4 0x3648
106 #define MT9M114_REG_P_R_P0Q0 0x364A
107 #define MT9M114_REG_P_R_P0Q1 0x364C
108 #define MT9M114_REG_P_R_P0Q2 0x364E
109 #define MT9M114_REG_P_R_P0Q3 0x3650
110 #define MT9M114_REG_P_R_P0Q4 0x3652
111 #define MT9M114_REG_P_B_P0Q0 0x3654
112 #define MT9M114_REG_P_B_P0Q1 0x3656
113 #define MT9M114_REG_P_B_P0Q2 0x3658
114 #define MT9M114_REG_P_B_P0Q3 0x365A
115 #define MT9M114_REG_P_B_P0Q4 0x365C
116 #define MT9M114_REG_P_G2_P0Q0 0x365E
117 #define MT9M114_REG_P_G2_P0Q1 0x3660
118 #define MT9M114_REG_P_G2_P0Q2 0x3662
119 #define MT9M114_REG_P_G2_P0Q3 0x3664
120 #define MT9M114_REG_P_G2_P0Q4 0x3666
121 #define MT9M114_REG_P_G1_P1Q0 0x3680
122 #define MT9M114_REG_P_G1_P1Q1 0x3682
123 #define MT9M114_REG_P_G1_P1Q2 0x3684
124 #define MT9M114_REG_P_G1_P1Q3 0x3686
125 #define MT9M114_REG_P_G1_P1Q4 0x3688
126 #define MT9M114_REG_P_R_P1Q0 0x368A
127 #define MT9M114_REG_P_R_P1Q1 0x368C
128 #define MT9M114_REG_P_R_P1Q2 0x368E
129 #define MT9M114_REG_P_R_P1Q3 0x3690
130 #define MT9M114_REG_P_R_P1Q4 0x3692
131 #define MT9M114_REG_P_B_P1Q0 0x3694
132 #define MT9M114_REG_P_B_P1Q1 0x3696
133 #define MT9M114_REG_P_B_P1Q2 0x3698
134 #define MT9M114_REG_P_B_P1Q3 0x369A
135 #define MT9M114_REG_P_B_P1Q4 0x369C
136 #define MT9M114_REG_P_G2_P1Q0 0x369E
137 #define MT9M114_REG_P_G2_P1Q1 0x36A0
138 #define MT9M114_REG_P_G2_P1Q2 0x36A2
139 #define MT9M114_REG_P_G2_P1Q3 0x36A4
140 #define MT9M114_REG_P_G2_P1Q4 0x36A6
141 #define MT9M114_REG_P_G1_P2Q0 0x36C0
142 #define MT9M114_REG_P_G1_P2Q1 0x36C2
143 #define MT9M114_REG_P_G1_P2Q2 0x36C4
144 #define MT9M114_REG_P_G1_P2Q3 0x36C6
145 #define MT9M114_REG_P_G1_P2Q4 0x36C8
146 #define MT9M114_REG_P_R_P2Q0 0x36CA
147 #define MT9M114_REG_P_R_P2Q1 0x36CC
148 #define MT9M114_REG_P_R_P2Q2 0x36CE
149 #define MT9M114_REG_P_R_P2Q3 0x36D0
150 #define MT9M114_REG_P_R_P2Q4 0x36D2
151 #define MT9M114_REG_P_B_P2Q0 0x36D4
152 #define MT9M114_REG_P_B_P2Q1 0x36D6
153 #define MT9M114_REG_P_B_P2Q2 0x36D8
154 #define MT9M114_REG_P_B_P2Q3 0x36DA
155 #define MT9M114_REG_P_B_P2Q4 0x36DC
156 #define MT9M114_REG_P_G2_P2Q0 0x36DE
157 #define MT9M114_REG_P_G2_P2Q1 0x36E0
158 #define MT9M114_REG_P_G2_P2Q2 0x36E2
159 #define MT9M114_REG_P_G2_P2Q3 0x36E4
160 #define MT9M114_REG_P_G2_P2Q4 0x36E6
161 #define MT9M114_REG_P_G1_P3Q0 0x3700
162 #define MT9M114_REG_P_G1_P3Q1 0x3702
163 #define MT9M114_REG_P_G1_P3Q2 0x3704
164 #define MT9M114_REG_P_G1_P3Q3 0x3706
165 #define MT9M114_REG_P_G1_P3Q4 0x3708
166 #define MT9M114_REG_P_R_P3Q0 0x370A
167 #define MT9M114_REG_P_R_P3Q1 0x370C
168 #define MT9M114_REG_P_R_P3Q2 0x370E
169 #define MT9M114_REG_P_R_P3Q3 0x3710
170 #define MT9M114_REG_P_R_P3Q4 0x3712
171 #define MT9M114_REG_P_B_P3Q0 0x3714
172 #define MT9M114_REG_P_B_P3Q1 0x3716
173 #define MT9M114_REG_P_B_P3Q2 0x3718
174 #define MT9M114_REG_P_B_P3Q3 0x371A
175 #define MT9M114_REG_P_B_P3Q4 0x371C
176 #define MT9M114_REG_P_G2_P3Q0 0x371E
177 #define MT9M114_REG_P_G2_P3Q1 0x3720
178 #define MT9M114_REG_P_G2_P3Q2 0x3722
179 #define MT9M114_REG_P_G2_P3Q3 0x3724
180 #define MT9M114_REG_P_G2_P3Q4 0x3726
181 #define MT9M114_REG_P_G1_P4Q0 0x3740
182 #define MT9M114_REG_P_G1_P4Q1 0x3742
183 #define MT9M114_REG_P_G1_P4Q2 0x3744
184 #define MT9M114_REG_P_G1_P4Q3 0x3746
185 #define MT9M114_REG_P_G1_P4Q4 0x3748
186 #define MT9M114_REG_P_R_P4Q0 0x374A
187 #define MT9M114_REG_P_R_P4Q1 0x374C
188 #define MT9M114_REG_P_R_P4Q2 0x374E
189 #define MT9M114_REG_P_R_P4Q3 0x3750
190 #define MT9M114_REG_P_R_P4Q4 0x3752
191 #define MT9M114_REG_P_B_P4Q0 0x3754
192 #define MT9M114_REG_P_B_P4Q1 0x3756
193 #define MT9M114_REG_P_B_P4Q2 0x3758
194 #define MT9M114_REG_P_B_P4Q3 0x375A
195 #define MT9M114_REG_P_B_P4Q4 0x375C
196 #define MT9M114_REG_P_G2_P4Q0 0x375E
197 #define MT9M114_REG_P_G2_P4Q1 0x3760
198 #define MT9M114_REG_P_G2_P4Q2 0x3762
199 #define MT9M114_REG_P_G2_P4Q3 0x3764
200 #define MT9M114_REG_P_G2_P4Q4 0x3766
201 #define MT9M114_REG_CENTER_ROW 0x3782
202 #define MT9M114_REG_CENTER_COLUMN 0x3784
203 
204 /* 4.SYSCTL registers */
205 #define MT9M114_REG_CHIP_ID 0x0000
206 #define MT9M114_REG_CLOCKS_CONTROL 0x0016
207 #define MT9M114_REG_RESET_AND_MISC_CONTROL 0x001A
208 #define MT9M114_REG_PAD_SLEW 0x001E
209 #define MT9M114_REG_USER_DEFINED_DEVICE_ADDRESS_ID 0x002E
210 #define MT9M114_REG_PAD_CONTROL 0x0032
211 #define MT9M114_REG_COMMAND_REGISTER 0x0080
212 
213 /* 5.XDMA registers */
214 #define MT9M114_REG_ACCESS_CTL_STAT 0x0982
215 #define MT9M114_REG_PHYSICAL_ADDRESS_ACCESS 0x098A
216 #define MT9M114_REG_LOGICAL_ADDRESS_ACCESS 0x098E
217 #define MT9M114_REG_MCU_VARIABLE_DATA0 0x0990
218 #define MT9M114_REG_MCU_VARIABLE_DATA1 0x0992
219 #define MT9M114_REG_MCU_VARIABLE_DATA2 0x0994
220 #define MT9M114_REG_MCU_VARIABLE_DATA3 0x0996
221 #define MT9M114_REG_MCU_VARIABLE_DATA4 0x0998
222 #define MT9M114_REG_MCU_VARIABLE_DATA5 0x099A
223 #define MT9M114_REG_MCU_VARIABLE_DATA6 0x099C
224 #define MT9M114_REG_MCU_VARIABLE_DATA7 0x099E
225 
226 /*! @brief MT9M114 variables definitions.*/
227 
228 /* 01.Monitor variables */
229 #define MT9M114_VAR_MON_MAJOR_VERSION 0x8000
230 #define MT9M114_VAR_MON_MINOR_VERSION 0x8002
231 #define MT9M114_VAR_MON_RELEASE_VERSION 0x8004
232 #define MT9M114_VAR_MON_HEARTBEAT 0x8006
233 
234 /* 02.Sequencer variables */
235 #define MT9M114_VAR_SEQ_ERROR_CODE 0x8406
236 
237 /* 03.AE_Rule variables */
238 #define MT9M114_VAR_AE_RULE_ALGO 0xA404
239 #define MT9M114_VAR_AE_RULE_AVG_Y_FROM_STATS 0xA406
240 #define MT9M114_VAR_AE_RULE_AE_WEIGHT_TABLE_0_0 0xA407
241 #define MT9M114_VAR_AE_RULE_AE_WEIGHT_TABLE_0_1 0xA408
242 #define MT9M114_VAR_AE_RULE_AE_WEIGHT_TABLE_0_2 0xA409
243 #define MT9M114_VAR_AE_RULE_AE_WEIGHT_TABLE_0_3 0xA40A
244 #define MT9M114_VAR_AE_RULE_AE_WEIGHT_TABLE_0_4 0xA40B
245 #define MT9M114_VAR_AE_RULE_AE_WEIGHT_TABLE_1_0 0xA40C
246 #define MT9M114_VAR_AE_RULE_AE_WEIGHT_TABLE_1_1 0xA40D
247 #define MT9M114_VAR_AE_RULE_AE_WEIGHT_TABLE_1_2 0xA40E
248 #define MT9M114_VAR_AE_RULE_AE_WEIGHT_TABLE_1_3 0xA40F
249 #define MT9M114_VAR_AE_RULE_AE_WEIGHT_TABLE_1_4 0xA410
250 #define MT9M114_VAR_AE_RULE_AE_WEIGHT_TABLE_2_0 0xA411
251 #define MT9M114_VAR_AE_RULE_AE_WEIGHT_TABLE_2_1 0xA412
252 #define MT9M114_VAR_AE_RULE_AE_WEIGHT_TABLE_2_2 0xA413
253 #define MT9M114_VAR_AE_RULE_AE_WEIGHT_TABLE_2_3 0xA414
254 #define MT9M114_VAR_AE_RULE_AE_WEIGHT_TABLE_2_4 0xA415
255 #define MT9M114_VAR_AE_RULE_AE_WEIGHT_TABLE_3_0 0xA416
256 #define MT9M114_VAR_AE_RULE_AE_WEIGHT_TABLE_3_1 0xA417
257 #define MT9M114_VAR_AE_RULE_AE_WEIGHT_TABLE_3_2 0xA418
258 #define MT9M114_VAR_AE_RULE_AE_WEIGHT_TABLE_3_3 0xA419
259 #define MT9M114_VAR_AE_RULE_AE_WEIGHT_TABLE_3_4 0xA41A
260 #define MT9M114_VAR_AE_RULE_AE_WEIGHT_TABLE_4_0 0xA41B
261 #define MT9M114_VAR_AE_RULE_AE_WEIGHT_TABLE_4_1 0xA41C
262 #define MT9M114_VAR_AE_RULE_AE_WEIGHT_TABLE_4_2 0xA41D
263 #define MT9M114_VAR_AE_RULE_AE_WEIGHT_TABLE_4_3 0xA41E
264 #define MT9M114_VAR_AE_RULE_AE_WEIGHT_TABLE_4_4 0xA41F
265 #define MT9M114_VAR_AE_RULE_AE_ADAPTIVE_STRENGTH 0xA420
266 
267 /* 04.AE_Track variables */
268 #define MT9M114_VAR_AE_TRACK_STATUS 0xA800
269 #define MT9M114_VAR_AE_TRACK_ALGO 0xA804
270 #define MT9M114_VAR_AE_TRACK_TARGET_AVERAGE_LUMA 0xA807
271 #define MT9M114_VAR_AE_TRACK_GATE_PERCENTAGE 0xA808
272 #define MT9M114_VAR_AE_TRACK_CURRENT_AVERAGE_LUMA 0xA809
273 #define MT9M114_VAR_AE_TRACK_AE_TRACKING_DAMPENING_SPEED 0xA80A
274 #define MT9M114_VAR_AE_TRACK_AE_DAMPENING_SPEED 0xA80B
275 #define MT9M114_VAR_AE_TRACK_SKIP_FRAMES_COUNTER 0xA80D
276 #define MT9M114_VAR_AE_TRACK_CURRENT_FLICKER_LINES 0xA80E
277 #define MT9M114_VAR_AE_TRACK_FDZONE 0xA818
278 #define MT9M114_VAR_AE_TRACK_ZONE 0xA81B
279 #define MT9M114_VAR_AE_TRACK_FLICKER_LINES_50HZ 0xA826
280 #define MT9M114_VAR_AE_TRACK_VIRT_EXPOSURE_LOG 0xA828
281 #define MT9M114_VAR_AE_TRACK_MIN_VIRT_EXPOSURE_LOG_ZONE0 0xA82A
282 #define MT9M114_VAR_AE_TRACK_MAX_VIRT_EXPOSURE_LOG_ZONE0 0xA82C
283 #define MT9M114_VAR_AE_TRACK_MAX_VIRT_EXPOSURE_LOG_ZONE1 0xA82E
284 #define MT9M114_VAR_AE_TRACK_VIRT_GAIN 0xA838
285 
286 /* 05.AWB variables */
287 #define MT9M114_VAR_AWB_STATUS 0xAC00
288 #define MT9M114_VAR_AWB_MODE 0xAC02
289 #define MT9M114_VAR_AWB_R_RATIO_LOWER 0xAC06
290 #define MT9M114_VAR_AWB_R_RATIO_UPPER 0xAC07
291 #define MT9M114_VAR_AWB_B_RATIO_LOWER 0xAC08
292 #define MT9M114_VAR_AWB_B_RATIO_UPPER 0xAC09
293 #define MT9M114_VAR_AWB_R_SCENE_RATIO_LOWER 0xAC0A
294 #define MT9M114_VAR_AWB_R_SCENE_RATIO_UPPER 0xAC0B
295 #define MT9M114_VAR_AWB_B_SCENE_RATIO_LOWER 0xAC0C
296 #define MT9M114_VAR_AWB_B_SCENE_RATIO_UPPER 0xAC0D
297 #define MT9M114_VAR_AWB_R_RATIO_PRE_AWB 0xAC0E
298 #define MT9M114_VAR_AWB_B_RATIO_PRE_AWB 0xAC0F
299 #define MT9M114_VAR_AWB_R_GAIN 0xAC12
300 #define MT9M114_VAR_AWB_B_GAIN 0xAC14
301 #define MT9M114_VAR_AWB_PRE_AWB_RATIOS_TRACKING_SPEED 0xAC16
302 #define MT9M114_VAR_AWB_PIXEL_THRESHOLD_COUNT 0xAC18
303 
304 /* 06.BlackLevel variables */
305 #define MT9M114_VAR_BLACKLEVEL_ALGO 0xB004
306 #define MT9M114_VAR_BLACKLEVEL_MAX_BLACK_LEVEL 0xB00C
307 #define MT9M114_VAR_BLACKLEVEL_BLACK_LEVEL_DAMPENING 0xB00D
308 
309 /* 07.CCM variables */
310 #define MT9M114_VAR_CCM_ALGO 0xB404
311 #define MT9M114_VAR_CCM_0 0xB406
312 #define MT9M114_VAR_CCM_1 0xB408
313 #define MT9M114_VAR_CCM_2 0xB40A
314 #define MT9M114_VAR_CCM_3 0xB40C
315 #define MT9M114_VAR_CCM_4 0xB40E
316 #define MT9M114_VAR_CCM_5 0xB410
317 #define MT9M114_VAR_CCM_6 0xB412
318 #define MT9M114_VAR_CCM_7 0xB414
319 #define MT9M114_VAR_CCM_8 0xB416
320 #define MT9M114_VAR_CCM_LL_DELTA_CCM_0 0xB418
321 #define MT9M114_VAR_CCM_LL_DELTA_CCM_1 0xB41A
322 #define MT9M114_VAR_CCM_LL_DELTA_CCM_2 0xB41C
323 #define MT9M114_VAR_CCM_LL_DELTA_CCM_3 0xB41E
324 #define MT9M114_VAR_CCM_LL_DELTA_CCM_4 0xB420
325 #define MT9M114_VAR_CCM_LL_DELTA_CCM_5 0xB422
326 #define MT9M114_VAR_CCM_LL_DELTA_CCM_6 0xB424
327 #define MT9M114_VAR_CCM_LL_DELTA_CCM_7 0xB426
328 #define MT9M114_VAR_CCM_LL_DELTA_CCM_8 0xB428
329 #define MT9M114_VAR_CCM_DELTA_GAIN 0xB42A
330 #define MT9M114_VAR_CCM_DELTA_THRESH 0xB42B
331 
332 /* 08.LowLight variables */
333 #define MT9M114_VAR_LL_MODE 0xBC02
334 #define MT9M114_VAR_LL_ALGO 0xBC04
335 #define MT9M114_VAR_LL_GAMMA_SELECT 0xBC07
336 #define MT9M114_VAR_LL_GAMMA_CONTRAST_CURVE_0 0xBC0A
337 #define MT9M114_VAR_LL_GAMMA_CONTRAST_CURVE_1 0xBC0B
338 #define MT9M114_VAR_LL_GAMMA_CONTRAST_CURVE_2 0xBC0C
339 #define MT9M114_VAR_LL_GAMMA_CONTRAST_CURVE_3 0xBC0D
340 #define MT9M114_VAR_LL_GAMMA_CONTRAST_CURVE_4 0xBC0E
341 #define MT9M114_VAR_LL_GAMMA_CONTRAST_CURVE_5 0xBC0F
342 #define MT9M114_VAR_LL_GAMMA_CONTRAST_CURVE_6 0xBC10
343 #define MT9M114_VAR_LL_GAMMA_CONTRAST_CURVE_7 0xBC11
344 #define MT9M114_VAR_LL_GAMMA_CONTRAST_CURVE_8 0xBC12
345 #define MT9M114_VAR_LL_GAMMA_CONTRAST_CURVE_9 0xBC13
346 #define MT9M114_VAR_LL_GAMMA_CONTRAST_CURVE_10 0xBC14
347 #define MT9M114_VAR_LL_GAMMA_CONTRAST_CURVE_11 0xBC15
348 #define MT9M114_VAR_LL_GAMMA_CONTRAST_CURVE_12 0xBC16
349 #define MT9M114_VAR_LL_GAMMA_CONTRAST_CURVE_13 0xBC17
350 #define MT9M114_VAR_LL_GAMMA_CONTRAST_CURVE_14 0xBC18
351 #define MT9M114_VAR_LL_GAMMA_CONTRAST_CURVE_15 0xBC19
352 #define MT9M114_VAR_LL_GAMMA_CONTRAST_CURVE_16 0xBC1A
353 #define MT9M114_VAR_LL_GAMMA_CONTRAST_CURVE_17 0xBC1B
354 #define MT9M114_VAR_LL_GAMMA_CONTRAST_CURVE_18 0xBC1C
355 #define MT9M114_VAR_LL_GAMMA_NRCURVE_0 0xBC1D
356 #define MT9M114_VAR_LL_GAMMA_NRCURVE_1 0xBC1E
357 #define MT9M114_VAR_LL_GAMMA_NRCURVE_2 0xBC1F
358 #define MT9M114_VAR_LL_GAMMA_NRCURVE_3 0xBC20
359 #define MT9M114_VAR_LL_GAMMA_NRCURVE_4 0xBC21
360 #define MT9M114_VAR_LL_GAMMA_NRCURVE_5 0xBC22
361 #define MT9M114_VAR_LL_GAMMA_NRCURVE_6 0xBC23
362 #define MT9M114_VAR_LL_GAMMA_NRCURVE_7 0xBC24
363 #define MT9M114_VAR_LL_GAMMA_NRCURVE_8 0xBC25
364 #define MT9M114_VAR_LL_GAMMA_NRCURVE_9 0xBC26
365 #define MT9M114_VAR_LL_GAMMA_NRCURVE_10 0xBC27
366 #define MT9M114_VAR_LL_GAMMA_NRCURVE_11 0xBC28
367 #define MT9M114_VAR_LL_GAMMA_NRCURVE_12 0xBC29
368 #define MT9M114_VAR_LL_GAMMA_NRCURVE_13 0xBC2A
369 #define MT9M114_VAR_LL_GAMMA_NRCURVE_14 0xBC2B
370 #define MT9M114_VAR_LL_GAMMA_NRCURVE_15 0xBC2C
371 #define MT9M114_VAR_LL_GAMMA_NRCURVE_16 0xBC2D
372 #define MT9M114_VAR_LL_GAMMA_NRCURVE_17 0xBC2E
373 #define MT9M114_VAR_LL_GAMMA_NRCURVE_18 0xBC2F
374 #define MT9M114_VAR_LL_BM_PRECISION_BITS 0xBC31
375 #define MT9M114_VAR_LL_AVERAGE_LUMA_FADE_TO_BLACK 0xBC3A
376 #define MT9M114_VAR_LL_FADE_TO_BLACK_DAMPENING_SPEED 0xBC3C
377 
378 /* 09.CameraControl variables */
379 #define MT9M114_VAR_CAM_SENSOR_CFG_Y_ADDR_START 0xC800
380 #define MT9M114_VAR_CAM_SENSOR_CFG_X_ADDR_START 0xC802
381 #define MT9M114_VAR_CAM_SENSOR_CFG_Y_ADDR_END 0xC804
382 #define MT9M114_VAR_CAM_SENSOR_CFG_X_ADDR_END 0xC806
383 #define MT9M114_VAR_CAM_SENSOR_CFG_PIXCLK 0xC808
384 #define MT9M114_VAR_CAM_SENSOR_CFG_ROW_SPEED 0xC80C
385 #define MT9M114_VAR_CAM_SENSOR_CFG_FINE_INTEG_TIME_MIN 0xC80E
386 #define MT9M114_VAR_CAM_SENSOR_CFG_FINE_INTEG_TIME_MAX 0xC810
387 #define MT9M114_VAR_CAM_SENSOR_CFG_FRAME_LENGTH_LINES 0xC812
388 #define MT9M114_VAR_CAM_SENSOR_CFG_LINE_LENGTH_PCK 0xC814
389 #define MT9M114_VAR_CAM_SENSOR_CFG_FINE_CORRECTION 0xC816
390 #define MT9M114_VAR_CAM_SENSOR_CFG_CPIPE_LAST_ROW 0xC818
391 #define MT9M114_VAR_CAM_SENSOR_CFG_REG_0_DATA 0xC826
392 #define MT9M114_VAR_CAM_SENSOR_CONTROL_READ_MODE 0xC834
393 #define MT9M114_VAR_CAM_SENSOR_CONTROL_ANALOG_GAIN 0xC836
394 #define MT9M114_VAR_CAM_SENSOR_CONTROL_VIRT_COLUMN_GAIN 0xC838
395 #define MT9M114_VAR_CAM_SENSOR_CONTROL_FRAME_LENGTH_LINES 0xC83A
396 #define MT9M114_VAR_CAM_SENSOR_CONTROL_COARSE_INTEGRATION_TIME 0xC83C
397 #define MT9M114_VAR_CAM_SENSOR_CONTROL_FINE_INTEGRATION_TIME 0xC83E
398 #define MT9M114_VAR_CAM_CPIPE_CONTROL_DGAIN_RED 0xC840
399 #define MT9M114_VAR_CAM_CPIPE_CONTROL_DGAIN_GREEN1 0xC842
400 #define MT9M114_VAR_CAM_CPIPE_CONTROL_DGAIN_GREEN2 0xC844
401 #define MT9M114_VAR_CAM_CPIPE_CONTROL_DGAIN_BLUE 0xC846
402 #define MT9M114_VAR_CAM_CPIPE_CONTROL_DGAIN_SECOND 0xC848
403 #define MT9M114_VAR_CAM_CPIPE_CONTROL_SECOND_BLACK_LEVEL 0xC84B
404 #define MT9M114_VAR_CAM_MODE_SELECT 0xC84C
405 #define MT9M114_VAR_CAM_MODE_TEST_PATTERN_SELECT 0xC84D
406 #define MT9M114_VAR_CAM_MODE_TEST_PATTERN_RED 0xC84E
407 #define MT9M114_VAR_CAM_MODE_TEST_PATTERN_GREEN 0xC850
408 #define MT9M114_VAR_CAM_MODE_TEST_PATTERN_BLUE 0xC852
409 #define MT9M114_VAR_CAM_CROP_WINDOW_XOFFSET 0xC854
410 #define MT9M114_VAR_CAM_CROP_WINDOW_YOFFSET 0xC856
411 #define MT9M114_VAR_CAM_CROP_WINDOW_WIDTH 0xC858
412 #define MT9M114_VAR_CAM_CROP_WINDOW_HEIGHT 0xC85A
413 #define MT9M114_VAR_CAM_CROP_CROPMODE 0xC85C
414 #define MT9M114_VAR_CAM_SCALE_VERTICAL_TC_MODE 0xC85E
415 #define MT9M114_VAR_CAM_SCALE_VERTICAL_TC_PERCENTAGE 0xC860
416 #define MT9M114_VAR_CAM_SCALE_VERTICAL_TC_STRETCH_FACTOR 0xC862
417 #define MT9M114_VAR_CAM_OUTPUT_WIDTH 0xC868
418 #define MT9M114_VAR_CAM_OUTPUT_HEIGHT 0xC86A
419 #define MT9M114_VAR_CAM_OUTPUT_FORMAT 0xC86C
420 #define MT9M114_VAR_CAM_OUTPUT_FORMAT_YUV 0xC86E
421 #define MT9M114_VAR_CAM_OUTPUT_Y_OFFSET 0xC870
422 #define MT9M114_VAR_CAM_HUE_ANGLE 0xC873
423 #define MT9M114_VAR_CAM_SFX_CONTROL 0xC874
424 #define MT9M114_VAR_CAM_SFX_SOLARIZATION_THRESH 0xC875
425 #define MT9M114_VAR_CAM_SFX_SEPIA_CR 0xC876
426 #define MT9M114_VAR_CAM_SFX_SEPIA_CB 0xC877
427 #define MT9M114_VAR_CAM_AET_AEMODE 0xC878
428 #define MT9M114_VAR_CAM_AET_SKIP_FRAMES 0xC879
429 #define MT9M114_VAR_CAM_AET_TARGET_AVERAGE_LUMA 0xC87A
430 #define MT9M114_VAR_CAM_AET_TARGET_AVERAGE_LUMA_DARK 0xC87B
431 #define MT9M114_VAR_CAM_AET_BLACK_CLIPPING_TARGET 0xC87C
432 #define MT9M114_VAR_CAM_AET_AE_MIN_VIRT_INT_TIME_PCLK 0xC87E
433 #define MT9M114_VAR_CAM_AET_AE_MIN_VIRT_DGAIN 0xC880
434 #define MT9M114_VAR_CAM_AET_AE_MAX_VIRT_DGAIN 0xC882
435 #define MT9M114_VAR_CAM_AET_AE_MIN_VIRT_AGAIN 0xC884
436 #define MT9M114_VAR_CAM_AET_AE_MAX_VIRT_AGAIN 0xC886
437 #define MT9M114_VAR_CAM_AET_AE_VIRT_GAIN_TH_EG 0xC888
438 #define MT9M114_VAR_CAM_AET_AE_EG_GATE_PERCENTAGE 0xC88A
439 #define MT9M114_VAR_CAM_AET_FLICKER_FREQ_HZ 0xC88B
440 #define MT9M114_VAR_CAM_AET_MAX_FRAME_RATE 0xC88C
441 #define MT9M114_VAR_CAM_AET_MIN_FRAME_RATE 0xC88E
442 #define MT9M114_VAR_CAM_AET_TARGET_GAIN 0xC890
443 #define MT9M114_VAR_CAM_AWB_CCM_L_0 0xC892
444 #define MT9M114_VAR_CAM_AWB_CCM_L_1 0xC894
445 #define MT9M114_VAR_CAM_AWB_CCM_L_2 0xC896
446 #define MT9M114_VAR_CAM_AWB_CCM_L_3 0xC898
447 #define MT9M114_VAR_CAM_AWB_CCM_L_4 0xC89A
448 #define MT9M114_VAR_CAM_AWB_CCM_L_5 0xC89C
449 #define MT9M114_VAR_CAM_AWB_CCM_L_6 0xC89E
450 #define MT9M114_VAR_CAM_AWB_CCM_L_7 0xC8A0
451 #define MT9M114_VAR_CAM_AWB_CCM_L_8 0xC8A2
452 #define MT9M114_VAR_CAM_AWB_CCM_M_0 0xC8A4
453 #define MT9M114_VAR_CAM_AWB_CCM_M_1 0xC8A6
454 #define MT9M114_VAR_CAM_AWB_CCM_M_2 0xC8A8
455 #define MT9M114_VAR_CAM_AWB_CCM_M_3 0xC8AA
456 #define MT9M114_VAR_CAM_AWB_CCM_M_4 0xC8AC
457 #define MT9M114_VAR_CAM_AWB_CCM_M_5 0xC8AE
458 #define MT9M114_VAR_CAM_AWB_CCM_M_6 0xC8B0
459 #define MT9M114_VAR_CAM_AWB_CCM_M_7 0xC8B2
460 #define MT9M114_VAR_CAM_AWB_CCM_M_8 0xC8B4
461 #define MT9M114_VAR_CAM_AWB_CCM_R_0 0xC8B6
462 #define MT9M114_VAR_CAM_AWB_CCM_R_1 0xC8B8
463 #define MT9M114_VAR_CAM_AWB_CCM_R_2 0xC8BA
464 #define MT9M114_VAR_CAM_AWB_CCM_R_3 0xC8BC
465 #define MT9M114_VAR_CAM_AWB_CCM_R_4 0xC8BE
466 #define MT9M114_VAR_CAM_AWB_CCM_R_5 0xC8C0
467 #define MT9M114_VAR_CAM_AWB_CCM_R_6 0xC8C2
468 #define MT9M114_VAR_CAM_AWB_CCM_R_7 0xC8C4
469 #define MT9M114_VAR_CAM_AWB_CCM_R_8 0xC8C6
470 #define MT9M114_VAR_CAM_AWB_CCM_L_RG_GAIN 0xC8C8
471 #define MT9M114_VAR_CAM_AWB_CCM_L_BG_GAIN 0xC8CA
472 #define MT9M114_VAR_CAM_AWB_CCM_M_RG_GAIN 0xC8CC
473 #define MT9M114_VAR_CAM_AWB_CCM_M_BG_GAIN 0xC8CE
474 #define MT9M114_VAR_CAM_AWB_CCM_R_RG_GAIN 0xC8D0
475 #define MT9M114_VAR_CAM_AWB_CCM_R_BG_GAIN 0xC8D2
476 #define MT9M114_VAR_CAM_AWB_CCM_L_CTEMP 0xC8D4
477 #define MT9M114_VAR_CAM_AWB_CCM_M_CTEMP 0xC8D6
478 #define MT9M114_VAR_CAM_AWB_CCM_R_CTEMP 0xC8D8
479 #define MT9M114_VAR_CAM_AWB_LL_CCM_0 0xC8DA
480 #define MT9M114_VAR_CAM_AWB_LL_CCM_1 0xC8DC
481 #define MT9M114_VAR_CAM_AWB_LL_CCM_2 0xC8DE
482 #define MT9M114_VAR_CAM_AWB_LL_CCM_3 0xC8E0
483 #define MT9M114_VAR_CAM_AWB_LL_CCM_4 0xC8E2
484 #define MT9M114_VAR_CAM_AWB_LL_CCM_5 0xC8E4
485 #define MT9M114_VAR_CAM_AWB_LL_CCM_6 0xC8E6
486 #define MT9M114_VAR_CAM_AWB_LL_CCM_7 0xC8E8
487 #define MT9M114_VAR_CAM_AWB_LL_CCM_8 0xC8EA
488 #define MT9M114_VAR_CAM_AWB_COLOR_TEMPERATURE_MIN 0xC8EC
489 #define MT9M114_VAR_CAM_AWB_COLOR_TEMPERATURE_MAX 0xC8EE
490 #define MT9M114_VAR_CAM_AWB_COLOR_TEMPERATURE 0xC8F0
491 #define MT9M114_VAR_CAM_AWB_AWB_XSCALE 0xC8F2
492 #define MT9M114_VAR_CAM_AWB_AWB_YSCALE 0xC8F3
493 #define MT9M114_VAR_CAM_AWB_AWB_WEIGHTS_0 0xC8F4
494 #define MT9M114_VAR_CAM_AWB_AWB_WEIGHTS_1 0xC8F6
495 #define MT9M114_VAR_CAM_AWB_AWB_WEIGHTS_2 0xC8F8
496 #define MT9M114_VAR_CAM_AWB_AWB_WEIGHTS_3 0xC8FA
497 #define MT9M114_VAR_CAM_AWB_AWB_WEIGHTS_4 0xC8FC
498 #define MT9M114_VAR_CAM_AWB_AWB_WEIGHTS_5 0xC8FE
499 #define MT9M114_VAR_CAM_AWB_AWB_WEIGHTS_6 0xC900
500 #define MT9M114_VAR_CAM_AWB_AWB_WEIGHTS_7 0xC902
501 #define MT9M114_VAR_CAM_AWB_AWB_XSHIFT_PRE_ADJ 0xC904
502 #define MT9M114_VAR_CAM_AWB_AWB_YSHIFT_PRE_ADJ 0xC906
503 #define MT9M114_VAR_CAM_AWB_AWBMODE 0xC909
504 #define MT9M114_VAR_CAM_AWB_TINTS_CTEMP_THRESHOLD 0xC90A
505 #define MT9M114_VAR_CAM_AWB_K_R_L 0xC90C
506 #define MT9M114_VAR_CAM_AWB_K_G_L 0xC90D
507 #define MT9M114_VAR_CAM_AWB_K_B_L 0xC90E
508 #define MT9M114_VAR_CAM_AWB_K_R_R 0xC90F
509 #define MT9M114_VAR_CAM_AWB_K_G_R 0xC910
510 #define MT9M114_VAR_CAM_AWB_K_B_R 0xC911
511 #define MT9M114_VAR_CAM_STAT_AWB_CLIP_WINDOW_XSTART 0xC914
512 #define MT9M114_VAR_CAM_STAT_AWB_CLIP_WINDOW_YSTART 0xC916
513 #define MT9M114_VAR_CAM_STAT_AWB_CLIP_WINDOW_XEND 0xC918
514 #define MT9M114_VAR_CAM_STAT_AWB_CLIP_WINDOW_YEND 0xC91A
515 #define MT9M114_VAR_CAM_STAT_AE_INITIAL_WINDOW_XSTART 0xC91C
516 #define MT9M114_VAR_CAM_STAT_AE_INITIAL_WINDOW_YSTART 0xC91E
517 #define MT9M114_VAR_CAM_STAT_AE_INITIAL_WINDOW_XEND 0xC920
518 #define MT9M114_VAR_CAM_STAT_AE_INITIAL_WINDOW_YEND 0xC922
519 #define MT9M114_VAR_CAM_LL_LLMODE 0xC924
520 #define MT9M114_VAR_CAM_LL_START_BRIGHTNESS 0xC926
521 #define MT9M114_VAR_CAM_LL_STOP_BRIGHTNESS 0xC928
522 #define MT9M114_VAR_CAM_LL_START_SATURATION 0xC92A
523 #define MT9M114_VAR_CAM_LL_END_SATURATION 0xC92B
524 #define MT9M114_VAR_CAM_LL_START_DESATURATION 0xC92C
525 #define MT9M114_VAR_CAM_LL_END_DESATURATION 0xC92D
526 #define MT9M114_VAR_CAM_LL_START_DEMOSAIC 0xC92E
527 #define MT9M114_VAR_CAM_LL_START_AP_GAIN 0xC92F
528 #define MT9M114_VAR_CAM_LL_START_AP_THRESH 0xC930
529 #define MT9M114_VAR_CAM_LL_STOP_DEMOSAIC 0xC931
530 #define MT9M114_VAR_CAM_LL_STOP_AP_GAIN 0xC932
531 #define MT9M114_VAR_CAM_LL_STOP_AP_THRESH 0xC933
532 #define MT9M114_VAR_CAM_LL_START_NR_RED 0xC934
533 #define MT9M114_VAR_CAM_LL_START_NR_GREEN 0xC935
534 #define MT9M114_VAR_CAM_LL_START_NR_BLUE 0xC936
535 #define MT9M114_VAR_CAM_LL_START_NR_THRESH 0xC937
536 #define MT9M114_VAR_CAM_LL_STOP_NR_RED 0xC938
537 #define MT9M114_VAR_CAM_LL_STOP_NR_GREEN 0xC939
538 #define MT9M114_VAR_CAM_LL_STOP_NR_BLUE 0xC93A
539 #define MT9M114_VAR_CAM_LL_STOP_NR_THRESH 0xC93B
540 #define MT9M114_VAR_CAM_LL_START_CONTRAST_BM 0xC93C
541 #define MT9M114_VAR_CAM_LL_STOP_CONTRAST_BM 0xC93E
542 #define MT9M114_VAR_CAM_LL_GAMMA 0xC940
543 #define MT9M114_VAR_CAM_LL_START_CONTRAST_GRADIENT 0xC942
544 #define MT9M114_VAR_CAM_LL_STOP_CONTRAST_GRADIENT 0xC943
545 #define MT9M114_VAR_CAM_LL_START_CONTRAST_LUMA_PERCENTAGE 0xC944
546 #define MT9M114_VAR_CAM_LL_STOP_CONTRAST_LUMA_PERCENTAGE 0xC945
547 #define MT9M114_VAR_CAM_LL_START_GAIN_METRIC 0xC946
548 #define MT9M114_VAR_CAM_LL_STOP_GAIN_METRIC 0xC948
549 #define MT9M114_VAR_CAM_LL_START_FADE_TO_BLACK_LUMA 0xC94A
550 #define MT9M114_VAR_CAM_LL_STOP_FADE_TO_BLACK_LUMA 0xC94C
551 #define MT9M114_VAR_CAM_LL_CLUSTER_DC_TH_BM 0xC94E
552 #define MT9M114_VAR_CAM_LL_CLUSTER_DC_GATE_PERCENTAGE 0xC950
553 #define MT9M114_VAR_CAM_LL_SUMMING_SENSITIVITY_FACTOR 0xC951
554 #define MT9M114_VAR_CAM_LL_START_TARGET_LUMA_BM 0xC952
555 #define MT9M114_VAR_CAM_LL_STOP_TARGET_LUMA_BM 0xC954
556 #define MT9M114_VAR_CAM_LL_INV_BRIGHTNESS_METRIC 0xC956
557 #define MT9M114_VAR_CAM_LL_GAIN_METRIC 0xC958
558 #define MT9M114_VAR_CAM_SEQ_UV_COLOR_BOOST 0xC95A
559 #define MT9M114_VAR_CAM_PGA_PGA_CONTROL 0xC95E
560 #define MT9M114_VAR_CAM_PGA_L_CONFIG_COLOUR_TEMP 0xC960
561 #define MT9M114_VAR_CAM_PGA_L_CONFIG_GREEN_RED_Q14 0xC962
562 #define MT9M114_VAR_CAM_PGA_L_CONFIG_RED_Q14 0xC964
563 #define MT9M114_VAR_CAM_PGA_L_CONFIG_GREEN_BLUE_Q14 0xC966
564 #define MT9M114_VAR_CAM_PGA_L_CONFIG_BLUE_Q14 0xC968
565 #define MT9M114_VAR_CAM_PGA_M_CONFIG_COLOUR_TEMP 0xC96A
566 #define MT9M114_VAR_CAM_PGA_M_CONFIG_GREEN_RED_Q14 0xC96C
567 #define MT9M114_VAR_CAM_PGA_M_CONFIG_RED_Q14 0xC96E
568 #define MT9M114_VAR_CAM_PGA_M_CONFIG_GREEN_BLUE_Q14 0xC970
569 #define MT9M114_VAR_CAM_PGA_M_CONFIG_BLUE_Q14 0xC972
570 #define MT9M114_VAR_CAM_PGA_R_CONFIG_COLOUR_TEMP 0xC974
571 #define MT9M114_VAR_CAM_PGA_R_CONFIG_GREEN_RED_Q14 0xC976
572 #define MT9M114_VAR_CAM_PGA_R_CONFIG_RED_Q14 0xC978
573 #define MT9M114_VAR_CAM_PGA_R_CONFIG_GREEN_BLUE_Q14 0xC97A
574 #define MT9M114_VAR_CAM_PGA_R_CONFIG_BLUE_Q14 0xC97C
575 #define MT9M114_VAR_CAM_SYSCTL_PLL_ENABLE 0xC97E
576 #define MT9M114_VAR_CAM_SYSCTL_PLL_DIVIDER_M_N 0xC980
577 #define MT9M114_VAR_CAM_SYSCTL_PLL_DIVIDER_P 0xC982
578 #define MT9M114_VAR_CAM_PORT_OUTPUT_CONTROL 0xC984
579 #define MT9M114_VAR_CAM_PORT_PORCH 0xC986
580 #define MT9M114_VAR_CAM_PORT_MIPI_TIMING_T_HS_ZERO 0xC988
581 #define MT9M114_VAR_CAM_PORT_MIPI_TIMING_T_HS_EXIT_HS_TRAIL 0xC98A
582 #define MT9M114_VAR_CAM_PORT_MIPI_TIMING_T_CLK_POST_CLK_PRE 0xC98C
583 #define MT9M114_VAR_CAM_PORT_MIPI_TIMING_T_CLK_TRAIL_CLK_ZERO 0xC98E
584 #define MT9M114_VAR_CAM_PORT_MIPI_TIMING_T_LPX 0xC990
585 #define MT9M114_VAR_CAM_PORT_MIPI_TIMING_INIT_TIMING 0xC992
586 
587 /* 10.UVC_Control variables */
588 #define MT9M114_VAR_UVC_AE_MODE_CONTROL 0xCC00
589 #define MT9M114_VAR_UVC_WHITE_BALANCE_TEMPERATURE_AUTO_CONTROL 0xCC01
590 #define MT9M114_VAR_UVC_AE_PRIORITY_CONTROL 0xCC02
591 #define MT9M114_VAR_UVC_POWER_LINE_FREQUENCY_CONTROL 0xCC03
592 #define MT9M114_VAR_UVC_EXPOSURE_TIME_ABSOLUTE_CONTROL 0xCC04
593 #define MT9M114_VAR_UVC_BACKLIGHT_COMPENSATION_CONTROL 0xCC08
594 #define MT9M114_VAR_UVC_BRIGHTNESS_CONTROL 0xCC0A
595 #define MT9M114_VAR_UVC_CONTRAST_CONTROL 0xCC0C
596 #define MT9M114_VAR_UVC_GAIN_CONTROL 0xCC0E
597 #define MT9M114_VAR_UVC_HUE_CONTROL 0xCC10
598 #define MT9M114_VAR_UVC_SATURATION_CONTROL 0xCC12
599 #define MT9M114_VAR_UVC_SHARPNESS_CONTROL 0xCC14
600 #define MT9M114_VAR_UVC_GAMMA_CONTROL 0xCC16
601 #define MT9M114_VAR_UVC_WHITE_BALANCE_TEMPERATURE_CONTROL 0xCC18
602 #define MT9M114_VAR_UVC_FRAME_INTERVAL_CONTROL 0xCC1C
603 #define MT9M114_VAR_UVC_MANUAL_EXPOSURE_CONFIGURATION 0xCC20
604 #define MT9M114_VAR_UVC_FLICKER_AVOIDANCE_CONFIGURATION 0xCC21
605 #define MT9M114_VAR_UVC_ALGO 0xCC22
606 #define MT9M114_VAR_UVC_RESULT_STATUS 0xCC24
607 
608 /* 11.SystemManager variables */
609 #define MT9M114_VAR_SYSMGR_NEXT_STATE 0xDC00
610 #define MT9M114_VAR_SYSMGR_CURRENT_STATE 0xDC01
611 #define MT9M114_VAR_SYSMGR_CMD_STATUS 0xDC02
612 
613 /* 12.PatchLoader variables */
614 #define MT9M114_VAR_PATCHLDR_LOADER_ADDRESS 0xE000
615 #define MT9M114_VAR_PATCHLDR_PATCH_ID 0xE002
616 #define MT9M114_VAR_PATCHLDR_FIRMWARE_ID 0xE004
617 #define MT9M114_VAR_PATCHLDR_APPLY_STATUS 0xE008
618 #define MT9M114_VAR_PATCHLDR_NUM_PATCHES 0xE009
619 #define MT9M114_VAR_PATCHLDR_PATCH_ID_0 0xE00A
620 #define MT9M114_VAR_PATCHLDR_PATCH_ID_1 0xE00C
621 #define MT9M114_VAR_PATCHLDR_PATCH_ID_2 0xE00E
622 #define MT9M114_VAR_PATCHLDR_PATCH_ID_3 0xE010
623 #define MT9M114_VAR_PATCHLDR_PATCH_ID_4 0xE012
624 #define MT9M114_VAR_PATCHLDR_PATCH_ID_5 0xE014
625 #define MT9M114_VAR_PATCHLDR_PATCH_ID_6 0xE016
626 #define MT9M114_VAR_PATCHLDR_PATCH_ID_7 0xE018
627 
628 /* 13.Patch variables */
629 #define MT9M114_VAR_PATCHVARS_DELTA_DK_CORRECTION_FACTOR 0xE400
630 #define MT9M114_VAR_CAM_AUTO_BINNING_MODE               (0xE801)
631 
632 /* 14.CommandHandler variables */
633 #define MT9M114_VAR_CMD_HANDLER_WAIT_EVENT_ID 0xFC00
634 #define MT9M114_VAR_CMD_HANDLER_NUM_EVENTS 0xFC02
635 
636 /*! @brief MT9M114 command definitions. */
637 #define MT9M114_COMMAND_APPLY_PATCH 0x0001
638 #define MT9M114_COMMAND_SET_STATE 0x0002
639 #define MT9M114_COMMAND_REFRESH 0x0004
640 #define MT9M114_COMMAND_WAIT_FOR_EVENT 0x0008
641 #define MT9M114_COMMAND_OK 0x8000
642 
643 /*! @brief MT9M114 system state definitions. */
644 #define MT9M114_SYS_STATE_ENTER_CONFIG_CHANGE 0x28
645 #define MT9M114_SYS_STATE_STREAMING 0x31
646 #define MT9M114_SYS_STATE_START_STREAMING 0x34
647 #define MT9M114_SYS_STATE_ENTER_SUSPEND 0x40
648 #define MT9M114_SYS_STATE_SUSPENDED 0x41
649 #define MT9M114_SYS_STATE_ENTER_STANDBY 0x50
650 #define MT9M114_SYS_STATE_STANDBY 0x52
651 #define MT9M114_SYS_STATE_LEAVE_STANDBY 0x54
652 
653 /*! @brief MT9M114 system set-state command retults. */
654 #define MT9M114_SYS_STATE_SET_RESULT_ENOERR 0x00 /* command successful */
655 #define MT9M114_SYS_STATE_SET_RESULTEINVAL 0x0C  /* invalid configuration */
656 #define MT9M114_SYS_STATE_SET_RESULTENOSPC 0x0D  /* resource not available */
657 
658 #define MT9M114_OUTPUT_FORMAT_SWAP_RB               (1 << 0)
659 #define MT9M114_OUTPUT_FORMAT_SWAP_BYTES            (1 << 1)
660 #define MT9M114_OUTPUT_FORMAT_MONO                  (1 << 2)
661 #define MT9M114_OUTPUT_FORMAT_BT656                 (1 << 3)
662 #define MT9M114_OUTPUT_FORMAT_BT656_FIXED           (1 << 4)
663 #define MT9M114_OUTPUT_FORMAT_YUV                   (0 << 8)
664 #define MT9M114_OUTPUT_FORMAT_RGB                   (1 << 8)
665 #define MT9M114_OUTPUT_FORMAT_BAYER                 (2 << 8)
666 #define MT9M114_OUTPUT_FORMAT_RAW_BAYER_10          (0 << 10)
667 #define MT9M114_OUTPUT_FORMAT_RAW_BAYER_10_PRE      (1 << 10)
668 #define MT9M114_OUTPUT_FORMAT_RAW_BAYER_10_POST     (2 << 10)
669 #define MT9M114_OUTPUT_FORMAT_PROCESSED_BAYER       (3 << 10)
670 #define MT9M114_OUTPUT_FORMAT_RGB565                (0 << 12)
671 #define MT9M114_OUTPUT_FORMAT_RGB555                (1 << 12)
672 #define MT9M114_OUTPUT_FORMAT_XRGB444               (2 << 12)
673 #define MT9M114_OUTPUT_FORMAT_RGB444X               (3 << 12)
674 
675 #define MT9M114_SENSOR_CONTROL_READ_MODE_HMIRROR    (0x1)
676 #define MT9M114_SENSOR_CONTROL_READ_MODE_VFLIP      (0x2)
677 #define MT9M114_SENSOR_CONTROL_READ_MODE_HBIN_MASK  (0x30)
678 #define MT9M114_SENSOR_CONTROL_READ_MODE_HBIN       (0x30)
679 #define MT9M114_SENSOR_CONTROL_READ_MODE_VBIN_MASK  (0x300)
680 #define MT9M114_SENSOR_CONTROL_READ_MODE_VBIN       (0x300)
681 
682 #ifdef __cplusplus
683 extern "C" {
684 #endif
685 typedef struct {
686     uint16_t reg; /* 16bit reg address */
687     uint8_t size; /* reg size in byte */
688     uint32_t value; /* reg value */
689 } mt9m114_reg_t;
690 
691 /*!
692  * @brief MT9M114 read register.
693  *
694  * @param[in] context camera_operate_context.
695  * @param[in] reg reg address(16 bits)
696  * @param[in] reg_size reg size in bytes
697  * @param[out] value reg data from device
698  *
699  * @retval status_success if success.
700  * @retval status_fail if fail.
701  */
702 hpm_stat_t mt9m114_read_register(camera_context_t *context, uint32_t reg, uint32_t reg_size, void *value);
703 
704 /*!
705  * @brief MT9M114 write register.
706  *
707  * @param[in] context camera_operate_context.
708  * @param[in] reg reg address(16 bits)
709  * @param[in] reg_size reg size in bytes
710  * @param[in] value reg data to device
711  *
712  * @retval status_success if success.
713  * @retval status_fail if fail.
714  */
715 hpm_stat_t mt9m114_write_register(camera_context_t *context, uint32_t reg, uint32_t reg_size, uint32_t value);
716 
717 /*!
718  * @brief MT9M114 modify register.
719  *
720  * @param[in] context camera_operate_context.
721  * @param[in] reg reg address(16 bits)
722  * @param[in] reg_size reg size in bytes
723  * @param[in] mask bits can be modified
724  * @param[in] value value should be set
725  *
726  * @retval status_success if success.
727  * @retval status_fail if fail.
728  */
729 hpm_stat_t mt9m114_modify_register(camera_context_t *context, uint32_t reg, uint32_t reg_size, uint32_t mask, uint32_t value);
730 
731 /*!
732  * @brief MT9M114 multiwrite registers.
733  *
734  * @param[in] context camera_operate_context.
735  * @param[in] regs pointer to array of mt9m114_reg_t, include reg addr, reg size and value
736  * @param[in] num array size of [regs]
737  *
738  * @retval status_success if success.
739  * @retval status_fail if fail.
740  */
741 hpm_stat_t mt9m114_multiwrite(camera_context_t *context, const mt9m114_reg_t regs[], uint32_t num);
742 
743 /*!
744  * @brief MT9M114 check chipid.
745  *
746  * @param[in] context camera_operate_context.
747  *
748  * @retval status_success if success.
749  * @retval status_fail if fail.
750  */
751 hpm_stat_t mt9m114_check_chip_id(camera_context_t *context);
752 
753 /*!
754  * @brief MT9M114 set next state and switch to it.
755  *
756  * @param[in] context camera_operate_context.
757  * @param[in] next_state next device state.
758  *
759  * @retval status_success if success.
760  * @retval status_fail if fail.
761  */
762 hpm_stat_t mt9m114_setstate(camera_context_t *context, uint16_t next_state);
763 
764 /*!
765  * @brief MT9M114 get current state.
766  *
767  * @param[in] context camera_operate_context.
768  * @param[out] state current device state.
769  *
770  * @retval status_success if success.
771  * @retval status_fail if fail.
772  */
773 hpm_stat_t mt9m114_get_current_state(camera_context_t *context, uint8_t *state);
774 
775 /*!
776  * @brief MT9M114 soft reset.
777  *
778  * @param[in] context camera_operate_context.
779  *
780  * @retval status_success if success.
781  * @retval status_fail if fail.
782  */
783 hpm_stat_t mt9m114_software_reset(camera_context_t *context);
784 
785 /*!
786  * @brief MT9M114 set pixformat.
787  *
788  * @param[in] context camera_operate_context.
789  * @param[in] pixformat pixformat.
790  *
791  * @retval status_success if success.
792  * @retval status_fail if fail.
793  */
794 hpm_stat_t mt9m114_set_pixformat(camera_context_t *context, display_pixel_format_t pixformat);
795 
796 /*!
797  * @brief MT9M114 set framerate.
798  *
799  * @param[in] context camera_operate_context.
800  * @param[in] framerate framerate.
801  *
802  * @retval status_success if success.
803  * @retval status_fail if fail.
804  */
805 hpm_stat_t mt9m114_set_framerate(camera_context_t *context, int framerate);
806 
807 /*!
808  * @brief MT9M114 set brightness.
809  *
810  * @param[in] context camera_operate_context.
811  * @param[in] level brightness.
812  *
813  * @retval status_success if success.
814  * @retval status_fail if fail.
815  */
816 hpm_stat_t mt9m114_set_brightness(camera_context_t *context, int level);
817 
818 /*!
819  * @brief MT9M114 start to transfer image data.
820  *
821  * @param[in] context camera_operate_context.
822  *
823  * @retval status_success if success.
824  * @retval status_fail if fail.
825  */
826 hpm_stat_t mt9m114_start(camera_context_t *context);
827 
828 /*!
829  * @brief MT9M114 stop working and enter SUSPEND mode.
830  *
831  * @param[in] context camera_operate_context.
832  *
833  * @retval status_success if success.
834  * @retval status_fail if fail.
835  */
836 hpm_stat_t mt9m114_stop(camera_context_t *context);
837 
838 /*!
839  * @brief MT9M114 enable or disable MONO mode.
840  *
841  * @param[in] context camera_operate_context.
842  * @param[in] enable enable or disable mono.
843  *
844  * @retval status_success if success.
845  * @retval status_fail if fail.
846  */
847 hpm_stat_t mt9m114_enable_mono(camera_context_t *context, bool enable);
848 
849 /*!
850  * @brief MT9M114 initialization.
851  *
852  * @param[in] context camera_operate_context.
853  *
854  * @retval status_success if success.
855  * @retval status_fail if fail.
856  */
857 hpm_stat_t mt9m114_init(camera_context_t *context, camera_config_t *camera_config);
858 #ifdef __cplusplus
859 }
860 #endif
861 
862 /**
863  * @}
864  *
865  */
866 
867 #endif /* HPM_MT9M114_H */