msm_cam_sensor.h revision f6bc42d03f50713e4981b36beda109a565d4b07c
1#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 36#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#define MAX_ACTUATOR_AF_TOTAL_STEPS 1024 44 45#define MAX_OIS_MOD_NAME_SIZE 32 46#define MAX_OIS_NAME_SIZE 32 47#define MAX_OIS_REG_SETTINGS 800 48 49#define MOVE_NEAR 0 50#define MOVE_FAR 1 51 52#define MSM_ACTUATOR_MOVE_SIGNED_FAR -1 53#define MSM_ACTUATOR_MOVE_SIGNED_NEAR 1 54 55#define MAX_EEPROM_NAME 32 56 57#define MAX_AF_ITERATIONS 3 58#define MAX_NUMBER_OF_STEPS 47 59 60#define MAX_LED_TRIGGERS 3 61 62enum sensor_stats_type { 63 YRGB, 64 YYYY, 65}; 66 67enum flash_type { 68 LED_FLASH = 1, 69 STROBE_FLASH, 70 GPIO_FLASH 71}; 72 73enum msm_camera_i2c_reg_addr_type { 74 MSM_CAMERA_I2C_BYTE_ADDR = 1, 75 MSM_CAMERA_I2C_WORD_ADDR, 76 MSM_CAMERA_I2C_3B_ADDR, 77 MSM_CAMERA_I2C_ADDR_TYPE_MAX, 78}; 79 80enum msm_camera_i2c_data_type { 81 MSM_CAMERA_I2C_BYTE_DATA = 1, 82 MSM_CAMERA_I2C_WORD_DATA, 83 MSM_CAMERA_I2C_DWORD_DATA, 84 MSM_CAMERA_I2C_SET_BYTE_MASK, 85 MSM_CAMERA_I2C_UNSET_BYTE_MASK, 86 MSM_CAMERA_I2C_SET_WORD_MASK, 87 MSM_CAMERA_I2C_UNSET_WORD_MASK, 88 MSM_CAMERA_I2C_SET_BYTE_WRITE_MASK_DATA, 89 MSM_CAMERA_I2C_DATA_TYPE_MAX, 90}; 91 92enum msm_sensor_power_seq_type_t { 93 SENSOR_CLK, 94 SENSOR_GPIO, 95 SENSOR_VREG, 96 SENSOR_I2C_MUX, 97}; 98 99enum msm_sensor_clk_type_t { 100 SENSOR_CAM_MCLK, 101 SENSOR_CAM_CLK, 102 SENSOR_CAM_CLK_MAX, 103}; 104 105enum msm_sensor_power_seq_gpio_t { 106 SENSOR_GPIO_RESET, 107 SENSOR_GPIO_STANDBY, 108 SENSOR_GPIO_AF_PWDM, 109 SENSOR_GPIO_VIO, 110 SENSOR_GPIO_VANA, 111 SENSOR_GPIO_VDIG, 112 SENSOR_GPIO_VAF, 113 SENSOR_GPIO_FL_EN, 114 SENSOR_GPIO_FL_NOW, 115 SENSOR_GPIO_TOR_EN, 116 SENSOR_GPIO_MAX, 117}; 118 119enum msm_camera_vreg_name_t { 120 CAM_VDIG, 121 CAM_VIO, 122 CAM_VANA, 123 CAM_VAF, 124 CAM_VREG_MAX, 125}; 126 127enum msm_sensor_resolution_t { 128 MSM_SENSOR_RES_FULL, 129 MSM_SENSOR_RES_QTR, 130 MSM_SENSOR_RES_2, 131 MSM_SENSOR_RES_3, 132 MSM_SENSOR_RES_4, 133 MSM_SENSOR_RES_5, 134 MSM_SENSOR_RES_6, 135 MSM_SENSOR_RES_7, 136 MSM_SENSOR_INVALID_RES, 137}; 138 139enum msm_camera_stream_type_t { 140 MSM_CAMERA_STREAM_PREVIEW, 141 MSM_CAMERA_STREAM_SNAPSHOT, 142 MSM_CAMERA_STREAM_VIDEO, 143 MSM_CAMERA_STREAM_INVALID, 144}; 145 146enum sensor_sub_module_t { 147 SUB_MODULE_SENSOR, 148 SUB_MODULE_CHROMATIX, 149 SUB_MODULE_ACTUATOR, 150 SUB_MODULE_EEPROM, 151 SUB_MODULE_LED_FLASH, 152 SUB_MODULE_STROBE_FLASH, 153 SUB_MODULE_CSID, 154 SUB_MODULE_CSID_3D, 155 SUB_MODULE_CSIPHY, 156 SUB_MODULE_CSIPHY_3D, 157 SUB_MODULE_OIS, 158 SUB_MODULE_MAX, 159}; 160 161 162struct otp_info_t { 163 uint8_t enable; 164 165 uint16_t page_size; 166 uint16_t num_of_pages; 167 uint16_t page_reg_addr; 168 uint16_t page_reg_base_addr; 169 170 uint16_t ctrl_reg_addr; 171 uint16_t ctrl_reg_read_mode; 172 173 uint16_t status_reg_addr; 174 uint16_t status_reg_read_complete_bit; 175 176 uint16_t reset_reg_addr; 177 uint16_t reset_reg_stream_on; 178 uint16_t reset_reg_stream_off; 179 180 uint16_t data_seg_addr; 181 182 enum msm_camera_i2c_data_type data_size; 183 184 uint8_t big_endian; 185 186 uint8_t poll_times; 187 uint16_t poll_usleep; 188 189 /* Initialized by the sensor driver */ 190 uint8_t *otp_info; 191 uint8_t otp_read; 192}; 193 194enum { 195 MSM_CAMERA_EFFECT_MODE_OFF, 196 MSM_CAMERA_EFFECT_MODE_MONO, 197 MSM_CAMERA_EFFECT_MODE_NEGATIVE, 198 MSM_CAMERA_EFFECT_MODE_SOLARIZE, 199 MSM_CAMERA_EFFECT_MODE_SEPIA, 200 MSM_CAMERA_EFFECT_MODE_POSTERIZE, 201 MSM_CAMERA_EFFECT_MODE_WHITEBOARD, 202 MSM_CAMERA_EFFECT_MODE_BLACKBOARD, 203 MSM_CAMERA_EFFECT_MODE_AQUA, 204 MSM_CAMERA_EFFECT_MODE_EMBOSS, 205 MSM_CAMERA_EFFECT_MODE_SKETCH, 206 MSM_CAMERA_EFFECT_MODE_NEON, 207 MSM_CAMERA_EFFECT_MODE_MAX 208}; 209 210enum { 211 MSM_CAMERA_WB_MODE_AUTO, 212 MSM_CAMERA_WB_MODE_CUSTOM, 213 MSM_CAMERA_WB_MODE_INCANDESCENT, 214 MSM_CAMERA_WB_MODE_FLUORESCENT, 215 MSM_CAMERA_WB_MODE_WARM_FLUORESCENT, 216 MSM_CAMERA_WB_MODE_DAYLIGHT, 217 MSM_CAMERA_WB_MODE_CLOUDY_DAYLIGHT, 218 MSM_CAMERA_WB_MODE_TWILIGHT, 219 MSM_CAMERA_WB_MODE_SHADE, 220 MSM_CAMERA_WB_MODE_OFF, 221 MSM_CAMERA_WB_MODE_MAX 222}; 223 224enum { 225 MSM_CAMERA_SCENE_MODE_OFF, 226 MSM_CAMERA_SCENE_MODE_AUTO, 227 MSM_CAMERA_SCENE_MODE_LANDSCAPE, 228 MSM_CAMERA_SCENE_MODE_SNOW, 229 MSM_CAMERA_SCENE_MODE_BEACH, 230 MSM_CAMERA_SCENE_MODE_SUNSET, 231 MSM_CAMERA_SCENE_MODE_NIGHT, 232 MSM_CAMERA_SCENE_MODE_PORTRAIT, 233 MSM_CAMERA_SCENE_MODE_BACKLIGHT, 234 MSM_CAMERA_SCENE_MODE_SPORTS, 235 MSM_CAMERA_SCENE_MODE_ANTISHAKE, 236 MSM_CAMERA_SCENE_MODE_FLOWERS, 237 MSM_CAMERA_SCENE_MODE_CANDLELIGHT, 238 MSM_CAMERA_SCENE_MODE_FIREWORKS, 239 MSM_CAMERA_SCENE_MODE_PARTY, 240 MSM_CAMERA_SCENE_MODE_NIGHT_PORTRAIT, 241 MSM_CAMERA_SCENE_MODE_THEATRE, 242 MSM_CAMERA_SCENE_MODE_ACTION, 243 MSM_CAMERA_SCENE_MODE_AR, 244 MSM_CAMERA_SCENE_MODE_FACE_PRIORITY, 245 MSM_CAMERA_SCENE_MODE_BARCODE, 246 MSM_CAMERA_SCENE_MODE_HDR, 247 MSM_CAMERA_SCENE_MODE_MAX 248}; 249 250enum csid_cfg_type_t { 251 CSID_INIT, 252 CSID_CFG, 253 CSID_RELEASE, 254}; 255 256enum csiphy_cfg_type_t { 257 CSIPHY_INIT, 258 CSIPHY_CFG, 259 CSIPHY_RELEASE, 260}; 261 262enum camera_vreg_type { 263 REG_LDO, 264 REG_VS, 265 REG_GPIO, 266}; 267 268enum sensor_af_t { 269 SENSOR_AF_FOCUSSED, 270 SENSOR_AF_NOT_FOCUSSED, 271}; 272 273struct msm_sensor_power_setting { 274 enum msm_sensor_power_seq_type_t seq_type; 275 uint16_t seq_val; 276 long config_val; 277 uint16_t delay; 278 void *data[10]; 279}; 280 281struct msm_sensor_power_setting_array { 282 struct msm_sensor_power_setting *power_setting; 283 uint16_t size; 284 struct msm_sensor_power_setting *power_down_setting; 285 uint16_t size_down; 286}; 287 288struct msm_sensor_id_info_t { 289 uint16_t sensor_id_reg_addr; 290 uint16_t sensor_id; 291}; 292 293enum msm_sensor_camera_id_t { 294 CAMERA_0, 295 CAMERA_1, 296 CAMERA_2, 297 CAMERA_3, 298 MAX_CAMERAS, 299}; 300 301enum cci_i2c_master_t { 302 MASTER_0, 303 MASTER_1, 304 MASTER_MAX, 305}; 306 307enum i2c_freq_mode_t { 308 I2C_STANDARD_MODE, 309 I2C_FAST_MODE, 310 I2C_CUSTOM_MODE, 311 I2C_MAX_MODES, 312}; 313 314struct msm_camera_i2c_reg_array { 315 uint16_t reg_addr; 316 uint16_t reg_data; 317 uint32_t delay; 318}; 319 320struct msm_camera_i2c_reg_setting { 321 struct msm_camera_i2c_reg_array *reg_setting; 322 uint16_t size; 323 enum msm_camera_i2c_reg_addr_type addr_type; 324 enum msm_camera_i2c_data_type data_type; 325 uint16_t delay; 326}; 327 328struct msm_camera_i2c_seq_reg_array { 329 uint16_t reg_addr; 330 uint8_t reg_data[I2C_SEQ_REG_DATA_MAX]; 331 uint16_t reg_data_size; 332}; 333 334struct msm_camera_i2c_seq_reg_setting { 335 struct msm_camera_i2c_seq_reg_array *reg_setting; 336 uint16_t size; 337 enum msm_camera_i2c_reg_addr_type addr_type; 338 uint16_t delay; 339}; 340 341struct msm_camera_i2c_array_write_config { 342 struct msm_camera_i2c_reg_setting conf_array; 343 uint16_t slave_addr; 344}; 345 346struct msm_camera_i2c_read_config { 347 uint16_t slave_addr; 348 uint16_t reg_addr; 349 enum msm_camera_i2c_data_type data_type; 350 uint16_t *data; 351}; 352 353struct msm_camera_csid_vc_cfg { 354 uint8_t cid; 355 uint8_t dt; 356 uint8_t decode_format; 357}; 358 359struct msm_camera_csid_lut_params { 360 uint8_t num_cid; 361 struct msm_camera_csid_vc_cfg *vc_cfg[MAX_CID]; 362}; 363 364struct msm_camera_csid_params { 365 uint8_t lane_cnt; 366 uint16_t lane_assign; 367 uint8_t phy_sel; 368 struct msm_camera_csid_lut_params lut_params; 369}; 370 371struct msm_camera_csiphy_params { 372 uint8_t lane_cnt; 373 uint8_t settle_cnt; 374 uint16_t lane_mask; 375 uint8_t combo_mode; 376 uint8_t csid_core; 377}; 378 379struct msm_camera_csi2_params { 380 struct msm_camera_csid_params csid_params; 381 struct msm_camera_csiphy_params csiphy_params; 382}; 383 384struct msm_camera_csi_lane_params { 385 uint16_t csi_lane_assign; 386 uint16_t csi_lane_mask; 387}; 388 389struct csi_lane_params_t { 390 uint16_t csi_lane_assign; 391 uint8_t csi_lane_mask; 392 uint8_t csi_if; 393 uint8_t csid_core[2]; 394 uint8_t csi_phy_sel; 395}; 396 397enum camb_position_t { 398 BACK_CAMERA_B, 399 FRONT_CAMERA_B, 400 INVALID_CAMERA_B, 401}; 402 403struct msm_sensor_info_t { 404 char sensor_name[MAX_SENSOR_NAME]; 405 uint32_t session_id; 406 int32_t subdev_id[SUB_MODULE_MAX]; 407 uint8_t is_mount_angle_valid; 408 uint32_t sensor_mount_angle; 409 int modes_supported; 410 enum camb_position_t position; 411}; 412 413struct camera_vreg_t { 414 const char *reg_name; 415 int min_voltage; 416 int max_voltage; 417 int op_mode; 418 uint32_t delay; 419}; 420 421enum camerab_mode_t { 422 CAMERA_MODE_2D_B = (1<<0), 423 CAMERA_MODE_3D_B = (1<<1), 424 CAMERA_MODE_INVALID = (1<<2), 425}; 426 427struct msm_sensor_init_params { 428 /* mask of modes supported: 2D, 3D */ 429 int modes_supported; 430 /* sensor position: front, back */ 431 enum camb_position_t position; 432 /* sensor mount angle */ 433 uint32_t sensor_mount_angle; 434 /* sensor OTP params */ 435 struct otp_info_t sensor_otp; 436}; 437 438struct msm_camera_sensor_slave_info { 439 char sensor_name[32]; 440 char eeprom_name[32]; 441 char actuator_name[32]; 442 char ois_name[32]; 443 enum msm_sensor_camera_id_t camera_id; 444 uint16_t slave_addr; 445 enum i2c_freq_mode_t i2c_freq_mode; 446 enum msm_camera_i2c_reg_addr_type addr_type; 447 struct msm_sensor_id_info_t sensor_id_info; 448 struct msm_sensor_power_setting_array power_setting_array; 449 uint8_t is_init_params_valid; 450 struct msm_sensor_init_params sensor_init_params; 451 uint8_t is_flash_supported; 452}; 453 454struct sensorb_cfg_data { 455 int cfgtype; 456 union { 457 struct msm_sensor_info_t sensor_info; 458 struct msm_sensor_init_params sensor_init_params; 459 void *setting; 460 } cfg; 461}; 462 463struct csid_cfg_data { 464 enum csid_cfg_type_t cfgtype; 465 union { 466 uint32_t csid_version; 467 struct msm_camera_csid_params *csid_params; 468 } cfg; 469}; 470 471struct csiphy_cfg_data { 472 enum csiphy_cfg_type_t cfgtype; 473 union { 474 struct msm_camera_csiphy_params *csiphy_params; 475 struct msm_camera_csi_lane_params *csi_lane_params; 476 } cfg; 477}; 478 479enum eeprom_cfg_type_t { 480 CFG_EEPROM_GET_INFO, 481 CFG_EEPROM_GET_CAL_DATA, 482 CFG_EEPROM_READ_CAL_DATA, 483 CFG_EEPROM_WRITE_DATA, 484 CFG_EEPROM_GET_MM_INFO, 485}; 486 487struct eeprom_get_t { 488 uint32_t num_bytes; 489}; 490 491struct eeprom_read_t { 492 uint8_t *dbuffer; 493 uint32_t num_bytes; 494}; 495 496struct eeprom_write_t { 497 uint8_t *dbuffer; 498 uint32_t num_bytes; 499}; 500 501struct eeprom_get_cmm_t { 502 uint32_t cmm_support; 503 uint32_t cmm_compression; 504 uint32_t cmm_size; 505}; 506 507struct msm_eeprom_cfg_data { 508 enum eeprom_cfg_type_t cfgtype; 509 uint8_t is_supported; 510 union { 511 char eeprom_name[MAX_SENSOR_NAME]; 512 struct eeprom_get_t get_data; 513 struct eeprom_read_t read_data; 514 struct eeprom_write_t write_data; 515 struct eeprom_get_cmm_t get_cmm_data; 516 } cfg; 517}; 518 519enum msm_sensor_cfg_type_t { 520 CFG_SET_SLAVE_INFO, 521 CFG_SLAVE_READ_I2C, 522 CFG_WRITE_I2C_ARRAY, 523 CFG_SLAVE_WRITE_I2C_ARRAY, 524 CFG_WRITE_I2C_SEQ_ARRAY, 525 CFG_POWER_UP, 526 CFG_POWER_DOWN, 527 CFG_SET_STOP_STREAM_SETTING, 528 CFG_GET_SENSOR_INFO, 529 CFG_GET_MODULE_INFO, 530 CFG_GET_SENSOR_INIT_PARAMS, 531 CFG_SET_INIT_SETTING, 532 CFG_SET_RESOLUTION, 533 CFG_SET_STOP_STREAM, 534 CFG_SET_START_STREAM, 535 CFG_SET_SATURATION, 536 CFG_SET_CONTRAST, 537 CFG_SET_SHARPNESS, 538 CFG_SET_ISO, 539 CFG_SET_EXPOSURE_COMPENSATION, 540 CFG_SET_ANTIBANDING, 541 CFG_SET_BESTSHOT_MODE, 542 CFG_SET_EFFECT, 543 CFG_SET_WHITE_BALANCE, 544 CFG_SET_AUTOFOCUS, 545 CFG_CANCEL_AUTOFOCUS, 546 CFG_SET_STREAM_TYPE, 547}; 548 549enum msm_actuator_cfg_type_t { 550 CFG_GET_ACTUATOR_INFO, 551 CFG_SET_ACTUATOR_INFO, 552 CFG_SET_DEFAULT_FOCUS, 553 CFG_SET_POSITION, 554 CFG_MOVE_FOCUS, 555 CFG_ACTUATOR_POWERDOWN, 556 CFG_ACTUATOR_POWERUP, 557 CFG_ACTUATOR_INIT, 558 CFG_DIRECT_I2C_WRITE, /*to support non-trivial actuators*/ 559}; 560 561enum msm_ois_cfg_type_t { 562 CFG_OIS_INIT, 563 CFG_GET_OIS_INFO, 564 CFG_OIS_POWERDOWN, 565 CFG_OIS_INI_SET, 566 CFG_OIS_ENABLE, 567 CFG_OIS_DISABLE, 568 CFG_OIS_SET_MOVIE_MODE, 569 CFG_OIS_SET_STILL_MODE, 570 CFG_OIS_SET_CENTERING_ON, 571 CFG_OIS_SET_PANTILT_ON, 572 CFG_OIS_POWERUP, 573 CFG_OIS_I2C_WRITE_SEQ_TABLE, 574}; 575 576enum msm_ois_i2c_operation { 577 MSM_OIS_WRITE = 0, 578 MSM_OIS_POLL, 579}; 580 581struct reg_settings_ois_t { 582 uint16_t reg_addr; 583 enum msm_camera_i2c_reg_addr_type addr_type; 584 uint32_t reg_data; 585 enum msm_camera_i2c_data_type data_type; 586 enum msm_ois_i2c_operation i2c_operation; 587 uint32_t delay; 588}; 589 590struct msm_ois_params_t { 591 uint16_t data_size; 592 uint16_t init_setting_size; 593 uint16_t enable_ois_setting_size; 594 uint16_t disable_ois_setting_size; 595 uint16_t movie_mode_ois_setting_size; 596 uint16_t still_mode_ois_setting_size; 597 uint16_t centering_on_ois_setting_size; 598 uint16_t centering_off_ois_setting_size; 599 uint16_t pantilt_on_ois_setting_size; 600 uint32_t i2c_addr; 601 enum msm_camera_i2c_reg_addr_type i2c_addr_type; 602 enum msm_camera_i2c_data_type i2c_data_type; 603 struct reg_settings_ois_t *init_settings; 604 struct reg_settings_ois_t *enable_ois_settings; 605 struct reg_settings_ois_t *disable_ois_settings; 606 struct reg_settings_ois_t *movie_mode_ois_settings; 607 struct reg_settings_ois_t *still_mode_ois_settings; 608 struct reg_settings_ois_t *centering_on_ois_settings; 609 struct reg_settings_ois_t *centering_off_ois_settings; 610 struct reg_settings_ois_t *pantilt_on_ois_settings; 611}; 612 613struct msm_ois_set_info_t { 614 struct msm_ois_params_t ois_params; 615}; 616 617enum actuator_type { 618 ACTUATOR_VCM, 619 ACTUATOR_PIEZO, 620 ACTUATOR_HVCM, 621}; 622 623enum msm_actuator_data_type { 624 MSM_ACTUATOR_BYTE_DATA = 1, 625 MSM_ACTUATOR_WORD_DATA, 626}; 627 628enum msm_actuator_addr_type { 629 MSM_ACTUATOR_BYTE_ADDR = 1, 630 MSM_ACTUATOR_WORD_ADDR, 631}; 632 633enum msm_actuator_i2c_operation { 634 MSM_ACT_WRITE = 0, 635 MSM_ACT_POLL, 636}; 637 638struct reg_settings_t { 639 uint16_t reg_addr; 640 enum msm_actuator_addr_type addr_type; 641 uint16_t reg_data; 642 enum msm_actuator_data_type data_type; 643 enum msm_actuator_i2c_operation i2c_operation; 644 uint32_t delay; 645}; 646 647struct region_params_t { 648 /* [0] = ForwardDirection Macro boundary 649 [1] = ReverseDirection Inf boundary 650 */ 651 uint16_t step_bound[2]; 652 uint16_t code_per_step; 653}; 654 655struct damping_params_t { 656 uint32_t damping_step; 657 uint32_t damping_delay; 658 uint32_t hw_params; 659}; 660 661struct msm_actuator_move_params_t { 662 int8_t dir; 663 int8_t sign_dir; 664 int16_t dest_step_pos; 665 int32_t num_steps; 666 uint16_t curr_lens_pos; 667 struct damping_params_t *ringing_params; 668}; 669 670struct msm_actuator_tuning_params_t { 671 int16_t initial_code; 672 uint16_t pwd_step; 673 uint16_t region_size; 674 uint32_t total_steps; 675 struct region_params_t *region_params; 676}; 677 678struct park_lens_data_t { 679 uint32_t damping_step; 680 uint32_t damping_delay; 681 uint32_t hw_params; 682 uint32_t max_step; 683}; 684 685struct msm_actuator_params_t { 686 enum actuator_type act_type; 687 uint8_t reg_tbl_size; 688 uint16_t data_size; 689 uint16_t init_setting_size; 690 uint32_t i2c_addr; 691 enum msm_actuator_addr_type i2c_addr_type; 692 enum msm_actuator_data_type i2c_data_type; 693 struct msm_actuator_reg_params_t *reg_tbl_params; 694 struct reg_settings_t *init_settings; 695 struct park_lens_data_t park_lens; 696}; 697 698struct msm_actuator_set_info_t { 699 struct msm_actuator_params_t actuator_params; 700 struct msm_actuator_tuning_params_t af_tuning_params; 701}; 702 703struct msm_actuator_get_info_t { 704 uint32_t focal_length_num; 705 uint32_t focal_length_den; 706 uint32_t f_number_num; 707 uint32_t f_number_den; 708 uint32_t f_pix_num; 709 uint32_t f_pix_den; 710 uint32_t total_f_dist_num; 711 uint32_t total_f_dist_den; 712 uint32_t hor_view_angle_num; 713 uint32_t hor_view_angle_den; 714 uint32_t ver_view_angle_num; 715 uint32_t ver_view_angle_den; 716}; 717 718enum af_camera_name { 719 ACTUATOR_MAIN_CAM_0, 720 ACTUATOR_MAIN_CAM_1, 721 ACTUATOR_MAIN_CAM_2, 722 ACTUATOR_MAIN_CAM_3, 723 ACTUATOR_MAIN_CAM_4, 724 ACTUATOR_MAIN_CAM_5, 725 ACTUATOR_WEB_CAM_0, 726 ACTUATOR_WEB_CAM_1, 727 ACTUATOR_WEB_CAM_2, 728}; 729 730struct msm_ois_cfg_data { 731 int cfgtype; 732 uint8_t is_ois_supported; 733 union { 734 uint8_t enable_centering_ois; 735 struct msm_ois_set_info_t set_info; 736 struct msm_camera_i2c_seq_reg_setting *settings; 737 } cfg; 738}; 739 740struct msm_actuator_set_position_t { 741 uint16_t number_of_steps; 742 uint16_t pos[MAX_NUMBER_OF_STEPS]; 743 uint16_t delay[MAX_NUMBER_OF_STEPS]; 744}; 745 746struct msm_actuator_i2c { 747 uint16_t addr; 748 uint16_t value; 749 uint32_t wait_time; 750}; 751 752#define MSM_ACTUATOR_I2C_MAX_TABLE_SIZE (8) 753struct msm_actuator_i2c_table { 754 struct msm_actuator_i2c data[MSM_ACTUATOR_I2C_MAX_TABLE_SIZE]; 755 uint32_t size; 756}; 757 758struct msm_actuator_cfg_data { 759 int cfgtype; 760 uint8_t is_af_supported; 761 union { 762 struct msm_actuator_move_params_t move; 763 struct msm_actuator_set_info_t set_info; 764 struct msm_actuator_get_info_t get_info; 765 struct msm_actuator_set_position_t setpos; 766 enum af_camera_name cam_name; 767 struct msm_actuator_i2c_table i2c_table; 768 } cfg; 769}; 770 771enum msm_actuator_write_type { 772 MSM_ACTUATOR_WRITE_HW_DAMP, 773 MSM_ACTUATOR_WRITE_DAC, 774}; 775 776struct msm_actuator_reg_params_t { 777 enum msm_actuator_write_type reg_write_type; 778 uint32_t hw_mask; 779 uint16_t reg_addr; 780 uint16_t hw_shift; 781 uint16_t data_shift; 782}; 783 784enum msm_camera_led_config_t { 785 MSM_CAMERA_LED_OFF, 786 MSM_CAMERA_LED_LOW, 787 MSM_CAMERA_LED_HIGH, 788 MSM_CAMERA_LED_INIT, 789 MSM_CAMERA_LED_RELEASE, 790}; 791 792struct msm_camera_led_cfg_t { 793 enum msm_camera_led_config_t cfgtype; 794 uint32_t torch_current; 795 uint32_t flash_current[MAX_LED_TRIGGERS]; 796 uint32_t flash_duration[MAX_LED_TRIGGERS]; 797}; 798 799/* sensor init structures and enums */ 800enum msm_sensor_init_cfg_type_t { 801 CFG_SINIT_PROBE, 802 CFG_SINIT_PROBE_DONE, 803 CFG_SINIT_PROBE_WAIT_DONE, 804}; 805 806struct sensor_init_cfg_data { 807 enum msm_sensor_init_cfg_type_t cfgtype; 808 union { 809 void *setting; 810 } cfg; 811}; 812 813#define VIDIOC_MSM_SENSOR_CFG \ 814 _IOWR('V', BASE_VIDIOC_PRIVATE + 1, struct sensorb_cfg_data) 815 816#define VIDIOC_MSM_SENSOR_RELEASE \ 817 _IO('V', BASE_VIDIOC_PRIVATE + 2) 818 819#define VIDIOC_MSM_SENSOR_GET_SUBDEV_ID \ 820 _IOWR('V', BASE_VIDIOC_PRIVATE + 3, uint32_t) 821 822#define VIDIOC_MSM_CSIPHY_IO_CFG \ 823 _IOWR('V', BASE_VIDIOC_PRIVATE + 4, struct csiphy_cfg_data) 824 825#define VIDIOC_MSM_CSID_IO_CFG \ 826 _IOWR('V', BASE_VIDIOC_PRIVATE + 5, struct csid_cfg_data) 827 828#define VIDIOC_MSM_ACTUATOR_CFG \ 829 _IOWR('V', BASE_VIDIOC_PRIVATE + 6, struct msm_actuator_cfg_data) 830 831#define VIDIOC_MSM_FLASH_LED_DATA_CFG \ 832 _IOWR('V', BASE_VIDIOC_PRIVATE + 7, struct msm_camera_led_cfg_t) 833 834#define VIDIOC_MSM_EEPROM_CFG \ 835 _IOWR('V', BASE_VIDIOC_PRIVATE + 8, struct msm_eeprom_cfg_data) 836 837#define VIDIOC_MSM_SENSOR_GET_AF_STATUS \ 838 _IOWR('V', BASE_VIDIOC_PRIVATE + 9, uint32_t) 839 840#define VIDIOC_MSM_SENSOR_INIT_CFG \ 841 _IOWR('V', BASE_VIDIOC_PRIVATE + 10, struct sensor_init_cfg_data) 842 843#define VIDIOC_MSM_OIS_CFG \ 844 _IOWR('V', BASE_VIDIOC_PRIVATE + 11, struct msm_ois_cfg_data) 845 846#define MSM_V4L2_PIX_FMT_META v4l2_fourcc('M', 'E', 'T', 'A') /* META */ 847 848#endif /* __LINUX_MSM_CAM_SENSOR_H */ 849