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
35enum msm_sensor_camera_id_t {
36	CAMERA_0,
37	CAMERA_1,
38	CAMERA_2,
39	CAMERA_3,
40	MAX_CAMERAS,
41};
42
43enum 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
51enum camb_position_t {
52	BACK_CAMERA_B,
53	FRONT_CAMERA_B,
54	INVALID_CAMERA_B,
55};
56
57enum msm_sensor_power_seq_type_t {
58	SENSOR_CLK,
59	SENSOR_GPIO,
60	SENSOR_VREG,
61	SENSOR_I2C_MUX,
62	SENSOR_I2C,
63};
64
65enum 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
72enum 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
84enum 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
100enum 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
110enum msm_sensor_clk_type_t {
111	SENSOR_CAM_MCLK,
112	SENSOR_CAM_CLK,
113	SENSOR_CAM_CLK_MAX,
114};
115
116enum 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
122enum sensor_stats_type {
123	YRGB,
124	YYYY,
125};
126
127enum msm_actuator_data_type {
128	MSM_ACTUATOR_BYTE_DATA = 1,
129	MSM_ACTUATOR_WORD_DATA,
130};
131
132enum msm_actuator_addr_type {
133	MSM_ACTUATOR_BYTE_ADDR = 1,
134	MSM_ACTUATOR_WORD_ADDR,
135};
136
137enum 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
146enum msm_actuator_i2c_operation {
147	MSM_ACT_WRITE = 0,
148	MSM_ACT_POLL,
149};
150
151enum actuator_type {
152	ACTUATOR_VCM,
153	ACTUATOR_PIEZO,
154	ACTUATOR_HVCM,
155	ACTUATOR_BIVCM,
156};
157
158enum msm_flash_driver_type {
159	FLASH_DRIVER_PMIC,
160	FLASH_DRIVER_I2C,
161	FLASH_DRIVER_GPIO,
162	FLASH_DRIVER_DEFAULT
163};
164
165enum 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
173struct 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
181struct 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
190struct 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
199struct 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
206struct 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
223struct msm_camera_i2c_reg_array {
224	unsigned short reg_addr;
225	unsigned short reg_data;
226	unsigned int delay;
227};
228
229struct 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
237struct msm_camera_csid_vc_cfg {
238	unsigned char cid;
239	unsigned char dt;
240	unsigned char decode_format;
241};
242
243struct 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
249struct 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
257struct 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
266struct 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
272struct 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
279struct 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
292struct damping_params_t {
293	unsigned int damping_step;
294	unsigned int damping_delay;
295	unsigned int hw_params;
296};
297
298struct 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
308struct 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
317struct 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