blob: 15edaf988caf659ecf5c3b808dcc4b97af9b2b54 [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
Yiduo Wang210c0d42014-05-30 11:06:01 -070043#define MAX_ACTUATOR_AF_TOTAL_STEPS 1024
Sreesudhan Ramakrish Ramkumar6acf6252013-01-26 21:26:13 -080044
45#define MOVE_NEAR 0
46#define MOVE_FAR 1
47
Yiduo Wang210c0d42014-05-30 11:06:01 -070048#define MSM_ACTUATOR_MOVE_SIGNED_FAR -1
49#define MSM_ACTUATOR_MOVE_SIGNED_NEAR 1
50
Jeyaprakash Soundrapandian651d64e2013-03-11 12:04:55 -070051#define MAX_EEPROM_NAME 32
52
Lokesh Kumar Aakulub07fc7a2013-06-06 20:23:57 +053053#define MAX_AF_ITERATIONS 3
Panwar Vivekd66f98f2014-02-05 14:24:00 +053054#define MAX_NUMBER_OF_STEPS 47
Lokesh Kumar Aakulub07fc7a2013-06-06 20:23:57 +053055
Shuai Yuan775fc0b2014-03-06 20:38:32 +080056typedef enum sensor_stats_type {
57 YRGB,
58 YYYY,
59} sensor_stats_type_t;
60
Xu Kai84d22212013-10-17 16:46:06 +080061enum flash_type {
62 LED_FLASH = 1,
63 STROBE_FLASH,
64 GPIO_FLASH
65};
66
Shuzhen Wangb4f4c922013-01-08 14:32:08 -080067enum msm_camera_i2c_reg_addr_type {
68 MSM_CAMERA_I2C_BYTE_ADDR = 1,
69 MSM_CAMERA_I2C_WORD_ADDR,
Junjie Wu1d4e60d2013-03-13 20:17:15 -070070 MSM_CAMERA_I2C_3B_ADDR,
Hariram Purushothamane40d8242013-07-31 14:30:36 -070071 MSM_CAMERA_I2C_ADDR_TYPE_MAX,
Shuzhen Wangb4f4c922013-01-08 14:32:08 -080072};
73
74enum msm_camera_i2c_data_type {
75 MSM_CAMERA_I2C_BYTE_DATA = 1,
76 MSM_CAMERA_I2C_WORD_DATA,
77 MSM_CAMERA_I2C_SET_BYTE_MASK,
78 MSM_CAMERA_I2C_UNSET_BYTE_MASK,
79 MSM_CAMERA_I2C_SET_WORD_MASK,
80 MSM_CAMERA_I2C_UNSET_WORD_MASK,
81 MSM_CAMERA_I2C_SET_BYTE_WRITE_MASK_DATA,
Hariram Purushothamane40d8242013-07-31 14:30:36 -070082 MSM_CAMERA_I2C_DATA_TYPE_MAX,
Shuzhen Wangb4f4c922013-01-08 14:32:08 -080083};
84
85enum msm_sensor_power_seq_type_t {
86 SENSOR_CLK,
87 SENSOR_GPIO,
88 SENSOR_VREG,
89 SENSOR_I2C_MUX,
90};
91
92enum msm_sensor_clk_type_t {
93 SENSOR_CAM_MCLK,
94 SENSOR_CAM_CLK,
95 SENSOR_CAM_CLK_MAX,
96};
97
98enum msm_sensor_power_seq_gpio_t {
99 SENSOR_GPIO_RESET,
100 SENSOR_GPIO_STANDBY,
feim1b0083f2013-06-05 09:09:44 +0800101 SENSOR_GPIO_AF_PWDM,
102 SENSOR_GPIO_VIO,
103 SENSOR_GPIO_VANA,
104 SENSOR_GPIO_VDIG,
105 SENSOR_GPIO_VAF,
Evgeniy Borisov8234aeb2013-11-06 16:37:54 +0200106 SENSOR_GPIO_FL_EN,
107 SENSOR_GPIO_FL_NOW,
Shuzhen Wangb4f4c922013-01-08 14:32:08 -0800108 SENSOR_GPIO_MAX,
109};
110
111enum msm_camera_vreg_name_t {
112 CAM_VDIG,
113 CAM_VIO,
114 CAM_VANA,
115 CAM_VAF,
116 CAM_VREG_MAX,
117};
118
119enum msm_sensor_resolution_t {
120 MSM_SENSOR_RES_FULL,
121 MSM_SENSOR_RES_QTR,
122 MSM_SENSOR_RES_2,
123 MSM_SENSOR_RES_3,
124 MSM_SENSOR_RES_4,
125 MSM_SENSOR_RES_5,
126 MSM_SENSOR_RES_6,
127 MSM_SENSOR_RES_7,
128 MSM_SENSOR_INVALID_RES,
129};
130
131enum sensor_sub_module_t {
132 SUB_MODULE_SENSOR,
133 SUB_MODULE_CHROMATIX,
134 SUB_MODULE_ACTUATOR,
135 SUB_MODULE_EEPROM,
136 SUB_MODULE_LED_FLASH,
137 SUB_MODULE_STROBE_FLASH,
Shuzhen Wangb4f4c922013-01-08 14:32:08 -0800138 SUB_MODULE_CSID,
139 SUB_MODULE_CSID_3D,
Evgeniy Borisov92cd5702013-04-19 13:06:16 -0700140 SUB_MODULE_CSIPHY,
141 SUB_MODULE_CSIPHY_3D,
Shuzhen Wangb4f4c922013-01-08 14:32:08 -0800142 SUB_MODULE_MAX,
143};
144
Li Sunc462b122013-07-23 15:21:09 +0800145enum {
146 MSM_CAMERA_EFFECT_MODE_OFF,
147 MSM_CAMERA_EFFECT_MODE_MONO,
148 MSM_CAMERA_EFFECT_MODE_NEGATIVE,
149 MSM_CAMERA_EFFECT_MODE_SOLARIZE,
150 MSM_CAMERA_EFFECT_MODE_SEPIA,
151 MSM_CAMERA_EFFECT_MODE_POSTERIZE,
152 MSM_CAMERA_EFFECT_MODE_WHITEBOARD,
153 MSM_CAMERA_EFFECT_MODE_BLACKBOARD,
154 MSM_CAMERA_EFFECT_MODE_AQUA,
155 MSM_CAMERA_EFFECT_MODE_EMBOSS,
156 MSM_CAMERA_EFFECT_MODE_SKETCH,
157 MSM_CAMERA_EFFECT_MODE_NEON,
158 MSM_CAMERA_EFFECT_MODE_MAX
159};
160
161enum {
162 MSM_CAMERA_WB_MODE_AUTO,
163 MSM_CAMERA_WB_MODE_CUSTOM,
164 MSM_CAMERA_WB_MODE_INCANDESCENT,
165 MSM_CAMERA_WB_MODE_FLUORESCENT,
166 MSM_CAMERA_WB_MODE_WARM_FLUORESCENT,
167 MSM_CAMERA_WB_MODE_DAYLIGHT,
168 MSM_CAMERA_WB_MODE_CLOUDY_DAYLIGHT,
169 MSM_CAMERA_WB_MODE_TWILIGHT,
170 MSM_CAMERA_WB_MODE_SHADE,
171 MSM_CAMERA_WB_MODE_OFF,
172 MSM_CAMERA_WB_MODE_MAX
173};
174
175enum {
176 MSM_CAMERA_SCENE_MODE_OFF,
177 MSM_CAMERA_SCENE_MODE_AUTO,
178 MSM_CAMERA_SCENE_MODE_LANDSCAPE,
179 MSM_CAMERA_SCENE_MODE_SNOW,
180 MSM_CAMERA_SCENE_MODE_BEACH,
181 MSM_CAMERA_SCENE_MODE_SUNSET,
182 MSM_CAMERA_SCENE_MODE_NIGHT,
183 MSM_CAMERA_SCENE_MODE_PORTRAIT,
184 MSM_CAMERA_SCENE_MODE_BACKLIGHT,
185 MSM_CAMERA_SCENE_MODE_SPORTS,
186 MSM_CAMERA_SCENE_MODE_ANTISHAKE,
187 MSM_CAMERA_SCENE_MODE_FLOWERS,
188 MSM_CAMERA_SCENE_MODE_CANDLELIGHT,
189 MSM_CAMERA_SCENE_MODE_FIREWORKS,
190 MSM_CAMERA_SCENE_MODE_PARTY,
191 MSM_CAMERA_SCENE_MODE_NIGHT_PORTRAIT,
192 MSM_CAMERA_SCENE_MODE_THEATRE,
193 MSM_CAMERA_SCENE_MODE_ACTION,
194 MSM_CAMERA_SCENE_MODE_AR,
195 MSM_CAMERA_SCENE_MODE_FACE_PRIORITY,
196 MSM_CAMERA_SCENE_MODE_BARCODE,
197 MSM_CAMERA_SCENE_MODE_HDR,
198 MSM_CAMERA_SCENE_MODE_MAX
199};
200
Shuzhen Wangb4f4c922013-01-08 14:32:08 -0800201enum csid_cfg_type_t {
202 CSID_INIT,
203 CSID_CFG,
204 CSID_RELEASE,
205};
206
207enum csiphy_cfg_type_t {
208 CSIPHY_INIT,
209 CSIPHY_CFG,
210 CSIPHY_RELEASE,
211};
212
213enum camera_vreg_type {
214 REG_LDO,
215 REG_VS,
216 REG_GPIO,
217};
218
Lokesh Kumar Aakulub07fc7a2013-06-06 20:23:57 +0530219enum sensor_af_t {
220 SENSOR_AF_FOCUSSED,
221 SENSOR_AF_NOT_FOCUSSED,
222};
223
Shuzhen Wangb4f4c922013-01-08 14:32:08 -0800224struct msm_sensor_power_setting {
225 enum msm_sensor_power_seq_type_t seq_type;
226 uint16_t seq_val;
227 long config_val;
228 uint16_t delay;
229 void *data[10];
230};
231
232struct msm_sensor_power_setting_array {
233 struct msm_sensor_power_setting *power_setting;
234 uint16_t size;
Rajesh Bondugula131a9182014-01-17 17:55:46 -0800235 struct msm_sensor_power_setting *power_down_setting;
236 uint16_t size_down;
Shuzhen Wangb4f4c922013-01-08 14:32:08 -0800237};
238
239struct msm_sensor_id_info_t {
240 uint16_t sensor_id_reg_addr;
241 uint16_t sensor_id;
242};
243
Evgeniy Borisov11d85b02013-09-16 16:52:36 +0300244enum msm_sensor_camera_id_t {
245 CAMERA_0,
246 CAMERA_1,
247 CAMERA_2,
248 CAMERA_3,
249 MAX_CAMERAS,
250};
251
252enum cci_i2c_master_t {
253 MASTER_0,
254 MASTER_1,
255 MASTER_MAX,
256};
257
Shuzhen Wangb4f4c922013-01-08 14:32:08 -0800258
259struct msm_camera_i2c_reg_array {
260 uint16_t reg_addr;
261 uint16_t reg_data;
Sreesudhan Ramakrish Ramkumar348b89c2013-07-22 09:37:20 -0700262 uint32_t delay;
Shuzhen Wangb4f4c922013-01-08 14:32:08 -0800263};
264
265struct msm_camera_i2c_reg_setting {
266 struct msm_camera_i2c_reg_array *reg_setting;
267 uint16_t size;
268 enum msm_camera_i2c_reg_addr_type addr_type;
269 enum msm_camera_i2c_data_type data_type;
270 uint16_t delay;
271};
272
273struct msm_camera_i2c_seq_reg_array {
274 uint16_t reg_addr;
275 uint8_t reg_data[I2C_SEQ_REG_DATA_MAX];
276 uint16_t reg_data_size;
277};
278
279struct msm_camera_i2c_seq_reg_setting {
280 struct msm_camera_i2c_seq_reg_array *reg_setting;
281 uint16_t size;
282 enum msm_camera_i2c_reg_addr_type addr_type;
283 uint16_t delay;
284};
285
Punit Soni55a6e152013-02-28 17:18:53 -0800286struct msm_camera_i2c_array_write_config {
287 struct msm_camera_i2c_reg_setting conf_array;
288 uint16_t slave_addr;
289};
290
291struct msm_camera_i2c_read_config {
292 uint16_t slave_addr;
293 uint16_t reg_addr;
294 enum msm_camera_i2c_data_type data_type;
295 uint16_t *data;
296};
297
Shuzhen Wangb4f4c922013-01-08 14:32:08 -0800298struct msm_camera_csid_vc_cfg {
299 uint8_t cid;
300 uint8_t dt;
301 uint8_t decode_format;
302};
303
304struct msm_camera_csid_lut_params {
305 uint8_t num_cid;
306 struct msm_camera_csid_vc_cfg *vc_cfg[MAX_CID];
307};
308
309struct msm_camera_csid_params {
310 uint8_t lane_cnt;
311 uint16_t lane_assign;
312 uint8_t phy_sel;
313 struct msm_camera_csid_lut_params lut_params;
314};
315
316struct msm_camera_csiphy_params {
317 uint8_t lane_cnt;
318 uint8_t settle_cnt;
319 uint16_t lane_mask;
320 uint8_t combo_mode;
Evgeniy Borisov4de53312013-03-27 05:14:41 -0700321 uint8_t csid_core;
Shuzhen Wangb4f4c922013-01-08 14:32:08 -0800322};
323
324struct msm_camera_csi2_params {
325 struct msm_camera_csid_params csid_params;
326 struct msm_camera_csiphy_params csiphy_params;
327};
328
329struct msm_camera_csi_lane_params {
330 uint16_t csi_lane_assign;
331 uint16_t csi_lane_mask;
332};
333
334struct csi_lane_params_t {
335 uint16_t csi_lane_assign;
336 uint8_t csi_lane_mask;
337 uint8_t csi_if;
338 uint8_t csid_core[2];
339 uint8_t csi_phy_sel;
340};
341
Evgeniy Borisov11d85b02013-09-16 16:52:36 +0300342enum camb_position_t {
343 BACK_CAMERA_B,
344 FRONT_CAMERA_B,
Shivaramraje Nimbalkar Joshi61c641f2013-12-27 15:09:43 -0800345 INVALID_CAMERA_B,
Evgeniy Borisov11d85b02013-09-16 16:52:36 +0300346};
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),
Shivaramraje Nimbalkar Joshi61c641f2013-12-27 15:09:43 -0800369 CAMERA_MODE_3D_B = (1<<1),
370 CAMERA_MODE_INVALID = (1<<2),
Shuzhen Wangb4f4c922013-01-08 14:32:08 -0800371};
372
373struct msm_sensor_init_params {
374 /* mask of modes supported: 2D, 3D */
375 int modes_supported;
376 /* sensor position: front, back */
377 enum camb_position_t position;
378 /* sensor mount angle */
379 uint32_t sensor_mount_angle;
380};
381
Shivaramraje Nimbalkar Joshi61c641f2013-12-27 15:09:43 -0800382struct msm_camera_sensor_slave_info {
383 char sensor_name[32];
384 char eeprom_name[32];
385 char actuator_name[32];
386 enum msm_sensor_camera_id_t camera_id;
387 uint16_t slave_addr;
388 enum msm_camera_i2c_reg_addr_type addr_type;
389 struct msm_sensor_id_info_t sensor_id_info;
390 struct msm_sensor_power_setting_array power_setting_array;
391 uint8_t is_init_params_valid;
392 struct msm_sensor_init_params sensor_init_params;
393};
394
Shuzhen Wangb4f4c922013-01-08 14:32:08 -0800395struct sensorb_cfg_data {
396 int cfgtype;
397 union {
398 struct msm_sensor_info_t sensor_info;
399 struct msm_sensor_init_params sensor_init_params;
400 void *setting;
401 } cfg;
402};
403
404struct csid_cfg_data {
405 enum csid_cfg_type_t cfgtype;
406 union {
407 uint32_t csid_version;
408 struct msm_camera_csid_params *csid_params;
409 } cfg;
410};
411
412struct csiphy_cfg_data {
413 enum csiphy_cfg_type_t cfgtype;
414 union {
415 struct msm_camera_csiphy_params *csiphy_params;
416 struct msm_camera_csi_lane_params *csi_lane_params;
417 } cfg;
418};
419
Jeyaprakash Soundrapandian651d64e2013-03-11 12:04:55 -0700420enum eeprom_cfg_type_t {
421 CFG_EEPROM_GET_INFO,
Junjie Wu59986c72013-05-02 13:39:15 -0700422 CFG_EEPROM_GET_CAL_DATA,
423 CFG_EEPROM_READ_CAL_DATA,
Jeyaprakash Soundrapandian651d64e2013-03-11 12:04:55 -0700424 CFG_EEPROM_WRITE_DATA,
Evgeniy Borisov87ebe9c2013-12-21 15:55:55 +0200425 CFG_EEPROM_GET_MM_INFO,
Jeyaprakash Soundrapandian651d64e2013-03-11 12:04:55 -0700426};
Junjie Wu869c28a2013-05-01 16:29:04 -0700427
Jeyaprakash Soundrapandian651d64e2013-03-11 12:04:55 -0700428struct eeprom_get_t {
Junjie Wu869c28a2013-05-01 16:29:04 -0700429 uint32_t num_bytes;
Jeyaprakash Soundrapandian651d64e2013-03-11 12:04:55 -0700430};
431
432struct eeprom_read_t {
433 uint8_t *dbuffer;
Junjie Wu869c28a2013-05-01 16:29:04 -0700434 uint32_t num_bytes;
Jeyaprakash Soundrapandian651d64e2013-03-11 12:04:55 -0700435};
436
437struct eeprom_write_t {
438 uint8_t *dbuffer;
Junjie Wu869c28a2013-05-01 16:29:04 -0700439 uint32_t num_bytes;
Jeyaprakash Soundrapandian651d64e2013-03-11 12:04:55 -0700440};
441
Evgeniy Borisov87ebe9c2013-12-21 15:55:55 +0200442struct eeprom_get_mm_t {
443 uint32_t mm_support;
444 uint32_t mm_compression;
445 uint32_t mm_size;
446};
447
Jeyaprakash Soundrapandian651d64e2013-03-11 12:04:55 -0700448struct msm_eeprom_cfg_data {
449 enum eeprom_cfg_type_t cfgtype;
450 uint8_t is_supported;
451 union {
452 char eeprom_name[MAX_SENSOR_NAME];
453 struct eeprom_get_t get_data;
454 struct eeprom_read_t read_data;
455 struct eeprom_write_t write_data;
Evgeniy Borisov87ebe9c2013-12-21 15:55:55 +0200456 struct eeprom_get_mm_t get_mm_data;
Jeyaprakash Soundrapandian651d64e2013-03-11 12:04:55 -0700457 } cfg;
458};
459
Shuzhen Wangb4f4c922013-01-08 14:32:08 -0800460enum msm_sensor_cfg_type_t {
461 CFG_SET_SLAVE_INFO,
Punit Soni55a6e152013-02-28 17:18:53 -0800462 CFG_SLAVE_READ_I2C,
Shuzhen Wangb4f4c922013-01-08 14:32:08 -0800463 CFG_WRITE_I2C_ARRAY,
Punit Soni55a6e152013-02-28 17:18:53 -0800464 CFG_SLAVE_WRITE_I2C_ARRAY,
Shuzhen Wangb4f4c922013-01-08 14:32:08 -0800465 CFG_WRITE_I2C_SEQ_ARRAY,
466 CFG_POWER_UP,
467 CFG_POWER_DOWN,
468 CFG_SET_STOP_STREAM_SETTING,
469 CFG_GET_SENSOR_INFO,
470 CFG_GET_SENSOR_INIT_PARAMS,
Rajakumar Govindaram6ad72872013-01-29 18:36:13 -0800471 CFG_SET_INIT_SETTING,
472 CFG_SET_RESOLUTION,
473 CFG_SET_STOP_STREAM,
474 CFG_SET_START_STREAM,
Lokesh Kumar Aakulub07fc7a2013-06-06 20:23:57 +0530475 CFG_SET_SATURATION,
476 CFG_SET_CONTRAST,
477 CFG_SET_SHARPNESS,
Li Sunc462b122013-07-23 15:21:09 +0800478 CFG_SET_ISO,
479 CFG_SET_EXPOSURE_COMPENSATION,
480 CFG_SET_ANTIBANDING,
481 CFG_SET_BESTSHOT_MODE,
482 CFG_SET_EFFECT,
483 CFG_SET_WHITE_BALANCE,
Lokesh Kumar Aakulub07fc7a2013-06-06 20:23:57 +0530484 CFG_SET_AUTOFOCUS,
485 CFG_CANCEL_AUTOFOCUS,
Shuzhen Wangb4f4c922013-01-08 14:32:08 -0800486};
487
Sreesudhan Ramakrish Ramkumar6acf6252013-01-26 21:26:13 -0800488enum msm_actuator_cfg_type_t {
489 CFG_GET_ACTUATOR_INFO,
490 CFG_SET_ACTUATOR_INFO,
491 CFG_SET_DEFAULT_FOCUS,
492 CFG_MOVE_FOCUS,
Lokesh Kumar Aakulueb2e99b2014-04-21 17:53:54 +0530493 CFG_SET_POSITION,
Evgeniy Borisovc6541112013-12-16 15:22:23 +0200494 CFG_ACTUATOR_POWERDOWN,
495 CFG_ACTUATOR_POWERUP,
Sreesudhan Ramakrish Ramkumar6acf6252013-01-26 21:26:13 -0800496};
497
498enum actuator_type {
499 ACTUATOR_VCM,
500 ACTUATOR_PIEZO,
501};
502
503enum msm_actuator_data_type {
504 MSM_ACTUATOR_BYTE_DATA = 1,
505 MSM_ACTUATOR_WORD_DATA,
506};
507
508enum msm_actuator_addr_type {
509 MSM_ACTUATOR_BYTE_ADDR = 1,
510 MSM_ACTUATOR_WORD_ADDR,
511};
512
Vasko Kalanoski5c417ea2013-10-21 11:40:11 -0700513enum msm_actuator_i2c_operation {
514 MSM_ACT_WRITE = 0,
515 MSM_ACT_POLL,
516};
517
Sreesudhan Ramakrish Ramkumar6acf6252013-01-26 21:26:13 -0800518struct reg_settings_t {
519 uint16_t reg_addr;
Vasko Kalanoski5c417ea2013-10-21 11:40:11 -0700520 enum msm_actuator_addr_type addr_type;
Sreesudhan Ramakrish Ramkumar6acf6252013-01-26 21:26:13 -0800521 uint16_t reg_data;
Vasko Kalanoski5c417ea2013-10-21 11:40:11 -0700522 enum msm_actuator_data_type data_type;
523 enum msm_actuator_i2c_operation i2c_operation;
524 uint32_t delay;
Sreesudhan Ramakrish Ramkumar6acf6252013-01-26 21:26:13 -0800525};
526
527struct region_params_t {
528 /* [0] = ForwardDirection Macro boundary
529 [1] = ReverseDirection Inf boundary
530 */
531 uint16_t step_bound[2];
532 uint16_t code_per_step;
533};
534
535struct damping_params_t {
536 uint32_t damping_step;
537 uint32_t damping_delay;
538 uint32_t hw_params;
539};
540
541struct msm_actuator_move_params_t {
542 int8_t dir;
543 int8_t sign_dir;
544 int16_t dest_step_pos;
545 int32_t num_steps;
Sreesudhan Ramakrish Ramkumard3eac152013-12-19 11:51:26 -0800546 uint16_t curr_lens_pos;
Sreesudhan Ramakrish Ramkumar6acf6252013-01-26 21:26:13 -0800547 struct damping_params_t *ringing_params;
548};
549
550struct msm_actuator_tuning_params_t {
551 int16_t initial_code;
552 uint16_t pwd_step;
553 uint16_t region_size;
554 uint32_t total_steps;
555 struct region_params_t *region_params;
556};
557
558struct msm_actuator_params_t {
559 enum actuator_type act_type;
560 uint8_t reg_tbl_size;
561 uint16_t data_size;
562 uint16_t init_setting_size;
563 uint32_t i2c_addr;
564 enum msm_actuator_addr_type i2c_addr_type;
565 enum msm_actuator_data_type i2c_data_type;
566 struct msm_actuator_reg_params_t *reg_tbl_params;
567 struct reg_settings_t *init_settings;
568};
569
570struct msm_actuator_set_info_t {
571 struct msm_actuator_params_t actuator_params;
572 struct msm_actuator_tuning_params_t af_tuning_params;
573};
574
575struct msm_actuator_get_info_t {
576 uint32_t focal_length_num;
577 uint32_t focal_length_den;
578 uint32_t f_number_num;
579 uint32_t f_number_den;
580 uint32_t f_pix_num;
581 uint32_t f_pix_den;
582 uint32_t total_f_dist_num;
583 uint32_t total_f_dist_den;
584 uint32_t hor_view_angle_num;
585 uint32_t hor_view_angle_den;
586 uint32_t ver_view_angle_num;
587 uint32_t ver_view_angle_den;
588};
589
590enum af_camera_name {
591 ACTUATOR_MAIN_CAM_0,
592 ACTUATOR_MAIN_CAM_1,
593 ACTUATOR_MAIN_CAM_2,
594 ACTUATOR_MAIN_CAM_3,
595 ACTUATOR_MAIN_CAM_4,
596 ACTUATOR_MAIN_CAM_5,
597 ACTUATOR_WEB_CAM_0,
598 ACTUATOR_WEB_CAM_1,
599 ACTUATOR_WEB_CAM_2,
600};
601
Panwar Vivekd66f98f2014-02-05 14:24:00 +0530602
603struct msm_actuator_set_position_t {
604 uint16_t number_of_steps;
605 uint16_t pos[MAX_NUMBER_OF_STEPS];
606 uint16_t delay[MAX_NUMBER_OF_STEPS];
607};
608
Sreesudhan Ramakrish Ramkumar6acf6252013-01-26 21:26:13 -0800609struct msm_actuator_cfg_data {
610 int cfgtype;
611 uint8_t is_af_supported;
612 union {
613 struct msm_actuator_move_params_t move;
614 struct msm_actuator_set_info_t set_info;
615 struct msm_actuator_get_info_t get_info;
Panwar Vivekd66f98f2014-02-05 14:24:00 +0530616 struct msm_actuator_set_position_t setpos;
Sreesudhan Ramakrish Ramkumar6acf6252013-01-26 21:26:13 -0800617 enum af_camera_name cam_name;
618 } cfg;
619};
620
621enum msm_actuator_write_type {
622 MSM_ACTUATOR_WRITE_HW_DAMP,
623 MSM_ACTUATOR_WRITE_DAC,
624};
625
626struct msm_actuator_reg_params_t {
627 enum msm_actuator_write_type reg_write_type;
628 uint32_t hw_mask;
629 uint16_t reg_addr;
630 uint16_t hw_shift;
631 uint16_t data_shift;
632};
633
Sreesudhan Ramakrish Ramkumard78de4f2013-02-05 02:25:59 -0800634enum msm_camera_led_config_t {
635 MSM_CAMERA_LED_OFF,
636 MSM_CAMERA_LED_LOW,
637 MSM_CAMERA_LED_HIGH,
638 MSM_CAMERA_LED_INIT,
639 MSM_CAMERA_LED_RELEASE,
640};
641
642struct msm_camera_led_cfg_t {
643 enum msm_camera_led_config_t cfgtype;
Ivan Tiyanov3f9dc1d2013-11-14 14:05:37 +0200644 uint32_t torch_current;
645 uint32_t flash_current[2];
Sreesudhan Ramakrish Ramkumard78de4f2013-02-05 02:25:59 -0800646};
647
Evgeniy Borisov11d85b02013-09-16 16:52:36 +0300648/* sensor init structures and enums */
649enum msm_sensor_init_cfg_type_t {
650 CFG_SINIT_PROBE,
651 CFG_SINIT_PROBE_DONE,
652 CFG_SINIT_PROBE_WAIT_DONE,
653};
654
655struct sensor_init_cfg_data {
656 enum msm_sensor_init_cfg_type_t cfgtype;
657 union {
658 void *setting;
659 } cfg;
660};
661
Shuzhen Wangb4f4c922013-01-08 14:32:08 -0800662#define VIDIOC_MSM_SENSOR_CFG \
663 _IOWR('V', BASE_VIDIOC_PRIVATE + 1, struct sensorb_cfg_data)
664
665#define VIDIOC_MSM_SENSOR_RELEASE \
666 _IO('V', BASE_VIDIOC_PRIVATE + 2)
667
668#define VIDIOC_MSM_SENSOR_GET_SUBDEV_ID \
669 _IOWR('V', BASE_VIDIOC_PRIVATE + 3, uint32_t)
670
671#define VIDIOC_MSM_CSIPHY_IO_CFG \
Rajesh Bondugula99b68f72014-03-14 09:16:37 -0700672 _IOWR('V', BASE_VIDIOC_PRIVATE + 4, struct csiphy_cfg_data)
Shuzhen Wangb4f4c922013-01-08 14:32:08 -0800673
674#define VIDIOC_MSM_CSID_IO_CFG \
Rajesh Bondugula99b68f72014-03-14 09:16:37 -0700675 _IOWR('V', BASE_VIDIOC_PRIVATE + 5, struct csid_cfg_data)
Shuzhen Wangb4f4c922013-01-08 14:32:08 -0800676
Sreesudhan Ramakrish Ramkumar6acf6252013-01-26 21:26:13 -0800677#define VIDIOC_MSM_ACTUATOR_CFG \
678 _IOWR('V', BASE_VIDIOC_PRIVATE + 6, struct msm_actuator_cfg_data)
679
Sreesudhan Ramakrish Ramkumard78de4f2013-02-05 02:25:59 -0800680#define VIDIOC_MSM_FLASH_LED_DATA_CFG \
681 _IOWR('V', BASE_VIDIOC_PRIVATE + 7, struct msm_camera_led_cfg_t)
682
Jeyaprakash Soundrapandian651d64e2013-03-11 12:04:55 -0700683#define VIDIOC_MSM_EEPROM_CFG \
684 _IOWR('V', BASE_VIDIOC_PRIVATE + 8, struct msm_eeprom_cfg_data)
685
Lokesh Kumar Aakulub07fc7a2013-06-06 20:23:57 +0530686#define VIDIOC_MSM_SENSOR_GET_AF_STATUS \
687 _IOWR('V', BASE_VIDIOC_PRIVATE + 9, uint32_t)
688
Evgeniy Borisov11d85b02013-09-16 16:52:36 +0300689#define VIDIOC_MSM_SENSOR_INIT_CFG \
690 _IOWR('V', BASE_VIDIOC_PRIVATE + 10, struct sensor_init_cfg_data)
691
Shuzhen Wangb4f4c922013-01-08 14:32:08 -0800692#define MSM_V4L2_PIX_FMT_META v4l2_fourcc('M', 'E', 'T', 'A') /* META */
693
694#endif /* __LINUX_MSM_CAM_SENSOR_H */