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 8 #include <linux/v4l2-mediabus.h> 9 #include <media/msm_camsensor_sdk.h> 10 11 #include <linux/types.h> 12 #include <linux/i2c.h> 13 #ifdef CONFIG_COMPAT 14 #include <linux/compat.h> 15 #endif 16 17 #define I2C_SEQ_REG_SETTING_MAX 5 18 19 #define MSM_SENSOR_MCLK_8HZ 8000000 20 #define MSM_SENSOR_MCLK_16HZ 16000000 21 #define MSM_SENSOR_MCLK_24HZ 24000000 22 23 #define MAX_SENSOR_NAME 32 24 #define MAX_ACTUATOR_AF_TOTAL_STEPS 1024 25 26 #define MAX_OIS_MOD_NAME_SIZE 32 27 #define MAX_OIS_NAME_SIZE 32 28 #define MAX_OIS_REG_SETTINGS 800 29 30 #define MOVE_NEAR 0 31 #define MOVE_FAR 1 32 33 #define MSM_ACTUATOR_MOVE_SIGNED_FAR -1 34 #define MSM_ACTUATOR_MOVE_SIGNED_NEAR 1 35 36 #define MAX_EEPROM_NAME 32 37 38 #define MAX_AF_ITERATIONS 3 39 #define MAX_NUMBER_OF_STEPS 47 40 41 #define MSM_V4L2_PIX_FMT_META v4l2_fourcc('M', 'E', 'T', 'A') /* META */ 42 #define MSM_V4L2_PIX_FMT_SBGGR14 v4l2_fourcc('B', 'G', '1', '4') 43 /* 14 BGBG.. GRGR.. */ 44 #define MSM_V4L2_PIX_FMT_SGBRG14 v4l2_fourcc('G', 'B', '1', '4') 45 /* 14 GBGB.. RGRG.. */ 46 #define MSM_V4L2_PIX_FMT_SGRBG14 v4l2_fourcc('B', 'A', '1', '4') 47 /* 14 GRGR.. BGBG.. */ 48 #define MSM_V4L2_PIX_FMT_SRGGB14 v4l2_fourcc('R', 'G', '1', '4') 49 /* 14 RGRG.. GBGB.. */ 50 51 enum flash_type { 52 LED_FLASH = 1, 53 STROBE_FLASH, 54 GPIO_FLASH 55 }; 56 57 enum msm_sensor_resolution_t { 58 MSM_SENSOR_RES_FULL, 59 MSM_SENSOR_RES_QTR, 60 MSM_SENSOR_RES_2, 61 MSM_SENSOR_RES_3, 62 MSM_SENSOR_RES_4, 63 MSM_SENSOR_RES_5, 64 MSM_SENSOR_RES_6, 65 MSM_SENSOR_RES_7, 66 MSM_SENSOR_INVALID_RES, 67 }; 68 69 enum msm_camera_stream_type_t { 70 MSM_CAMERA_STREAM_PREVIEW, 71 MSM_CAMERA_STREAM_SNAPSHOT, 72 MSM_CAMERA_STREAM_VIDEO, 73 MSM_CAMERA_STREAM_INVALID, 74 }; 75 76 enum sensor_sub_module_t { 77 SUB_MODULE_SENSOR, 78 SUB_MODULE_CHROMATIX, 79 SUB_MODULE_ACTUATOR, 80 SUB_MODULE_EEPROM, 81 SUB_MODULE_LED_FLASH, 82 SUB_MODULE_STROBE_FLASH, 83 SUB_MODULE_CSID, 84 SUB_MODULE_CSID_3D, 85 SUB_MODULE_CSIPHY, 86 SUB_MODULE_CSIPHY_3D, 87 SUB_MODULE_OIS, 88 SUB_MODULE_MAX, 89 }; 90 91 enum { 92 MSM_CAMERA_EFFECT_MODE_OFF, 93 MSM_CAMERA_EFFECT_MODE_MONO, 94 MSM_CAMERA_EFFECT_MODE_NEGATIVE, 95 MSM_CAMERA_EFFECT_MODE_SOLARIZE, 96 MSM_CAMERA_EFFECT_MODE_SEPIA, 97 MSM_CAMERA_EFFECT_MODE_POSTERIZE, 98 MSM_CAMERA_EFFECT_MODE_WHITEBOARD, 99 MSM_CAMERA_EFFECT_MODE_BLACKBOARD, 100 MSM_CAMERA_EFFECT_MODE_AQUA, 101 MSM_CAMERA_EFFECT_MODE_EMBOSS, 102 MSM_CAMERA_EFFECT_MODE_SKETCH, 103 MSM_CAMERA_EFFECT_MODE_NEON, 104 MSM_CAMERA_EFFECT_MODE_MAX 105 }; 106 107 enum { 108 MSM_CAMERA_WB_MODE_AUTO, 109 MSM_CAMERA_WB_MODE_CUSTOM, 110 MSM_CAMERA_WB_MODE_INCANDESCENT, 111 MSM_CAMERA_WB_MODE_FLUORESCENT, 112 MSM_CAMERA_WB_MODE_WARM_FLUORESCENT, 113 MSM_CAMERA_WB_MODE_DAYLIGHT, 114 MSM_CAMERA_WB_MODE_CLOUDY_DAYLIGHT, 115 MSM_CAMERA_WB_MODE_TWILIGHT, 116 MSM_CAMERA_WB_MODE_SHADE, 117 MSM_CAMERA_WB_MODE_OFF, 118 MSM_CAMERA_WB_MODE_MAX 119 }; 120 121 enum { 122 MSM_CAMERA_SCENE_MODE_OFF, 123 MSM_CAMERA_SCENE_MODE_AUTO, 124 MSM_CAMERA_SCENE_MODE_LANDSCAPE, 125 MSM_CAMERA_SCENE_MODE_SNOW, 126 MSM_CAMERA_SCENE_MODE_BEACH, 127 MSM_CAMERA_SCENE_MODE_SUNSET, 128 MSM_CAMERA_SCENE_MODE_NIGHT, 129 MSM_CAMERA_SCENE_MODE_PORTRAIT, 130 MSM_CAMERA_SCENE_MODE_BACKLIGHT, 131 MSM_CAMERA_SCENE_MODE_SPORTS, 132 MSM_CAMERA_SCENE_MODE_ANTISHAKE, 133 MSM_CAMERA_SCENE_MODE_FLOWERS, 134 MSM_CAMERA_SCENE_MODE_CANDLELIGHT, 135 MSM_CAMERA_SCENE_MODE_FIREWORKS, 136 MSM_CAMERA_SCENE_MODE_PARTY, 137 MSM_CAMERA_SCENE_MODE_NIGHT_PORTRAIT, 138 MSM_CAMERA_SCENE_MODE_THEATRE, 139 MSM_CAMERA_SCENE_MODE_ACTION, 140 MSM_CAMERA_SCENE_MODE_AR, 141 MSM_CAMERA_SCENE_MODE_FACE_PRIORITY, 142 MSM_CAMERA_SCENE_MODE_BARCODE, 143 MSM_CAMERA_SCENE_MODE_HDR, 144 MSM_CAMERA_SCENE_MODE_MAX 145 }; 146 147 enum csid_cfg_type_t { 148 CSID_INIT, 149 CSID_CFG, 150 CSID_RELEASE, 151 }; 152 153 enum csiphy_cfg_type_t { 154 CSIPHY_INIT, 155 CSIPHY_CFG, 156 CSIPHY_RELEASE, 157 }; 158 159 enum camera_vreg_type { 160 VREG_TYPE_DEFAULT, 161 VREG_TYPE_CUSTOM, 162 }; 163 164 enum sensor_af_t { 165 SENSOR_AF_FOCUSSED, 166 SENSOR_AF_NOT_FOCUSSED, 167 }; 168 169 enum cci_i2c_master_t { 170 MASTER_0, 171 MASTER_1, 172 MASTER_MAX, 173 }; 174 175 struct msm_camera_i2c_array_write_config { 176 struct msm_camera_i2c_reg_setting conf_array; 177 uint16_t slave_addr; 178 }; 179 180 struct msm_camera_i2c_read_config { 181 uint16_t slave_addr; 182 uint16_t reg_addr; 183 enum msm_camera_i2c_data_type data_type; 184 uint16_t data; 185 }; 186 187 struct msm_camera_csi2_params { 188 struct msm_camera_csid_params csid_params; 189 struct msm_camera_csiphy_params csiphy_params; 190 uint8_t csi_clk_scale_enable; 191 }; 192 193 struct msm_camera_csi_lane_params { 194 uint16_t csi_lane_assign; 195 uint16_t csi_lane_mask; 196 }; 197 198 struct csi_lane_params_t { 199 uint16_t csi_lane_assign; 200 uint8_t csi_lane_mask; 201 uint8_t csi_if; 202 int8_t csid_core[2]; 203 uint8_t csi_phy_sel; 204 }; 205 206 struct msm_sensor_info_t { 207 char sensor_name[MAX_SENSOR_NAME]; 208 uint32_t session_id; 209 int32_t subdev_id[SUB_MODULE_MAX]; 210 int32_t subdev_intf[SUB_MODULE_MAX]; 211 uint8_t is_mount_angle_valid; 212 uint32_t sensor_mount_angle; 213 int modes_supported; 214 enum camb_position_t position; 215 }; 216 217 struct camera_vreg_t { 218 const char *reg_name; 219 int min_voltage; 220 int max_voltage; 221 int op_mode; 222 uint32_t delay; 223 const char *custom_vreg_name; 224 enum camera_vreg_type type; 225 }; 226 227 struct sensorb_cfg_data { 228 int cfgtype; 229 union { 230 struct msm_sensor_info_t sensor_info; 231 struct msm_sensor_init_params sensor_init_params; 232 void *setting; 233 } cfg; 234 }; 235 236 struct csid_cfg_data { 237 enum csid_cfg_type_t cfgtype; 238 union { 239 uint32_t csid_version; 240 struct msm_camera_csid_params *csid_params; 241 } cfg; 242 }; 243 244 struct csiphy_cfg_data { 245 enum csiphy_cfg_type_t cfgtype; 246 union { 247 struct msm_camera_csiphy_params *csiphy_params; 248 struct msm_camera_csi_lane_params *csi_lane_params; 249 } cfg; 250 }; 251 252 enum eeprom_cfg_type_t { 253 CFG_EEPROM_GET_INFO, 254 CFG_EEPROM_GET_CAL_DATA, 255 CFG_EEPROM_READ_CAL_DATA, 256 CFG_EEPROM_WRITE_DATA, 257 CFG_EEPROM_GET_MM_INFO, 258 }; 259 260 struct eeprom_get_t { 261 uint32_t num_bytes; 262 }; 263 264 struct eeprom_read_t { 265 uint8_t *dbuffer; 266 uint32_t num_bytes; 267 }; 268 269 struct eeprom_write_t { 270 uint8_t *dbuffer; 271 uint32_t num_bytes; 272 }; 273 274 struct eeprom_get_cmm_t { 275 uint32_t cmm_support; 276 uint32_t cmm_compression; 277 uint32_t cmm_size; 278 }; 279 280 struct msm_eeprom_cfg_data { 281 enum eeprom_cfg_type_t cfgtype; 282 uint8_t is_supported; 283 union { 284 char eeprom_name[MAX_SENSOR_NAME]; 285 struct eeprom_get_t get_data; 286 struct eeprom_read_t read_data; 287 struct eeprom_write_t write_data; 288 struct eeprom_get_cmm_t get_cmm_data; 289 } cfg; 290 }; 291 292 #ifdef CONFIG_COMPAT 293 struct msm_sensor_power_setting32 { 294 enum msm_sensor_power_seq_type_t seq_type; 295 uint16_t seq_val; 296 compat_uint_t config_val; 297 uint16_t delay; 298 compat_uptr_t data[10]; 299 }; 300 301 struct msm_sensor_power_setting_array32 { 302 struct msm_sensor_power_setting32 power_setting_a[MAX_POWER_CONFIG]; 303 compat_uptr_t power_setting; 304 uint16_t size; 305 struct msm_sensor_power_setting32 306 power_down_setting_a[MAX_POWER_CONFIG]; 307 compat_uptr_t power_down_setting; 308 uint16_t size_down; 309 }; 310 311 struct msm_camera_sensor_slave_info32 { 312 char sensor_name[32]; 313 char eeprom_name[32]; 314 char actuator_name[32]; 315 char ois_name[32]; 316 char flash_name[32]; 317 enum msm_sensor_camera_id_t camera_id; 318 uint16_t slave_addr; 319 enum i2c_freq_mode_t i2c_freq_mode; 320 enum msm_camera_i2c_reg_addr_type addr_type; 321 struct msm_sensor_id_info_t sensor_id_info; 322 struct msm_sensor_power_setting_array32 power_setting_array; 323 uint8_t is_init_params_valid; 324 struct msm_sensor_init_params sensor_init_params; 325 uint8_t is_flash_supported; 326 }; 327 328 struct msm_camera_csid_lut_params32 { 329 uint8_t num_cid; 330 struct msm_camera_csid_vc_cfg vc_cfg_a[MAX_CID]; 331 compat_uptr_t vc_cfg[MAX_CID]; 332 }; 333 334 struct msm_camera_csid_params32 { 335 uint8_t lane_cnt; 336 uint16_t lane_assign; 337 uint8_t phy_sel; 338 uint32_t csi_clk; 339 struct msm_camera_csid_lut_params32 lut_params; 340 }; 341 342 struct msm_camera_csi2_params32 { 343 struct msm_camera_csid_params32 csid_params; 344 struct msm_camera_csiphy_params csiphy_params; 345 uint8_t csi_clk_scale_enable; 346 }; 347 348 struct csid_cfg_data32 { 349 enum csid_cfg_type_t cfgtype; 350 union { 351 uint32_t csid_version; 352 compat_uptr_t csid_params; 353 } cfg; 354 }; 355 356 struct eeprom_read_t32 { 357 compat_uptr_t dbuffer; 358 uint32_t num_bytes; 359 }; 360 361 struct eeprom_write_t32 { 362 compat_uptr_t dbuffer; 363 uint32_t num_bytes; 364 }; 365 366 struct msm_eeprom_cfg_data32 { 367 enum eeprom_cfg_type_t cfgtype; 368 uint8_t is_supported; 369 union { 370 char eeprom_name[MAX_SENSOR_NAME]; 371 struct eeprom_get_t get_data; 372 struct eeprom_read_t32 read_data; 373 struct eeprom_write_t32 write_data; 374 } cfg; 375 }; 376 377 struct msm_camera_i2c_seq_reg_setting32 { 378 compat_uptr_t reg_setting; 379 uint16_t size; 380 enum msm_camera_i2c_reg_addr_type addr_type; 381 uint16_t delay; 382 }; 383 #endif 384 385 enum msm_sensor_cfg_type_t { 386 CFG_SET_SLAVE_INFO, 387 CFG_SLAVE_READ_I2C, 388 CFG_WRITE_I2C_ARRAY, 389 CFG_SLAVE_WRITE_I2C_ARRAY, 390 CFG_WRITE_I2C_SEQ_ARRAY, 391 CFG_POWER_UP, 392 CFG_POWER_DOWN, 393 CFG_SET_STOP_STREAM_SETTING, 394 CFG_GET_SENSOR_INFO, 395 CFG_GET_SENSOR_INIT_PARAMS, 396 CFG_SET_INIT_SETTING, 397 CFG_SET_RESOLUTION, 398 CFG_SET_STOP_STREAM, 399 CFG_SET_START_STREAM, 400 CFG_SET_SATURATION, 401 CFG_SET_CONTRAST, 402 CFG_SET_SHARPNESS, 403 CFG_SET_ISO, 404 CFG_SET_EXPOSURE_COMPENSATION, 405 CFG_SET_ANTIBANDING, 406 CFG_SET_BESTSHOT_MODE, 407 CFG_SET_EFFECT, 408 CFG_SET_WHITE_BALANCE, 409 CFG_SET_AUTOFOCUS, 410 CFG_CANCEL_AUTOFOCUS, 411 CFG_SET_STREAM_TYPE, 412 }; 413 414 enum msm_actuator_cfg_type_t { 415 CFG_GET_ACTUATOR_INFO, 416 CFG_SET_ACTUATOR_INFO, 417 CFG_SET_DEFAULT_FOCUS, 418 CFG_MOVE_FOCUS, 419 CFG_SET_POSITION, 420 CFG_ACTUATOR_POWERDOWN, 421 CFG_ACTUATOR_POWERUP, 422 CFG_ACTUATOR_INIT, 423 }; 424 425 enum msm_ois_cfg_type_t { 426 CFG_OIS_INIT, 427 CFG_OIS_POWERDOWN, 428 CFG_OIS_POWERUP, 429 CFG_OIS_CONTROL, 430 CFG_OIS_I2C_WRITE_SEQ_TABLE, 431 }; 432 433 enum msm_ois_i2c_operation { 434 MSM_OIS_WRITE = 0, 435 MSM_OIS_POLL, 436 }; 437 438 struct reg_settings_ois_t { 439 uint16_t reg_addr; 440 enum msm_camera_i2c_reg_addr_type addr_type; 441 uint32_t reg_data; 442 enum msm_camera_i2c_data_type data_type; 443 enum msm_ois_i2c_operation i2c_operation; 444 uint32_t delay; 445 }; 446 447 struct msm_ois_params_t { 448 uint16_t data_size; 449 uint16_t setting_size; 450 uint32_t i2c_addr; 451 enum msm_camera_i2c_reg_addr_type i2c_addr_type; 452 enum msm_camera_i2c_data_type i2c_data_type; 453 struct reg_settings_ois_t *settings; 454 }; 455 456 struct msm_ois_set_info_t { 457 struct msm_ois_params_t ois_params; 458 }; 459 460 struct msm_actuator_move_params_t { 461 int8_t dir; 462 int8_t sign_dir; 463 int16_t dest_step_pos; 464 int32_t num_steps; 465 uint16_t curr_lens_pos; 466 struct damping_params_t *ringing_params; 467 }; 468 469 struct msm_actuator_tuning_params_t { 470 int16_t initial_code; 471 uint16_t pwd_step; 472 uint16_t region_size; 473 uint32_t total_steps; 474 struct region_params_t *region_params; 475 }; 476 477 struct park_lens_data_t { 478 uint32_t damping_step; 479 uint32_t damping_delay; 480 uint32_t hw_params; 481 uint32_t max_step; 482 }; 483 484 struct msm_actuator_params_t { 485 enum actuator_type act_type; 486 uint8_t reg_tbl_size; 487 uint16_t data_size; 488 uint16_t init_setting_size; 489 uint32_t i2c_addr; 490 enum msm_actuator_addr_type i2c_addr_type; 491 enum msm_actuator_data_type i2c_data_type; 492 struct msm_actuator_reg_params_t *reg_tbl_params; 493 struct reg_settings_t *init_settings; 494 struct park_lens_data_t park_lens; 495 }; 496 497 struct msm_actuator_set_info_t { 498 struct msm_actuator_params_t actuator_params; 499 struct msm_actuator_tuning_params_t af_tuning_params; 500 }; 501 502 struct msm_actuator_get_info_t { 503 uint32_t focal_length_num; 504 uint32_t focal_length_den; 505 uint32_t f_number_num; 506 uint32_t f_number_den; 507 uint32_t f_pix_num; 508 uint32_t f_pix_den; 509 uint32_t total_f_dist_num; 510 uint32_t total_f_dist_den; 511 uint32_t hor_view_angle_num; 512 uint32_t hor_view_angle_den; 513 uint32_t ver_view_angle_num; 514 uint32_t ver_view_angle_den; 515 }; 516 517 enum af_camera_name { 518 ACTUATOR_MAIN_CAM_0, 519 ACTUATOR_MAIN_CAM_1, 520 ACTUATOR_MAIN_CAM_2, 521 ACTUATOR_MAIN_CAM_3, 522 ACTUATOR_MAIN_CAM_4, 523 ACTUATOR_MAIN_CAM_5, 524 ACTUATOR_WEB_CAM_0, 525 ACTUATOR_WEB_CAM_1, 526 ACTUATOR_WEB_CAM_2, 527 }; 528 529 struct msm_ois_cfg_data { 530 int cfgtype; 531 union { 532 struct msm_ois_set_info_t set_info; 533 struct msm_camera_i2c_seq_reg_setting *settings; 534 } cfg; 535 }; 536 537 struct msm_actuator_set_position_t { 538 uint16_t number_of_steps; 539 uint32_t hw_params; 540 uint16_t pos[MAX_NUMBER_OF_STEPS]; 541 uint16_t delay[MAX_NUMBER_OF_STEPS]; 542 }; 543 544 struct msm_actuator_cfg_data { 545 int cfgtype; 546 uint8_t is_af_supported; 547 union { 548 struct msm_actuator_move_params_t move; 549 struct msm_actuator_set_info_t set_info; 550 struct msm_actuator_get_info_t get_info; 551 struct msm_actuator_set_position_t setpos; 552 enum af_camera_name cam_name; 553 } cfg; 554 }; 555 556 enum msm_camera_led_config_t { 557 MSM_CAMERA_LED_OFF, 558 MSM_CAMERA_LED_LOW, 559 MSM_CAMERA_LED_HIGH, 560 MSM_CAMERA_LED_INIT, 561 MSM_CAMERA_LED_RELEASE, 562 }; 563 564 struct msm_camera_led_cfg_t { 565 enum msm_camera_led_config_t cfgtype; 566 int32_t torch_current[MAX_LED_TRIGGERS]; 567 int32_t flash_current[MAX_LED_TRIGGERS]; 568 int32_t flash_duration[MAX_LED_TRIGGERS]; 569 }; 570 571 struct msm_flash_init_info_t { 572 enum msm_flash_driver_type flash_driver_type; 573 uint32_t slave_addr; 574 struct msm_sensor_power_setting_array *power_setting_array; 575 struct msm_camera_i2c_reg_setting_array *settings; 576 }; 577 578 struct msm_flash_cfg_data_t { 579 enum msm_flash_cfg_type_t cfg_type; 580 int32_t flash_current[MAX_LED_TRIGGERS]; 581 int32_t flash_duration[MAX_LED_TRIGGERS]; 582 union { 583 struct msm_flash_init_info_t *flash_init_info; 584 struct msm_camera_i2c_reg_setting_array *settings; 585 } cfg; 586 }; 587 588 /* sensor init structures and enums */ 589 enum msm_sensor_init_cfg_type_t { 590 CFG_SINIT_PROBE, 591 CFG_SINIT_PROBE_DONE, 592 CFG_SINIT_PROBE_WAIT_DONE, 593 }; 594 595 struct sensor_init_cfg_data { 596 enum msm_sensor_init_cfg_type_t cfgtype; 597 struct msm_sensor_info_t probed_info; 598 char entity_name[MAX_SENSOR_NAME]; 599 union { 600 void *setting; 601 } cfg; 602 }; 603 604 #define VIDIOC_MSM_SENSOR_CFG \ 605 _IOWR('V', BASE_VIDIOC_PRIVATE + 1, struct sensorb_cfg_data) 606 607 #define VIDIOC_MSM_SENSOR_RELEASE \ 608 _IO('V', BASE_VIDIOC_PRIVATE + 2) 609 610 #define VIDIOC_MSM_SENSOR_GET_SUBDEV_ID \ 611 _IOWR('V', BASE_VIDIOC_PRIVATE + 3, uint32_t) 612 613 #define VIDIOC_MSM_CSIPHY_IO_CFG \ 614 _IOWR('V', BASE_VIDIOC_PRIVATE + 4, struct csiphy_cfg_data) 615 616 #define VIDIOC_MSM_CSID_IO_CFG \ 617 _IOWR('V', BASE_VIDIOC_PRIVATE + 5, struct csid_cfg_data) 618 619 #define VIDIOC_MSM_ACTUATOR_CFG \ 620 _IOWR('V', BASE_VIDIOC_PRIVATE + 6, struct msm_actuator_cfg_data) 621 622 #define VIDIOC_MSM_FLASH_LED_DATA_CFG \ 623 _IOWR('V', BASE_VIDIOC_PRIVATE + 7, struct msm_camera_led_cfg_t) 624 625 #define VIDIOC_MSM_EEPROM_CFG \ 626 _IOWR('V', BASE_VIDIOC_PRIVATE + 8, struct msm_eeprom_cfg_data) 627 628 #define VIDIOC_MSM_SENSOR_GET_AF_STATUS \ 629 _IOWR('V', BASE_VIDIOC_PRIVATE + 9, uint32_t) 630 631 #define VIDIOC_MSM_SENSOR_INIT_CFG \ 632 _IOWR('V', BASE_VIDIOC_PRIVATE + 10, struct sensor_init_cfg_data) 633 634 #define VIDIOC_MSM_OIS_CFG \ 635 _IOWR('V', BASE_VIDIOC_PRIVATE + 11, struct msm_ois_cfg_data) 636 637 #define VIDIOC_MSM_FLASH_CFG \ 638 _IOWR('V', BASE_VIDIOC_PRIVATE + 13, struct msm_flash_cfg_data_t) 639 640 #ifdef CONFIG_COMPAT 641 struct msm_camera_i2c_reg_setting32 { 642 compat_uptr_t reg_setting; 643 uint16_t size; 644 enum msm_camera_i2c_reg_addr_type addr_type; 645 enum msm_camera_i2c_data_type data_type; 646 uint16_t delay; 647 }; 648 649 struct msm_actuator_tuning_params_t32 { 650 int16_t initial_code; 651 uint16_t pwd_step; 652 uint16_t region_size; 653 uint32_t total_steps; 654 compat_uptr_t region_params; 655 }; 656 657 struct msm_actuator_params_t32 { 658 enum actuator_type act_type; 659 uint8_t reg_tbl_size; 660 uint16_t data_size; 661 uint16_t init_setting_size; 662 uint32_t i2c_addr; 663 enum msm_actuator_addr_type i2c_addr_type; 664 enum msm_actuator_data_type i2c_data_type; 665 compat_uptr_t reg_tbl_params; 666 compat_uptr_t init_settings; 667 struct park_lens_data_t park_lens; 668 }; 669 670 struct msm_actuator_set_info_t32 { 671 struct msm_actuator_params_t32 actuator_params; 672 struct msm_actuator_tuning_params_t32 af_tuning_params; 673 }; 674 675 struct sensor_init_cfg_data32 { 676 enum msm_sensor_init_cfg_type_t cfgtype; 677 struct msm_sensor_info_t probed_info; 678 char entity_name[MAX_SENSOR_NAME]; 679 union { 680 compat_uptr_t setting; 681 } cfg; 682 }; 683 684 struct msm_actuator_move_params_t32 { 685 int8_t dir; 686 int8_t sign_dir; 687 int16_t dest_step_pos; 688 int32_t num_steps; 689 uint16_t curr_lens_pos; 690 compat_uptr_t ringing_params; 691 }; 692 693 struct msm_actuator_cfg_data32 { 694 int cfgtype; 695 uint8_t is_af_supported; 696 union { 697 struct msm_actuator_move_params_t32 move; 698 struct msm_actuator_set_info_t32 set_info; 699 struct msm_actuator_get_info_t get_info; 700 struct msm_actuator_set_position_t setpos; 701 enum af_camera_name cam_name; 702 } cfg; 703 }; 704 705 struct csiphy_cfg_data32 { 706 enum csiphy_cfg_type_t cfgtype; 707 union { 708 compat_uptr_t csiphy_params; 709 compat_uptr_t csi_lane_params; 710 } cfg; 711 }; 712 713 struct sensorb_cfg_data32 { 714 int cfgtype; 715 union { 716 struct msm_sensor_info_t sensor_info; 717 struct msm_sensor_init_params sensor_init_params; 718 compat_uptr_t setting; 719 } cfg; 720 }; 721 722 struct msm_ois_params_t32 { 723 uint16_t data_size; 724 uint16_t setting_size; 725 uint32_t i2c_addr; 726 enum msm_camera_i2c_reg_addr_type i2c_addr_type; 727 enum msm_camera_i2c_data_type i2c_data_type; 728 compat_uptr_t settings; 729 }; 730 731 struct msm_ois_set_info_t32 { 732 struct msm_ois_params_t32 ois_params; 733 }; 734 735 struct msm_ois_cfg_data32 { 736 int cfgtype; 737 union { 738 struct msm_ois_set_info_t32 set_info; 739 compat_uptr_t settings; 740 } cfg; 741 }; 742 743 struct msm_flash_init_info_t32 { 744 enum msm_flash_driver_type flash_driver_type; 745 uint32_t slave_addr; 746 compat_uptr_t power_setting_array; 747 compat_uptr_t settings; 748 }; 749 750 struct msm_flash_cfg_data_t32 { 751 enum msm_flash_cfg_type_t cfg_type; 752 int32_t flash_current[MAX_LED_TRIGGERS]; 753 int32_t flash_duration[MAX_LED_TRIGGERS]; 754 union { 755 compat_uptr_t flash_init_info; 756 compat_uptr_t settings; 757 } cfg; 758 }; 759 760 #define VIDIOC_MSM_ACTUATOR_CFG32 \ 761 _IOWR('V', BASE_VIDIOC_PRIVATE + 6, struct msm_actuator_cfg_data32) 762 763 #define VIDIOC_MSM_SENSOR_INIT_CFG32 \ 764 _IOWR('V', BASE_VIDIOC_PRIVATE + 10, struct sensor_init_cfg_data32) 765 766 #define VIDIOC_MSM_CSIPHY_IO_CFG32 \ 767 _IOWR('V', BASE_VIDIOC_PRIVATE + 4, struct csiphy_cfg_data32) 768 769 #define VIDIOC_MSM_SENSOR_CFG32 \ 770 _IOWR('V', BASE_VIDIOC_PRIVATE + 1, struct sensorb_cfg_data32) 771 772 #define VIDIOC_MSM_EEPROM_CFG32 \ 773 _IOWR('V', BASE_VIDIOC_PRIVATE + 8, struct msm_eeprom_cfg_data32) 774 775 #define VIDIOC_MSM_OIS_CFG32 \ 776 _IOWR('V', BASE_VIDIOC_PRIVATE + 11, struct msm_ois_cfg_data32) 777 778 #define VIDIOC_MSM_CSID_IO_CFG32 \ 779 _IOWR('V', BASE_VIDIOC_PRIVATE + 5, struct csid_cfg_data32) 780 781 #define VIDIOC_MSM_FLASH_CFG32 \ 782 _IOWR('V', BASE_VIDIOC_PRIVATE + 13, struct msm_flash_cfg_data_t32) 783 #endif 784 785 #endif /* __LINUX_MSM_CAM_SENSOR_H */ 786