13c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#ifndef __LINUX_MSMB_CAMERA_H
23c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define __LINUX_MSMB_CAMERA_H
33c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang
43c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#include <linux/videodev2.h>
53c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#include <linux/types.h>
63c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#include <linux/ioctl.h>
73c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang
83c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAM_V4L2_IOCTL_NOTIFY \
93c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	_IOW('V', BASE_VIDIOC_PRIVATE + 30, struct msm_v4l2_event_data)
103c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang
113c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAM_V4L2_IOCTL_NOTIFY_META \
123c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	_IOW('V', BASE_VIDIOC_PRIVATE + 31, struct msm_v4l2_event_data)
133c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang
143c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAM_V4L2_IOCTL_CMD_ACK \
153c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	_IOW('V', BASE_VIDIOC_PRIVATE + 32, struct msm_v4l2_event_data)
163c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang
173c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAM_V4L2_IOCTL_NOTIFY_ERROR \
183c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	_IOW('V', BASE_VIDIOC_PRIVATE + 33, struct msm_v4l2_event_data)
193c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang
203c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define QCAMERA_DEVICE_GROUP_ID	1
213c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define QCAMERA_VNODE_GROUP_ID	2
223c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_NAME					"msm_camera"
233c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CONFIGURATION_NAME	"msm_config"
243c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang
253c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_SUBDEV_CSIPHY       0
263c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_SUBDEV_CSID         1
273c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_SUBDEV_ISPIF        2
283c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_SUBDEV_VFE          3
293c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_SUBDEV_AXI          4
303c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_SUBDEV_VPE          5
313c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_SUBDEV_SENSOR       6
323c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_SUBDEV_ACTUATOR     7
333c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_SUBDEV_EEPROM       8
343c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_SUBDEV_CPP          9
353c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_SUBDEV_CCI          10
363c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_SUBDEV_LED_FLASH    11
373c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_SUBDEV_STROBE_FLASH 12
383c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_SUBDEV_BUF_MNGR     13
393c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_SUBDEV_SENSOR_INIT  14
40f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab#define MSM_CAMERA_SUBDEV_OIS          15
413c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang
423c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_SUBDEV_CCI_INTF     20
433c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang
443c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_MAX_CAMERA_SENSORS  5
453c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang
463c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang/* The below macro is defined to put an upper limit on maximum
473c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang * number of buffer requested per stream. In case of extremely
483c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang * large value for number of buffer due to data structure corruption
493c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang * we return error to avoid integer overflow. This value may be
503c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang * configured in future*/
513c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_MAX_STREAM_BUF 40
523c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang
533c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang/* featur base */
543c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_FEATURE_BASE     0x00010000
553c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_FEATURE_SHUTDOWN (MSM_CAMERA_FEATURE_BASE + 1)
563c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang
573c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_STATUS_BASE      0x00020000
583c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_STATUS_FAIL      (MSM_CAMERA_STATUS_BASE + 1)
593c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_STATUS_SUCCESS   (MSM_CAMERA_STATUS_BASE + 2)
603c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang
613c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang/* event type */
623c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_V4L2_EVENT_TYPE (V4L2_EVENT_PRIVATE_START + 0x00002000)
633c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang
643c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang/* event id */
653c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_EVENT_MIN    0
663c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_NEW_SESSION  (MSM_CAMERA_EVENT_MIN + 1)
673c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_DEL_SESSION  (MSM_CAMERA_EVENT_MIN + 2)
683c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_SET_PARM     (MSM_CAMERA_EVENT_MIN + 3)
693c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_GET_PARM     (MSM_CAMERA_EVENT_MIN + 4)
703c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_MAPPING_CFG  (MSM_CAMERA_EVENT_MIN + 5)
713c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_MAPPING_SES  (MSM_CAMERA_EVENT_MIN + 6)
723c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_MSM_NOTIFY   (MSM_CAMERA_EVENT_MIN + 7)
733c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_EVENT_MAX    (MSM_CAMERA_EVENT_MIN + 8)
743c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang
753c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang/* data.command */
763c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_PRIV_S_CROP		 (V4L2_CID_PRIVATE_BASE + 1)
773c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_PRIV_G_CROP		 (V4L2_CID_PRIVATE_BASE + 2)
783c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_PRIV_G_FMT			 (V4L2_CID_PRIVATE_BASE + 3)
793c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_PRIV_S_FMT			 (V4L2_CID_PRIVATE_BASE + 4)
803c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_PRIV_TRY_FMT		 (V4L2_CID_PRIVATE_BASE + 5)
813c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_PRIV_METADATA	 (V4L2_CID_PRIVATE_BASE + 6)
823c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_PRIV_QUERY_CAP  (V4L2_CID_PRIVATE_BASE + 7)
833c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_PRIV_STREAM_ON  (V4L2_CID_PRIVATE_BASE + 8)
843c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_PRIV_STREAM_OFF (V4L2_CID_PRIVATE_BASE + 9)
853c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_PRIV_NEW_STREAM (V4L2_CID_PRIVATE_BASE + 10)
863c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_PRIV_DEL_STREAM (V4L2_CID_PRIVATE_BASE + 11)
873c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_PRIV_SHUTDOWN   (V4L2_CID_PRIVATE_BASE + 12)
883c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_PRIV_STREAM_INFO_SYNC \
893c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	(V4L2_CID_PRIVATE_BASE + 13)
903c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang
913c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang/* data.status - success */
923c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_CMD_SUCESS      0x00000001
933c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_BUF_MAP_SUCESS  0x00000002
943c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang
953c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang/* data.status - error */
963c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_ERR_EVT_BASE 0x00010000
973c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_ERR_CMD_FAIL (MSM_CAMERA_ERR_EVT_BASE + 1)
983c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_ERR_MAPPING  (MSM_CAMERA_ERR_EVT_BASE + 2)
993c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang
1003c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang/* The msm_v4l2_event_data structure should match the
1013c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang * v4l2_event.u.data field.
1023c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang * should not exceed 16 elements */
1033c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangstruct msm_v4l2_event_data {
1043c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	/*word 0*/
1053c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	unsigned int command;
1063c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	/*word 1*/
1073c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	unsigned int status;
1083c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	/*word 2*/
1093c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	unsigned int session_id;
1103c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	/*word 3*/
1113c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	unsigned int stream_id;
1123c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	/*word 4*/
1133c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	unsigned int map_op;
1143c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	/*word 5*/
1153c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	unsigned int map_buf_idx;
1163c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	/*word 6*/
1173c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	unsigned int notify;
1183c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	/*word 7*/
1193c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	unsigned int arg_value;
1203c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	/*word 8*/
1213c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	unsigned int ret_value;
1223c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	/*word 9*/
1233c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	unsigned int v4l2_event_type;
1243c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	/*word 10*/
1253c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	unsigned int v4l2_event_id;
1263c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	/*word 11*/
1273c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	unsigned int nop5;
1283c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	/*word 12*/
1293c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	unsigned int nop6;
1303c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	/*word 13*/
1313c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	unsigned int nop7;
1323c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	/*word 14*/
1333c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	unsigned int nop8;
1343c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	/*word 15*/
1353c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	unsigned int nop9;
1363c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang};
1373c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang
1383c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang/* map to v4l2_format.fmt.raw_data */
1393c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangstruct msm_v4l2_format_data {
1403c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	enum v4l2_buf_type type;
1413c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	unsigned int width;
1423c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	unsigned int height;
1433c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	unsigned int pixelformat; /* FOURCC */
1443c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	unsigned char num_planes;
1453c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	unsigned int plane_sizes[VIDEO_MAX_PLANES];
1463c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang};
1473c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang
1483c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang/*  MSM Four-character-code (FOURCC) */
1493c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define msm_v4l2_fourcc(a, b, c, d)\
1503c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	((__u32)(a) | ((__u32)(b) << 8) | ((__u32)(c) << 16) |\
1513c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	((__u32)(d) << 24))
1523c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang
1533c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang/* Composite stats */
1543c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_V4L2_PIX_FMT_STATS_COMB v4l2_fourcc('S', 'T', 'C', 'M')
1553c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang/* AEC stats */
1563c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_V4L2_PIX_FMT_STATS_AE   v4l2_fourcc('S', 'T', 'A', 'E')
1573c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang/* AF stats */
1583c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_V4L2_PIX_FMT_STATS_AF   v4l2_fourcc('S', 'T', 'A', 'F')
1593c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang/* AWB stats */
1603c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_V4L2_PIX_FMT_STATS_AWB  v4l2_fourcc('S', 'T', 'W', 'B')
1613c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang/* IHIST stats */
1623c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_V4L2_PIX_FMT_STATS_IHST v4l2_fourcc('I', 'H', 'S', 'T')
1633c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang/* Column count stats */
1643c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_V4L2_PIX_FMT_STATS_CS   v4l2_fourcc('S', 'T', 'C', 'S')
1653c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang/* Row count stats */
1663c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_V4L2_PIX_FMT_STATS_RS   v4l2_fourcc('S', 'T', 'R', 'S')
1673c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang/* Bayer Grid stats */
1683c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_V4L2_PIX_FMT_STATS_BG   v4l2_fourcc('S', 'T', 'B', 'G')
1693c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang/* Bayer focus stats */
1703c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_V4L2_PIX_FMT_STATS_BF   v4l2_fourcc('S', 'T', 'B', 'F')
1713c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang/* Bayer hist stats */
1723c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_V4L2_PIX_FMT_STATS_BHST v4l2_fourcc('B', 'H', 'S', 'T')
1733c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang
1743c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangenum smmu_attach_mode {
1753c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	NON_SECURE_MODE,
1763c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	SECURE_MODE,
1773c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	MAX_PROTECTION_MODE,
1783c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang};
1793c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang
1803c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangstruct msm_camera_smmu_attach_type {
1813c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	enum smmu_attach_mode attach;
1823c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang};
1833c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang
1843c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#endif /* __LINUX_MSMB_CAMERA_H */
185