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