msm_cam_sensor.h revision b8950166b8e6eb29e0711d2f6d92cad4096a5b36
1537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#ifndef __LINUX_MSM_CAM_SENSOR_H
2537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define __LINUX_MSM_CAM_SENSOR_H
3537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
4537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#ifdef MSM_CAMERA_BIONIC
5537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#include <sys/types.h>
6537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#endif
7537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#include <linux/types.h>
8537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#include <linux/v4l2-mediabus.h>
9537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#include <linux/i2c.h>
10537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
11537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define I2C_SEQ_REG_SETTING_MAX   5
12537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define I2C_SEQ_REG_DATA_MAX      20
13537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define MAX_CID                   16
14537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
15537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define MSM_SENSOR_MCLK_8HZ   8000000
16537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define MSM_SENSOR_MCLK_16HZ  16000000
17537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define MSM_SENSOR_MCLK_24HZ  24000000
18537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
19537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define GPIO_OUT_LOW          (0 << 1)
20537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define GPIO_OUT_HIGH         (1 << 1)
21537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
22537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define CSI_EMBED_DATA        0x12
23537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define CSI_RESERVED_DATA_0   0x13
24537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define CSI_YUV422_8          0x1E
25537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define CSI_RAW8              0x2A
26537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define CSI_RAW10             0x2B
27537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define CSI_RAW12             0x2C
28537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
29537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define CSI_DECODE_6BIT         0
30537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define CSI_DECODE_8BIT         1
31537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define CSI_DECODE_10BIT        2
32537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define CSI_DECODE_DPCM_10_8_10 5
33537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
34537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define MAX_SENSOR_NAME 32
35537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
36537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define MAX_ACT_MOD_NAME_SIZE 32
37537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define MAX_ACT_NAME_SIZE 32
38537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define NUM_ACTUATOR_DIR 2
39537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define MAX_ACTUATOR_SCENARIO 8
40537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define MAX_ACTUATOR_REGION 5
41537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define MAX_ACTUATOR_INIT_SET 12
42537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define MAX_ACTUATOR_REG_TBL_SIZE 8
43537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
44537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define MOVE_NEAR 0
45537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define MOVE_FAR  1
46537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
47537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define MAX_EEPROM_NAME 32
48537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
49537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanienum msm_camera_i2c_reg_addr_type {
50537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	MSM_CAMERA_I2C_BYTE_ADDR = 1,
51537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	MSM_CAMERA_I2C_WORD_ADDR,
52537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	MSM_CAMERA_I2C_3B_ADDR,
53537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
54537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
55537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanienum msm_camera_i2c_data_type {
56537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	MSM_CAMERA_I2C_BYTE_DATA = 1,
57537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	MSM_CAMERA_I2C_WORD_DATA,
58537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	MSM_CAMERA_I2C_SET_BYTE_MASK,
59537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	MSM_CAMERA_I2C_UNSET_BYTE_MASK,
60537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	MSM_CAMERA_I2C_SET_WORD_MASK,
61537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	MSM_CAMERA_I2C_UNSET_WORD_MASK,
62537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	MSM_CAMERA_I2C_SET_BYTE_WRITE_MASK_DATA,
63537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
64537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
65537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanienum msm_sensor_power_seq_type_t {
66537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	SENSOR_CLK,
67537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	SENSOR_GPIO,
68537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	SENSOR_VREG,
69537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	SENSOR_I2C_MUX,
70537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
71537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
72537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanienum msm_sensor_clk_type_t {
73537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	SENSOR_CAM_MCLK,
74537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	SENSOR_CAM_CLK,
75537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	SENSOR_CAM_CLK_MAX,
76537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
77537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
78537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanienum msm_sensor_power_seq_gpio_t {
79537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	SENSOR_GPIO_RESET,
80537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	SENSOR_GPIO_STANDBY,
81b8950166b8e6eb29e0711d2f6d92cad4096a5b36insup.choi	SENSOR_GPIO_VANA,
82b8950166b8e6eb29e0711d2f6d92cad4096a5b36insup.choi	SENSOR_GPIO_VDIG,
83b8950166b8e6eb29e0711d2f6d92cad4096a5b36insup.choi	SENSOR_GPIO_VIO,
84b8950166b8e6eb29e0711d2f6d92cad4096a5b36insup.choi	SENSOR_GPIO_VCM,
85537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	SENSOR_GPIO_MAX,
86537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
87537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
88537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanienum msm_camera_vreg_name_t {
89537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	CAM_VDIG,
90537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	CAM_VIO,
91537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	CAM_VANA,
92537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	CAM_VAF,
93537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	CAM_VREG_MAX,
94537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
95537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
96537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanienum msm_sensor_resolution_t {
97537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	MSM_SENSOR_RES_FULL,
98537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	MSM_SENSOR_RES_QTR,
99537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	MSM_SENSOR_RES_2,
100537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	MSM_SENSOR_RES_3,
101537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	MSM_SENSOR_RES_4,
102537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	MSM_SENSOR_RES_5,
103537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	MSM_SENSOR_RES_6,
104537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	MSM_SENSOR_RES_7,
105537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	MSM_SENSOR_INVALID_RES,
106537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
107537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
108537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanienum sensor_sub_module_t {
109537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	SUB_MODULE_SENSOR,
110537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	SUB_MODULE_CHROMATIX,
111537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	SUB_MODULE_ACTUATOR,
112537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	SUB_MODULE_EEPROM,
113537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	SUB_MODULE_LED_FLASH,
114537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	SUB_MODULE_STROBE_FLASH,
115537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	SUB_MODULE_CSID,
116537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	SUB_MODULE_CSID_3D,
117537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	SUB_MODULE_CSIPHY,
118537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	SUB_MODULE_CSIPHY_3D,
119537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	SUB_MODULE_MAX,
120537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
121537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
122537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanienum csid_cfg_type_t {
123537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	CSID_INIT,
124537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	CSID_CFG,
125537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	CSID_RELEASE,
126537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
127537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
128537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanienum csiphy_cfg_type_t {
129537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	CSIPHY_INIT,
130537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	CSIPHY_CFG,
131537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	CSIPHY_RELEASE,
132537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
133537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
134537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanienum camera_vreg_type {
135537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	REG_LDO,
136537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	REG_VS,
137537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	REG_GPIO,
138537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
139537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
140537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct msm_sensor_power_setting {
141537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	enum msm_sensor_power_seq_type_t seq_type;
142537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint16_t seq_val;
143537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	long config_val;
144537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint16_t delay;
145537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	void *data[10];
146537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
147537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
148537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct msm_sensor_power_setting_array {
149537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	struct msm_sensor_power_setting *power_setting;
150537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint16_t size;
151537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
152537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
153537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct msm_sensor_id_info_t {
154537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint16_t sensor_id_reg_addr;
155537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint16_t sensor_id;
156537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
157537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
158537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct msm_camera_sensor_slave_info {
159537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint16_t slave_addr;
160537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	enum msm_camera_i2c_reg_addr_type addr_type;
161537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	struct msm_sensor_id_info_t sensor_id_info;
162537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	struct msm_sensor_power_setting_array power_setting_array;
163537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
164537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
165537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct msm_camera_i2c_reg_array {
166537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint16_t reg_addr;
167537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint16_t reg_data;
168537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
169537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
170537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct msm_camera_i2c_reg_setting {
171537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	struct msm_camera_i2c_reg_array *reg_setting;
172537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint16_t size;
173537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	enum msm_camera_i2c_reg_addr_type addr_type;
174537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	enum msm_camera_i2c_data_type data_type;
175537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint16_t delay;
176537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
177537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
178537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct msm_camera_i2c_seq_reg_array {
179537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint16_t reg_addr;
180537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint8_t reg_data[I2C_SEQ_REG_DATA_MAX];
181537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint16_t reg_data_size;
182537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
183537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
184537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct msm_camera_i2c_seq_reg_setting {
185537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	struct msm_camera_i2c_seq_reg_array *reg_setting;
186537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint16_t size;
187537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	enum msm_camera_i2c_reg_addr_type addr_type;
188537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint16_t delay;
189537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
190537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
191537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct msm_camera_csid_vc_cfg {
192537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint8_t cid;
193537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint8_t dt;
194537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint8_t decode_format;
195537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
196537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
197537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct msm_camera_csid_lut_params {
198537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint8_t num_cid;
199537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	struct msm_camera_csid_vc_cfg *vc_cfg[MAX_CID];
200537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
201537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
202537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct msm_camera_csid_params {
203537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint8_t lane_cnt;
204537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint16_t lane_assign;
205537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint8_t phy_sel;
206537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	struct msm_camera_csid_lut_params lut_params;
207537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
208537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
209537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct msm_camera_csiphy_params {
210537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint8_t lane_cnt;
211537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint8_t settle_cnt;
212537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint16_t lane_mask;
213537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint8_t combo_mode;
214537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint8_t csid_core;
215537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
216537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
217537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct msm_camera_csi2_params {
218537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	struct msm_camera_csid_params csid_params;
219537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	struct msm_camera_csiphy_params csiphy_params;
220537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
221537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
222537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct msm_camera_csi_lane_params {
223537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint16_t csi_lane_assign;
224537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint16_t csi_lane_mask;
225537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
226537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
227537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct csi_lane_params_t {
228537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint16_t csi_lane_assign;
229537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint8_t csi_lane_mask;
230537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint8_t csi_if;
231537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint8_t csid_core[2];
232537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint8_t csi_phy_sel;
233537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
234537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
235537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct msm_sensor_info_t {
236537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	char sensor_name[MAX_SENSOR_NAME];
237537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	int32_t    session_id;
238537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	int32_t     subdev_id[SUB_MODULE_MAX];
239537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
240537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
241537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct camera_vreg_t {
242537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	const char *reg_name;
243537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	enum camera_vreg_type type;
244537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	int min_voltage;
245537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	int max_voltage;
246537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	int op_mode;
247537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t delay;
248537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
249537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
250537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanienum camb_position_t {
251537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	BACK_CAMERA_B,
252537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	FRONT_CAMERA_B,
253537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
254537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
255537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanienum camerab_mode_t {
256537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	CAMERA_MODE_2D_B = (1<<0),
257537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	CAMERA_MODE_3D_B = (1<<1)
258537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
259537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
260537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct msm_sensor_init_params {
261537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	/* mask of modes supported: 2D, 3D */
262537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	int                 modes_supported;
263537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	/* sensor position: front, back */
264537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	enum camb_position_t position;
265537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	/* sensor mount angle */
266537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t            sensor_mount_angle;
267537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
268537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
269537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct sensorb_cfg_data {
270537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	int cfgtype;
271537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	union {
272537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani		struct msm_sensor_info_t      sensor_info;
273537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani		struct msm_sensor_init_params sensor_init_params;
274537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani		void                         *setting;
275537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	} cfg;
276537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
277537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
278537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct csid_cfg_data {
279537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	enum csid_cfg_type_t cfgtype;
280537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	union {
281537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani		uint32_t csid_version;
282537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani		struct msm_camera_csid_params *csid_params;
283537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	} cfg;
284537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
285537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
286537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct csiphy_cfg_data {
287537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	enum csiphy_cfg_type_t cfgtype;
288537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	union {
289537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani		struct msm_camera_csiphy_params *csiphy_params;
290537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani		struct msm_camera_csi_lane_params *csi_lane_params;
291537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	} cfg;
292537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
293537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
294537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanienum eeprom_cfg_type_t {
295537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	CFG_EEPROM_GET_INFO,
296537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	CFG_EEPROM_GET_DATA,
297537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	CFG_EEPROM_READ_DATA,
298537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	CFG_EEPROM_WRITE_DATA,
299537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
300537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct eeprom_get_t {
301537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint16_t num_bytes;
302537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
303537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
304537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct eeprom_read_t {
305537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint8_t *dbuffer;
306537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint16_t num_bytes;
307537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
308537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
309537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct eeprom_write_t {
310537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint8_t *dbuffer;
311537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint16_t num_bytes;
312537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
313537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
314537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct msm_eeprom_cfg_data {
315537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	enum eeprom_cfg_type_t cfgtype;
316537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint8_t is_supported;
317537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	union {
318537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani		char eeprom_name[MAX_SENSOR_NAME];
319537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani		struct eeprom_get_t get_data;
320537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani		struct eeprom_read_t read_data;
321537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani		struct eeprom_write_t write_data;
322537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	} cfg;
323537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
324537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
325537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanienum msm_sensor_cfg_type_t {
326537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	CFG_SET_SLAVE_INFO,
327537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	CFG_WRITE_I2C_ARRAY,
328537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	CFG_WRITE_I2C_SEQ_ARRAY,
329537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	CFG_POWER_UP,
330537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	CFG_POWER_DOWN,
331537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	CFG_SET_STOP_STREAM_SETTING,
332537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	CFG_GET_SENSOR_INFO,
333537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	CFG_GET_SENSOR_INIT_PARAMS,
334537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	CFG_SET_INIT_SETTING,
335537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	CFG_SET_RESOLUTION,
336537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	CFG_SET_STOP_STREAM,
337537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	CFG_SET_START_STREAM,
338537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
339537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
340537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanienum msm_actuator_cfg_type_t {
341537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	CFG_GET_ACTUATOR_INFO,
342537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	CFG_SET_ACTUATOR_INFO,
343537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	CFG_SET_DEFAULT_FOCUS,
344537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	CFG_MOVE_FOCUS,
345537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
346537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
347537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanienum actuator_type {
348537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	ACTUATOR_VCM,
349537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	ACTUATOR_PIEZO,
350537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
351537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
352537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanienum msm_actuator_data_type {
353537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	MSM_ACTUATOR_BYTE_DATA = 1,
354537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	MSM_ACTUATOR_WORD_DATA,
355537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
356537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
357537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanienum msm_actuator_addr_type {
358537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	MSM_ACTUATOR_BYTE_ADDR = 1,
359537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	MSM_ACTUATOR_WORD_ADDR,
360537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
361537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
362537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct reg_settings_t {
363537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint16_t reg_addr;
364537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint16_t reg_data;
365537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
366537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
367537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct region_params_t {
368537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	/* [0] = ForwardDirection Macro boundary
369537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	   [1] = ReverseDirection Inf boundary
370537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani        */
371537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint16_t step_bound[2];
372537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint16_t code_per_step;
373537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
374537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
375537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct damping_params_t {
376537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t damping_step;
377537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t damping_delay;
378537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t hw_params;
379537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
380537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
381537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct msm_actuator_move_params_t {
382537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	int8_t dir;
383537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	int8_t sign_dir;
384537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	int16_t dest_step_pos;
385537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	int32_t num_steps;
386537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	struct damping_params_t *ringing_params;
387537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
388537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
389537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct msm_actuator_tuning_params_t {
390537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	int16_t initial_code;
391537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint16_t pwd_step;
392537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint16_t region_size;
393537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t total_steps;
394537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	struct region_params_t *region_params;
395537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
396537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
397537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct msm_actuator_params_t {
398537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	enum actuator_type act_type;
399537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint8_t reg_tbl_size;
400537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint16_t data_size;
401537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint16_t init_setting_size;
402537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t i2c_addr;
403537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	enum msm_actuator_addr_type i2c_addr_type;
404537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	enum msm_actuator_data_type i2c_data_type;
405537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	struct msm_actuator_reg_params_t *reg_tbl_params;
406537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	struct reg_settings_t *init_settings;
407537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
408537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
409537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct msm_actuator_set_info_t {
410537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	struct msm_actuator_params_t actuator_params;
411537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	struct msm_actuator_tuning_params_t af_tuning_params;
412537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
413537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
414537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct msm_actuator_get_info_t {
415537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t focal_length_num;
416537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t focal_length_den;
417537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t f_number_num;
418537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t f_number_den;
419537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t f_pix_num;
420537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t f_pix_den;
421537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t total_f_dist_num;
422537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t total_f_dist_den;
423537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t hor_view_angle_num;
424537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t hor_view_angle_den;
425537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t ver_view_angle_num;
426537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t ver_view_angle_den;
427537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
428537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
429537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanienum af_camera_name {
430537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	ACTUATOR_MAIN_CAM_0,
431537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	ACTUATOR_MAIN_CAM_1,
432537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	ACTUATOR_MAIN_CAM_2,
433537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	ACTUATOR_MAIN_CAM_3,
434537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	ACTUATOR_MAIN_CAM_4,
435537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	ACTUATOR_MAIN_CAM_5,
436537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	ACTUATOR_WEB_CAM_0,
437537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	ACTUATOR_WEB_CAM_1,
438537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	ACTUATOR_WEB_CAM_2,
439537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
440537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
441537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct msm_actuator_cfg_data {
442537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	int cfgtype;
443537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint8_t is_af_supported;
444537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	union {
445537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani		struct msm_actuator_move_params_t move;
446537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani		struct msm_actuator_set_info_t set_info;
447537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani		struct msm_actuator_get_info_t get_info;
448537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani		enum af_camera_name cam_name;
449537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	} cfg;
450537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
451537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
452537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanienum msm_actuator_write_type {
453537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	MSM_ACTUATOR_WRITE_HW_DAMP,
454537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	MSM_ACTUATOR_WRITE_DAC,
455537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
456537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
457537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct msm_actuator_reg_params_t {
458537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	enum msm_actuator_write_type reg_write_type;
459537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t hw_mask;
460537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint16_t reg_addr;
461537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint16_t hw_shift;
462537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint16_t data_shift;
463537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
464537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
465537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanienum msm_camera_led_config_t {
466537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	MSM_CAMERA_LED_OFF,
467537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	MSM_CAMERA_LED_LOW,
468537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	MSM_CAMERA_LED_HIGH,
469537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	MSM_CAMERA_LED_INIT,
470537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	MSM_CAMERA_LED_RELEASE,
471537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
472537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
473537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct msm_camera_led_cfg_t {
474537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	enum msm_camera_led_config_t cfgtype;
475537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
476537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
477537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define VIDIOC_MSM_SENSOR_CFG \
478537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	_IOWR('V', BASE_VIDIOC_PRIVATE + 1, struct sensorb_cfg_data)
479537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
480537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define VIDIOC_MSM_SENSOR_RELEASE \
481537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	_IO('V', BASE_VIDIOC_PRIVATE + 2)
482537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
483537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define VIDIOC_MSM_SENSOR_GET_SUBDEV_ID \
484537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	_IOWR('V', BASE_VIDIOC_PRIVATE + 3, uint32_t)
485537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
486537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define VIDIOC_MSM_CSIPHY_IO_CFG \
487537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	_IOWR('V', BASE_VIDIOC_PRIVATE + 4, struct csid_cfg_data)
488537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
489537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define VIDIOC_MSM_CSID_IO_CFG \
490537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	_IOWR('V', BASE_VIDIOC_PRIVATE + 5, struct csiphy_cfg_data)
491537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
492537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define VIDIOC_MSM_ACTUATOR_CFG \
493537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	_IOWR('V', BASE_VIDIOC_PRIVATE + 6, struct msm_actuator_cfg_data)
494537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
495537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define VIDIOC_MSM_FLASH_LED_DATA_CFG \
496537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	_IOWR('V', BASE_VIDIOC_PRIVATE + 7, struct msm_camera_led_cfg_t)
497537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
498537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define VIDIOC_MSM_EEPROM_CFG \
499537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	_IOWR('V', BASE_VIDIOC_PRIVATE + 8, struct msm_eeprom_cfg_data)
500537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
501537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define MSM_V4L2_PIX_FMT_META v4l2_fourcc('M', 'E', 'T', 'A') /* META */
502537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
503537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#endif /* __LINUX_MSM_CAM_SENSOR_H */
504