upload tizen1.0 source
[kernel/linux-2.6.36.git] / drivers / media / video / m5mo.h
1 /*
2  * Driver for M5MO (5MP Camera) from NEC
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation; either version 2 of the License, or
7  * (at your option) any later version.
8  */
9
10 #ifndef __M5MO_H
11 #define __M5MO_H
12
13 enum m5mo_prev_frmsize {
14         M5MO_PREVIEW_QCIF,
15         M5MO_PREVIEW_QCIF2,
16         M5MO_PREVIEW_QVGA,
17         M5MO_PREVIEW_VGA,
18         M5MO_PREVIEW_D1,
19         M5MO_PREVIEW_WVGA,
20         M5MO_PREVIEW_720P,
21         M5MO_PREVIEW_1080P,
22         M5MO_PREVIEW_HDR,
23 };
24
25 enum m5mo_cap_frmsize {
26         M5MO_CAPTURE_VGA,       /* 640 x 480 */
27         M5MO_CAPTURE_WVGA,      /* 800 x 480 */
28         M5MO_CAPTURE_HD,        /* 1280 x 720 */
29         M5MO_CAPTURE_W1MP,      /* 1600 x 960 */
30         M5MO_CAPTURE_2MP,       /* UXGA - 1600 x 1200 */
31         M5MO_CAPTURE_FULLHD, /* 1920 x 1080 */
32         M5MO_CAPTURE_W2MP,      /* 2048 x 1232 */
33         M5MO_CAPTURE_3MP,       /* QXGA - 2048 x 1536 */
34         M5MO_CAPTURE_W4MP,      /* WQXGA - 2560 x 1536 */
35         M5MO_CAPTURE_5MP,       /* 2560 x 1920 */
36         M5MO_CAPTURE_6MP,       /* 3264 x 1960 */
37         M5MO_CAPTURE_W6MP,      /* 3072 x 1856 */
38         M5MO_CAPTURE_7MP,       /* 3072 x 2304 */
39         M5MO_CAPTURE_W7MP,      /* WQXGA - 2560 x 1536 */
40         M5MO_CAPTURE_8MP,       /* 3264 x 2448 */
41 };
42
43 struct m5mo_control {
44         u32 id;
45         s32 value;
46         s32 minimum;            /* Note signedness */
47         s32 maximum;
48         s32 step;
49         s32 default_value;
50 };
51
52 struct m5mo_frmsizeenum {
53         unsigned int index;
54         unsigned int width;
55         unsigned int height;
56         u8 reg_val;             /* a value for category parameter */
57         u8 wide_res;
58 };
59
60 struct m5mo_isp {
61         wait_queue_head_t wait;
62         unsigned int irq;       /* irq issued by ISP */
63         unsigned int issued;
64         unsigned int int_factor;
65         unsigned int bad_fw:1;
66 };
67
68 struct m5mo_jpeg {
69         int quality;
70         unsigned int main_size; /* Main JPEG file size */
71         unsigned int thumb_size;        /* Thumbnail file size */
72         unsigned int main_offset;
73         unsigned int thumb_offset;
74         unsigned int postview_offset;
75 };
76
77 struct m5mo_focus {
78         unsigned int mode;
79         unsigned int lock;
80         unsigned int status;
81         unsigned int touch;
82         unsigned int pos_x;
83         unsigned int pos_y;
84         unsigned int width;
85         unsigned int height;
86         bool focusing;
87         bool needed;
88 };
89
90 struct m5mo_exif {
91         char unique_id[7];
92         u32 exptime;            /* us */
93         u16 flash;
94         u16 iso;
95         int tv;                 /* shutter speed */
96         int bv;                 /* brightness */
97         int ebv;                /* exposure bias */
98 };
99
100 #ifdef CONFIG_VIDEO_M5MO_I2C_DEBUG
101 struct m5mo_debug {
102         u8 category;
103         u8 command;
104         u8 value;
105 };
106 #endif
107
108 struct m5mo_state {
109         struct m5mo_platform_data *pdata;
110         struct v4l2_subdev sd;
111
112         const struct m5mo_frmsizeenum *preview;
113         const struct m5mo_frmsizeenum *capture;
114         enum v4l2_pix_format_mode format_mode;
115
116         struct m5mo_isp isp;
117         char *fw_version;
118         u32 fps;
119         bool need_setfps;
120         u32 fps_reg;
121
122         /* Controls */
123         struct m5mo_focus focus;        /* lock, status, focusing, */
124         struct m5mo_jpeg jpeg;
125         struct m5mo_exif exif;
126         enum v4l2_flash_mode flash_mode;
127         enum v4l2_colorfx colorfx;
128         u32 wdr;
129         u32 hdr;
130         u32 iso;
131         u32 metering;
132         u32 exposure;
133         u32 saturation;
134         u32 sharpness;
135         u32 wb_preset;
136         u32 scenemode;
137         u32 zoom;
138         bool support_zoom;
139         u8 wide_res;
140
141 #ifdef CONFIG_VIDEO_M5MO_I2C_DEBUG
142         struct m5mo_debug dbg;
143 #endif
144 #if 0   /* unused Controls */
145         int beauty_mode;
146 #endif
147 };
148
149 #define is_interrupted(__factor)        (state->isp.int_factor & __factor)
150 #define is_issued(__state)              (state->isp.issued)
151 #define is_locked(__lock)               (state->focus.lock == __lock)
152 #define is_focus(__mode)                (state->focus.mode == __mode)
153 #define is_format(__mode)               (state->format_mode == __mode)
154 #define is_scenemode(__mode)            (state->scenemode == __mode)
155
156 /* Category */
157 #define M5MO_CATEGORY_SYS       0x00
158 #define M5MO_CATEGORY_PARM      0x01
159 #define M5MO_CATEGORY_MON       0x02
160 #define M5MO_CATEGORY_AE        0x03
161 #define M5MO_CATEGORY_WB        0x06
162 #define M5MO_CATEGORY_EXIF      0x07
163 #define M5MO_CATEGORY_FD        0x09
164 #define M5MO_CATEGORY_LENS      0x0A
165 #define M5MO_CATEGORY_CAPPARM   0x0B
166 #define M5MO_CATEGORY_CAPCTRL   0x0C
167 #define M5MO_CATEGORY_TEST      0x0D
168 #define M5MO_CATEGORY_ADJST     0x0E
169 #define M5MO_CATEGORY_FLASH     0x0F    /* F/W update */
170
171 /* M5MO_CATEGORY_SYS: 0x00 */
172 #define M5MO_SYS_PJT_CODE       0x01
173 #define M5MO_SYS_VER_FW         0x02
174 #define M5MO_SYS_VER_HW         0x04
175 #define M5MO_SYS_VER_PARAM      0x06
176 #define M5MO_SYS_VER_AWB        0x08
177 #define M5MO_SYS_USER_VER       0x0A
178 #define M5MO_SYS_MODE           0x0B
179 #define M5MO_SYS_STATUS         0x0C
180 #define M5MO_SYS_ESD_INT        0x0E
181 #define M5MO_SYS_INT_FACTOR     0x10
182 #define M5MO_SYS_INT_EN         0x11
183 #define M5MO_SYS_ROOT_EN        0x12
184
185 /* M5MO_CATEGORY_PARAM: 0x01 */
186 #define M5MO_PARM_OUT_SEL       0x00
187 #define M5MO_PARM_MON_SIZE      0x01
188 #define M5MO_PARM_EFFECT        0x0B
189 #define M5MO_PARM_FLEX_FPS      0x31
190 #define M5MO_PARM_HDMOVIE       0x32
191 #define M5MO_PARM_HDR_MON       0x39
192 #define M5MO_PARM_HDR_MON_OFFSET_EV     0x3A
193
194 /* M5MO_CATEGORY_MON: 0x02 */
195 #define M5MO_MON_ZOOM           0x01
196 #define M5MO_MON_MON_REVERSE    0x05
197 #define M5MO_MON_MON_MIRROR     0x06
198 #define M5MO_MON_SHOT_REVERSE   0x07
199 #define M5MO_MON_SHOT_MIRROR    0x08
200 #define M5MO_MON_CFIXB          0x09
201 #define M5MO_MON_CFIXR          0x0A
202 #define M5MO_MON_COLOR_EFFECT   0x0B
203 #define M5MO_MON_CHROMA_LVL     0x0F
204 #define M5MO_MON_EDGE_LVL       0x11
205 #define M5MO_MON_TONE_CTRL      0x25
206
207 /* M5MO_CATEGORY_AE: 0x03 */
208 #define M5MO_AE_LOCK            0x00
209 #define M5MO_AE_MODE            0x01
210 #define M5MO_AE_TARGET          0x02
211 #define M5MO_AE_SPEED           0x03
212 #define M5MO_AE_ISOSEL          0x05
213 #define M5MO_AE_FLICKER         0x06
214 #define M5MO_AE_EV_BIAS         0x09
215 #define M5MO_AE_EP_MODE_MON     0x0A
216 #define M5MO_AE_EP_MODE_CAP     0x0B
217 #define M5MO_AE_NOW_GAIN        0x0E
218 #define M5MO_AE_NOW_EV          0x0F
219 #define M5MO_AE_NOW_EXPOSURE    0x10
220 #define M5MO_AE_MAX_EXP_MON     0x16
221 #define M5MO_AE_MAX_EXP_CAP     0x18
222 #define M5MO_AE_ONESHOT_MAX_EXP 0x36
223 #define M5MO_AE_INDEX           0x38
224
225 /* M5MO_CATEGORY_WB: 0x06 */
226 #define M5MO_AWB_LOCK           0x00
227 #define M5MO_WB_AWB_MODE        0x02
228 #define M5MO_WB_AWB_MANUAL      0x03
229
230 /* M5MO_CATEGORY_EXIF: 0x07 */
231 #define M5MO_EXIF_EXPTIME_NUM   0x00
232 #define M5MO_EXIF_EXPTIME_DEN   0x04
233 #define M5MO_EXIF_TV_NUM        0x08
234 #define M5MO_EXIF_TV_DEN        0x0C
235 #define M5MO_EXIF_BV_NUM        0x18
236 #define M5MO_EXIF_BV_DEN        0x1C
237 #define M5MO_EXIF_EBV_NUM       0x20
238 #define M5MO_EXIF_EBV_DEN       0x24
239 #define M5MO_EXIF_ISO           0x28
240 #define M5MO_EXIF_FLASH         0x2A
241
242 /* M5MO_CATEGORY_FD: 0x09 */
243 #define M5MO_FD_CTL             0x00
244 #define M5MO_FD_SIZE            0x01
245 #define M5MO_FD_MAX             0x02
246
247 /* M5MO_CATEGORY_LENS: 0x0A */
248 #define M5MO_LENS_AF_MODE       0x01
249 #define M5MO_LENS_AF_START      0x02
250 #define M5MO_LENS_AF_STATUS     0x03
251 #define M5MO_LENS_AF_UPBYTE_STEP        0x06
252 #define M5MO_LENS_AF_LOWBYTE_STEP       0x07
253 #define M5MO_LENS_AF_CAL        0x1D
254 #define M5MO_LENS_AF_TOUCH_POSX 0x30
255 #define M5MO_LENS_AF_TOUCH_POSY 0x32
256
257 /* M5MO_CATEGORY_CAPPARM: 0x0B */
258 #define M5MO_CAPPARM_YUVOUT_MAIN        0x00
259 #define M5MO_CAPPARM_MAIN_IMG_SIZE      0x01
260 #define M5MO_CAPPARM_YUVOUT_PREVIEW     0x05
261 #define M5MO_CAPPARM_PREVIEW_IMG_SIZE   0x06
262 #define M5MO_CAPPARM_YUVOUT_THUMB       0x0A
263 #define M5MO_CAPPARM_THUMB_IMG_SIZE     0x0B
264 #define M5MO_CAPPARM_JPEG_SIZE_MAX      0x0F
265 #define M5MO_CAPPARM_JPEG_RATIO         0x17
266 #define M5MO_CAPPARM_MCC_MODE           0x1D
267 #define M5MO_CAPPARM_WDR_EN             0x2C
268 #define M5MO_CAPPARM_LIGHT_CTRL         0x40
269 #define M5MO_CAPPARM_FLASH_CTRL         0x41
270 #define M5MO_CAPPARM_JPEG_RATIO_OFS     0x34
271 #define M5MO_CAPPARM_THUMB_JPEG_MAX     0x3C
272 #define M5MO_CAPPARM_AFB_CAP_EN         0x53
273
274 /* M5MO_CATEGORY_CAPCTRL: 0x0C */
275 #define M5MO_CAPCTRL_FRM_SEL    0x06
276 #define M5MO_CAPCTRL_TRANSFER   0x09
277 #define M5MO_CAPCTRL_IMG_SIZE   0x0D
278 #define M5MO_CAPCTRL_THUMB_SIZE 0x11
279
280 /* M5MO_CATEGORY_ADJST: 0x0E */
281 #define M5MO_ADJST_AWB_RG_H     0x3B
282 #define M5MO_ADJST_AWB_RG_L     0x3D
283 #define M5MO_ADJST_AWB_BG_H     0x3E
284 #define M5MO_ADJST_AWB_BG_L     0x3F
285
286 /* M5MO_CATEGORY_FLASH: 0x0F */
287 #define M5MO_FLASH_ADDR         0x00
288 #define M5MO_FLASH_BYTE         0x04
289 #define M5MO_FLASH_ERASE        0x06
290 #define M5MO_FLASH_WR           0x07
291 #define M5MO_FLASH_RAM_CLEAR    0x08
292 #define M5MO_FLASH_CAM_START    0x12
293 #define M5MO_FLASH_SEL          0x13
294
295 /* M5MO_CATEGORY_TEST:  0x0D */
296 #define M5MO_TEST_OUTPUT_YCO_TEST_DATA          0x1B
297 #define M5MO_TEST_ISP_PROCESS                   0x59
298
299 /* M5MO Sensor Mode */
300 #define M5MO_SYSINIT_MODE       0x0
301 #define M5MO_PARMSET_MODE       0x1
302 #define M5MO_MONITOR_MODE       0x2
303 #define M5MO_STILLCAP_MODE      0x3
304
305 /* Interrupt Factor */
306 #define M5MO_INT_SOUND          (1 << 7)
307 #define M5MO_INT_LENS_INIT      (1 << 6)
308 #define M5MO_INT_FD             (1 << 5)
309 #define M5MO_INT_FRAME_SYNC     (1 << 4)
310 #define M5MO_INT_CAPTURE        (1 << 3)
311 #define M5MO_INT_ZOOM           (1 << 2)
312 #define M5MO_INT_AF             (1 << 1)
313 #define M5MO_INT_MODE           (1 << 0)
314 #define M5MO_INT_NONE   0x00
315
316 /* ESD Interrupt */
317 #define M5MO_INT_ESD            (1 << 0)
318
319 #define M5MO_AF_STATUS_FAILED   0
320 #define M5MO_AF_STATUS_MOVING   1
321 #define M5MO_AF_STATUS_SUCCESS  2
322 #define M5MO_AF_STATUS_IDLE             4
323 #define M5MO_AF_STATUS_BUSY             5
324
325 #define M5MO_AF_STOP            0
326 #define M5MO_AF_START           1
327 #define M5MO_AF_RELEASE         2
328
329
330 #endif /* __M5MO_H */