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,
85d1d83fe741fda73cc77dca3112b8e2c1034ba98dIliyan Malchev	SENSOR_GPIO_OIS_LDO_EN,
86d1d83fe741fda73cc77dca3112b8e2c1034ba98dIliyan Malchev	SENSOR_GPIO_OIS_RESET,
87537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	SENSOR_GPIO_MAX,
88537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
89537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
90537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanienum msm_camera_vreg_name_t {
91537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	CAM_VDIG,
92537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	CAM_VIO,
93537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	CAM_VANA,
94537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	CAM_VAF,
95537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	CAM_VREG_MAX,
96537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
97537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
98537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanienum msm_sensor_resolution_t {
99537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	MSM_SENSOR_RES_FULL,
100537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	MSM_SENSOR_RES_QTR,
101537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	MSM_SENSOR_RES_2,
102537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	MSM_SENSOR_RES_3,
103537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	MSM_SENSOR_RES_4,
104537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	MSM_SENSOR_RES_5,
105537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	MSM_SENSOR_RES_6,
106537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	MSM_SENSOR_RES_7,
107537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	MSM_SENSOR_INVALID_RES,
108537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
109537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
110537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanienum sensor_sub_module_t {
111537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	SUB_MODULE_SENSOR,
112537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	SUB_MODULE_CHROMATIX,
113537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	SUB_MODULE_ACTUATOR,
114537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	SUB_MODULE_EEPROM,
115537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	SUB_MODULE_LED_FLASH,
116537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	SUB_MODULE_STROBE_FLASH,
117537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	SUB_MODULE_CSID,
118537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	SUB_MODULE_CSID_3D,
119537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	SUB_MODULE_CSIPHY,
120537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	SUB_MODULE_CSIPHY_3D,
121537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	SUB_MODULE_MAX,
122537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
123537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
124537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanienum csid_cfg_type_t {
125537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	CSID_INIT,
126537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	CSID_CFG,
127537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	CSID_RELEASE,
128537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
129537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
130537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanienum csiphy_cfg_type_t {
131537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	CSIPHY_INIT,
132537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	CSIPHY_CFG,
133537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	CSIPHY_RELEASE,
134537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
135537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
136537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanienum camera_vreg_type {
137537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	REG_LDO,
138537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	REG_VS,
139537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	REG_GPIO,
140537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
141537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
142537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct msm_sensor_power_setting {
143537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	enum msm_sensor_power_seq_type_t seq_type;
144537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint16_t seq_val;
145537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	long config_val;
146537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint16_t delay;
147537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	void *data[10];
148537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
149537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
150537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct msm_sensor_power_setting_array {
151537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	struct msm_sensor_power_setting *power_setting;
152537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint16_t size;
153537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
154537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
155537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct msm_sensor_id_info_t {
156537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint16_t sensor_id_reg_addr;
157537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint16_t sensor_id;
158537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
159537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
160537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct msm_camera_sensor_slave_info {
161537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint16_t slave_addr;
162537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	enum msm_camera_i2c_reg_addr_type addr_type;
163537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	struct msm_sensor_id_info_t sensor_id_info;
164537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	struct msm_sensor_power_setting_array power_setting_array;
165537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
166537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
167537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct msm_camera_i2c_reg_array {
168537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint16_t reg_addr;
169537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint16_t reg_data;
170537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
171537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
172537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct msm_camera_i2c_reg_setting {
173537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	struct msm_camera_i2c_reg_array *reg_setting;
174537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint16_t size;
175537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	enum msm_camera_i2c_reg_addr_type addr_type;
176537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	enum msm_camera_i2c_data_type data_type;
177537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint16_t delay;
178537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
179537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
180537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct msm_camera_i2c_seq_reg_array {
181537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint16_t reg_addr;
182537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint8_t reg_data[I2C_SEQ_REG_DATA_MAX];
183537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint16_t reg_data_size;
184537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
185537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
186537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct msm_camera_i2c_seq_reg_setting {
187537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	struct msm_camera_i2c_seq_reg_array *reg_setting;
188537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint16_t size;
189537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	enum msm_camera_i2c_reg_addr_type addr_type;
190537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint16_t delay;
191537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
192537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
193a8dacd55667c4b495110f04338067794a6d50ee2Devin Kimstruct msm_camera_i2c_array_write_config {
194a8dacd55667c4b495110f04338067794a6d50ee2Devin Kim	struct msm_camera_i2c_reg_setting conf_array;
195a8dacd55667c4b495110f04338067794a6d50ee2Devin Kim	uint16_t slave_addr;
196a8dacd55667c4b495110f04338067794a6d50ee2Devin Kim};
197a8dacd55667c4b495110f04338067794a6d50ee2Devin Kim
198a8dacd55667c4b495110f04338067794a6d50ee2Devin Kimstruct msm_camera_i2c_read_config {
199a8dacd55667c4b495110f04338067794a6d50ee2Devin Kim	uint16_t slave_addr;
200a8dacd55667c4b495110f04338067794a6d50ee2Devin Kim	uint16_t reg_addr;
201a8dacd55667c4b495110f04338067794a6d50ee2Devin Kim	enum msm_camera_i2c_data_type data_type;
202a8dacd55667c4b495110f04338067794a6d50ee2Devin Kim	uint16_t *data;
203a8dacd55667c4b495110f04338067794a6d50ee2Devin Kim};
204a8dacd55667c4b495110f04338067794a6d50ee2Devin Kim
205537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct msm_camera_csid_vc_cfg {
206537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint8_t cid;
207537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint8_t dt;
208537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint8_t decode_format;
209537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
210537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
211537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct msm_camera_csid_lut_params {
212537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint8_t num_cid;
213537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	struct msm_camera_csid_vc_cfg *vc_cfg[MAX_CID];
214537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
215537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
216537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct msm_camera_csid_params {
217537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint8_t lane_cnt;
218537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint16_t lane_assign;
219537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint8_t phy_sel;
220537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	struct msm_camera_csid_lut_params lut_params;
221537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
222537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
223537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct msm_camera_csiphy_params {
224537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint8_t lane_cnt;
225537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint8_t settle_cnt;
226537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint16_t lane_mask;
227537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint8_t combo_mode;
228537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint8_t csid_core;
229537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
230537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
231537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct msm_camera_csi2_params {
232537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	struct msm_camera_csid_params csid_params;
233537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	struct msm_camera_csiphy_params csiphy_params;
234537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
235537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
236537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct msm_camera_csi_lane_params {
237537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint16_t csi_lane_assign;
238537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint16_t csi_lane_mask;
239537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
240537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
241537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct csi_lane_params_t {
242537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint16_t csi_lane_assign;
243537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint8_t csi_lane_mask;
244537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint8_t csi_if;
245537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint8_t csid_core[2];
246537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint8_t csi_phy_sel;
247537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
248537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
249537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct msm_sensor_info_t {
250537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	char sensor_name[MAX_SENSOR_NAME];
251537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	int32_t    session_id;
252537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	int32_t     subdev_id[SUB_MODULE_MAX];
253537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
254537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
255d1d83fe741fda73cc77dca3112b8e2c1034ba98dIliyan Malchevstruct msm_sensor_ois_info_t {
256d1d83fe741fda73cc77dca3112b8e2c1034ba98dIliyan Malchev	char ois_provider[MAX_SENSOR_NAME];
257d1d83fe741fda73cc77dca3112b8e2c1034ba98dIliyan Malchev	int16_t gyro[2];
258d1d83fe741fda73cc77dca3112b8e2c1034ba98dIliyan Malchev	int16_t target[2];
259d1d83fe741fda73cc77dca3112b8e2c1034ba98dIliyan Malchev	int16_t hall[2];
260d1d83fe741fda73cc77dca3112b8e2c1034ba98dIliyan Malchev	uint8_t is_stable;
261d1d83fe741fda73cc77dca3112b8e2c1034ba98dIliyan Malchev};
262d1d83fe741fda73cc77dca3112b8e2c1034ba98dIliyan Malchev
263d1d83fe741fda73cc77dca3112b8e2c1034ba98dIliyan Malchevenum ois_mode_t {
264d1d83fe741fda73cc77dca3112b8e2c1034ba98dIliyan Malchev	OIS_MODE_PREVIEW_CAPTURE,
265d1d83fe741fda73cc77dca3112b8e2c1034ba98dIliyan Malchev	OIS_MODE_VIDEO,
266d1d83fe741fda73cc77dca3112b8e2c1034ba98dIliyan Malchev	OIS_MODE_CAPTURE,
267d1d83fe741fda73cc77dca3112b8e2c1034ba98dIliyan Malchev	OIS_MODE_CENTERING_ONLY,
268d1d83fe741fda73cc77dca3112b8e2c1034ba98dIliyan Malchev	OIS_MODE_CENTERING_OFF
269d1d83fe741fda73cc77dca3112b8e2c1034ba98dIliyan Malchev};
270d1d83fe741fda73cc77dca3112b8e2c1034ba98dIliyan Malchev
271d1d83fe741fda73cc77dca3112b8e2c1034ba98dIliyan Malchevenum ois_ver_t {
272d1d83fe741fda73cc77dca3112b8e2c1034ba98dIliyan Malchev	OIS_VER_RELEASE,
273d1d83fe741fda73cc77dca3112b8e2c1034ba98dIliyan Malchev	OIS_VER_CALIBRATION,
274d1d83fe741fda73cc77dca3112b8e2c1034ba98dIliyan Malchev	OIS_VER_DEBUG
275d1d83fe741fda73cc77dca3112b8e2c1034ba98dIliyan Malchev};
276d1d83fe741fda73cc77dca3112b8e2c1034ba98dIliyan Malchev
277537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct camera_vreg_t {
278537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	const char *reg_name;
279537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	enum camera_vreg_type type;
280537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	int min_voltage;
281537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	int max_voltage;
282537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	int op_mode;
283537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t delay;
284537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
285537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
286537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanienum camb_position_t {
287537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	BACK_CAMERA_B,
288537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	FRONT_CAMERA_B,
289537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
290537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
291537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanienum camerab_mode_t {
292537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	CAMERA_MODE_2D_B = (1<<0),
293537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	CAMERA_MODE_3D_B = (1<<1)
294537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
295537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
296537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct msm_sensor_init_params {
297537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	/* mask of modes supported: 2D, 3D */
298537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	int                 modes_supported;
299537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	/* sensor position: front, back */
300537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	enum camb_position_t position;
301537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	/* sensor mount angle */
302537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t            sensor_mount_angle;
303d1d83fe741fda73cc77dca3112b8e2c1034ba98dIliyan Malchev	int                 ois_supported;
304537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
305537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
306537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct sensorb_cfg_data {
307537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	int cfgtype;
308537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	union {
309537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani		struct msm_sensor_info_t      sensor_info;
310537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani		struct msm_sensor_init_params sensor_init_params;
311d1d83fe741fda73cc77dca3112b8e2c1034ba98dIliyan Malchev		struct msm_sensor_ois_info_t  ois_info;
312537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani		void                         *setting;
313537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	} cfg;
314537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
315537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
316537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct csid_cfg_data {
317537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	enum csid_cfg_type_t cfgtype;
318537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	union {
319537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani		uint32_t csid_version;
320537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani		struct msm_camera_csid_params *csid_params;
321537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	} cfg;
322537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
323537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
324537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct csiphy_cfg_data {
325537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	enum csiphy_cfg_type_t cfgtype;
326537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	union {
327537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani		struct msm_camera_csiphy_params *csiphy_params;
328537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani		struct msm_camera_csi_lane_params *csi_lane_params;
329537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	} cfg;
330537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
331537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
332537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanienum eeprom_cfg_type_t {
333537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	CFG_EEPROM_GET_INFO,
33492b8da1af686c72bde47254e7fcd4b17e39be634Ajay Dudani	CFG_EEPROM_GET_CAL_DATA,
33592b8da1af686c72bde47254e7fcd4b17e39be634Ajay Dudani	CFG_EEPROM_READ_CAL_DATA,
336537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	CFG_EEPROM_WRITE_DATA,
337537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
338537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct eeprom_get_t {
339537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint16_t num_bytes;
340537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
341537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
342537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct eeprom_read_t {
343537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint8_t *dbuffer;
344537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint16_t num_bytes;
345537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
346537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
347537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct eeprom_write_t {
348537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint8_t *dbuffer;
349537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint16_t num_bytes;
350537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
351537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
352537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct msm_eeprom_cfg_data {
353537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	enum eeprom_cfg_type_t cfgtype;
354537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint8_t is_supported;
355537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	union {
356537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani		char eeprom_name[MAX_SENSOR_NAME];
357537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani		struct eeprom_get_t get_data;
358537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani		struct eeprom_read_t read_data;
359537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani		struct eeprom_write_t write_data;
360537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	} cfg;
361537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
362537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
363537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanienum msm_sensor_cfg_type_t {
364537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	CFG_SET_SLAVE_INFO,
365a8dacd55667c4b495110f04338067794a6d50ee2Devin Kim	CFG_SLAVE_READ_I2C,
366537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	CFG_WRITE_I2C_ARRAY,
367a8dacd55667c4b495110f04338067794a6d50ee2Devin Kim	CFG_SLAVE_WRITE_I2C_ARRAY,
368537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	CFG_WRITE_I2C_SEQ_ARRAY,
369537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	CFG_POWER_UP,
370537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	CFG_POWER_DOWN,
371537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	CFG_SET_STOP_STREAM_SETTING,
372537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	CFG_GET_SENSOR_INFO,
373537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	CFG_GET_SENSOR_INIT_PARAMS,
374537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	CFG_SET_INIT_SETTING,
375537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	CFG_SET_RESOLUTION,
376537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	CFG_SET_STOP_STREAM,
377537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	CFG_SET_START_STREAM,
378d1d83fe741fda73cc77dca3112b8e2c1034ba98dIliyan Malchev	CFG_OIS_ON,
379d1d83fe741fda73cc77dca3112b8e2c1034ba98dIliyan Malchev	CFG_OIS_OFF,
380d1d83fe741fda73cc77dca3112b8e2c1034ba98dIliyan Malchev	CFG_GET_OIS_INFO,
381d1d83fe741fda73cc77dca3112b8e2c1034ba98dIliyan Malchev	CFG_SET_OIS_MODE,
382d1d83fe741fda73cc77dca3112b8e2c1034ba98dIliyan Malchev	CFG_OIS_MOVE_LENS
383537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
384537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
385537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanienum msm_actuator_cfg_type_t {
386537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	CFG_GET_ACTUATOR_INFO,
387537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	CFG_SET_ACTUATOR_INFO,
388537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	CFG_SET_DEFAULT_FOCUS,
389537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	CFG_MOVE_FOCUS,
390537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
391537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
392537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanienum actuator_type {
393537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	ACTUATOR_VCM,
394537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	ACTUATOR_PIEZO,
395537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
396537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
397537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanienum msm_actuator_data_type {
398537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	MSM_ACTUATOR_BYTE_DATA = 1,
399537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	MSM_ACTUATOR_WORD_DATA,
400537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
401537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
402537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanienum msm_actuator_addr_type {
403537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	MSM_ACTUATOR_BYTE_ADDR = 1,
404537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	MSM_ACTUATOR_WORD_ADDR,
405537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
406537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
407537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct reg_settings_t {
408537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint16_t reg_addr;
409537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint16_t reg_data;
410537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
411537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
412537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct region_params_t {
413537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	/* [0] = ForwardDirection Macro boundary
414537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	   [1] = ReverseDirection Inf boundary
415537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani        */
416537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint16_t step_bound[2];
417537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint16_t code_per_step;
418537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
419537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
420537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct damping_params_t {
421537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t damping_step;
422537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t damping_delay;
423537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t hw_params;
424537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
425537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
426537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct msm_actuator_move_params_t {
427537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	int8_t dir;
428537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	int8_t sign_dir;
429537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	int16_t dest_step_pos;
430537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	int32_t num_steps;
431d1d83fe741fda73cc77dca3112b8e2c1034ba98dIliyan Malchev	int32_t num_steps_inf_pos;
432537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	struct damping_params_t *ringing_params;
433537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
434537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
435537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct msm_actuator_tuning_params_t {
436537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	int16_t initial_code;
437537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint16_t pwd_step;
438537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint16_t region_size;
439537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t total_steps;
440537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	struct region_params_t *region_params;
441537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
442537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
443537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct msm_actuator_params_t {
444537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	enum actuator_type act_type;
445537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint8_t reg_tbl_size;
446537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint16_t data_size;
447537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint16_t init_setting_size;
448537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t i2c_addr;
449537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	enum msm_actuator_addr_type i2c_addr_type;
450537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	enum msm_actuator_data_type i2c_data_type;
451537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	struct msm_actuator_reg_params_t *reg_tbl_params;
452537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	struct reg_settings_t *init_settings;
453537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
454537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
455537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct msm_actuator_set_info_t {
456537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	struct msm_actuator_params_t actuator_params;
457537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	struct msm_actuator_tuning_params_t af_tuning_params;
458537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
459537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
460537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct msm_actuator_get_info_t {
461537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t focal_length_num;
462537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t focal_length_den;
463537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t f_number_num;
464537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t f_number_den;
465537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t f_pix_num;
466537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t f_pix_den;
467537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t total_f_dist_num;
468537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t total_f_dist_den;
469537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t hor_view_angle_num;
470537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t hor_view_angle_den;
471537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t ver_view_angle_num;
472537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t ver_view_angle_den;
473537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
474537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
475537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanienum af_camera_name {
476537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	ACTUATOR_MAIN_CAM_0,
477537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	ACTUATOR_MAIN_CAM_1,
478537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	ACTUATOR_MAIN_CAM_2,
479537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	ACTUATOR_MAIN_CAM_3,
480537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	ACTUATOR_MAIN_CAM_4,
481537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	ACTUATOR_MAIN_CAM_5,
482537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	ACTUATOR_WEB_CAM_0,
483537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	ACTUATOR_WEB_CAM_1,
484537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	ACTUATOR_WEB_CAM_2,
485537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
486537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
487537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct msm_actuator_cfg_data {
488537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	int cfgtype;
489537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint8_t is_af_supported;
490537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	union {
491537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani		struct msm_actuator_move_params_t move;
492537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani		struct msm_actuator_set_info_t set_info;
493537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani		struct msm_actuator_get_info_t get_info;
494537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani		enum af_camera_name cam_name;
495537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	} cfg;
496537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
497537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
498537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanienum msm_actuator_write_type {
499537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	MSM_ACTUATOR_WRITE_HW_DAMP,
500537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	MSM_ACTUATOR_WRITE_DAC,
501537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
502537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
503537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct msm_actuator_reg_params_t {
504537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	enum msm_actuator_write_type reg_write_type;
505537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint32_t hw_mask;
506537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint16_t reg_addr;
507537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint16_t hw_shift;
508537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	uint16_t data_shift;
509537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
510537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
511537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanienum msm_camera_led_config_t {
512537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	MSM_CAMERA_LED_OFF,
513537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	MSM_CAMERA_LED_LOW,
514537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	MSM_CAMERA_LED_HIGH,
515537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	MSM_CAMERA_LED_INIT,
516537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	MSM_CAMERA_LED_RELEASE,
517537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
518537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
519537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudanistruct msm_camera_led_cfg_t {
520537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	enum msm_camera_led_config_t cfgtype;
521537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani};
522537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
523537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define VIDIOC_MSM_SENSOR_CFG \
524537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	_IOWR('V', BASE_VIDIOC_PRIVATE + 1, struct sensorb_cfg_data)
525537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
526537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define VIDIOC_MSM_SENSOR_RELEASE \
527537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	_IO('V', BASE_VIDIOC_PRIVATE + 2)
528537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
529537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define VIDIOC_MSM_SENSOR_GET_SUBDEV_ID \
530537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	_IOWR('V', BASE_VIDIOC_PRIVATE + 3, uint32_t)
531537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
532537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define VIDIOC_MSM_CSIPHY_IO_CFG \
533537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	_IOWR('V', BASE_VIDIOC_PRIVATE + 4, struct csid_cfg_data)
534537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
535537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define VIDIOC_MSM_CSID_IO_CFG \
536537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	_IOWR('V', BASE_VIDIOC_PRIVATE + 5, struct csiphy_cfg_data)
537537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
538537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define VIDIOC_MSM_ACTUATOR_CFG \
539537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	_IOWR('V', BASE_VIDIOC_PRIVATE + 6, struct msm_actuator_cfg_data)
540537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
541537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define VIDIOC_MSM_FLASH_LED_DATA_CFG \
542537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	_IOWR('V', BASE_VIDIOC_PRIVATE + 7, struct msm_camera_led_cfg_t)
543537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
544537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define VIDIOC_MSM_EEPROM_CFG \
545537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani	_IOWR('V', BASE_VIDIOC_PRIVATE + 8, struct msm_eeprom_cfg_data)
546537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
547537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#define MSM_V4L2_PIX_FMT_META v4l2_fourcc('M', 'E', 'T', 'A') /* META */
548537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani
549537a84edd4d8369012dbe56730096d1eb3e0401dAjay Dudani#endif /* __LINUX_MSM_CAM_SENSOR_H */
550