• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* Copyright (c) 2009, Code Aurora Forum. All rights reserved.
2  *
3  * This program is free software; you can redistribute it and/or modify
4  * it under the terms of the GNU General Public License version 2 and
5  * only version 2 as published by the Free Software Foundation.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software
14  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
15  * 02110-1301, USA.
16  *
17  */
18 
19 #ifndef __LINUX_MSM_CAMERA_H
20 #define __LINUX_MSM_CAMERA_H
21 
22 #include <linux/types.h>
23 #include <asm/sizes.h>
24 #include <linux/ioctl.h>
25 
26 #define MSM_CAM_IOCTL_MAGIC 'm'
27 
28 #define MSM_CAM_IOCTL_GET_SENSOR_INFO \
29 	_IOR(MSM_CAM_IOCTL_MAGIC, 1, struct msm_camsensor_info *)
30 
31 #define MSM_CAM_IOCTL_REGISTER_PMEM \
32 	_IOW(MSM_CAM_IOCTL_MAGIC, 2, struct msm_pmem_info *)
33 
34 #define MSM_CAM_IOCTL_UNREGISTER_PMEM \
35 	_IOW(MSM_CAM_IOCTL_MAGIC, 3, unsigned)
36 
37 #define MSM_CAM_IOCTL_CTRL_COMMAND \
38 	_IOW(MSM_CAM_IOCTL_MAGIC, 4, struct msm_ctrl_cmd *)
39 
40 #define MSM_CAM_IOCTL_CONFIG_VFE  \
41 	_IOW(MSM_CAM_IOCTL_MAGIC, 5, struct msm_camera_vfe_cfg_cmd *)
42 
43 #define MSM_CAM_IOCTL_GET_STATS \
44 	_IOR(MSM_CAM_IOCTL_MAGIC, 6, struct msm_camera_stats_event_ctrl *)
45 
46 #define MSM_CAM_IOCTL_GETFRAME \
47 	_IOR(MSM_CAM_IOCTL_MAGIC, 7, struct msm_camera_get_frame *)
48 
49 #define MSM_CAM_IOCTL_ENABLE_VFE \
50 	_IOW(MSM_CAM_IOCTL_MAGIC, 8, struct camera_enable_cmd *)
51 
52 #define MSM_CAM_IOCTL_CTRL_CMD_DONE \
53 	_IOW(MSM_CAM_IOCTL_MAGIC, 9, struct camera_cmd *)
54 
55 #define MSM_CAM_IOCTL_CONFIG_CMD \
56 	_IOW(MSM_CAM_IOCTL_MAGIC, 10, struct camera_cmd *)
57 
58 #define MSM_CAM_IOCTL_DISABLE_VFE \
59 	_IOW(MSM_CAM_IOCTL_MAGIC, 11, struct camera_enable_cmd *)
60 
61 #define MSM_CAM_IOCTL_PAD_REG_RESET2 \
62 	_IOW(MSM_CAM_IOCTL_MAGIC, 12, struct camera_enable_cmd *)
63 
64 #define MSM_CAM_IOCTL_VFE_APPS_RESET \
65 	_IOW(MSM_CAM_IOCTL_MAGIC, 13, struct camera_enable_cmd *)
66 
67 #define MSM_CAM_IOCTL_RELEASE_FRAME_BUFFER \
68 	_IOW(MSM_CAM_IOCTL_MAGIC, 14, struct camera_enable_cmd *)
69 
70 #define MSM_CAM_IOCTL_RELEASE_STATS_BUFFER \
71 	_IOW(MSM_CAM_IOCTL_MAGIC, 15, struct msm_stats_buf *)
72 
73 #define MSM_CAM_IOCTL_AXI_CONFIG \
74 	_IOW(MSM_CAM_IOCTL_MAGIC, 16, struct msm_camera_vfe_cfg_cmd *)
75 
76 #define MSM_CAM_IOCTL_GET_PICTURE \
77 	_IOW(MSM_CAM_IOCTL_MAGIC, 17, struct msm_camera_ctrl_cmd *)
78 
79 #define MSM_CAM_IOCTL_SET_CROP \
80 	_IOW(MSM_CAM_IOCTL_MAGIC, 18, struct crop_info *)
81 
82 #define MSM_CAM_IOCTL_PP \
83 	_IOW(MSM_CAM_IOCTL_MAGIC, 19, uint8_t *)
84 
85 #define MSM_CAM_IOCTL_PP_DONE \
86 	_IOW(MSM_CAM_IOCTL_MAGIC, 20, struct msm_snapshot_pp_status *)
87 
88 #define MSM_CAM_IOCTL_SENSOR_IO_CFG \
89 	_IOW(MSM_CAM_IOCTL_MAGIC, 21, struct sensor_cfg_data *)
90 
91 #define MSM_CAMERA_LED_OFF  0
92 #define MSM_CAMERA_LED_LOW  1
93 #define MSM_CAMERA_LED_HIGH 2
94 
95 #define MSM_CAM_IOCTL_FLASH_LED_CFG \
96 	_IOW(MSM_CAM_IOCTL_MAGIC, 22, unsigned *)
97 
98 #define MSM_CAM_IOCTL_UNBLOCK_POLL_FRAME \
99 	_IO(MSM_CAM_IOCTL_MAGIC, 23)
100 
101 #define MSM_CAM_IOCTL_CTRL_COMMAND_2 \
102 	_IOW(MSM_CAM_IOCTL_MAGIC, 24, struct msm_ctrl_cmd *)
103 
104 #define MSM_CAM_IOCTL_ENABLE_OUTPUT_IND \
105 	_IOW(MSM_CAM_IOCTL_MAGIC, 25, uint32_t *)
106 
107 #define MSM_CAM_IOCTL_AF_CTRL \
108 	_IOR(MSM_CAM_IOCTL_MAGIC, 26, struct msm_ctrl_cmt_t *)
109 #define MSM_CAM_IOCTL_AF_CTRL_DONE \
110 	_IOW(MSM_CAM_IOCTL_MAGIC, 27, struct msm_ctrl_cmt_t *)
111 
112 #define MAX_SENSOR_NUM  3
113 #define MAX_SENSOR_NAME 32
114 
115 #define PP_SNAP		1
116 #define PP_RAW_SNAP	(1<<1)
117 #define PP_PREV		(1<<2)
118 #define PP_MASK		(PP_SNAP|PP_RAW_SNAP|PP_PREV)
119 
120 #define MSM_CAM_CTRL_CMD_DONE  0
121 #define MSM_CAM_SENSOR_VFE_CMD 1
122 
123 /*****************************************************
124  *  structure
125  *****************************************************/
126 
127 /* define five type of structures for userspace <==> kernel
128  * space communication:
129  * command 1 - 2 are from userspace ==> kernel
130  * command 3 - 4 are from kernel ==> userspace
131  *
132  * 1. control command: control command(from control thread),
133  *                     control status (from config thread);
134  */
135 struct msm_ctrl_cmd {
136 	uint16_t type;
137 	uint16_t length;
138 	void *value;
139 	uint16_t status;
140 	uint32_t timeout_ms;
141 	int resp_fd; /* FIXME: to be used by the kernel, pass-through for now */
142 };
143 
144 struct msm_vfe_evt_msg {
145 	unsigned short type; /* 1 == event (RPC), 0 == message (adsp) */
146 	unsigned short msg_id;
147 	unsigned int len; /* size in, number of bytes out */
148 	void *data;
149 };
150 
151 #define MSM_CAM_RESP_CTRL         0
152 #define MSM_CAM_RESP_STAT_EVT_MSG 1
153 #define MSM_CAM_RESP_V4L2         2
154 #define MSM_CAM_RESP_MAX          3
155 
156 /* this one is used to send ctrl/status up to config thread */
157 struct msm_stats_event_ctrl {
158 	/* 0 - ctrl_cmd from control thread,
159 	 * 1 - stats/event kernel,
160 	 * 2 - V4L control or read request */
161 	int resptype;
162 	int timeout_ms;
163 	struct msm_ctrl_cmd ctrl_cmd;
164 	/* struct  vfe_event_t  stats_event; */
165 	struct msm_vfe_evt_msg stats_event;
166 };
167 
168 /* 2. config command: config command(from config thread); */
169 struct msm_camera_cfg_cmd {
170 	/* what to config:
171 	 * 1 - sensor config, 2 - vfe config */
172 	uint16_t cfg_type;
173 
174 	/* sensor config type */
175 	uint16_t cmd_type;
176 	uint16_t queue;
177 	uint16_t length;
178 	void *value;
179 };
180 
181 #define CMD_GENERAL			0
182 #define CMD_AXI_CFG_OUT1		1
183 #define CMD_AXI_CFG_SNAP_O1_AND_O2	2
184 #define CMD_AXI_CFG_OUT2		3
185 #define CMD_PICT_T_AXI_CFG		4
186 #define CMD_PICT_M_AXI_CFG		5
187 #define CMD_RAW_PICT_AXI_CFG		6
188 #define CMD_STATS_AXI_CFG		7
189 #define CMD_STATS_AF_AXI_CFG		8
190 #define CMD_FRAME_BUF_RELEASE		9
191 #define CMD_PREV_BUF_CFG		10
192 #define CMD_SNAP_BUF_RELEASE		11
193 #define CMD_SNAP_BUF_CFG		12
194 #define CMD_STATS_DISABLE		13
195 #define CMD_STATS_AEC_AWB_ENABLE	14
196 #define CMD_STATS_AF_ENABLE		15
197 #define CMD_STATS_BUF_RELEASE		16
198 #define CMD_STATS_AF_BUF_RELEASE	17
199 #define CMD_STATS_ENABLE        18
200 #define UPDATE_STATS_INVALID		19
201 
202 #define CMD_STATS_AEC_ENABLE		20
203 #define CMD_STATS_AWB_ENABLE		21
204 #define CMD_STATS_AEC_AXI_CFG		22
205 #define CMD_STATS_AWB_AXI_CFG		23
206 #define CMD_STATS_RS_AXI_CFG		24
207 #define CMD_STATS_CS_AXI_CFG		25
208 #define CMD_STATS_IHIST_AXI_CFG		26
209 #define CMD_STATS_SKIN_AXI_CFG		27
210 #define CMD_STATS_AEC_BUF_RELEASE	28
211 #define CMD_STATS_AWB_BUF_RELEASE	29
212 #define CMD_STATS_RS_BUF_RELEASE	30
213 #define CMD_STATS_CS_BUF_RELEASE	31
214 #define CMD_STATS_IHIST_BUF_RELEASE	32
215 #define CMD_STATS_SKIN_BUF_RELEASE	33
216 
217 #define CMD_AXI_CFG_SNAP_GEMINI		34
218 #define CMD_AXI_CFG_SNAP		35
219 #define CMD_AXI_CFG_PREVIEW		36
220 #define CMD_AXI_CFG_VIDEO		37
221 
222 #define CMD_STATS_IHIST_ENABLE 38
223 #define CMD_STATS_RS_ENABLE 39
224 #define CMD_STATS_CS_ENABLE 40
225 #define CMD_AXI_CFG_O1_AND_O2	41 /* output1 and output2 */
226 
227 /* vfe config command: config command(from config thread)*/
228 struct msm_vfe_cfg_cmd {
229 	int cmd_type;
230 	uint16_t length;
231 	void *value;
232 };
233 
234 #define MAX_CAMERA_ENABLE_NAME_LEN 32
235 struct camera_enable_cmd {
236 	char name[MAX_CAMERA_ENABLE_NAME_LEN];
237 };
238 
239 #define MSM_PMEM_OUTPUT1		0
240 #define MSM_PMEM_OUTPUT2		1
241 #define MSM_PMEM_OUTPUT1_OUTPUT2	2
242 #define MSM_PMEM_THUMBNAIL		3
243 #define MSM_PMEM_MAINIMG		4
244 #define MSM_PMEM_RAW_MAINIMG		5
245 #define MSM_PMEM_AEC_AWB		6
246 #define MSM_PMEM_AF			7
247 #define MSM_PMEM_AEC			8
248 #define MSM_PMEM_AWB			9
249 #define MSM_PMEM_RS		    	10
250 #define MSM_PMEM_CS	    		11
251 #define MSM_PMEM_IHIST			12
252 #define MSM_PMEM_SKIN			13
253 #define MSM_PMEM_VIDEO			14
254 #define MSM_PMEM_PREVIEW		15
255 #define MSM_PMEM_MAX			16
256 
257 #define FRAME_PREVIEW_OUTPUT1		0
258 #define FRAME_PREVIEW_OUTPUT2		1
259 #define FRAME_SNAPSHOT			2
260 #define FRAME_THUMBNAIL		3
261 #define FRAME_RAW_SNAPSHOT		4
262 #define FRAME_MAX			5
263 
264 struct msm_pmem_info {
265 	int type;
266 	int fd;
267 	void *vaddr;
268 	uint32_t offset;
269 	uint32_t len;
270 	uint32_t y_off; /* relative to offset */
271 	uint32_t cbcr_off; /* relative to offset */
272 	uint8_t vfe_can_write;
273 };
274 
275 struct outputCfg {
276 	uint32_t height;
277 	uint32_t width;
278 
279 	uint32_t window_height_firstline;
280 	uint32_t window_height_lastline;
281 };
282 
283 #define OUTPUT_1	0
284 #define OUTPUT_2	1
285 #define OUTPUT_1_AND_2	2
286 #define CAMIF_TO_AXI_VIA_OUTPUT_2		3
287 #define OUTPUT_1_AND_CAMIF_TO_AXI_VIA_OUTPUT_2	4
288 #define OUTPUT_2_AND_CAMIF_TO_AXI_VIA_OUTPUT_1	5
289 #define OUTPUT_1_AND_3 6
290 #define LAST_AXI_OUTPUT_MODE_ENUM = OUTPUT_1_AND_3            7   /* video */
291 
292 
293 #define MSM_FRAME_PREV_1	0
294 #define MSM_FRAME_PREV_2	1
295 #define MSM_FRAME_ENC		2
296 
297 #define OUTPUT_TYPE_P		1
298 #define OUTPUT_TYPE_T		2
299 #define OUTPUT_TYPE_S		3
300 #define OUTPUT_TYPE_V		4
301 
302 struct msm_frame {
303 	int path;
304 	unsigned long buffer;
305 	uint32_t y_off;
306 	uint32_t cbcr_off;
307 	int fd;
308 
309 	void *cropinfo;
310 	int croplen;
311 };
312 
313 #define STAT_AEAW	0
314 #define STAT_AF		1
315 #define STAT_AEC	2
316 #define STAT_AWB	3
317 #define STAT_RS		4
318 #define STAT_CS		5
319 #define STAT_IHIST	6
320 #define STAT_SKIN	7
321 #define STAT_MAX	8
322 
323 struct msm_stats_buf {
324 	int type;
325 	unsigned long buffer;
326 	int fd;
327 };
328 
329 #define MSM_V4L2_VID_CAP_TYPE	0
330 #define MSM_V4L2_STREAM_ON	1
331 #define MSM_V4L2_STREAM_OFF	2
332 #define MSM_V4L2_SNAPSHOT	3
333 #define MSM_V4L2_QUERY_CTRL	4
334 #define MSM_V4L2_GET_CTRL	5
335 #define MSM_V4L2_SET_CTRL	6
336 #define MSM_V4L2_QUERY		7
337 #define MSM_V4L2_MAX		8
338 
339 struct crop_info {
340 	void *info;
341 	int len;
342 };
343 
344 struct msm_postproc {
345 	int ftnum;
346 	struct msm_frame fthumnail;
347 	int fmnum;
348 	struct msm_frame fmain;
349 };
350 
351 struct msm_snapshot_pp_status {
352 	void *status;
353 };
354 
355 #define CFG_SET_MODE			0
356 #define CFG_SET_EFFECT			1
357 #define CFG_START			2
358 #define CFG_PWR_UP			3
359 #define CFG_PWR_DOWN			4
360 #define CFG_WRITE_EXPOSURE_GAIN		5
361 #define CFG_SET_DEFAULT_FOCUS		6
362 #define CFG_MOVE_FOCUS			7
363 #define CFG_REGISTER_TO_REAL_GAIN	8
364 #define CFG_REAL_TO_REGISTER_GAIN	9
365 #define CFG_SET_FPS			10
366 #define CFG_SET_PICT_FPS		11
367 #define CFG_SET_BRIGHTNESS		12
368 #define CFG_SET_CONTRAST		13
369 #define CFG_SET_ZOOM			14
370 #define CFG_SET_EXPOSURE_MODE		15
371 #define CFG_SET_WB			16
372 #define CFG_SET_ANTIBANDING		17
373 #define CFG_SET_EXP_GAIN		18
374 #define CFG_SET_PICT_EXP_GAIN		19
375 #define CFG_SET_LENS_SHADING		20
376 #define CFG_GET_PICT_FPS		21
377 #define CFG_GET_PREV_L_PF		22
378 #define CFG_GET_PREV_P_PL		23
379 #define CFG_GET_PICT_L_PF		24
380 #define CFG_GET_PICT_P_PL		25
381 #define CFG_GET_AF_MAX_STEPS		26
382 #define CFG_GET_PICT_MAX_EXP_LC		27
383 #define CFG_MAX				28
384 
385 #define MOVE_NEAR	0
386 #define MOVE_FAR	1
387 
388 #define SENSOR_PREVIEW_MODE		0
389 #define SENSOR_SNAPSHOT_MODE		1
390 #define SENSOR_RAW_SNAPSHOT_MODE	2
391 
392 #define SENSOR_QTR_SIZE			0
393 #define SENSOR_FULL_SIZE		1
394 #define SENSOR_INVALID_SIZE		2
395 
396 #define CAMERA_EFFECT_OFF		0
397 #define CAMERA_EFFECT_MONO		1
398 #define CAMERA_EFFECT_NEGATIVE		2
399 #define CAMERA_EFFECT_SOLARIZE		3
400 #define CAMERA_EFFECT_PASTEL		4
401 #define CAMERA_EFFECT_MOSAIC		5
402 #define CAMERA_EFFECT_RESIZE		6
403 #define CAMERA_EFFECT_SEPIA		7
404 #define CAMERA_EFFECT_POSTERIZE		8
405 #define CAMERA_EFFECT_WHITEBOARD	9
406 #define CAMERA_EFFECT_BLACKBOARD	10
407 #define CAMERA_EFFECT_AQUA		11
408 #define CAMERA_EFFECT_MAX		12
409 
410 struct sensor_pict_fps {
411 	uint16_t prevfps;
412 	uint16_t pictfps;
413 };
414 
415 struct exp_gain_cfg {
416 	uint16_t gain;
417 	uint32_t line;
418 };
419 
420 struct focus_cfg {
421 	int32_t steps;
422 	int dir;
423 };
424 
425 struct fps_cfg {
426 	uint16_t f_mult;
427 	uint16_t fps_div;
428 	uint32_t pict_fps_div;
429 };
430 
431 struct sensor_cfg_data {
432 	int cfgtype;
433 	int mode;
434 	int rs;
435 	uint8_t max_steps;
436 
437 	union {
438 		int8_t effect;
439 		uint8_t lens_shading;
440 		uint16_t prevl_pf;
441 		uint16_t prevp_pl;
442 		uint16_t pictl_pf;
443 		uint16_t pictp_pl;
444 		uint32_t pict_max_exp_lc;
445 		uint16_t p_fps;
446 		struct sensor_pict_fps gfps;
447 		struct exp_gain_cfg exp_gain;
448 		struct focus_cfg focus;
449 		struct fps_cfg fps;
450 	} cfg;
451 };
452 
453 #define GET_NAME			0
454 #define GET_PREVIEW_LINE_PER_FRAME	1
455 #define GET_PREVIEW_PIXELS_PER_LINE	2
456 #define GET_SNAPSHOT_LINE_PER_FRAME	3
457 #define GET_SNAPSHOT_PIXELS_PER_LINE	4
458 #define GET_SNAPSHOT_FPS		5
459 #define GET_SNAPSHOT_MAX_EP_LINE_CNT	6
460 
461 struct msm_camsensor_info {
462 	char name[MAX_SENSOR_NAME];
463 	uint8_t flash_enabled;
464 };
465 #endif /* __LINUX_MSM_CAMERA_H */
466