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
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
|
/*
* Register map for M-5MOLS 8M Pixel camera sensor with ISP
*
* Copyright (C) 2011 Samsung Electronics Co., Ltd.
* Author: HeungJun Kim <riverful.kim@samsung.com>
*
* Copyright (C) 2009 Samsung Electronics Co., Ltd.
* Author: Dongsoo Nathaniel Kim <dongsoo45.kim@samsung.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*/
#ifndef M5MOLS_REG_H
#define M5MOLS_REG_H
#define M5MOLS_I2C_MAX_SIZE 4
#define M5MOLS_BYTE_READ 0x01
#define M5MOLS_BYTE_WRITE 0x02
#define I2C_CATEGORY(__cat) ((__cat >> 16) & 0xff)
#define I2C_COMMAND(__comm) ((__comm >> 8) & 0xff)
#define I2C_SIZE(__reg_s) ((__reg_s) & 0xff)
#define I2C_REG(__cat, __cmd, __reg_s) ((__cat << 16) | (__cmd << 8) | __reg_s)
/*
* Category section register
*
* The category means set including relevant command of M-5MOLS.
*/
#define CAT_SYSTEM 0x00
#define CAT_PARAM 0x01
#define CAT_MONITOR 0x02
#define CAT_AE 0x03
#define CAT_WB 0x06
#define CAT_EXIF 0x07
#define CAT_FD 0x09
#define CAT_LENS 0x0a
#define CAT_CAPT_PARM 0x0b
#define CAT_CAPT_CTRL 0x0c
#define CAT_FLASH 0x0f /* related to FW, revisions, booting */
/*
* Category 0 - SYSTEM mode
*
* The SYSTEM mode in the M-5MOLS means area available to handle with the whole
* & all-round system of sensor. It deals with version/interrupt/setting mode &
* even sensor's status. Especially, the M-5MOLS sensor with ISP varies by
* packaging & manufacturer, even the customer and project code. And the
* function details may vary among them. The version information helps to
* determine what methods shall be used in the driver.
*
* There is many registers between customer version address and awb one. For
* more specific contents, see definition if file m5mols.h.
*/
#define CAT0_VER_CUSTOMER 0x00 /* customer version */
#define CAT0_VER_PROJECT 0x01 /* project version */
#define CAT0_VER_FIRMWARE 0x02 /* Firmware version */
#define CAT0_VER_HARDWARE 0x04 /* Hardware version */
#define CAT0_VER_PARAMETER 0x06 /* Parameter version */
#define CAT0_VER_AWB 0x08 /* Auto WB version */
#define CAT0_VER_STRING 0x0a /* string including M-5MOLS */
#define CAT0_SYSMODE 0x0b /* SYSTEM mode register */
#define CAT0_STATUS 0x0c /* SYSTEM mode status register */
#define CAT0_INT_FACTOR 0x10 /* interrupt pending register */
#define CAT0_INT_ENABLE 0x11 /* interrupt enable register */
#define SYSTEM_VER_CUSTOMER I2C_REG(CAT_SYSTEM, CAT0_VER_CUSTOMER, 1)
#define SYSTEM_VER_PROJECT I2C_REG(CAT_SYSTEM, CAT0_VER_PROJECT, 1)
#define SYSTEM_VER_FIRMWARE I2C_REG(CAT_SYSTEM, CAT0_VER_FIRMWARE, 2)
#define SYSTEM_VER_HARDWARE I2C_REG(CAT_SYSTEM, CAT0_VER_HARDWARE, 2)
#define SYSTEM_VER_PARAMETER I2C_REG(CAT_SYSTEM, CAT0_VER_PARAMETER, 2)
#define SYSTEM_VER_AWB I2C_REG(CAT_SYSTEM, CAT0_VER_AWB, 2)
#define SYSTEM_SYSMODE I2C_REG(CAT_SYSTEM, CAT0_SYSMODE, 1)
#define REG_SYSINIT 0x00 /* SYSTEM mode */
#define REG_PARAMETER 0x01 /* PARAMETER mode */
#define REG_MONITOR 0x02 /* MONITOR mode */
#define REG_CAPTURE 0x03 /* CAPTURE mode */
#define SYSTEM_CMD(__cmd) I2C_REG(CAT_SYSTEM, cmd, 1)
#define SYSTEM_VER_STRING I2C_REG(CAT_SYSTEM, CAT0_VER_STRING, 1)
#define REG_SAMSUNG_ELECTRO "SE" /* Samsung Electro-Mechanics */
#define REG_SAMSUNG_OPTICS "OP" /* Samsung Fiber-Optics */
#define REG_SAMSUNG_TECHWIN "TB" /* Samsung Techwin */
#define SYSTEM_INT_FACTOR I2C_REG(CAT_SYSTEM, CAT0_INT_FACTOR, 1)
#define SYSTEM_INT_ENABLE I2C_REG(CAT_SYSTEM, CAT0_INT_ENABLE, 1)
#define REG_INT_MODE (1 << 0)
#define REG_INT_AF (1 << 1)
#define REG_INT_ZOOM (1 << 2)
#define REG_INT_CAPTURE (1 << 3)
#define REG_INT_FRAMESYNC (1 << 4)
#define REG_INT_FD (1 << 5)
#define REG_INT_LENS_INIT (1 << 6)
#define REG_INT_SOUND (1 << 7)
#define REG_INT_MASK 0x0f
/*
* category 1 - PARAMETER mode
*
* This category supports function of camera features of M-5MOLS. It means we
* can handle with preview(MONITOR) resolution size/frame per second/interface
* between the sensor and the Application Processor/even the image effect.
*/
#define CAT1_DATA_INTERFACE 0x00 /* interface between sensor and AP */
#define CAT1_MONITOR_SIZE 0x01 /* resolution at the MONITOR mode */
#define CAT1_MONITOR_FPS 0x02 /* frame per second at this mode */
#define CAT1_EFFECT 0x0b /* image effects */
#define PARM_MON_SIZE I2C_REG(CAT_PARAM, CAT1_MONITOR_SIZE, 1)
#define PARM_MON_FPS I2C_REG(CAT_PARAM, CAT1_MONITOR_FPS, 1)
#define REG_FPS_30 0x02
#define PARM_INTERFACE I2C_REG(CAT_PARAM, CAT1_DATA_INTERFACE, 1)
#define REG_INTERFACE_MIPI 0x02
#define PARM_EFFECT I2C_REG(CAT_PARAM, CAT1_EFFECT, 1)
#define REG_EFFECT_OFF 0x00
#define REG_EFFECT_NEGA 0x01
#define REG_EFFECT_EMBOSS 0x06
#define REG_EFFECT_OUTLINE 0x07
#define REG_EFFECT_WATERCOLOR 0x08
/*
* Category 2 - MONITOR mode
*
* The MONITOR mode is same as preview mode as we said. The M-5MOLS has another
* mode named "Preview", but this preview mode is used at the case specific
* vider-recording mode. This mmode supports only YUYV format. On the other
* hand, the JPEG & RAW formats is supports by CAPTURE mode. And, there are
* another options like zoom/color effect(different with effect in PARAMETER
* mode)/anti hand shaking algorithm.
*/
#define CAT2_ZOOM 0x01 /* set the zoom position & execute */
#define CAT2_ZOOM_STEP 0x03 /* set the zoom step */
#define CAT2_CFIXB 0x09 /* CB value for color effect */
#define CAT2_CFIXR 0x0a /* CR value for color effect */
#define CAT2_COLOR_EFFECT 0x0b /* set on/off of color effect */
#define CAT2_CHROMA_LVL 0x0f /* set chroma level */
#define CAT2_CHROMA_EN 0x10 /* set on/off of choroma */
#define CAT2_EDGE_LVL 0x11 /* set sharpness level */
#define CAT2_EDGE_EN 0x12 /* set on/off sharpness */
#define CAT2_TONE_CTL 0x25 /* set tone color(contrast) */
#define MON_ZOOM I2C_REG(CAT_MONITOR, CAT2_ZOOM, 1)
#define MON_CFIXR I2C_REG(CAT_MONITOR, CAT2_CFIXR, 1)
#define MON_CFIXB I2C_REG(CAT_MONITOR, CAT2_CFIXB, 1)
#define REG_CFIXB_SEPIA 0xd8
#define REG_CFIXR_SEPIA 0x18
#define MON_EFFECT I2C_REG(CAT_MONITOR, CAT2_COLOR_EFFECT, 1)
#define REG_COLOR_EFFECT_OFF 0x00
#define REG_COLOR_EFFECT_ON 0x01
#define MON_CHROMA_EN I2C_REG(CAT_MONITOR, CAT2_CHROMA_EN, 1)
#define MON_CHROMA_LVL I2C_REG(CAT_MONITOR, CAT2_CHROMA_LVL, 1)
#define REG_CHROMA_OFF 0x00
#define REG_CHROMA_ON 0x01
#define MON_EDGE_EN I2C_REG(CAT_MONITOR, CAT2_EDGE_EN, 1)
#define MON_EDGE_LVL I2C_REG(CAT_MONITOR, CAT2_EDGE_LVL, 1)
#define REG_EDGE_OFF 0x00
#define REG_EDGE_ON 0x01
#define MON_TONE_CTL I2C_REG(CAT_MONITOR, CAT2_TONE_CTL, 1)
/*
* Category 3 - Auto Exposure
*
* The M-5MOLS exposure capbility is detailed as which is similar to digital
* camera. This category supports AE locking/various AE mode(range of exposure)
* /ISO/flickering/EV bias/shutter/meteoring, and anything else. And the
* maximum/minimum exposure gain value depending on M-5MOLS firmware, may be
* different. So, this category also provide getting the max/min values. And,
* each MONITOR and CAPTURE mode has each gain/shutter/max exposure values.
*/
#define CAT3_AE_LOCK 0x00 /* locking Auto exposure */
#define CAT3_AE_MODE 0x01 /* set AE mode, mode means range */
#define CAT3_ISO 0x05 /* set ISO */
#define CAT3_EV_PRESET_MONITOR 0x0a /* EV(scenemode) preset for MONITOR */
#define CAT3_EV_PRESET_CAPTURE 0x0b /* EV(scenemode) preset for CAPTURE */
#define CAT3_MANUAL_GAIN_MON 0x12 /* meteoring value for the MONITOR */
#define CAT3_MAX_GAIN_MON 0x1a /* max gain value for the MONITOR */
#define CAT3_MANUAL_GAIN_CAP 0x26 /* meteoring value for the CAPTURE */
#define CAT3_AE_INDEX 0x38 /* AE index */
#define AE_LOCK I2C_REG(CAT_AE, CAT3_AE_LOCK, 1)
#define REG_AE_UNLOCK 0x00
#define REG_AE_LOCK 0x01
#define AE_MODE I2C_REG(CAT_AE, CAT3_AE_MODE, 1)
#define REG_AE_OFF 0x00 /* AE off */
#define REG_AE_ALL 0x01 /* calc AE in all block integral */
#define REG_AE_CENTER 0x03 /* calc AE in center weighted */
#define REG_AE_SPOT 0x06 /* calc AE in specific spot */
#define AE_ISO I2C_REG(CAT_AE, CAT3_ISO, 1)
#define REG_ISO_AUTO 0x00
#define REG_ISO_50 0x01
#define REG_ISO_100 0x02
#define REG_ISO_200 0x03
#define REG_ISO_400 0x04
#define REG_ISO_800 0x05
#define AE_EV_PRESET_MONITOR I2C_REG(CAT_AE, CAT3_EV_PRESET_MONITOR, 1)
#define AE_EV_PRESET_CAPTURE I2C_REG(CAT_AE, CAT3_EV_PRESET_CAPTURE, 1)
#define REG_SCENE_NORMAL 0x00
#define REG_SCENE_PORTRAIT 0x01
#define REG_SCENE_LANDSCAPE 0x02
#define REG_SCENE_SPORTS 0x03
#define REG_SCENE_PARTY_INDOOR 0x04
#define REG_SCENE_BEACH_SNOW 0x05
#define REG_SCENE_SUNSET 0x06
#define REG_SCENE_DAWN_DUSK 0x07
#define REG_SCENE_FALL 0x08
#define REG_SCENE_NIGHT 0x09
#define REG_SCENE_AGAINST_LIGHT 0x0a
#define REG_SCENE_FIRE 0x0b
#define REG_SCENE_TEXT 0x0c
#define REG_SCENE_CANDLE 0x0d
#define AE_MAN_GAIN_MON I2C_REG(CAT_AE, CAT3_MANUAL_GAIN_MON, 2)
#define AE_MAX_GAIN_MON I2C_REG(CAT_AE, CAT3_MAX_GAIN_MON, 2)
#define AE_MAN_GAIN_CAP I2C_REG(CAT_AE, CAT3_MANUAL_GAIN_CAP, 2)
#define AE_INDEX I2C_REG(CAT_AE, CAT3_AE_INDEX, 1)
#define REG_AE_INDEX_20_NEG 0x00
#define REG_AE_INDEX_15_NEG 0x01
#define REG_AE_INDEX_10_NEG 0x02
#define REG_AE_INDEX_05_NEG 0x03
#define REG_AE_INDEX_00 0x04
#define REG_AE_INDEX_05_POS 0x05
#define REG_AE_INDEX_10_POS 0x06
#define REG_AE_INDEX_15_POS 0x07
#define REG_AE_INDEX_20_POS 0x08
/*
* Category 6 - White Balance
*
* This category provide AWB locking/mode/preset/speed/gain bias, etc.
*/
#define CAT6_AWB_LOCK 0x00 /* locking Auto Whitebalance */
#define CAT6_AWB_MODE 0x02 /* set Auto or Manual */
#define CAT6_AWB_MANUAL 0x03 /* set Manual(preset) value */
#define AWB_LOCK I2C_REG(CAT_WB, CAT6_AWB_LOCK, 1)
#define REG_AWB_UNLOCK 0x00
#define REG_AWB_LOCK 0x01
#define AWB_MODE I2C_REG(CAT_WB, CAT6_AWB_MODE, 1)
#define REG_AWB_AUTO 0x01 /* AWB off */
#define REG_AWB_PRESET 0x02 /* AWB preset */
#define AWB_MANUAL I2C_REG(CAT_WB, CAT6_AWB_MANUAL, 1)
#define REG_AWB_INCANDESCENT 0x01
#define REG_AWB_FLUORESCENT_1 0x02
#define REG_AWB_FLUORESCENT_2 0x03
#define REG_AWB_DAYLIGHT 0x04
#define REG_AWB_CLOUDY 0x05
#define REG_AWB_SHADE 0x06
#define REG_AWB_HORIZON 0x07
#define REG_AWB_LEDLIGHT 0x09
/*
* Category 7 - EXIF information
*/
#define CAT7_INFO_EXPTIME_NU 0x00
#define CAT7_INFO_EXPTIME_DE 0x04
#define CAT7_INFO_TV_NU 0x08
#define CAT7_INFO_TV_DE 0x0c
#define CAT7_INFO_AV_NU 0x10
#define CAT7_INFO_AV_DE 0x14
#define CAT7_INFO_BV_NU 0x18
#define CAT7_INFO_BV_DE 0x1c
#define CAT7_INFO_EBV_NU 0x20
#define CAT7_INFO_EBV_DE 0x24
#define CAT7_INFO_ISO 0x28
#define CAT7_INFO_FLASH 0x2a
#define CAT7_INFO_SDR 0x2c
#define CAT7_INFO_QVAL 0x2e
#define EXIF_INFO_EXPTIME_NU I2C_REG(CAT_EXIF, CAT7_INFO_EXPTIME_NU, 4)
#define EXIF_INFO_EXPTIME_DE I2C_REG(CAT_EXIF, CAT7_INFO_EXPTIME_DE, 4)
#define EXIF_INFO_TV_NU I2C_REG(CAT_EXIF, CAT7_INFO_TV_NU, 4)
#define EXIF_INFO_TV_DE I2C_REG(CAT_EXIF, CAT7_INFO_TV_DE, 4)
#define EXIF_INFO_AV_NU I2C_REG(CAT_EXIF, CAT7_INFO_AV_NU, 4)
#define EXIF_INFO_AV_DE I2C_REG(CAT_EXIF, CAT7_INFO_AV_DE, 4)
#define EXIF_INFO_BV_NU I2C_REG(CAT_EXIF, CAT7_INFO_BV_NU, 4)
#define EXIF_INFO_BV_DE I2C_REG(CAT_EXIF, CAT7_INFO_BV_DE, 4)
#define EXIF_INFO_EBV_NU I2C_REG(CAT_EXIF, CAT7_INFO_EBV_NU, 4)
#define EXIF_INFO_EBV_DE I2C_REG(CAT_EXIF, CAT7_INFO_EBV_DE, 4)
#define EXIF_INFO_ISO I2C_REG(CAT_EXIF, CAT7_INFO_ISO, 2)
#define EXIF_INFO_FLASH I2C_REG(CAT_EXIF, CAT7_INFO_FLASH, 2)
#define EXIF_INFO_SDR I2C_REG(CAT_EXIF, CAT7_INFO_SDR, 2)
#define EXIF_INFO_QVAL I2C_REG(CAT_EXIF, CAT7_INFO_QVAL, 2)
/*
* Category 9 - Face Detection
*/
#define CAT9_FD_CTL 0x00
#define FD_CTL I2C_REG(CAT_FD, CAT9_FD_CTL, 1)
#define BIT_FD_EN 0
#define BIT_FD_DRAW_FACE_FRAME 4
#define BIT_FD_DRAW_SMILE_LVL 6
#define REG_FD(shift) (1 << shift)
#define REG_FD_OFF 0x0
/*
* Category A - Lens Parameter
*/
#define CATA_AF_MODE 0x01
#define CATA_AF_EXECUTE 0x02
#define CATA_AF_STATUS 0x03
#define CATA_AF_VERSION 0x0a
#define AF_MODE I2C_REG(CAT_LENS, CATA_AF_MODE, 1)
#define REG_AF_NORMAL 0x00 /* Normal AF, one time */
#define REG_AF_MACRO 0x01 /* Macro AF, one time */
#define REG_AF_POWEROFF 0x07
#define AF_EXECUTE I2C_REG(CAT_LENS, CATA_AF_EXECUTE, 1)
#define REG_AF_STOP 0x00
#define REG_AF_EXE_AUTO 0x01
#define REG_AF_EXE_CAF 0x02
#define AF_STATUS I2C_REG(CAT_LENS, CATA_AF_STATUS, 1)
#define REG_AF_FAIL 0x00
#define REG_AF_SUCCESS 0x02
#define REG_AF_IDLE 0x04
#define REG_AF_BUSY 0x05
#define AF_VERSION I2C_REG(CAT_LENS, CATA_AF_VERSION, 1)
/*
* Category B - CAPTURE Parameter
*/
#define CATB_YUVOUT_MAIN 0x00
#define CATB_MAIN_IMAGE_SIZE 0x01
#define CATB_MCC_MODE 0x1d
#define CATB_WDR_EN 0x2c
#define CATB_LIGHT_CTRL 0x40
#define CATB_FLASH_CTRL 0x41
#define CAPP_YUVOUT_MAIN I2C_REG(CAT_CAPT_PARM, CATB_YUVOUT_MAIN, 1)
#define REG_YUV422 0x00
#define REG_BAYER10 0x05
#define REG_BAYER8 0x06
#define REG_JPEG 0x10
#define CAPP_MAIN_IMAGE_SIZE I2C_REG(CAT_CAPT_PARM, CATB_MAIN_IMAGE_SIZE, 1)
#define CAPP_MCC_MODE I2C_REG(CAT_CAPT_PARM, CATB_MCC_MODE, 1)
#define REG_MCC_OFF 0x00
#define REG_MCC_NORMAL 0x01
#define CAPP_WDR_EN I2C_REG(CAT_CAPT_PARM, CATB_WDR_EN, 1)
#define REG_WDR_OFF 0x00
#define REG_WDR_ON 0x01
#define REG_WDR_AUTO 0x02
#define CAPP_LIGHT_CTRL I2C_REG(CAT_CAPT_PARM, CATB_LIGHT_CTRL, 1)
#define REG_LIGHT_OFF 0x00
#define REG_LIGHT_ON 0x01
#define REG_LIGHT_AUTO 0x02
#define CAPP_FLASH_CTRL I2C_REG(CAT_CAPT_PARM, CATB_FLASH_CTRL, 1)
#define REG_FLASH_OFF 0x00
#define REG_FLASH_ON 0x01
#define REG_FLASH_AUTO 0x02
/*
* Category C - CAPTURE Control
*/
#define CATC_CAP_MODE 0x00
#define CATC_CAP_SEL_FRAME 0x06 /* It determines Single or Multi */
#define CATC_CAP_START 0x09
#define CATC_CAP_IMAGE_SIZE 0x0d
#define CATC_CAP_THUMB_SIZE 0x11
#define CAPC_MODE I2C_REG(CAT_CAPT_CTRL, CATC_CAP_MODE, 1)
#define REG_CAP_NONE 0x00
#define REG_CAP_ANTI_SHAKE 0x02
#define CAPC_SEL_FRAME I2C_REG(CAT_CAPT_CTRL, CATC_CAP_SEL_FRAME, 1)
#define CAPC_START I2C_REG(CAT_CAPT_CTRL, CATC_CAP_START, 1)
#define REG_CAP_START_MAIN 0x01
#define REG_CAP_START_THUMB 0x03
#define CAPC_IMAGE_SIZE I2C_REG(CAT_CAPT_CTRL, CATC_CAP_IMAGE_SIZE, 4)
#define CAPC_THUMB_SIZE I2C_REG(CAT_CAPT_CTRL, CATC_CAP_THUMB_SIZE, 4)
/*
* Category F - Flash
*
* This mode provides functions about internal flash stuff and system startup.
*/
#define CATF_CAM_START 0x12 /* It starts internal ARM core booting
* after power-up */
#define FLASH_CAM_START I2C_REG(CAT_FLASH, CATF_CAM_START, 1)
#define REG_START_ARM_BOOT 0x01
#endif /* M5MOLS_REG_H */
|