1 /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
2 /* Copyright (c) 2018 Fuzhou Rockchip Electronics Co., Ltd. */
3 
4 #ifndef RK_VCM_HEAD_H
5 #define RK_VCM_HEAD_H
6 
7 #define RK_VCM_HEAD_VERSION	KERNEL_VERSION(0, 0x02, 0x0)
8 /*
9  * Focus position values:
10  * 65 logical positions ( 0 - 64 )
11  * where 64 is the setting for infinity and 0 for macro
12  */
13 #define VCMDRV_MAX_LOG			64U
14 #define VCMDRV_SETZOOM_MAXCNT	300U
15 
16 #define OF_CAMERA_VCMDRV_MAX_CURRENT	"rockchip,vcm-max-current"
17 #define OF_CAMERA_VCMDRV_START_CURRENT	"rockchip,vcm-start-current"
18 #define OF_CAMERA_VCMDRV_RATED_CURRENT	"rockchip,vcm-rated-current"
19 #define OF_CAMERA_VCMDRV_STEP_MODE	"rockchip,vcm-step-mode"
20 #define OF_CAMERA_VCMDRV_DLC_ENABLE	"rockchip,vcm-dlc-enable"
21 #define OF_CAMERA_VCMDRV_MCLK		"rockchip,vcm-mclk"
22 #define OF_CAMERA_VCMDRV_T_SRC		"rockchip,vcm-t-src"
23 #define OF_CAMERA_VCMDRV_T_DIV          "rockchip,vcm-t-div"
24 #define VCMDRV_SETZOOM_MAXCNT	300U
25 
26 #define RK_VIDIOC_VCM_TIMEINFO \
27 	_IOR('V', BASE_VIDIOC_PRIVATE + 0, struct rk_cam_vcm_tim)
28 #define RK_VIDIOC_IRIS_TIMEINFO \
29 	_IOR('V', BASE_VIDIOC_PRIVATE + 1, struct rk_cam_vcm_tim)
30 #define RK_VIDIOC_ZOOM_TIMEINFO \
31 	_IOR('V', BASE_VIDIOC_PRIVATE + 2, struct rk_cam_vcm_tim)
32 
33 #define RK_VIDIOC_GET_VCM_CFG \
34 	_IOR('V', BASE_VIDIOC_PRIVATE + 3, struct rk_cam_vcm_cfg)
35 #define RK_VIDIOC_SET_VCM_CFG \
36 	_IOW('V', BASE_VIDIOC_PRIVATE + 4, struct rk_cam_vcm_cfg)
37 
38 #define RK_VIDIOC_FOCUS_CORRECTION \
39 	_IOR('V', BASE_VIDIOC_PRIVATE + 5, unsigned int)
40 #define RK_VIDIOC_IRIS_CORRECTION \
41 	_IOR('V', BASE_VIDIOC_PRIVATE + 6, unsigned int)
42 #define RK_VIDIOC_ZOOM_CORRECTION \
43 	_IOR('V', BASE_VIDIOC_PRIVATE + 7, unsigned int)
44 
45 #define RK_VIDIOC_FOCUS_SET_BACKLASH \
46 	_IOR('V', BASE_VIDIOC_PRIVATE + 8, unsigned int)
47 #define RK_VIDIOC_IRIS_SET_BACKLASH \
48 	_IOR('V', BASE_VIDIOC_PRIVATE + 9, unsigned int)
49 #define RK_VIDIOC_ZOOM_SET_BACKLASH \
50 	_IOR('V', BASE_VIDIOC_PRIVATE + 10, unsigned int)
51 
52 #define RK_VIDIOC_ZOOM1_TIMEINFO \
53 	_IOR('V', BASE_VIDIOC_PRIVATE + 11, struct rk_cam_vcm_tim)
54 #define RK_VIDIOC_ZOOM1_CORRECTION \
55 	_IOR('V', BASE_VIDIOC_PRIVATE + 12, unsigned int)
56 #define RK_VIDIOC_ZOOM1_SET_BACKLASH \
57 	_IOR('V', BASE_VIDIOC_PRIVATE + 13, unsigned int)
58 
59 #define RK_VIDIOC_ZOOM_SET_POSITION \
60 	_IOW('V', BASE_VIDIOC_PRIVATE + 14, struct rk_cam_set_zoom)
61 #define RK_VIDIOC_FOCUS_SET_POSITION \
62 	_IOW('V', BASE_VIDIOC_PRIVATE + 15, struct rk_cam_set_focus)
63 #define RK_VIDIOC_MODIFY_POSITION \
64 	_IOW('V', BASE_VIDIOC_PRIVATE + 16, struct rk_cam_modify_pos)
65 
66 #define RK_VIDIOC_COMPAT_VCM_TIMEINFO \
67 	_IOR('V', BASE_VIDIOC_PRIVATE + 0, struct rk_cam_compat_vcm_tim)
68 #define RK_VIDIOC_COMPAT_IRIS_TIMEINFO \
69 	_IOR('V', BASE_VIDIOC_PRIVATE + 1, struct rk_cam_compat_vcm_tim)
70 #define RK_VIDIOC_COMPAT_ZOOM_TIMEINFO \
71 	_IOR('V', BASE_VIDIOC_PRIVATE + 2, struct rk_cam_compat_vcm_tim)
72 #define RK_VIDIOC_COMPAT_ZOOM1_TIMEINFO \
73 	_IOR('V', BASE_VIDIOC_PRIVATE + 11, struct rk_cam_compat_vcm_tim)
74 
75 struct rk_cam_modify_pos {
76 	s32 focus_pos;
77 	s32 zoom_pos;
78 	s32 zoom1_pos;
79 };
80 
81 struct rk_cam_set_focus {
82 	bool is_need_reback;
83 	s32 focus_pos;
84 };
85 
86 struct rk_cam_zoom_pos {
87 	s32 zoom_pos;
88 	s32 focus_pos;
89 };
90 
91 struct rk_cam_set_zoom {
92 	bool is_need_zoom_reback;
93 	bool is_need_focus_reback;
94 	u32 setzoom_cnt;
95 	struct rk_cam_zoom_pos zoom_pos[VCMDRV_SETZOOM_MAXCNT];
96 };
97 
98 struct rk_cam_vcm_tim {
99 	struct __kernel_old_timeval vcm_start_t;
100 	struct __kernel_old_timeval vcm_end_t;
101 };
102 
103 struct rk_cam_compat_vcm_tim {
104 	struct old_timeval32 vcm_start_t;
105 	struct old_timeval32 vcm_end_t;
106 };
107 
108 struct rk_cam_vcm_cfg {
109 	int start_ma;
110 	int rated_ma;
111 	int step_mode;
112 };
113 
114 #endif /* RK_VCM_HEAD_H */
115 
116