blob: 8bb2f8c4b401e7a37c8113931a2f79b4be0e02cf [file] [log] [blame]
Pratap Nirujogi6e759912018-01-17 17:51:17 +05301#ifndef __UAPI_LINUX_MSMB_CAMERA_H
2#define __UAPI_LINUX_MSMB_CAMERA_H
3
4#include <linux/videodev2.h>
5#include <linux/types.h>
6#include <linux/ioctl.h>
Trishansh Bhardwaj586ba082018-02-24 15:02:44 +05307#include <linux/media.h>
Pratap Nirujogi6e759912018-01-17 17:51:17 +05308
9#define MSM_CAM_LOGSYNC_FILE_NAME "logsync"
10#define MSM_CAM_LOGSYNC_FILE_BASEDIR "camera"
11
12#define MSM_CAM_V4L2_IOCTL_NOTIFY \
13 _IOW('V', BASE_VIDIOC_PRIVATE + 30, struct msm_v4l2_event_data)
14
15#define MSM_CAM_V4L2_IOCTL_NOTIFY_META \
16 _IOW('V', BASE_VIDIOC_PRIVATE + 31, struct msm_v4l2_event_data)
17
18#define MSM_CAM_V4L2_IOCTL_CMD_ACK \
19 _IOW('V', BASE_VIDIOC_PRIVATE + 32, struct msm_v4l2_event_data)
20
21#define MSM_CAM_V4L2_IOCTL_NOTIFY_ERROR \
22 _IOW('V', BASE_VIDIOC_PRIVATE + 33, struct msm_v4l2_event_data)
23
24#define MSM_CAM_V4L2_IOCTL_NOTIFY_DEBUG \
25 _IOW('V', BASE_VIDIOC_PRIVATE + 34, struct msm_v4l2_event_data)
26
27#define MSM_CAM_V4L2_IOCTL_DAEMON_DISABLED \
28 _IOW('V', BASE_VIDIOC_PRIVATE + 35, struct msm_v4l2_event_data)
29
Trishansh Bhardwaj586ba082018-02-24 15:02:44 +053030#define QCAMERA_VNODE_GROUP_ID MEDIA_ENT_F_IO_V4L
Pratap Nirujogi6e759912018-01-17 17:51:17 +053031#define MSM_CAMERA_NAME "msm_camera"
32#define MSM_CONFIGURATION_NAME "msm_config"
33
Trishansh Bhardwaj586ba082018-02-24 15:02:44 +053034//#define MSM_CAMERA_SUBDEV_BASE (MEDIA_ENT_F_OLD_SUBDEV_BASE + 1)
35#define MSM_CAMERA_SUBDEV_BASE (MEDIA_ENT_F_OLD_BASE + 0xF00)
36#define MSM_CAMERA_SUBDEV_CSIPHY (MSM_CAMERA_SUBDEV_BASE + 0)
37//#define MSM_CAMERA_SUBDEV_CSID (MSM_CAMERA_SUBDEV_BASE + 1)
38#define MSM_CAMERA_SUBDEV_CSID (MSM_CAMERA_SUBDEV_BASE + 13)
39#define MSM_CAMERA_SUBDEV_ISPIF (MSM_CAMERA_SUBDEV_BASE + 2)
40#define MSM_CAMERA_SUBDEV_VFE (MSM_CAMERA_SUBDEV_BASE + 3)
41#define MSM_CAMERA_SUBDEV_AXI (MSM_CAMERA_SUBDEV_BASE + 4)
42#define MSM_CAMERA_SUBDEV_VPE (MSM_CAMERA_SUBDEV_BASE + 5)
43#define MSM_CAMERA_SUBDEV_SENSOR (MSM_CAMERA_SUBDEV_BASE + 6)
44#define MSM_CAMERA_SUBDEV_ACTUATOR (MSM_CAMERA_SUBDEV_BASE + 7)
45#define MSM_CAMERA_SUBDEV_EEPROM (MSM_CAMERA_SUBDEV_BASE + 8)
46#define MSM_CAMERA_SUBDEV_CPP (MSM_CAMERA_SUBDEV_BASE + 9)
47#define MSM_CAMERA_SUBDEV_CCI (MSM_CAMERA_SUBDEV_BASE + 10)
48#define MSM_CAMERA_SUBDEV_LED_FLASH (MSM_CAMERA_SUBDEV_BASE + 11)
49#define MSM_CAMERA_SUBDEV_STROBE_FLASH (MSM_CAMERA_SUBDEV_BASE + 12)
50#define MSM_CAMERA_SUBDEV_BUF_MNGR (MSM_CAMERA_SUBDEV_BASE + 1)
51//#define MSM_CAMERA_SUBDEV_BUF_MNGR (MSM_CAMERA_SUBDEV_BASE + 13)
52#define MSM_CAMERA_SUBDEV_SENSOR_INIT (MSM_CAMERA_SUBDEV_BASE + 14)
53#define MSM_CAMERA_SUBDEV_OIS (MSM_CAMERA_SUBDEV_BASE + 15)
54#define MSM_CAMERA_SUBDEV_FLASH (MSM_CAMERA_SUBDEV_BASE + 16)
55#define MSM_CAMERA_SUBDEV_IR_LED (MSM_CAMERA_SUBDEV_BASE + 17)
56#define MSM_CAMERA_SUBDEV_IR_CUT (MSM_CAMERA_SUBDEV_BASE + 18)
57#define MSM_CAMERA_SUBDEV_EXT (MSM_CAMERA_SUBDEV_BASE + 19)
58#define MSM_CAMERA_SUBDEV_TOF (MSM_CAMERA_SUBDEV_BASE + 20)
59#define MSM_CAMERA_SUBDEV_LASER_LED (MSM_CAMERA_SUBDEV_BASE + 21)
Pratap Nirujogi6e759912018-01-17 17:51:17 +053060#define MSM_MAX_CAMERA_SENSORS 5
61
62/* The below macro is defined to put an upper limit on maximum
63 * number of buffer requested per stream. In case of extremely
64 * large value for number of buffer due to data structure corruption
65 * we return error to avoid integer overflow. Group processing
66 * can have max of 9 groups of 8 bufs each. This value may be
67 * configured in future
68 */
69#define MSM_CAMERA_MAX_STREAM_BUF 72
70
71/* Max batch size of processing */
72#define MSM_CAMERA_MAX_USER_BUFF_CNT 16
73
74/* featur base */
75#define MSM_CAMERA_FEATURE_BASE 0x00010000
76#define MSM_CAMERA_FEATURE_SHUTDOWN (MSM_CAMERA_FEATURE_BASE + 1)
77
78#define MSM_CAMERA_STATUS_BASE 0x00020000
79#define MSM_CAMERA_STATUS_FAIL (MSM_CAMERA_STATUS_BASE + 1)
80#define MSM_CAMERA_STATUS_SUCCESS (MSM_CAMERA_STATUS_BASE + 2)
81
82/* event type */
83#define MSM_CAMERA_V4L2_EVENT_TYPE (V4L2_EVENT_PRIVATE_START + 0x00002000)
84
85/* event id */
86#define MSM_CAMERA_EVENT_MIN 0
87#define MSM_CAMERA_NEW_SESSION (MSM_CAMERA_EVENT_MIN + 1)
88#define MSM_CAMERA_DEL_SESSION (MSM_CAMERA_EVENT_MIN + 2)
89#define MSM_CAMERA_SET_PARM (MSM_CAMERA_EVENT_MIN + 3)
90#define MSM_CAMERA_GET_PARM (MSM_CAMERA_EVENT_MIN + 4)
91#define MSM_CAMERA_MAPPING_CFG (MSM_CAMERA_EVENT_MIN + 5)
92#define MSM_CAMERA_MAPPING_SES (MSM_CAMERA_EVENT_MIN + 6)
93#define MSM_CAMERA_MSM_NOTIFY (MSM_CAMERA_EVENT_MIN + 7)
94#define MSM_CAMERA_EVENT_MAX (MSM_CAMERA_EVENT_MIN + 8)
95
96/* data.command */
97#define MSM_CAMERA_PRIV_S_CROP (V4L2_CID_PRIVATE_BASE + 1)
98#define MSM_CAMERA_PRIV_G_CROP (V4L2_CID_PRIVATE_BASE + 2)
99#define MSM_CAMERA_PRIV_G_FMT (V4L2_CID_PRIVATE_BASE + 3)
100#define MSM_CAMERA_PRIV_S_FMT (V4L2_CID_PRIVATE_BASE + 4)
101#define MSM_CAMERA_PRIV_TRY_FMT (V4L2_CID_PRIVATE_BASE + 5)
102#define MSM_CAMERA_PRIV_METADATA (V4L2_CID_PRIVATE_BASE + 6)
103#define MSM_CAMERA_PRIV_QUERY_CAP (V4L2_CID_PRIVATE_BASE + 7)
104#define MSM_CAMERA_PRIV_STREAM_ON (V4L2_CID_PRIVATE_BASE + 8)
105#define MSM_CAMERA_PRIV_STREAM_OFF (V4L2_CID_PRIVATE_BASE + 9)
106#define MSM_CAMERA_PRIV_NEW_STREAM (V4L2_CID_PRIVATE_BASE + 10)
107#define MSM_CAMERA_PRIV_DEL_STREAM (V4L2_CID_PRIVATE_BASE + 11)
108#define MSM_CAMERA_PRIV_SHUTDOWN (V4L2_CID_PRIVATE_BASE + 12)
109#define MSM_CAMERA_PRIV_STREAM_INFO_SYNC \
110 (V4L2_CID_PRIVATE_BASE + 13)
111#define MSM_CAMERA_PRIV_G_SESSION_ID (V4L2_CID_PRIVATE_BASE + 14)
112#define MSM_CAMERA_PRIV_CMD_MAX 20
113
114/* data.status - success */
115#define MSM_CAMERA_CMD_SUCCESS 0x00000001
116#define MSM_CAMERA_BUF_MAP_SUCCESS 0x00000002
117
118/* data.status - error */
119#define MSM_CAMERA_ERR_EVT_BASE 0x00010000
120#define MSM_CAMERA_ERR_CMD_FAIL (MSM_CAMERA_ERR_EVT_BASE + 1)
121#define MSM_CAMERA_ERR_MAPPING (MSM_CAMERA_ERR_EVT_BASE + 2)
122#define MSM_CAMERA_ERR_DEVICE_BUSY (MSM_CAMERA_ERR_EVT_BASE + 3)
123
124/* The msm_v4l2_event_data structure should match the
125 * v4l2_event.u.data field.
126 * should not exceed 16 elements
127 */
128struct msm_v4l2_event_data {
129 /*word 0*/
130 unsigned int command;
131 /*word 1*/
132 unsigned int status;
133 /*word 2*/
134 unsigned int session_id;
135 /*word 3*/
136 unsigned int stream_id;
137 /*word 4*/
138 unsigned int map_op;
139 /*word 5*/
140 unsigned int map_buf_idx;
141 /*word 6*/
142 unsigned int notify;
143 /*word 7*/
144 unsigned int arg_value;
145 /*word 8*/
146 unsigned int ret_value;
147 /*word 9*/
148 unsigned int v4l2_event_type;
149 /*word 10*/
150 unsigned int v4l2_event_id;
151 /*word 11*/
152 unsigned int handle;
153 /*word 12*/
154 unsigned int nop6;
155 /*word 13*/
156 unsigned int nop7;
157 /*word 14*/
158 unsigned int nop8;
159 /*word 15*/
160 unsigned int nop9;
161};
162
163/* map to v4l2_format.fmt.raw_data */
164struct msm_v4l2_format_data {
165 enum v4l2_buf_type type;
166 unsigned int width;
167 unsigned int height;
168 unsigned int pixelformat; /* FOURCC */
169 unsigned char num_planes;
170 unsigned int plane_sizes[VIDEO_MAX_PLANES];
171};
172
173/* MSM Four-character-code (FOURCC) */
174#define msm_v4l2_fourcc(a, b, c, d)\
175 ((__u32)(a) | ((__u32)(b) << 8) | ((__u32)(c) << 16) |\
176 ((__u32)(d) << 24))
177
178/* Composite stats */
179#define MSM_V4L2_PIX_FMT_STATS_COMB v4l2_fourcc('S', 'T', 'C', 'M')
180/* AEC stats */
181#define MSM_V4L2_PIX_FMT_STATS_AE v4l2_fourcc('S', 'T', 'A', 'E')
182/* AF stats */
183#define MSM_V4L2_PIX_FMT_STATS_AF v4l2_fourcc('S', 'T', 'A', 'F')
184/* AWB stats */
185#define MSM_V4L2_PIX_FMT_STATS_AWB v4l2_fourcc('S', 'T', 'W', 'B')
186/* IHIST stats */
187#define MSM_V4L2_PIX_FMT_STATS_IHST v4l2_fourcc('I', 'H', 'S', 'T')
188/* Column count stats */
189#define MSM_V4L2_PIX_FMT_STATS_CS v4l2_fourcc('S', 'T', 'C', 'S')
190/* Row count stats */
191#define MSM_V4L2_PIX_FMT_STATS_RS v4l2_fourcc('S', 'T', 'R', 'S')
192/* Bayer Grid stats */
193#define MSM_V4L2_PIX_FMT_STATS_BG v4l2_fourcc('S', 'T', 'B', 'G')
194/* Bayer focus stats */
195#define MSM_V4L2_PIX_FMT_STATS_BF v4l2_fourcc('S', 'T', 'B', 'F')
196/* Bayer hist stats */
197#define MSM_V4L2_PIX_FMT_STATS_BHST v4l2_fourcc('B', 'H', 'S', 'T')
198
199enum smmu_attach_mode {
200 NON_SECURE_MODE = 0x01,
201 SECURE_MODE = 0x02,
202 MAX_PROTECTION_MODE = 0x03,
203};
204
205struct msm_camera_smmu_attach_type {
206 enum smmu_attach_mode attach;
207};
208
209struct msm_camera_user_buf_cont_t {
210 unsigned int buf_cnt;
211 unsigned int buf_idx[MSM_CAMERA_MAX_USER_BUFF_CNT];
212};
213
214struct msm_camera_return_buf {
215 __u32 index;
216 __u32 reserved;
217};
218
219#define MSM_CAMERA_PRIV_IOCTL_ID_BASE 0
220#define MSM_CAMERA_PRIV_IOCTL_ID_RETURN_BUF 1
221
222struct msm_camera_private_ioctl_arg {
223 __u32 id;
224 __u32 size;
225 __u32 result;
226 __u32 reserved;
227 __u64 ioctl_ptr;
228};
229
230#define VIDIOC_MSM_CAMERA_PRIVATE_IOCTL_CMD \
231 _IOWR('V', BASE_VIDIOC_PRIVATE, struct msm_camera_private_ioctl_arg)
232
233#endif
234