13c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#ifndef __LINUX_MSM_CAM_SENSOR_H 23c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define __LINUX_MSM_CAM_SENSOR_H 33c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 43c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#ifdef MSM_CAMERA_BIONIC 53c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#include <sys/types.h> 63c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#endif 73c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#include <linux/types.h> 83c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#include <linux/v4l2-mediabus.h> 93c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#include <linux/i2c.h> 103c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 113c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define I2C_SEQ_REG_SETTING_MAX 5 12108b6a5ff4a0211169a47e44ad156b57b7c73b67Shuzhen Wang#define I2C_SEQ_REG_DATA_MAX 256 133c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MAX_CID 16 143c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 153c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_SENSOR_MCLK_8HZ 8000000 163c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_SENSOR_MCLK_16HZ 16000000 173c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_SENSOR_MCLK_24HZ 24000000 183c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 193c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define GPIO_OUT_LOW (0 << 1) 203c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define GPIO_OUT_HIGH (1 << 1) 213c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 223c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define CSI_EMBED_DATA 0x12 233c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define CSI_RESERVED_DATA_0 0x13 243c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define CSI_YUV422_8 0x1E 253c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define CSI_RAW8 0x2A 263c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define CSI_RAW10 0x2B 273c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define CSI_RAW12 0x2C 283c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 293c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define CSI_DECODE_6BIT 0 303c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define CSI_DECODE_8BIT 1 313c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define CSI_DECODE_10BIT 2 323c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define CSI_DECODE_DPCM_10_8_10 5 333c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 343c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MAX_SENSOR_NAME 32 353c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 363c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MAX_ACT_MOD_NAME_SIZE 32 373c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MAX_ACT_NAME_SIZE 32 383c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define NUM_ACTUATOR_DIR 2 393c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MAX_ACTUATOR_SCENARIO 8 403c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MAX_ACTUATOR_REGION 5 413c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MAX_ACTUATOR_INIT_SET 12 423c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MAX_ACTUATOR_REG_TBL_SIZE 8 433c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MAX_ACTUATOR_AF_TOTAL_STEPS 1024 443c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 45f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab#define MAX_OIS_MOD_NAME_SIZE 32 46f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab#define MAX_OIS_NAME_SIZE 32 47f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab#define MAX_OIS_REG_SETTINGS 800 48f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab 493c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MOVE_NEAR 0 503c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MOVE_FAR 1 513c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 523c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_ACTUATOR_MOVE_SIGNED_FAR -1 533c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_ACTUATOR_MOVE_SIGNED_NEAR 1 543c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 553c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MAX_EEPROM_NAME 32 563c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 573c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MAX_AF_ITERATIONS 3 583c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MAX_NUMBER_OF_STEPS 47 593c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 603c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MAX_LED_TRIGGERS 3 61108b6a5ff4a0211169a47e44ad156b57b7c73b67Shuzhen Wang#define MAX_POWER_CONFIG 12 623c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 633c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangenum sensor_stats_type { 643c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang YRGB, 653c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang YYYY, 663c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang}; 673c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 683c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangenum flash_type { 693c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang LED_FLASH = 1, 703c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang STROBE_FLASH, 713c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang GPIO_FLASH 723c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang}; 733c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 743c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangenum msm_camera_i2c_reg_addr_type { 753c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MSM_CAMERA_I2C_BYTE_ADDR = 1, 763c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MSM_CAMERA_I2C_WORD_ADDR, 773c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MSM_CAMERA_I2C_3B_ADDR, 783c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MSM_CAMERA_I2C_ADDR_TYPE_MAX, 793c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang}; 803c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 813c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangenum msm_camera_i2c_data_type { 823c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MSM_CAMERA_I2C_BYTE_DATA = 1, 833c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MSM_CAMERA_I2C_WORD_DATA, 84f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab MSM_CAMERA_I2C_DWORD_DATA, 853c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MSM_CAMERA_I2C_SET_BYTE_MASK, 863c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MSM_CAMERA_I2C_UNSET_BYTE_MASK, 873c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MSM_CAMERA_I2C_SET_WORD_MASK, 883c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MSM_CAMERA_I2C_UNSET_WORD_MASK, 893c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MSM_CAMERA_I2C_SET_BYTE_WRITE_MASK_DATA, 903c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MSM_CAMERA_I2C_DATA_TYPE_MAX, 913c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang}; 923c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 933c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangenum msm_sensor_power_seq_type_t { 943c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang SENSOR_CLK, 953c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang SENSOR_GPIO, 963c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang SENSOR_VREG, 973c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang SENSOR_I2C_MUX, 983c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang}; 993c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 1003c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangenum msm_sensor_clk_type_t { 1013c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang SENSOR_CAM_MCLK, 1023c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang SENSOR_CAM_CLK, 1033c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang SENSOR_CAM_CLK_MAX, 1043c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang}; 1053c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 1063c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangenum msm_sensor_power_seq_gpio_t { 1073c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang SENSOR_GPIO_RESET, 1083c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang SENSOR_GPIO_STANDBY, 1093c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang SENSOR_GPIO_AF_PWDM, 1103c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang SENSOR_GPIO_VIO, 1113c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang SENSOR_GPIO_VANA, 1123c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang SENSOR_GPIO_VDIG, 1133c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang SENSOR_GPIO_VAF, 1143c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang SENSOR_GPIO_FL_EN, 1153c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang SENSOR_GPIO_FL_NOW, 1163c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang SENSOR_GPIO_TOR_EN, 1173c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang SENSOR_GPIO_MAX, 1183c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang}; 1193c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 1203c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangenum msm_camera_vreg_name_t { 1213c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang CAM_VDIG, 1223c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang CAM_VIO, 1233c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang CAM_VANA, 1243c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang CAM_VAF, 1253c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang CAM_VREG_MAX, 1263c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang}; 1273c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 1283c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangenum msm_sensor_resolution_t { 1293c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MSM_SENSOR_RES_FULL, 1303c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MSM_SENSOR_RES_QTR, 1313c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MSM_SENSOR_RES_2, 1323c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MSM_SENSOR_RES_3, 1333c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MSM_SENSOR_RES_4, 1343c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MSM_SENSOR_RES_5, 1353c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MSM_SENSOR_RES_6, 1363c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MSM_SENSOR_RES_7, 1373c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MSM_SENSOR_INVALID_RES, 1383c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang}; 1393c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 1403c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangenum msm_camera_stream_type_t { 1413c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MSM_CAMERA_STREAM_PREVIEW, 1423c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MSM_CAMERA_STREAM_SNAPSHOT, 1433c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MSM_CAMERA_STREAM_VIDEO, 1443c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MSM_CAMERA_STREAM_INVALID, 1453c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang}; 1463c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 1473c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangenum sensor_sub_module_t { 1483c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang SUB_MODULE_SENSOR, 1493c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang SUB_MODULE_CHROMATIX, 1503c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang SUB_MODULE_ACTUATOR, 1513c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang SUB_MODULE_EEPROM, 1523c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang SUB_MODULE_LED_FLASH, 1533c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang SUB_MODULE_STROBE_FLASH, 1543c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang SUB_MODULE_CSID, 1553c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang SUB_MODULE_CSID_3D, 1563c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang SUB_MODULE_CSIPHY, 1573c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang SUB_MODULE_CSIPHY_3D, 158f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab SUB_MODULE_OIS, 1593c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang SUB_MODULE_MAX, 1603c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang}; 1613c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 1623c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 1633c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangstruct otp_info_t { 1643c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint8_t enable; 1653c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 1663c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint16_t page_size; 1673c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint16_t num_of_pages; 1683c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint16_t page_reg_addr; 1693c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint16_t page_reg_base_addr; 1703c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 1713c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint16_t ctrl_reg_addr; 1723c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint16_t ctrl_reg_read_mode; 1733c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 1743c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint16_t status_reg_addr; 1753c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint16_t status_reg_read_complete_bit; 1763c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 1773c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint16_t reset_reg_addr; 1783c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint16_t reset_reg_stream_on; 1793c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint16_t reset_reg_stream_off; 1803c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 1813c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint16_t data_seg_addr; 1823c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 1833c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang enum msm_camera_i2c_data_type data_size; 1843c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 1853c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint8_t big_endian; 1863c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 1873c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint8_t poll_times; 1883c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint16_t poll_usleep; 1893c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 1903c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang /* Initialized by the sensor driver */ 1913c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint8_t *otp_info; 1923c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint8_t otp_read; 1933c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang}; 1943c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 1953c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangenum { 1963c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MSM_CAMERA_EFFECT_MODE_OFF, 1973c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MSM_CAMERA_EFFECT_MODE_MONO, 1983c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MSM_CAMERA_EFFECT_MODE_NEGATIVE, 1993c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MSM_CAMERA_EFFECT_MODE_SOLARIZE, 2003c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MSM_CAMERA_EFFECT_MODE_SEPIA, 2013c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MSM_CAMERA_EFFECT_MODE_POSTERIZE, 2023c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MSM_CAMERA_EFFECT_MODE_WHITEBOARD, 2033c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MSM_CAMERA_EFFECT_MODE_BLACKBOARD, 2043c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MSM_CAMERA_EFFECT_MODE_AQUA, 2053c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MSM_CAMERA_EFFECT_MODE_EMBOSS, 2063c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MSM_CAMERA_EFFECT_MODE_SKETCH, 2073c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MSM_CAMERA_EFFECT_MODE_NEON, 2083c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MSM_CAMERA_EFFECT_MODE_MAX 2093c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang}; 2103c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 2113c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangenum { 2123c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MSM_CAMERA_WB_MODE_AUTO, 2133c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MSM_CAMERA_WB_MODE_CUSTOM, 2143c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MSM_CAMERA_WB_MODE_INCANDESCENT, 2153c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MSM_CAMERA_WB_MODE_FLUORESCENT, 2163c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MSM_CAMERA_WB_MODE_WARM_FLUORESCENT, 2173c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MSM_CAMERA_WB_MODE_DAYLIGHT, 2183c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MSM_CAMERA_WB_MODE_CLOUDY_DAYLIGHT, 2193c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MSM_CAMERA_WB_MODE_TWILIGHT, 2203c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MSM_CAMERA_WB_MODE_SHADE, 2213c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MSM_CAMERA_WB_MODE_OFF, 2223c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MSM_CAMERA_WB_MODE_MAX 2233c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang}; 2243c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 2253c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangenum { 2263c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MSM_CAMERA_SCENE_MODE_OFF, 2273c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MSM_CAMERA_SCENE_MODE_AUTO, 2283c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MSM_CAMERA_SCENE_MODE_LANDSCAPE, 2293c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MSM_CAMERA_SCENE_MODE_SNOW, 2303c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MSM_CAMERA_SCENE_MODE_BEACH, 2313c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MSM_CAMERA_SCENE_MODE_SUNSET, 2323c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MSM_CAMERA_SCENE_MODE_NIGHT, 2333c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MSM_CAMERA_SCENE_MODE_PORTRAIT, 2343c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MSM_CAMERA_SCENE_MODE_BACKLIGHT, 2353c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MSM_CAMERA_SCENE_MODE_SPORTS, 2363c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MSM_CAMERA_SCENE_MODE_ANTISHAKE, 2373c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MSM_CAMERA_SCENE_MODE_FLOWERS, 2383c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MSM_CAMERA_SCENE_MODE_CANDLELIGHT, 2393c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MSM_CAMERA_SCENE_MODE_FIREWORKS, 2403c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MSM_CAMERA_SCENE_MODE_PARTY, 2413c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MSM_CAMERA_SCENE_MODE_NIGHT_PORTRAIT, 2423c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MSM_CAMERA_SCENE_MODE_THEATRE, 2433c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MSM_CAMERA_SCENE_MODE_ACTION, 2443c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MSM_CAMERA_SCENE_MODE_AR, 2453c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MSM_CAMERA_SCENE_MODE_FACE_PRIORITY, 2463c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MSM_CAMERA_SCENE_MODE_BARCODE, 2473c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MSM_CAMERA_SCENE_MODE_HDR, 2483c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MSM_CAMERA_SCENE_MODE_MAX 2493c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang}; 2503c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 2513c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangenum csid_cfg_type_t { 2523c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang CSID_INIT, 2533c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang CSID_CFG, 2543c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang CSID_RELEASE, 2553c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang}; 2563c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 2573c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangenum csiphy_cfg_type_t { 2583c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang CSIPHY_INIT, 2593c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang CSIPHY_CFG, 2603c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang CSIPHY_RELEASE, 2613c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang}; 2623c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 2633c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangenum camera_vreg_type { 2643c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang REG_LDO, 2653c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang REG_VS, 2663c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang REG_GPIO, 2673c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang}; 2683c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 2693c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangenum sensor_af_t { 2703c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang SENSOR_AF_FOCUSSED, 2713c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang SENSOR_AF_NOT_FOCUSSED, 2723c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang}; 2733c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 2743c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangstruct msm_sensor_power_setting { 2753c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang enum msm_sensor_power_seq_type_t seq_type; 2763c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint16_t seq_val; 2773c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang long config_val; 2783c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint16_t delay; 2793c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang void *data[10]; 2803c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang}; 2813c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 2823c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangstruct msm_sensor_power_setting_array { 2833c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang struct msm_sensor_power_setting *power_setting; 2843c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint16_t size; 2853c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang struct msm_sensor_power_setting *power_down_setting; 2863c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint16_t size_down; 2873c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang}; 2883c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 2893c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangstruct msm_sensor_id_info_t { 2903c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint16_t sensor_id_reg_addr; 2913c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint16_t sensor_id; 2923c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang}; 2933c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 2943c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangenum msm_sensor_camera_id_t { 2953c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang CAMERA_0, 2963c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang CAMERA_1, 2973c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang CAMERA_2, 2983c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang CAMERA_3, 2993c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MAX_CAMERAS, 3003c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang}; 3013c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 3023c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangenum cci_i2c_master_t { 3033c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MASTER_0, 3043c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MASTER_1, 3053c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MASTER_MAX, 3063c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang}; 3073c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 3083c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangenum i2c_freq_mode_t { 3093c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang I2C_STANDARD_MODE, 3103c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang I2C_FAST_MODE, 3113c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang I2C_CUSTOM_MODE, 3123c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang I2C_MAX_MODES, 3133c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang}; 3143c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 3153c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangstruct msm_camera_i2c_reg_array { 3163c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint16_t reg_addr; 3173c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint16_t reg_data; 3183c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint32_t delay; 3193c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang}; 3203c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 3213c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangstruct msm_camera_i2c_reg_setting { 3223c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang struct msm_camera_i2c_reg_array *reg_setting; 3233c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint16_t size; 3243c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang enum msm_camera_i2c_reg_addr_type addr_type; 3253c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang enum msm_camera_i2c_data_type data_type; 3263c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint16_t delay; 3273c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang}; 3283c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 3293c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangstruct msm_camera_i2c_seq_reg_array { 3303c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint16_t reg_addr; 3313c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint8_t reg_data[I2C_SEQ_REG_DATA_MAX]; 3323c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint16_t reg_data_size; 3333c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang}; 3343c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 3353c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangstruct msm_camera_i2c_seq_reg_setting { 3363c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang struct msm_camera_i2c_seq_reg_array *reg_setting; 3373c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint16_t size; 3383c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang enum msm_camera_i2c_reg_addr_type addr_type; 3393c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint16_t delay; 3403c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang}; 3413c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 3423c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangstruct msm_camera_i2c_array_write_config { 3433c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang struct msm_camera_i2c_reg_setting conf_array; 3443c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint16_t slave_addr; 3453c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang}; 3463c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 3473c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangstruct msm_camera_i2c_read_config { 3483c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint16_t slave_addr; 3493c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint16_t reg_addr; 3503c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang enum msm_camera_i2c_data_type data_type; 3513c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint16_t *data; 3523c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang}; 3533c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 3543c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangstruct msm_camera_csid_vc_cfg { 3553c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint8_t cid; 3563c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint8_t dt; 3573c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint8_t decode_format; 3583c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang}; 3593c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 3603c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangstruct msm_camera_csid_lut_params { 3613c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint8_t num_cid; 3623c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang struct msm_camera_csid_vc_cfg *vc_cfg[MAX_CID]; 3633c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang}; 3643c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 3653c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangstruct msm_camera_csid_params { 3663c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint8_t lane_cnt; 3673c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint16_t lane_assign; 3683c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint8_t phy_sel; 3693c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang struct msm_camera_csid_lut_params lut_params; 3703c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang}; 3713c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 3723c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangstruct msm_camera_csiphy_params { 3733c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint8_t lane_cnt; 3743c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint8_t settle_cnt; 3753c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint16_t lane_mask; 3763c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint8_t combo_mode; 3773c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint8_t csid_core; 3783c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang}; 3793c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 3803c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangstruct msm_camera_csi2_params { 3813c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang struct msm_camera_csid_params csid_params; 3823c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang struct msm_camera_csiphy_params csiphy_params; 3833c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang}; 3843c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 3853c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangstruct msm_camera_csi_lane_params { 3863c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint16_t csi_lane_assign; 3873c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint16_t csi_lane_mask; 3883c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang}; 3893c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 3903c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangstruct csi_lane_params_t { 3913c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint16_t csi_lane_assign; 3923c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint8_t csi_lane_mask; 3933c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint8_t csi_if; 3943c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint8_t csid_core[2]; 3953c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint8_t csi_phy_sel; 3963c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang}; 3973c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 3983c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangenum camb_position_t { 3993c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang BACK_CAMERA_B, 4003c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang FRONT_CAMERA_B, 4013c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang INVALID_CAMERA_B, 4023c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang}; 4033c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 4043c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangstruct msm_sensor_info_t { 4053c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang char sensor_name[MAX_SENSOR_NAME]; 4063c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint32_t session_id; 4073c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang int32_t subdev_id[SUB_MODULE_MAX]; 4083c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint8_t is_mount_angle_valid; 4093c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint32_t sensor_mount_angle; 4103c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang int modes_supported; 4113c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang enum camb_position_t position; 4123c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang}; 4133c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 4143c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangstruct camera_vreg_t { 4153c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang const char *reg_name; 4163c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang int min_voltage; 4173c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang int max_voltage; 4183c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang int op_mode; 4193c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint32_t delay; 4203c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang}; 4213c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 4223c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangenum camerab_mode_t { 4233c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang CAMERA_MODE_2D_B = (1<<0), 4243c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang CAMERA_MODE_3D_B = (1<<1), 4253c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang CAMERA_MODE_INVALID = (1<<2), 4263c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang}; 4273c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 4283c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangstruct msm_sensor_init_params { 4293c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang /* mask of modes supported: 2D, 3D */ 4303c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang int modes_supported; 4313c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang /* sensor position: front, back */ 4323c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang enum camb_position_t position; 4333c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang /* sensor mount angle */ 4343c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint32_t sensor_mount_angle; 4353c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang /* sensor OTP params */ 4363c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang struct otp_info_t sensor_otp; 4373c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang}; 4383c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 4393c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangstruct msm_camera_sensor_slave_info { 4403c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang char sensor_name[32]; 4413c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang char eeprom_name[32]; 4423c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang char actuator_name[32]; 443f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab char ois_name[32]; 4443c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang enum msm_sensor_camera_id_t camera_id; 4453c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint16_t slave_addr; 4463c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang enum i2c_freq_mode_t i2c_freq_mode; 4473c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang enum msm_camera_i2c_reg_addr_type addr_type; 4483c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang struct msm_sensor_id_info_t sensor_id_info; 4493c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang struct msm_sensor_power_setting_array power_setting_array; 4503c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint8_t is_init_params_valid; 4513c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang struct msm_sensor_init_params sensor_init_params; 4523c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint8_t is_flash_supported; 4533c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang}; 4543c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 4553c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangstruct sensorb_cfg_data { 4563c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang int cfgtype; 4573c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang union { 4583c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang struct msm_sensor_info_t sensor_info; 4593c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang struct msm_sensor_init_params sensor_init_params; 4603c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang void *setting; 4613c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang } cfg; 4623c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang}; 4633c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 4643c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangstruct csid_cfg_data { 4653c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang enum csid_cfg_type_t cfgtype; 4663c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang union { 4673c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint32_t csid_version; 4683c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang struct msm_camera_csid_params *csid_params; 4693c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang } cfg; 4703c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang}; 4713c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 4723c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangstruct csiphy_cfg_data { 4733c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang enum csiphy_cfg_type_t cfgtype; 4743c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang union { 4753c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang struct msm_camera_csiphy_params *csiphy_params; 4763c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang struct msm_camera_csi_lane_params *csi_lane_params; 4773c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang } cfg; 4783c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang}; 4793c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 4803c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangenum eeprom_cfg_type_t { 4813c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang CFG_EEPROM_GET_INFO, 4823c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang CFG_EEPROM_GET_CAL_DATA, 4833c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang CFG_EEPROM_READ_CAL_DATA, 4843c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang CFG_EEPROM_WRITE_DATA, 4853c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang CFG_EEPROM_GET_MM_INFO, 4863c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang}; 4873c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 4883c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangstruct eeprom_get_t { 4893c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint32_t num_bytes; 4903c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang}; 4913c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 4923c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangstruct eeprom_read_t { 4933c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint8_t *dbuffer; 4943c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint32_t num_bytes; 4953c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang}; 4963c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 4973c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangstruct eeprom_write_t { 4983c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint8_t *dbuffer; 4993c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint32_t num_bytes; 5003c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang}; 5013c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 5023c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangstruct eeprom_get_cmm_t { 5033c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint32_t cmm_support; 5043c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint32_t cmm_compression; 5053c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint32_t cmm_size; 5063c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang}; 5073c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 5083c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangstruct msm_eeprom_cfg_data { 5093c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang enum eeprom_cfg_type_t cfgtype; 5103c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint8_t is_supported; 5113c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang union { 5123c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang char eeprom_name[MAX_SENSOR_NAME]; 5133c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang struct eeprom_get_t get_data; 5143c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang struct eeprom_read_t read_data; 5153c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang struct eeprom_write_t write_data; 5163c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang struct eeprom_get_cmm_t get_cmm_data; 5173c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang } cfg; 5183c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang}; 5193c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 5203c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangenum msm_sensor_cfg_type_t { 5213c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang CFG_SET_SLAVE_INFO, 5223c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang CFG_SLAVE_READ_I2C, 5233c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang CFG_WRITE_I2C_ARRAY, 5243c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang CFG_SLAVE_WRITE_I2C_ARRAY, 5253c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang CFG_WRITE_I2C_SEQ_ARRAY, 5263c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang CFG_POWER_UP, 5273c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang CFG_POWER_DOWN, 5283c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang CFG_SET_STOP_STREAM_SETTING, 5293c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang CFG_GET_SENSOR_INFO, 5303c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang CFG_GET_MODULE_INFO, 5313c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang CFG_GET_SENSOR_INIT_PARAMS, 5323c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang CFG_SET_INIT_SETTING, 5333c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang CFG_SET_RESOLUTION, 5343c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang CFG_SET_STOP_STREAM, 5353c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang CFG_SET_START_STREAM, 5363c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang CFG_SET_SATURATION, 5373c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang CFG_SET_CONTRAST, 5383c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang CFG_SET_SHARPNESS, 5393c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang CFG_SET_ISO, 5403c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang CFG_SET_EXPOSURE_COMPENSATION, 5413c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang CFG_SET_ANTIBANDING, 5423c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang CFG_SET_BESTSHOT_MODE, 5433c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang CFG_SET_EFFECT, 5443c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang CFG_SET_WHITE_BALANCE, 5453c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang CFG_SET_AUTOFOCUS, 5463c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang CFG_CANCEL_AUTOFOCUS, 5473c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang CFG_SET_STREAM_TYPE, 5483c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang}; 5493c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 5503c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangenum msm_actuator_cfg_type_t { 5513c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang CFG_GET_ACTUATOR_INFO, 5523c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang CFG_SET_ACTUATOR_INFO, 5533c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang CFG_SET_DEFAULT_FOCUS, 5543c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang CFG_SET_POSITION, 5553c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang CFG_MOVE_FOCUS, 5563c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang CFG_ACTUATOR_POWERDOWN, 5573c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang CFG_ACTUATOR_POWERUP, 5583c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang CFG_ACTUATOR_INIT, 5593c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang CFG_DIRECT_I2C_WRITE, /*to support non-trivial actuators*/ 5603c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang}; 5613c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 562f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftabenum msm_ois_cfg_type_t { 563f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab CFG_OIS_INIT, 564f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab CFG_GET_OIS_INFO, 565f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab CFG_OIS_POWERDOWN, 566f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab CFG_OIS_INI_SET, 567f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab CFG_OIS_ENABLE, 568f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab CFG_OIS_DISABLE, 569f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab CFG_OIS_SET_MOVIE_MODE, 570f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab CFG_OIS_SET_STILL_MODE, 571f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab CFG_OIS_SET_CENTERING_ON, 572f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab CFG_OIS_SET_PANTILT_ON, 573f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab CFG_OIS_POWERUP, 574f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab CFG_OIS_I2C_WRITE_SEQ_TABLE, 575f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab}; 576f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab 577f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftabenum msm_ois_i2c_operation { 578f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab MSM_OIS_WRITE = 0, 579f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab MSM_OIS_POLL, 580f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab}; 581f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab 582f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftabstruct reg_settings_ois_t { 583f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab uint16_t reg_addr; 584f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab enum msm_camera_i2c_reg_addr_type addr_type; 585f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab uint32_t reg_data; 586f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab enum msm_camera_i2c_data_type data_type; 587f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab enum msm_ois_i2c_operation i2c_operation; 588f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab uint32_t delay; 589f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab}; 590f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab 591f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftabstruct msm_ois_params_t { 592f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab uint16_t data_size; 593f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab uint16_t init_setting_size; 594f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab uint16_t enable_ois_setting_size; 595f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab uint16_t disable_ois_setting_size; 596f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab uint16_t movie_mode_ois_setting_size; 597f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab uint16_t still_mode_ois_setting_size; 598f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab uint16_t centering_on_ois_setting_size; 599f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab uint16_t centering_off_ois_setting_size; 600f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab uint16_t pantilt_on_ois_setting_size; 601f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab uint32_t i2c_addr; 602f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab enum msm_camera_i2c_reg_addr_type i2c_addr_type; 603f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab enum msm_camera_i2c_data_type i2c_data_type; 604f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab struct reg_settings_ois_t *init_settings; 605f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab struct reg_settings_ois_t *enable_ois_settings; 606f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab struct reg_settings_ois_t *disable_ois_settings; 607f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab struct reg_settings_ois_t *movie_mode_ois_settings; 608f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab struct reg_settings_ois_t *still_mode_ois_settings; 609f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab struct reg_settings_ois_t *centering_on_ois_settings; 610f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab struct reg_settings_ois_t *centering_off_ois_settings; 611f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab struct reg_settings_ois_t *pantilt_on_ois_settings; 612f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab}; 613f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab 614f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftabstruct msm_ois_set_info_t { 615f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab struct msm_ois_params_t ois_params; 616f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab}; 617f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab 6183c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangenum actuator_type { 6193c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang ACTUATOR_VCM, 6203c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang ACTUATOR_PIEZO, 621d5e7482acdb5c37cde51f648865bb493bd18944aMansoor Aftab ACTUATOR_HVCM, 6223c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang}; 6233c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 6243c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangenum msm_actuator_data_type { 6253c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MSM_ACTUATOR_BYTE_DATA = 1, 6263c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MSM_ACTUATOR_WORD_DATA, 6273c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang}; 6283c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 6293c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangenum msm_actuator_addr_type { 6303c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MSM_ACTUATOR_BYTE_ADDR = 1, 6313c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MSM_ACTUATOR_WORD_ADDR, 6323c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang}; 6333c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 6343c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangenum msm_actuator_i2c_operation { 6353c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MSM_ACT_WRITE = 0, 6363c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MSM_ACT_POLL, 6373c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang}; 6383c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 6393c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangstruct reg_settings_t { 6403c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint16_t reg_addr; 6413c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang enum msm_actuator_addr_type addr_type; 6423c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint16_t reg_data; 6433c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang enum msm_actuator_data_type data_type; 6443c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang enum msm_actuator_i2c_operation i2c_operation; 6453c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint32_t delay; 6463c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang}; 6473c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 6483c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangstruct region_params_t { 6493c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang /* [0] = ForwardDirection Macro boundary 6503c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang [1] = ReverseDirection Inf boundary 6513c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang */ 6523c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint16_t step_bound[2]; 6533c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint16_t code_per_step; 6543c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang}; 6553c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 6563c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangstruct damping_params_t { 6573c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint32_t damping_step; 6583c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint32_t damping_delay; 6593c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint32_t hw_params; 6603c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang}; 6613c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 6623c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangstruct msm_actuator_move_params_t { 6633c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang int8_t dir; 6643c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang int8_t sign_dir; 6653c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang int16_t dest_step_pos; 6663c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang int32_t num_steps; 6673c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint16_t curr_lens_pos; 6683c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang struct damping_params_t *ringing_params; 6693c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang}; 6703c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 6713c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangstruct msm_actuator_tuning_params_t { 6723c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang int16_t initial_code; 6733c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint16_t pwd_step; 6743c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint16_t region_size; 6753c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint32_t total_steps; 6763c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang struct region_params_t *region_params; 6773c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang}; 6783c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 6793c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangstruct park_lens_data_t { 6803c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint32_t damping_step; 6813c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint32_t damping_delay; 6823c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint32_t hw_params; 6833c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint32_t max_step; 6843c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang}; 6853c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 6863c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangstruct msm_actuator_params_t { 6873c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang enum actuator_type act_type; 6883c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint8_t reg_tbl_size; 6893c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint16_t data_size; 6903c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint16_t init_setting_size; 6913c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint32_t i2c_addr; 6923c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang enum msm_actuator_addr_type i2c_addr_type; 6933c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang enum msm_actuator_data_type i2c_data_type; 6943c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang struct msm_actuator_reg_params_t *reg_tbl_params; 6953c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang struct reg_settings_t *init_settings; 6963c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang struct park_lens_data_t park_lens; 6973c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang}; 6983c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 6993c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangstruct msm_actuator_set_info_t { 7003c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang struct msm_actuator_params_t actuator_params; 7013c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang struct msm_actuator_tuning_params_t af_tuning_params; 7023c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang}; 7033c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 7043c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangstruct msm_actuator_get_info_t { 7053c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint32_t focal_length_num; 7063c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint32_t focal_length_den; 7073c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint32_t f_number_num; 7083c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint32_t f_number_den; 7093c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint32_t f_pix_num; 7103c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint32_t f_pix_den; 7113c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint32_t total_f_dist_num; 7123c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint32_t total_f_dist_den; 7133c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint32_t hor_view_angle_num; 7143c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint32_t hor_view_angle_den; 7153c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint32_t ver_view_angle_num; 7163c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint32_t ver_view_angle_den; 7173c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang}; 7183c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 7193c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangenum af_camera_name { 7203c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang ACTUATOR_MAIN_CAM_0, 7213c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang ACTUATOR_MAIN_CAM_1, 7223c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang ACTUATOR_MAIN_CAM_2, 7233c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang ACTUATOR_MAIN_CAM_3, 7243c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang ACTUATOR_MAIN_CAM_4, 7253c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang ACTUATOR_MAIN_CAM_5, 7263c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang ACTUATOR_WEB_CAM_0, 7273c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang ACTUATOR_WEB_CAM_1, 7283c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang ACTUATOR_WEB_CAM_2, 7293c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang}; 7303c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 731f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftabstruct msm_ois_cfg_data { 732f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab int cfgtype; 733f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab uint8_t is_ois_supported; 734f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab union { 735f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab uint8_t enable_centering_ois; 736f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab struct msm_ois_set_info_t set_info; 737f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab struct msm_camera_i2c_seq_reg_setting *settings; 738f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab } cfg; 739f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab}; 7403c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 7413c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangstruct msm_actuator_set_position_t { 7423c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint16_t number_of_steps; 7433c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint16_t pos[MAX_NUMBER_OF_STEPS]; 7443c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint16_t delay[MAX_NUMBER_OF_STEPS]; 7453c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang}; 7463c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 7473c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangstruct msm_actuator_i2c { 7483c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint16_t addr; 7493c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint16_t value; 7503c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint32_t wait_time; 7513c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang}; 7523c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 7533c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_ACTUATOR_I2C_MAX_TABLE_SIZE (8) 7543c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangstruct msm_actuator_i2c_table { 7553c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang struct msm_actuator_i2c data[MSM_ACTUATOR_I2C_MAX_TABLE_SIZE]; 7563c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint32_t size; 7573c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang}; 7583c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 7593c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangstruct msm_actuator_cfg_data { 7603c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang int cfgtype; 7613c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint8_t is_af_supported; 7623c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang union { 7633c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang struct msm_actuator_move_params_t move; 7643c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang struct msm_actuator_set_info_t set_info; 7653c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang struct msm_actuator_get_info_t get_info; 7663c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang struct msm_actuator_set_position_t setpos; 7673c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang enum af_camera_name cam_name; 7683c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang struct msm_actuator_i2c_table i2c_table; 7693c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang } cfg; 7703c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang}; 7713c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 7723c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangenum msm_actuator_write_type { 7733c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MSM_ACTUATOR_WRITE_HW_DAMP, 7743c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MSM_ACTUATOR_WRITE_DAC, 7753c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang}; 7763c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 7773c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangstruct msm_actuator_reg_params_t { 7783c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang enum msm_actuator_write_type reg_write_type; 7793c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint32_t hw_mask; 7803c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint16_t reg_addr; 7813c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint16_t hw_shift; 7823c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint16_t data_shift; 7833c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang}; 7843c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 7853c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangenum msm_camera_led_config_t { 7863c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MSM_CAMERA_LED_OFF, 7873c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MSM_CAMERA_LED_LOW, 7883c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MSM_CAMERA_LED_HIGH, 7893c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MSM_CAMERA_LED_INIT, 7903c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MSM_CAMERA_LED_RELEASE, 7913c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang}; 7923c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 7933c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangstruct msm_camera_led_cfg_t { 7943c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang enum msm_camera_led_config_t cfgtype; 7953c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint32_t torch_current; 7963c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint32_t flash_current[MAX_LED_TRIGGERS]; 7973c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang uint32_t flash_duration[MAX_LED_TRIGGERS]; 7983c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang}; 7993c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 8003c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang/* sensor init structures and enums */ 8013c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangenum msm_sensor_init_cfg_type_t { 8023c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang CFG_SINIT_PROBE, 8033c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang CFG_SINIT_PROBE_DONE, 8043c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang CFG_SINIT_PROBE_WAIT_DONE, 8053c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang}; 8063c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 8073c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangstruct sensor_init_cfg_data { 8083c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang enum msm_sensor_init_cfg_type_t cfgtype; 8093c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang union { 8103c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang void *setting; 8113c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang } cfg; 8123c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang}; 8133c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 8143c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define VIDIOC_MSM_SENSOR_CFG \ 8153c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang _IOWR('V', BASE_VIDIOC_PRIVATE + 1, struct sensorb_cfg_data) 8163c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 8173c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define VIDIOC_MSM_SENSOR_RELEASE \ 8183c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang _IO('V', BASE_VIDIOC_PRIVATE + 2) 8193c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 8203c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define VIDIOC_MSM_SENSOR_GET_SUBDEV_ID \ 8213c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang _IOWR('V', BASE_VIDIOC_PRIVATE + 3, uint32_t) 8223c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 8233c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define VIDIOC_MSM_CSIPHY_IO_CFG \ 8243c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang _IOWR('V', BASE_VIDIOC_PRIVATE + 4, struct csiphy_cfg_data) 8253c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 8263c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define VIDIOC_MSM_CSID_IO_CFG \ 8273c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang _IOWR('V', BASE_VIDIOC_PRIVATE + 5, struct csid_cfg_data) 8283c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 8293c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define VIDIOC_MSM_ACTUATOR_CFG \ 8303c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang _IOWR('V', BASE_VIDIOC_PRIVATE + 6, struct msm_actuator_cfg_data) 8313c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 8323c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define VIDIOC_MSM_FLASH_LED_DATA_CFG \ 8333c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang _IOWR('V', BASE_VIDIOC_PRIVATE + 7, struct msm_camera_led_cfg_t) 8343c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 8353c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define VIDIOC_MSM_EEPROM_CFG \ 8363c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang _IOWR('V', BASE_VIDIOC_PRIVATE + 8, struct msm_eeprom_cfg_data) 8373c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 8383c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define VIDIOC_MSM_SENSOR_GET_AF_STATUS \ 8393c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang _IOWR('V', BASE_VIDIOC_PRIVATE + 9, uint32_t) 8403c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 8413c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define VIDIOC_MSM_SENSOR_INIT_CFG \ 8423c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang _IOWR('V', BASE_VIDIOC_PRIVATE + 10, struct sensor_init_cfg_data) 8433c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 844f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab#define VIDIOC_MSM_OIS_CFG \ 845f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab _IOWR('V', BASE_VIDIOC_PRIVATE + 11, struct msm_ois_cfg_data) 846f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab 8473c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_V4L2_PIX_FMT_META v4l2_fourcc('M', 'E', 'T', 'A') /* META */ 8483c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang 8493c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#endif /* __LINUX_MSM_CAM_SENSOR_H */ 850