13c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#ifndef MSM_CAM_ISPIF_H
23c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAM_ISPIF_H
33c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang
43c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define CSID_VERSION_V20                      0x02000011
53c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define CSID_VERSION_V22                      0x02001000
63c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define CSID_VERSION_V30                      0x30000000
73c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define CSID_VERSION_V3                      0x30000000
83c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang
93c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangenum msm_ispif_vfe_intf {
103c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	VFE0,
113c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	VFE1,
123c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	VFE_MAX
133c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang};
143c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define VFE0_MASK    (1 << VFE0)
153c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define VFE1_MASK    (1 << VFE1)
163c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang
173c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangenum msm_ispif_intftype {
183c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	PIX0,
193c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	RDI0,
203c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	PIX1,
213c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	RDI1,
223c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	RDI2,
233c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	INTF_MAX
243c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang};
253c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MAX_PARAM_ENTRIES (INTF_MAX * 2)
263c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MAX_CID_CH	8
273c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang
283c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define PIX0_MASK (1 << PIX0)
293c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define PIX1_MASK (1 << PIX1)
303c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define RDI0_MASK (1 << RDI0)
313c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define RDI1_MASK (1 << RDI1)
323c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define RDI2_MASK (1 << RDI2)
333c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang
343c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang
353c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangenum msm_ispif_vc {
363c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	VC0,
373c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	VC1,
383c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	VC2,
393c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	VC3,
403c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	VC_MAX
413c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang};
423c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang
433c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangenum msm_ispif_cid {
443c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	CID0,
453c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	CID1,
463c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	CID2,
473c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	CID3,
483c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	CID4,
493c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	CID5,
503c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	CID6,
513c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	CID7,
523c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	CID8,
533c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	CID9,
543c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	CID10,
553c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	CID11,
563c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	CID12,
573c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	CID13,
583c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	CID14,
593c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	CID15,
603c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	CID_MAX
613c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang};
623c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang
633c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangenum msm_ispif_csid {
643c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	CSID0,
653c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	CSID1,
663c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	CSID2,
673c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	CSID3,
683c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	CSID_MAX
693c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang};
703c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang
713c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangstruct msm_ispif_params_entry {
723c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	enum msm_ispif_vfe_intf vfe_intf;
733c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	enum msm_ispif_intftype intftype;
743c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	int num_cids;
753c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	enum msm_ispif_cid cids[3];
763c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	enum msm_ispif_csid csid;
773c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	int crop_enable;
783c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	uint16_t crop_start_pixel;
793c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	uint16_t crop_end_pixel;
803c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang};
813c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang
823c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangstruct msm_ispif_param_data {
833c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	uint32_t num;
843c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	struct msm_ispif_params_entry entries[MAX_PARAM_ENTRIES];
853c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang};
863c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang
873c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangstruct msm_isp_info {
883c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	uint32_t max_resolution;
893c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	uint32_t id;
903c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	uint32_t ver;
913c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang};
923c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang
933c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangstruct msm_ispif_vfe_info {
943c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	int num_vfe;
953c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	struct msm_isp_info info[VFE_MAX];
963c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang};
973c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang
983c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangenum ispif_cfg_type_t {
993c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	ISPIF_CLK_ENABLE,
1003c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	ISPIF_CLK_DISABLE,
1013c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	ISPIF_INIT,
1023c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	ISPIF_CFG,
1033c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	ISPIF_START_FRAME_BOUNDARY,
1043c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	ISPIF_STOP_FRAME_BOUNDARY,
1053c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	ISPIF_STOP_IMMEDIATELY,
1063c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	ISPIF_RELEASE,
1073c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	ISPIF_ENABLE_REG_DUMP,
1083c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	ISPIF_SET_VFE_INFO,
1093c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang};
1103c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang
1113c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangstruct ispif_cfg_data {
1123c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	enum ispif_cfg_type_t cfg_type;
1133c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	union {
1143c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang		int reg_dump;                        /* ISPIF_ENABLE_REG_DUMP */
1153c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang		uint32_t csid_version;               /* ISPIF_INIT */
1163c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang		struct msm_ispif_vfe_info vfe_info;  /* ISPIF_SET_VFE_INFO */
1173c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang		struct msm_ispif_param_data params;  /* CFG, START, STOP */
1183c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	};
1193c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang};
1203c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang
1213c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define VIDIOC_MSM_ISPIF_CFG \
1223c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang	_IOWR('V', BASE_VIDIOC_PRIVATE, struct ispif_cfg_data)
1233c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang
1243c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#endif /* MSM_CAM_ISPIF_H */
125