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