• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #ifndef __LINUX_MSM_CAMSENSOR_SDK_H
2 #define __LINUX_MSM_CAMSENSOR_SDK_H
3 
4 #define KVERSION 0x1
5 
6 #define MAX_POWER_CONFIG      12
7 #define GPIO_OUT_LOW          (0 << 1)
8 #define GPIO_OUT_HIGH         (1 << 1)
9 #define CSI_EMBED_DATA        0x12
10 #define CSI_RESERVED_DATA_0   0x13
11 #define CSI_YUV422_8          0x1E
12 #define CSI_RAW8              0x2A
13 #define CSI_RAW10             0x2B
14 #define CSI_RAW12             0x2C
15 #define CSI_DECODE_6BIT         0
16 #define CSI_DECODE_8BIT         1
17 #define CSI_DECODE_10BIT        2
18 #define CSI_DECODE_DPCM_10_8_10 5
19 #define MAX_CID                 16
20 #define I2C_SEQ_REG_DATA_MAX    256
21 #define I2C_REG_DATA_MAX       (8*1024)
22 
23 #define MAX_ACTUATOR_REG_TBL_SIZE 8
24 #define MAX_ACTUATOR_REGION       5
25 #define NUM_ACTUATOR_DIR          2
26 #define MAX_ACTUATOR_SCENARIO     8
27 #define MAX_ACT_MOD_NAME_SIZE     32
28 #define MAX_ACT_NAME_SIZE         32
29 #define MAX_ACTUATOR_INIT_SET     120
30 #define MAX_I2C_REG_SET           12
31 
32 #define MAX_NAME_SIZE             32
33 #define MAX_LED_TRIGGERS          3
34 
35 enum msm_sensor_camera_id_t {
36 	CAMERA_0,
37 	CAMERA_1,
38 	CAMERA_2,
39 	CAMERA_3,
40 	MAX_CAMERAS,
41 };
42 
43 enum i2c_freq_mode_t {
44 	I2C_STANDARD_MODE,
45 	I2C_FAST_MODE,
46 	I2C_CUSTOM_MODE,
47 	I2C_FAST_PLUS_MODE,
48 	I2C_MAX_MODES,
49 };
50 
51 enum camb_position_t {
52 	BACK_CAMERA_B,
53 	FRONT_CAMERA_B,
54 	INVALID_CAMERA_B,
55 };
56 
57 enum msm_sensor_power_seq_type_t {
58 	SENSOR_CLK,
59 	SENSOR_GPIO,
60 	SENSOR_VREG,
61 	SENSOR_I2C_MUX,
62 	SENSOR_I2C,
63 };
64 
65 enum msm_camera_i2c_reg_addr_type {
66 	MSM_CAMERA_I2C_BYTE_ADDR = 1,
67 	MSM_CAMERA_I2C_WORD_ADDR,
68 	MSM_CAMERA_I2C_3B_ADDR,
69 	MSM_CAMERA_I2C_ADDR_TYPE_MAX,
70 };
71 
72 enum msm_camera_i2c_data_type {
73 	MSM_CAMERA_I2C_BYTE_DATA = 1,
74 	MSM_CAMERA_I2C_WORD_DATA,
75 	MSM_CAMERA_I2C_DWORD_DATA,
76 	MSM_CAMERA_I2C_SET_BYTE_MASK,
77 	MSM_CAMERA_I2C_UNSET_BYTE_MASK,
78 	MSM_CAMERA_I2C_SET_WORD_MASK,
79 	MSM_CAMERA_I2C_UNSET_WORD_MASK,
80 	MSM_CAMERA_I2C_SET_BYTE_WRITE_MASK_DATA,
81 	MSM_CAMERA_I2C_DATA_TYPE_MAX,
82 };
83 
84 enum msm_sensor_power_seq_gpio_t {
85 	SENSOR_GPIO_RESET,
86 	SENSOR_GPIO_STANDBY,
87 	SENSOR_GPIO_AF_PWDM,
88 	SENSOR_GPIO_VIO,
89 	SENSOR_GPIO_VANA,
90 	SENSOR_GPIO_VDIG,
91 	SENSOR_GPIO_VAF,
92 	SENSOR_GPIO_FL_EN,
93 	SENSOR_GPIO_FL_NOW,
94 	SENSOR_GPIO_FL_RESET,
95 	SENSOR_GPIO_CUSTOM1,
96 	SENSOR_GPIO_CUSTOM2,
97 	SENSOR_GPIO_MAX,
98 };
99 
100 enum msm_camera_vreg_name_t {
101 	CAM_VDIG,
102 	CAM_VIO,
103 	CAM_VANA,
104 	CAM_VAF,
105 	CAM_V_CUSTOM1,
106 	CAM_V_CUSTOM2,
107 	CAM_VREG_MAX,
108 };
109 
110 enum msm_sensor_clk_type_t {
111 	SENSOR_CAM_MCLK,
112 	SENSOR_CAM_CLK,
113 	SENSOR_CAM_CLK_MAX,
114 };
115 
116 enum camerab_mode_t {
117 	CAMERA_MODE_2D_B = (1<<0),
118 	CAMERA_MODE_3D_B = (1<<1),
119 	CAMERA_MODE_INVALID = (1<<2),
120 };
121 
122 enum sensor_stats_type {
123 	YRGB,
124 	YYYY,
125 };
126 
127 enum msm_actuator_data_type {
128 	MSM_ACTUATOR_BYTE_DATA = 1,
129 	MSM_ACTUATOR_WORD_DATA,
130 };
131 
132 enum msm_actuator_addr_type {
133 	MSM_ACTUATOR_BYTE_ADDR = 1,
134 	MSM_ACTUATOR_WORD_ADDR,
135 };
136 
137 enum msm_actuator_write_type {
138 	MSM_ACTUATOR_WRITE_HW_DAMP,
139 	MSM_ACTUATOR_WRITE_DAC,
140 	MSM_ACTUATOR_WRITE,
141 	MSM_ACTUATOR_WRITE_DIR_REG,
142 	MSM_ACTUATOR_POLL,
143 	MSM_ACTUATOR_READ_WRITE,
144 };
145 
146 enum msm_actuator_i2c_operation {
147 	MSM_ACT_WRITE = 0,
148 	MSM_ACT_POLL,
149 };
150 
151 enum actuator_type {
152 	ACTUATOR_VCM,
153 	ACTUATOR_PIEZO,
154 	ACTUATOR_HVCM,
155 	ACTUATOR_BIVCM,
156 };
157 
158 enum msm_flash_driver_type {
159 	FLASH_DRIVER_PMIC,
160 	FLASH_DRIVER_I2C,
161 	FLASH_DRIVER_GPIO,
162 	FLASH_DRIVER_DEFAULT
163 };
164 
165 enum msm_flash_cfg_type_t {
166 	CFG_FLASH_INIT,
167 	CFG_FLASH_RELEASE,
168 	CFG_FLASH_OFF,
169 	CFG_FLASH_LOW,
170 	CFG_FLASH_HIGH,
171 };
172 
173 struct msm_sensor_power_setting {
174 	enum msm_sensor_power_seq_type_t seq_type;
175 	unsigned short seq_val;
176 	long config_val;
177 	unsigned short delay;
178 	void *data[10];
179 };
180 
181 struct msm_sensor_power_setting_array {
182 	struct msm_sensor_power_setting  power_setting_a[MAX_POWER_CONFIG];
183 	struct msm_sensor_power_setting *power_setting;
184 	unsigned short size;
185 	struct msm_sensor_power_setting  power_down_setting_a[MAX_POWER_CONFIG];
186 	struct msm_sensor_power_setting *power_down_setting;
187 	unsigned short size_down;
188 };
189 
190 struct msm_sensor_init_params {
191 	/* mask of modes supported: 2D, 3D */
192 	int                 modes_supported;
193 	/* sensor position: front, back */
194 	enum camb_position_t position;
195 	/* sensor mount angle */
196 	unsigned int            sensor_mount_angle;
197 };
198 
199 struct msm_sensor_id_info_t {
200 	unsigned short sensor_id_reg_addr;
201 	unsigned short sensor_id;
202 	unsigned short sensor_id_mask;
203 	unsigned short camera_id_pin;
204 };
205 
206 struct msm_camera_sensor_slave_info {
207 	char sensor_name[32];
208 	char eeprom_name[32];
209 	char actuator_name[32];
210 	char ois_name[32];
211 	char flash_name[32];
212 	enum msm_sensor_camera_id_t camera_id;
213 	unsigned short slave_addr;
214 	enum i2c_freq_mode_t i2c_freq_mode;
215 	enum msm_camera_i2c_reg_addr_type addr_type;
216 	struct msm_sensor_id_info_t sensor_id_info;
217 	struct msm_sensor_power_setting_array power_setting_array;
218 	unsigned char  is_init_params_valid;
219 	struct msm_sensor_init_params sensor_init_params;
220 	unsigned char is_flash_supported;
221 };
222 
223 struct msm_camera_i2c_reg_array {
224 	unsigned short reg_addr;
225 	unsigned short reg_data;
226 	unsigned int delay;
227 };
228 
229 struct msm_camera_i2c_reg_setting {
230 	struct msm_camera_i2c_reg_array *reg_setting;
231 	unsigned short size;
232 	enum msm_camera_i2c_reg_addr_type addr_type;
233 	enum msm_camera_i2c_data_type data_type;
234 	unsigned short delay;
235 };
236 
237 struct msm_camera_csid_vc_cfg {
238 	unsigned char cid;
239 	unsigned char dt;
240 	unsigned char decode_format;
241 };
242 
243 struct msm_camera_csid_lut_params {
244 	unsigned char num_cid;
245 	struct msm_camera_csid_vc_cfg vc_cfg_a[MAX_CID];
246 	struct msm_camera_csid_vc_cfg *vc_cfg[MAX_CID];
247 };
248 
249 struct msm_camera_csid_params {
250 	unsigned char lane_cnt;
251 	unsigned short lane_assign;
252 	unsigned char phy_sel;
253 	unsigned int csi_clk;
254 	struct msm_camera_csid_lut_params lut_params;
255 };
256 
257 struct msm_camera_csiphy_params {
258 	unsigned char lane_cnt;
259 	unsigned char settle_cnt;
260 	unsigned short lane_mask;
261 	unsigned char combo_mode;
262 	unsigned char csid_core;
263 	unsigned int csiphy_clk;
264 };
265 
266 struct msm_camera_i2c_seq_reg_array {
267 	unsigned short reg_addr;
268 	unsigned char reg_data[I2C_SEQ_REG_DATA_MAX];
269 	unsigned short reg_data_size;
270 };
271 
272 struct msm_camera_i2c_seq_reg_setting {
273 	struct msm_camera_i2c_seq_reg_array *reg_setting;
274 	unsigned short size;
275 	enum msm_camera_i2c_reg_addr_type addr_type;
276 	unsigned short delay;
277 };
278 
279 struct msm_actuator_reg_params_t {
280 	enum msm_actuator_write_type reg_write_type;
281 	unsigned int hw_mask;
282 	unsigned short reg_addr;
283 	unsigned short hw_shift;
284 	unsigned short data_shift;
285 	unsigned short data_type;
286 	unsigned short addr_type;
287 	unsigned short reg_data;
288 	unsigned short delay;
289 };
290 
291 
292 struct damping_params_t {
293 	unsigned int damping_step;
294 	unsigned int damping_delay;
295 	unsigned int hw_params;
296 };
297 
298 struct region_params_t {
299 	/* [0] = ForwardDirection Macro boundary
300 	   [1] = ReverseDirection Inf boundary
301 	*/
302 	unsigned short step_bound[2];
303 	unsigned short code_per_step;
304 	/* qvalue for converting float type numbers to integer format */
305 	unsigned int qvalue;
306 };
307 
308 struct reg_settings_t {
309 	unsigned short reg_addr;
310 	enum msm_actuator_addr_type addr_type;
311 	unsigned short reg_data;
312 	enum msm_actuator_data_type data_type;
313 	enum msm_actuator_i2c_operation i2c_operation;
314 	unsigned int delay;
315 };
316 
317 struct msm_camera_i2c_reg_setting_array {
318 	struct msm_camera_i2c_reg_array reg_setting_a[MAX_I2C_REG_SET];
319 	unsigned short size;
320 	enum msm_camera_i2c_reg_addr_type addr_type;
321 	enum msm_camera_i2c_data_type data_type;
322 	unsigned short delay;
323 };
324 #endif /* __LINUX_MSM_CAM_SENSOR_H */
325