1/* Copyright (c) 2009-2012, The Linux Foundation. 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 */
13#ifndef __LINUX_MSM_CAMERA_H
14#define __LINUX_MSM_CAMERA_H
15
16#ifdef MSM_CAMERA_BIONIC
17#include <sys/types.h>
18#endif
19#include <linux/types.h>
20#include <linux/ioctl.h>
21#ifdef __KERNEL__
22#include <linux/cdev.h>
23#endif
24#ifdef MSM_CAMERA_GCC
25#include <time.h>
26#else
27#include <linux/time.h>
28#endif
29
30#include <linux/msm_ion.h>
31
32#define BIT(nr)   (1UL << (nr))
33
34#define MSM_CAM_IOCTL_MAGIC 'm'
35
36#define MSM_CAM_IOCTL_GET_SENSOR_INFO \
37	_IOR(MSM_CAM_IOCTL_MAGIC, 1, struct msm_camsensor_info *)
38
39#define MSM_CAM_IOCTL_REGISTER_PMEM \
40	_IOW(MSM_CAM_IOCTL_MAGIC, 2, struct msm_pmem_info *)
41
42#define MSM_CAM_IOCTL_UNREGISTER_PMEM \
43	_IOW(MSM_CAM_IOCTL_MAGIC, 3, unsigned)
44
45#define MSM_CAM_IOCTL_CTRL_COMMAND \
46	_IOW(MSM_CAM_IOCTL_MAGIC, 4, struct msm_ctrl_cmd *)
47
48#define MSM_CAM_IOCTL_CONFIG_VFE  \
49	_IOW(MSM_CAM_IOCTL_MAGIC, 5, struct msm_camera_vfe_cfg_cmd *)
50
51#define MSM_CAM_IOCTL_GET_STATS \
52	_IOR(MSM_CAM_IOCTL_MAGIC, 6, struct msm_camera_stats_event_ctrl *)
53
54#define MSM_CAM_IOCTL_GETFRAME \
55	_IOR(MSM_CAM_IOCTL_MAGIC, 7, struct msm_camera_get_frame *)
56
57#define MSM_CAM_IOCTL_ENABLE_VFE \
58	_IOW(MSM_CAM_IOCTL_MAGIC, 8, struct camera_enable_cmd *)
59
60#define MSM_CAM_IOCTL_CTRL_CMD_DONE \
61	_IOW(MSM_CAM_IOCTL_MAGIC, 9, struct camera_cmd *)
62
63#define MSM_CAM_IOCTL_CONFIG_CMD \
64	_IOW(MSM_CAM_IOCTL_MAGIC, 10, struct camera_cmd *)
65
66#define MSM_CAM_IOCTL_DISABLE_VFE \
67	_IOW(MSM_CAM_IOCTL_MAGIC, 11, struct camera_enable_cmd *)
68
69#define MSM_CAM_IOCTL_PAD_REG_RESET2 \
70	_IOW(MSM_CAM_IOCTL_MAGIC, 12, struct camera_enable_cmd *)
71
72#define MSM_CAM_IOCTL_VFE_APPS_RESET \
73	_IOW(MSM_CAM_IOCTL_MAGIC, 13, struct camera_enable_cmd *)
74
75#define MSM_CAM_IOCTL_RELEASE_FRAME_BUFFER \
76	_IOW(MSM_CAM_IOCTL_MAGIC, 14, struct camera_enable_cmd *)
77
78#define MSM_CAM_IOCTL_RELEASE_STATS_BUFFER \
79	_IOW(MSM_CAM_IOCTL_MAGIC, 15, struct msm_stats_buf *)
80
81#define MSM_CAM_IOCTL_AXI_CONFIG \
82	_IOW(MSM_CAM_IOCTL_MAGIC, 16, struct msm_camera_vfe_cfg_cmd *)
83
84#define MSM_CAM_IOCTL_GET_PICTURE \
85	_IOW(MSM_CAM_IOCTL_MAGIC, 17, struct msm_frame *)
86
87#define MSM_CAM_IOCTL_SET_CROP \
88	_IOW(MSM_CAM_IOCTL_MAGIC, 18, struct crop_info *)
89
90#define MSM_CAM_IOCTL_PICT_PP \
91	_IOW(MSM_CAM_IOCTL_MAGIC, 19, uint8_t *)
92
93#define MSM_CAM_IOCTL_PICT_PP_DONE \
94	_IOW(MSM_CAM_IOCTL_MAGIC, 20, struct msm_snapshot_pp_status *)
95
96#define MSM_CAM_IOCTL_SENSOR_IO_CFG \
97	_IOW(MSM_CAM_IOCTL_MAGIC, 21, struct sensor_cfg_data *)
98
99#define MSM_CAM_IOCTL_FLASH_LED_CFG \
100	_IOW(MSM_CAM_IOCTL_MAGIC, 22, unsigned *)
101
102#define MSM_CAM_IOCTL_UNBLOCK_POLL_FRAME \
103	_IO(MSM_CAM_IOCTL_MAGIC, 23)
104
105#define MSM_CAM_IOCTL_CTRL_COMMAND_2 \
106	_IOW(MSM_CAM_IOCTL_MAGIC, 24, struct msm_ctrl_cmd *)
107
108#define MSM_CAM_IOCTL_AF_CTRL \
109	_IOR(MSM_CAM_IOCTL_MAGIC, 25, struct msm_ctrl_cmt_t *)
110
111#define MSM_CAM_IOCTL_AF_CTRL_DONE \
112	_IOW(MSM_CAM_IOCTL_MAGIC, 26, struct msm_ctrl_cmt_t *)
113
114#define MSM_CAM_IOCTL_CONFIG_VPE \
115	_IOW(MSM_CAM_IOCTL_MAGIC, 27, struct msm_camera_vpe_cfg_cmd *)
116
117#define MSM_CAM_IOCTL_AXI_VPE_CONFIG \
118	_IOW(MSM_CAM_IOCTL_MAGIC, 28, struct msm_camera_vpe_cfg_cmd *)
119
120#define MSM_CAM_IOCTL_STROBE_FLASH_CFG \
121	_IOW(MSM_CAM_IOCTL_MAGIC, 29, uint32_t *)
122
123#define MSM_CAM_IOCTL_STROBE_FLASH_CHARGE \
124	_IOW(MSM_CAM_IOCTL_MAGIC, 30, uint32_t *)
125
126#define MSM_CAM_IOCTL_STROBE_FLASH_RELEASE \
127	_IO(MSM_CAM_IOCTL_MAGIC, 31)
128
129#define MSM_CAM_IOCTL_FLASH_CTRL \
130	_IOW(MSM_CAM_IOCTL_MAGIC, 32, struct flash_ctrl_data *)
131
132#define MSM_CAM_IOCTL_ERROR_CONFIG \
133	_IOW(MSM_CAM_IOCTL_MAGIC, 33, uint32_t *)
134
135#define MSM_CAM_IOCTL_ABORT_CAPTURE \
136	_IO(MSM_CAM_IOCTL_MAGIC, 34)
137
138#define MSM_CAM_IOCTL_SET_FD_ROI \
139	_IOW(MSM_CAM_IOCTL_MAGIC, 35, struct fd_roi_info *)
140
141#define MSM_CAM_IOCTL_GET_CAMERA_INFO \
142	_IOR(MSM_CAM_IOCTL_MAGIC, 36, struct msm_camera_info *)
143
144#define MSM_CAM_IOCTL_UNBLOCK_POLL_PIC_FRAME \
145	_IO(MSM_CAM_IOCTL_MAGIC, 37)
146
147#define MSM_CAM_IOCTL_RELEASE_PIC_BUFFER \
148	_IOW(MSM_CAM_IOCTL_MAGIC, 38, struct camera_enable_cmd *)
149
150#define MSM_CAM_IOCTL_PUT_ST_FRAME \
151	_IOW(MSM_CAM_IOCTL_MAGIC, 39, struct msm_camera_st_frame *)
152
153#define MSM_CAM_IOCTL_V4L2_EVT_NOTIFY \
154	_IOR(MSM_CAM_IOCTL_MAGIC, 40, struct v4l2_event *)
155
156#define MSM_CAM_IOCTL_SET_MEM_MAP_INFO \
157	_IOR(MSM_CAM_IOCTL_MAGIC, 41, struct msm_mem_map_info *)
158
159#define MSM_CAM_IOCTL_ACTUATOR_IO_CFG \
160	_IOW(MSM_CAM_IOCTL_MAGIC, 42, struct msm_actuator_cfg_data *)
161
162#define MSM_CAM_IOCTL_MCTL_POST_PROC \
163	_IOW(MSM_CAM_IOCTL_MAGIC, 43, struct msm_mctl_post_proc_cmd *)
164
165#define MSM_CAM_IOCTL_RESERVE_FREE_FRAME \
166	_IOW(MSM_CAM_IOCTL_MAGIC, 44, struct msm_cam_evt_divert_frame *)
167
168#define MSM_CAM_IOCTL_RELEASE_FREE_FRAME \
169	_IOR(MSM_CAM_IOCTL_MAGIC, 45, struct msm_cam_evt_divert_frame *)
170
171#define MSM_CAM_IOCTL_PICT_PP_DIVERT_DONE \
172	_IOR(MSM_CAM_IOCTL_MAGIC, 46, struct msm_pp_frame *)
173
174#define MSM_CAM_IOCTL_SENSOR_V4l2_S_CTRL \
175	_IOR(MSM_CAM_IOCTL_MAGIC, 47, struct v4l2_control)
176
177#define MSM_CAM_IOCTL_SENSOR_V4l2_QUERY_CTRL \
178	_IOR(MSM_CAM_IOCTL_MAGIC, 48, struct v4l2_queryctrl)
179
180#define MSM_CAM_IOCTL_GET_KERNEL_SYSTEM_TIME \
181	_IOW(MSM_CAM_IOCTL_MAGIC, 49, struct timeval *)
182
183#define MSM_CAM_IOCTL_SET_VFE_OUTPUT_TYPE \
184	_IOW(MSM_CAM_IOCTL_MAGIC, 50, uint32_t *)
185
186#define MSM_CAM_IOCTL_MCTL_DIVERT_DONE \
187	_IOR(MSM_CAM_IOCTL_MAGIC, 51, struct msm_cam_evt_divert_frame *)
188
189#define MSM_CAM_IOCTL_GET_ACTUATOR_INFO \
190	_IOW(MSM_CAM_IOCTL_MAGIC, 52, struct msm_actuator_cfg_data *)
191
192#define MSM_CAM_IOCTL_EEPROM_IO_CFG \
193	_IOW(MSM_CAM_IOCTL_MAGIC, 53, struct msm_eeprom_cfg_data *)
194
195#define MSM_CAM_IOCTL_ISPIF_IO_CFG \
196	_IOR(MSM_CAM_IOCTL_MAGIC, 54, struct ispif_cfg_data *)
197
198#define MSM_CAM_IOCTL_STATS_REQBUF \
199	_IOR(MSM_CAM_IOCTL_MAGIC, 55, struct msm_stats_reqbuf *)
200
201#define MSM_CAM_IOCTL_STATS_ENQUEUEBUF \
202	_IOR(MSM_CAM_IOCTL_MAGIC, 56, struct msm_stats_buf_info *)
203
204#define MSM_CAM_IOCTL_STATS_FLUSH_BUFQ \
205	_IOR(MSM_CAM_IOCTL_MAGIC, 57, struct msm_stats_flush_bufq *)
206
207#define MSM_CAM_IOCTL_SET_MCTL_SDEV \
208	_IOW(MSM_CAM_IOCTL_MAGIC, 58, struct msm_mctl_set_sdev_data *)
209
210#define MSM_CAM_IOCTL_UNSET_MCTL_SDEV \
211	_IOW(MSM_CAM_IOCTL_MAGIC, 59, struct msm_mctl_set_sdev_data *)
212
213#define MSM_CAM_IOCTL_GET_INST_HANDLE \
214	_IOR(MSM_CAM_IOCTL_MAGIC, 60, uint32_t *)
215
216#define MSM_CAM_IOCTL_STATS_UNREG_BUF \
217	_IOR(MSM_CAM_IOCTL_MAGIC, 61, struct msm_stats_flush_bufq *)
218
219struct msm_stats_reqbuf {
220	int num_buf;		/* how many buffers requested */
221	int stats_type;		/* stats type */
222};
223
224struct msm_stats_flush_bufq {
225	int stats_type;		/* enum msm_stats_enum_type */
226};
227
228struct msm_mctl_pp_cmd {
229	int32_t id;
230	uint16_t length;
231	void *value;
232};
233
234struct msm_mctl_post_proc_cmd {
235	int32_t type;
236	struct msm_mctl_pp_cmd cmd;
237};
238
239#define MSM_CAMERA_LED_OFF  0
240#define MSM_CAMERA_LED_LOW  1
241#define MSM_CAMERA_LED_HIGH 2
242#define MSM_CAMERA_LED_INIT 3
243#define MSM_CAMERA_LED_RELEASE 4
244
245#define MSM_CAMERA_STROBE_FLASH_NONE 0
246#define MSM_CAMERA_STROBE_FLASH_XENON 1
247
248#define MSM_MAX_CAMERA_SENSORS  5
249#define MAX_SENSOR_NAME 32
250#define MAX_CAM_NAME_SIZE 32
251#define MAX_ACT_MOD_NAME_SIZE 32
252#define MAX_ACT_NAME_SIZE 32
253#define NUM_ACTUATOR_DIR 2
254#define MAX_ACTUATOR_SCENARIO 8
255#define MAX_ACTUATOR_REGION 5
256#define MAX_ACTUATOR_INIT_SET 12
257#define MAX_ACTUATOR_TYPE_SIZE 32
258#define MAX_ACTUATOR_REG_TBL_SIZE 8
259
260#define MSM_MAX_CAMERA_CONFIGS 2
261
262#define PP_SNAP  0x01
263#define PP_RAW_SNAP ((0x01)<<1)
264#define PP_PREV  ((0x01)<<2)
265#define PP_THUMB ((0x01)<<3)
266#define PP_MASK		(PP_SNAP|PP_RAW_SNAP|PP_PREV|PP_THUMB)
267
268#define MSM_CAM_CTRL_CMD_DONE  0
269#define MSM_CAM_SENSOR_VFE_CMD 1
270
271/* Should be same as VIDEO_MAX_PLANES in videodev2.h */
272#define MAX_PLANES 8
273
274/*****************************************************
275 *  structure
276 *****************************************************/
277
278/* define five type of structures for userspace <==> kernel
279 * space communication:
280 * command 1 - 2 are from userspace ==> kernel
281 * command 3 - 4 are from kernel ==> userspace
282 *
283 * 1. control command: control command(from control thread),
284 *                     control status (from config thread);
285 */
286struct msm_ctrl_cmd {
287	uint16_t type;
288	uint16_t length;
289	void *value;
290	uint16_t status;
291	uint32_t timeout_ms;
292	int resp_fd;		/* FIXME: to be used by the kernel, pass-through for now */
293	int vnode_id;		/* video dev id. Can we overload resp_fd? */
294	int queue_idx;
295	uint32_t evt_id;
296	uint32_t stream_type;	/* used to pass value to qcamera server */
297	int config_ident;	/*used as identifier for config node */
298};
299
300struct msm_cam_evt_msg {
301	unsigned short type;	/* 1 == event (RPC), 0 == message (adsp) */
302	unsigned short msg_id;
303	unsigned int len;	/* size in, number of bytes out */
304	uint32_t frame_id;
305	void *data;
306	struct timespec timestamp;
307};
308
309struct msm_pp_frame_sp {
310	/* phy addr of the buffer */
311	unsigned long phy_addr;
312	uint32_t y_off;
313	uint32_t cbcr_off;
314	/* buffer length */
315	uint32_t length;
316	int32_t fd;
317	uint32_t addr_offset;
318	/* mapped addr */
319	unsigned long vaddr;
320};
321
322struct msm_pp_frame_mp {
323	/* phy addr of the plane */
324	unsigned long phy_addr;
325	/* offset of plane data */
326	uint32_t data_offset;
327	/* plane length */
328	uint32_t length;
329	int32_t fd;
330	uint32_t addr_offset;
331	/* mapped addr */
332	unsigned long vaddr;
333};
334
335struct msm_pp_frame {
336	uint32_t handle;	/* stores vb cookie */
337	uint32_t frame_id;
338	unsigned short buf_idx;
339	int path;
340	unsigned short image_type;
341	unsigned short num_planes;	/* 1 for sp */
342	struct timeval timestamp;
343	union {
344		struct msm_pp_frame_sp sp;
345		struct msm_pp_frame_mp mp[MAX_PLANES];
346	};
347	int node_type;
348	uint32_t inst_handle;
349};
350
351struct msm_cam_evt_divert_frame {
352	unsigned short image_mode;
353	unsigned short op_mode;
354	unsigned short inst_idx;
355	unsigned short node_idx;
356	struct msm_pp_frame frame;
357	int do_pp;
358};
359
360struct msm_mctl_pp_cmd_ack_event {
361	uint32_t cmd;		/* VPE_CMD_ZOOM? */
362	int status;		/* 0 done, < 0 err */
363	uint32_t cookie;	/* daemon's cookie */
364};
365
366struct msm_mctl_pp_event_info {
367	int32_t event;
368	union {
369		struct msm_mctl_pp_cmd_ack_event ack;
370	};
371};
372
373struct msm_isp_event_ctrl {
374	unsigned short resptype;
375	union {
376		struct msm_cam_evt_msg isp_msg;
377		struct msm_ctrl_cmd ctrl;
378		struct msm_cam_evt_divert_frame div_frame;
379		struct msm_mctl_pp_event_info pp_event_info;
380	} isp_data;
381};
382
383#define MSM_CAM_RESP_CTRL              0
384#define MSM_CAM_RESP_STAT_EVT_MSG      1
385#define MSM_CAM_RESP_STEREO_OP_1       2
386#define MSM_CAM_RESP_STEREO_OP_2       3
387#define MSM_CAM_RESP_V4L2              4
388#define MSM_CAM_RESP_DIV_FRAME_EVT_MSG 5
389#define MSM_CAM_RESP_DONE_EVENT        6
390#define MSM_CAM_RESP_MCTL_PP_EVENT     7
391#define MSM_CAM_RESP_MAX               8
392
393#define MSM_CAM_APP_NOTIFY_EVENT  0
394#define MSM_CAM_APP_NOTIFY_ERROR_EVENT  1
395
396/* this one is used to send ctrl/status up to config thread */
397
398struct msm_stats_event_ctrl {
399	/* 0 - ctrl_cmd from control thread,
400	 * 1 - stats/event kernel,
401	 * 2 - V4L control or read request */
402	int resptype;
403	int timeout_ms;
404	struct msm_ctrl_cmd ctrl_cmd;
405	/* struct  vfe_event_t  stats_event; */
406	struct msm_cam_evt_msg stats_event;
407};
408
409/* 2. config command: config command(from config thread); */
410struct msm_camera_cfg_cmd {
411	/* what to config:
412	 * 1 - sensor config, 2 - vfe config */
413	uint16_t cfg_type;
414
415	/* sensor config type */
416	uint16_t cmd_type;
417	uint16_t queue;
418	uint16_t length;
419	void *value;
420};
421
422#define CMD_GENERAL			0
423#define CMD_AXI_CFG_OUT1		1
424#define CMD_AXI_CFG_SNAP_O1_AND_O2	2
425#define CMD_AXI_CFG_OUT2		3
426#define CMD_PICT_T_AXI_CFG		4
427#define CMD_PICT_M_AXI_CFG		5
428#define CMD_RAW_PICT_AXI_CFG		6
429
430#define CMD_FRAME_BUF_RELEASE		7
431#define CMD_PREV_BUF_CFG		8
432#define CMD_SNAP_BUF_RELEASE		9
433#define CMD_SNAP_BUF_CFG		10
434#define CMD_STATS_DISABLE		11
435#define CMD_STATS_AEC_AWB_ENABLE	12
436#define CMD_STATS_AF_ENABLE		13
437#define CMD_STATS_AEC_ENABLE		14
438#define CMD_STATS_AWB_ENABLE		15
439#define CMD_STATS_ENABLE  		16
440
441#define CMD_STATS_AXI_CFG		17
442#define CMD_STATS_AEC_AXI_CFG		18
443#define CMD_STATS_AF_AXI_CFG 		19
444#define CMD_STATS_AWB_AXI_CFG		20
445#define CMD_STATS_RS_AXI_CFG		21
446#define CMD_STATS_CS_AXI_CFG		22
447#define CMD_STATS_IHIST_AXI_CFG		23
448#define CMD_STATS_SKIN_AXI_CFG		24
449
450#define CMD_STATS_BUF_RELEASE		25
451#define CMD_STATS_AEC_BUF_RELEASE	26
452#define CMD_STATS_AF_BUF_RELEASE	27
453#define CMD_STATS_AWB_BUF_RELEASE	28
454#define CMD_STATS_RS_BUF_RELEASE	29
455#define CMD_STATS_CS_BUF_RELEASE	30
456#define CMD_STATS_IHIST_BUF_RELEASE	31
457#define CMD_STATS_SKIN_BUF_RELEASE	32
458
459#define UPDATE_STATS_INVALID		33
460#define CMD_AXI_CFG_SNAP_GEMINI		34
461#define CMD_AXI_CFG_SNAP		35
462#define CMD_AXI_CFG_PREVIEW		36
463#define CMD_AXI_CFG_VIDEO		37
464
465#define CMD_STATS_IHIST_ENABLE 38
466#define CMD_STATS_RS_ENABLE 39
467#define CMD_STATS_CS_ENABLE 40
468#define CMD_VPE 41
469#define CMD_AXI_CFG_VPE 42
470#define CMD_AXI_CFG_ZSL 43
471#define CMD_AXI_CFG_SNAP_VPE 44
472#define CMD_AXI_CFG_SNAP_THUMB_VPE 45
473
474#define CMD_CONFIG_PING_ADDR 46
475#define CMD_CONFIG_PONG_ADDR 47
476#define CMD_CONFIG_FREE_BUF_ADDR 48
477#define CMD_AXI_CFG_ZSL_ALL_CHNLS 49
478#define CMD_AXI_CFG_VIDEO_ALL_CHNLS 50
479#define CMD_VFE_BUFFER_RELEASE 51
480#define CMD_VFE_PROCESS_IRQ 52
481#define CMD_STATS_BG_ENABLE 53
482#define CMD_STATS_BF_ENABLE 54
483#define CMD_STATS_BHIST_ENABLE 55
484#define CMD_STATS_BG_BUF_RELEASE 56
485#define CMD_STATS_BF_BUF_RELEASE 57
486#define CMD_STATS_BHIST_BUF_RELEASE 58
487#define CMD_VFE_SOF_COUNT_UPDATE 59
488#define CMD_VFE_COUNT_SOF_ENABLE 60
489
490#define CMD_AXI_CFG_PRIM               BIT(8)
491#define CMD_AXI_CFG_PRIM_ALL_CHNLS     BIT(9)
492#define CMD_AXI_CFG_SEC                BIT(10)
493#define CMD_AXI_CFG_SEC_ALL_CHNLS      BIT(11)
494#define CMD_AXI_CFG_TERT1              BIT(12)
495#define CMD_AXI_CFG_TERT2              BIT(13)
496
497#define CMD_AXI_START  0xE1
498#define CMD_AXI_STOP   0xE2
499#define CMD_AXI_RESET  0xE3
500
501#define AXI_CMD_PREVIEW      BIT(0)
502#define AXI_CMD_CAPTURE      BIT(1)
503#define AXI_CMD_RECORD       BIT(2)
504#define AXI_CMD_ZSL          BIT(3)
505#define AXI_CMD_RAW_CAPTURE  BIT(4)
506#define AXI_CMD_LIVESHOT     BIT(5)
507
508/* vfe config command: config command(from config thread)*/
509struct msm_vfe_cfg_cmd {
510	int cmd_type;
511	uint16_t length;
512	void *value;
513};
514
515struct msm_vpe_cfg_cmd {
516	int cmd_type;
517	uint16_t length;
518	void *value;
519};
520
521#define MAX_CAMERA_ENABLE_NAME_LEN 32
522struct camera_enable_cmd {
523	char name[MAX_CAMERA_ENABLE_NAME_LEN];
524};
525
526#define MSM_PMEM_OUTPUT1		0
527#define MSM_PMEM_OUTPUT2		1
528#define MSM_PMEM_OUTPUT1_OUTPUT2	2
529#define MSM_PMEM_THUMBNAIL		3
530#define MSM_PMEM_MAINIMG		4
531#define MSM_PMEM_RAW_MAINIMG		5
532#define MSM_PMEM_AEC_AWB		6
533#define MSM_PMEM_AF			7
534#define MSM_PMEM_AEC			8
535#define MSM_PMEM_AWB			9
536#define MSM_PMEM_RS			10
537#define MSM_PMEM_CS			11
538#define MSM_PMEM_IHIST			12
539#define MSM_PMEM_SKIN			13
540#define MSM_PMEM_VIDEO			14
541#define MSM_PMEM_PREVIEW		15
542#define MSM_PMEM_VIDEO_VPE		16
543#define MSM_PMEM_C2D			17
544#define MSM_PMEM_MAINIMG_VPE    18
545#define MSM_PMEM_THUMBNAIL_VPE  19
546#define MSM_PMEM_BAYER_GRID		20
547#define MSM_PMEM_BAYER_FOCUS	21
548#define MSM_PMEM_BAYER_HIST		22
549#define MSM_PMEM_MAX            23
550
551#define STAT_AEAW			0
552#define STAT_AEC			1
553#define STAT_AF				2
554#define STAT_AWB			3
555#define STAT_RS				4
556#define STAT_CS				5
557#define STAT_IHIST			6
558#define STAT_SKIN			7
559#define STAT_BG				8
560#define STAT_BF				9
561#define STAT_BHIST			10
562#define STAT_MAX			11
563
564#define FRAME_PREVIEW_OUTPUT1		0
565#define FRAME_PREVIEW_OUTPUT2		1
566#define FRAME_SNAPSHOT			2
567#define FRAME_THUMBNAIL			3
568#define FRAME_RAW_SNAPSHOT		4
569#define FRAME_MAX			5
570
571enum msm_stats_enum_type {
572	MSM_STATS_TYPE_AEC,	/* legacy based AEC */
573	MSM_STATS_TYPE_AF,	/* legacy based AF */
574	MSM_STATS_TYPE_AWB,	/* legacy based AWB */
575	MSM_STATS_TYPE_RS,	/* legacy based RS */
576	MSM_STATS_TYPE_CS,	/* legacy based CS */
577	MSM_STATS_TYPE_IHIST,	/* legacy based HIST */
578	MSM_STATS_TYPE_SKIN,	/* legacy based SKIN */
579	MSM_STATS_TYPE_BG,	/* Bayer Grids */
580	MSM_STATS_TYPE_BF,	/* Bayer Focus */
581	MSM_STATS_TYPE_BHIST,	/* Bayer Hist */
582	MSM_STATS_TYPE_AE_AW,	/* legacy stats for vfe 2.x */
583	MSM_STATS_TYPE_MAX	/* MAX */
584};
585
586struct msm_stats_buf_info {
587	int type;		/* msm_stats_enum_type */
588	int fd;
589	void *vaddr;
590	uint32_t offset;
591	uint32_t len;
592	uint32_t y_off;
593	uint32_t cbcr_off;
594	uint32_t planar0_off;
595	uint32_t planar1_off;
596	uint32_t planar2_off;
597	uint8_t active;
598	int buf_idx;
599};
600
601struct msm_pmem_info {
602	int type;
603	int fd;
604	void *vaddr;
605	uint32_t offset;
606	uint32_t len;
607	uint32_t y_off;
608	uint32_t cbcr_off;
609	uint32_t planar0_off;
610	uint32_t planar1_off;
611	uint32_t planar2_off;
612	uint8_t active;
613};
614
615struct outputCfg {
616	uint32_t height;
617	uint32_t width;
618
619	uint32_t window_height_firstline;
620	uint32_t window_height_lastline;
621};
622
623#define VIDEO_NODE 0
624#define MCTL_NODE 1
625
626#define OUTPUT_1	0
627#define OUTPUT_2	1
628#define OUTPUT_1_AND_2            2	/* snapshot only */
629#define OUTPUT_1_AND_3            3	/* video */
630#define CAMIF_TO_AXI_VIA_OUTPUT_2 4
631#define OUTPUT_1_AND_CAMIF_TO_AXI_VIA_OUTPUT_2 5
632#define OUTPUT_2_AND_CAMIF_TO_AXI_VIA_OUTPUT_1 6
633#define OUTPUT_1_2_AND_3 7
634#define OUTPUT_ALL_CHNLS 8
635#define OUTPUT_VIDEO_ALL_CHNLS 9
636#define OUTPUT_ZSL_ALL_CHNLS 10
637#define LAST_AXI_OUTPUT_MODE_ENUM = OUTPUT_ZSL_ALL_CHNLS
638
639#define OUTPUT_PRIM              BIT(8)
640#define OUTPUT_PRIM_ALL_CHNLS    BIT(9)
641#define OUTPUT_SEC               BIT(10)
642#define OUTPUT_SEC_ALL_CHNLS     BIT(11)
643#define OUTPUT_TERT1             BIT(12)
644#define OUTPUT_TERT2             BIT(13)
645
646#define MSM_FRAME_PREV_1	0
647#define MSM_FRAME_PREV_2	1
648#define MSM_FRAME_ENC		2
649
650#define OUTPUT_TYPE_P    BIT(0)
651#define OUTPUT_TYPE_T    BIT(1)
652#define OUTPUT_TYPE_S    BIT(2)
653#define OUTPUT_TYPE_V    BIT(3)
654#define OUTPUT_TYPE_L    BIT(4)
655#define OUTPUT_TYPE_ST_L BIT(5)
656#define OUTPUT_TYPE_ST_R BIT(6)
657#define OUTPUT_TYPE_ST_D BIT(7)
658#define OUTPUT_TYPE_R    BIT(8)
659#define OUTPUT_TYPE_R1   BIT(9)
660
661struct fd_roi_info {
662	void *info;
663	int info_len;
664};
665
666struct msm_mem_map_info {
667	uint32_t cookie;
668	uint32_t length;
669	uint32_t mem_type;
670};
671
672#define MSM_MEM_MMAP		0
673#define MSM_MEM_USERPTR		1
674#define MSM_PLANE_MAX		8
675#define MSM_PLANE_Y			0
676#define MSM_PLANE_UV		1
677
678struct msm_frame {
679	struct timespec ts;
680	int path;
681	int type;
682	unsigned long buffer;
683	uint32_t phy_offset;
684	uint32_t y_off;
685	uint32_t cbcr_off;
686	uint32_t planar0_off;
687	uint32_t planar1_off;
688	uint32_t planar2_off;
689	int fd;
690
691	void *cropinfo;
692	int croplen;
693	uint32_t error_code;
694	struct fd_roi_info roi_info;
695	uint32_t frame_id;
696	int stcam_quality_ind;
697	uint32_t stcam_conv_value;
698
699	struct ion_allocation_data ion_alloc;
700	struct ion_fd_data fd_data;
701	int ion_dev_fd;
702};
703
704enum msm_st_frame_packing {
705	SIDE_BY_SIDE_HALF,
706	SIDE_BY_SIDE_FULL,
707	TOP_DOWN_HALF,
708	TOP_DOWN_FULL,
709};
710
711struct msm_st_crop {
712	uint32_t in_w;
713	uint32_t in_h;
714	uint32_t out_w;
715	uint32_t out_h;
716};
717
718struct msm_st_half {
719	uint32_t buf_p0_off;
720	uint32_t buf_p1_off;
721	uint32_t buf_p0_stride;
722	uint32_t buf_p1_stride;
723	uint32_t pix_x_off;
724	uint32_t pix_y_off;
725	struct msm_st_crop stCropInfo;
726};
727
728struct msm_st_frame {
729	struct msm_frame buf_info;
730	int type;
731	enum msm_st_frame_packing packing;
732	struct msm_st_half L;
733	struct msm_st_half R;
734	int frame_id;
735};
736
737#define MSM_CAMERA_ERR_MASK (0xFFFFFFFF & 1)
738
739struct stats_buff {
740	unsigned long buff;
741	int fd;
742};
743
744struct msm_stats_buf {
745	uint8_t awb_ymin;
746	struct stats_buff aec;
747	struct stats_buff awb;
748	struct stats_buff af;
749	struct stats_buff ihist;
750	struct stats_buff rs;
751	struct stats_buff cs;
752	struct stats_buff skin;
753	int type;
754	uint32_t status_bits;
755	unsigned long buffer;
756	int fd;
757	int length;
758	struct ion_handle *handle;
759	uint32_t frame_id;
760	int buf_idx;
761};
762#define MSM_V4L2_EXT_CAPTURE_MODE_DEFAULT 0
763/* video capture mode in VIDIOC_S_PARM */
764#define MSM_V4L2_EXT_CAPTURE_MODE_PREVIEW \
765	(MSM_V4L2_EXT_CAPTURE_MODE_DEFAULT+1)
766/* extendedmode for video recording in VIDIOC_S_PARM */
767#define MSM_V4L2_EXT_CAPTURE_MODE_VIDEO \
768	(MSM_V4L2_EXT_CAPTURE_MODE_DEFAULT+2)
769/* extendedmode for the full size main image in VIDIOC_S_PARM */
770#define MSM_V4L2_EXT_CAPTURE_MODE_MAIN (MSM_V4L2_EXT_CAPTURE_MODE_DEFAULT+3)
771/* extendedmode for the thumb nail image in VIDIOC_S_PARM */
772#define MSM_V4L2_EXT_CAPTURE_MODE_THUMBNAIL \
773	(MSM_V4L2_EXT_CAPTURE_MODE_DEFAULT+4)
774#define MSM_V4L2_EXT_CAPTURE_MODE_RAW \
775	(MSM_V4L2_EXT_CAPTURE_MODE_DEFAULT+5)
776#define MSM_V4L2_EXT_CAPTURE_MODE_RDI \
777	(MSM_V4L2_EXT_CAPTURE_MODE_DEFAULT+6)
778#define MSM_V4L2_EXT_CAPTURE_MODE_RDI1 \
779	(MSM_V4L2_EXT_CAPTURE_MODE_DEFAULT+7)
780#define MSM_V4L2_EXT_CAPTURE_MODE_RDI2 \
781	(MSM_V4L2_EXT_CAPTURE_MODE_DEFAULT+8)
782#define MSM_V4L2_EXT_CAPTURE_MODE_AEC \
783	(MSM_V4L2_EXT_CAPTURE_MODE_DEFAULT+9)
784#define MSM_V4L2_EXT_CAPTURE_MODE_AWB \
785	(MSM_V4L2_EXT_CAPTURE_MODE_DEFAULT+10)
786#define MSM_V4L2_EXT_CAPTURE_MODE_AF \
787	(MSM_V4L2_EXT_CAPTURE_MODE_DEFAULT+11)
788#define MSM_V4L2_EXT_CAPTURE_MODE_IHIST \
789	(MSM_V4L2_EXT_CAPTURE_MODE_DEFAULT+12)
790#define MSM_V4L2_EXT_CAPTURE_MODE_CS \
791	(MSM_V4L2_EXT_CAPTURE_MODE_DEFAULT+13)
792#define MSM_V4L2_EXT_CAPTURE_MODE_RS \
793	(MSM_V4L2_EXT_CAPTURE_MODE_DEFAULT+14)
794#define MSM_V4L2_EXT_CAPTURE_MODE_MAX (MSM_V4L2_EXT_CAPTURE_MODE_DEFAULT+15)
795
796#define MSM_V4L2_PID_MOTION_ISO              V4L2_CID_PRIVATE_BASE
797#define MSM_V4L2_PID_EFFECT                 (V4L2_CID_PRIVATE_BASE+1)
798#define MSM_V4L2_PID_HJR                    (V4L2_CID_PRIVATE_BASE+2)
799#define MSM_V4L2_PID_LED_MODE               (V4L2_CID_PRIVATE_BASE+3)
800#define MSM_V4L2_PID_PREP_SNAPSHOT          (V4L2_CID_PRIVATE_BASE+4)
801#define MSM_V4L2_PID_EXP_METERING           (V4L2_CID_PRIVATE_BASE+5)
802#define MSM_V4L2_PID_ISO                    (V4L2_CID_PRIVATE_BASE+6)
803#define MSM_V4L2_PID_CAM_MODE               (V4L2_CID_PRIVATE_BASE+7)
804#define MSM_V4L2_PID_LUMA_ADAPTATION	    (V4L2_CID_PRIVATE_BASE+8)
805#define MSM_V4L2_PID_BEST_SHOT              (V4L2_CID_PRIVATE_BASE+9)
806#define MSM_V4L2_PID_FOCUS_MODE	            (V4L2_CID_PRIVATE_BASE+10)
807#define MSM_V4L2_PID_BL_DETECTION           (V4L2_CID_PRIVATE_BASE+11)
808#define MSM_V4L2_PID_SNOW_DETECTION         (V4L2_CID_PRIVATE_BASE+12)
809#define MSM_V4L2_PID_CTRL_CMD               (V4L2_CID_PRIVATE_BASE+13)
810#define MSM_V4L2_PID_EVT_SUB_INFO           (V4L2_CID_PRIVATE_BASE+14)
811#define MSM_V4L2_PID_STROBE_FLASH           (V4L2_CID_PRIVATE_BASE+15)
812#define MSM_V4L2_PID_INST_HANDLE            (V4L2_CID_PRIVATE_BASE+16)
813#define MSM_V4L2_PID_MMAP_INST              (V4L2_CID_PRIVATE_BASE+17)
814#define MSM_V4L2_PID_PP_PLANE_INFO          (V4L2_CID_PRIVATE_BASE+18)
815#define MSM_V4L2_PID_MAX                    MSM_V4L2_PID_PP_PLANE_INFO
816
817/* camera operation mode for video recording - two frame output queues */
818#define MSM_V4L2_CAM_OP_DEFAULT         0
819/* camera operation mode for video recording - two frame output queues */
820#define MSM_V4L2_CAM_OP_PREVIEW         (MSM_V4L2_CAM_OP_DEFAULT+1)
821/* camera operation mode for video recording - two frame output queues */
822#define MSM_V4L2_CAM_OP_VIDEO           (MSM_V4L2_CAM_OP_DEFAULT+2)
823/* camera operation mode for standard shapshot - two frame output queues */
824#define MSM_V4L2_CAM_OP_CAPTURE         (MSM_V4L2_CAM_OP_DEFAULT+3)
825/* camera operation mode for zsl shapshot - three output queues */
826#define MSM_V4L2_CAM_OP_ZSL             (MSM_V4L2_CAM_OP_DEFAULT+4)
827/* camera operation mode for raw snapshot - one frame output queue */
828#define MSM_V4L2_CAM_OP_RAW             (MSM_V4L2_CAM_OP_DEFAULT+5)
829/* camera operation mode for jpeg snapshot - one frame output queue */
830#define MSM_V4L2_CAM_OP_JPEG_CAPTURE    (MSM_V4L2_CAM_OP_DEFAULT+6)
831
832#define MSM_V4L2_VID_CAP_TYPE	0
833#define MSM_V4L2_STREAM_ON		1
834#define MSM_V4L2_STREAM_OFF		2
835#define MSM_V4L2_SNAPSHOT		3
836#define MSM_V4L2_QUERY_CTRL		4
837#define MSM_V4L2_GET_CTRL		5
838#define MSM_V4L2_SET_CTRL		6
839#define MSM_V4L2_QUERY			7
840#define MSM_V4L2_GET_CROP		8
841#define MSM_V4L2_SET_CROP		9
842#define MSM_V4L2_OPEN			10
843#define MSM_V4L2_CLOSE			11
844#define MSM_V4L2_SET_CTRL_CMD	12
845#define MSM_V4L2_EVT_SUB_MASK	13
846#define MSM_V4L2_MAX			14
847#define V4L2_CAMERA_EXIT		43
848
849struct crop_info {
850	void *info;
851	int len;
852};
853
854struct msm_postproc {
855	int ftnum;
856	struct msm_frame fthumnail;
857	int fmnum;
858	struct msm_frame fmain;
859};
860
861struct msm_snapshot_pp_status {
862	void *status;
863};
864
865#define CFG_SET_MODE			0
866#define CFG_SET_EFFECT			1
867#define CFG_START			2
868#define CFG_PWR_UP			3
869#define CFG_PWR_DOWN			4
870#define CFG_WRITE_EXPOSURE_GAIN		5
871#define CFG_SET_DEFAULT_FOCUS		6
872#define CFG_MOVE_FOCUS			7
873#define CFG_REGISTER_TO_REAL_GAIN	8
874#define CFG_REAL_TO_REGISTER_GAIN	9
875#define CFG_SET_FPS			10
876#define CFG_SET_PICT_FPS		11
877#define CFG_SET_BRIGHTNESS		12
878#define CFG_SET_CONTRAST		13
879#define CFG_SET_ZOOM			14
880#define CFG_SET_EXPOSURE_MODE		15
881#define CFG_SET_WB			16
882#define CFG_SET_ANTIBANDING		17
883#define CFG_SET_EXP_GAIN		18
884#define CFG_SET_PICT_EXP_GAIN		19
885#define CFG_SET_LENS_SHADING		20
886#define CFG_GET_PICT_FPS		21
887#define CFG_GET_PREV_L_PF		22
888#define CFG_GET_PREV_P_PL		23
889#define CFG_GET_PICT_L_PF		24
890#define CFG_GET_PICT_P_PL		25
891#define CFG_GET_AF_MAX_STEPS		26
892#define CFG_GET_PICT_MAX_EXP_LC		27
893#define CFG_SEND_WB_INFO    28
894#define CFG_SENSOR_INIT    29
895#define CFG_GET_3D_CALI_DATA 30
896#define CFG_GET_CALIB_DATA		31
897#define CFG_GET_OUTPUT_INFO		32
898#define CFG_GET_EEPROM_INFO		33
899#define CFG_GET_EEPROM_DATA		34
900#define CFG_SET_ACTUATOR_INFO		35
901#define CFG_GET_ACTUATOR_INFO           36
902/* TBD: QRD */
903#define CFG_SET_SATURATION            37
904#define CFG_SET_SHARPNESS             38
905#define CFG_SET_TOUCHAEC              39
906#define CFG_SET_AUTO_FOCUS            40
907#define CFG_SET_AUTOFLASH             41
908#define CFG_SET_EXPOSURE_COMPENSATION 42
909#define CFG_SET_ISO                   43
910#define CFG_START_STREAM              44
911#define CFG_STOP_STREAM               45
912#define CFG_GET_CSI_PARAMS            46
913#define CFG_MAX			47
914
915#define MOVE_NEAR	0
916#define MOVE_FAR	1
917
918#define SENSOR_PREVIEW_MODE		0
919#define SENSOR_SNAPSHOT_MODE		1
920#define SENSOR_RAW_SNAPSHOT_MODE	2
921#define SENSOR_HFR_60FPS_MODE 3
922#define SENSOR_HFR_90FPS_MODE 4
923#define SENSOR_HFR_120FPS_MODE 5
924
925#define SENSOR_QTR_SIZE			0
926#define SENSOR_FULL_SIZE		1
927#define SENSOR_QVGA_SIZE		2
928#define SENSOR_INVALID_SIZE		3
929
930#define CAMERA_EFFECT_OFF		0
931#define CAMERA_EFFECT_MONO		1
932#define CAMERA_EFFECT_NEGATIVE		2
933#define CAMERA_EFFECT_SOLARIZE		3
934#define CAMERA_EFFECT_SEPIA		4
935#define CAMERA_EFFECT_POSTERIZE		5
936#define CAMERA_EFFECT_WHITEBOARD	6
937#define CAMERA_EFFECT_BLACKBOARD	7
938#define CAMERA_EFFECT_AQUA		8
939#define CAMERA_EFFECT_EMBOSS		9
940#define CAMERA_EFFECT_SKETCH		10
941#define CAMERA_EFFECT_NEON		11
942#define CAMERA_EFFECT_MAX		12
943
944/* QRD */
945#define CAMERA_EFFECT_BW		10
946#define CAMERA_EFFECT_BLUISH	12
947#define CAMERA_EFFECT_REDDISH	13
948#define CAMERA_EFFECT_GREENISH	14
949
950/* QRD */
951#define CAMERA_ANTIBANDING_OFF		0
952#define CAMERA_ANTIBANDING_50HZ		2
953#define CAMERA_ANTIBANDING_60HZ		1
954#define CAMERA_ANTIBANDING_AUTO		3
955
956#define CAMERA_CONTRAST_LV0			0
957#define CAMERA_CONTRAST_LV1			1
958#define CAMERA_CONTRAST_LV2			2
959#define CAMERA_CONTRAST_LV3			3
960#define CAMERA_CONTRAST_LV4			4
961#define CAMERA_CONTRAST_LV5			5
962#define CAMERA_CONTRAST_LV6			6
963#define CAMERA_CONTRAST_LV7			7
964#define CAMERA_CONTRAST_LV8			8
965#define CAMERA_CONTRAST_LV9			9
966
967#define CAMERA_BRIGHTNESS_LV0			0
968#define CAMERA_BRIGHTNESS_LV1			1
969#define CAMERA_BRIGHTNESS_LV2			2
970#define CAMERA_BRIGHTNESS_LV3			3
971#define CAMERA_BRIGHTNESS_LV4			4
972#define CAMERA_BRIGHTNESS_LV5			5
973#define CAMERA_BRIGHTNESS_LV6			6
974#define CAMERA_BRIGHTNESS_LV7			7
975#define CAMERA_BRIGHTNESS_LV8			8
976
977#define CAMERA_SATURATION_LV0			0
978#define CAMERA_SATURATION_LV1			1
979#define CAMERA_SATURATION_LV2			2
980#define CAMERA_SATURATION_LV3			3
981#define CAMERA_SATURATION_LV4			4
982#define CAMERA_SATURATION_LV5			5
983#define CAMERA_SATURATION_LV6			6
984#define CAMERA_SATURATION_LV7			7
985#define CAMERA_SATURATION_LV8			8
986
987#define CAMERA_SHARPNESS_LV0		0
988#define CAMERA_SHARPNESS_LV1		3
989#define CAMERA_SHARPNESS_LV2		6
990#define CAMERA_SHARPNESS_LV3		9
991#define CAMERA_SHARPNESS_LV4		12
992#define CAMERA_SHARPNESS_LV5		15
993#define CAMERA_SHARPNESS_LV6		18
994#define CAMERA_SHARPNESS_LV7		21
995#define CAMERA_SHARPNESS_LV8		24
996#define CAMERA_SHARPNESS_LV9		27
997#define CAMERA_SHARPNESS_LV10		30
998
999#define CAMERA_SETAE_AVERAGE		0
1000#define CAMERA_SETAE_CENWEIGHT	1
1001
1002#define  CAMERA_WB_AUTO               1	/* This list must match aeecamera.h */
1003#define  CAMERA_WB_CUSTOM             2
1004#define  CAMERA_WB_INCANDESCENT       3
1005#define  CAMERA_WB_FLUORESCENT        4
1006#define  CAMERA_WB_DAYLIGHT           5
1007#define  CAMERA_WB_CLOUDY_DAYLIGHT    6
1008#define  CAMERA_WB_TWILIGHT           7
1009#define  CAMERA_WB_SHADE              8
1010
1011#define CAMERA_EXPOSURE_COMPENSATION_LV0			12
1012#define CAMERA_EXPOSURE_COMPENSATION_LV1			6
1013#define CAMERA_EXPOSURE_COMPENSATION_LV2			0
1014#define CAMERA_EXPOSURE_COMPENSATION_LV3			-6
1015#define CAMERA_EXPOSURE_COMPENSATION_LV4			-12
1016
1017enum msm_v4l2_saturation_level {
1018	MSM_V4L2_SATURATION_L0,
1019	MSM_V4L2_SATURATION_L1,
1020	MSM_V4L2_SATURATION_L2,
1021	MSM_V4L2_SATURATION_L3,
1022	MSM_V4L2_SATURATION_L4,
1023	MSM_V4L2_SATURATION_L5,
1024	MSM_V4L2_SATURATION_L6,
1025	MSM_V4L2_SATURATION_L7,
1026	MSM_V4L2_SATURATION_L8,
1027	MSM_V4L2_SATURATION_L9,
1028	MSM_V4L2_SATURATION_L10,
1029};
1030
1031enum msm_v4l2_contrast_level {
1032	MSM_V4L2_CONTRAST_L0,
1033	MSM_V4L2_CONTRAST_L1,
1034	MSM_V4L2_CONTRAST_L2,
1035	MSM_V4L2_CONTRAST_L3,
1036	MSM_V4L2_CONTRAST_L4,
1037	MSM_V4L2_CONTRAST_L5,
1038	MSM_V4L2_CONTRAST_L6,
1039	MSM_V4L2_CONTRAST_L7,
1040	MSM_V4L2_CONTRAST_L8,
1041	MSM_V4L2_CONTRAST_L9,
1042	MSM_V4L2_CONTRAST_L10,
1043};
1044
1045enum msm_v4l2_exposure_level {
1046	MSM_V4L2_EXPOSURE_N2,
1047	MSM_V4L2_EXPOSURE_N1,
1048	MSM_V4L2_EXPOSURE_D,
1049	MSM_V4L2_EXPOSURE_P1,
1050	MSM_V4L2_EXPOSURE_P2,
1051};
1052
1053enum msm_v4l2_sharpness_level {
1054	MSM_V4L2_SHARPNESS_L0,
1055	MSM_V4L2_SHARPNESS_L1,
1056	MSM_V4L2_SHARPNESS_L2,
1057	MSM_V4L2_SHARPNESS_L3,
1058	MSM_V4L2_SHARPNESS_L4,
1059	MSM_V4L2_SHARPNESS_L5,
1060	MSM_V4L2_SHARPNESS_L6,
1061};
1062
1063enum msm_v4l2_expo_metering_mode {
1064	MSM_V4L2_EXP_FRAME_AVERAGE,
1065	MSM_V4L2_EXP_CENTER_WEIGHTED,
1066	MSM_V4L2_EXP_SPOT_METERING,
1067};
1068
1069enum msm_v4l2_iso_mode {
1070	MSM_V4L2_ISO_AUTO = 0,
1071	MSM_V4L2_ISO_DEBLUR,
1072	MSM_V4L2_ISO_100,
1073	MSM_V4L2_ISO_200,
1074	MSM_V4L2_ISO_400,
1075	MSM_V4L2_ISO_800,
1076	MSM_V4L2_ISO_1600,
1077};
1078
1079enum msm_v4l2_wb_mode {
1080	MSM_V4L2_WB_OFF,
1081	MSM_V4L2_WB_AUTO,
1082	MSM_V4L2_WB_CUSTOM,
1083	MSM_V4L2_WB_INCANDESCENT,
1084	MSM_V4L2_WB_FLUORESCENT,
1085	MSM_V4L2_WB_DAYLIGHT,
1086	MSM_V4L2_WB_CLOUDY_DAYLIGHT,
1087};
1088
1089enum msm_v4l2_special_effect {
1090	MSM_V4L2_EFFECT_OFF,
1091	MSM_V4L2_EFFECT_MONO,
1092	MSM_V4L2_EFFECT_NEGATIVE,
1093	MSM_V4L2_EFFECT_SOLARIZE,
1094	MSM_V4L2_EFFECT_SEPIA,
1095	MSM_V4L2_EFFECT_POSTERAIZE,
1096	MSM_V4L2_EFFECT_WHITEBOARD,
1097	MSM_V4L2_EFFECT_BLACKBOARD,
1098	MSM_V4L2_EFFECT_AQUA,
1099	MSM_V4L2_EFFECT_EMBOSS,
1100	MSM_V4L2_EFFECT_SKETCH,
1101	MSM_V4L2_EFFECT_NEON,
1102	MSM_V4L2_EFFECT_MAX,
1103};
1104
1105enum msm_v4l2_power_line_frequency {
1106	MSM_V4L2_POWER_LINE_OFF,
1107	MSM_V4L2_POWER_LINE_60HZ,
1108	MSM_V4L2_POWER_LINE_50HZ,
1109	MSM_V4L2_POWER_LINE_AUTO,
1110};
1111
1112#define CAMERA_ISO_TYPE_AUTO           0
1113#define CAMEAR_ISO_TYPE_HJR            1
1114#define CAMEAR_ISO_TYPE_100            2
1115#define CAMERA_ISO_TYPE_200            3
1116#define CAMERA_ISO_TYPE_400            4
1117#define CAMEAR_ISO_TYPE_800            5
1118#define CAMERA_ISO_TYPE_1600           6
1119
1120struct sensor_pict_fps {
1121	uint16_t prevfps;
1122	uint16_t pictfps;
1123};
1124
1125struct exp_gain_cfg {
1126	uint16_t gain;
1127	uint32_t line;
1128};
1129
1130struct focus_cfg {
1131	int32_t steps;
1132	int dir;
1133};
1134
1135struct fps_cfg {
1136	uint16_t f_mult;
1137	uint16_t fps_div;
1138	uint32_t pict_fps_div;
1139};
1140struct wb_info_cfg {
1141	uint16_t red_gain;
1142	uint16_t green_gain;
1143	uint16_t blue_gain;
1144};
1145struct sensor_3d_exp_cfg {
1146	uint16_t gain;
1147	uint32_t line;
1148	uint16_t r_gain;
1149	uint16_t b_gain;
1150	uint16_t gr_gain;
1151	uint16_t gb_gain;
1152	uint16_t gain_adjust;
1153};
1154struct sensor_3d_cali_data_t {
1155	unsigned char left_p_matrix[3][4][8];
1156	unsigned char right_p_matrix[3][4][8];
1157	unsigned char square_len[8];
1158	unsigned char focal_len[8];
1159	unsigned char pixel_pitch[8];
1160	uint16_t left_r;
1161	uint16_t left_b;
1162	uint16_t left_gb;
1163	uint16_t left_af_far;
1164	uint16_t left_af_mid;
1165	uint16_t left_af_short;
1166	uint16_t left_af_5um;
1167	uint16_t left_af_50up;
1168	uint16_t left_af_50down;
1169	uint16_t right_r;
1170	uint16_t right_b;
1171	uint16_t right_gb;
1172	uint16_t right_af_far;
1173	uint16_t right_af_mid;
1174	uint16_t right_af_short;
1175	uint16_t right_af_5um;
1176	uint16_t right_af_50up;
1177	uint16_t right_af_50down;
1178};
1179struct sensor_init_cfg {
1180	uint8_t prev_res;
1181	uint8_t pict_res;
1182};
1183
1184#define ROLLOFF_CALDATA_SIZE    (17 * 13)
1185typedef struct {
1186	unsigned short mesh_rolloff_table_size;	// TableSize
1187	uint8_t r_gain[ROLLOFF_CALDATA_SIZE];	// RGain
1188	uint8_t gr_gain[ROLLOFF_CALDATA_SIZE];	// GRGain
1189	uint8_t gb_gain[ROLLOFF_CALDATA_SIZE];	// GBGain
1190	uint8_t b_gain[ROLLOFF_CALDATA_SIZE];	// BGain
1191	uint8_t red_ref[17];
1192} rolloff_caldata_array_type;
1193
1194struct sensor_calib_data {
1195	/* Color Related Measurements */
1196	uint16_t r_over_g;
1197	uint16_t b_over_g;
1198	uint16_t gr_over_gb;
1199
1200	/* Lens Related Measurements */
1201	uint16_t macro_2_inf;
1202	uint16_t inf_2_macro;
1203	uint16_t stroke_amt;
1204	uint16_t af_pos_1m;
1205	uint16_t af_pos_inf;
1206	/* Lens Shading Calibration Data */
1207	rolloff_caldata_array_type rolloff;
1208};
1209
1210enum msm_sensor_resolution_t {
1211	MSM_SENSOR_RES_FULL,
1212	MSM_SENSOR_RES_QTR,
1213	MSM_SENSOR_RES_2,
1214	MSM_SENSOR_RES_3,
1215	MSM_SENSOR_RES_4,
1216	MSM_SENSOR_RES_5,
1217	MSM_SENSOR_RES_6,
1218	MSM_SENSOR_RES_7,
1219	MSM_SENSOR_INVALID_RES,
1220};
1221
1222struct msm_sensor_output_info_t {
1223	uint16_t x_output;
1224	uint16_t y_output;
1225	uint16_t line_length_pclk;
1226	uint16_t frame_length_lines;
1227	uint32_t vt_pixel_clk;
1228	uint32_t op_pixel_clk;
1229	uint16_t binning_factor;
1230};
1231
1232struct sensor_output_info_t {
1233	struct msm_sensor_output_info_t *output_info;
1234	uint16_t num_info;
1235};
1236
1237struct mirror_flip {
1238	int32_t x_mirror;
1239	int32_t y_flip;
1240};
1241
1242struct cord {
1243	uint32_t x;
1244	uint32_t y;
1245};
1246
1247struct msm_eeprom_data_t {
1248	void *eeprom_data;
1249	uint16_t index;
1250};
1251
1252struct msm_camera_csid_vc_cfg {
1253	uint8_t cid;
1254	uint8_t dt;
1255	uint8_t decode_format;
1256};
1257
1258struct csi_lane_params_t {
1259	uint8_t csi_lane_assign;
1260	uint8_t csi_lane_mask;
1261	uint8_t csi_if;
1262	uint8_t csid_core;
1263	uint32_t csid_version;
1264};
1265
1266#define CSI_EMBED_DATA 0x12
1267#define CSI_RESERVED_DATA_0 0x13
1268#define CSI_YUV422_8  0x1E
1269#define CSI_RAW8    0x2A
1270#define CSI_RAW10   0x2B
1271#define CSI_RAW12   0x2C
1272
1273#define CSI_DECODE_6BIT 0
1274#define CSI_DECODE_8BIT 1
1275#define CSI_DECODE_10BIT 2
1276#define CSI_DECODE_DPCM_10_8_10 5
1277
1278#define ISPIF_STREAM(intf, action, vfe) (((intf)<<ISPIF_S_STREAM_SHIFT)+\
1279	(action)+((vfe)<<ISPIF_VFE_INTF_SHIFT))
1280#define ISPIF_ON_FRAME_BOUNDARY   (0x01 << 0)
1281#define ISPIF_OFF_FRAME_BOUNDARY  (0x01 << 1)
1282#define ISPIF_OFF_IMMEDIATELY     (0x01 << 2)
1283#define ISPIF_S_STREAM_SHIFT      4
1284#define ISPIF_VFE_INTF_SHIFT      12
1285
1286#define PIX_0 (0x01 << 0)
1287#define RDI_0 (0x01 << 1)
1288#define PIX_1 (0x01 << 2)
1289#define RDI_1 (0x01 << 3)
1290#define RDI_2 (0x01 << 4)
1291
1292enum msm_ispif_vfe_intf {
1293	VFE0,
1294	VFE1,
1295	VFE_MAX,
1296};
1297
1298enum msm_ispif_intftype {
1299	PIX0,
1300	RDI0,
1301	PIX1,
1302	RDI1,
1303	RDI2,
1304	INTF_MAX,
1305};
1306
1307enum msm_ispif_vc {
1308	VC0,
1309	VC1,
1310	VC2,
1311	VC3,
1312};
1313
1314enum msm_ispif_cid {
1315	CID0,
1316	CID1,
1317	CID2,
1318	CID3,
1319	CID4,
1320	CID5,
1321	CID6,
1322	CID7,
1323	CID8,
1324	CID9,
1325	CID10,
1326	CID11,
1327	CID12,
1328	CID13,
1329	CID14,
1330	CID15,
1331};
1332
1333struct msm_ispif_params {
1334	uint8_t intftype;
1335	uint16_t cid_mask;
1336	uint8_t csid;
1337	uint8_t vfe_intf;
1338};
1339
1340struct msm_ispif_params_list {
1341	uint32_t len;
1342	struct msm_ispif_params params[4];
1343};
1344
1345enum ispif_cfg_type_t {
1346	ISPIF_INIT,
1347	ISPIF_SET_CFG,
1348	ISPIF_SET_ON_FRAME_BOUNDARY,
1349	ISPIF_SET_OFF_FRAME_BOUNDARY,
1350	ISPIF_SET_OFF_IMMEDIATELY,
1351	ISPIF_RELEASE,
1352};
1353
1354struct ispif_cfg_data {
1355	enum ispif_cfg_type_t cfgtype;
1356	union {
1357		uint32_t csid_version;
1358		int cmd;
1359		struct msm_ispif_params_list ispif_params;
1360	} cfg;
1361};
1362
1363struct sensor_cfg_data {
1364	int cfgtype;
1365	int mode;
1366	int rs;
1367	uint8_t max_steps;
1368
1369	union {
1370		int8_t effect;
1371		uint8_t lens_shading;
1372		uint16_t prevl_pf;
1373		uint16_t prevp_pl;
1374		uint16_t pictl_pf;
1375		uint16_t pictp_pl;
1376		uint32_t pict_max_exp_lc;
1377		uint16_t p_fps;
1378		uint8_t iso_type;
1379		struct sensor_init_cfg init_info;
1380		struct sensor_pict_fps gfps;
1381		struct exp_gain_cfg exp_gain;
1382		struct focus_cfg focus;
1383		struct fps_cfg fps;
1384		struct wb_info_cfg wb_info;
1385		struct sensor_3d_exp_cfg sensor_3d_exp;
1386		struct sensor_calib_data calib_info;
1387		struct sensor_output_info_t output_info;
1388		struct msm_eeprom_data_t eeprom_data;
1389		struct csi_lane_params_t csi_lane_params;
1390		/* QRD */
1391		uint16_t antibanding;
1392		uint8_t contrast;
1393		uint8_t saturation;
1394		uint8_t sharpness;
1395		int8_t brightness;
1396		int ae_mode;
1397		uint8_t wb_val;
1398		int8_t exp_compensation;
1399		struct cord aec_cord;
1400		int is_autoflash;
1401		struct mirror_flip mirror_flip;
1402	} cfg;
1403};
1404
1405struct damping_params_t {
1406	uint32_t damping_step;
1407	uint32_t damping_delay;
1408	uint32_t hw_params;
1409};
1410
1411enum actuator_type {
1412	ACTUATOR_VCM,
1413	ACTUATOR_PIEZO,
1414};
1415
1416enum msm_actuator_data_type {
1417	MSM_ACTUATOR_BYTE_DATA = 1,
1418	MSM_ACTUATOR_WORD_DATA,
1419};
1420
1421enum msm_actuator_addr_type {
1422	MSM_ACTUATOR_BYTE_ADDR = 1,
1423	MSM_ACTUATOR_WORD_ADDR,
1424};
1425
1426enum msm_actuator_write_type {
1427	MSM_ACTUATOR_WRITE_HW_DAMP,
1428	MSM_ACTUATOR_WRITE_DAC,
1429};
1430
1431struct msm_actuator_reg_params_t {
1432	enum msm_actuator_write_type reg_write_type;
1433	uint32_t hw_mask;
1434	uint16_t reg_addr;
1435	uint16_t hw_shift;
1436	uint16_t data_shift;
1437};
1438
1439struct reg_settings_t {
1440	uint16_t reg_addr;
1441	uint16_t reg_data;
1442};
1443
1444struct region_params_t {
1445	/* [0] = ForwardDirection Macro boundary
1446	   [1] = ReverseDirection Inf boundary
1447	 */
1448	uint16_t step_bound[2];
1449	uint16_t code_per_step;
1450};
1451
1452struct msm_actuator_move_params_t {
1453	int8_t dir;
1454	int8_t sign_dir;
1455	int16_t dest_step_pos;
1456	int32_t num_steps;
1457	struct damping_params_t *ringing_params;
1458};
1459
1460struct msm_actuator_tuning_params_t {
1461	int16_t initial_code;
1462	uint16_t pwd_step;
1463	uint16_t region_size;
1464	uint32_t total_steps;
1465	struct region_params_t *region_params;
1466};
1467
1468struct msm_actuator_params_t {
1469	enum actuator_type act_type;
1470	uint8_t reg_tbl_size;
1471	uint16_t data_size;
1472	uint16_t init_setting_size;
1473	uint32_t i2c_addr;
1474	enum msm_actuator_addr_type i2c_addr_type;
1475	enum msm_actuator_data_type i2c_data_type;
1476	struct msm_actuator_reg_params_t *reg_tbl_params;
1477	struct reg_settings_t *init_settings;
1478};
1479
1480struct msm_actuator_set_info_t {
1481	struct msm_actuator_params_t actuator_params;
1482	struct msm_actuator_tuning_params_t af_tuning_params;
1483};
1484
1485struct msm_actuator_get_info_t {
1486	uint32_t focal_length_num;
1487	uint32_t focal_length_den;
1488	uint32_t f_number_num;
1489	uint32_t f_number_den;
1490	uint32_t f_pix_num;
1491	uint32_t f_pix_den;
1492	uint32_t total_f_dist_num;
1493	uint32_t total_f_dist_den;
1494	uint32_t hor_view_angle_num;
1495	uint32_t hor_view_angle_den;
1496	uint32_t ver_view_angle_num;
1497	uint32_t ver_view_angle_den;
1498};
1499
1500enum af_camera_name {
1501	ACTUATOR_MAIN_CAM_0,
1502	ACTUATOR_MAIN_CAM_1,
1503	ACTUATOR_MAIN_CAM_2,
1504	ACTUATOR_MAIN_CAM_3,
1505	ACTUATOR_MAIN_CAM_4,
1506	ACTUATOR_MAIN_CAM_5,
1507	ACTUATOR_WEB_CAM_0,
1508	ACTUATOR_WEB_CAM_1,
1509	ACTUATOR_WEB_CAM_2,
1510};
1511
1512struct msm_actuator_cfg_data {
1513	int cfgtype;
1514	uint8_t is_af_supported;
1515	union {
1516		struct msm_actuator_move_params_t move;
1517		struct msm_actuator_set_info_t set_info;
1518		struct msm_actuator_get_info_t get_info;
1519		enum af_camera_name cam_name;
1520	} cfg;
1521};
1522
1523struct msm_eeprom_support {
1524	uint16_t is_supported;
1525	uint16_t size;
1526	uint16_t index;
1527	uint16_t qvalue;
1528};
1529
1530struct msm_calib_wb {
1531	uint16_t r_over_g;
1532	uint16_t b_over_g;
1533	uint16_t gr_over_gb;
1534};
1535
1536struct msm_calib_af {
1537	uint16_t macro_dac;
1538	uint16_t inf_dac;
1539	uint16_t start_dac;
1540};
1541
1542struct msm_calib_lsc {
1543	uint16_t r_gain[221];
1544	uint16_t b_gain[221];
1545	uint16_t gr_gain[221];
1546	uint16_t gb_gain[221];
1547};
1548
1549struct pixel_t {
1550	int x;
1551	int y;
1552};
1553
1554struct msm_calib_dpc {
1555	uint16_t validcount;
1556	struct pixel_t snapshot_coord[128];
1557	struct pixel_t preview_coord[128];
1558	struct pixel_t video_coord[128];
1559};
1560
1561struct msm_camera_eeprom_info_t {
1562	struct msm_eeprom_support af;
1563	struct msm_eeprom_support wb;
1564	struct msm_eeprom_support lsc;
1565	struct msm_eeprom_support dpc;
1566};
1567
1568struct msm_eeprom_cfg_data {
1569	int cfgtype;
1570	uint8_t is_eeprom_supported;
1571	union {
1572		struct msm_eeprom_data_t get_data;
1573		struct msm_camera_eeprom_info_t get_info;
1574	} cfg;
1575};
1576
1577struct sensor_large_data {
1578	int cfgtype;
1579	union {
1580		struct sensor_3d_cali_data_t sensor_3d_cali_data;
1581	} data;
1582};
1583
1584enum sensor_type_t {
1585	BAYER,
1586	YUV,
1587	JPEG_SOC,
1588};
1589
1590enum flash_type {
1591	LED_FLASH,
1592	STROBE_FLASH,
1593};
1594
1595enum strobe_flash_ctrl_type {
1596	STROBE_FLASH_CTRL_INIT,
1597	STROBE_FLASH_CTRL_CHARGE,
1598	STROBE_FLASH_CTRL_RELEASE
1599};
1600
1601struct strobe_flash_ctrl_data {
1602	enum strobe_flash_ctrl_type type;
1603	int charge_en;
1604};
1605
1606struct msm_camera_info {
1607	int num_cameras;
1608	uint8_t has_3d_support[MSM_MAX_CAMERA_SENSORS];
1609	uint8_t is_internal_cam[MSM_MAX_CAMERA_SENSORS];
1610	uint32_t s_mount_angle[MSM_MAX_CAMERA_SENSORS];
1611	const char *video_dev_name[MSM_MAX_CAMERA_SENSORS];
1612	enum sensor_type_t sensor_type[MSM_MAX_CAMERA_SENSORS];
1613};
1614
1615struct msm_cam_config_dev_info {
1616	int num_config_nodes;
1617	const char *config_dev_name[MSM_MAX_CAMERA_CONFIGS];
1618	int config_dev_id[MSM_MAX_CAMERA_CONFIGS];
1619};
1620
1621struct msm_mctl_node_info {
1622	int num_mctl_nodes;
1623	const char *mctl_node_name[MSM_MAX_CAMERA_SENSORS];
1624};
1625
1626struct flash_ctrl_data {
1627	int flashtype;
1628	union {
1629		int led_state;
1630		struct strobe_flash_ctrl_data strobe_ctrl;
1631	} ctrl_data;
1632};
1633
1634#define GET_NAME			0
1635#define GET_PREVIEW_LINE_PER_FRAME	1
1636#define GET_PREVIEW_PIXELS_PER_LINE	2
1637#define GET_SNAPSHOT_LINE_PER_FRAME	3
1638#define GET_SNAPSHOT_PIXELS_PER_LINE	4
1639#define GET_SNAPSHOT_FPS		5
1640#define GET_SNAPSHOT_MAX_EP_LINE_CNT	6
1641
1642struct msm_camsensor_info {
1643	char name[MAX_SENSOR_NAME];
1644	uint8_t flash_enabled;
1645	uint8_t strobe_flash_enabled;
1646	uint8_t actuator_enabled;
1647	uint8_t ispif_supported;
1648	int8_t total_steps;
1649	uint8_t support_3d;
1650	enum flash_type flashtype;
1651	enum sensor_type_t sensor_type;
1652	uint32_t pxlcode;	/* enum v4l2_mbus_pixelcode */
1653	uint32_t camera_type;	/* msm_camera_type */
1654	int mount_angle;
1655	uint32_t max_width;
1656	uint32_t max_height;
1657};
1658
1659#define V4L2_SINGLE_PLANE	0
1660#define V4L2_MULTI_PLANE_Y	0
1661#define V4L2_MULTI_PLANE_CBCR	1
1662#define V4L2_MULTI_PLANE_CB	1
1663#define V4L2_MULTI_PLANE_CR	2
1664
1665struct plane_data {
1666	int plane_id;
1667	uint32_t offset;
1668	unsigned long size;
1669};
1670
1671struct img_plane_info {
1672	uint32_t width;
1673	uint32_t height;
1674	uint32_t pixelformat;
1675	uint8_t buffer_type;	/*Single/Multi planar */
1676	uint8_t output_port;
1677	uint32_t ext_mode;
1678	uint8_t num_planes;
1679	struct plane_data plane[MAX_PLANES];
1680	uint32_t sp_y_offset;
1681	uint32_t inst_handle;
1682};
1683
1684#define QCAMERA_NAME "qcamera"
1685#define QCAMERA_SERVER_NAME "qcamera_server"
1686#define QCAMERA_DEVICE_GROUP_ID 1
1687#define QCAMERA_VNODE_GROUP_ID 2
1688
1689enum msm_cam_subdev_type {
1690	CSIPHY_DEV,
1691	CSID_DEV,
1692	CSIC_DEV,
1693	ISPIF_DEV,
1694	VFE_DEV,
1695	AXI_DEV,
1696	VPE_DEV,
1697	SENSOR_DEV,
1698	ACTUATOR_DEV,
1699	EEPROM_DEV,
1700	GESTURE_DEV,
1701	IRQ_ROUTER_DEV,
1702	CPP_DEV,
1703	CCI_DEV,
1704};
1705
1706struct msm_mctl_set_sdev_data {
1707	uint32_t revision;
1708	enum msm_cam_subdev_type sdev_type;
1709};
1710
1711#define MSM_CAM_V4L2_IOCTL_GET_CAMERA_INFO \
1712	_IOWR('V', BASE_VIDIOC_PRIVATE + 1, struct msm_camera_v4l2_ioctl_t)
1713
1714#define MSM_CAM_V4L2_IOCTL_GET_CONFIG_INFO \
1715	_IOWR('V', BASE_VIDIOC_PRIVATE + 2, struct msm_camera_v4l2_ioctl_t)
1716
1717#define MSM_CAM_V4L2_IOCTL_GET_MCTL_INFO \
1718	_IOWR('V', BASE_VIDIOC_PRIVATE + 3, struct msm_camera_v4l2_ioctl_t)
1719
1720#define MSM_CAM_V4L2_IOCTL_CTRL_CMD_DONE \
1721	_IOWR('V', BASE_VIDIOC_PRIVATE + 4, struct msm_camera_v4l2_ioctl_t)
1722
1723#define MSM_CAM_V4L2_IOCTL_GET_EVENT_PAYLOAD \
1724	_IOWR('V', BASE_VIDIOC_PRIVATE + 5, struct msm_camera_v4l2_ioctl_t)
1725
1726#define MSM_CAM_IOCTL_SEND_EVENT \
1727	_IOWR('V', BASE_VIDIOC_PRIVATE + 6, struct v4l2_event)
1728
1729#define MSM_CAM_V4L2_IOCTL_CFG_VPE \
1730	_IOWR('V', BASE_VIDIOC_PRIVATE + 7, struct msm_vpe_cfg_cmd)
1731
1732#define MSM_CAM_V4L2_IOCTL_PRIVATE_S_CTRL \
1733	_IOWR('V', BASE_VIDIOC_PRIVATE + 8, struct msm_camera_v4l2_ioctl_t)
1734
1735#define MSM_CAM_V4L2_IOCTL_PRIVATE_G_CTRL \
1736	_IOWR('V', BASE_VIDIOC_PRIVATE + 9, struct msm_camera_v4l2_ioctl_t)
1737
1738#define VIDIOC_MSM_VPE_INIT \
1739	_IO('V', BASE_VIDIOC_PRIVATE + 15)
1740
1741#define VIDIOC_MSM_VPE_RELEASE \
1742	_IO('V', BASE_VIDIOC_PRIVATE + 16)
1743
1744#define VIDIOC_MSM_VPE_CFG \
1745	_IOWR('V', BASE_VIDIOC_PRIVATE + 17, struct msm_mctl_pp_params *)
1746
1747#define VIDIOC_MSM_AXI_INIT \
1748	_IO('V', BASE_VIDIOC_PRIVATE + 18)
1749
1750#define VIDIOC_MSM_AXI_RELEASE \
1751	_IO('V', BASE_VIDIOC_PRIVATE + 19)
1752
1753#define VIDIOC_MSM_AXI_CFG \
1754	_IOWR('V', BASE_VIDIOC_PRIVATE + 20, void *)
1755
1756#define VIDIOC_MSM_AXI_IRQ \
1757	_IOWR('V', BASE_VIDIOC_PRIVATE + 21, void *)
1758
1759#define VIDIOC_MSM_AXI_BUF_CFG \
1760	_IOWR('V', BASE_VIDIOC_PRIVATE + 22, void *)
1761
1762#define VIDIOC_MSM_VFE_INIT \
1763	_IO('V', BASE_VIDIOC_PRIVATE + 22)
1764
1765#define VIDIOC_MSM_VFE_RELEASE \
1766	_IO('V', BASE_VIDIOC_PRIVATE + 23)
1767
1768struct msm_camera_v4l2_ioctl_t {
1769	uint32_t id;
1770	void __user *ioctl_ptr;
1771	uint32_t len;
1772};
1773
1774struct msm_camera_vfe_params_t {
1775	uint32_t operation_mode;
1776	uint32_t capture_count;
1777	uint32_t skip_abort;
1778	uint16_t port_info;
1779	uint32_t inst_handle;
1780	uint16_t cmd_type;
1781};
1782
1783enum msm_camss_irq_idx {
1784	CAMERA_SS_IRQ_0,
1785	CAMERA_SS_IRQ_1,
1786	CAMERA_SS_IRQ_2,
1787	CAMERA_SS_IRQ_3,
1788	CAMERA_SS_IRQ_4,
1789	CAMERA_SS_IRQ_5,
1790	CAMERA_SS_IRQ_6,
1791	CAMERA_SS_IRQ_7,
1792	CAMERA_SS_IRQ_8,
1793	CAMERA_SS_IRQ_9,
1794	CAMERA_SS_IRQ_10,
1795	CAMERA_SS_IRQ_11,
1796	CAMERA_SS_IRQ_12,
1797	CAMERA_SS_IRQ_MAX
1798};
1799
1800enum msm_cam_hw_idx {
1801	MSM_CAM_HW_MICRO,
1802	MSM_CAM_HW_CCI,
1803	MSM_CAM_HW_CSI0,
1804	MSM_CAM_HW_CSI1,
1805	MSM_CAM_HW_CSI2,
1806	MSM_CAM_HW_CSI3,
1807	MSM_CAM_HW_ISPIF,
1808	MSM_CAM_HW_CPP,
1809	MSM_CAM_HW_VFE0,
1810	MSM_CAM_HW_VFE1,
1811	MSM_CAM_HW_JPEG0,
1812	MSM_CAM_HW_JPEG1,
1813	MSM_CAM_HW_JPEG2,
1814	MSM_CAM_HW_MAX
1815};
1816
1817struct msm_camera_irq_cfg {
1818	/* Bit mask of all the camera hardwares that needs to
1819	 * be composited into a single IRQ to the MSM.
1820	 * Current usage: (may be updated based on hw changes)
1821	 * Bits 31:13 - Reserved.
1822	 * Bits 12:0
1823	 * 12 - MSM_CAM_HW_JPEG2
1824	 * 11 - MSM_CAM_HW_JPEG1
1825	 * 10 - MSM_CAM_HW_JPEG0
1826	 *  9 - MSM_CAM_HW_VFE1
1827	 *  8 - MSM_CAM_HW_VFE0
1828	 *  7 - MSM_CAM_HW_CPP
1829	 *  6 - MSM_CAM_HW_ISPIF
1830	 *  5 - MSM_CAM_HW_CSI3
1831	 *  4 - MSM_CAM_HW_CSI2
1832	 *  3 - MSM_CAM_HW_CSI1
1833	 *  2 - MSM_CAM_HW_CSI0
1834	 *  1 - MSM_CAM_HW_CCI
1835	 *  0 - MSM_CAM_HW_MICRO
1836	 */
1837	uint32_t cam_hw_mask;
1838	uint8_t irq_idx;
1839	uint8_t num_hwcore;
1840};
1841
1842#define MSM_IRQROUTER_CFG_COMPIRQ \
1843	_IOWR('V', BASE_VIDIOC_PRIVATE, void __user *)
1844
1845#define MAX_NUM_CPP_STRIPS 8
1846
1847enum msm_cpp_frame_type {
1848	MSM_CPP_OFFLINE_FRAME,
1849	MSM_CPP_REALTIME_FRAME,
1850};
1851
1852struct msm_cpp_frame_strip_info {
1853	int scale_v_en;
1854	int scale_h_en;
1855
1856	int upscale_v_en;
1857	int upscale_h_en;
1858
1859	int src_start_x;
1860	int src_end_x;
1861	int src_start_y;
1862	int src_end_y;
1863
1864	/* Padding is required for upscaler because it does not
1865	 * pad internally like other blocks, also needed for rotation
1866	 * rotation expects all the blocks in the stripe to be the same size
1867	 * Padding is done such that all the extra padded pixels
1868	 * are on the right and bottom
1869	 */
1870	int pad_bottom;
1871	int pad_top;
1872	int pad_right;
1873	int pad_left;
1874
1875	int v_init_phase;
1876	int h_init_phase;
1877	int h_phase_step;
1878	int v_phase_step;
1879
1880	int prescale_crop_width_first_pixel;
1881	int prescale_crop_width_last_pixel;
1882	int prescale_crop_height_first_line;
1883	int prescale_crop_height_last_line;
1884
1885	int postscale_crop_height_first_line;
1886	int postscale_crop_height_last_line;
1887	int postscale_crop_width_first_pixel;
1888	int postscale_crop_width_last_pixel;
1889
1890	int dst_start_x;
1891	int dst_end_x;
1892	int dst_start_y;
1893	int dst_end_y;
1894
1895	int bytes_per_pixel;
1896	unsigned int source_address;
1897	unsigned int destination_address;
1898	unsigned int src_stride;
1899	unsigned int dst_stride;
1900	int rotate_270;
1901	int horizontal_flip;
1902	int vertical_flip;
1903	int scale_output_width;
1904	int scale_output_height;
1905};
1906
1907struct msm_cpp_frame_info_t {
1908	int32_t frame_id;
1909	uint32_t inst_id;
1910	uint32_t client_id;
1911	enum msm_cpp_frame_type frame_type;
1912	uint32_t num_strips;
1913	struct msm_cpp_frame_strip_info *strip_info;
1914};
1915
1916struct msm_ver_num_info {
1917	uint32_t main;
1918	uint32_t minor;
1919	uint32_t rev;
1920};
1921
1922#define VIDIOC_MSM_CPP_CFG \
1923	_IOWR('V', BASE_VIDIOC_PRIVATE, struct msm_camera_v4l2_ioctl_t)
1924
1925#define VIDIOC_MSM_CPP_GET_EVENTPAYLOAD \
1926	_IOWR('V', BASE_VIDIOC_PRIVATE + 1, struct msm_camera_v4l2_ioctl_t)
1927
1928#define VIDIOC_MSM_CPP_GET_INST_INFO \
1929	_IOWR('V', BASE_VIDIOC_PRIVATE + 2, struct msm_camera_v4l2_ioctl_t)
1930
1931#define V4L2_EVENT_CPP_FRAME_DONE  (V4L2_EVENT_PRIVATE_START + 0)
1932
1933/* Instance Handle - inst_handle
1934 * Data bundle containing the information about where
1935 * to get a buffer for a particular camera instance.
1936 * This is a bitmask containing the following data:
1937 * Buffer Handle Bitmask:
1938 *      ------------------------------------
1939 *      Bits    :  Purpose
1940 *      ------------------------------------
1941 *      31 - 24 :  Reserved.
1942 *      23      :  is Image mode valid?
1943 *      22 - 16 :  Image mode.
1944 *      15      :  is MCTL PP inst idx valid?
1945 *      14 - 8  :  MCTL PP inst idx.
1946 *      7       :  is Video inst idx valid?
1947 *      6 - 0   :  Video inst idx.
1948 */
1949#define CLR_IMG_MODE(handle)	(handle &= 0xFF00FFFF)
1950#define SET_IMG_MODE(handle, data)	\
1951	(handle |= ((0x1 << 23) | ((data & 0x7F) << 16)))
1952#define GET_IMG_MODE(handle)	\
1953	((handle & 0x800000) ? ((handle & 0x7F0000) >> 16) : 0xFF)
1954
1955#define CLR_MCTLPP_INST_IDX(handle)	(handle &= 0xFFFF00FF)
1956#define SET_MCTLPP_INST_IDX(handle, data)	\
1957	(handle |= ((0x1 << 15) | ((data & 0x7F) << 8)))
1958#define GET_MCTLPP_INST_IDX(handle)	\
1959	((handle & 0x8000) ? ((handle & 0x7F00) >> 8) : 0xFF)
1960
1961#define CLR_VIDEO_INST_IDX(handle)	(handle &= 0xFFFFFF00)
1962#define GET_VIDEO_INST_IDX(handle)	\
1963	((handle & 0x80) ? (handle & 0x7F) : 0xFF)
1964#define SET_VIDEO_INST_IDX(handle, data)	\
1965	(handle |= (0x1 << 7) | (data & 0x7F))
1966
1967#endif /* __LINUX_MSM_CAMERA_H */
1968