blob: 588fd07f631379ce3236a34325a9da51463959c0 [file] [log] [blame]
Kiran Kumar H Ndd128472011-12-01 09:35:34 -08001/* Copyright (c) 2009-2012, 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 */
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -070013#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>
Philippe Gravel4a3b9422012-03-23 14:21:04 -070021#ifdef __KERNEL__
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -070022#include <linux/cdev.h>
Philippe Gravel4a3b9422012-03-23 14:21:04 -070023#endif
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -070024#ifdef MSM_CAMERA_GCC
25#include <time.h>
26#else
27#include <linux/time.h>
28#endif
29
Ankit Premrajka3e90b9f2011-11-01 18:48:45 -070030#include <linux/ion.h>
Philippe Gravel4a3b9422012-03-23 14:21:04 -070031
Nishant Pandit5dd54422012-06-26 22:52:44 +053032#define BIT(nr) (1UL << (nr))
33
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -070034#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
Mansoor Aftab5d418372011-07-26 17:01:26 -0700153#define MSM_CAM_IOCTL_V4L2_EVT_NOTIFY \
Kevin Chan94b4c832012-03-02 21:27:16 -0800154 _IOR(MSM_CAM_IOCTL_MAGIC, 40, struct v4l2_event *)
Mansoor Aftab5d418372011-07-26 17:01:26 -0700155
Mingcheng Zhu9559ee42011-08-09 11:54:22 -0700156#define MSM_CAM_IOCTL_SET_MEM_MAP_INFO \
Kevin Chan94b4c832012-03-02 21:27:16 -0800157 _IOR(MSM_CAM_IOCTL_MAGIC, 41, struct msm_mem_map_info *)
Mingcheng Zhu9559ee42011-08-09 11:54:22 -0700158
Sreesudhan Ramakrish Ramkumara4b5f302011-09-12 16:23:22 -0700159#define MSM_CAM_IOCTL_ACTUATOR_IO_CFG \
Kevin Chan94b4c832012-03-02 21:27:16 -0800160 _IOW(MSM_CAM_IOCTL_MAGIC, 42, struct msm_actuator_cfg_data *)
Sreesudhan Ramakrish Ramkumara4b5f302011-09-12 16:23:22 -0700161
Mingcheng Zhu8e9f99e2011-08-26 16:33:32 -0700162#define MSM_CAM_IOCTL_MCTL_POST_PROC \
Kevin Chan94b4c832012-03-02 21:27:16 -0800163 _IOW(MSM_CAM_IOCTL_MAGIC, 43, struct msm_mctl_post_proc_cmd *)
Mingcheng Zhu8e9f99e2011-08-26 16:33:32 -0700164
165#define MSM_CAM_IOCTL_RESERVE_FREE_FRAME \
Kevin Chan94b4c832012-03-02 21:27:16 -0800166 _IOW(MSM_CAM_IOCTL_MAGIC, 44, struct msm_cam_evt_divert_frame *)
Mingcheng Zhu8e9f99e2011-08-26 16:33:32 -0700167
168#define MSM_CAM_IOCTL_RELEASE_FREE_FRAME \
Kevin Chan94b4c832012-03-02 21:27:16 -0800169 _IOR(MSM_CAM_IOCTL_MAGIC, 45, struct msm_cam_evt_divert_frame *)
Mingcheng Zhu8e9f99e2011-08-26 16:33:32 -0700170
Mingcheng Zhu8feaa3f2011-11-23 11:33:52 -0800171#define MSM_CAM_IOCTL_PICT_PP_DIVERT_DONE \
Kevin Chan94b4c832012-03-02 21:27:16 -0800172 _IOR(MSM_CAM_IOCTL_MAGIC, 46, struct msm_pp_frame *)
Mingcheng Zhu8feaa3f2011-11-23 11:33:52 -0800173
Rajakumar Govindaram6bc004a2011-12-05 20:58:19 -0800174#define MSM_CAM_IOCTL_SENSOR_V4l2_S_CTRL \
Kevin Chan94b4c832012-03-02 21:27:16 -0800175 _IOR(MSM_CAM_IOCTL_MAGIC, 47, struct v4l2_control)
Rajakumar Govindaram6bc004a2011-12-05 20:58:19 -0800176
177#define MSM_CAM_IOCTL_SENSOR_V4l2_QUERY_CTRL \
Kevin Chan94b4c832012-03-02 21:27:16 -0800178 _IOR(MSM_CAM_IOCTL_MAGIC, 48, struct v4l2_queryctrl)
Rajakumar Govindaram6bc004a2011-12-05 20:58:19 -0800179
Guruprasad Gaonkar4c7758f2011-12-16 17:30:00 -0800180#define MSM_CAM_IOCTL_GET_KERNEL_SYSTEM_TIME \
Kevin Chan94b4c832012-03-02 21:27:16 -0800181 _IOW(MSM_CAM_IOCTL_MAGIC, 49, struct timeval *)
Guruprasad Gaonkar4c7758f2011-12-16 17:30:00 -0800182
Kiran Kumar H Ndd128472011-12-01 09:35:34 -0800183#define MSM_CAM_IOCTL_SET_VFE_OUTPUT_TYPE \
Kevin Chan94b4c832012-03-02 21:27:16 -0800184 _IOW(MSM_CAM_IOCTL_MAGIC, 50, uint32_t *)
Kiran Kumar H Nc3cb9ea2012-01-06 15:11:10 -0800185
186#define MSM_CAM_IOCTL_MCTL_DIVERT_DONE \
Kevin Chan94b4c832012-03-02 21:27:16 -0800187 _IOR(MSM_CAM_IOCTL_MAGIC, 51, struct msm_cam_evt_divert_frame *)
Kiran Kumar H Nc3cb9ea2012-01-06 15:11:10 -0800188
Rajakumar Govindaram6627b362012-01-29 19:00:30 -0800189#define MSM_CAM_IOCTL_GET_ACTUATOR_INFO \
Kevin Chan94b4c832012-03-02 21:27:16 -0800190 _IOW(MSM_CAM_IOCTL_MAGIC, 52, struct msm_actuator_cfg_data *)
Rajakumar Govindaram6627b362012-01-29 19:00:30 -0800191
Jeyaprakash Soundrapandian734476b2012-05-03 20:08:15 -0700192#define MSM_CAM_IOCTL_EEPROM_IO_CFG \
193 _IOW(MSM_CAM_IOCTL_MAGIC, 53, struct msm_eeprom_cfg_data *)
194
Nishant Panditb2157c92012-04-25 01:09:28 +0530195#define MSM_CAM_IOCTL_ISPIF_IO_CFG \
196 _IOR(MSM_CAM_IOCTL_MAGIC, 54, struct ispif_cfg_data *)
197
Lakshmi Narayana Kalavala2db33842012-06-26 22:41:32 -0700198#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
Ankit Premrajka4b3443f2012-06-11 14:06:31 -0700207#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
Kiran Kumar H N90785902012-07-05 13:59:38 -0700213#define MSM_CAM_IOCTL_GET_INST_HANDLE \
214 _IOR(MSM_CAM_IOCTL_MAGIC, 60, uint32_t *)
215
Lakshmi Narayana Kalavala58243db2012-07-24 00:06:27 -0700216#define MSM_CAM_IOCTL_STATS_UNREG_BUF \
217 _IOR(MSM_CAM_IOCTL_MAGIC, 61, struct msm_stats_flush_bufq *)
218
219
Lakshmi Narayana Kalavala2db33842012-06-26 22:41:32 -0700220struct msm_stats_reqbuf {
221 int num_buf; /* how many buffers requested */
222 int stats_type; /* stats type */
223};
224
225struct msm_stats_flush_bufq {
226 int stats_type; /* enum msm_stats_enum_type */
227};
228
Mingcheng Zhu8e9f99e2011-08-26 16:33:32 -0700229struct msm_mctl_pp_cmd {
230 int32_t id;
231 uint16_t length;
232 void *value;
233};
234
235struct msm_mctl_post_proc_cmd {
236 int32_t type;
237 struct msm_mctl_pp_cmd cmd;
238};
239
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700240#define MSM_CAMERA_LED_OFF 0
241#define MSM_CAMERA_LED_LOW 1
242#define MSM_CAMERA_LED_HIGH 2
Nishant Pandit474f2252011-07-23 23:17:56 +0530243#define MSM_CAMERA_LED_INIT 3
244#define MSM_CAMERA_LED_RELEASE 4
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700245
246#define MSM_CAMERA_STROBE_FLASH_NONE 0
247#define MSM_CAMERA_STROBE_FLASH_XENON 1
248
249#define MSM_MAX_CAMERA_SENSORS 5
250#define MAX_SENSOR_NAME 32
Rajakumar Govindaram6627b362012-01-29 19:00:30 -0800251#define MAX_CAM_NAME_SIZE 32
252#define MAX_ACT_MOD_NAME_SIZE 32
253#define MAX_ACT_NAME_SIZE 32
254#define NUM_ACTUATOR_DIR 2
255#define MAX_ACTUATOR_SCENARIO 8
256#define MAX_ACTUATOR_REGION 5
257#define MAX_ACTUATOR_INIT_SET 12
258#define MAX_ACTUATOR_TYPE_SIZE 32
259#define MAX_ACTUATOR_REG_TBL_SIZE 8
260
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700261
262#define MSM_MAX_CAMERA_CONFIGS 2
263
264#define PP_SNAP 0x01
265#define PP_RAW_SNAP ((0x01)<<1)
266#define PP_PREV ((0x01)<<2)
Ankit Premrajka70613ec2012-01-26 16:24:23 -0800267#define PP_THUMB ((0x01)<<3)
268#define PP_MASK (PP_SNAP|PP_RAW_SNAP|PP_PREV|PP_THUMB)
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700269
270#define MSM_CAM_CTRL_CMD_DONE 0
271#define MSM_CAM_SENSOR_VFE_CMD 1
272
Kiran Kumar H Nceea7622011-08-23 14:01:03 -0700273/* Should be same as VIDEO_MAX_PLANES in videodev2.h */
274#define MAX_PLANES 8
275
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700276/*****************************************************
277 * structure
278 *****************************************************/
279
280/* define five type of structures for userspace <==> kernel
281 * space communication:
282 * command 1 - 2 are from userspace ==> kernel
283 * command 3 - 4 are from kernel ==> userspace
284 *
285 * 1. control command: control command(from control thread),
286 * control status (from config thread);
287 */
288struct msm_ctrl_cmd {
289 uint16_t type;
290 uint16_t length;
291 void *value;
292 uint16_t status;
293 uint32_t timeout_ms;
294 int resp_fd; /* FIXME: to be used by the kernel, pass-through for now */
295 int vnode_id; /* video dev id. Can we overload resp_fd? */
Kevin Chan94b4c832012-03-02 21:27:16 -0800296 int queue_idx;
297 uint32_t evt_id;
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700298 uint32_t stream_type; /* used to pass value to qcamera server */
Ankit Premrajkaf94bcc62011-08-22 15:23:53 -0700299 int config_ident; /*used as identifier for config node*/
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700300};
301
302struct msm_cam_evt_msg {
303 unsigned short type; /* 1 == event (RPC), 0 == message (adsp) */
304 unsigned short msg_id;
305 unsigned int len; /* size in, number of bytes out */
306 uint32_t frame_id;
307 void *data;
Ninad Mahimkaree55c192012-04-25 14:36:17 -0700308 struct timespec timestamp;
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700309};
310
Kiran Kumar H Ncd7bc3b2011-10-12 16:14:48 -0700311struct msm_pp_frame_sp {
312 /* phy addr of the buffer */
313 unsigned long phy_addr;
314 uint32_t y_off;
315 uint32_t cbcr_off;
316 /* buffer length */
317 uint32_t length;
318 int32_t fd;
319 uint32_t addr_offset;
320 /* mapped addr */
321 unsigned long vaddr;
322};
323
324struct msm_pp_frame_mp {
325 /* phy addr of the plane */
326 unsigned long phy_addr;
327 /* offset of plane data */
328 uint32_t data_offset;
329 /* plane length */
330 uint32_t length;
331 int32_t fd;
332 uint32_t addr_offset;
333 /* mapped addr */
334 unsigned long vaddr;
335};
336
337struct msm_pp_frame {
338 uint32_t handle; /* stores vb cookie */
339 uint32_t frame_id;
Kevin Chan318d7cb2011-11-29 14:24:26 -0800340 unsigned short buf_idx;
Kiran Kumar H Ncd7bc3b2011-10-12 16:14:48 -0700341 int path;
342 unsigned short image_type;
343 unsigned short num_planes; /* 1 for sp */
344 struct timeval timestamp;
345 union {
346 struct msm_pp_frame_sp sp;
347 struct msm_pp_frame_mp mp[MAX_PLANES];
348 };
Ankit Premrajka70613ec2012-01-26 16:24:23 -0800349 int node_type;
Kiran Kumar H N90785902012-07-05 13:59:38 -0700350 uint32_t inst_handle;
Kiran Kumar H Ncd7bc3b2011-10-12 16:14:48 -0700351};
352
Mingcheng Zhu49505502011-07-19 20:44:36 -0700353struct msm_cam_evt_divert_frame {
Mingcheng Zhu5b04d352011-07-22 21:18:42 -0700354 unsigned short image_mode;
355 unsigned short op_mode;
Mingcheng Zhu49505502011-07-19 20:44:36 -0700356 unsigned short inst_idx;
357 unsigned short node_idx;
Kiran Kumar H Ncd7bc3b2011-10-12 16:14:48 -0700358 struct msm_pp_frame frame;
Mingcheng Zhu8e9f99e2011-08-26 16:33:32 -0700359 int do_pp;
Mingcheng Zhu49505502011-07-19 20:44:36 -0700360};
361
Kiran Kumar H N0b517802011-10-05 09:49:51 -0700362struct msm_mctl_pp_cmd_ack_event {
363 uint32_t cmd; /* VPE_CMD_ZOOM? */
364 int status; /* 0 done, < 0 err */
365 uint32_t cookie; /* daemon's cookie */
366};
367
368struct msm_mctl_pp_event_info {
369 int32_t event;
370 union {
371 struct msm_mctl_pp_cmd_ack_event ack;
372 };
373};
374
375struct msm_isp_event_ctrl {
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700376 unsigned short resptype;
377 union {
378 struct msm_cam_evt_msg isp_msg;
379 struct msm_ctrl_cmd ctrl;
Kiran Kumar H N0b517802011-10-05 09:49:51 -0700380 struct msm_cam_evt_divert_frame div_frame;
381 struct msm_mctl_pp_event_info pp_event_info;
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700382 } isp_data;
383};
384
Mingcheng Zhu8e9f99e2011-08-26 16:33:32 -0700385#define MSM_CAM_RESP_CTRL 0
386#define MSM_CAM_RESP_STAT_EVT_MSG 1
387#define MSM_CAM_RESP_STEREO_OP_1 2
388#define MSM_CAM_RESP_STEREO_OP_2 3
389#define MSM_CAM_RESP_V4L2 4
Mingcheng Zhu49505502011-07-19 20:44:36 -0700390#define MSM_CAM_RESP_DIV_FRAME_EVT_MSG 5
Mingcheng Zhu8e9f99e2011-08-26 16:33:32 -0700391#define MSM_CAM_RESP_DONE_EVENT 6
392#define MSM_CAM_RESP_MCTL_PP_EVENT 7
393#define MSM_CAM_RESP_MAX 8
Mingcheng Zhu49505502011-07-19 20:44:36 -0700394
Mingcheng Zhu270813a2011-08-10 17:23:18 -0700395#define MSM_CAM_APP_NOTIFY_EVENT 0
Kevin Chan4bb6ead2012-02-29 01:01:41 -0800396#define MSM_CAM_APP_NOTIFY_ERROR_EVENT 1
Mingcheng Zhu8e9f99e2011-08-26 16:33:32 -0700397
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700398/* this one is used to send ctrl/status up to config thread */
Mingcheng Zhu8e9f99e2011-08-26 16:33:32 -0700399
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700400struct msm_stats_event_ctrl {
401 /* 0 - ctrl_cmd from control thread,
402 * 1 - stats/event kernel,
403 * 2 - V4L control or read request */
404 int resptype;
405 int timeout_ms;
406 struct msm_ctrl_cmd ctrl_cmd;
407 /* struct vfe_event_t stats_event; */
408 struct msm_cam_evt_msg stats_event;
409};
410
411/* 2. config command: config command(from config thread); */
412struct msm_camera_cfg_cmd {
413 /* what to config:
414 * 1 - sensor config, 2 - vfe config */
415 uint16_t cfg_type;
416
417 /* sensor config type */
418 uint16_t cmd_type;
419 uint16_t queue;
420 uint16_t length;
421 void *value;
422};
423
424#define CMD_GENERAL 0
425#define CMD_AXI_CFG_OUT1 1
426#define CMD_AXI_CFG_SNAP_O1_AND_O2 2
427#define CMD_AXI_CFG_OUT2 3
428#define CMD_PICT_T_AXI_CFG 4
429#define CMD_PICT_M_AXI_CFG 5
430#define CMD_RAW_PICT_AXI_CFG 6
431
432#define CMD_FRAME_BUF_RELEASE 7
433#define CMD_PREV_BUF_CFG 8
434#define CMD_SNAP_BUF_RELEASE 9
435#define CMD_SNAP_BUF_CFG 10
436#define CMD_STATS_DISABLE 11
437#define CMD_STATS_AEC_AWB_ENABLE 12
438#define CMD_STATS_AF_ENABLE 13
439#define CMD_STATS_AEC_ENABLE 14
440#define CMD_STATS_AWB_ENABLE 15
441#define CMD_STATS_ENABLE 16
442
443#define CMD_STATS_AXI_CFG 17
444#define CMD_STATS_AEC_AXI_CFG 18
445#define CMD_STATS_AF_AXI_CFG 19
446#define CMD_STATS_AWB_AXI_CFG 20
447#define CMD_STATS_RS_AXI_CFG 21
448#define CMD_STATS_CS_AXI_CFG 22
449#define CMD_STATS_IHIST_AXI_CFG 23
450#define CMD_STATS_SKIN_AXI_CFG 24
451
452#define CMD_STATS_BUF_RELEASE 25
453#define CMD_STATS_AEC_BUF_RELEASE 26
454#define CMD_STATS_AF_BUF_RELEASE 27
455#define CMD_STATS_AWB_BUF_RELEASE 28
456#define CMD_STATS_RS_BUF_RELEASE 29
457#define CMD_STATS_CS_BUF_RELEASE 30
458#define CMD_STATS_IHIST_BUF_RELEASE 31
459#define CMD_STATS_SKIN_BUF_RELEASE 32
460
461#define UPDATE_STATS_INVALID 33
462#define CMD_AXI_CFG_SNAP_GEMINI 34
463#define CMD_AXI_CFG_SNAP 35
464#define CMD_AXI_CFG_PREVIEW 36
465#define CMD_AXI_CFG_VIDEO 37
466
467#define CMD_STATS_IHIST_ENABLE 38
468#define CMD_STATS_RS_ENABLE 39
469#define CMD_STATS_CS_ENABLE 40
470#define CMD_VPE 41
471#define CMD_AXI_CFG_VPE 42
472#define CMD_AXI_CFG_ZSL 43
473#define CMD_AXI_CFG_SNAP_VPE 44
474#define CMD_AXI_CFG_SNAP_THUMB_VPE 45
Lakshmi Narayana Kalavalabc315ea2012-07-24 09:55:48 -0700475
Alekhya,Monikafc81e102011-12-29 15:17:33 +0530476#define CMD_CONFIG_PING_ADDR 46
477#define CMD_CONFIG_PONG_ADDR 47
478#define CMD_CONFIG_FREE_BUF_ADDR 48
479#define CMD_AXI_CFG_ZSL_ALL_CHNLS 49
480#define CMD_AXI_CFG_VIDEO_ALL_CHNLS 50
Suresh Vankadara055cb8e2012-01-18 00:50:04 +0530481#define CMD_VFE_BUFFER_RELEASE 51
Kevin Chancf264862012-04-19 19:10:38 -0700482#define CMD_VFE_PROCESS_IRQ 52
Lakshmi Narayana Kalavalabc315ea2012-07-24 09:55:48 -0700483#define CMD_STATS_BG_ENABLE 53
484#define CMD_STATS_BF_ENABLE 54
485#define CMD_STATS_BHIST_ENABLE 55
486#define CMD_STATS_BG_BUF_RELEASE 56
487#define CMD_STATS_BF_BUF_RELEASE 57
488#define CMD_STATS_BHIST_BUF_RELEASE 58
Peter Liud34791b2012-06-11 18:47:36 -0700489#define CMD_VFE_SOF_COUNT_UPDATE 59
490#define CMD_VFE_COUNT_SOF_ENABLE 60
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700491
Nishant Pandit5dd54422012-06-26 22:52:44 +0530492#define CMD_AXI_CFG_PRIM BIT(8)
493#define CMD_AXI_CFG_PRIM_ALL_CHNLS BIT(9)
494#define CMD_AXI_CFG_SEC BIT(10)
495#define CMD_AXI_CFG_SEC_ALL_CHNLS BIT(11)
496#define CMD_AXI_CFG_TERT1 BIT(12)
497#define CMD_AXI_CFG_TERT2 BIT(13)
Kiran Kumar H Ndd128472011-12-01 09:35:34 -0800498
Azam Sadiq Pasha Kapatrala Syed7c815182012-05-31 19:28:09 -0700499#define CMD_AXI_START 0xE1
500#define CMD_AXI_STOP 0xE2
Shuzhen Wang109c2112012-07-23 17:28:11 -0700501#define CMD_AXI_RESET 0xE3
Azam Sadiq Pasha Kapatrala Syed7c815182012-05-31 19:28:09 -0700502
Lakshmi Narayana Kalavalacd3d81e2012-07-31 13:04:03 -0700503
504#define AXI_CMD_PREVIEW BIT(0)
505#define AXI_CMD_CAPTURE BIT(1)
506#define AXI_CMD_RECORD BIT(2)
507#define AXI_CMD_ZSL BIT(3)
508#define AXI_CMD_RAW_CAPTURE BIT(4)
509
510
511
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700512/* vfe config command: config command(from config thread)*/
513struct msm_vfe_cfg_cmd {
514 int cmd_type;
515 uint16_t length;
516 void *value;
517};
518
519struct msm_vpe_cfg_cmd {
520 int cmd_type;
521 uint16_t length;
522 void *value;
523};
524
525#define MAX_CAMERA_ENABLE_NAME_LEN 32
526struct camera_enable_cmd {
527 char name[MAX_CAMERA_ENABLE_NAME_LEN];
528};
529
530#define MSM_PMEM_OUTPUT1 0
531#define MSM_PMEM_OUTPUT2 1
532#define MSM_PMEM_OUTPUT1_OUTPUT2 2
533#define MSM_PMEM_THUMBNAIL 3
534#define MSM_PMEM_MAINIMG 4
535#define MSM_PMEM_RAW_MAINIMG 5
536#define MSM_PMEM_AEC_AWB 6
537#define MSM_PMEM_AF 7
538#define MSM_PMEM_AEC 8
539#define MSM_PMEM_AWB 9
540#define MSM_PMEM_RS 10
541#define MSM_PMEM_CS 11
542#define MSM_PMEM_IHIST 12
543#define MSM_PMEM_SKIN 13
544#define MSM_PMEM_VIDEO 14
545#define MSM_PMEM_PREVIEW 15
546#define MSM_PMEM_VIDEO_VPE 16
547#define MSM_PMEM_C2D 17
548#define MSM_PMEM_MAINIMG_VPE 18
549#define MSM_PMEM_THUMBNAIL_VPE 19
Lakshmi Narayana Kalavalabc315ea2012-07-24 09:55:48 -0700550#define MSM_PMEM_BAYER_GRID 20
551#define MSM_PMEM_BAYER_FOCUS 21
552#define MSM_PMEM_BAYER_HIST 22
553#define MSM_PMEM_MAX 23
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700554
555#define STAT_AEAW 0
556#define STAT_AEC 1
557#define STAT_AF 2
558#define STAT_AWB 3
559#define STAT_RS 4
560#define STAT_CS 5
561#define STAT_IHIST 6
562#define STAT_SKIN 7
Lakshmi Narayana Kalavalabc315ea2012-07-24 09:55:48 -0700563#define STAT_BG 8
564#define STAT_BF 9
565#define STAT_BHIST 10
566#define STAT_MAX 11
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700567
568#define FRAME_PREVIEW_OUTPUT1 0
569#define FRAME_PREVIEW_OUTPUT2 1
570#define FRAME_SNAPSHOT 2
571#define FRAME_THUMBNAIL 3
572#define FRAME_RAW_SNAPSHOT 4
573#define FRAME_MAX 5
574
Lakshmi Narayana Kalavala2db33842012-06-26 22:41:32 -0700575enum msm_stats_enum_type {
576 MSM_STATS_TYPE_AEC, /* legacy based AEC */
577 MSM_STATS_TYPE_AF, /* legacy based AF */
578 MSM_STATS_TYPE_AWB, /* legacy based AWB */
579 MSM_STATS_TYPE_RS, /* legacy based RS */
580 MSM_STATS_TYPE_CS, /* legacy based CS */
581 MSM_STATS_TYPE_IHIST, /* legacy based HIST */
582 MSM_STATS_TYPE_SKIN, /* legacy based SKIN */
583 MSM_STATS_TYPE_BG, /* Bayer Grids */
584 MSM_STATS_TYPE_BF, /* Bayer Focus */
585 MSM_STATS_TYPE_BHIST, /* Bayer Hist */
586 MSM_STATS_TYPE_AE_AW, /* legacy stats for vfe 2.x*/
587 MSM_STATS_TYPE_MAX /* MAX */
588};
589
590struct msm_stats_buf_info {
591 int type; /* msm_stats_enum_type */
592 int fd;
593 void *vaddr;
594 uint32_t offset;
595 uint32_t len;
596 uint32_t y_off;
597 uint32_t cbcr_off;
598 uint32_t planar0_off;
599 uint32_t planar1_off;
600 uint32_t planar2_off;
601 uint8_t active;
602 int buf_idx;
603};
604
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700605struct msm_pmem_info {
606 int type;
607 int fd;
608 void *vaddr;
609 uint32_t offset;
610 uint32_t len;
Kiran Kumar H N5a19c682011-07-23 11:34:34 -0700611 uint32_t y_off;
612 uint32_t cbcr_off;
Alekhya,Monikafc81e102011-12-29 15:17:33 +0530613 uint32_t planar0_off;
614 uint32_t planar1_off;
615 uint32_t planar2_off;
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700616 uint8_t active;
617};
618
619struct outputCfg {
620 uint32_t height;
621 uint32_t width;
622
623 uint32_t window_height_firstline;
624 uint32_t window_height_lastline;
625};
626
Ankit Premrajka70613ec2012-01-26 16:24:23 -0800627#define VIDEO_NODE 0
628#define MCTL_NODE 1
629
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700630#define OUTPUT_1 0
631#define OUTPUT_2 1
632#define OUTPUT_1_AND_2 2 /* snapshot only */
633#define OUTPUT_1_AND_3 3 /* video */
634#define CAMIF_TO_AXI_VIA_OUTPUT_2 4
635#define OUTPUT_1_AND_CAMIF_TO_AXI_VIA_OUTPUT_2 5
636#define OUTPUT_2_AND_CAMIF_TO_AXI_VIA_OUTPUT_1 6
637#define OUTPUT_1_2_AND_3 7
Kiran Kumar H N4cff94a2011-10-17 11:37:33 -0700638#define OUTPUT_ALL_CHNLS 8
Alekhya,Monikafc81e102011-12-29 15:17:33 +0530639#define OUTPUT_VIDEO_ALL_CHNLS 9
640#define OUTPUT_ZSL_ALL_CHNLS 10
641#define LAST_AXI_OUTPUT_MODE_ENUM = OUTPUT_ZSL_ALL_CHNLS
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700642
Nishant Pandit5dd54422012-06-26 22:52:44 +0530643#define OUTPUT_PRIM BIT(8)
644#define OUTPUT_PRIM_ALL_CHNLS BIT(9)
645#define OUTPUT_SEC BIT(10)
646#define OUTPUT_SEC_ALL_CHNLS BIT(11)
647#define OUTPUT_TERT1 BIT(12)
648#define OUTPUT_TERT2 BIT(13)
649
Kiran Kumar H Ndd128472011-12-01 09:35:34 -0800650
651
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700652#define MSM_FRAME_PREV_1 0
653#define MSM_FRAME_PREV_2 1
654#define MSM_FRAME_ENC 2
655
Nishant Pandit5dd54422012-06-26 22:52:44 +0530656#define OUTPUT_TYPE_P BIT(0)
657#define OUTPUT_TYPE_T BIT(1)
658#define OUTPUT_TYPE_S BIT(2)
659#define OUTPUT_TYPE_V BIT(3)
660#define OUTPUT_TYPE_L BIT(4)
661#define OUTPUT_TYPE_ST_L BIT(5)
662#define OUTPUT_TYPE_ST_R BIT(6)
663#define OUTPUT_TYPE_ST_D BIT(7)
664#define OUTPUT_TYPE_R BIT(8)
665#define OUTPUT_TYPE_R1 BIT(9)
666
667
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700668
669struct fd_roi_info {
670 void *info;
671 int info_len;
672};
673
Mingcheng Zhu9559ee42011-08-09 11:54:22 -0700674struct msm_mem_map_info {
675 uint32_t cookie;
676 uint32_t length;
Mingcheng Zhufe7abc02011-08-09 13:27:39 -0700677 uint32_t mem_type;
Mingcheng Zhu9559ee42011-08-09 11:54:22 -0700678};
679
Mingcheng Zhu49505502011-07-19 20:44:36 -0700680#define MSM_MEM_MMAP 0
681#define MSM_MEM_USERPTR 1
682#define MSM_PLANE_MAX 8
683#define MSM_PLANE_Y 0
684#define MSM_PLANE_UV 1
685
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700686struct msm_frame {
687 struct timespec ts;
688 int path;
689 int type;
690 unsigned long buffer;
691 uint32_t phy_offset;
Kiran Kumar H N5a19c682011-07-23 11:34:34 -0700692 uint32_t y_off;
693 uint32_t cbcr_off;
Alekhya,Monikafc81e102011-12-29 15:17:33 +0530694 uint32_t planar0_off;
695 uint32_t planar1_off;
696 uint32_t planar2_off;
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700697 int fd;
698
699 void *cropinfo;
700 int croplen;
701 uint32_t error_code;
702 struct fd_roi_info roi_info;
703 uint32_t frame_id;
704 int stcam_quality_ind;
705 uint32_t stcam_conv_value;
Ankit Premrajka3e90b9f2011-11-01 18:48:45 -0700706
707 struct ion_allocation_data ion_alloc;
708 struct ion_fd_data fd_data;
Ankit Premrajkae2c9c0b2012-06-07 17:18:25 -0700709 int ion_dev_fd;
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700710};
711
712enum msm_st_frame_packing {
713 SIDE_BY_SIDE_HALF,
714 SIDE_BY_SIDE_FULL,
715 TOP_DOWN_HALF,
716 TOP_DOWN_FULL,
717};
718
719struct msm_st_crop {
720 uint32_t in_w;
721 uint32_t in_h;
722 uint32_t out_w;
723 uint32_t out_h;
724};
725
726struct msm_st_half {
Alekhya,Monikafc81e102011-12-29 15:17:33 +0530727 uint32_t buf_p0_off;
728 uint32_t buf_p1_off;
729 uint32_t buf_p0_stride;
730 uint32_t buf_p1_stride;
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700731 uint32_t pix_x_off;
732 uint32_t pix_y_off;
733 struct msm_st_crop stCropInfo;
734};
735
736struct msm_st_frame {
737 struct msm_frame buf_info;
738 int type;
739 enum msm_st_frame_packing packing;
740 struct msm_st_half L;
741 struct msm_st_half R;
742 int frame_id;
743};
744
745#define MSM_CAMERA_ERR_MASK (0xFFFFFFFF & 1)
746
747struct stats_buff {
748 unsigned long buff;
749 int fd;
750};
751
752struct msm_stats_buf {
Lakshmi Narayana Kalavala4ab97a92011-07-26 15:30:14 -0700753 uint8_t awb_ymin;
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700754 struct stats_buff aec;
755 struct stats_buff awb;
756 struct stats_buff af;
757 struct stats_buff ihist;
758 struct stats_buff rs;
759 struct stats_buff cs;
760 struct stats_buff skin;
761 int type;
762 uint32_t status_bits;
763 unsigned long buffer;
764 int fd;
Ankit Premrajka073e0ca2012-03-06 12:26:08 -0800765 int length;
766 struct ion_handle *handle;
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700767 uint32_t frame_id;
Lakshmi Narayana Kalavala2db33842012-06-26 22:41:32 -0700768 int buf_idx;
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700769};
770#define MSM_V4L2_EXT_CAPTURE_MODE_DEFAULT 0
771/* video capture mode in VIDIOC_S_PARM */
772#define MSM_V4L2_EXT_CAPTURE_MODE_PREVIEW \
773 (MSM_V4L2_EXT_CAPTURE_MODE_DEFAULT+1)
774/* extendedmode for video recording in VIDIOC_S_PARM */
775#define MSM_V4L2_EXT_CAPTURE_MODE_VIDEO \
776 (MSM_V4L2_EXT_CAPTURE_MODE_DEFAULT+2)
777/* extendedmode for the full size main image in VIDIOC_S_PARM */
778#define MSM_V4L2_EXT_CAPTURE_MODE_MAIN (MSM_V4L2_EXT_CAPTURE_MODE_DEFAULT+3)
779/* extendedmode for the thumb nail image in VIDIOC_S_PARM */
780#define MSM_V4L2_EXT_CAPTURE_MODE_THUMBNAIL \
781 (MSM_V4L2_EXT_CAPTURE_MODE_DEFAULT+4)
782#define MSM_V4L2_EXT_CAPTURE_MODE_RAW \
783 (MSM_V4L2_EXT_CAPTURE_MODE_DEFAULT+5)
Nishant Pandit5dd54422012-06-26 22:52:44 +0530784#define MSM_V4L2_EXT_CAPTURE_MODE_RDI \
785 (MSM_V4L2_EXT_CAPTURE_MODE_DEFAULT+6)
786#define MSM_V4L2_EXT_CAPTURE_MODE_RDI1 \
787 (MSM_V4L2_EXT_CAPTURE_MODE_DEFAULT+7)
788#define MSM_V4L2_EXT_CAPTURE_MODE_RDI2 \
789 (MSM_V4L2_EXT_CAPTURE_MODE_DEFAULT+8)
790#define MSM_V4L2_EXT_CAPTURE_MODE_MAX (MSM_V4L2_EXT_CAPTURE_MODE_DEFAULT+9)
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700791
792
793#define MSM_V4L2_PID_MOTION_ISO V4L2_CID_PRIVATE_BASE
794#define MSM_V4L2_PID_EFFECT (V4L2_CID_PRIVATE_BASE+1)
795#define MSM_V4L2_PID_HJR (V4L2_CID_PRIVATE_BASE+2)
796#define MSM_V4L2_PID_LED_MODE (V4L2_CID_PRIVATE_BASE+3)
797#define MSM_V4L2_PID_PREP_SNAPSHOT (V4L2_CID_PRIVATE_BASE+4)
798#define MSM_V4L2_PID_EXP_METERING (V4L2_CID_PRIVATE_BASE+5)
799#define MSM_V4L2_PID_ISO (V4L2_CID_PRIVATE_BASE+6)
800#define MSM_V4L2_PID_CAM_MODE (V4L2_CID_PRIVATE_BASE+7)
801#define MSM_V4L2_PID_LUMA_ADAPTATION (V4L2_CID_PRIVATE_BASE+8)
802#define MSM_V4L2_PID_BEST_SHOT (V4L2_CID_PRIVATE_BASE+9)
803#define MSM_V4L2_PID_FOCUS_MODE (V4L2_CID_PRIVATE_BASE+10)
804#define MSM_V4L2_PID_BL_DETECTION (V4L2_CID_PRIVATE_BASE+11)
805#define MSM_V4L2_PID_SNOW_DETECTION (V4L2_CID_PRIVATE_BASE+12)
806#define MSM_V4L2_PID_CTRL_CMD (V4L2_CID_PRIVATE_BASE+13)
807#define MSM_V4L2_PID_EVT_SUB_INFO (V4L2_CID_PRIVATE_BASE+14)
Mingcheng Zhu5b04d352011-07-22 21:18:42 -0700808#define MSM_V4L2_PID_STROBE_FLASH (V4L2_CID_PRIVATE_BASE+15)
Kiran Kumar H N90785902012-07-05 13:59:38 -0700809#define MSM_V4L2_PID_INST_HANDLE (V4L2_CID_PRIVATE_BASE+16)
Mingcheng Zhu5b04d352011-07-22 21:18:42 -0700810#define MSM_V4L2_PID_MMAP_INST (V4L2_CID_PRIVATE_BASE+17)
Kiran Kumar H Nc3cb9ea2012-01-06 15:11:10 -0800811#define MSM_V4L2_PID_PP_PLANE_INFO (V4L2_CID_PRIVATE_BASE+18)
812#define MSM_V4L2_PID_MAX MSM_V4L2_PID_PP_PLANE_INFO
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700813
814/* camera operation mode for video recording - two frame output queues */
815#define MSM_V4L2_CAM_OP_DEFAULT 0
816/* camera operation mode for video recording - two frame output queues */
817#define MSM_V4L2_CAM_OP_PREVIEW (MSM_V4L2_CAM_OP_DEFAULT+1)
818/* camera operation mode for video recording - two frame output queues */
819#define MSM_V4L2_CAM_OP_VIDEO (MSM_V4L2_CAM_OP_DEFAULT+2)
820/* camera operation mode for standard shapshot - two frame output queues */
821#define MSM_V4L2_CAM_OP_CAPTURE (MSM_V4L2_CAM_OP_DEFAULT+3)
822/* camera operation mode for zsl shapshot - three output queues */
823#define MSM_V4L2_CAM_OP_ZSL (MSM_V4L2_CAM_OP_DEFAULT+4)
824/* camera operation mode for raw snapshot - one frame output queue */
825#define MSM_V4L2_CAM_OP_RAW (MSM_V4L2_CAM_OP_DEFAULT+5)
Jignesh Mehta6cf8a742012-02-04 23:40:50 -0800826/* camera operation mode for jpeg snapshot - one frame output queue */
827#define MSM_V4L2_CAM_OP_JPEG_CAPTURE (MSM_V4L2_CAM_OP_DEFAULT+6)
828
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700829
830#define MSM_V4L2_VID_CAP_TYPE 0
831#define MSM_V4L2_STREAM_ON 1
832#define MSM_V4L2_STREAM_OFF 2
833#define MSM_V4L2_SNAPSHOT 3
834#define MSM_V4L2_QUERY_CTRL 4
835#define MSM_V4L2_GET_CTRL 5
836#define MSM_V4L2_SET_CTRL 6
837#define MSM_V4L2_QUERY 7
838#define MSM_V4L2_GET_CROP 8
839#define MSM_V4L2_SET_CROP 9
840#define MSM_V4L2_OPEN 10
841#define MSM_V4L2_CLOSE 11
842#define MSM_V4L2_SET_CTRL_CMD 12
843#define MSM_V4L2_EVT_SUB_MASK 13
844#define MSM_V4L2_MAX 14
845#define V4L2_CAMERA_EXIT 43
846
847struct crop_info {
848 void *info;
849 int len;
850};
851
852struct msm_postproc {
853 int ftnum;
854 struct msm_frame fthumnail;
855 int fmnum;
856 struct msm_frame fmain;
857};
858
859struct msm_snapshot_pp_status {
860 void *status;
861};
862
863#define CFG_SET_MODE 0
864#define CFG_SET_EFFECT 1
865#define CFG_START 2
866#define CFG_PWR_UP 3
867#define CFG_PWR_DOWN 4
868#define CFG_WRITE_EXPOSURE_GAIN 5
869#define CFG_SET_DEFAULT_FOCUS 6
870#define CFG_MOVE_FOCUS 7
871#define CFG_REGISTER_TO_REAL_GAIN 8
872#define CFG_REAL_TO_REGISTER_GAIN 9
873#define CFG_SET_FPS 10
874#define CFG_SET_PICT_FPS 11
875#define CFG_SET_BRIGHTNESS 12
876#define CFG_SET_CONTRAST 13
877#define CFG_SET_ZOOM 14
878#define CFG_SET_EXPOSURE_MODE 15
879#define CFG_SET_WB 16
880#define CFG_SET_ANTIBANDING 17
881#define CFG_SET_EXP_GAIN 18
882#define CFG_SET_PICT_EXP_GAIN 19
883#define CFG_SET_LENS_SHADING 20
884#define CFG_GET_PICT_FPS 21
885#define CFG_GET_PREV_L_PF 22
886#define CFG_GET_PREV_P_PL 23
887#define CFG_GET_PICT_L_PF 24
888#define CFG_GET_PICT_P_PL 25
889#define CFG_GET_AF_MAX_STEPS 26
890#define CFG_GET_PICT_MAX_EXP_LC 27
891#define CFG_SEND_WB_INFO 28
892#define CFG_SENSOR_INIT 29
893#define CFG_GET_3D_CALI_DATA 30
894#define CFG_GET_CALIB_DATA 31
Kevin Chana980f392011-08-01 20:55:00 -0700895#define CFG_GET_OUTPUT_INFO 32
Jeyaprakash Soundrapandian734476b2012-05-03 20:08:15 -0700896#define CFG_GET_EEPROM_INFO 33
897#define CFG_GET_EEPROM_DATA 34
898#define CFG_SET_ACTUATOR_INFO 35
899#define CFG_GET_ACTUATOR_INFO 36
Su Liu6c3bb322012-02-14 02:15:05 +0530900/* TBD: QRD */
Jeyaprakash Soundrapandian734476b2012-05-03 20:08:15 -0700901#define CFG_SET_SATURATION 37
902#define CFG_SET_SHARPNESS 38
903#define CFG_SET_TOUCHAEC 39
904#define CFG_SET_AUTO_FOCUS 40
905#define CFG_SET_AUTOFLASH 41
906#define CFG_SET_EXPOSURE_COMPENSATION 42
907#define CFG_SET_ISO 43
Nishant Panditb2157c92012-04-25 01:09:28 +0530908#define CFG_START_STREAM 44
909#define CFG_STOP_STREAM 45
910#define CFG_GET_CSI_PARAMS 46
911#define CFG_MAX 47
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700912
913
914#define MOVE_NEAR 0
915#define MOVE_FAR 1
916
917#define SENSOR_PREVIEW_MODE 0
918#define SENSOR_SNAPSHOT_MODE 1
919#define SENSOR_RAW_SNAPSHOT_MODE 2
920#define SENSOR_HFR_60FPS_MODE 3
921#define SENSOR_HFR_90FPS_MODE 4
922#define SENSOR_HFR_120FPS_MODE 5
923
924#define SENSOR_QTR_SIZE 0
925#define SENSOR_FULL_SIZE 1
926#define SENSOR_QVGA_SIZE 2
927#define SENSOR_INVALID_SIZE 3
928
929#define CAMERA_EFFECT_OFF 0
930#define CAMERA_EFFECT_MONO 1
931#define CAMERA_EFFECT_NEGATIVE 2
932#define CAMERA_EFFECT_SOLARIZE 3
933#define CAMERA_EFFECT_SEPIA 4
934#define CAMERA_EFFECT_POSTERIZE 5
935#define CAMERA_EFFECT_WHITEBOARD 6
936#define CAMERA_EFFECT_BLACKBOARD 7
937#define CAMERA_EFFECT_AQUA 8
Yonggui Maoc0055a12011-09-29 19:31:47 -0700938#define CAMERA_EFFECT_EMBOSS 9
939#define CAMERA_EFFECT_SKETCH 10
940#define CAMERA_EFFECT_NEON 11
941#define CAMERA_EFFECT_MAX 12
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700942
Taniya Dasa9bdb012011-09-08 11:21:33 +0530943/* QRD */
944#define CAMERA_EFFECT_BW 10
945#define CAMERA_EFFECT_BLUISH 12
946#define CAMERA_EFFECT_REDDISH 13
947#define CAMERA_EFFECT_GREENISH 14
948
949/* QRD */
950#define CAMERA_ANTIBANDING_OFF 0
951#define CAMERA_ANTIBANDING_50HZ 2
952#define CAMERA_ANTIBANDING_60HZ 1
953#define CAMERA_ANTIBANDING_AUTO 3
954
955#define CAMERA_CONTRAST_LV0 0
956#define CAMERA_CONTRAST_LV1 1
957#define CAMERA_CONTRAST_LV2 2
958#define CAMERA_CONTRAST_LV3 3
959#define CAMERA_CONTRAST_LV4 4
960#define CAMERA_CONTRAST_LV5 5
961#define CAMERA_CONTRAST_LV6 6
962#define CAMERA_CONTRAST_LV7 7
963#define CAMERA_CONTRAST_LV8 8
964#define CAMERA_CONTRAST_LV9 9
965
966#define CAMERA_BRIGHTNESS_LV0 0
967#define CAMERA_BRIGHTNESS_LV1 1
968#define CAMERA_BRIGHTNESS_LV2 2
969#define CAMERA_BRIGHTNESS_LV3 3
970#define CAMERA_BRIGHTNESS_LV4 4
971#define CAMERA_BRIGHTNESS_LV5 5
972#define CAMERA_BRIGHTNESS_LV6 6
973#define CAMERA_BRIGHTNESS_LV7 7
974#define CAMERA_BRIGHTNESS_LV8 8
975
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
Taniya Dasa9bdb012011-09-08 11:21:33 +05301002#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
Rajakumar Govindaram6bc004a2011-12-05 20:58:19 -08001017enum 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
Suresh Vankadara212d9722012-05-30 15:51:20 +05301031enum 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
1045
Rajakumar Govindaram6bc004a2011-12-05 20:58:19 -08001046enum msm_v4l2_exposure_level {
1047 MSM_V4L2_EXPOSURE_N2,
1048 MSM_V4L2_EXPOSURE_N1,
1049 MSM_V4L2_EXPOSURE_D,
1050 MSM_V4L2_EXPOSURE_P1,
1051 MSM_V4L2_EXPOSURE_P2,
1052};
1053
1054enum msm_v4l2_sharpness_level {
1055 MSM_V4L2_SHARPNESS_L0,
1056 MSM_V4L2_SHARPNESS_L1,
1057 MSM_V4L2_SHARPNESS_L2,
1058 MSM_V4L2_SHARPNESS_L3,
1059 MSM_V4L2_SHARPNESS_L4,
1060 MSM_V4L2_SHARPNESS_L5,
1061 MSM_V4L2_SHARPNESS_L6,
1062};
1063
1064enum msm_v4l2_expo_metering_mode {
1065 MSM_V4L2_EXP_FRAME_AVERAGE,
1066 MSM_V4L2_EXP_CENTER_WEIGHTED,
1067 MSM_V4L2_EXP_SPOT_METERING,
1068};
1069
1070enum msm_v4l2_iso_mode {
1071 MSM_V4L2_ISO_AUTO = 0,
1072 MSM_V4L2_ISO_DEBLUR,
1073 MSM_V4L2_ISO_100,
1074 MSM_V4L2_ISO_200,
1075 MSM_V4L2_ISO_400,
1076 MSM_V4L2_ISO_800,
1077 MSM_V4L2_ISO_1600,
1078};
1079
1080enum msm_v4l2_wb_mode {
Suresh Vankadara212d9722012-05-30 15:51:20 +05301081 MSM_V4L2_WB_OFF,
1082 MSM_V4L2_WB_AUTO ,
Rajakumar Govindaram6bc004a2011-12-05 20:58:19 -08001083 MSM_V4L2_WB_CUSTOM,
1084 MSM_V4L2_WB_INCANDESCENT,
1085 MSM_V4L2_WB_FLUORESCENT,
1086 MSM_V4L2_WB_DAYLIGHT,
1087 MSM_V4L2_WB_CLOUDY_DAYLIGHT,
Suresh Vankadara212d9722012-05-30 15:51:20 +05301088};
1089
1090enum msm_v4l2_special_effect {
1091 MSM_V4L2_EFFECT_OFF,
1092 MSM_V4L2_EFFECT_MONO,
1093 MSM_V4L2_EFFECT_NEGATIVE,
1094 MSM_V4L2_EFFECT_SOLARIZE,
1095 MSM_V4L2_EFFECT_SEPIA,
1096 MSM_V4L2_EFFECT_POSTERAIZE,
1097 MSM_V4L2_EFFECT_WHITEBOARD,
1098 MSM_V4L2_EFFECT_BLACKBOARD,
1099 MSM_V4L2_EFFECT_AQUA,
1100 MSM_V4L2_EFFECT_EMBOSS,
1101 MSM_V4L2_EFFECT_SKETCH,
1102 MSM_V4L2_EFFECT_NEON,
1103 MSM_V4L2_EFFECT_MAX,
Rajakumar Govindaram6bc004a2011-12-05 20:58:19 -08001104};
1105
1106enum msm_v4l2_power_line_frequency {
1107 MSM_V4L2_POWER_LINE_OFF,
1108 MSM_V4L2_POWER_LINE_60HZ,
1109 MSM_V4L2_POWER_LINE_50HZ,
1110 MSM_V4L2_POWER_LINE_AUTO,
1111};
Taniya Dasa9bdb012011-09-08 11:21:33 +05301112
Su Liu6c3bb322012-02-14 02:15:05 +05301113#define CAMERA_ISO_TYPE_AUTO 0
1114#define CAMEAR_ISO_TYPE_HJR 1
1115#define CAMEAR_ISO_TYPE_100 2
1116#define CAMERA_ISO_TYPE_200 3
1117#define CAMERA_ISO_TYPE_400 4
1118#define CAMEAR_ISO_TYPE_800 5
1119#define CAMERA_ISO_TYPE_1600 6
1120
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001121struct sensor_pict_fps {
1122 uint16_t prevfps;
1123 uint16_t pictfps;
1124};
1125
1126struct exp_gain_cfg {
1127 uint16_t gain;
1128 uint32_t line;
1129};
1130
1131struct focus_cfg {
1132 int32_t steps;
1133 int dir;
1134};
1135
1136struct fps_cfg {
1137 uint16_t f_mult;
1138 uint16_t fps_div;
1139 uint32_t pict_fps_div;
1140};
1141struct wb_info_cfg {
1142 uint16_t red_gain;
1143 uint16_t green_gain;
1144 uint16_t blue_gain;
1145};
1146struct sensor_3d_exp_cfg {
1147 uint16_t gain;
1148 uint32_t line;
1149 uint16_t r_gain;
1150 uint16_t b_gain;
1151 uint16_t gr_gain;
1152 uint16_t gb_gain;
1153 uint16_t gain_adjust;
1154};
1155struct sensor_3d_cali_data_t{
1156 unsigned char left_p_matrix[3][4][8];
1157 unsigned char right_p_matrix[3][4][8];
1158 unsigned char square_len[8];
1159 unsigned char focal_len[8];
1160 unsigned char pixel_pitch[8];
1161 uint16_t left_r;
1162 uint16_t left_b;
1163 uint16_t left_gb;
1164 uint16_t left_af_far;
1165 uint16_t left_af_mid;
1166 uint16_t left_af_short;
1167 uint16_t left_af_5um;
1168 uint16_t left_af_50up;
1169 uint16_t left_af_50down;
1170 uint16_t right_r;
1171 uint16_t right_b;
1172 uint16_t right_gb;
1173 uint16_t right_af_far;
1174 uint16_t right_af_mid;
1175 uint16_t right_af_short;
1176 uint16_t right_af_5um;
1177 uint16_t right_af_50up;
1178 uint16_t right_af_50down;
1179};
1180struct sensor_init_cfg {
1181 uint8_t prev_res;
1182 uint8_t pict_res;
1183};
1184
1185struct sensor_calib_data {
1186 /* Color Related Measurements */
1187 uint16_t r_over_g;
1188 uint16_t b_over_g;
1189 uint16_t gr_over_gb;
1190
1191 /* Lens Related Measurements */
1192 uint16_t macro_2_inf;
1193 uint16_t inf_2_macro;
1194 uint16_t stroke_amt;
1195 uint16_t af_pos_1m;
1196 uint16_t af_pos_inf;
1197};
1198
Kevin Chana980f392011-08-01 20:55:00 -07001199enum msm_sensor_resolution_t {
Kevin Chan36e2bdc2011-08-30 17:21:21 -07001200 MSM_SENSOR_RES_FULL,
1201 MSM_SENSOR_RES_QTR,
Kevin Chana980f392011-08-01 20:55:00 -07001202 MSM_SENSOR_RES_2,
1203 MSM_SENSOR_RES_3,
1204 MSM_SENSOR_RES_4,
1205 MSM_SENSOR_RES_5,
1206 MSM_SENSOR_RES_6,
1207 MSM_SENSOR_RES_7,
1208 MSM_SENSOR_INVALID_RES,
1209};
1210
1211struct msm_sensor_output_info_t {
1212 uint16_t x_output;
1213 uint16_t y_output;
1214 uint16_t line_length_pclk;
1215 uint16_t frame_length_lines;
Kevin Chane30d3692011-10-14 16:11:01 -07001216 uint32_t vt_pixel_clk;
1217 uint32_t op_pixel_clk;
Kevin Chan272f6602011-10-18 14:20:03 -07001218 uint16_t binning_factor;
Kevin Chana980f392011-08-01 20:55:00 -07001219};
1220
1221struct sensor_output_info_t {
1222 struct msm_sensor_output_info_t *output_info;
1223 uint16_t num_info;
1224};
1225
Taniya Dasa9bdb012011-09-08 11:21:33 +05301226struct mirror_flip {
1227 int32_t x_mirror;
1228 int32_t y_flip;
1229};
1230
1231struct cord {
1232 uint32_t x;
1233 uint32_t y;
1234};
1235
Jeyaprakash Soundrapandian734476b2012-05-03 20:08:15 -07001236struct msm_eeprom_data_t {
1237 void *eeprom_data;
1238 uint16_t index;
1239};
1240
Nishant Panditb2157c92012-04-25 01:09:28 +05301241struct msm_camera_csid_vc_cfg {
1242 uint8_t cid;
1243 uint8_t dt;
1244 uint8_t decode_format;
1245};
1246
1247struct csi_lane_params_t {
1248 uint8_t csi_lane_assign;
1249 uint8_t csi_lane_mask;
1250 uint8_t csi_if;
1251 uint8_t csid_core;
1252 uint32_t csid_version;
1253};
1254
1255#define CSI_EMBED_DATA 0x12
1256#define CSI_RESERVED_DATA_0 0x13
1257#define CSI_YUV422_8 0x1E
1258#define CSI_RAW8 0x2A
1259#define CSI_RAW10 0x2B
1260#define CSI_RAW12 0x2C
1261
1262#define CSI_DECODE_6BIT 0
1263#define CSI_DECODE_8BIT 1
1264#define CSI_DECODE_10BIT 2
1265#define CSI_DECODE_DPCM_10_8_10 5
1266
Sreesudhan Ramakrish Ramkumard8123212012-06-30 13:15:27 -07001267#define ISPIF_STREAM(intf, action, vfe) (((intf)<<ISPIF_S_STREAM_SHIFT)+\
1268 (action)+((vfe)<<ISPIF_VFE_INTF_SHIFT))
1269#define ISPIF_ON_FRAME_BOUNDARY (0x01 << 0)
1270#define ISPIF_OFF_FRAME_BOUNDARY (0x01 << 1)
1271#define ISPIF_OFF_IMMEDIATELY (0x01 << 2)
1272#define ISPIF_S_STREAM_SHIFT 4
1273#define ISPIF_VFE_INTF_SHIFT 12
Nishant Panditb2157c92012-04-25 01:09:28 +05301274
1275#define PIX_0 (0x01 << 0)
1276#define RDI_0 (0x01 << 1)
1277#define PIX_1 (0x01 << 2)
1278#define RDI_1 (0x01 << 3)
Sreesudhan Ramakrish Ramkumard8123212012-06-30 13:15:27 -07001279#define RDI_2 (0x01 << 4)
Nishant Panditb2157c92012-04-25 01:09:28 +05301280
Sreesudhan Ramakrish Ramkumard8123212012-06-30 13:15:27 -07001281enum msm_ispif_vfe_intf {
1282 VFE0,
1283 VFE1,
1284 VFE_MAX,
1285};
Nishant Panditb2157c92012-04-25 01:09:28 +05301286
1287enum msm_ispif_intftype {
1288 PIX0,
1289 RDI0,
1290 PIX1,
1291 RDI1,
Nishant Panditb2157c92012-04-25 01:09:28 +05301292 RDI2,
1293 INTF_MAX,
1294};
1295
1296enum msm_ispif_vc {
1297 VC0,
1298 VC1,
1299 VC2,
1300 VC3,
1301};
1302
1303enum msm_ispif_cid {
1304 CID0,
1305 CID1,
1306 CID2,
1307 CID3,
1308 CID4,
1309 CID5,
1310 CID6,
1311 CID7,
1312 CID8,
1313 CID9,
1314 CID10,
1315 CID11,
1316 CID12,
1317 CID13,
1318 CID14,
1319 CID15,
1320};
1321
1322struct msm_ispif_params {
1323 uint8_t intftype;
1324 uint16_t cid_mask;
1325 uint8_t csid;
Sreesudhan Ramakrish Ramkumard8123212012-06-30 13:15:27 -07001326 uint8_t vfe_intf;
Nishant Panditb2157c92012-04-25 01:09:28 +05301327};
1328
1329struct msm_ispif_params_list {
1330 uint32_t len;
1331 struct msm_ispif_params params[4];
1332};
1333
1334enum ispif_cfg_type_t {
1335 ISPIF_INIT,
1336 ISPIF_SET_CFG,
1337 ISPIF_SET_ON_FRAME_BOUNDARY,
1338 ISPIF_SET_OFF_FRAME_BOUNDARY,
1339 ISPIF_SET_OFF_IMMEDIATELY,
1340 ISPIF_RELEASE,
1341};
1342
1343struct ispif_cfg_data {
1344 enum ispif_cfg_type_t cfgtype;
1345 union {
1346 uint32_t csid_version;
1347 int cmd;
1348 struct msm_ispif_params_list ispif_params;
1349 } cfg;
1350};
1351
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001352struct sensor_cfg_data {
1353 int cfgtype;
1354 int mode;
1355 int rs;
1356 uint8_t max_steps;
1357
1358 union {
1359 int8_t effect;
1360 uint8_t lens_shading;
1361 uint16_t prevl_pf;
1362 uint16_t prevp_pl;
1363 uint16_t pictl_pf;
1364 uint16_t pictp_pl;
1365 uint32_t pict_max_exp_lc;
1366 uint16_t p_fps;
Su Liu6c3bb322012-02-14 02:15:05 +05301367 uint8_t iso_type;
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001368 struct sensor_init_cfg init_info;
1369 struct sensor_pict_fps gfps;
1370 struct exp_gain_cfg exp_gain;
1371 struct focus_cfg focus;
1372 struct fps_cfg fps;
1373 struct wb_info_cfg wb_info;
1374 struct sensor_3d_exp_cfg sensor_3d_exp;
1375 struct sensor_calib_data calib_info;
Kevin Chana980f392011-08-01 20:55:00 -07001376 struct sensor_output_info_t output_info;
Jeyaprakash Soundrapandian734476b2012-05-03 20:08:15 -07001377 struct msm_eeprom_data_t eeprom_data;
Nishant Panditb2157c92012-04-25 01:09:28 +05301378 struct csi_lane_params_t csi_lane_params;
Taniya Dasa9bdb012011-09-08 11:21:33 +05301379 /* QRD */
1380 uint16_t antibanding;
1381 uint8_t contrast;
1382 uint8_t saturation;
1383 uint8_t sharpness;
1384 int8_t brightness;
1385 int ae_mode;
1386 uint8_t wb_val;
1387 int8_t exp_compensation;
1388 struct cord aec_cord;
1389 int is_autoflash;
1390 struct mirror_flip mirror_flip;
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001391 } cfg;
1392};
1393
Rajakumar Govindaram6627b362012-01-29 19:00:30 -08001394struct damping_params_t {
1395 uint32_t damping_step;
1396 uint32_t damping_delay;
1397 uint32_t hw_params;
1398};
1399
1400enum actuator_type {
1401 ACTUATOR_VCM,
1402 ACTUATOR_PIEZO,
1403};
1404
1405enum msm_actuator_data_type {
1406 MSM_ACTUATOR_BYTE_DATA = 1,
1407 MSM_ACTUATOR_WORD_DATA,
1408};
1409
1410enum msm_actuator_addr_type {
1411 MSM_ACTUATOR_BYTE_ADDR = 1,
1412 MSM_ACTUATOR_WORD_ADDR,
1413};
1414
1415enum msm_actuator_write_type {
1416 MSM_ACTUATOR_WRITE_HW_DAMP,
1417 MSM_ACTUATOR_WRITE_DAC,
1418};
1419
1420struct msm_actuator_reg_params_t {
1421 enum msm_actuator_write_type reg_write_type;
1422 uint32_t hw_mask;
1423 uint16_t reg_addr;
1424 uint16_t hw_shift;
1425 uint16_t data_shift;
1426};
1427
1428struct reg_settings_t {
1429 uint16_t reg_addr;
1430 uint16_t reg_data;
1431};
1432
1433struct region_params_t {
1434 /* [0] = ForwardDirection Macro boundary
1435 [1] = ReverseDirection Inf boundary
1436 */
1437 uint16_t step_bound[2];
1438 uint16_t code_per_step;
1439};
1440
Sreesudhan Ramakrish Ramkumara4b5f302011-09-12 16:23:22 -07001441struct msm_actuator_move_params_t {
1442 int8_t dir;
Rajakumar Govindaram6627b362012-01-29 19:00:30 -08001443 int8_t sign_dir;
1444 int16_t dest_step_pos;
Sreesudhan Ramakrish Ramkumara4b5f302011-09-12 16:23:22 -07001445 int32_t num_steps;
Rajakumar Govindaram6627b362012-01-29 19:00:30 -08001446 struct damping_params_t *ringing_params;
1447};
1448
1449struct msm_actuator_tuning_params_t {
1450 int16_t initial_code;
1451 uint16_t pwd_step;
1452 uint16_t region_size;
1453 uint32_t total_steps;
1454 struct region_params_t *region_params;
1455};
1456
1457struct msm_actuator_params_t {
1458 enum actuator_type act_type;
1459 uint8_t reg_tbl_size;
1460 uint16_t data_size;
1461 uint16_t init_setting_size;
1462 uint32_t i2c_addr;
1463 enum msm_actuator_addr_type i2c_addr_type;
1464 enum msm_actuator_data_type i2c_data_type;
1465 struct msm_actuator_reg_params_t *reg_tbl_params;
1466 struct reg_settings_t *init_settings;
Sreesudhan Ramakrish Ramkumara4b5f302011-09-12 16:23:22 -07001467};
1468
1469struct msm_actuator_set_info_t {
Rajakumar Govindaram6627b362012-01-29 19:00:30 -08001470 struct msm_actuator_params_t actuator_params;
1471 struct msm_actuator_tuning_params_t af_tuning_params;
Sreesudhan Ramakrish Ramkumara4b5f302011-09-12 16:23:22 -07001472};
1473
Sreesudhan Ramakrish Ramkumar5f4b3442011-09-08 14:56:35 -07001474struct msm_actuator_get_info_t {
1475 uint32_t focal_length_num;
1476 uint32_t focal_length_den;
1477 uint32_t f_number_num;
1478 uint32_t f_number_den;
1479 uint32_t f_pix_num;
1480 uint32_t f_pix_den;
1481 uint32_t total_f_dist_num;
1482 uint32_t total_f_dist_den;
Jeyaprakash Soundrapandian04592002012-02-08 10:29:50 -08001483 uint32_t hor_view_angle_num;
1484 uint32_t hor_view_angle_den;
1485 uint32_t ver_view_angle_num;
1486 uint32_t ver_view_angle_den;
Sreesudhan Ramakrish Ramkumar5f4b3442011-09-08 14:56:35 -07001487};
1488
Rajakumar Govindaram6627b362012-01-29 19:00:30 -08001489enum af_camera_name {
1490 ACTUATOR_MAIN_CAM_0,
1491 ACTUATOR_MAIN_CAM_1,
1492 ACTUATOR_MAIN_CAM_2,
1493 ACTUATOR_MAIN_CAM_3,
1494 ACTUATOR_MAIN_CAM_4,
1495 ACTUATOR_MAIN_CAM_5,
1496 ACTUATOR_WEB_CAM_0,
1497 ACTUATOR_WEB_CAM_1,
1498 ACTUATOR_WEB_CAM_2,
1499};
1500
Sreesudhan Ramakrish Ramkumara4b5f302011-09-12 16:23:22 -07001501struct msm_actuator_cfg_data {
1502 int cfgtype;
Sreesudhan Ramakrish Ramkumar5f4b3442011-09-08 14:56:35 -07001503 uint8_t is_af_supported;
Sreesudhan Ramakrish Ramkumara4b5f302011-09-12 16:23:22 -07001504 union {
1505 struct msm_actuator_move_params_t move;
Sreesudhan Ramakrish Ramkumar5f4b3442011-09-08 14:56:35 -07001506 struct msm_actuator_set_info_t set_info;
1507 struct msm_actuator_get_info_t get_info;
Rajakumar Govindaram6627b362012-01-29 19:00:30 -08001508 enum af_camera_name cam_name;
Sreesudhan Ramakrish Ramkumara4b5f302011-09-12 16:23:22 -07001509 } cfg;
1510};
1511
Jeyaprakash Soundrapandian734476b2012-05-03 20:08:15 -07001512struct msm_eeprom_support {
1513 uint16_t is_supported;
1514 uint16_t size;
1515 uint16_t index;
1516 uint16_t qvalue;
1517};
1518
1519struct msm_calib_wb {
1520 uint16_t r_over_g;
1521 uint16_t b_over_g;
1522 uint16_t gr_over_gb;
1523};
1524
1525struct msm_calib_af {
1526 uint16_t macro_dac;
1527 uint16_t inf_dac;
1528 uint16_t start_dac;
1529};
1530
1531struct msm_calib_lsc {
1532 uint16_t r_gain[221];
1533 uint16_t b_gain[221];
1534 uint16_t gr_gain[221];
1535 uint16_t gb_gain[221];
1536};
1537
1538struct pixel_t {
1539 int x;
1540 int y;
1541};
1542
1543struct msm_calib_dpc {
1544 uint16_t validcount;
1545 struct pixel_t snapshot_coord[128];
1546 struct pixel_t preview_coord[128];
1547 struct pixel_t video_coord[128];
1548};
1549
1550struct msm_camera_eeprom_info_t {
1551 struct msm_eeprom_support af;
1552 struct msm_eeprom_support wb;
1553 struct msm_eeprom_support lsc;
1554 struct msm_eeprom_support dpc;
1555};
1556
1557struct msm_eeprom_cfg_data {
1558 int cfgtype;
1559 uint8_t is_eeprom_supported;
1560 union {
1561 struct msm_eeprom_data_t get_data;
1562 struct msm_camera_eeprom_info_t get_info;
1563 } cfg;
1564};
1565
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001566struct sensor_large_data {
1567 int cfgtype;
1568 union {
1569 struct sensor_3d_cali_data_t sensor_3d_cali_data;
1570 } data;
1571};
1572
1573enum sensor_type_t {
1574 BAYER,
1575 YUV,
1576 JPEG_SOC,
1577};
1578
1579enum flash_type {
1580 LED_FLASH,
1581 STROBE_FLASH,
1582};
1583
1584enum strobe_flash_ctrl_type {
1585 STROBE_FLASH_CTRL_INIT,
1586 STROBE_FLASH_CTRL_CHARGE,
1587 STROBE_FLASH_CTRL_RELEASE
1588};
1589
1590struct strobe_flash_ctrl_data {
1591 enum strobe_flash_ctrl_type type;
1592 int charge_en;
1593};
1594
1595struct msm_camera_info {
1596 int num_cameras;
1597 uint8_t has_3d_support[MSM_MAX_CAMERA_SENSORS];
1598 uint8_t is_internal_cam[MSM_MAX_CAMERA_SENSORS];
1599 uint32_t s_mount_angle[MSM_MAX_CAMERA_SENSORS];
1600 const char *video_dev_name[MSM_MAX_CAMERA_SENSORS];
1601 enum sensor_type_t sensor_type[MSM_MAX_CAMERA_SENSORS];
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001602};
1603
1604struct msm_cam_config_dev_info {
1605 int num_config_nodes;
1606 const char *config_dev_name[MSM_MAX_CAMERA_CONFIGS];
Ankit Premrajkaf94bcc62011-08-22 15:23:53 -07001607 int config_dev_id[MSM_MAX_CAMERA_CONFIGS];
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001608};
1609
Kiran Kumar H Nc3cb9ea2012-01-06 15:11:10 -08001610struct msm_mctl_node_info {
1611 int num_mctl_nodes;
1612 const char *mctl_node_name[MSM_MAX_CAMERA_SENSORS];
1613};
1614
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001615struct flash_ctrl_data {
1616 int flashtype;
1617 union {
1618 int led_state;
1619 struct strobe_flash_ctrl_data strobe_ctrl;
1620 } ctrl_data;
1621};
1622
1623#define GET_NAME 0
1624#define GET_PREVIEW_LINE_PER_FRAME 1
1625#define GET_PREVIEW_PIXELS_PER_LINE 2
1626#define GET_SNAPSHOT_LINE_PER_FRAME 3
1627#define GET_SNAPSHOT_PIXELS_PER_LINE 4
1628#define GET_SNAPSHOT_FPS 5
1629#define GET_SNAPSHOT_MAX_EP_LINE_CNT 6
1630
1631struct msm_camsensor_info {
1632 char name[MAX_SENSOR_NAME];
1633 uint8_t flash_enabled;
Sreesudhan Ramakrish Ramkumara2688822012-04-05 20:22:50 -07001634 uint8_t strobe_flash_enabled;
1635 uint8_t actuator_enabled;
Nishant Panditb2157c92012-04-25 01:09:28 +05301636 uint8_t ispif_supported;
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001637 int8_t total_steps;
1638 uint8_t support_3d;
Mingcheng Zhuc85b8ad2012-03-08 17:47:17 -08001639 enum flash_type flashtype;
1640 enum sensor_type_t sensor_type;
1641 uint32_t pxlcode; /* enum v4l2_mbus_pixelcode */
1642 uint32_t camera_type; /* msm_camera_type */
1643 int mount_angle;
1644 uint32_t max_width;
1645 uint32_t max_height;
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001646};
Kiran Kumar H Nceea7622011-08-23 14:01:03 -07001647
1648#define V4L2_SINGLE_PLANE 0
1649#define V4L2_MULTI_PLANE_Y 0
1650#define V4L2_MULTI_PLANE_CBCR 1
1651#define V4L2_MULTI_PLANE_CB 1
1652#define V4L2_MULTI_PLANE_CR 2
1653
1654struct plane_data {
1655 int plane_id;
1656 uint32_t offset;
1657 unsigned long size;
1658};
1659
1660struct img_plane_info {
1661 uint32_t width;
1662 uint32_t height;
1663 uint32_t pixelformat;
1664 uint8_t buffer_type; /*Single/Multi planar*/
1665 uint8_t output_port;
1666 uint32_t ext_mode;
1667 uint8_t num_planes;
1668 struct plane_data plane[MAX_PLANES];
Mingcheng Zhu996be182011-10-16 16:04:23 -07001669 uint32_t sp_y_offset;
Kiran Kumar H N90785902012-07-05 13:59:38 -07001670 uint32_t inst_handle;
Kiran Kumar H Nceea7622011-08-23 14:01:03 -07001671};
1672
Kevin Chan210061f2012-02-14 20:56:16 -08001673#define QCAMERA_NAME "qcamera"
Ankit Premrajka4b3443f2012-06-11 14:06:31 -07001674#define QCAMERA_SERVER_NAME "qcamera_server"
Kevin Chan210061f2012-02-14 20:56:16 -08001675#define QCAMERA_DEVICE_GROUP_ID 1
1676#define QCAMERA_VNODE_GROUP_ID 2
1677
Ankit Premrajka4b3443f2012-06-11 14:06:31 -07001678enum msm_cam_subdev_type {
1679 CSIPHY_DEV,
1680 CSID_DEV,
1681 CSIC_DEV,
1682 ISPIF_DEV,
1683 VFE_DEV,
1684 AXI_DEV,
1685 VPE_DEV,
1686 SENSOR_DEV,
1687 ACTUATOR_DEV,
1688 EEPROM_DEV,
1689 GESTURE_DEV,
1690 IRQ_ROUTER_DEV,
1691 CPP_DEV,
Sreesudhan Ramakrish Ramkumarc842b612012-05-21 17:23:24 -07001692 CCI_DEV,
Ankit Premrajka4b3443f2012-06-11 14:06:31 -07001693};
1694
1695struct msm_mctl_set_sdev_data {
1696 uint32_t revision;
1697 enum msm_cam_subdev_type sdev_type;
1698};
1699
Kevin Chan94b4c832012-03-02 21:27:16 -08001700#define MSM_CAM_V4L2_IOCTL_GET_CAMERA_INFO \
Kevin Chan41a38702012-06-06 22:25:41 -07001701 _IOWR('V', BASE_VIDIOC_PRIVATE + 1, struct msm_camera_v4l2_ioctl_t)
Kevin Chan94b4c832012-03-02 21:27:16 -08001702
1703#define MSM_CAM_V4L2_IOCTL_GET_CONFIG_INFO \
Kevin Chan41a38702012-06-06 22:25:41 -07001704 _IOWR('V', BASE_VIDIOC_PRIVATE + 2, struct msm_camera_v4l2_ioctl_t)
Kevin Chan94b4c832012-03-02 21:27:16 -08001705
1706#define MSM_CAM_V4L2_IOCTL_GET_MCTL_INFO \
Kevin Chan41a38702012-06-06 22:25:41 -07001707 _IOWR('V', BASE_VIDIOC_PRIVATE + 3, struct msm_camera_v4l2_ioctl_t)
Kevin Chan94b4c832012-03-02 21:27:16 -08001708
1709#define MSM_CAM_V4L2_IOCTL_CTRL_CMD_DONE \
Kevin Chan41a38702012-06-06 22:25:41 -07001710 _IOWR('V', BASE_VIDIOC_PRIVATE + 4, struct msm_camera_v4l2_ioctl_t)
Kevin Chan94b4c832012-03-02 21:27:16 -08001711
1712#define MSM_CAM_V4L2_IOCTL_GET_EVENT_PAYLOAD \
Kevin Chan41a38702012-06-06 22:25:41 -07001713 _IOWR('V', BASE_VIDIOC_PRIVATE + 5, struct msm_camera_v4l2_ioctl_t)
Kevin Chan94b4c832012-03-02 21:27:16 -08001714
Sunid Wilson4584b5f2012-04-13 12:48:25 -07001715#define MSM_CAM_IOCTL_SEND_EVENT \
1716 _IOWR('V', BASE_VIDIOC_PRIVATE + 6, struct v4l2_event)
1717
Kiran Kumar H N64bd23c2012-05-25 12:06:21 -07001718#define MSM_CAM_V4L2_IOCTL_CFG_VPE \
1719 _IOWR('V', BASE_VIDIOC_PRIVATE + 7, struct msm_vpe_cfg_cmd)
1720
Kevin Chan41a38702012-06-06 22:25:41 -07001721#define MSM_CAM_V4L2_IOCTL_PRIVATE_S_CTRL \
1722 _IOWR('V', BASE_VIDIOC_PRIVATE + 8, struct msm_camera_v4l2_ioctl_t)
1723
Kiran Kumar H N90785902012-07-05 13:59:38 -07001724#define MSM_CAM_V4L2_IOCTL_PRIVATE_G_CTRL \
1725 _IOWR('V', BASE_VIDIOC_PRIVATE + 9, struct msm_camera_v4l2_ioctl_t)
1726
Ankit Premrajka4b3443f2012-06-11 14:06:31 -07001727#define VIDIOC_MSM_VPE_INIT \
1728 _IO('V', BASE_VIDIOC_PRIVATE + 15)
1729
1730#define VIDIOC_MSM_VPE_RELEASE \
1731 _IO('V', BASE_VIDIOC_PRIVATE + 16)
1732
1733#define VIDIOC_MSM_VPE_CFG \
1734 _IOWR('V', BASE_VIDIOC_PRIVATE + 17, struct msm_mctl_pp_params *)
1735
1736#define VIDIOC_MSM_AXI_INIT \
1737 _IO('V', BASE_VIDIOC_PRIVATE + 18)
1738
1739#define VIDIOC_MSM_AXI_RELEASE \
1740 _IO('V', BASE_VIDIOC_PRIVATE + 19)
1741
1742#define VIDIOC_MSM_AXI_CFG \
1743 _IOWR('V', BASE_VIDIOC_PRIVATE + 20, void *)
1744
1745#define VIDIOC_MSM_AXI_IRQ \
1746 _IOWR('V', BASE_VIDIOC_PRIVATE + 21, void *)
1747
1748#define VIDIOC_MSM_AXI_BUF_CFG \
1749 _IOWR('V', BASE_VIDIOC_PRIVATE + 22, void *)
1750
1751#define VIDIOC_MSM_VFE_INIT \
1752 _IO('V', BASE_VIDIOC_PRIVATE + 22)
1753
1754#define VIDIOC_MSM_VFE_RELEASE \
1755 _IO('V', BASE_VIDIOC_PRIVATE + 23)
1756
Kevin Chan94b4c832012-03-02 21:27:16 -08001757struct msm_camera_v4l2_ioctl_t {
Kevin Chan41a38702012-06-06 22:25:41 -07001758 uint32_t id;
Kevin Chan94b4c832012-03-02 21:27:16 -08001759 void __user *ioctl_ptr;
Kevin Chan41a38702012-06-06 22:25:41 -07001760 uint32_t len;
Kevin Chan94b4c832012-03-02 21:27:16 -08001761};
1762
Lakshmi Narayana Kalavalacd3d81e2012-07-31 13:04:03 -07001763struct msm_camera_vfe_params_t {
1764 uint32_t operation_mode;
1765 uint32_t capture_count;
1766 uint32_t skip_abort;
1767 uint16_t port_info;
1768 uint16_t cmd_type;
1769};
1770
Kiran Kumar H Nb4a278e2012-06-18 19:25:47 -07001771enum msm_camss_irq_idx {
1772 CAMERA_SS_IRQ_0,
1773 CAMERA_SS_IRQ_1,
1774 CAMERA_SS_IRQ_2,
1775 CAMERA_SS_IRQ_3,
1776 CAMERA_SS_IRQ_4,
1777 CAMERA_SS_IRQ_5,
1778 CAMERA_SS_IRQ_6,
1779 CAMERA_SS_IRQ_7,
1780 CAMERA_SS_IRQ_8,
1781 CAMERA_SS_IRQ_9,
1782 CAMERA_SS_IRQ_10,
1783 CAMERA_SS_IRQ_11,
1784 CAMERA_SS_IRQ_12,
1785 CAMERA_SS_IRQ_MAX
1786};
1787
1788enum msm_cam_hw_idx {
1789 MSM_CAM_HW_MICRO,
1790 MSM_CAM_HW_CCI,
1791 MSM_CAM_HW_CSI0,
1792 MSM_CAM_HW_CSI1,
1793 MSM_CAM_HW_CSI2,
1794 MSM_CAM_HW_CSI3,
1795 MSM_CAM_HW_ISPIF,
1796 MSM_CAM_HW_CPP,
1797 MSM_CAM_HW_VFE0,
1798 MSM_CAM_HW_VFE1,
1799 MSM_CAM_HW_JPEG0,
1800 MSM_CAM_HW_JPEG1,
1801 MSM_CAM_HW_JPEG2,
1802 MSM_CAM_HW_MAX
1803};
1804
1805struct msm_camera_irq_cfg {
1806 /* Bit mask of all the camera hardwares that needs to
1807 * be composited into a single IRQ to the MSM.
1808 * Current usage: (may be updated based on hw changes)
1809 * Bits 31:13 - Reserved.
1810 * Bits 12:0
1811 * 12 - MSM_CAM_HW_JPEG2
1812 * 11 - MSM_CAM_HW_JPEG1
1813 * 10 - MSM_CAM_HW_JPEG0
1814 * 9 - MSM_CAM_HW_VFE1
1815 * 8 - MSM_CAM_HW_VFE0
1816 * 7 - MSM_CAM_HW_CPP
1817 * 6 - MSM_CAM_HW_ISPIF
1818 * 5 - MSM_CAM_HW_CSI3
1819 * 4 - MSM_CAM_HW_CSI2
1820 * 3 - MSM_CAM_HW_CSI1
1821 * 2 - MSM_CAM_HW_CSI0
1822 * 1 - MSM_CAM_HW_CCI
1823 * 0 - MSM_CAM_HW_MICRO
1824 */
1825 uint32_t cam_hw_mask;
1826 uint8_t irq_idx;
1827 uint8_t num_hwcore;
1828};
1829
1830#define MSM_IRQROUTER_CFG_COMPIRQ \
1831 _IOWR('V', BASE_VIDIOC_PRIVATE, void __user *)
1832
Kevin Chan73ec7282012-06-07 01:32:00 -07001833#define MAX_NUM_CPP_STRIPS 8
1834
1835enum msm_cpp_frame_type {
1836 MSM_CPP_OFFLINE_FRAME,
1837 MSM_CPP_REALTIME_FRAME,
1838};
1839
1840struct msm_cpp_frame_strip_info {
1841 int scale_v_en;
1842 int scale_h_en;
1843
1844 int upscale_v_en;
1845 int upscale_h_en;
1846
1847 int src_start_x;
1848 int src_end_x;
1849 int src_start_y;
1850 int src_end_y;
1851
1852 /* Padding is required for upscaler because it does not
1853 * pad internally like other blocks, also needed for rotation
1854 * rotation expects all the blocks in the stripe to be the same size
1855 * Padding is done such that all the extra padded pixels
1856 * are on the right and bottom
1857 */
1858 int pad_bottom;
1859 int pad_top;
1860 int pad_right;
1861 int pad_left;
1862
1863 int v_init_phase;
1864 int h_init_phase;
1865 int h_phase_step;
1866 int v_phase_step;
1867
1868 int prescale_crop_width_first_pixel;
1869 int prescale_crop_width_last_pixel;
1870 int prescale_crop_height_first_line;
1871 int prescale_crop_height_last_line;
1872
1873 int postscale_crop_height_first_line;
1874 int postscale_crop_height_last_line;
1875 int postscale_crop_width_first_pixel;
1876 int postscale_crop_width_last_pixel;
1877
1878 int dst_start_x;
1879 int dst_end_x;
1880 int dst_start_y;
1881 int dst_end_y;
1882
1883 int bytes_per_pixel;
1884 unsigned int source_address;
1885 unsigned int destination_address;
1886 unsigned int src_stride;
1887 unsigned int dst_stride;
1888 int rotate_270;
1889 int horizontal_flip;
1890 int vertical_flip;
1891 int scale_output_width;
1892 int scale_output_height;
1893};
1894
1895struct msm_cpp_frame_info_t {
1896 int32_t frame_id;
1897 uint32_t inst_id;
1898 uint32_t client_id;
1899 enum msm_cpp_frame_type frame_type;
1900 uint32_t num_strips;
1901 struct msm_cpp_frame_strip_info *strip_info;
1902};
1903
Lakshmi Narayana Kalavalabc315ea2012-07-24 09:55:48 -07001904struct msm_ver_num_info {
1905 uint32_t main;
1906 uint32_t minor;
1907 uint32_t rev;
1908};
1909
Kevin Chan73ec7282012-06-07 01:32:00 -07001910#define VIDIOC_MSM_CPP_CFG \
1911 _IOWR('V', BASE_VIDIOC_PRIVATE, struct msm_camera_v4l2_ioctl_t)
1912
1913#define VIDIOC_MSM_CPP_GET_EVENTPAYLOAD \
1914 _IOWR('V', BASE_VIDIOC_PRIVATE + 1, struct msm_camera_v4l2_ioctl_t)
1915
1916#define VIDIOC_MSM_CPP_GET_INST_INFO \
1917 _IOWR('V', BASE_VIDIOC_PRIVATE + 2, struct msm_camera_v4l2_ioctl_t)
1918
1919#define V4L2_EVENT_CPP_FRAME_DONE (V4L2_EVENT_PRIVATE_START + 0)
1920
Kiran Kumar H N90785902012-07-05 13:59:38 -07001921/* Instance Handle - inst_handle
1922 * Data bundle containing the information about where
1923 * to get a buffer for a particular camera instance.
1924 * This is a bitmask containing the following data:
1925 * Buffer Handle Bitmask:
1926 * ------------------------------------
1927 * Bits : Purpose
1928 * ------------------------------------
1929 * 31 - 24 : Reserved.
1930 * 23 : is Image mode valid?
1931 * 22 - 16 : Image mode.
1932 * 15 : is MCTL PP inst idx valid?
1933 * 14 - 8 : MCTL PP inst idx.
1934 * 7 : is Video inst idx valid?
1935 * 6 - 0 : Video inst idx.
1936 */
1937#define CLR_IMG_MODE(handle) (handle &= 0xFF00FFFF)
1938#define SET_IMG_MODE(handle, data) \
1939 (handle |= ((0x1 << 23) | ((data & 0x7F) << 16)))
1940#define GET_IMG_MODE(handle) \
1941 ((handle & 0x800000) ? ((handle & 0x7F0000) >> 16) : 0xFF)
1942
1943#define CLR_MCTLPP_INST_IDX(handle) (handle &= 0xFFFF00FF)
1944#define SET_MCTLPP_INST_IDX(handle, data) \
1945 (handle |= ((0x1 << 15) | ((data & 0x7F) << 8)))
1946#define GET_MCTLPP_INST_IDX(handle) \
1947 ((handle & 0x8000) ? ((handle & 0x7F00) >> 8) : 0xFF)
1948
1949#define CLR_VIDEO_INST_IDX(handle) (handle &= 0xFFFFFF00)
1950#define GET_VIDEO_INST_IDX(handle) \
1951 ((handle & 0x80) ? (handle & 0x7F) : 0xFF)
1952#define SET_VIDEO_INST_IDX(handle, data) \
1953 (handle |= (0x1 << 7) | (data & 0x7F))
1954
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001955#endif /* __LINUX_MSM_CAMERA_H */