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 51enum flash_type { 52 LED_FLASH = 1, 53 STROBE_FLASH, 54 GPIO_FLASH 55}; 56 57enum 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 69enum 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 76enum 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 91enum { 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 107enum { 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 121enum { 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 147enum csid_cfg_type_t { 148 CSID_INIT, 149 CSID_CFG, 150 CSID_RELEASE, 151}; 152 153enum csiphy_cfg_type_t { 154 CSIPHY_INIT, 155 CSIPHY_CFG, 156 CSIPHY_RELEASE, 157}; 158 159enum camera_vreg_type { 160 VREG_TYPE_DEFAULT, 161 VREG_TYPE_CUSTOM, 162}; 163 164enum sensor_af_t { 165 SENSOR_AF_FOCUSSED, 166 SENSOR_AF_NOT_FOCUSSED, 167}; 168 169enum cci_i2c_master_t { 170 MASTER_0, 171 MASTER_1, 172 MASTER_MAX, 173}; 174 175struct msm_camera_i2c_array_write_config { 176 struct msm_camera_i2c_reg_setting conf_array; 177 uint16_t slave_addr; 178}; 179 180struct 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 187struct 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 193struct msm_camera_csi_lane_params { 194 uint16_t csi_lane_assign; 195 uint16_t csi_lane_mask; 196}; 197 198struct 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 206struct 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 217struct 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 227struct 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 236struct 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 244struct 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 252enum 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 260struct eeprom_get_t { 261 uint32_t num_bytes; 262}; 263 264struct eeprom_read_t { 265 uint8_t *dbuffer; 266 uint32_t num_bytes; 267}; 268 269struct eeprom_write_t { 270 uint8_t *dbuffer; 271 uint32_t num_bytes; 272}; 273 274struct eeprom_get_cmm_t { 275 uint32_t cmm_support; 276 uint32_t cmm_compression; 277 uint32_t cmm_size; 278}; 279 280struct 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 293struct 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 301struct 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 311struct 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 328struct 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 334struct 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 342struct 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 348struct 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 356struct eeprom_read_t32 { 357 compat_uptr_t dbuffer; 358 uint32_t num_bytes; 359}; 360 361struct eeprom_write_t32 { 362 compat_uptr_t dbuffer; 363 uint32_t num_bytes; 364}; 365 366struct 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 377struct 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 385enum 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 414enum 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 425enum 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 433enum msm_ois_i2c_operation { 434 MSM_OIS_WRITE = 0, 435 MSM_OIS_POLL, 436}; 437 438struct 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 447struct 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 456struct msm_ois_set_info_t { 457 struct msm_ois_params_t ois_params; 458}; 459 460struct 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 469struct 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 477struct 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 484struct 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 497struct 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 502struct 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 517enum 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 529struct 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 537struct 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 544struct 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 556enum 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 564struct 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 571struct 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 578struct 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 */ 589enum msm_sensor_init_cfg_type_t { 590 CFG_SINIT_PROBE, 591 CFG_SINIT_PROBE_DONE, 592 CFG_SINIT_PROBE_WAIT_DONE, 593}; 594 595struct 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 641struct 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 649struct 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 657struct 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 670struct 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 675struct 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 684struct 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 693struct 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 705struct 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 713struct 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 722struct 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 731struct msm_ois_set_info_t32 { 732 struct msm_ois_params_t32 ois_params; 733}; 734 735struct 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 743struct 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 750struct 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