xref: /OK3568_Linux_fs/kernel/include/uapi/linux/rk-camera-module.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: ((GPL-2.0+ WITH Linux-syscall-note) OR MIT) */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * Rockchip module information
4*4882a593Smuzhiyun  * Copyright (C) 2018-2019 Rockchip Electronics Co., Ltd.
5*4882a593Smuzhiyun  */
6*4882a593Smuzhiyun 
7*4882a593Smuzhiyun #ifndef _UAPI_RKMODULE_CAMERA_H
8*4882a593Smuzhiyun #define _UAPI_RKMODULE_CAMERA_H
9*4882a593Smuzhiyun 
10*4882a593Smuzhiyun #include <linux/types.h>
11*4882a593Smuzhiyun #include <linux/rk-video-format.h>
12*4882a593Smuzhiyun 
13*4882a593Smuzhiyun #define RKMODULE_API_VERSION		KERNEL_VERSION(0, 1, 0x2)
14*4882a593Smuzhiyun 
15*4882a593Smuzhiyun /* using for rk3588 dual isp unite */
16*4882a593Smuzhiyun #define RKMOUDLE_UNITE_EXTEND_PIXEL	128
17*4882a593Smuzhiyun /* using for rv1109 and rv1126 */
18*4882a593Smuzhiyun #define RKMODULE_EXTEND_LINE		24
19*4882a593Smuzhiyun 
20*4882a593Smuzhiyun #define RKMODULE_NAME_LEN		32
21*4882a593Smuzhiyun #define RKMODULE_LSCDATA_LEN		289
22*4882a593Smuzhiyun 
23*4882a593Smuzhiyun #define RKMODULE_MAX_VC_CH		4
24*4882a593Smuzhiyun 
25*4882a593Smuzhiyun #define RKMODULE_PADF_GAINMAP_LEN	1024
26*4882a593Smuzhiyun #define RKMODULE_PDAF_DCCMAP_LEN	256
27*4882a593Smuzhiyun #define RKMODULE_AF_OTP_MAX_LEN		3
28*4882a593Smuzhiyun 
29*4882a593Smuzhiyun #define RKMODULE_MAX_SENSOR_NUM		8
30*4882a593Smuzhiyun 
31*4882a593Smuzhiyun #define RKMODULE_CAMERA_MODULE_INDEX	"rockchip,camera-module-index"
32*4882a593Smuzhiyun #define RKMODULE_CAMERA_MODULE_FACING	"rockchip,camera-module-facing"
33*4882a593Smuzhiyun #define RKMODULE_CAMERA_MODULE_NAME	"rockchip,camera-module-name"
34*4882a593Smuzhiyun #define RKMODULE_CAMERA_LENS_NAME	"rockchip,camera-module-lens-name"
35*4882a593Smuzhiyun 
36*4882a593Smuzhiyun #define RKMODULE_CAMERA_SYNC_MODE	"rockchip,camera-module-sync-mode"
37*4882a593Smuzhiyun #define RKMODULE_INTERNAL_MASTER_MODE	"internal_master"
38*4882a593Smuzhiyun #define RKMODULE_EXTERNAL_MASTER_MODE	"external_master"
39*4882a593Smuzhiyun #define RKMODULE_SLAVE_MODE		"slave"
40*4882a593Smuzhiyun 
41*4882a593Smuzhiyun /* BT.656 & BT.1120 multi channel
42*4882a593Smuzhiyun  * On which channels it can send video data
43*4882a593Smuzhiyun  * related with struct rkmodule_bt656_mbus_info
44*4882a593Smuzhiyun  */
45*4882a593Smuzhiyun #define RKMODULE_CAMERA_BT656_ID_EN_BITS_1		(0x1)
46*4882a593Smuzhiyun #define RKMODULE_CAMERA_BT656_ID_EN_BITS_2		(0x3)
47*4882a593Smuzhiyun #define RKMODULE_CAMERA_BT656_ID_EN_BITS_3		(0x7)
48*4882a593Smuzhiyun #define RKMODULE_CAMERA_BT656_ID_EN_BITS_4		(0xf)
49*4882a593Smuzhiyun #define RKMODULE_CAMERA_BT656_PARSE_ID_LSB		BIT(0)
50*4882a593Smuzhiyun #define RKMODULE_CAMERA_BT656_PARSE_ID_MSB		BIT(1)
51*4882a593Smuzhiyun #define RKMODULE_CAMERA_BT656_CHANNEL_0			BIT(2)
52*4882a593Smuzhiyun #define RKMODULE_CAMERA_BT656_CHANNEL_1			BIT(3)
53*4882a593Smuzhiyun #define RKMODULE_CAMERA_BT656_CHANNEL_2			BIT(4)
54*4882a593Smuzhiyun #define RKMODULE_CAMERA_BT656_CHANNEL_3			BIT(5)
55*4882a593Smuzhiyun #define RKMODULE_CAMERA_BT656_CHANNELS			(RKMODULE_CAMERA_BT656_CHANNEL_0 | \
56*4882a593Smuzhiyun 							 RKMODULE_CAMERA_BT656_CHANNEL_1 | \
57*4882a593Smuzhiyun 							 RKMODULE_CAMERA_BT656_CHANNEL_2 | \
58*4882a593Smuzhiyun 							 RKMODULE_CAMERA_BT656_CHANNEL_3)
59*4882a593Smuzhiyun 
60*4882a593Smuzhiyun #define DPHY_MAX_LANE					4
61*4882a593Smuzhiyun #define RKMODULE_MULTI_DEV_NUM				4
62*4882a593Smuzhiyun 
63*4882a593Smuzhiyun #define RKMODULE_GET_MODULE_INFO	\
64*4882a593Smuzhiyun 	_IOR('V', BASE_VIDIOC_PRIVATE + 0, struct rkmodule_inf)
65*4882a593Smuzhiyun 
66*4882a593Smuzhiyun #define RKMODULE_AWB_CFG	\
67*4882a593Smuzhiyun 	_IOW('V', BASE_VIDIOC_PRIVATE + 1, struct rkmodule_awb_cfg)
68*4882a593Smuzhiyun 
69*4882a593Smuzhiyun #define RKMODULE_AF_CFG	\
70*4882a593Smuzhiyun 	_IOW('V', BASE_VIDIOC_PRIVATE + 2, struct rkmodule_af_cfg)
71*4882a593Smuzhiyun 
72*4882a593Smuzhiyun #define RKMODULE_LSC_CFG	\
73*4882a593Smuzhiyun 	_IOW('V', BASE_VIDIOC_PRIVATE + 3, struct rkmodule_lsc_cfg)
74*4882a593Smuzhiyun 
75*4882a593Smuzhiyun #define RKMODULE_GET_HDR_CFG	\
76*4882a593Smuzhiyun 	_IOR('V', BASE_VIDIOC_PRIVATE + 4, struct rkmodule_hdr_cfg)
77*4882a593Smuzhiyun 
78*4882a593Smuzhiyun #define RKMODULE_SET_HDR_CFG	\
79*4882a593Smuzhiyun 	_IOW('V', BASE_VIDIOC_PRIVATE + 5, struct rkmodule_hdr_cfg)
80*4882a593Smuzhiyun 
81*4882a593Smuzhiyun #define RKMODULE_SET_CONVERSION_GAIN	\
82*4882a593Smuzhiyun 	_IOW('V', BASE_VIDIOC_PRIVATE + 6, __u32)
83*4882a593Smuzhiyun 
84*4882a593Smuzhiyun #define RKMODULE_GET_LVDS_CFG	\
85*4882a593Smuzhiyun 	_IOR('V', BASE_VIDIOC_PRIVATE + 7, struct rkmodule_lvds_cfg)
86*4882a593Smuzhiyun 
87*4882a593Smuzhiyun #define RKMODULE_SET_DPCC_CFG	\
88*4882a593Smuzhiyun 	_IOW('V', BASE_VIDIOC_PRIVATE + 8, struct rkmodule_dpcc_cfg)
89*4882a593Smuzhiyun 
90*4882a593Smuzhiyun #define RKMODULE_GET_NR_SWITCH_THRESHOLD	\
91*4882a593Smuzhiyun 	_IOR('V', BASE_VIDIOC_PRIVATE + 9, struct rkmodule_nr_switch_threshold)
92*4882a593Smuzhiyun 
93*4882a593Smuzhiyun #define RKMODULE_SET_QUICK_STREAM	\
94*4882a593Smuzhiyun 	_IOW('V', BASE_VIDIOC_PRIVATE + 10, __u32)
95*4882a593Smuzhiyun 
96*4882a593Smuzhiyun #define RKMODULE_GET_BT656_INTF_TYPE	\
97*4882a593Smuzhiyun 	_IOR('V', BASE_VIDIOC_PRIVATE + 11, __u32)
98*4882a593Smuzhiyun 
99*4882a593Smuzhiyun #define RKMODULE_GET_VC_FMT_INFO \
100*4882a593Smuzhiyun     _IOR('V', BASE_VIDIOC_PRIVATE + 12, struct rkmodule_vc_fmt_info)
101*4882a593Smuzhiyun 
102*4882a593Smuzhiyun #define RKMODULE_GET_VC_HOTPLUG_INFO \
103*4882a593Smuzhiyun     _IOR('V', BASE_VIDIOC_PRIVATE + 13, struct rkmodule_vc_hotplug_info)
104*4882a593Smuzhiyun 
105*4882a593Smuzhiyun #define RKMODULE_GET_START_STREAM_SEQ	\
106*4882a593Smuzhiyun 	_IOR('V', BASE_VIDIOC_PRIVATE + 14, __u32)
107*4882a593Smuzhiyun 
108*4882a593Smuzhiyun #define RKMODULE_GET_VICAP_RST_INFO	\
109*4882a593Smuzhiyun 	_IOR('V', BASE_VIDIOC_PRIVATE + 15, struct rkmodule_vicap_reset_info)
110*4882a593Smuzhiyun 
111*4882a593Smuzhiyun #define RKMODULE_SET_VICAP_RST_INFO	\
112*4882a593Smuzhiyun 	_IOW('V', BASE_VIDIOC_PRIVATE + 16, struct rkmodule_vicap_reset_info)
113*4882a593Smuzhiyun 
114*4882a593Smuzhiyun #define RKMODULE_GET_BT656_MBUS_INFO	\
115*4882a593Smuzhiyun 	_IOR('V', BASE_VIDIOC_PRIVATE + 17, struct rkmodule_bt656_mbus_info)
116*4882a593Smuzhiyun 
117*4882a593Smuzhiyun #define RKMODULE_GET_DCG_RATIO	\
118*4882a593Smuzhiyun 	_IOR('V', BASE_VIDIOC_PRIVATE + 18, struct rkmodule_dcg_ratio)
119*4882a593Smuzhiyun 
120*4882a593Smuzhiyun #define RKMODULE_GET_SONY_BRL	\
121*4882a593Smuzhiyun 	_IOR('V', BASE_VIDIOC_PRIVATE + 19, __u32)
122*4882a593Smuzhiyun 
123*4882a593Smuzhiyun #define RKMODULE_GET_CHANNEL_INFO	\
124*4882a593Smuzhiyun 	_IOWR('V', BASE_VIDIOC_PRIVATE + 20, struct rkmodule_channel_info)
125*4882a593Smuzhiyun 
126*4882a593Smuzhiyun #define RKMODULE_GET_SYNC_MODE       \
127*4882a593Smuzhiyun 	_IOR('V', BASE_VIDIOC_PRIVATE + 21, __u32)
128*4882a593Smuzhiyun 
129*4882a593Smuzhiyun #define RKMODULE_SET_SYNC_MODE       \
130*4882a593Smuzhiyun 	_IOW('V', BASE_VIDIOC_PRIVATE + 22, __u32)
131*4882a593Smuzhiyun 
132*4882a593Smuzhiyun #define RKMODULE_SET_MCLK       \
133*4882a593Smuzhiyun 	_IOW('V', BASE_VIDIOC_PRIVATE + 23, struct rkmodule_mclk_data)
134*4882a593Smuzhiyun 
135*4882a593Smuzhiyun #define RKMODULE_SET_LINK_FREQ       \
136*4882a593Smuzhiyun 	_IOW('V', BASE_VIDIOC_PRIVATE + 24, __s64)
137*4882a593Smuzhiyun 
138*4882a593Smuzhiyun #define RKMODULE_SET_BUS_CONFIG       \
139*4882a593Smuzhiyun 	_IOW('V', BASE_VIDIOC_PRIVATE + 25, struct rkmodule_bus_config)
140*4882a593Smuzhiyun 
141*4882a593Smuzhiyun #define RKMODULE_GET_BUS_CONFIG       \
142*4882a593Smuzhiyun 	_IOR('V', BASE_VIDIOC_PRIVATE + 26, struct rkmodule_bus_config)
143*4882a593Smuzhiyun 
144*4882a593Smuzhiyun #define RKMODULE_SET_REGISTER       \
145*4882a593Smuzhiyun 	_IOW('V', BASE_VIDIOC_PRIVATE + 27, struct rkmodule_reg)
146*4882a593Smuzhiyun 
147*4882a593Smuzhiyun #define RKMODULE_SYNC_I2CDEV       \
148*4882a593Smuzhiyun 	_IOW('V', BASE_VIDIOC_PRIVATE + 28, __u8)
149*4882a593Smuzhiyun 
150*4882a593Smuzhiyun #define RKMODULE_SYNC_I2CDEV_COMPLETE       \
151*4882a593Smuzhiyun 	_IOW('V', BASE_VIDIOC_PRIVATE + 29, __u8)
152*4882a593Smuzhiyun 
153*4882a593Smuzhiyun #define RKMODULE_SET_DEV_INFO       \
154*4882a593Smuzhiyun 	_IOW('V', BASE_VIDIOC_PRIVATE + 30, struct rkmodule_dev_info)
155*4882a593Smuzhiyun 
156*4882a593Smuzhiyun #define RKMODULE_SET_CSI_DPHY_PARAM       \
157*4882a593Smuzhiyun 	_IOW('V', BASE_VIDIOC_PRIVATE + 31, struct rkmodule_csi_dphy_param)
158*4882a593Smuzhiyun 
159*4882a593Smuzhiyun #define RKMODULE_GET_CSI_DPHY_PARAM       \
160*4882a593Smuzhiyun 	_IOWR('V', BASE_VIDIOC_PRIVATE + 32, struct rkmodule_csi_dphy_param)
161*4882a593Smuzhiyun 
162*4882a593Smuzhiyun #define RKMODULE_GET_CSI_DSI_INFO       \
163*4882a593Smuzhiyun 	_IOWR('V', BASE_VIDIOC_PRIVATE + 33, __u32)
164*4882a593Smuzhiyun 
165*4882a593Smuzhiyun #define RKMODULE_GET_HDMI_MODE       \
166*4882a593Smuzhiyun 	_IOR('V', BASE_VIDIOC_PRIVATE + 34, __u32)
167*4882a593Smuzhiyun 
168*4882a593Smuzhiyun #define RKMODULE_SET_SENSOR_INFOS       \
169*4882a593Smuzhiyun 	_IOWR('V', BASE_VIDIOC_PRIVATE + 35, struct rkmodule_sensor_infos)
170*4882a593Smuzhiyun 
171*4882a593Smuzhiyun #define RKMODULE_GET_READOUT_LINE_CNT_PER_LINE  \
172*4882a593Smuzhiyun 	_IOR('V', BASE_VIDIOC_PRIVATE + 36, __u32)
173*4882a593Smuzhiyun 
174*4882a593Smuzhiyun #define RKMODULE_GET_GROUP_ID       \
175*4882a593Smuzhiyun 	_IOR('V', BASE_VIDIOC_PRIVATE + 37, __u32)
176*4882a593Smuzhiyun 
177*4882a593Smuzhiyun #define RKMODULE_SET_GROUP_ID       \
178*4882a593Smuzhiyun 	_IOW('V', BASE_VIDIOC_PRIVATE + 38, __u32)
179*4882a593Smuzhiyun 
180*4882a593Smuzhiyun #define RKMODULE_GET_CAPTURE_MODE  \
181*4882a593Smuzhiyun 	_IOR('V', BASE_VIDIOC_PRIVATE + 39, struct rkmodule_capture_info)
182*4882a593Smuzhiyun 
183*4882a593Smuzhiyun #define RKMODULE_SET_CAPTURE_MODE  \
184*4882a593Smuzhiyun 	_IOW('V', BASE_VIDIOC_PRIVATE + 40, struct rkmodule_capture_info)
185*4882a593Smuzhiyun 
186*4882a593Smuzhiyun struct rkmodule_i2cdev_info {
187*4882a593Smuzhiyun 	__u8 slave_addr;
188*4882a593Smuzhiyun } __attribute__ ((packed));
189*4882a593Smuzhiyun 
190*4882a593Smuzhiyun struct rkmodule_dev_info {
191*4882a593Smuzhiyun 	union {
192*4882a593Smuzhiyun 		struct rkmodule_i2cdev_info i2c_dev;
193*4882a593Smuzhiyun 		__u32 reserved[8];
194*4882a593Smuzhiyun 	};
195*4882a593Smuzhiyun } __attribute__ ((packed));
196*4882a593Smuzhiyun 
197*4882a593Smuzhiyun /* csi0/csi1 phy support full/split mode */
198*4882a593Smuzhiyun enum rkmodule_phy_mode {
199*4882a593Smuzhiyun 	PHY_FULL_MODE,
200*4882a593Smuzhiyun 	PHY_SPLIT_01,
201*4882a593Smuzhiyun 	PHY_SPLIT_23,
202*4882a593Smuzhiyun };
203*4882a593Smuzhiyun 
204*4882a593Smuzhiyun struct rkmodule_mipi_lvds_bus {
205*4882a593Smuzhiyun 	__u32 bus_type;
206*4882a593Smuzhiyun 	__u32 lanes;
207*4882a593Smuzhiyun 	__u32 phy_mode; /* data type enum rkmodule_phy_mode */
208*4882a593Smuzhiyun };
209*4882a593Smuzhiyun 
210*4882a593Smuzhiyun struct rkmodule_bus_config {
211*4882a593Smuzhiyun 	union {
212*4882a593Smuzhiyun 		struct rkmodule_mipi_lvds_bus bus;
213*4882a593Smuzhiyun 		__u32 reserved[32];
214*4882a593Smuzhiyun 	};
215*4882a593Smuzhiyun } __attribute__ ((packed));
216*4882a593Smuzhiyun 
217*4882a593Smuzhiyun struct rkmodule_reg {
218*4882a593Smuzhiyun 	__u64 num_regs;
219*4882a593Smuzhiyun 	__u64 preg_addr;
220*4882a593Smuzhiyun 	__u64 preg_value;
221*4882a593Smuzhiyun 	__u64 preg_addr_bytes;
222*4882a593Smuzhiyun 	__u64 preg_value_bytes;
223*4882a593Smuzhiyun } __attribute__ ((packed));
224*4882a593Smuzhiyun 
225*4882a593Smuzhiyun /**
226*4882a593Smuzhiyun  * struct rkmodule_base_inf - module base information
227*4882a593Smuzhiyun  *
228*4882a593Smuzhiyun  */
229*4882a593Smuzhiyun struct rkmodule_base_inf {
230*4882a593Smuzhiyun 	char sensor[RKMODULE_NAME_LEN];
231*4882a593Smuzhiyun 	char module[RKMODULE_NAME_LEN];
232*4882a593Smuzhiyun 	char lens[RKMODULE_NAME_LEN];
233*4882a593Smuzhiyun } __attribute__ ((packed));
234*4882a593Smuzhiyun 
235*4882a593Smuzhiyun /**
236*4882a593Smuzhiyun  * struct rkmodule_fac_inf - module factory information
237*4882a593Smuzhiyun  *
238*4882a593Smuzhiyun  */
239*4882a593Smuzhiyun struct rkmodule_fac_inf {
240*4882a593Smuzhiyun 	__u32 flag;
241*4882a593Smuzhiyun 
242*4882a593Smuzhiyun 	char module[RKMODULE_NAME_LEN];
243*4882a593Smuzhiyun 	char lens[RKMODULE_NAME_LEN];
244*4882a593Smuzhiyun 	__u32 year;
245*4882a593Smuzhiyun 	__u32 month;
246*4882a593Smuzhiyun 	__u32 day;
247*4882a593Smuzhiyun } __attribute__ ((packed));
248*4882a593Smuzhiyun 
249*4882a593Smuzhiyun /**
250*4882a593Smuzhiyun  * struct rkmodule_awb_inf - module awb information
251*4882a593Smuzhiyun  *
252*4882a593Smuzhiyun  */
253*4882a593Smuzhiyun struct rkmodule_awb_inf {
254*4882a593Smuzhiyun 	__u32 flag;
255*4882a593Smuzhiyun 
256*4882a593Smuzhiyun 	__u32 r_value;
257*4882a593Smuzhiyun 	__u32 b_value;
258*4882a593Smuzhiyun 	__u32 gr_value;
259*4882a593Smuzhiyun 	__u32 gb_value;
260*4882a593Smuzhiyun 
261*4882a593Smuzhiyun 	__u32 golden_r_value;
262*4882a593Smuzhiyun 	__u32 golden_b_value;
263*4882a593Smuzhiyun 	__u32 golden_gr_value;
264*4882a593Smuzhiyun 	__u32 golden_gb_value;
265*4882a593Smuzhiyun } __attribute__ ((packed));
266*4882a593Smuzhiyun 
267*4882a593Smuzhiyun /**
268*4882a593Smuzhiyun  * struct rkmodule_lsc_inf - module lsc information
269*4882a593Smuzhiyun  *
270*4882a593Smuzhiyun  */
271*4882a593Smuzhiyun struct rkmodule_lsc_inf {
272*4882a593Smuzhiyun 	__u32 flag;
273*4882a593Smuzhiyun 
274*4882a593Smuzhiyun 	__u16 lsc_w;
275*4882a593Smuzhiyun 	__u16 lsc_h;
276*4882a593Smuzhiyun 	__u16 decimal_bits;
277*4882a593Smuzhiyun 
278*4882a593Smuzhiyun 	__u16 lsc_r[RKMODULE_LSCDATA_LEN];
279*4882a593Smuzhiyun 	__u16 lsc_b[RKMODULE_LSCDATA_LEN];
280*4882a593Smuzhiyun 	__u16 lsc_gr[RKMODULE_LSCDATA_LEN];
281*4882a593Smuzhiyun 	__u16 lsc_gb[RKMODULE_LSCDATA_LEN];
282*4882a593Smuzhiyun 
283*4882a593Smuzhiyun 	__u16 width;
284*4882a593Smuzhiyun 	__u16 height;
285*4882a593Smuzhiyun 	__u16 table_size;
286*4882a593Smuzhiyun } __attribute__ ((packed));
287*4882a593Smuzhiyun 
288*4882a593Smuzhiyun /**
289*4882a593Smuzhiyun  * enum rkmodule_af_dir - enum of module af otp direction
290*4882a593Smuzhiyun  */
291*4882a593Smuzhiyun enum rkmodele_af_otp_dir {
292*4882a593Smuzhiyun 	AF_OTP_DIR_HORIZONTAL = 0,
293*4882a593Smuzhiyun 	AF_OTP_DIR_UP = 1,
294*4882a593Smuzhiyun 	AF_OTP_DIR_DOWN = 2,
295*4882a593Smuzhiyun };
296*4882a593Smuzhiyun 
297*4882a593Smuzhiyun /**
298*4882a593Smuzhiyun  * struct rkmodule_af_otp - module af otp in one direction
299*4882a593Smuzhiyun  */
300*4882a593Smuzhiyun struct rkmodule_af_otp {
301*4882a593Smuzhiyun 	__u32 vcm_start;
302*4882a593Smuzhiyun 	__u32 vcm_end;
303*4882a593Smuzhiyun 	__u32 vcm_dir;
304*4882a593Smuzhiyun };
305*4882a593Smuzhiyun 
306*4882a593Smuzhiyun /**
307*4882a593Smuzhiyun  * struct rkmodule_af_inf - module af information
308*4882a593Smuzhiyun  *
309*4882a593Smuzhiyun  */
310*4882a593Smuzhiyun struct rkmodule_af_inf {
311*4882a593Smuzhiyun 	__u32 flag;
312*4882a593Smuzhiyun 	__u32 dir_cnt;
313*4882a593Smuzhiyun 	struct rkmodule_af_otp af_otp[RKMODULE_AF_OTP_MAX_LEN];
314*4882a593Smuzhiyun } __attribute__ ((packed));
315*4882a593Smuzhiyun 
316*4882a593Smuzhiyun /**
317*4882a593Smuzhiyun  * struct rkmodule_pdaf_inf - module pdaf information
318*4882a593Smuzhiyun  *
319*4882a593Smuzhiyun  */
320*4882a593Smuzhiyun struct rkmodule_pdaf_inf {
321*4882a593Smuzhiyun 	__u32 flag;
322*4882a593Smuzhiyun 
323*4882a593Smuzhiyun 	__u32 gainmap_width;
324*4882a593Smuzhiyun 	__u32 gainmap_height;
325*4882a593Smuzhiyun 	__u32 dccmap_width;
326*4882a593Smuzhiyun 	__u32 dccmap_height;
327*4882a593Smuzhiyun 	__u32 dcc_mode;
328*4882a593Smuzhiyun 	__u32 dcc_dir;
329*4882a593Smuzhiyun 	__u16 gainmap[RKMODULE_PADF_GAINMAP_LEN];
330*4882a593Smuzhiyun 	__u16 dccmap[RKMODULE_PDAF_DCCMAP_LEN];
331*4882a593Smuzhiyun } __attribute__ ((packed));
332*4882a593Smuzhiyun 
333*4882a593Smuzhiyun /**
334*4882a593Smuzhiyun  * struct rkmodule_otp_module_inf - otp module info
335*4882a593Smuzhiyun  *
336*4882a593Smuzhiyun  */
337*4882a593Smuzhiyun struct rkmodule_otp_module_inf {
338*4882a593Smuzhiyun 	__u32 flag;
339*4882a593Smuzhiyun 	__u8 vendor[8];
340*4882a593Smuzhiyun 	__u32 module_id;
341*4882a593Smuzhiyun 	__u16 version;
342*4882a593Smuzhiyun 	__u16 full_width;
343*4882a593Smuzhiyun 	__u16 full_height;
344*4882a593Smuzhiyun 	__u8 supplier_id;
345*4882a593Smuzhiyun 	__u8 year;
346*4882a593Smuzhiyun 	__u8 mouth;
347*4882a593Smuzhiyun 	__u8 day;
348*4882a593Smuzhiyun 	__u8 sensor_id;
349*4882a593Smuzhiyun 	__u8 lens_id;
350*4882a593Smuzhiyun 	__u8 vcm_id;
351*4882a593Smuzhiyun 	__u8 drv_id;
352*4882a593Smuzhiyun 	__u8 flip;
353*4882a593Smuzhiyun } __attribute__ ((packed));
354*4882a593Smuzhiyun 
355*4882a593Smuzhiyun /**
356*4882a593Smuzhiyun  * struct rkmodule_inf - module information
357*4882a593Smuzhiyun  *
358*4882a593Smuzhiyun  */
359*4882a593Smuzhiyun struct rkmodule_inf {
360*4882a593Smuzhiyun 	struct rkmodule_base_inf base;
361*4882a593Smuzhiyun 	struct rkmodule_fac_inf fac;
362*4882a593Smuzhiyun 	struct rkmodule_awb_inf awb;
363*4882a593Smuzhiyun 	struct rkmodule_lsc_inf lsc;
364*4882a593Smuzhiyun 	struct rkmodule_af_inf af;
365*4882a593Smuzhiyun 	struct rkmodule_pdaf_inf pdaf;
366*4882a593Smuzhiyun 	struct rkmodule_otp_module_inf module_inf;
367*4882a593Smuzhiyun } __attribute__ ((packed));
368*4882a593Smuzhiyun 
369*4882a593Smuzhiyun /**
370*4882a593Smuzhiyun  * struct rkmodule_awb_inf - module awb information
371*4882a593Smuzhiyun  *
372*4882a593Smuzhiyun  */
373*4882a593Smuzhiyun struct rkmodule_awb_cfg {
374*4882a593Smuzhiyun 	__u32 enable;
375*4882a593Smuzhiyun 	__u32 golden_r_value;
376*4882a593Smuzhiyun 	__u32 golden_b_value;
377*4882a593Smuzhiyun 	__u32 golden_gr_value;
378*4882a593Smuzhiyun 	__u32 golden_gb_value;
379*4882a593Smuzhiyun } __attribute__ ((packed));
380*4882a593Smuzhiyun 
381*4882a593Smuzhiyun /**
382*4882a593Smuzhiyun  * struct rkmodule_af_cfg
383*4882a593Smuzhiyun  *
384*4882a593Smuzhiyun  */
385*4882a593Smuzhiyun struct rkmodule_af_cfg {
386*4882a593Smuzhiyun 	__u32 enable;
387*4882a593Smuzhiyun 	__u32 vcm_start;
388*4882a593Smuzhiyun 	__u32 vcm_end;
389*4882a593Smuzhiyun 	__u32 vcm_dir;
390*4882a593Smuzhiyun } __attribute__ ((packed));
391*4882a593Smuzhiyun 
392*4882a593Smuzhiyun /**
393*4882a593Smuzhiyun  * struct rkmodule_lsc_cfg
394*4882a593Smuzhiyun  *
395*4882a593Smuzhiyun  */
396*4882a593Smuzhiyun struct rkmodule_lsc_cfg {
397*4882a593Smuzhiyun 	__u32 enable;
398*4882a593Smuzhiyun } __attribute__ ((packed));
399*4882a593Smuzhiyun 
400*4882a593Smuzhiyun /**
401*4882a593Smuzhiyun  * NO_HDR: linear mode
402*4882a593Smuzhiyun  * HDR_X2: hdr two frame or line mode
403*4882a593Smuzhiyun  * HDR_X3: hdr three or line mode
404*4882a593Smuzhiyun  * HDR_COMPR: linearised and compressed data for hdr
405*4882a593Smuzhiyun  */
406*4882a593Smuzhiyun enum rkmodule_hdr_mode {
407*4882a593Smuzhiyun 	NO_HDR = 0,
408*4882a593Smuzhiyun 	HDR_X2 = 5,
409*4882a593Smuzhiyun 	HDR_X3 = 6,
410*4882a593Smuzhiyun 	HDR_COMPR,
411*4882a593Smuzhiyun };
412*4882a593Smuzhiyun 
413*4882a593Smuzhiyun enum rkmodule_hdr_compr_segment {
414*4882a593Smuzhiyun 	HDR_COMPR_SEGMENT_4 = 4,
415*4882a593Smuzhiyun 	HDR_COMPR_SEGMENT_12 = 12,
416*4882a593Smuzhiyun 	HDR_COMPR_SEGMENT_16 = 16,
417*4882a593Smuzhiyun };
418*4882a593Smuzhiyun 
419*4882a593Smuzhiyun /* rkmodule_hdr_compr
420*4882a593Smuzhiyun  * linearised and compressed data for hdr: data_src = K * data_compr + XX
421*4882a593Smuzhiyun  *
422*4882a593Smuzhiyun  * bit: bit of src data, max 20 bit.
423*4882a593Smuzhiyun  * segment: linear segment, support 4, 6 or 16.
424*4882a593Smuzhiyun  * k_shift: left shift bit of slop amplification factor, 2^k_shift, [0 15].
425*4882a593Smuzhiyun  * slope_k: K * 2^k_shift.
426*4882a593Smuzhiyun  * data_src_shitf: left shift bit of source data, data_src = 2^data_src_shitf
427*4882a593Smuzhiyun  * data_compr: compressed data.
428*4882a593Smuzhiyun  */
429*4882a593Smuzhiyun struct rkmodule_hdr_compr {
430*4882a593Smuzhiyun 	enum rkmodule_hdr_compr_segment segment;
431*4882a593Smuzhiyun 	__u8 bit;
432*4882a593Smuzhiyun 	__u8 k_shift;
433*4882a593Smuzhiyun 	__u8 data_src_shitf[HDR_COMPR_SEGMENT_16];
434*4882a593Smuzhiyun 	__u16 data_compr[HDR_COMPR_SEGMENT_16];
435*4882a593Smuzhiyun 	__u32 slope_k[HDR_COMPR_SEGMENT_16];
436*4882a593Smuzhiyun };
437*4882a593Smuzhiyun 
438*4882a593Smuzhiyun /**
439*4882a593Smuzhiyun  * HDR_NORMAL_VC: hdr frame with diff virtual channels
440*4882a593Smuzhiyun  * HDR_LINE_CNT: hdr frame with line counter
441*4882a593Smuzhiyun  * HDR_ID_CODE: hdr frame with identification code
442*4882a593Smuzhiyun  */
443*4882a593Smuzhiyun enum hdr_esp_mode {
444*4882a593Smuzhiyun 	HDR_NORMAL_VC = 0,
445*4882a593Smuzhiyun 	HDR_LINE_CNT,
446*4882a593Smuzhiyun 	HDR_ID_CODE,
447*4882a593Smuzhiyun };
448*4882a593Smuzhiyun 
449*4882a593Smuzhiyun /*
450*4882a593Smuzhiyun  * CSI/DSI input select IOCTL
451*4882a593Smuzhiyun  */
452*4882a593Smuzhiyun enum rkmodule_csi_dsi_seq {
453*4882a593Smuzhiyun 	RKMODULE_CSI_INPUT = 0,
454*4882a593Smuzhiyun 	RKMODULE_DSI_INPUT,
455*4882a593Smuzhiyun };
456*4882a593Smuzhiyun 
457*4882a593Smuzhiyun /**
458*4882a593Smuzhiyun  * lcnt: line counter
459*4882a593Smuzhiyun  *     padnum: the pixels of padding row
460*4882a593Smuzhiyun  *     padpix: the payload of padding
461*4882a593Smuzhiyun  * idcd: identification code
462*4882a593Smuzhiyun  *     efpix: identification code of Effective line
463*4882a593Smuzhiyun  *     obpix: identification code of OB line
464*4882a593Smuzhiyun  */
465*4882a593Smuzhiyun struct rkmodule_hdr_esp {
466*4882a593Smuzhiyun 	enum hdr_esp_mode mode;
467*4882a593Smuzhiyun 	union {
468*4882a593Smuzhiyun 		struct {
469*4882a593Smuzhiyun 			__u32 padnum;
470*4882a593Smuzhiyun 			__u32 padpix;
471*4882a593Smuzhiyun 		} lcnt;
472*4882a593Smuzhiyun 		struct {
473*4882a593Smuzhiyun 			__u32 efpix;
474*4882a593Smuzhiyun 			__u32 obpix;
475*4882a593Smuzhiyun 		} idcd;
476*4882a593Smuzhiyun 	} val;
477*4882a593Smuzhiyun };
478*4882a593Smuzhiyun 
479*4882a593Smuzhiyun struct rkmodule_hdr_cfg {
480*4882a593Smuzhiyun 	__u32 hdr_mode;
481*4882a593Smuzhiyun 	struct rkmodule_hdr_esp esp;
482*4882a593Smuzhiyun 	struct rkmodule_hdr_compr compr;
483*4882a593Smuzhiyun } __attribute__ ((packed));
484*4882a593Smuzhiyun 
485*4882a593Smuzhiyun /* sensor lvds sync code
486*4882a593Smuzhiyun  * sav: start of active video codes
487*4882a593Smuzhiyun  * eav: end of active video codes
488*4882a593Smuzhiyun  */
489*4882a593Smuzhiyun struct rkmodule_sync_code {
490*4882a593Smuzhiyun 	__u16 sav;
491*4882a593Smuzhiyun 	__u16 eav;
492*4882a593Smuzhiyun };
493*4882a593Smuzhiyun 
494*4882a593Smuzhiyun /* sensor lvds difference sync code mode
495*4882a593Smuzhiyun  * LS_FIRST: valid line ls-le or sav-eav
496*4882a593Smuzhiyun  *	   invalid line fs-fe or sav-eav
497*4882a593Smuzhiyun  * FS_FIRST: valid line fs-le
498*4882a593Smuzhiyun  *	   invalid line ls-fe
499*4882a593Smuzhiyun  * ls: line start
500*4882a593Smuzhiyun  * le: line end
501*4882a593Smuzhiyun  * fs: frame start
502*4882a593Smuzhiyun  * fe: frame end
503*4882a593Smuzhiyun  * SONY_DOL_HDR_1: sony dol hdr pattern 1
504*4882a593Smuzhiyun  * SONY_DOL_HDR_2: sony dol hdr pattern 2
505*4882a593Smuzhiyun  */
506*4882a593Smuzhiyun enum rkmodule_lvds_mode {
507*4882a593Smuzhiyun 	LS_FIRST = 0,
508*4882a593Smuzhiyun 	FS_FIRST,
509*4882a593Smuzhiyun 	SONY_DOL_HDR_1,
510*4882a593Smuzhiyun 	SONY_DOL_HDR_2
511*4882a593Smuzhiyun };
512*4882a593Smuzhiyun 
513*4882a593Smuzhiyun /* sync code of different frame type (hdr or linear) for lvds
514*4882a593Smuzhiyun  * act: valid line sync code
515*4882a593Smuzhiyun  * blk: invalid line sync code
516*4882a593Smuzhiyun  */
517*4882a593Smuzhiyun struct rkmodule_lvds_frm_sync_code {
518*4882a593Smuzhiyun 	struct rkmodule_sync_code act;
519*4882a593Smuzhiyun 	struct rkmodule_sync_code blk;
520*4882a593Smuzhiyun };
521*4882a593Smuzhiyun 
522*4882a593Smuzhiyun /* sync code for lvds of sensor
523*4882a593Smuzhiyun  * odd_sync_code: sync code of odd frame id for lvds of sony sensor
524*4882a593Smuzhiyun  * even_sync_code: sync code of even frame id for lvds of sony sensor
525*4882a593Smuzhiyun  */
526*4882a593Smuzhiyun struct rkmodule_lvds_frame_sync_code {
527*4882a593Smuzhiyun 	struct rkmodule_lvds_frm_sync_code odd_sync_code;
528*4882a593Smuzhiyun 	struct rkmodule_lvds_frm_sync_code even_sync_code;
529*4882a593Smuzhiyun };
530*4882a593Smuzhiyun 
531*4882a593Smuzhiyun /* lvds sync code category of sensor for different operation */
532*4882a593Smuzhiyun enum rkmodule_lvds_sync_code_group {
533*4882a593Smuzhiyun 	LVDS_CODE_GRP_LINEAR = 0x0,
534*4882a593Smuzhiyun 	LVDS_CODE_GRP_LONG,
535*4882a593Smuzhiyun 	LVDS_CODE_GRP_MEDIUM,
536*4882a593Smuzhiyun 	LVDS_CODE_GRP_SHORT,
537*4882a593Smuzhiyun 	LVDS_CODE_GRP_MAX
538*4882a593Smuzhiyun };
539*4882a593Smuzhiyun 
540*4882a593Smuzhiyun /* struct rkmodule_lvds_cfg
541*4882a593Smuzhiyun  * frm_sync_code[index]:
542*4882a593Smuzhiyun  *  index == LVDS_CODE_GRP_LONG:
543*4882a593Smuzhiyun  *    sync code for frame of linear mode or for long frame of hdr mode
544*4882a593Smuzhiyun  *  index == LVDS_CODE_GRP_MEDIUM:
545*4882a593Smuzhiyun  *    sync code for medium long frame of hdr mode
546*4882a593Smuzhiyun  *  index == LVDS_CODE_GRP_SHOR:
547*4882a593Smuzhiyun  *    sync code for short long frame of hdr mode
548*4882a593Smuzhiyun  */
549*4882a593Smuzhiyun struct rkmodule_lvds_cfg {
550*4882a593Smuzhiyun 	enum rkmodule_lvds_mode mode;
551*4882a593Smuzhiyun 	struct rkmodule_lvds_frame_sync_code frm_sync_code[LVDS_CODE_GRP_MAX];
552*4882a593Smuzhiyun } __attribute__ ((packed));
553*4882a593Smuzhiyun 
554*4882a593Smuzhiyun /**
555*4882a593Smuzhiyun  * struct rkmodule_dpcc_cfg
556*4882a593Smuzhiyun  * enable: 0 -> disable dpcc, 1 -> enable multiple,
557*4882a593Smuzhiyun  *         2 -> enable single, 3 -> enable all;
558*4882a593Smuzhiyun  * cur_single_dpcc: the strength of single dpcc;
559*4882a593Smuzhiyun  * cur_multiple_dpcc: the strength of multiple dpcc;
560*4882a593Smuzhiyun  * total_dpcc: the max strength;
561*4882a593Smuzhiyun  */
562*4882a593Smuzhiyun struct rkmodule_dpcc_cfg {
563*4882a593Smuzhiyun 	__u32 enable;
564*4882a593Smuzhiyun 	__u32 cur_single_dpcc;
565*4882a593Smuzhiyun 	__u32 cur_multiple_dpcc;
566*4882a593Smuzhiyun 	__u32 total_dpcc;
567*4882a593Smuzhiyun } __attribute__ ((packed));
568*4882a593Smuzhiyun 
569*4882a593Smuzhiyun /**
570*4882a593Smuzhiyun  * nr switch by gain
571*4882a593Smuzhiyun  * direct: 0 -> up_thres LSNR to HSNR, 1 -> up_thres HSNR to LSNR
572*4882a593Smuzhiyun  * up_thres: threshold of nr change from low gain to high gain
573*4882a593Smuzhiyun  * down_thres: threshold of nr change from high gain to low gain;
574*4882a593Smuzhiyun  * div_coeff: Coefficients converted from float to int
575*4882a593Smuzhiyun  */
576*4882a593Smuzhiyun struct rkmodule_nr_switch_threshold {
577*4882a593Smuzhiyun 	__u32 direct;
578*4882a593Smuzhiyun 	__u32 up_thres;
579*4882a593Smuzhiyun 	__u32 down_thres;
580*4882a593Smuzhiyun 	__u32 div_coeff;
581*4882a593Smuzhiyun } __attribute__ ((packed));
582*4882a593Smuzhiyun 
583*4882a593Smuzhiyun /**
584*4882a593Smuzhiyun  * enum rkmodule_bt656_intf_type
585*4882a593Smuzhiyun  * to support sony bt656 raw
586*4882a593Smuzhiyun  */
587*4882a593Smuzhiyun enum rkmodule_bt656_intf_type {
588*4882a593Smuzhiyun 	BT656_STD_RAW = 0,
589*4882a593Smuzhiyun 	BT656_SONY_RAW,
590*4882a593Smuzhiyun };
591*4882a593Smuzhiyun 
592*4882a593Smuzhiyun /**
593*4882a593Smuzhiyun  * struct rkmodule_vc_fmt_info - virtual channels fmt info
594*4882a593Smuzhiyun  *
595*4882a593Smuzhiyun  */
596*4882a593Smuzhiyun struct rkmodule_vc_fmt_info {
597*4882a593Smuzhiyun 	__u32 width[RKMODULE_MAX_VC_CH];
598*4882a593Smuzhiyun 	__u32 height[RKMODULE_MAX_VC_CH];
599*4882a593Smuzhiyun 	__u32 fps[RKMODULE_MAX_VC_CH];
600*4882a593Smuzhiyun } __attribute__ ((packed));
601*4882a593Smuzhiyun 
602*4882a593Smuzhiyun /**
603*4882a593Smuzhiyun  * struct rkmodule_vc_hotplug_info - virtual channels hotplug status info
604*4882a593Smuzhiyun  * detect_status: hotplug status
605*4882a593Smuzhiyun  *     bit 0~3 means channels id, value : 0 -> plug out, 1 -> plug in.
606*4882a593Smuzhiyun  */
607*4882a593Smuzhiyun struct rkmodule_vc_hotplug_info {
608*4882a593Smuzhiyun 	__u8 detect_status;
609*4882a593Smuzhiyun } __attribute__ ((packed));
610*4882a593Smuzhiyun 
611*4882a593Smuzhiyun 
612*4882a593Smuzhiyun /* sensor start stream sequence
613*4882a593Smuzhiyun  * RKMODULE_START_STREAM_DEFAULT: by default
614*4882a593Smuzhiyun  * RKMODULE_START_STREAM_BEHIND : sensor start stream should be behind the controller
615*4882a593Smuzhiyun  * RKMODULE_START_STREAM_FRONT  : sensor start stream should be in front of the controller
616*4882a593Smuzhiyun  */
617*4882a593Smuzhiyun enum rkmodule_start_stream_seq {
618*4882a593Smuzhiyun 	RKMODULE_START_STREAM_DEFAULT = 0,
619*4882a593Smuzhiyun 	RKMODULE_START_STREAM_BEHIND,
620*4882a593Smuzhiyun 	RKMODULE_START_STREAM_FRONT,
621*4882a593Smuzhiyun };
622*4882a593Smuzhiyun 
623*4882a593Smuzhiyun /*
624*4882a593Smuzhiyun  * HDMI to MIPI-CSI MODE IOCTL
625*4882a593Smuzhiyun  */
626*4882a593Smuzhiyun enum rkmodule_hdmiin_mode_seq {
627*4882a593Smuzhiyun 	RKMODULE_HDMIIN_DEFAULT = 0,
628*4882a593Smuzhiyun 	RKMODULE_HDMIIN_MODE,
629*4882a593Smuzhiyun };
630*4882a593Smuzhiyun /*
631*4882a593Smuzhiyun  * the causation to do cif reset work
632*4882a593Smuzhiyun  */
633*4882a593Smuzhiyun enum rkmodule_reset_src {
634*4882a593Smuzhiyun 	RKCIF_RESET_SRC_NON = 0x0,
635*4882a593Smuzhiyun 	RKCIF_RESET_SRC_ERR_CSI2,
636*4882a593Smuzhiyun 	RKCIF_RESET_SRC_ERR_LVDS,
637*4882a593Smuzhiyun 	RKICF_RESET_SRC_ERR_CUTOFF,
638*4882a593Smuzhiyun 	RKCIF_RESET_SRC_ERR_HOTPLUG,
639*4882a593Smuzhiyun 	RKCIF_RESET_SRC_ERR_APP,
640*4882a593Smuzhiyun };
641*4882a593Smuzhiyun 
642*4882a593Smuzhiyun struct rkmodule_vicap_reset_info {
643*4882a593Smuzhiyun 	__u32 is_reset;
644*4882a593Smuzhiyun 	enum rkmodule_reset_src src;
645*4882a593Smuzhiyun } __attribute__ ((packed));
646*4882a593Smuzhiyun 
647*4882a593Smuzhiyun struct rkmodule_bt656_mbus_info {
648*4882a593Smuzhiyun 	__u32 flags;
649*4882a593Smuzhiyun 	__u32 id_en_bits;
650*4882a593Smuzhiyun } __attribute__ ((packed));
651*4882a593Smuzhiyun 
652*4882a593Smuzhiyun /* DCG ratio (float) = integer + decimal / div_coeff */
653*4882a593Smuzhiyun struct rkmodule_dcg_ratio {
654*4882a593Smuzhiyun 	__u32 integer;
655*4882a593Smuzhiyun 	__u32 decimal;
656*4882a593Smuzhiyun 	__u32 div_coeff;
657*4882a593Smuzhiyun };
658*4882a593Smuzhiyun 
659*4882a593Smuzhiyun struct rkmodule_channel_info {
660*4882a593Smuzhiyun 	__u32 index;
661*4882a593Smuzhiyun 	__u32 vc;
662*4882a593Smuzhiyun 	__u32 width;
663*4882a593Smuzhiyun 	__u32 height;
664*4882a593Smuzhiyun 	__u32 bus_fmt;
665*4882a593Smuzhiyun 	__u32 data_type;
666*4882a593Smuzhiyun 	__u32 data_bit;
667*4882a593Smuzhiyun } __attribute__ ((packed));
668*4882a593Smuzhiyun 
669*4882a593Smuzhiyun /*
670*4882a593Smuzhiyun  * link to vicap
671*4882a593Smuzhiyun  * linear mode: pad0~pad3 for id0~id3;
672*4882a593Smuzhiyun  *
673*4882a593Smuzhiyun  * HDR_X2: id0 fiexd to vc0 for long frame
674*4882a593Smuzhiyun  *         id1 fixed to vc1 for short frame;
675*4882a593Smuzhiyun  *         id2~id3 reserved, can config by PAD2~PAD3
676*4882a593Smuzhiyun  *
677*4882a593Smuzhiyun  * HDR_X3: id0 fiexd to vc0 for long frame
678*4882a593Smuzhiyun  *         id1 fixed to vc1 for middle frame
679*4882a593Smuzhiyun  *         id2 fixed to vc2 for short frame;
680*4882a593Smuzhiyun  *         id3 reserved, can config by PAD3
681*4882a593Smuzhiyun  *
682*4882a593Smuzhiyun  * link to isp, the connection relationship is as follows
683*4882a593Smuzhiyun  */
684*4882a593Smuzhiyun enum rkmodule_max_pad {
685*4882a593Smuzhiyun 	PAD0, /* link to isp */
686*4882a593Smuzhiyun 	PAD1, /* link to csi wr0 | hdr x2:L x3:M */
687*4882a593Smuzhiyun 	PAD2, /* link to csi wr1 | hdr      x3:L */
688*4882a593Smuzhiyun 	PAD3, /* link to csi wr2 | hdr x2:M x3:S */
689*4882a593Smuzhiyun 	PAD_MAX,
690*4882a593Smuzhiyun };
691*4882a593Smuzhiyun 
692*4882a593Smuzhiyun /*
693*4882a593Smuzhiyun  * sensor exposure sync mode
694*4882a593Smuzhiyun  */
695*4882a593Smuzhiyun enum rkmodule_sync_mode {
696*4882a593Smuzhiyun 	NO_SYNC_MODE = 0,
697*4882a593Smuzhiyun 	EXTERNAL_MASTER_MODE,
698*4882a593Smuzhiyun 	INTERNAL_MASTER_MODE,
699*4882a593Smuzhiyun 	SLAVE_MODE,
700*4882a593Smuzhiyun };
701*4882a593Smuzhiyun 
702*4882a593Smuzhiyun struct rkmodule_mclk_data {
703*4882a593Smuzhiyun 	__u32 enable;
704*4882a593Smuzhiyun 	__u32 mclk_index;
705*4882a593Smuzhiyun 	__u32 mclk_rate;
706*4882a593Smuzhiyun 	__u32 reserved[8];
707*4882a593Smuzhiyun };
708*4882a593Smuzhiyun 
709*4882a593Smuzhiyun /*
710*4882a593Smuzhiyun  * csi dphy param
711*4882a593Smuzhiyun  * lp_vol_ref -> Reference voltage-645mV for LP  Function control pin
712*4882a593Smuzhiyun  * for rk3588 dcphy
713*4882a593Smuzhiyun  * 3'b000 : 605mV
714*4882a593Smuzhiyun  * 3'b001 : 625mV
715*4882a593Smuzhiyun  * 3'b010 : 635mV
716*4882a593Smuzhiyun  * 3'b011 : 645mV
717*4882a593Smuzhiyun  * 3'b100 : 655mV
718*4882a593Smuzhiyun  * 3'b101 : 665mV
719*4882a593Smuzhiyun  * 3'b110 : 685mV
720*4882a593Smuzhiyun  * 3'b111 : 725mV
721*4882a593Smuzhiyun  *
722*4882a593Smuzhiyun  * lp_hys_sw -> LP-RX Hysteresis Level Control
723*4882a593Smuzhiyun  * for rk3588 dcphy
724*4882a593Smuzhiyun  * 2'b00=45mV
725*4882a593Smuzhiyun  * 2'b01=65mV
726*4882a593Smuzhiyun  * 2'b10=85mV
727*4882a593Smuzhiyun  * 2'b11=100mV
728*4882a593Smuzhiyun  *
729*4882a593Smuzhiyun  * lp_escclk_pol_sel -> LP ESCCLK Polarity sel
730*4882a593Smuzhiyun  * for rk3588 dcphy
731*4882a593Smuzhiyun  * 1'b0: normal
732*4882a593Smuzhiyun  * 1'b1: swap ,Increase 1ns delay
733*4882a593Smuzhiyun  *
734*4882a593Smuzhiyun  * skew_data_cal_clk -> Skew Calibration Manual Data Fine Delay Control Register
735*4882a593Smuzhiyun  * for rk3588 dcphy
736*4882a593Smuzhiyun  * BIT[4:0] 30ps a step
737*4882a593Smuzhiyun  *
738*4882a593Smuzhiyun  * clk_hs_term_sel/data_hs_term_sel -> HS-RX Termination Impedance Control
739*4882a593Smuzhiyun  * for rk3588 dcphy
740*4882a593Smuzhiyun  * 3b'000 : 102Ω
741*4882a593Smuzhiyun  * 3b'001 : 99.1Ω
742*4882a593Smuzhiyun  * 3b'010 : 96.6Ω (default)
743*4882a593Smuzhiyun  * 3b'011 : 94.1Ω
744*4882a593Smuzhiyun  * 3b'100 : 113Ω
745*4882a593Smuzhiyun  * 3b'101 : 110Ω
746*4882a593Smuzhiyun  * 3b'110 : 107Ω
747*4882a593Smuzhiyun  * 3b'111 : 104Ω
748*4882a593Smuzhiyun  */
749*4882a593Smuzhiyun 
750*4882a593Smuzhiyun enum csi2_dphy_vendor {
751*4882a593Smuzhiyun 	PHY_VENDOR_INNO = 0x0,
752*4882a593Smuzhiyun 	PHY_VENDOR_SAMSUNG = 0x01,
753*4882a593Smuzhiyun };
754*4882a593Smuzhiyun 
755*4882a593Smuzhiyun struct rkmodule_csi_dphy_param {
756*4882a593Smuzhiyun 	__u32 vendor;
757*4882a593Smuzhiyun 	__u32 lp_vol_ref;
758*4882a593Smuzhiyun 	__u32 lp_hys_sw[DPHY_MAX_LANE];
759*4882a593Smuzhiyun 	__u32 lp_escclk_pol_sel[DPHY_MAX_LANE];
760*4882a593Smuzhiyun 	__u32 skew_data_cal_clk[DPHY_MAX_LANE];
761*4882a593Smuzhiyun 	__u32 clk_hs_term_sel;
762*4882a593Smuzhiyun 	__u32 data_hs_term_sel[DPHY_MAX_LANE];
763*4882a593Smuzhiyun 	__u32 reserved[32];
764*4882a593Smuzhiyun };
765*4882a593Smuzhiyun 
766*4882a593Smuzhiyun struct rkmodule_sensor_fmt {
767*4882a593Smuzhiyun 	__u32 sensor_index;
768*4882a593Smuzhiyun 	__u32 sensor_width;
769*4882a593Smuzhiyun 	__u32 sensor_height;
770*4882a593Smuzhiyun };
771*4882a593Smuzhiyun 
772*4882a593Smuzhiyun struct rkmodule_sensor_infos {
773*4882a593Smuzhiyun 	struct rkmodule_sensor_fmt sensor_fmt[RKMODULE_MAX_SENSOR_NUM];
774*4882a593Smuzhiyun };
775*4882a593Smuzhiyun 
776*4882a593Smuzhiyun enum rkmodule_capture_mode {
777*4882a593Smuzhiyun 	RKMODULE_CAPTURE_MODE_NONE = 0,
778*4882a593Smuzhiyun 	RKMODULE_MULTI_DEV_COMBINE_ONE,
779*4882a593Smuzhiyun 	RKMODULE_ONE_CH_TO_MULTI_ISP,
780*4882a593Smuzhiyun 	RKMODULE_MULTI_CH_TO_MULTI_ISP,
781*4882a593Smuzhiyun 	RKMODULE_MULTI_CH_COMBINE_SQUARE,
782*4882a593Smuzhiyun };
783*4882a593Smuzhiyun 
784*4882a593Smuzhiyun struct rkmodule_multi_dev_info {
785*4882a593Smuzhiyun 	__u32 dev_idx[RKMODULE_MULTI_DEV_NUM];
786*4882a593Smuzhiyun 	__u32 combine_idx[RKMODULE_MULTI_DEV_NUM];
787*4882a593Smuzhiyun 	__u32 pixel_offset;
788*4882a593Smuzhiyun 	__u32 dev_num;
789*4882a593Smuzhiyun 	__u32 reserved[8];
790*4882a593Smuzhiyun };
791*4882a593Smuzhiyun 
792*4882a593Smuzhiyun struct rkmodule_one_to_multi_info {
793*4882a593Smuzhiyun 	__u32 isp_num;
794*4882a593Smuzhiyun 	__u32 frame_pattern[RKMODULE_MULTI_DEV_NUM];
795*4882a593Smuzhiyun };
796*4882a593Smuzhiyun 
797*4882a593Smuzhiyun struct rkmodule_multi_combine_info {
798*4882a593Smuzhiyun 	__u32 combine_num;
799*4882a593Smuzhiyun 	__u32 combine_index[RKMODULE_MULTI_DEV_NUM];
800*4882a593Smuzhiyun };
801*4882a593Smuzhiyun 
802*4882a593Smuzhiyun struct rkmodule_capture_info {
803*4882a593Smuzhiyun 	__u32 mode;
804*4882a593Smuzhiyun 	union {
805*4882a593Smuzhiyun 		struct rkmodule_multi_dev_info multi_dev;
806*4882a593Smuzhiyun 		struct rkmodule_one_to_multi_info one_to_multi;
807*4882a593Smuzhiyun 		struct rkmodule_multi_combine_info multi_combine_info;
808*4882a593Smuzhiyun 	};
809*4882a593Smuzhiyun };
810*4882a593Smuzhiyun 
811*4882a593Smuzhiyun #endif /* _UAPI_RKMODULE_CAMERA_H */
812