1#ifndef __LINUX_MSM_CAM_SENSOR_H
2#define __LINUX_MSM_CAM_SENSOR_H
3
4#ifdef MSM_CAMERA_BIONIC
5#include <sys/types.h>
6#endif
7
8#include <linux/v4l2-mediabus.h>
9#include <media/msm_camsensor_sdk.h>
10
11#include <linux/types.h>
12#include <linux/i2c.h>
13#ifdef CONFIG_COMPAT
14#include <linux/compat.h>
15#endif
16
17#define I2C_SEQ_REG_SETTING_MAX   5
18
19#define MSM_SENSOR_MCLK_8HZ   8000000
20#define MSM_SENSOR_MCLK_16HZ  16000000
21#define MSM_SENSOR_MCLK_24HZ  24000000
22
23#define MAX_SENSOR_NAME 32
24#define MAX_ACTUATOR_AF_TOTAL_STEPS 1024
25
26#define MAX_OIS_MOD_NAME_SIZE 32
27#define MAX_OIS_NAME_SIZE 32
28#define MAX_OIS_REG_SETTINGS 800
29
30#define MOVE_NEAR 0
31#define MOVE_FAR  1
32
33#define MSM_ACTUATOR_MOVE_SIGNED_FAR -1
34#define MSM_ACTUATOR_MOVE_SIGNED_NEAR  1
35
36#define MAX_EEPROM_NAME 32
37
38#define MAX_AF_ITERATIONS 3
39#define MAX_NUMBER_OF_STEPS 47
40
41#define MSM_V4L2_PIX_FMT_META v4l2_fourcc('M', 'E', 'T', 'A') /* META */
42#define MSM_V4L2_PIX_FMT_SBGGR14 v4l2_fourcc('B', 'G', '1', '4')
43	/* 14  BGBG.. GRGR.. */
44#define MSM_V4L2_PIX_FMT_SGBRG14 v4l2_fourcc('G', 'B', '1', '4')
45	/* 14  GBGB.. RGRG.. */
46#define MSM_V4L2_PIX_FMT_SGRBG14 v4l2_fourcc('B', 'A', '1', '4')
47	/* 14  GRGR.. BGBG.. */
48#define MSM_V4L2_PIX_FMT_SRGGB14 v4l2_fourcc('R', 'G', '1', '4')
49	/* 14  RGRG.. GBGB.. */
50
51enum flash_type {
52	LED_FLASH = 1,
53	STROBE_FLASH,
54	GPIO_FLASH
55};
56
57enum msm_sensor_resolution_t {
58	MSM_SENSOR_RES_FULL,
59	MSM_SENSOR_RES_QTR,
60	MSM_SENSOR_RES_2,
61	MSM_SENSOR_RES_3,
62	MSM_SENSOR_RES_4,
63	MSM_SENSOR_RES_5,
64	MSM_SENSOR_RES_6,
65	MSM_SENSOR_RES_7,
66	MSM_SENSOR_INVALID_RES,
67};
68
69enum msm_camera_stream_type_t {
70	MSM_CAMERA_STREAM_PREVIEW,
71	MSM_CAMERA_STREAM_SNAPSHOT,
72	MSM_CAMERA_STREAM_VIDEO,
73	MSM_CAMERA_STREAM_INVALID,
74};
75
76enum sensor_sub_module_t {
77	SUB_MODULE_SENSOR,
78	SUB_MODULE_CHROMATIX,
79	SUB_MODULE_ACTUATOR,
80	SUB_MODULE_EEPROM,
81	SUB_MODULE_LED_FLASH,
82	SUB_MODULE_STROBE_FLASH,
83	SUB_MODULE_CSID,
84	SUB_MODULE_CSID_3D,
85	SUB_MODULE_CSIPHY,
86	SUB_MODULE_CSIPHY_3D,
87	SUB_MODULE_OIS,
88	SUB_MODULE_MAX,
89};
90
91enum {
92	MSM_CAMERA_EFFECT_MODE_OFF,
93	MSM_CAMERA_EFFECT_MODE_MONO,
94	MSM_CAMERA_EFFECT_MODE_NEGATIVE,
95	MSM_CAMERA_EFFECT_MODE_SOLARIZE,
96	MSM_CAMERA_EFFECT_MODE_SEPIA,
97	MSM_CAMERA_EFFECT_MODE_POSTERIZE,
98	MSM_CAMERA_EFFECT_MODE_WHITEBOARD,
99	MSM_CAMERA_EFFECT_MODE_BLACKBOARD,
100	MSM_CAMERA_EFFECT_MODE_AQUA,
101	MSM_CAMERA_EFFECT_MODE_EMBOSS,
102	MSM_CAMERA_EFFECT_MODE_SKETCH,
103	MSM_CAMERA_EFFECT_MODE_NEON,
104	MSM_CAMERA_EFFECT_MODE_MAX
105};
106
107enum {
108	MSM_CAMERA_WB_MODE_AUTO,
109	MSM_CAMERA_WB_MODE_CUSTOM,
110	MSM_CAMERA_WB_MODE_INCANDESCENT,
111	MSM_CAMERA_WB_MODE_FLUORESCENT,
112	MSM_CAMERA_WB_MODE_WARM_FLUORESCENT,
113	MSM_CAMERA_WB_MODE_DAYLIGHT,
114	MSM_CAMERA_WB_MODE_CLOUDY_DAYLIGHT,
115	MSM_CAMERA_WB_MODE_TWILIGHT,
116	MSM_CAMERA_WB_MODE_SHADE,
117	MSM_CAMERA_WB_MODE_OFF,
118	MSM_CAMERA_WB_MODE_MAX
119};
120
121enum {
122	MSM_CAMERA_SCENE_MODE_OFF,
123	MSM_CAMERA_SCENE_MODE_AUTO,
124	MSM_CAMERA_SCENE_MODE_LANDSCAPE,
125	MSM_CAMERA_SCENE_MODE_SNOW,
126	MSM_CAMERA_SCENE_MODE_BEACH,
127	MSM_CAMERA_SCENE_MODE_SUNSET,
128	MSM_CAMERA_SCENE_MODE_NIGHT,
129	MSM_CAMERA_SCENE_MODE_PORTRAIT,
130	MSM_CAMERA_SCENE_MODE_BACKLIGHT,
131	MSM_CAMERA_SCENE_MODE_SPORTS,
132	MSM_CAMERA_SCENE_MODE_ANTISHAKE,
133	MSM_CAMERA_SCENE_MODE_FLOWERS,
134	MSM_CAMERA_SCENE_MODE_CANDLELIGHT,
135	MSM_CAMERA_SCENE_MODE_FIREWORKS,
136	MSM_CAMERA_SCENE_MODE_PARTY,
137	MSM_CAMERA_SCENE_MODE_NIGHT_PORTRAIT,
138	MSM_CAMERA_SCENE_MODE_THEATRE,
139	MSM_CAMERA_SCENE_MODE_ACTION,
140	MSM_CAMERA_SCENE_MODE_AR,
141	MSM_CAMERA_SCENE_MODE_FACE_PRIORITY,
142	MSM_CAMERA_SCENE_MODE_BARCODE,
143	MSM_CAMERA_SCENE_MODE_HDR,
144	MSM_CAMERA_SCENE_MODE_MAX
145};
146
147enum csid_cfg_type_t {
148	CSID_INIT,
149	CSID_CFG,
150	CSID_RELEASE,
151};
152
153enum csiphy_cfg_type_t {
154	CSIPHY_INIT,
155	CSIPHY_CFG,
156	CSIPHY_RELEASE,
157};
158
159enum camera_vreg_type {
160	VREG_TYPE_DEFAULT,
161	VREG_TYPE_CUSTOM,
162};
163
164enum sensor_af_t {
165	SENSOR_AF_FOCUSSED,
166	SENSOR_AF_NOT_FOCUSSED,
167};
168
169enum cci_i2c_master_t {
170	MASTER_0,
171	MASTER_1,
172	MASTER_MAX,
173};
174
175struct msm_camera_i2c_array_write_config {
176	struct msm_camera_i2c_reg_setting conf_array;
177	uint16_t slave_addr;
178};
179
180struct msm_camera_i2c_read_config {
181	uint16_t slave_addr;
182	uint16_t reg_addr;
183	enum msm_camera_i2c_data_type data_type;
184	uint16_t data;
185};
186
187struct msm_camera_csi2_params {
188	struct msm_camera_csid_params csid_params;
189	struct msm_camera_csiphy_params csiphy_params;
190	uint8_t csi_clk_scale_enable;
191};
192
193struct msm_camera_csi_lane_params {
194	uint16_t csi_lane_assign;
195	uint16_t csi_lane_mask;
196};
197
198struct csi_lane_params_t {
199	uint16_t csi_lane_assign;
200	uint8_t csi_lane_mask;
201	uint8_t csi_if;
202	int8_t csid_core[2];
203	uint8_t csi_phy_sel;
204};
205
206struct msm_sensor_info_t {
207	char     sensor_name[MAX_SENSOR_NAME];
208	uint32_t session_id;
209	int32_t  subdev_id[SUB_MODULE_MAX];
210	int32_t  subdev_intf[SUB_MODULE_MAX];
211	uint8_t  is_mount_angle_valid;
212	uint32_t sensor_mount_angle;
213	int modes_supported;
214	enum camb_position_t position;
215};
216
217struct camera_vreg_t {
218	const char *reg_name;
219	int min_voltage;
220	int max_voltage;
221	int op_mode;
222	uint32_t delay;
223	const char *custom_vreg_name;
224	enum camera_vreg_type type;
225};
226
227struct sensorb_cfg_data {
228	int cfgtype;
229	union {
230		struct msm_sensor_info_t      sensor_info;
231		struct msm_sensor_init_params sensor_init_params;
232		void                         *setting;
233	} cfg;
234};
235
236struct csid_cfg_data {
237	enum csid_cfg_type_t cfgtype;
238	union {
239		uint32_t csid_version;
240		struct msm_camera_csid_params *csid_params;
241	} cfg;
242};
243
244struct csiphy_cfg_data {
245	enum csiphy_cfg_type_t cfgtype;
246	union {
247		struct msm_camera_csiphy_params *csiphy_params;
248		struct msm_camera_csi_lane_params *csi_lane_params;
249	} cfg;
250};
251
252enum eeprom_cfg_type_t {
253	CFG_EEPROM_GET_INFO,
254	CFG_EEPROM_GET_CAL_DATA,
255	CFG_EEPROM_READ_CAL_DATA,
256	CFG_EEPROM_WRITE_DATA,
257	CFG_EEPROM_GET_MM_INFO,
258};
259
260struct eeprom_get_t {
261	uint32_t num_bytes;
262};
263
264struct eeprom_read_t {
265	uint8_t *dbuffer;
266	uint32_t num_bytes;
267};
268
269struct eeprom_write_t {
270	uint8_t *dbuffer;
271	uint32_t num_bytes;
272};
273
274struct eeprom_get_cmm_t {
275	uint32_t cmm_support;
276	uint32_t cmm_compression;
277	uint32_t cmm_size;
278};
279
280struct msm_eeprom_cfg_data {
281	enum eeprom_cfg_type_t cfgtype;
282	uint8_t is_supported;
283	union {
284		char eeprom_name[MAX_SENSOR_NAME];
285		struct eeprom_get_t get_data;
286		struct eeprom_read_t read_data;
287		struct eeprom_write_t write_data;
288		struct eeprom_get_cmm_t get_cmm_data;
289	} cfg;
290};
291
292#ifdef CONFIG_COMPAT
293struct msm_sensor_power_setting32 {
294	enum msm_sensor_power_seq_type_t seq_type;
295	uint16_t seq_val;
296	compat_uint_t config_val;
297	uint16_t delay;
298	compat_uptr_t data[10];
299};
300
301struct msm_sensor_power_setting_array32 {
302	struct msm_sensor_power_setting32 power_setting_a[MAX_POWER_CONFIG];
303	compat_uptr_t power_setting;
304	uint16_t size;
305	struct msm_sensor_power_setting32
306		power_down_setting_a[MAX_POWER_CONFIG];
307	compat_uptr_t power_down_setting;
308	uint16_t size_down;
309};
310
311struct msm_camera_sensor_slave_info32 {
312	char sensor_name[32];
313	char eeprom_name[32];
314	char actuator_name[32];
315	char ois_name[32];
316	char flash_name[32];
317	enum msm_sensor_camera_id_t camera_id;
318	uint16_t slave_addr;
319	enum i2c_freq_mode_t i2c_freq_mode;
320	enum msm_camera_i2c_reg_addr_type addr_type;
321	struct msm_sensor_id_info_t sensor_id_info;
322	struct msm_sensor_power_setting_array32 power_setting_array;
323	uint8_t  is_init_params_valid;
324	struct msm_sensor_init_params sensor_init_params;
325	uint8_t is_flash_supported;
326};
327
328struct msm_camera_csid_lut_params32 {
329	uint8_t num_cid;
330	struct msm_camera_csid_vc_cfg vc_cfg_a[MAX_CID];
331	compat_uptr_t vc_cfg[MAX_CID];
332};
333
334struct msm_camera_csid_params32 {
335	uint8_t lane_cnt;
336	uint16_t lane_assign;
337	uint8_t phy_sel;
338	uint32_t csi_clk;
339	struct msm_camera_csid_lut_params32 lut_params;
340};
341
342struct msm_camera_csi2_params32 {
343	struct msm_camera_csid_params32 csid_params;
344	struct msm_camera_csiphy_params csiphy_params;
345	uint8_t csi_clk_scale_enable;
346};
347
348struct csid_cfg_data32 {
349	enum csid_cfg_type_t cfgtype;
350	union {
351		uint32_t csid_version;
352		compat_uptr_t csid_params;
353	} cfg;
354};
355
356struct eeprom_read_t32 {
357	compat_uptr_t dbuffer;
358	uint32_t num_bytes;
359};
360
361struct eeprom_write_t32 {
362	compat_uptr_t dbuffer;
363	uint32_t num_bytes;
364};
365
366struct msm_eeprom_cfg_data32 {
367	enum eeprom_cfg_type_t cfgtype;
368	uint8_t is_supported;
369	union {
370		char eeprom_name[MAX_SENSOR_NAME];
371		struct eeprom_get_t get_data;
372		struct eeprom_read_t32 read_data;
373		struct eeprom_write_t32 write_data;
374	} cfg;
375};
376
377struct msm_camera_i2c_seq_reg_setting32 {
378	compat_uptr_t reg_setting;
379	uint16_t size;
380	enum msm_camera_i2c_reg_addr_type addr_type;
381	uint16_t delay;
382};
383#endif
384
385enum msm_sensor_cfg_type_t {
386	CFG_SET_SLAVE_INFO,
387	CFG_SLAVE_READ_I2C,
388	CFG_WRITE_I2C_ARRAY,
389	CFG_SLAVE_WRITE_I2C_ARRAY,
390	CFG_WRITE_I2C_SEQ_ARRAY,
391	CFG_POWER_UP,
392	CFG_POWER_DOWN,
393	CFG_SET_STOP_STREAM_SETTING,
394	CFG_GET_SENSOR_INFO,
395	CFG_GET_SENSOR_INIT_PARAMS,
396	CFG_SET_INIT_SETTING,
397	CFG_SET_RESOLUTION,
398	CFG_SET_STOP_STREAM,
399	CFG_SET_START_STREAM,
400	CFG_SET_SATURATION,
401	CFG_SET_CONTRAST,
402	CFG_SET_SHARPNESS,
403	CFG_SET_ISO,
404	CFG_SET_EXPOSURE_COMPENSATION,
405	CFG_SET_ANTIBANDING,
406	CFG_SET_BESTSHOT_MODE,
407	CFG_SET_EFFECT,
408	CFG_SET_WHITE_BALANCE,
409	CFG_SET_AUTOFOCUS,
410	CFG_CANCEL_AUTOFOCUS,
411	CFG_SET_STREAM_TYPE,
412};
413
414enum msm_actuator_cfg_type_t {
415	CFG_GET_ACTUATOR_INFO,
416	CFG_SET_ACTUATOR_INFO,
417	CFG_SET_DEFAULT_FOCUS,
418	CFG_MOVE_FOCUS,
419	CFG_SET_POSITION,
420	CFG_ACTUATOR_POWERDOWN,
421	CFG_ACTUATOR_POWERUP,
422	CFG_ACTUATOR_INIT,
423};
424
425enum msm_ois_cfg_type_t {
426	CFG_OIS_INIT,
427	CFG_OIS_POWERDOWN,
428	CFG_OIS_POWERUP,
429	CFG_OIS_CONTROL,
430	CFG_OIS_I2C_WRITE_SEQ_TABLE,
431};
432
433enum msm_ois_i2c_operation {
434	MSM_OIS_WRITE = 0,
435	MSM_OIS_POLL,
436};
437
438struct reg_settings_ois_t {
439	uint16_t reg_addr;
440	enum msm_camera_i2c_reg_addr_type addr_type;
441	uint32_t reg_data;
442	enum msm_camera_i2c_data_type data_type;
443	enum msm_ois_i2c_operation i2c_operation;
444	uint32_t delay;
445};
446
447struct msm_ois_params_t {
448	uint16_t data_size;
449	uint16_t setting_size;
450	uint32_t i2c_addr;
451	enum msm_camera_i2c_reg_addr_type i2c_addr_type;
452	enum msm_camera_i2c_data_type i2c_data_type;
453	struct reg_settings_ois_t *settings;
454};
455
456struct msm_ois_set_info_t {
457	struct msm_ois_params_t ois_params;
458};
459
460struct msm_actuator_move_params_t {
461	int8_t dir;
462	int8_t sign_dir;
463	int16_t dest_step_pos;
464	int32_t num_steps;
465	uint16_t curr_lens_pos;
466	struct damping_params_t *ringing_params;
467};
468
469struct msm_actuator_tuning_params_t {
470	int16_t initial_code;
471	uint16_t pwd_step;
472	uint16_t region_size;
473	uint32_t total_steps;
474	struct region_params_t *region_params;
475};
476
477struct park_lens_data_t {
478	uint32_t damping_step;
479	uint32_t damping_delay;
480	uint32_t hw_params;
481	uint32_t max_step;
482};
483
484struct msm_actuator_params_t {
485	enum actuator_type act_type;
486	uint8_t reg_tbl_size;
487	uint16_t data_size;
488	uint16_t init_setting_size;
489	uint32_t i2c_addr;
490	enum msm_actuator_addr_type i2c_addr_type;
491	enum msm_actuator_data_type i2c_data_type;
492	struct msm_actuator_reg_params_t *reg_tbl_params;
493	struct reg_settings_t *init_settings;
494	struct park_lens_data_t park_lens;
495};
496
497struct msm_actuator_set_info_t {
498	struct msm_actuator_params_t actuator_params;
499	struct msm_actuator_tuning_params_t af_tuning_params;
500};
501
502struct msm_actuator_get_info_t {
503	uint32_t focal_length_num;
504	uint32_t focal_length_den;
505	uint32_t f_number_num;
506	uint32_t f_number_den;
507	uint32_t f_pix_num;
508	uint32_t f_pix_den;
509	uint32_t total_f_dist_num;
510	uint32_t total_f_dist_den;
511	uint32_t hor_view_angle_num;
512	uint32_t hor_view_angle_den;
513	uint32_t ver_view_angle_num;
514	uint32_t ver_view_angle_den;
515};
516
517enum af_camera_name {
518	ACTUATOR_MAIN_CAM_0,
519	ACTUATOR_MAIN_CAM_1,
520	ACTUATOR_MAIN_CAM_2,
521	ACTUATOR_MAIN_CAM_3,
522	ACTUATOR_MAIN_CAM_4,
523	ACTUATOR_MAIN_CAM_5,
524	ACTUATOR_WEB_CAM_0,
525	ACTUATOR_WEB_CAM_1,
526	ACTUATOR_WEB_CAM_2,
527};
528
529struct msm_ois_cfg_data {
530	int cfgtype;
531	union {
532		struct msm_ois_set_info_t set_info;
533		struct msm_camera_i2c_seq_reg_setting *settings;
534	} cfg;
535};
536
537struct msm_actuator_set_position_t {
538	uint16_t number_of_steps;
539	uint32_t hw_params;
540	uint16_t pos[MAX_NUMBER_OF_STEPS];
541	uint16_t delay[MAX_NUMBER_OF_STEPS];
542};
543
544struct msm_actuator_cfg_data {
545	int cfgtype;
546	uint8_t is_af_supported;
547	union {
548		struct msm_actuator_move_params_t move;
549		struct msm_actuator_set_info_t set_info;
550		struct msm_actuator_get_info_t get_info;
551		struct msm_actuator_set_position_t setpos;
552		enum af_camera_name cam_name;
553	} cfg;
554};
555
556enum msm_camera_led_config_t {
557	MSM_CAMERA_LED_OFF,
558	MSM_CAMERA_LED_LOW,
559	MSM_CAMERA_LED_HIGH,
560	MSM_CAMERA_LED_INIT,
561	MSM_CAMERA_LED_RELEASE,
562};
563
564struct msm_camera_led_cfg_t {
565	enum msm_camera_led_config_t cfgtype;
566	int32_t torch_current[MAX_LED_TRIGGERS];
567	int32_t flash_current[MAX_LED_TRIGGERS];
568	int32_t flash_duration[MAX_LED_TRIGGERS];
569};
570
571struct msm_flash_init_info_t {
572	enum msm_flash_driver_type flash_driver_type;
573	uint32_t slave_addr;
574	struct msm_sensor_power_setting_array *power_setting_array;
575	struct msm_camera_i2c_reg_setting_array *settings;
576};
577
578struct msm_flash_cfg_data_t {
579	enum msm_flash_cfg_type_t cfg_type;
580	int32_t flash_current[MAX_LED_TRIGGERS];
581	int32_t flash_duration[MAX_LED_TRIGGERS];
582	union {
583		struct msm_flash_init_info_t *flash_init_info;
584		struct msm_camera_i2c_reg_setting_array *settings;
585	} cfg;
586};
587
588/* sensor init structures and enums */
589enum msm_sensor_init_cfg_type_t {
590	CFG_SINIT_PROBE,
591	CFG_SINIT_PROBE_DONE,
592	CFG_SINIT_PROBE_WAIT_DONE,
593};
594
595struct sensor_init_cfg_data {
596	enum msm_sensor_init_cfg_type_t cfgtype;
597	struct msm_sensor_info_t        probed_info;
598	char                            entity_name[MAX_SENSOR_NAME];
599	union {
600		void *setting;
601	} cfg;
602};
603
604#define VIDIOC_MSM_SENSOR_CFG \
605	_IOWR('V', BASE_VIDIOC_PRIVATE + 1, struct sensorb_cfg_data)
606
607#define VIDIOC_MSM_SENSOR_RELEASE \
608	_IO('V', BASE_VIDIOC_PRIVATE + 2)
609
610#define VIDIOC_MSM_SENSOR_GET_SUBDEV_ID \
611	_IOWR('V', BASE_VIDIOC_PRIVATE + 3, uint32_t)
612
613#define VIDIOC_MSM_CSIPHY_IO_CFG \
614	_IOWR('V', BASE_VIDIOC_PRIVATE + 4, struct csiphy_cfg_data)
615
616#define VIDIOC_MSM_CSID_IO_CFG \
617	_IOWR('V', BASE_VIDIOC_PRIVATE + 5, struct csid_cfg_data)
618
619#define VIDIOC_MSM_ACTUATOR_CFG \
620	_IOWR('V', BASE_VIDIOC_PRIVATE + 6, struct msm_actuator_cfg_data)
621
622#define VIDIOC_MSM_FLASH_LED_DATA_CFG \
623	_IOWR('V', BASE_VIDIOC_PRIVATE + 7, struct msm_camera_led_cfg_t)
624
625#define VIDIOC_MSM_EEPROM_CFG \
626	_IOWR('V', BASE_VIDIOC_PRIVATE + 8, struct msm_eeprom_cfg_data)
627
628#define VIDIOC_MSM_SENSOR_GET_AF_STATUS \
629	_IOWR('V', BASE_VIDIOC_PRIVATE + 9, uint32_t)
630
631#define VIDIOC_MSM_SENSOR_INIT_CFG \
632	_IOWR('V', BASE_VIDIOC_PRIVATE + 10, struct sensor_init_cfg_data)
633
634#define VIDIOC_MSM_OIS_CFG \
635	_IOWR('V', BASE_VIDIOC_PRIVATE + 11, struct msm_ois_cfg_data)
636
637#define VIDIOC_MSM_FLASH_CFG \
638	_IOWR('V', BASE_VIDIOC_PRIVATE + 13, struct msm_flash_cfg_data_t)
639
640#ifdef CONFIG_COMPAT
641struct msm_camera_i2c_reg_setting32 {
642	compat_uptr_t reg_setting;
643	uint16_t size;
644	enum msm_camera_i2c_reg_addr_type addr_type;
645	enum msm_camera_i2c_data_type data_type;
646	uint16_t delay;
647};
648
649struct msm_actuator_tuning_params_t32 {
650	int16_t initial_code;
651	uint16_t pwd_step;
652	uint16_t region_size;
653	uint32_t total_steps;
654	compat_uptr_t region_params;
655};
656
657struct msm_actuator_params_t32 {
658	enum actuator_type act_type;
659	uint8_t reg_tbl_size;
660	uint16_t data_size;
661	uint16_t init_setting_size;
662	uint32_t i2c_addr;
663	enum msm_actuator_addr_type i2c_addr_type;
664	enum msm_actuator_data_type i2c_data_type;
665	compat_uptr_t reg_tbl_params;
666	compat_uptr_t init_settings;
667	struct park_lens_data_t park_lens;
668};
669
670struct msm_actuator_set_info_t32 {
671	struct msm_actuator_params_t32 actuator_params;
672	struct msm_actuator_tuning_params_t32 af_tuning_params;
673};
674
675struct sensor_init_cfg_data32 {
676	enum msm_sensor_init_cfg_type_t cfgtype;
677	struct msm_sensor_info_t        probed_info;
678	char                            entity_name[MAX_SENSOR_NAME];
679	union {
680		compat_uptr_t setting;
681	} cfg;
682};
683
684struct msm_actuator_move_params_t32 {
685	int8_t dir;
686	int8_t sign_dir;
687	int16_t dest_step_pos;
688	int32_t num_steps;
689	uint16_t curr_lens_pos;
690	compat_uptr_t ringing_params;
691};
692
693struct msm_actuator_cfg_data32 {
694	int cfgtype;
695	uint8_t is_af_supported;
696	union {
697		struct msm_actuator_move_params_t32 move;
698		struct msm_actuator_set_info_t32 set_info;
699		struct msm_actuator_get_info_t get_info;
700		struct msm_actuator_set_position_t setpos;
701		enum af_camera_name cam_name;
702	} cfg;
703};
704
705struct csiphy_cfg_data32 {
706	enum csiphy_cfg_type_t cfgtype;
707	union {
708		compat_uptr_t csiphy_params;
709		compat_uptr_t csi_lane_params;
710	} cfg;
711};
712
713struct sensorb_cfg_data32 {
714	int cfgtype;
715	union {
716		struct msm_sensor_info_t      sensor_info;
717		struct msm_sensor_init_params sensor_init_params;
718		compat_uptr_t                 setting;
719	} cfg;
720};
721
722struct msm_ois_params_t32 {
723	uint16_t data_size;
724	uint16_t setting_size;
725	uint32_t i2c_addr;
726	enum msm_camera_i2c_reg_addr_type i2c_addr_type;
727	enum msm_camera_i2c_data_type i2c_data_type;
728	compat_uptr_t settings;
729};
730
731struct msm_ois_set_info_t32 {
732	struct msm_ois_params_t32 ois_params;
733};
734
735struct msm_ois_cfg_data32 {
736	int cfgtype;
737	union {
738		struct msm_ois_set_info_t32 set_info;
739		compat_uptr_t settings;
740	} cfg;
741};
742
743struct msm_flash_init_info_t32 {
744	enum msm_flash_driver_type flash_driver_type;
745	uint32_t slave_addr;
746	compat_uptr_t power_setting_array;
747	compat_uptr_t settings;
748};
749
750struct msm_flash_cfg_data_t32 {
751	enum msm_flash_cfg_type_t cfg_type;
752	int32_t flash_current[MAX_LED_TRIGGERS];
753	int32_t flash_duration[MAX_LED_TRIGGERS];
754	union {
755		compat_uptr_t flash_init_info;
756		compat_uptr_t settings;
757	} cfg;
758};
759
760#define VIDIOC_MSM_ACTUATOR_CFG32 \
761	_IOWR('V', BASE_VIDIOC_PRIVATE + 6, struct msm_actuator_cfg_data32)
762
763#define VIDIOC_MSM_SENSOR_INIT_CFG32 \
764	_IOWR('V', BASE_VIDIOC_PRIVATE + 10, struct sensor_init_cfg_data32)
765
766#define VIDIOC_MSM_CSIPHY_IO_CFG32 \
767	_IOWR('V', BASE_VIDIOC_PRIVATE + 4, struct csiphy_cfg_data32)
768
769#define VIDIOC_MSM_SENSOR_CFG32 \
770	_IOWR('V', BASE_VIDIOC_PRIVATE + 1, struct sensorb_cfg_data32)
771
772#define VIDIOC_MSM_EEPROM_CFG32 \
773	_IOWR('V', BASE_VIDIOC_PRIVATE + 8, struct msm_eeprom_cfg_data32)
774
775#define VIDIOC_MSM_OIS_CFG32 \
776	_IOWR('V', BASE_VIDIOC_PRIVATE + 11, struct msm_ois_cfg_data32)
777
778#define VIDIOC_MSM_CSID_IO_CFG32 \
779	_IOWR('V', BASE_VIDIOC_PRIVATE + 5, struct csid_cfg_data32)
780
781#define VIDIOC_MSM_FLASH_CFG32 \
782	_IOWR('V', BASE_VIDIOC_PRIVATE + 13, struct msm_flash_cfg_data_t32)
783#endif
784
785#endif /* __LINUX_MSM_CAM_SENSOR_H */
786