msmb_isp.h revision 537a84edd4d8369012dbe56730096d1eb3e0401d
1537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#ifndef __MSMB_ISP__
2537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define __MSMB_ISP__
3537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
4537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#include <linux/videodev2.h>
5537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
6537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define MAX_PLANES_PER_STREAM 3
7537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define MAX_NUM_STREAM 7
8537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
9537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define ISP_VERSION_40        40
10537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define ISP_VERSION_32        32
11537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define ISP_NATIVE_BUF_BIT    0x10000
12537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define ISP0_BIT              0x20000
13537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define ISP1_BIT              0x40000
14537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define ISP_STATS_STREAM_BIT  0x80000000
15537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
16537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanienum ISP_START_PIXEL_PATTERN {
17537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	ISP_BAYER_RGRGRG,
18537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	ISP_BAYER_GRGRGR,
19537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	ISP_BAYER_BGBGBG,
20537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	ISP_BAYER_GBGBGB,
21537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	ISP_YUV_YCbYCr,
22537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	ISP_YUV_YCrYCb,
23537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	ISP_YUV_CbYCrY,
24537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	ISP_YUV_CrYCbY,
25537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	ISP_PIX_PATTERN_MAX
26537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
27537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
28537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanienum msm_vfe_plane_fmt {
29537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	Y_PLANE,
30537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	CB_PLANE,
31537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	CR_PLANE,
32537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	CRCB_PLANE,
33537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	CBCR_PLANE,
34537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	VFE_PLANE_FMT_MAX
35537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
36537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
37537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanienum msm_vfe_input_src {
38537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	VFE_PIX_0,
39537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	VFE_RAW_0,
40537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	VFE_RAW_1,
41537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	VFE_RAW_2,
42537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	VFE_SRC_MAX,
43537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
44537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
45537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanienum msm_vfe_axi_stream_src {
46537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	PIX_ENCODER,
47537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	PIX_VIEWFINDER,
48537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	CAMIF_RAW,
49537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	IDEAL_RAW,
50537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	RDI_INTF_0,
51537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	RDI_INTF_1,
52537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	RDI_INTF_2,
53537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	VFE_AXI_SRC_MAX
54537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
55537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
56537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanienum msm_vfe_frame_skip_pattern {
57537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	NO_SKIP,
58537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	EVERY_2FRAME,
59537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	EVERY_3FRAME,
60537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	EVERY_4FRAME,
61537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	EVERY_5FRAME,
62537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	EVERY_6FRAME,
63537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	EVERY_7FRAME,
64537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	EVERY_8FRAME,
65537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	EVERY_16FRAME,
66537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	EVERY_32FRAME,
67537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	MAX_SKIP,
68537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
69537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
70537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanienum msm_vfe_camif_input {
71537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	CAMIF_DISABLED,
72537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	CAMIF_PAD_REG_INPUT,
73537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	CAMIF_MIDDI_INPUT,
74537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	CAMIF_MIPI_INPUT,
75537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
76537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
77537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct msm_vfe_camif_cfg {
78537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t lines_per_frame;
79537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t pixels_per_line;
80537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t first_pixel;
81537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t last_pixel;
82537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t first_line;
83537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t last_line;
84537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t epoch_line0;
85537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t epoch_line1;
86537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	enum msm_vfe_camif_input camif_input;
87537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
88537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
89537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanienum msm_vfe_inputmux {
90537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	CAMIF,
91537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	TESTGEN,
92537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	EXTERNAL_READ,
93537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
94537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
95537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct msm_vfe_pix_cfg {
96537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	struct msm_vfe_camif_cfg camif_cfg;
97537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	enum msm_vfe_inputmux input_mux;
98537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	enum ISP_START_PIXEL_PATTERN pixel_pattern;
99537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
100537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
101537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct msm_vfe_rdi_cfg {
102537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint8_t cid;
103537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint8_t frame_based;
104537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
105537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
106537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct msm_vfe_input_cfg {
107537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	union {
108537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani		struct msm_vfe_pix_cfg pix_cfg;
109537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani		struct msm_vfe_rdi_cfg rdi_cfg;
110537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	} d;
111537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	enum msm_vfe_input_src input_src;
112537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t input_pix_clk;
113537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
114537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
115537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct msm_vfe_axi_plane_cfg {
116537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t output_width; /*Include padding*/
117537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t output_height;
118537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t output_stride;
119537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t output_scan_lines;
120537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t output_plane_format; /*Y/Cb/Cr/CbCr*/
121537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t plane_addr_offset;
122537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint8_t csid_src; /*RDI 0-2*/
123537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint8_t rdi_cid;/*CID 1-16*/
124537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
125537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
126537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct msm_vfe_axi_stream_request_cmd {
127537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t session_id;
128537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t stream_id;
129537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t output_format;/*Planar/RAW/Misc*/
130537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	enum msm_vfe_axi_stream_src stream_src; /*CAMIF/IDEAL/RDIs*/
131537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	struct msm_vfe_axi_plane_cfg plane_cfg[MAX_PLANES_PER_STREAM];
132537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
133537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t burst_count;
134537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t hfr_mode;
135537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint8_t frame_base;
136537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
137537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t init_frame_drop; /*MAX 31 Frames*/
138537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	enum msm_vfe_frame_skip_pattern frame_skip_pattern;
139537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint8_t buf_divert; /* if TRUE no vb2 buf done. */
140537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	/*Return values*/
141537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t axi_stream_handle;
142537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
143537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
144537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct msm_vfe_axi_stream_release_cmd {
145537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t stream_handle;
146537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
147537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
148537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanienum msm_vfe_axi_stream_cmd {
149537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	STOP_STREAM,
150537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	START_STREAM,
151537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
152537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
153537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct msm_vfe_axi_stream_cfg_cmd {
154537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint8_t num_streams;
155537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t stream_handle[MAX_NUM_STREAM];
156537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	enum msm_vfe_axi_stream_cmd cmd;
157537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
158537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
159537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanienum msm_vfe_axi_stream_update_type {
160537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	ENABLE_STREAM_BUF_DIVERT,
161537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	DISABLE_STREAM_BUF_DIVERT,
162537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	UPDATE_STREAM_FRAMEDROP_PATTERN,
163537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
164537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
165537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct msm_vfe_axi_stream_update_cmd {
166537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t stream_handle;
167537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	enum msm_vfe_axi_stream_update_type update_type;
168537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	enum msm_vfe_frame_skip_pattern skip_pattern;
169537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
170537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
171537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanienum msm_isp_stats_type {
172537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	MSM_ISP_STATS_AEC,   /* legacy based AEC */
173537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	MSM_ISP_STATS_AF,    /* legacy based AF */
174537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	MSM_ISP_STATS_AWB,   /* legacy based AWB */
175537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	MSM_ISP_STATS_RS,    /* legacy based RS */
176537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	MSM_ISP_STATS_CS,    /* legacy based CS */
177537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	MSM_ISP_STATS_IHIST, /* legacy based HIST */
178537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	MSM_ISP_STATS_SKIN,  /* legacy based SKIN */
179537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	MSM_ISP_STATS_BG,    /* Bayer Grids */
180537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	MSM_ISP_STATS_BF,    /* Bayer Focus */
181537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	MSM_ISP_STATS_BE,    /* Bayer Exposure*/
182537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	MSM_ISP_STATS_BHIST, /* Bayer Hist */
183537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	MSM_ISP_STATS_MAX    /* MAX */
184537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
185537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
186537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct msm_vfe_stats_stream_request_cmd {
187537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t session_id;
188537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t stream_id;
189537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	enum msm_isp_stats_type stats_type;
190537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t composite_flag;
191537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t framedrop_pattern;
192537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t irq_subsample_pattern;
193537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t buffer_offset;
194537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t stream_handle;
195537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
196537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
197537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct msm_vfe_stats_stream_release_cmd {
198537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t stream_handle;
199537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
200537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct msm_vfe_stats_stream_cfg_cmd {
201537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint8_t num_streams;
202537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t stream_handle[MSM_ISP_STATS_MAX];
203537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint8_t enable;
204537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
205537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
206537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanienum msm_vfe_reg_cfg_type {
207537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	VFE_WRITE,
208537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	VFE_WRITE_MB,
209537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	VFE_READ,
210537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	VFE_CFG_MASK,
211537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	VFE_WRITE_DMI_16BIT,
212537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	VFE_WRITE_DMI_32BIT,
213537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	VFE_WRITE_DMI_64BIT,
214537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	VFE_READ_DMI_16BIT,
215537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	VFE_READ_DMI_32BIT,
216537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	VFE_READ_DMI_64BIT,
217537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
218537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
219537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct msm_vfe_cfg_cmd2 {
220537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint16_t num_cfg;
221537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint16_t cmd_len;
222537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	void __user *cfg_data;
223537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	void __user *cfg_cmd;
224537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
225537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
226537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct msm_vfe_reg_rw_info {
227537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t reg_offset;
228537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t cmd_data_offset;
229537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t len;
230537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
231537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
232537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct msm_vfe_reg_mask_info {
233537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t reg_offset;
234537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t mask;
235537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t val;
236537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
237537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
238537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct msm_vfe_reg_dmi_info {
239537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t hi_tbl_offset; /*Optional*/
240537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t lo_tbl_offset; /*Required*/
241537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t len;
242537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
243537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
244537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct msm_vfe_reg_cfg_cmd {
245537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	union {
246537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani		struct msm_vfe_reg_rw_info rw_info;
247537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani		struct msm_vfe_reg_mask_info mask_info;
248537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani		struct msm_vfe_reg_dmi_info dmi_info;
249537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	} u;
250537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
251537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	enum msm_vfe_reg_cfg_type cmd_type;
252537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
253537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
254537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanienum msm_isp_buf_type {
255537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	ISP_PRIVATE_BUF,
256537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	ISP_SHARE_BUF,
257537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	MAX_ISP_BUF_TYPE,
258537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
259537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
260537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct msm_isp_buf_request {
261537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t session_id;
262537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t stream_id;
263537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint8_t num_buf;
264537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t handle;
265537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	enum msm_isp_buf_type buf_type;
266537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
267537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
268537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct msm_isp_qbuf_info {
269537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t handle;
270537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	int buf_idx;
271537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	/*Only used for prepare buffer*/
272537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	struct v4l2_buffer buffer;
273537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	/*Only used for diverted buffer*/
274537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t dirty_buf;
275537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
276537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
277537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct msm_vfe_axi_src_state {
278537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	enum msm_vfe_input_src input_src;
279537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t src_active;
280537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
281537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
282537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanienum msm_isp_event_idx {
283537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	ISP_REG_UPDATE      = 0,
284537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	ISP_START_ACK       = 1,
285537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	ISP_STOP_ACK        = 2,
286537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	ISP_IRQ_VIOLATION   = 3,
287537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	ISP_WM_BUS_OVERFLOW = 4,
288537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	ISP_STATS_OVERFLOW  = 5,
289537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	ISP_CAMIF_ERROR     = 6,
290537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	ISP_SOF             = 7,
291537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	ISP_EOF             = 8,
292537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	ISP_EVENT_MAX       = 9
293537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
294537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
295537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define ISP_EVENT_OFFSET          8
296537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define ISP_EVENT_BASE            (V4L2_EVENT_PRIVATE_START)
297537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define ISP_BUF_EVENT_BASE        (ISP_EVENT_BASE + (1 << ISP_EVENT_OFFSET))
298537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define ISP_STATS_EVENT_BASE      (ISP_EVENT_BASE + (2 << ISP_EVENT_OFFSET))
299537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define ISP_EVENT_REG_UPDATE      (ISP_EVENT_BASE + ISP_REG_UPDATE)
300537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define ISP_EVENT_START_ACK       (ISP_EVENT_BASE + ISP_START_ACK)
301537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define ISP_EVENT_STOP_ACK        (ISP_EVENT_BASE + ISP_STOP_ACK)
302537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define ISP_EVENT_IRQ_VIOLATION   (ISP_EVENT_BASE + ISP_IRQ_VIOLATION)
303537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define ISP_EVENT_WM_BUS_OVERFLOW (ISP_EVENT_BASE + ISP_WM_BUS_OVERFLOW)
304537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define ISP_EVENT_STATS_OVERFLOW  (ISP_EVENT_BASE + ISP_STATS_OVERFLOW)
305537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define ISP_EVENT_CAMIF_ERROR     (ISP_EVENT_BASE + ISP_CAMIF_ERROR)
306537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define ISP_EVENT_SOF             (ISP_EVENT_BASE + ISP_SOF)
307537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define ISP_EVENT_EOF             (ISP_EVENT_BASE + ISP_EOF)
308537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define ISP_EVENT_BUF_DIVERT      (ISP_BUF_EVENT_BASE)
309537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define ISP_EVENT_STATS_NOTIFY    (ISP_STATS_EVENT_BASE)
310537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define ISP_EVENT_COMP_STATS_NOTIFY (ISP_EVENT_STATS_NOTIFY + MSM_ISP_STATS_MAX)
311537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani/* The msm_v4l2_event_data structure should match the
312537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani * v4l2_event.u.data field.
313537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani * should not exceed 64 bytes */
314537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
315537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct msm_isp_buf_event {
316537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t session_id;
317537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t stream_id;
318537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t handle;
319537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	int8_t buf_idx;
320537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
321537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct msm_isp_stats_event {
322537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t stats_mask;                        /* 4 bytes */
323537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint8_t stats_buf_idxs[MSM_ISP_STATS_MAX];  /* 11 bytes */
324537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
325537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
326537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct msm_isp_stream_ack {
327537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t session_id;
328537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t stream_id;
329537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t handle;
330537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
331537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
332537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct msm_isp_event_data {
333537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	/*Wall clock except for buffer divert events
334537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	 *which use monotonic clock
335537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	 */
336537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	struct timeval timestamp;
337537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	/* if pix is a src frame_id is from camif */
338537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t frame_id;
339537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	union {
340537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani		/* START_ACK, STOP_ACK */
341537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani		struct msm_isp_stream_ack stream_ack;
342537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani		/* REG_UPDATE_TRIGGER, bus over flow */
343537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani		enum msm_vfe_input_src input_src;
344537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani		/* stats notify */
345537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani		struct msm_isp_stats_event stats;
346537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani		/* IRQ_VIOLATION, STATS_OVER_FLOW, WM_OVER_FLOW */
347537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani		uint32_t irq_status_mask;
348537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani		struct msm_isp_buf_event buf_done;
349537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	} u; /* union can have max 52 bytes */
350537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
351537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
352537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define V4L2_PIX_FMT_QBGGR8  v4l2_fourcc('Q', 'B', 'G', '8')
353537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define V4L2_PIX_FMT_QGBRG8  v4l2_fourcc('Q', 'G', 'B', '8')
354537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define V4L2_PIX_FMT_QGRBG8  v4l2_fourcc('Q', 'G', 'R', '8')
355537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define V4L2_PIX_FMT_QRGGB8  v4l2_fourcc('Q', 'R', 'G', '8')
356537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define V4L2_PIX_FMT_QBGGR10 v4l2_fourcc('Q', 'B', 'G', '0')
357537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define V4L2_PIX_FMT_QGBRG10 v4l2_fourcc('Q', 'G', 'B', '0')
358537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define V4L2_PIX_FMT_QGRBG10 v4l2_fourcc('Q', 'G', 'R', '0')
359537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define V4L2_PIX_FMT_QRGGB10 v4l2_fourcc('Q', 'R', 'G', '0')
360537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define V4L2_PIX_FMT_QBGGR12 v4l2_fourcc('Q', 'B', 'G', '2')
361537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define V4L2_PIX_FMT_QGBRG12 v4l2_fourcc('Q', 'G', 'B', '2')
362537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define V4L2_PIX_FMT_QGRBG12 v4l2_fourcc('Q', 'G', 'R', '2')
363537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define V4L2_PIX_FMT_QRGGB12 v4l2_fourcc('Q', 'R', 'G', '2')
364537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
365537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define VIDIOC_MSM_VFE_REG_CFG \
366537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	_IOWR('V', BASE_VIDIOC_PRIVATE, struct msm_vfe_cfg_cmd2)
367537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
368537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define VIDIOC_MSM_ISP_REQUEST_BUF \
369537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	_IOWR('V', BASE_VIDIOC_PRIVATE+1, struct msm_isp_buf_request)
370537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
371537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define VIDIOC_MSM_ISP_ENQUEUE_BUF \
372537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	_IOWR('V', BASE_VIDIOC_PRIVATE+2, struct msm_isp_qbuf_info)
373537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
374537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define VIDIOC_MSM_ISP_RELEASE_BUF \
375537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	_IOWR('V', BASE_VIDIOC_PRIVATE+3, struct msm_isp_buf_request)
376537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
377537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define VIDIOC_MSM_ISP_REQUEST_STREAM \
378537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	_IOWR('V', BASE_VIDIOC_PRIVATE+4, struct msm_vfe_axi_stream_request_cmd)
379537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
380537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define VIDIOC_MSM_ISP_CFG_STREAM \
381537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	_IOWR('V', BASE_VIDIOC_PRIVATE+5, struct msm_vfe_axi_stream_cfg_cmd)
382537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
383537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define VIDIOC_MSM_ISP_RELEASE_STREAM \
384537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	_IOWR('V', BASE_VIDIOC_PRIVATE+6, struct msm_vfe_axi_stream_release_cmd)
385537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
386537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define VIDIOC_MSM_ISP_INPUT_CFG \
387537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	_IOWR('V', BASE_VIDIOC_PRIVATE+7, struct msm_vfe_input_cfg)
388537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
389537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define VIDIOC_MSM_ISP_SET_SRC_STATE \
390537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	_IOWR('V', BASE_VIDIOC_PRIVATE+8, struct msm_vfe_axi_src_state)
391537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
392537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define VIDIOC_MSM_ISP_REQUEST_STATS_STREAM \
393537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	_IOWR('V', BASE_VIDIOC_PRIVATE+9, \
394537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	struct msm_vfe_stats_stream_request_cmd)
395537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
396537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define VIDIOC_MSM_ISP_CFG_STATS_STREAM \
397537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	_IOWR('V', BASE_VIDIOC_PRIVATE+10, struct msm_vfe_stats_stream_cfg_cmd)
398537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
399537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define VIDIOC_MSM_ISP_RELEASE_STATS_STREAM \
400537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	_IOWR('V', BASE_VIDIOC_PRIVATE+11, \
401537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	struct msm_vfe_stats_stream_release_cmd)
402537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
403537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define VIDIOC_MSM_ISP_UPDATE_STREAM \
404537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	_IOWR('V', BASE_VIDIOC_PRIVATE+13, struct msm_vfe_axi_stream_update_cmd)
405537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
406537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#endif /* __MSMB_ISP__ */
407