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