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