blob: a88a71da5ef5c81e90478bdcd061dbdf997f2b87 [file] [log] [blame]
Shuzhen Wangb4f4c922013-01-08 14:32:08 -08001#ifndef __LINUX_MSM_CAM_SENSOR_H
2#define __LINUX_MSM_CAM_SENSOR_H
3
4#ifdef MSM_CAMERA_BIONIC
5#include <sys/types.h>
6#endif
7#include <linux/types.h>
8#include <linux/v4l2-mediabus.h>
9#include <linux/i2c.h>
10
11#define I2C_SEQ_REG_SETTING_MAX 5
12#define I2C_SEQ_REG_DATA_MAX 20
13#define MAX_CID 16
14
15#define MSM_SENSOR_MCLK_8HZ 8000000
16#define MSM_SENSOR_MCLK_16HZ 16000000
17#define MSM_SENSOR_MCLK_24HZ 24000000
18
19#define GPIO_OUT_LOW (0 << 1)
20#define GPIO_OUT_HIGH (1 << 1)
21
22#define CSI_EMBED_DATA 0x12
23#define CSI_RESERVED_DATA_0 0x13
24#define CSI_YUV422_8 0x1E
25#define CSI_RAW8 0x2A
26#define CSI_RAW10 0x2B
27#define CSI_RAW12 0x2C
28
29#define CSI_DECODE_6BIT 0
30#define CSI_DECODE_8BIT 1
31#define CSI_DECODE_10BIT 2
32#define CSI_DECODE_DPCM_10_8_10 5
33
34#define MAX_SENSOR_NAME 32
35
Sreesudhan Ramakrish Ramkumar6acf6252013-01-26 21:26:13 -080036#define MAX_ACT_MOD_NAME_SIZE 32
37#define MAX_ACT_NAME_SIZE 32
38#define NUM_ACTUATOR_DIR 2
39#define MAX_ACTUATOR_SCENARIO 8
40#define MAX_ACTUATOR_REGION 5
41#define MAX_ACTUATOR_INIT_SET 12
42#define MAX_ACTUATOR_REG_TBL_SIZE 8
43
44#define MOVE_NEAR 0
45#define MOVE_FAR 1
46
Jeyaprakash Soundrapandian651d64e2013-03-11 12:04:55 -070047#define MAX_EEPROM_NAME 32
48
Lokesh Kumar Aakulub07fc7a2013-06-06 20:23:57 +053049#define MAX_AF_ITERATIONS 3
Panwar Vivekd66f98f2014-02-05 14:24:00 +053050#define MAX_NUMBER_OF_STEPS 47
Lokesh Kumar Aakulub07fc7a2013-06-06 20:23:57 +053051
Xu Kai84d22212013-10-17 16:46:06 +080052enum flash_type {
53 LED_FLASH = 1,
54 STROBE_FLASH,
55 GPIO_FLASH
56};
57
Shuzhen Wangb4f4c922013-01-08 14:32:08 -080058enum msm_camera_i2c_reg_addr_type {
59 MSM_CAMERA_I2C_BYTE_ADDR = 1,
60 MSM_CAMERA_I2C_WORD_ADDR,
Junjie Wu1d4e60d2013-03-13 20:17:15 -070061 MSM_CAMERA_I2C_3B_ADDR,
Hariram Purushothamane40d8242013-07-31 14:30:36 -070062 MSM_CAMERA_I2C_ADDR_TYPE_MAX,
Shuzhen Wangb4f4c922013-01-08 14:32:08 -080063};
64
65enum msm_camera_i2c_data_type {
66 MSM_CAMERA_I2C_BYTE_DATA = 1,
67 MSM_CAMERA_I2C_WORD_DATA,
68 MSM_CAMERA_I2C_SET_BYTE_MASK,
69 MSM_CAMERA_I2C_UNSET_BYTE_MASK,
70 MSM_CAMERA_I2C_SET_WORD_MASK,
71 MSM_CAMERA_I2C_UNSET_WORD_MASK,
72 MSM_CAMERA_I2C_SET_BYTE_WRITE_MASK_DATA,
Hariram Purushothamane40d8242013-07-31 14:30:36 -070073 MSM_CAMERA_I2C_DATA_TYPE_MAX,
Shuzhen Wangb4f4c922013-01-08 14:32:08 -080074};
75
76enum msm_sensor_power_seq_type_t {
77 SENSOR_CLK,
78 SENSOR_GPIO,
79 SENSOR_VREG,
80 SENSOR_I2C_MUX,
81};
82
83enum msm_sensor_clk_type_t {
84 SENSOR_CAM_MCLK,
85 SENSOR_CAM_CLK,
86 SENSOR_CAM_CLK_MAX,
87};
88
89enum msm_sensor_power_seq_gpio_t {
90 SENSOR_GPIO_RESET,
91 SENSOR_GPIO_STANDBY,
feim1b0083f2013-06-05 09:09:44 +080092 SENSOR_GPIO_AF_PWDM,
93 SENSOR_GPIO_VIO,
94 SENSOR_GPIO_VANA,
95 SENSOR_GPIO_VDIG,
96 SENSOR_GPIO_VAF,
Evgeniy Borisov8234aeb2013-11-06 16:37:54 +020097 SENSOR_GPIO_FL_EN,
98 SENSOR_GPIO_FL_NOW,
Shuzhen Wangb4f4c922013-01-08 14:32:08 -080099 SENSOR_GPIO_MAX,
100};
101
102enum msm_camera_vreg_name_t {
103 CAM_VDIG,
104 CAM_VIO,
105 CAM_VANA,
106 CAM_VAF,
107 CAM_VREG_MAX,
108};
109
110enum msm_sensor_resolution_t {
111 MSM_SENSOR_RES_FULL,
112 MSM_SENSOR_RES_QTR,
113 MSM_SENSOR_RES_2,
114 MSM_SENSOR_RES_3,
115 MSM_SENSOR_RES_4,
116 MSM_SENSOR_RES_5,
117 MSM_SENSOR_RES_6,
118 MSM_SENSOR_RES_7,
119 MSM_SENSOR_INVALID_RES,
120};
121
122enum sensor_sub_module_t {
123 SUB_MODULE_SENSOR,
124 SUB_MODULE_CHROMATIX,
125 SUB_MODULE_ACTUATOR,
126 SUB_MODULE_EEPROM,
127 SUB_MODULE_LED_FLASH,
128 SUB_MODULE_STROBE_FLASH,
Shuzhen Wangb4f4c922013-01-08 14:32:08 -0800129 SUB_MODULE_CSID,
130 SUB_MODULE_CSID_3D,
Evgeniy Borisov92cd5702013-04-19 13:06:16 -0700131 SUB_MODULE_CSIPHY,
132 SUB_MODULE_CSIPHY_3D,
Shuzhen Wangb4f4c922013-01-08 14:32:08 -0800133 SUB_MODULE_MAX,
134};
135
Li Sunc462b122013-07-23 15:21:09 +0800136enum {
137 MSM_CAMERA_EFFECT_MODE_OFF,
138 MSM_CAMERA_EFFECT_MODE_MONO,
139 MSM_CAMERA_EFFECT_MODE_NEGATIVE,
140 MSM_CAMERA_EFFECT_MODE_SOLARIZE,
141 MSM_CAMERA_EFFECT_MODE_SEPIA,
142 MSM_CAMERA_EFFECT_MODE_POSTERIZE,
143 MSM_CAMERA_EFFECT_MODE_WHITEBOARD,
144 MSM_CAMERA_EFFECT_MODE_BLACKBOARD,
145 MSM_CAMERA_EFFECT_MODE_AQUA,
146 MSM_CAMERA_EFFECT_MODE_EMBOSS,
147 MSM_CAMERA_EFFECT_MODE_SKETCH,
148 MSM_CAMERA_EFFECT_MODE_NEON,
149 MSM_CAMERA_EFFECT_MODE_MAX
150};
151
152enum {
153 MSM_CAMERA_WB_MODE_AUTO,
154 MSM_CAMERA_WB_MODE_CUSTOM,
155 MSM_CAMERA_WB_MODE_INCANDESCENT,
156 MSM_CAMERA_WB_MODE_FLUORESCENT,
157 MSM_CAMERA_WB_MODE_WARM_FLUORESCENT,
158 MSM_CAMERA_WB_MODE_DAYLIGHT,
159 MSM_CAMERA_WB_MODE_CLOUDY_DAYLIGHT,
160 MSM_CAMERA_WB_MODE_TWILIGHT,
161 MSM_CAMERA_WB_MODE_SHADE,
162 MSM_CAMERA_WB_MODE_OFF,
163 MSM_CAMERA_WB_MODE_MAX
164};
165
166enum {
167 MSM_CAMERA_SCENE_MODE_OFF,
168 MSM_CAMERA_SCENE_MODE_AUTO,
169 MSM_CAMERA_SCENE_MODE_LANDSCAPE,
170 MSM_CAMERA_SCENE_MODE_SNOW,
171 MSM_CAMERA_SCENE_MODE_BEACH,
172 MSM_CAMERA_SCENE_MODE_SUNSET,
173 MSM_CAMERA_SCENE_MODE_NIGHT,
174 MSM_CAMERA_SCENE_MODE_PORTRAIT,
175 MSM_CAMERA_SCENE_MODE_BACKLIGHT,
176 MSM_CAMERA_SCENE_MODE_SPORTS,
177 MSM_CAMERA_SCENE_MODE_ANTISHAKE,
178 MSM_CAMERA_SCENE_MODE_FLOWERS,
179 MSM_CAMERA_SCENE_MODE_CANDLELIGHT,
180 MSM_CAMERA_SCENE_MODE_FIREWORKS,
181 MSM_CAMERA_SCENE_MODE_PARTY,
182 MSM_CAMERA_SCENE_MODE_NIGHT_PORTRAIT,
183 MSM_CAMERA_SCENE_MODE_THEATRE,
184 MSM_CAMERA_SCENE_MODE_ACTION,
185 MSM_CAMERA_SCENE_MODE_AR,
186 MSM_CAMERA_SCENE_MODE_FACE_PRIORITY,
187 MSM_CAMERA_SCENE_MODE_BARCODE,
188 MSM_CAMERA_SCENE_MODE_HDR,
189 MSM_CAMERA_SCENE_MODE_MAX
190};
191
Shuzhen Wangb4f4c922013-01-08 14:32:08 -0800192enum csid_cfg_type_t {
193 CSID_INIT,
194 CSID_CFG,
195 CSID_RELEASE,
196};
197
198enum csiphy_cfg_type_t {
199 CSIPHY_INIT,
200 CSIPHY_CFG,
201 CSIPHY_RELEASE,
202};
203
204enum camera_vreg_type {
205 REG_LDO,
206 REG_VS,
207 REG_GPIO,
208};
209
Lokesh Kumar Aakulub07fc7a2013-06-06 20:23:57 +0530210enum sensor_af_t {
211 SENSOR_AF_FOCUSSED,
212 SENSOR_AF_NOT_FOCUSSED,
213};
214
Shuzhen Wangb4f4c922013-01-08 14:32:08 -0800215struct msm_sensor_power_setting {
216 enum msm_sensor_power_seq_type_t seq_type;
217 uint16_t seq_val;
218 long config_val;
219 uint16_t delay;
220 void *data[10];
221};
222
223struct msm_sensor_power_setting_array {
224 struct msm_sensor_power_setting *power_setting;
225 uint16_t size;
Rajesh Bondugula131a9182014-01-17 17:55:46 -0800226 struct msm_sensor_power_setting *power_down_setting;
227 uint16_t size_down;
Shuzhen Wangb4f4c922013-01-08 14:32:08 -0800228};
229
230struct msm_sensor_id_info_t {
231 uint16_t sensor_id_reg_addr;
232 uint16_t sensor_id;
233};
234
Evgeniy Borisov11d85b02013-09-16 16:52:36 +0300235enum msm_sensor_camera_id_t {
236 CAMERA_0,
237 CAMERA_1,
238 CAMERA_2,
239 CAMERA_3,
240 MAX_CAMERAS,
241};
242
243enum cci_i2c_master_t {
244 MASTER_0,
245 MASTER_1,
246 MASTER_MAX,
247};
248
Shuzhen Wangb4f4c922013-01-08 14:32:08 -0800249struct msm_camera_sensor_slave_info {
Evgeniy Borisov11d85b02013-09-16 16:52:36 +0300250 char sensor_name[32];
Evgeniy Borisov7a80b8f2013-10-23 17:56:39 +0300251 char eeprom_name[32];
Evgeniy Borisov88af4962013-11-07 16:01:12 +0200252 char actuator_name[32];
Evgeniy Borisov11d85b02013-09-16 16:52:36 +0300253 enum msm_sensor_camera_id_t camera_id;
Shuzhen Wangb4f4c922013-01-08 14:32:08 -0800254 uint16_t slave_addr;
255 enum msm_camera_i2c_reg_addr_type addr_type;
256 struct msm_sensor_id_info_t sensor_id_info;
257 struct msm_sensor_power_setting_array power_setting_array;
258};
259
260struct msm_camera_i2c_reg_array {
261 uint16_t reg_addr;
262 uint16_t reg_data;
Sreesudhan Ramakrish Ramkumar348b89c2013-07-22 09:37:20 -0700263 uint32_t delay;
Shuzhen Wangb4f4c922013-01-08 14:32:08 -0800264};
265
266struct msm_camera_i2c_reg_setting {
267 struct msm_camera_i2c_reg_array *reg_setting;
268 uint16_t size;
269 enum msm_camera_i2c_reg_addr_type addr_type;
270 enum msm_camera_i2c_data_type data_type;
271 uint16_t delay;
272};
273
274struct msm_camera_i2c_seq_reg_array {
275 uint16_t reg_addr;
276 uint8_t reg_data[I2C_SEQ_REG_DATA_MAX];
277 uint16_t reg_data_size;
278};
279
280struct msm_camera_i2c_seq_reg_setting {
281 struct msm_camera_i2c_seq_reg_array *reg_setting;
282 uint16_t size;
283 enum msm_camera_i2c_reg_addr_type addr_type;
284 uint16_t delay;
285};
286
Punit Soni55a6e152013-02-28 17:18:53 -0800287struct msm_camera_i2c_array_write_config {
288 struct msm_camera_i2c_reg_setting conf_array;
289 uint16_t slave_addr;
290};
291
292struct msm_camera_i2c_read_config {
293 uint16_t slave_addr;
294 uint16_t reg_addr;
295 enum msm_camera_i2c_data_type data_type;
296 uint16_t *data;
297};
298
Shuzhen Wangb4f4c922013-01-08 14:32:08 -0800299struct msm_camera_csid_vc_cfg {
300 uint8_t cid;
301 uint8_t dt;
302 uint8_t decode_format;
303};
304
305struct msm_camera_csid_lut_params {
306 uint8_t num_cid;
307 struct msm_camera_csid_vc_cfg *vc_cfg[MAX_CID];
308};
309
310struct msm_camera_csid_params {
311 uint8_t lane_cnt;
312 uint16_t lane_assign;
313 uint8_t phy_sel;
314 struct msm_camera_csid_lut_params lut_params;
315};
316
317struct msm_camera_csiphy_params {
318 uint8_t lane_cnt;
319 uint8_t settle_cnt;
320 uint16_t lane_mask;
321 uint8_t combo_mode;
Evgeniy Borisov4de53312013-03-27 05:14:41 -0700322 uint8_t csid_core;
Shuzhen Wangb4f4c922013-01-08 14:32:08 -0800323};
324
325struct msm_camera_csi2_params {
326 struct msm_camera_csid_params csid_params;
327 struct msm_camera_csiphy_params csiphy_params;
328};
329
330struct msm_camera_csi_lane_params {
331 uint16_t csi_lane_assign;
332 uint16_t csi_lane_mask;
333};
334
335struct csi_lane_params_t {
336 uint16_t csi_lane_assign;
337 uint8_t csi_lane_mask;
338 uint8_t csi_if;
339 uint8_t csid_core[2];
340 uint8_t csi_phy_sel;
341};
342
Evgeniy Borisov11d85b02013-09-16 16:52:36 +0300343enum camb_position_t {
344 BACK_CAMERA_B,
345 FRONT_CAMERA_B,
346};
347
Shuzhen Wangb4f4c922013-01-08 14:32:08 -0800348struct msm_sensor_info_t {
Evgeniy Borisov11d85b02013-09-16 16:52:36 +0300349 char sensor_name[MAX_SENSOR_NAME];
350 int32_t session_id;
351 int32_t subdev_id[SUB_MODULE_MAX];
352 uint8_t is_mount_angle_valid;
353 uint32_t sensor_mount_angle;
354 int modes_supported;
355 enum camb_position_t position;
Shuzhen Wangb4f4c922013-01-08 14:32:08 -0800356};
357
358struct camera_vreg_t {
359 const char *reg_name;
360 enum camera_vreg_type type;
361 int min_voltage;
362 int max_voltage;
363 int op_mode;
364 uint32_t delay;
365};
366
Shuzhen Wangb4f4c922013-01-08 14:32:08 -0800367enum camerab_mode_t {
368 CAMERA_MODE_2D_B = (1<<0),
369 CAMERA_MODE_3D_B = (1<<1)
370};
371
372struct msm_sensor_init_params {
373 /* mask of modes supported: 2D, 3D */
374 int modes_supported;
375 /* sensor position: front, back */
376 enum camb_position_t position;
377 /* sensor mount angle */
378 uint32_t sensor_mount_angle;
379};
380
381struct sensorb_cfg_data {
382 int cfgtype;
383 union {
384 struct msm_sensor_info_t sensor_info;
385 struct msm_sensor_init_params sensor_init_params;
386 void *setting;
387 } cfg;
388};
389
390struct csid_cfg_data {
391 enum csid_cfg_type_t cfgtype;
392 union {
393 uint32_t csid_version;
394 struct msm_camera_csid_params *csid_params;
395 } cfg;
396};
397
398struct csiphy_cfg_data {
399 enum csiphy_cfg_type_t cfgtype;
400 union {
401 struct msm_camera_csiphy_params *csiphy_params;
402 struct msm_camera_csi_lane_params *csi_lane_params;
403 } cfg;
404};
405
Jeyaprakash Soundrapandian651d64e2013-03-11 12:04:55 -0700406enum eeprom_cfg_type_t {
407 CFG_EEPROM_GET_INFO,
Junjie Wu59986c72013-05-02 13:39:15 -0700408 CFG_EEPROM_GET_CAL_DATA,
409 CFG_EEPROM_READ_CAL_DATA,
Jeyaprakash Soundrapandian651d64e2013-03-11 12:04:55 -0700410 CFG_EEPROM_WRITE_DATA,
Evgeniy Borisov87ebe9c2013-12-21 15:55:55 +0200411 CFG_EEPROM_GET_MM_INFO,
Jeyaprakash Soundrapandian651d64e2013-03-11 12:04:55 -0700412};
Junjie Wu869c28a2013-05-01 16:29:04 -0700413
Jeyaprakash Soundrapandian651d64e2013-03-11 12:04:55 -0700414struct eeprom_get_t {
Junjie Wu869c28a2013-05-01 16:29:04 -0700415 uint32_t num_bytes;
Jeyaprakash Soundrapandian651d64e2013-03-11 12:04:55 -0700416};
417
418struct eeprom_read_t {
419 uint8_t *dbuffer;
Junjie Wu869c28a2013-05-01 16:29:04 -0700420 uint32_t num_bytes;
Jeyaprakash Soundrapandian651d64e2013-03-11 12:04:55 -0700421};
422
423struct eeprom_write_t {
424 uint8_t *dbuffer;
Junjie Wu869c28a2013-05-01 16:29:04 -0700425 uint32_t num_bytes;
Jeyaprakash Soundrapandian651d64e2013-03-11 12:04:55 -0700426};
427
Evgeniy Borisov87ebe9c2013-12-21 15:55:55 +0200428struct eeprom_get_mm_t {
429 uint32_t mm_support;
430 uint32_t mm_compression;
431 uint32_t mm_size;
432};
433
Jeyaprakash Soundrapandian651d64e2013-03-11 12:04:55 -0700434struct msm_eeprom_cfg_data {
435 enum eeprom_cfg_type_t cfgtype;
436 uint8_t is_supported;
437 union {
438 char eeprom_name[MAX_SENSOR_NAME];
439 struct eeprom_get_t get_data;
440 struct eeprom_read_t read_data;
441 struct eeprom_write_t write_data;
Evgeniy Borisov87ebe9c2013-12-21 15:55:55 +0200442 struct eeprom_get_mm_t get_mm_data;
Jeyaprakash Soundrapandian651d64e2013-03-11 12:04:55 -0700443 } cfg;
444};
445
Shuzhen Wangb4f4c922013-01-08 14:32:08 -0800446enum msm_sensor_cfg_type_t {
447 CFG_SET_SLAVE_INFO,
Punit Soni55a6e152013-02-28 17:18:53 -0800448 CFG_SLAVE_READ_I2C,
Shuzhen Wangb4f4c922013-01-08 14:32:08 -0800449 CFG_WRITE_I2C_ARRAY,
Punit Soni55a6e152013-02-28 17:18:53 -0800450 CFG_SLAVE_WRITE_I2C_ARRAY,
Shuzhen Wangb4f4c922013-01-08 14:32:08 -0800451 CFG_WRITE_I2C_SEQ_ARRAY,
452 CFG_POWER_UP,
453 CFG_POWER_DOWN,
454 CFG_SET_STOP_STREAM_SETTING,
455 CFG_GET_SENSOR_INFO,
456 CFG_GET_SENSOR_INIT_PARAMS,
Rajakumar Govindaram6ad72872013-01-29 18:36:13 -0800457 CFG_SET_INIT_SETTING,
458 CFG_SET_RESOLUTION,
459 CFG_SET_STOP_STREAM,
460 CFG_SET_START_STREAM,
Lokesh Kumar Aakulub07fc7a2013-06-06 20:23:57 +0530461 CFG_SET_SATURATION,
462 CFG_SET_CONTRAST,
463 CFG_SET_SHARPNESS,
Li Sunc462b122013-07-23 15:21:09 +0800464 CFG_SET_ISO,
465 CFG_SET_EXPOSURE_COMPENSATION,
466 CFG_SET_ANTIBANDING,
467 CFG_SET_BESTSHOT_MODE,
468 CFG_SET_EFFECT,
469 CFG_SET_WHITE_BALANCE,
Lokesh Kumar Aakulub07fc7a2013-06-06 20:23:57 +0530470 CFG_SET_AUTOFOCUS,
471 CFG_CANCEL_AUTOFOCUS,
Shuzhen Wangb4f4c922013-01-08 14:32:08 -0800472};
473
Sreesudhan Ramakrish Ramkumar6acf6252013-01-26 21:26:13 -0800474enum msm_actuator_cfg_type_t {
475 CFG_GET_ACTUATOR_INFO,
476 CFG_SET_ACTUATOR_INFO,
477 CFG_SET_DEFAULT_FOCUS,
Panwar Vivekd66f98f2014-02-05 14:24:00 +0530478 CFG_SET_POSITION,
Sreesudhan Ramakrish Ramkumar6acf6252013-01-26 21:26:13 -0800479 CFG_MOVE_FOCUS,
480};
481
482enum actuator_type {
483 ACTUATOR_VCM,
484 ACTUATOR_PIEZO,
485};
486
487enum msm_actuator_data_type {
488 MSM_ACTUATOR_BYTE_DATA = 1,
489 MSM_ACTUATOR_WORD_DATA,
490};
491
492enum msm_actuator_addr_type {
493 MSM_ACTUATOR_BYTE_ADDR = 1,
494 MSM_ACTUATOR_WORD_ADDR,
495};
496
Vasko Kalanoski5c417ea2013-10-21 11:40:11 -0700497enum msm_actuator_i2c_operation {
498 MSM_ACT_WRITE = 0,
499 MSM_ACT_POLL,
500};
501
Sreesudhan Ramakrish Ramkumar6acf6252013-01-26 21:26:13 -0800502struct reg_settings_t {
503 uint16_t reg_addr;
Vasko Kalanoski5c417ea2013-10-21 11:40:11 -0700504 enum msm_actuator_addr_type addr_type;
Sreesudhan Ramakrish Ramkumar6acf6252013-01-26 21:26:13 -0800505 uint16_t reg_data;
Vasko Kalanoski5c417ea2013-10-21 11:40:11 -0700506 enum msm_actuator_data_type data_type;
507 enum msm_actuator_i2c_operation i2c_operation;
508 uint32_t delay;
Sreesudhan Ramakrish Ramkumar6acf6252013-01-26 21:26:13 -0800509};
510
511struct region_params_t {
512 /* [0] = ForwardDirection Macro boundary
513 [1] = ReverseDirection Inf boundary
514 */
515 uint16_t step_bound[2];
516 uint16_t code_per_step;
517};
518
519struct damping_params_t {
520 uint32_t damping_step;
521 uint32_t damping_delay;
522 uint32_t hw_params;
523};
524
525struct msm_actuator_move_params_t {
526 int8_t dir;
527 int8_t sign_dir;
528 int16_t dest_step_pos;
529 int32_t num_steps;
Sreesudhan Ramakrish Ramkumard3eac152013-12-19 11:51:26 -0800530 uint16_t curr_lens_pos;
Sreesudhan Ramakrish Ramkumar6acf6252013-01-26 21:26:13 -0800531 struct damping_params_t *ringing_params;
532};
533
534struct msm_actuator_tuning_params_t {
535 int16_t initial_code;
536 uint16_t pwd_step;
537 uint16_t region_size;
538 uint32_t total_steps;
539 struct region_params_t *region_params;
540};
541
542struct msm_actuator_params_t {
543 enum actuator_type act_type;
544 uint8_t reg_tbl_size;
545 uint16_t data_size;
546 uint16_t init_setting_size;
547 uint32_t i2c_addr;
548 enum msm_actuator_addr_type i2c_addr_type;
549 enum msm_actuator_data_type i2c_data_type;
550 struct msm_actuator_reg_params_t *reg_tbl_params;
551 struct reg_settings_t *init_settings;
552};
553
554struct msm_actuator_set_info_t {
555 struct msm_actuator_params_t actuator_params;
556 struct msm_actuator_tuning_params_t af_tuning_params;
557};
558
559struct msm_actuator_get_info_t {
560 uint32_t focal_length_num;
561 uint32_t focal_length_den;
562 uint32_t f_number_num;
563 uint32_t f_number_den;
564 uint32_t f_pix_num;
565 uint32_t f_pix_den;
566 uint32_t total_f_dist_num;
567 uint32_t total_f_dist_den;
568 uint32_t hor_view_angle_num;
569 uint32_t hor_view_angle_den;
570 uint32_t ver_view_angle_num;
571 uint32_t ver_view_angle_den;
572};
573
574enum af_camera_name {
575 ACTUATOR_MAIN_CAM_0,
576 ACTUATOR_MAIN_CAM_1,
577 ACTUATOR_MAIN_CAM_2,
578 ACTUATOR_MAIN_CAM_3,
579 ACTUATOR_MAIN_CAM_4,
580 ACTUATOR_MAIN_CAM_5,
581 ACTUATOR_WEB_CAM_0,
582 ACTUATOR_WEB_CAM_1,
583 ACTUATOR_WEB_CAM_2,
584};
585
Panwar Vivekd66f98f2014-02-05 14:24:00 +0530586
587struct msm_actuator_set_position_t {
588 uint16_t number_of_steps;
589 uint16_t pos[MAX_NUMBER_OF_STEPS];
590 uint16_t delay[MAX_NUMBER_OF_STEPS];
591};
592
Sreesudhan Ramakrish Ramkumar6acf6252013-01-26 21:26:13 -0800593struct msm_actuator_cfg_data {
594 int cfgtype;
595 uint8_t is_af_supported;
596 union {
597 struct msm_actuator_move_params_t move;
598 struct msm_actuator_set_info_t set_info;
599 struct msm_actuator_get_info_t get_info;
Panwar Vivekd66f98f2014-02-05 14:24:00 +0530600 struct msm_actuator_set_position_t setpos;
Sreesudhan Ramakrish Ramkumar6acf6252013-01-26 21:26:13 -0800601 enum af_camera_name cam_name;
602 } cfg;
603};
604
605enum msm_actuator_write_type {
606 MSM_ACTUATOR_WRITE_HW_DAMP,
607 MSM_ACTUATOR_WRITE_DAC,
608};
609
610struct msm_actuator_reg_params_t {
611 enum msm_actuator_write_type reg_write_type;
612 uint32_t hw_mask;
613 uint16_t reg_addr;
614 uint16_t hw_shift;
615 uint16_t data_shift;
616};
617
Sreesudhan Ramakrish Ramkumard78de4f2013-02-05 02:25:59 -0800618enum msm_camera_led_config_t {
619 MSM_CAMERA_LED_OFF,
620 MSM_CAMERA_LED_LOW,
621 MSM_CAMERA_LED_HIGH,
622 MSM_CAMERA_LED_INIT,
623 MSM_CAMERA_LED_RELEASE,
624};
625
626struct msm_camera_led_cfg_t {
627 enum msm_camera_led_config_t cfgtype;
Ivan Tiyanov3f9dc1d2013-11-14 14:05:37 +0200628 uint32_t torch_current;
629 uint32_t flash_current[2];
Sreesudhan Ramakrish Ramkumard78de4f2013-02-05 02:25:59 -0800630};
631
Evgeniy Borisov11d85b02013-09-16 16:52:36 +0300632/* sensor init structures and enums */
633enum msm_sensor_init_cfg_type_t {
634 CFG_SINIT_PROBE,
635 CFG_SINIT_PROBE_DONE,
636 CFG_SINIT_PROBE_WAIT_DONE,
637};
638
639struct sensor_init_cfg_data {
640 enum msm_sensor_init_cfg_type_t cfgtype;
641 union {
642 void *setting;
643 } cfg;
644};
645
Shuzhen Wangb4f4c922013-01-08 14:32:08 -0800646#define VIDIOC_MSM_SENSOR_CFG \
647 _IOWR('V', BASE_VIDIOC_PRIVATE + 1, struct sensorb_cfg_data)
648
649#define VIDIOC_MSM_SENSOR_RELEASE \
650 _IO('V', BASE_VIDIOC_PRIVATE + 2)
651
652#define VIDIOC_MSM_SENSOR_GET_SUBDEV_ID \
653 _IOWR('V', BASE_VIDIOC_PRIVATE + 3, uint32_t)
654
655#define VIDIOC_MSM_CSIPHY_IO_CFG \
656 _IOWR('V', BASE_VIDIOC_PRIVATE + 4, struct csid_cfg_data)
657
658#define VIDIOC_MSM_CSID_IO_CFG \
659 _IOWR('V', BASE_VIDIOC_PRIVATE + 5, struct csiphy_cfg_data)
660
Sreesudhan Ramakrish Ramkumar6acf6252013-01-26 21:26:13 -0800661#define VIDIOC_MSM_ACTUATOR_CFG \
662 _IOWR('V', BASE_VIDIOC_PRIVATE + 6, struct msm_actuator_cfg_data)
663
Sreesudhan Ramakrish Ramkumard78de4f2013-02-05 02:25:59 -0800664#define VIDIOC_MSM_FLASH_LED_DATA_CFG \
665 _IOWR('V', BASE_VIDIOC_PRIVATE + 7, struct msm_camera_led_cfg_t)
666
Jeyaprakash Soundrapandian651d64e2013-03-11 12:04:55 -0700667#define VIDIOC_MSM_EEPROM_CFG \
668 _IOWR('V', BASE_VIDIOC_PRIVATE + 8, struct msm_eeprom_cfg_data)
669
Lokesh Kumar Aakulub07fc7a2013-06-06 20:23:57 +0530670#define VIDIOC_MSM_SENSOR_GET_AF_STATUS \
671 _IOWR('V', BASE_VIDIOC_PRIVATE + 9, uint32_t)
672
Evgeniy Borisov11d85b02013-09-16 16:52:36 +0300673#define VIDIOC_MSM_SENSOR_INIT_CFG \
674 _IOWR('V', BASE_VIDIOC_PRIVATE + 10, struct sensor_init_cfg_data)
675
Shuzhen Wangb4f4c922013-01-08 14:32:08 -0800676#define MSM_V4L2_PIX_FMT_META v4l2_fourcc('M', 'E', 'T', 'A') /* META */
677
678#endif /* __LINUX_MSM_CAM_SENSOR_H */