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