blob: 98cddcdaf0867021dcf865c3b2695ad512b375ac [file] [log] [blame]
Pratap Nirujogi6e759912018-01-17 17:51:17 +05301#ifndef __UAPI_LINUX_MSM_CAMSENSOR_SDK_H
2#define __UAPI_LINUX_MSM_CAMSENSOR_SDK_H
3
4#include <linux/videodev2.h>
5
6#define KVERSION 0x1
7
8#define MAX_POWER_CONFIG 12
9#define GPIO_OUT_LOW (0 << 1)
10#define GPIO_OUT_HIGH (1 << 1)
11#define CSI_EMBED_DATA 0x12
12#define CSI_RESERVED_DATA_0 0x13
13#define CSI_YUV422_8 0x1E
14#define CSI_RAW8 0x2A
15#define CSI_RAW10 0x2B
16#define CSI_RAW12 0x2C
17#define CSI_DECODE_6BIT 0
18#define CSI_DECODE_8BIT 1
19#define CSI_DECODE_10BIT 2
20#define CSI_DECODE_12BIT 3
21#define CSI_DECODE_DPCM_10_6_10 4
22#define CSI_DECODE_DPCM_10_8_10 5
23#define MAX_CID 16
24#define I2C_SEQ_REG_DATA_MAX 1024
25#define I2C_REG_DATA_MAX (8*1024)
26
27#define MSM_V4L2_PIX_FMT_META v4l2_fourcc('M', 'E', 'T', 'A') /* META */
28#define MSM_V4L2_PIX_FMT_SBGGR14 v4l2_fourcc('B', 'G', '1', '4')
29 /* 14 BGBG.. GRGR.. */
30#define MSM_V4L2_PIX_FMT_SGBRG14 v4l2_fourcc('G', 'B', '1', '4')
31 /* 14 GBGB.. RGRG.. */
32#define MSM_V4L2_PIX_FMT_SGRBG14 v4l2_fourcc('B', 'A', '1', '4')
33 /* 14 GRGR.. BGBG.. */
34#define MSM_V4L2_PIX_FMT_SRGGB14 v4l2_fourcc('R', 'G', '1', '4')
35 /* 14 RGRG.. GBGB.. */
36
37#define MAX_ACTUATOR_REG_TBL_SIZE 8
38#define MAX_ACTUATOR_REGION 5
39#define NUM_ACTUATOR_DIR 2
40#define MAX_ACTUATOR_SCENARIO 8
41#define MAX_ACT_MOD_NAME_SIZE 32
42#define MAX_ACT_NAME_SIZE 32
43#define MAX_ACTUATOR_INIT_SET 120
44#define MAX_I2C_REG_SET 12
45
46#define MAX_LED_TRIGGERS 3
47
48#define MSM_EEPROM_MEMORY_MAP_MAX_SIZE 80
49#define MSM_EEPROM_MAX_MEM_MAP_CNT 8
50
51#define MSM_SENSOR_BYPASS_VIDEO_NODE 1
52
Vijay kumar Tumati13e62de2018-05-29 10:25:01 +053053#define SENSOR_PROBE_WRITE
54
Pratap Nirujogi6e759912018-01-17 17:51:17 +053055enum msm_sensor_camera_id_t {
56 CAMERA_0,
57 CAMERA_1,
58 CAMERA_2,
59 CAMERA_3,
60 MAX_CAMERAS,
61};
62
63enum i2c_freq_mode_t {
64 I2C_STANDARD_MODE,
65 I2C_FAST_MODE,
66 I2C_CUSTOM_MODE,
67 I2C_FAST_PLUS_MODE,
68 I2C_MAX_MODES,
69};
70
71enum camb_position_t {
72 BACK_CAMERA_B,
73 FRONT_CAMERA_B,
74 AUX_CAMERA_B = 0x100,
75 INVALID_CAMERA_B,
76};
77
78enum msm_sensor_power_seq_type_t {
79 SENSOR_CLK,
80 SENSOR_GPIO,
81 SENSOR_VREG,
82 SENSOR_I2C_MUX,
83 SENSOR_I2C,
84};
85
86enum msm_camera_i2c_reg_addr_type {
87 MSM_CAMERA_I2C_BYTE_ADDR = 1,
88 MSM_CAMERA_I2C_WORD_ADDR,
89 MSM_CAMERA_I2C_3B_ADDR,
90 MSM_CAMERA_I2C_DWORD_ADDR,
91 MSM_CAMERA_I2C_ADDR_TYPE_MAX,
92};
93#define MSM_CAMERA_I2C_DWORD_ADDR MSM_CAMERA_I2C_DWORD_ADDR
94
95enum msm_camera_i2c_data_type {
96 MSM_CAMERA_I2C_BYTE_DATA = 1,
97 MSM_CAMERA_I2C_WORD_DATA,
98 MSM_CAMERA_I2C_DWORD_DATA,
99 MSM_CAMERA_I2C_SET_BYTE_MASK,
100 MSM_CAMERA_I2C_UNSET_BYTE_MASK,
101 MSM_CAMERA_I2C_SET_WORD_MASK,
102 MSM_CAMERA_I2C_UNSET_WORD_MASK,
103 MSM_CAMERA_I2C_SET_BYTE_WRITE_MASK_DATA,
104 MSM_CAMERA_I2C_DATA_TYPE_MAX,
105};
106
107enum msm_sensor_power_seq_gpio_t {
108 SENSOR_GPIO_RESET,
109 SENSOR_GPIO_STANDBY,
110 SENSOR_GPIO_AF_PWDM,
111 SENSOR_GPIO_VIO,
112 SENSOR_GPIO_VANA,
113 SENSOR_GPIO_VDIG,
114 SENSOR_GPIO_VAF,
115 SENSOR_GPIO_FL_EN,
116 SENSOR_GPIO_FL_NOW,
117 SENSOR_GPIO_FL_RESET,
118 SENSOR_GPIO_CUSTOM1,
119 SENSOR_GPIO_CUSTOM2,
120 SENSOR_GPIO_CUSTOM3,
121 SENSOR_GPIO_MAX,
122};
123#define SENSOR_GPIO_CUSTOM3 SENSOR_GPIO_CUSTOM3
124
125enum msm_ir_cut_filter_gpio_t {
126 IR_CUT_FILTER_GPIO_P = 0,
127 IR_CUT_FILTER_GPIO_M,
128 IR_CUT_FILTER_GPIO_MAX,
129};
130#define IR_CUT_FILTER_GPIO_P IR_CUT_FILTER_GPIO_P
131#define IR_CUT_FILTER_GPIO_M IR_CUT_FILTER_GPIO_M
132#define R_CUT_FILTER_GPIO_MAX IR_CUT_FILTER_GPIO_MAX
133
134enum msm_camera_vreg_name_t {
135 CAM_VDIG,
136 CAM_VIO,
137 CAM_VANA,
138 CAM_VAF,
139 CAM_V_CUSTOM1,
140 CAM_V_CUSTOM2,
141 CAM_VREG_MAX,
142};
143
144enum msm_sensor_clk_type_t {
145 SENSOR_CAM_MCLK,
146 SENSOR_CAM_CLK,
147 SENSOR_CAM_CLK_MAX,
148};
149
150enum camerab_mode_t {
151 CAMERA_MODE_2D_B = (1<<0),
152 CAMERA_MODE_3D_B = (1<<1),
153 CAMERA_MODE_INVALID = (1<<2),
154};
155
156enum msm_actuator_data_type {
157 MSM_ACTUATOR_BYTE_DATA = 1,
158 MSM_ACTUATOR_WORD_DATA,
159};
160
161enum msm_actuator_addr_type {
162 MSM_ACTUATOR_BYTE_ADDR = 1,
163 MSM_ACTUATOR_WORD_ADDR,
164};
165
166enum msm_actuator_write_type {
167 MSM_ACTUATOR_WRITE_HW_DAMP,
168 MSM_ACTUATOR_WRITE_DAC,
169 MSM_ACTUATOR_WRITE,
170 MSM_ACTUATOR_WRITE_DIR_REG,
171 MSM_ACTUATOR_POLL,
172 MSM_ACTUATOR_READ_WRITE,
173};
174
175enum msm_actuator_i2c_operation {
176 MSM_ACT_WRITE = 0,
177 MSM_ACT_POLL,
178};
179
180enum actuator_type {
181 ACTUATOR_VCM,
182 ACTUATOR_PIEZO,
183 ACTUATOR_HVCM,
184 ACTUATOR_BIVCM,
185};
186
187enum msm_flash_driver_type {
188 FLASH_DRIVER_PMIC,
189 FLASH_DRIVER_I2C,
190 FLASH_DRIVER_GPIO,
191 FLASH_DRIVER_DEFAULT
192};
193
194enum msm_flash_cfg_type_t {
195 CFG_FLASH_INIT,
196 CFG_FLASH_RELEASE,
197 CFG_FLASH_OFF,
198 CFG_FLASH_LOW,
199 CFG_FLASH_HIGH,
200};
201
202enum msm_ir_led_cfg_type_t {
203 CFG_IR_LED_INIT = 0,
204 CFG_IR_LED_RELEASE,
205 CFG_IR_LED_OFF,
206 CFG_IR_LED_ON,
207};
208#define CFG_IR_LED_INIT CFG_IR_LED_INIT
209#define CFG_IR_LED_RELEASE CFG_IR_LED_RELEASE
210#define CFG_IR_LED_OFF CFG_IR_LED_OFF
211#define CFG_IR_LED_ON CFG_IR_LED_ON
212
213enum msm_laser_led_cfg_type_t {
214 CFG_LASER_LED_INIT,
215 CFG_LASER_LED_CONTROL,
216};
217#define CFG_LASER_LED_INIT CFG_LASER_LED_INIT
218#define CFG_LASER_LED_CONTROL CFG_LASER_LED_CONTROL
219
220enum msm_ir_cut_cfg_type_t {
221 CFG_IR_CUT_INIT = 0,
222 CFG_IR_CUT_RELEASE,
223 CFG_IR_CUT_OFF,
224 CFG_IR_CUT_ON,
225};
226#define CFG_IR_CUT_INIT CFG_IR_CUT_INIT
227#define CFG_IR_CUT_RELEASE CFG_IR_CUT_RELEASE
228#define CFG_IR_CUT_OFF CFG_IR_CUT_OFF
229#define CFG_IR_CUT_ON CFG_IR_CUT_ON
230
231enum msm_sensor_output_format_t {
232 MSM_SENSOR_BAYER,
233 MSM_SENSOR_YCBCR,
234 MSM_SENSOR_META,
235};
236
237struct msm_sensor_power_setting {
238 enum msm_sensor_power_seq_type_t seq_type;
239 unsigned short seq_val;
240 long config_val;
241 unsigned short delay;
242 void *data[10];
243};
244
245struct msm_sensor_power_setting_array {
246 struct msm_sensor_power_setting power_setting_a[MAX_POWER_CONFIG];
247 struct msm_sensor_power_setting *power_setting;
248 unsigned short size;
249 struct msm_sensor_power_setting power_down_setting_a[MAX_POWER_CONFIG];
250 struct msm_sensor_power_setting *power_down_setting;
251 unsigned short size_down;
252};
253
254enum msm_camera_i2c_operation {
255 MSM_CAM_WRITE = 0,
256 MSM_CAM_POLL,
257 MSM_CAM_READ,
Neng Chen6d75cad2019-05-21 15:00:11 +0800258#define MSM_CAM_READ_LOOP \
259 MSM_CAM_READ_LOOP
260 MSM_CAM_READ_LOOP = 3,
Pratap Nirujogi6e759912018-01-17 17:51:17 +0530261};
262
263struct msm_sensor_i2c_sync_params {
264 unsigned int cid;
265 int csid;
266 unsigned short line;
267 unsigned short delay;
268};
269
270struct msm_camera_reg_settings_t {
271 uint16_t reg_addr;
272 enum msm_camera_i2c_reg_addr_type addr_type;
273 uint16_t reg_data;
274 enum msm_camera_i2c_data_type data_type;
275 enum msm_camera_i2c_operation i2c_operation;
276 uint16_t delay;
277};
278
279struct msm_eeprom_mem_map_t {
280 int slave_addr;
281 struct msm_camera_reg_settings_t
282 mem_settings[MSM_EEPROM_MEMORY_MAP_MAX_SIZE];
283 int memory_map_size;
284};
285
286struct msm_eeprom_memory_map_array {
287 struct msm_eeprom_mem_map_t memory_map[MSM_EEPROM_MAX_MEM_MAP_CNT];
288 uint32_t msm_size_of_max_mappings;
289};
290
291struct msm_sensor_init_params {
292 /* mask of modes supported: 2D, 3D */
293 int modes_supported;
294 /* sensor position: front, back */
295 enum camb_position_t position;
296 /* sensor mount angle */
297 unsigned int sensor_mount_angle;
298};
299
Vijay kumar Tumati13e62de2018-05-29 10:25:01 +0530300struct msm_camera_i2c_reg_setting {
301 struct msm_camera_i2c_reg_array *reg_setting;
302 unsigned short size;
303 enum msm_camera_i2c_reg_addr_type addr_type;
304 enum msm_camera_i2c_data_type data_type;
305 unsigned short delay;
306};
307
Pratap Nirujogi6e759912018-01-17 17:51:17 +0530308struct msm_sensor_id_info_t {
309 unsigned short sensor_id_reg_addr;
310 unsigned short sensor_id;
311 unsigned short sensor_id_mask;
Vijay kumar Tumati13e62de2018-05-29 10:25:01 +0530312 struct msm_camera_i2c_reg_setting setting;
Pratap Nirujogi6e759912018-01-17 17:51:17 +0530313};
314
315struct msm_camera_sensor_slave_info {
316 char sensor_name[32];
317 char eeprom_name[32];
318 char actuator_name[32];
319 char ois_name[32];
320 char flash_name[32];
321 enum msm_sensor_camera_id_t camera_id;
322 unsigned short slave_addr;
323 enum i2c_freq_mode_t i2c_freq_mode;
324 enum msm_camera_i2c_reg_addr_type addr_type;
325 struct msm_sensor_id_info_t sensor_id_info;
326 struct msm_sensor_power_setting_array power_setting_array;
327 unsigned char is_init_params_valid;
328 struct msm_sensor_init_params sensor_init_params;
329 enum msm_sensor_output_format_t output_format;
330 uint8_t bypass_video_node_creation;
331};
332
333struct msm_camera_i2c_reg_array {
334 unsigned short reg_addr;
335 unsigned short reg_data;
336 unsigned int delay;
337};
338
Pratap Nirujogi6e759912018-01-17 17:51:17 +0530339struct msm_camera_csid_vc_cfg {
340 unsigned char cid;
341 unsigned char dt;
342 unsigned char decode_format;
343};
344
345struct msm_camera_csid_lut_params {
346 unsigned char num_cid;
347 struct msm_camera_csid_vc_cfg vc_cfg_a[MAX_CID];
348 struct msm_camera_csid_vc_cfg *vc_cfg[MAX_CID];
349};
350
351struct msm_camera_csid_params {
352 unsigned char lane_cnt;
353 unsigned short lane_assign;
354 unsigned char phy_sel;
355 unsigned int csi_clk;
356 struct msm_camera_csid_lut_params lut_params;
357 unsigned char csi_3p_sel;
358};
359
360struct msm_camera_csid_testmode_parms {
361 unsigned int num_bytes_per_line;
362 unsigned int num_lines;
363 unsigned int h_blanking_count;
364 unsigned int v_blanking_count;
365 unsigned int payload_mode;
366};
367
368struct msm_camera_csiphy_params {
369 unsigned char lane_cnt;
370 unsigned char settle_cnt;
371 unsigned short lane_mask;
372 unsigned char combo_mode;
373 unsigned char csid_core;
374 unsigned int csiphy_clk;
375 unsigned char csi_3phase;
Samyukta Mogily338074e2018-04-23 16:17:17 +0530376 uint64_t data_rate;
Pratap Nirujogi6e759912018-01-17 17:51:17 +0530377};
378
379struct msm_camera_i2c_seq_reg_array {
380 unsigned short reg_addr;
381 unsigned char reg_data[I2C_SEQ_REG_DATA_MAX];
382 unsigned short reg_data_size;
383};
384
385struct msm_camera_i2c_seq_reg_setting {
386 struct msm_camera_i2c_seq_reg_array *reg_setting;
387 unsigned short size;
388 enum msm_camera_i2c_reg_addr_type addr_type;
389 unsigned short delay;
390};
391
392struct msm_actuator_reg_params_t {
393 enum msm_actuator_write_type reg_write_type;
394 unsigned int hw_mask;
395 unsigned short reg_addr;
396 unsigned short hw_shift;
397 unsigned short data_shift;
398 unsigned short data_type;
399 unsigned short addr_type;
400 unsigned short reg_data;
401 unsigned short delay;
402};
403
404
405struct damping_params_t {
406 unsigned int damping_step;
407 unsigned int damping_delay;
408 unsigned int hw_params;
409};
410
411struct region_params_t {
412 /* [0] = ForwardDirection Macro boundary
413 * [1] = ReverseDirection Inf boundary
414 */
415 unsigned short step_bound[2];
416 unsigned short code_per_step;
417 /* qvalue for converting float type numbers to integer format */
418 unsigned int qvalue;
419};
420
421struct reg_settings_t {
422 unsigned short reg_addr;
423 enum msm_camera_i2c_reg_addr_type addr_type;
424 unsigned short reg_data;
425 enum msm_camera_i2c_data_type data_type;
426 enum msm_actuator_i2c_operation i2c_operation;
427 unsigned int delay;
428};
429
430struct msm_camera_i2c_reg_setting_array {
431 struct msm_camera_i2c_reg_array reg_setting_a[MAX_I2C_REG_SET];
432 unsigned short size;
433 enum msm_camera_i2c_reg_addr_type addr_type;
434 enum msm_camera_i2c_data_type data_type;
435 unsigned short delay;
436};
437
438#endif