13d0407baSopenharmony_ci/* SPDX-License-Identifier: ((GPL-2.0+ WITH Linux-syscall-note) OR MIT) */ 23d0407baSopenharmony_ci/* 33d0407baSopenharmony_ci * Rockchip module information 43d0407baSopenharmony_ci * Copyright (C) 2018-2019 Rockchip Electronics Co., Ltd. 53d0407baSopenharmony_ci */ 63d0407baSopenharmony_ci 73d0407baSopenharmony_ci#ifndef UAPI_RKMODULE_CAMERA_H 83d0407baSopenharmony_ci#define UAPI_RKMODULE_CAMERA_H 93d0407baSopenharmony_ci 103d0407baSopenharmony_ci#include <linux/types.h> 113d0407baSopenharmony_ci#include <linux/rk-video-format.h> 123d0407baSopenharmony_ci 133d0407baSopenharmony_ci#define RKMODULE_API_VERSION KERNEL_VERSION(0, 1, 0x2) 143d0407baSopenharmony_ci 153d0407baSopenharmony_ci/* using for rk3588 dual isp unite */ 163d0407baSopenharmony_ci#define RKMOUDLE_UNITE_EXTEND_PIXEL 128 173d0407baSopenharmony_ci/* using for rv1109 and rv1126 */ 183d0407baSopenharmony_ci#define RKMODULE_EXTEND_LINE 24 193d0407baSopenharmony_ci 203d0407baSopenharmony_ci#define RKMODULE_NAME_LEN 32 213d0407baSopenharmony_ci#define RKMODULE_LSCDATA_LEN 289 223d0407baSopenharmony_ci 233d0407baSopenharmony_ci#define RKMODULE_MAX_VC_CH 4 243d0407baSopenharmony_ci 253d0407baSopenharmony_ci#define RKMODULE_PADF_GAINMAP_LEN 1024 263d0407baSopenharmony_ci#define RKMODULE_PDAF_DCCMAP_LEN 256 273d0407baSopenharmony_ci#define RKMODULE_AF_OTP_MAX_LEN 3 283d0407baSopenharmony_ci 293d0407baSopenharmony_ci#define RKMODULE_CAMERA_MODULE_INDEX "rockchip,camera-module-index" 303d0407baSopenharmony_ci#define RKMODULE_CAMERA_MODULE_FACING "rockchip,camera-module-facing" 313d0407baSopenharmony_ci#define RKMODULE_CAMERA_MODULE_NAME "rockchip,camera-module-name" 323d0407baSopenharmony_ci#define RKMODULE_CAMERA_LENS_NAME "rockchip,camera-module-lens-name" 333d0407baSopenharmony_ci 343d0407baSopenharmony_ci#define RKMODULE_CAMERA_SYNC_MODE "rockchip,camera-module-sync-mode" 353d0407baSopenharmony_ci#define RKMODULE_INTERNAL_MASTER_MODE "internal_master" 363d0407baSopenharmony_ci#define RKMODULE_EXTERNAL_MASTER_MODE "external_master" 373d0407baSopenharmony_ci#define RKMODULE_SLAVE_MODE "slave" 383d0407baSopenharmony_ci 393d0407baSopenharmony_ci/* BT.656 & BT.1120 multi channel 403d0407baSopenharmony_ci * On which channels it can send video data 413d0407baSopenharmony_ci * related with struct rkmodule_bt656_mbus_info 423d0407baSopenharmony_ci */ 433d0407baSopenharmony_ci#define RKMODULE_CAMERA_BT656_ID_EN_BITS_1 (0x1) 443d0407baSopenharmony_ci#define RKMODULE_CAMERA_BT656_ID_EN_BITS_2 (0x3) 453d0407baSopenharmony_ci#define RKMODULE_CAMERA_BT656_ID_EN_BITS_3 (0x7) 463d0407baSopenharmony_ci#define RKMODULE_CAMERA_BT656_ID_EN_BITS_4 (0xf) 473d0407baSopenharmony_ci#define RKMODULE_CAMERA_BT656_PARSE_ID_LSB BIT(0) 483d0407baSopenharmony_ci#define RKMODULE_CAMERA_BT656_PARSE_ID_MSB BIT(1) 493d0407baSopenharmony_ci#define RKMODULE_CAMERA_BT656_CHANNEL_0 BIT(2) 503d0407baSopenharmony_ci#define RKMODULE_CAMERA_BT656_CHANNEL_1 BIT(3) 513d0407baSopenharmony_ci#define RKMODULE_CAMERA_BT656_CHANNEL_2 BIT(4) 523d0407baSopenharmony_ci#define RKMODULE_CAMERA_BT656_CHANNEL_3 BIT(5) 533d0407baSopenharmony_ci#define RKMODULE_CAMERA_BT656_CHANNELS \ 543d0407baSopenharmony_ci (RKMODULE_CAMERA_BT656_CHANNEL_0 | RKMODULE_CAMERA_BT656_CHANNEL_1 | RKMODULE_CAMERA_BT656_CHANNEL_2 | \ 553d0407baSopenharmony_ci RKMODULE_CAMERA_BT656_CHANNEL_3) 563d0407baSopenharmony_ci 573d0407baSopenharmony_ci#define RKMODULE_GET_MODULE_INFO _IOR('V', BASE_VIDIOC_PRIVATE + 0, struct rkmodule_inf) 583d0407baSopenharmony_ci 593d0407baSopenharmony_ci#define RKMODULE_AWB_CFG _IOW('V', BASE_VIDIOC_PRIVATE + 1, struct rkmodule_awb_cfg) 603d0407baSopenharmony_ci 613d0407baSopenharmony_ci#define RKMODULE_AF_CFG _IOW('V', BASE_VIDIOC_PRIVATE + 2, struct rkmodule_af_cfg) 623d0407baSopenharmony_ci 633d0407baSopenharmony_ci#define RKMODULE_LSC_CFG _IOW('V', BASE_VIDIOC_PRIVATE + 3, struct rkmodule_lsc_cfg) 643d0407baSopenharmony_ci 653d0407baSopenharmony_ci#define RKMODULE_GET_HDR_CFG _IOR('V', BASE_VIDIOC_PRIVATE + 4, struct rkmodule_hdr_cfg) 663d0407baSopenharmony_ci 673d0407baSopenharmony_ci#define RKMODULE_SET_HDR_CFG _IOW('V', BASE_VIDIOC_PRIVATE + 5, struct rkmodule_hdr_cfg) 683d0407baSopenharmony_ci 693d0407baSopenharmony_ci#define RKMODULE_SET_CONVERSION_GAIN _IOW('V', BASE_VIDIOC_PRIVATE + 6, __u32) 703d0407baSopenharmony_ci 713d0407baSopenharmony_ci#define RKMODULE_GET_LVDS_CFG _IOR('V', BASE_VIDIOC_PRIVATE + 7, struct rkmodule_lvds_cfg) 723d0407baSopenharmony_ci 733d0407baSopenharmony_ci#define RKMODULE_SET_DPCC_CFG _IOW('V', BASE_VIDIOC_PRIVATE + 8, struct rkmodule_dpcc_cfg) 743d0407baSopenharmony_ci 753d0407baSopenharmony_ci#define RKMODULE_GET_NR_SWITCH_THRESHOLD _IOR('V', BASE_VIDIOC_PRIVATE + 9, struct rkmodule_nr_switch_threshold) 763d0407baSopenharmony_ci 773d0407baSopenharmony_ci#define RKMODULE_SET_QUICK_STREAM _IOW('V', BASE_VIDIOC_PRIVATE + 10, __u32) 783d0407baSopenharmony_ci 793d0407baSopenharmony_ci#define RKMODULE_GET_BT656_INTF_TYPE _IOR('V', BASE_VIDIOC_PRIVATE + 11, __u32) 803d0407baSopenharmony_ci 813d0407baSopenharmony_ci#define RKMODULE_GET_VC_FMT_INFO _IOR('V', BASE_VIDIOC_PRIVATE + 12, struct rkmodule_vc_fmt_info) 823d0407baSopenharmony_ci 833d0407baSopenharmony_ci#define RKMODULE_GET_VC_HOTPLUG_INFO _IOR('V', BASE_VIDIOC_PRIVATE + 13, struct rkmodule_vc_hotplug_info) 843d0407baSopenharmony_ci 853d0407baSopenharmony_ci#define RKMODULE_GET_START_STREAM_SEQ _IOR('V', BASE_VIDIOC_PRIVATE + 14, __u32) 863d0407baSopenharmony_ci 873d0407baSopenharmony_ci#define RKMODULE_GET_VICAP_RST_INFO _IOR('V', BASE_VIDIOC_PRIVATE + 15, struct rkmodule_vicap_reset_info) 883d0407baSopenharmony_ci 893d0407baSopenharmony_ci#define RKMODULE_SET_VICAP_RST_INFO _IOW('V', BASE_VIDIOC_PRIVATE + 16, struct rkmodule_vicap_reset_info) 903d0407baSopenharmony_ci 913d0407baSopenharmony_ci#define RKMODULE_GET_BT656_MBUS_INFO _IOR('V', BASE_VIDIOC_PRIVATE + 17, struct rkmodule_bt656_mbus_info) 923d0407baSopenharmony_ci 933d0407baSopenharmony_ci#define RKMODULE_GET_DCG_RATIO _IOR('V', BASE_VIDIOC_PRIVATE + 18, struct rkmodule_dcg_ratio) 943d0407baSopenharmony_ci 953d0407baSopenharmony_ci#define RKMODULE_GET_SONY_BRL _IOR('V', BASE_VIDIOC_PRIVATE + 19, __u32) 963d0407baSopenharmony_ci 973d0407baSopenharmony_ci#define RKMODULE_GET_CHANNEL_INFO _IOWR('V', BASE_VIDIOC_PRIVATE + 20, struct rkmodule_channel_info) 983d0407baSopenharmony_ci 993d0407baSopenharmony_ci#define RKMODULE_GET_SYNC_MODE _IOR('V', BASE_VIDIOC_PRIVATE + 21, __u32) 1003d0407baSopenharmony_ci 1013d0407baSopenharmony_ci#define RKMODULE_SET_SYNC_MODE _IOW('V', BASE_VIDIOC_PRIVATE + 22, __u32) 1023d0407baSopenharmony_ci 1033d0407baSopenharmony_ci/** 1043d0407baSopenharmony_ci * struct rkmodule_base_inf - module base information 1053d0407baSopenharmony_ci * 1063d0407baSopenharmony_ci */ 1073d0407baSopenharmony_cistruct rkmodule_base_inf { 1083d0407baSopenharmony_ci char sensor[RKMODULE_NAME_LEN]; 1093d0407baSopenharmony_ci char module[RKMODULE_NAME_LEN]; 1103d0407baSopenharmony_ci char lens[RKMODULE_NAME_LEN]; 1113d0407baSopenharmony_ci} __attribute__((packed)); 1123d0407baSopenharmony_ci 1133d0407baSopenharmony_ci/** 1143d0407baSopenharmony_ci * struct rkmodule_fac_inf - module factory information 1153d0407baSopenharmony_ci * 1163d0407baSopenharmony_ci */ 1173d0407baSopenharmony_cistruct rkmodule_fac_inf { 1183d0407baSopenharmony_ci __u32 flag; 1193d0407baSopenharmony_ci 1203d0407baSopenharmony_ci char module[RKMODULE_NAME_LEN]; 1213d0407baSopenharmony_ci char lens[RKMODULE_NAME_LEN]; 1223d0407baSopenharmony_ci __u32 year; 1233d0407baSopenharmony_ci __u32 month; 1243d0407baSopenharmony_ci __u32 day; 1253d0407baSopenharmony_ci} __attribute__((packed)); 1263d0407baSopenharmony_ci 1273d0407baSopenharmony_ci/** 1283d0407baSopenharmony_ci * struct rkmodule_awb_inf - module awb information 1293d0407baSopenharmony_ci * 1303d0407baSopenharmony_ci */ 1313d0407baSopenharmony_cistruct rkmodule_awb_inf { 1323d0407baSopenharmony_ci __u32 flag; 1333d0407baSopenharmony_ci 1343d0407baSopenharmony_ci __u32 r_value; 1353d0407baSopenharmony_ci __u32 b_value; 1363d0407baSopenharmony_ci __u32 gr_value; 1373d0407baSopenharmony_ci __u32 gb_value; 1383d0407baSopenharmony_ci 1393d0407baSopenharmony_ci __u32 golden_r_value; 1403d0407baSopenharmony_ci __u32 golden_b_value; 1413d0407baSopenharmony_ci __u32 golden_gr_value; 1423d0407baSopenharmony_ci __u32 golden_gb_value; 1433d0407baSopenharmony_ci} __attribute__((packed)); 1443d0407baSopenharmony_ci 1453d0407baSopenharmony_ci/** 1463d0407baSopenharmony_ci * struct rkmodule_lsc_inf - module lsc information 1473d0407baSopenharmony_ci * 1483d0407baSopenharmony_ci */ 1493d0407baSopenharmony_cistruct rkmodule_lsc_inf { 1503d0407baSopenharmony_ci __u32 flag; 1513d0407baSopenharmony_ci 1523d0407baSopenharmony_ci __u16 lsc_w; 1533d0407baSopenharmony_ci __u16 lsc_h; 1543d0407baSopenharmony_ci __u16 decimal_bits; 1553d0407baSopenharmony_ci 1563d0407baSopenharmony_ci __u16 lsc_r[RKMODULE_LSCDATA_LEN]; 1573d0407baSopenharmony_ci __u16 lsc_b[RKMODULE_LSCDATA_LEN]; 1583d0407baSopenharmony_ci __u16 lsc_gr[RKMODULE_LSCDATA_LEN]; 1593d0407baSopenharmony_ci __u16 lsc_gb[RKMODULE_LSCDATA_LEN]; 1603d0407baSopenharmony_ci 1613d0407baSopenharmony_ci __u16 width; 1623d0407baSopenharmony_ci __u16 height; 1633d0407baSopenharmony_ci __u16 table_size; 1643d0407baSopenharmony_ci} __attribute__((packed)); 1653d0407baSopenharmony_ci 1663d0407baSopenharmony_ci/** 1673d0407baSopenharmony_ci * enum rkmodule_af_dir - enum of module af otp direction 1683d0407baSopenharmony_ci */ 1693d0407baSopenharmony_cienum rkmodele_af_otp_dir { 1703d0407baSopenharmony_ci AF_OTP_DIR_HORIZONTAL = 0, 1713d0407baSopenharmony_ci AF_OTP_DIR_UP = 1, 1723d0407baSopenharmony_ci AF_OTP_DIR_DOWN = 2, 1733d0407baSopenharmony_ci}; 1743d0407baSopenharmony_ci 1753d0407baSopenharmony_ci/** 1763d0407baSopenharmony_ci * struct rkmodule_af_otp - module af otp in one direction 1773d0407baSopenharmony_ci */ 1783d0407baSopenharmony_cistruct rkmodule_af_otp { 1793d0407baSopenharmony_ci __u32 vcm_start; 1803d0407baSopenharmony_ci __u32 vcm_end; 1813d0407baSopenharmony_ci __u32 vcm_dir; 1823d0407baSopenharmony_ci}; 1833d0407baSopenharmony_ci 1843d0407baSopenharmony_ci/** 1853d0407baSopenharmony_ci * struct rkmodule_af_inf - module af information 1863d0407baSopenharmony_ci * 1873d0407baSopenharmony_ci */ 1883d0407baSopenharmony_cistruct rkmodule_af_inf { 1893d0407baSopenharmony_ci __u32 flag; 1903d0407baSopenharmony_ci __u32 dir_cnt; 1913d0407baSopenharmony_ci struct rkmodule_af_otp af_otp[RKMODULE_AF_OTP_MAX_LEN]; 1923d0407baSopenharmony_ci} __attribute__((packed)); 1933d0407baSopenharmony_ci 1943d0407baSopenharmony_ci/** 1953d0407baSopenharmony_ci * struct rkmodule_pdaf_inf - module pdaf information 1963d0407baSopenharmony_ci * 1973d0407baSopenharmony_ci */ 1983d0407baSopenharmony_cistruct rkmodule_pdaf_inf { 1993d0407baSopenharmony_ci __u32 flag; 2003d0407baSopenharmony_ci 2013d0407baSopenharmony_ci __u32 gainmap_width; 2023d0407baSopenharmony_ci __u32 gainmap_height; 2033d0407baSopenharmony_ci __u32 dccmap_width; 2043d0407baSopenharmony_ci __u32 dccmap_height; 2053d0407baSopenharmony_ci __u32 dcc_mode; 2063d0407baSopenharmony_ci __u32 dcc_dir; 2073d0407baSopenharmony_ci __u16 gainmap[RKMODULE_PADF_GAINMAP_LEN]; 2083d0407baSopenharmony_ci __u16 dccmap[RKMODULE_PDAF_DCCMAP_LEN]; 2093d0407baSopenharmony_ci} __attribute__((packed)); 2103d0407baSopenharmony_ci 2113d0407baSopenharmony_ci/** 2123d0407baSopenharmony_ci * struct rkmodule_otp_module_inf - otp module info 2133d0407baSopenharmony_ci * 2143d0407baSopenharmony_ci */ 2153d0407baSopenharmony_cistruct rkmodule_otp_module_inf { 2163d0407baSopenharmony_ci __u32 flag; 2173d0407baSopenharmony_ci __u8 vendor[8]; 2183d0407baSopenharmony_ci __u32 module_id; 2193d0407baSopenharmony_ci __u16 version; 2203d0407baSopenharmony_ci __u16 full_width; 2213d0407baSopenharmony_ci __u16 full_height; 2223d0407baSopenharmony_ci __u8 supplier_id; 2233d0407baSopenharmony_ci __u8 year; 2243d0407baSopenharmony_ci __u8 mouth; 2253d0407baSopenharmony_ci __u8 day; 2263d0407baSopenharmony_ci __u8 sensor_id; 2273d0407baSopenharmony_ci __u8 lens_id; 2283d0407baSopenharmony_ci __u8 vcm_id; 2293d0407baSopenharmony_ci __u8 drv_id; 2303d0407baSopenharmony_ci __u8 flip; 2313d0407baSopenharmony_ci} __attribute__((packed)); 2323d0407baSopenharmony_ci 2333d0407baSopenharmony_ci/** 2343d0407baSopenharmony_ci * struct rkmodule_inf - module information 2353d0407baSopenharmony_ci * 2363d0407baSopenharmony_ci */ 2373d0407baSopenharmony_cistruct rkmodule_inf { 2383d0407baSopenharmony_ci struct rkmodule_base_inf base; 2393d0407baSopenharmony_ci struct rkmodule_fac_inf fac; 2403d0407baSopenharmony_ci struct rkmodule_awb_inf awb; 2413d0407baSopenharmony_ci struct rkmodule_lsc_inf lsc; 2423d0407baSopenharmony_ci struct rkmodule_af_inf af; 2433d0407baSopenharmony_ci struct rkmodule_pdaf_inf pdaf; 2443d0407baSopenharmony_ci struct rkmodule_otp_module_inf module_inf; 2453d0407baSopenharmony_ci} __attribute__((packed)); 2463d0407baSopenharmony_ci 2473d0407baSopenharmony_ci/** 2483d0407baSopenharmony_ci * struct rkmodule_awb_inf - module awb information 2493d0407baSopenharmony_ci * 2503d0407baSopenharmony_ci */ 2513d0407baSopenharmony_cistruct rkmodule_awb_cfg { 2523d0407baSopenharmony_ci __u32 enable; 2533d0407baSopenharmony_ci __u32 golden_r_value; 2543d0407baSopenharmony_ci __u32 golden_b_value; 2553d0407baSopenharmony_ci __u32 golden_gr_value; 2563d0407baSopenharmony_ci __u32 golden_gb_value; 2573d0407baSopenharmony_ci} __attribute__((packed)); 2583d0407baSopenharmony_ci 2593d0407baSopenharmony_ci/** 2603d0407baSopenharmony_ci * struct rkmodule_af_cfg 2613d0407baSopenharmony_ci * 2623d0407baSopenharmony_ci */ 2633d0407baSopenharmony_cistruct rkmodule_af_cfg { 2643d0407baSopenharmony_ci __u32 enable; 2653d0407baSopenharmony_ci __u32 vcm_start; 2663d0407baSopenharmony_ci __u32 vcm_end; 2673d0407baSopenharmony_ci __u32 vcm_dir; 2683d0407baSopenharmony_ci} __attribute__((packed)); 2693d0407baSopenharmony_ci 2703d0407baSopenharmony_ci/** 2713d0407baSopenharmony_ci * struct rkmodule_lsc_cfg 2723d0407baSopenharmony_ci * 2733d0407baSopenharmony_ci */ 2743d0407baSopenharmony_cistruct rkmodule_lsc_cfg { 2753d0407baSopenharmony_ci __u32 enable; 2763d0407baSopenharmony_ci} __attribute__((packed)); 2773d0407baSopenharmony_ci 2783d0407baSopenharmony_ci/** 2793d0407baSopenharmony_ci * NO_HDR: linear mode 2803d0407baSopenharmony_ci * HDR_X2: hdr two frame or line mode 2813d0407baSopenharmony_ci * HDR_X3: hdr three or line mode 2823d0407baSopenharmony_ci */ 2833d0407baSopenharmony_cienum rkmodule_hdr_mode { 2843d0407baSopenharmony_ci NO_HDR = 0, 2853d0407baSopenharmony_ci HDR_X2 = 5, 2863d0407baSopenharmony_ci HDR_X3 = 6, 2873d0407baSopenharmony_ci}; 2883d0407baSopenharmony_ci 2893d0407baSopenharmony_ci/** 2903d0407baSopenharmony_ci * HDR_NORMAL_VC: hdr frame with diff virtual channels 2913d0407baSopenharmony_ci * HDR_LINE_CNT: hdr frame with line counter 2923d0407baSopenharmony_ci * HDR_ID_CODE: hdr frame with identification code 2933d0407baSopenharmony_ci */ 2943d0407baSopenharmony_cienum hdr_esp_mode { 2953d0407baSopenharmony_ci HDR_NORMAL_VC = 0, 2963d0407baSopenharmony_ci HDR_LINE_CNT, 2973d0407baSopenharmony_ci HDR_ID_CODE, 2983d0407baSopenharmony_ci}; 2993d0407baSopenharmony_ci 3003d0407baSopenharmony_ci/** 3013d0407baSopenharmony_ci * lcnt: line counter 3023d0407baSopenharmony_ci * padnum: the pixels of padding row 3033d0407baSopenharmony_ci * padpix: the payload of padding 3043d0407baSopenharmony_ci * idcd: identification code 3053d0407baSopenharmony_ci * efpix: identification code of Effective line 3063d0407baSopenharmony_ci * obpix: identification code of OB line 3073d0407baSopenharmony_ci */ 3083d0407baSopenharmony_cistruct rkmodule_hdr_esp { 3093d0407baSopenharmony_ci enum hdr_esp_mode mode; 3103d0407baSopenharmony_ci union { 3113d0407baSopenharmony_ci struct { 3123d0407baSopenharmony_ci __u32 padnum; 3133d0407baSopenharmony_ci __u32 padpix; 3143d0407baSopenharmony_ci } lcnt; 3153d0407baSopenharmony_ci struct { 3163d0407baSopenharmony_ci __u32 efpix; 3173d0407baSopenharmony_ci __u32 obpix; 3183d0407baSopenharmony_ci } idcd; 3193d0407baSopenharmony_ci } val; 3203d0407baSopenharmony_ci}; 3213d0407baSopenharmony_ci 3223d0407baSopenharmony_cistruct rkmodule_hdr_cfg { 3233d0407baSopenharmony_ci __u32 hdr_mode; 3243d0407baSopenharmony_ci struct rkmodule_hdr_esp esp; 3253d0407baSopenharmony_ci} __attribute__((packed)); 3263d0407baSopenharmony_ci 3273d0407baSopenharmony_ci/* sensor lvds sync code 3283d0407baSopenharmony_ci * sav: start of active video codes 3293d0407baSopenharmony_ci * eav: end of active video codes 3303d0407baSopenharmony_ci */ 3313d0407baSopenharmony_cistruct rkmodule_sync_code { 3323d0407baSopenharmony_ci __u16 sav; 3333d0407baSopenharmony_ci __u16 eav; 3343d0407baSopenharmony_ci}; 3353d0407baSopenharmony_ci 3363d0407baSopenharmony_ci/* sensor lvds difference sync code mode 3373d0407baSopenharmony_ci * LS_FIRST: valid line ls-le or sav-eav 3383d0407baSopenharmony_ci * invalid line fs-fe or sav-eav 3393d0407baSopenharmony_ci * FS_FIRST: valid line fs-le 3403d0407baSopenharmony_ci * invalid line ls-fe 3413d0407baSopenharmony_ci * ls: line start 3423d0407baSopenharmony_ci * le: line end 3433d0407baSopenharmony_ci * fs: frame start 3443d0407baSopenharmony_ci * fe: frame end 3453d0407baSopenharmony_ci * SONY_DOL_HDR_1: sony dol hdr pattern 1 3463d0407baSopenharmony_ci * SONY_DOL_HDR_2: sony dol hdr pattern 2 3473d0407baSopenharmony_ci */ 3483d0407baSopenharmony_cienum rkmodule_lvds_mode { LS_FIRST = 0, FS_FIRST, SONY_DOL_HDR_1, SONY_DOL_HDR_2 }; 3493d0407baSopenharmony_ci 3503d0407baSopenharmony_ci/* sync code of different frame type (hdr or linear) for lvds 3513d0407baSopenharmony_ci * act: valid line sync code 3523d0407baSopenharmony_ci * blk: invalid line sync code 3533d0407baSopenharmony_ci */ 3543d0407baSopenharmony_cistruct rkmodule_lvds_frm_sync_code { 3553d0407baSopenharmony_ci struct rkmodule_sync_code act; 3563d0407baSopenharmony_ci struct rkmodule_sync_code blk; 3573d0407baSopenharmony_ci}; 3583d0407baSopenharmony_ci 3593d0407baSopenharmony_ci/* sync code for lvds of sensor 3603d0407baSopenharmony_ci * odd_sync_code: sync code of odd frame id for lvds of sony sensor 3613d0407baSopenharmony_ci * even_sync_code: sync code of even frame id for lvds of sony sensor 3623d0407baSopenharmony_ci */ 3633d0407baSopenharmony_cistruct rkmodule_lvds_frame_sync_code { 3643d0407baSopenharmony_ci struct rkmodule_lvds_frm_sync_code odd_sync_code; 3653d0407baSopenharmony_ci struct rkmodule_lvds_frm_sync_code even_sync_code; 3663d0407baSopenharmony_ci}; 3673d0407baSopenharmony_ci 3683d0407baSopenharmony_ci/* lvds sync code category of sensor for different operation */ 3693d0407baSopenharmony_cienum rkmodule_lvds_sync_code_group { 3703d0407baSopenharmony_ci LVDS_CODE_GRP_LINEAR = 0x0, 3713d0407baSopenharmony_ci LVDS_CODE_GRP_LONG, 3723d0407baSopenharmony_ci LVDS_CODE_GRP_MEDIUM, 3733d0407baSopenharmony_ci LVDS_CODE_GRP_SHORT, 3743d0407baSopenharmony_ci LVDS_CODE_GRP_MAX 3753d0407baSopenharmony_ci}; 3763d0407baSopenharmony_ci 3773d0407baSopenharmony_ci/* struct rkmodule_lvds_cfg 3783d0407baSopenharmony_ci * frm_sync_code[index]: 3793d0407baSopenharmony_ci * index == LVDS_CODE_GRP_LONG: 3803d0407baSopenharmony_ci * sync code for frame of linear mode or for long frame of hdr mode 3813d0407baSopenharmony_ci * index == LVDS_CODE_GRP_MEDIUM: 3823d0407baSopenharmony_ci * sync code for medium long frame of hdr mode 3833d0407baSopenharmony_ci * index == LVDS_CODE_GRP_SHOR: 3843d0407baSopenharmony_ci * sync code for short long frame of hdr mode 3853d0407baSopenharmony_ci */ 3863d0407baSopenharmony_cistruct rkmodule_lvds_cfg { 3873d0407baSopenharmony_ci enum rkmodule_lvds_mode mode; 3883d0407baSopenharmony_ci struct rkmodule_lvds_frame_sync_code frm_sync_code[LVDS_CODE_GRP_MAX]; 3893d0407baSopenharmony_ci} __attribute__((packed)); 3903d0407baSopenharmony_ci 3913d0407baSopenharmony_ci/** 3923d0407baSopenharmony_ci * struct rkmodule_dpcc_cfg 3933d0407baSopenharmony_ci * enable: 0 -> disable dpcc, 1 -> enable multiple, 3943d0407baSopenharmony_ci * 2 -> enable single, 3 -> enable all; 3953d0407baSopenharmony_ci * cur_single_dpcc: the strength of single dpcc; 3963d0407baSopenharmony_ci * cur_multiple_dpcc: the strength of multiple dpcc; 3973d0407baSopenharmony_ci * total_dpcc: the max strength; 3983d0407baSopenharmony_ci */ 3993d0407baSopenharmony_cistruct rkmodule_dpcc_cfg { 4003d0407baSopenharmony_ci __u32 enable; 4013d0407baSopenharmony_ci __u32 cur_single_dpcc; 4023d0407baSopenharmony_ci __u32 cur_multiple_dpcc; 4033d0407baSopenharmony_ci __u32 total_dpcc; 4043d0407baSopenharmony_ci} __attribute__((packed)); 4053d0407baSopenharmony_ci 4063d0407baSopenharmony_ci/** 4073d0407baSopenharmony_ci * nr switch by gain 4083d0407baSopenharmony_ci * direct: 0 -> up_thres LSNR to HSNR, 1 -> up_thres HSNR to LSNR 4093d0407baSopenharmony_ci * up_thres: threshold of nr change from low gain to high gain 4103d0407baSopenharmony_ci * down_thres: threshold of nr change from high gain to low gain; 4113d0407baSopenharmony_ci * div_coeff: Coefficients converted from float to int 4123d0407baSopenharmony_ci */ 4133d0407baSopenharmony_cistruct rkmodule_nr_switch_threshold { 4143d0407baSopenharmony_ci __u32 direct; 4153d0407baSopenharmony_ci __u32 up_thres; 4163d0407baSopenharmony_ci __u32 down_thres; 4173d0407baSopenharmony_ci __u32 div_coeff; 4183d0407baSopenharmony_ci} __attribute__((packed)); 4193d0407baSopenharmony_ci 4203d0407baSopenharmony_ci/** 4213d0407baSopenharmony_ci * enum rkmodule_bt656_intf_type 4223d0407baSopenharmony_ci * to support sony bt656 raw 4233d0407baSopenharmony_ci */ 4243d0407baSopenharmony_cienum rkmodule_bt656_intf_type { 4253d0407baSopenharmony_ci BT656_STD_RAW = 0, 4263d0407baSopenharmony_ci BT656_SONY_RAW, 4273d0407baSopenharmony_ci}; 4283d0407baSopenharmony_ci 4293d0407baSopenharmony_ci/** 4303d0407baSopenharmony_ci * struct rkmodule_vc_fmt_info - virtual channels fmt info 4313d0407baSopenharmony_ci * 4323d0407baSopenharmony_ci */ 4333d0407baSopenharmony_cistruct rkmodule_vc_fmt_info { 4343d0407baSopenharmony_ci __u32 width[RKMODULE_MAX_VC_CH]; 4353d0407baSopenharmony_ci __u32 height[RKMODULE_MAX_VC_CH]; 4363d0407baSopenharmony_ci __u32 fps[RKMODULE_MAX_VC_CH]; 4373d0407baSopenharmony_ci} __attribute__((packed)); 4383d0407baSopenharmony_ci 4393d0407baSopenharmony_ci/** 4403d0407baSopenharmony_ci * struct rkmodule_vc_hotplug_info - virtual channels hotplug status info 4413d0407baSopenharmony_ci * detect_status: hotplug status 4423d0407baSopenharmony_ci * bit 0~3 means channels id, value : 0 -> plug out, 1 -> plug in. 4433d0407baSopenharmony_ci */ 4443d0407baSopenharmony_cistruct rkmodule_vc_hotplug_info { 4453d0407baSopenharmony_ci __u8 detect_status; 4463d0407baSopenharmony_ci} __attribute__((packed)); 4473d0407baSopenharmony_ci 4483d0407baSopenharmony_ci/* sensor start stream sequence 4493d0407baSopenharmony_ci * RKMODULE_START_STREAM_DEFAULT: by default 4503d0407baSopenharmony_ci * RKMODULE_START_STREAM_BEHIND : sensor start stream should be behind the controller 4513d0407baSopenharmony_ci * RKMODULE_START_STREAM_FRONT : sensor start stream should be in front of the controller 4523d0407baSopenharmony_ci */ 4533d0407baSopenharmony_cienum rkmodule_start_stream_seq { 4543d0407baSopenharmony_ci RKMODULE_START_STREAM_DEFAULT = 0, 4553d0407baSopenharmony_ci RKMODULE_START_STREAM_BEHIND, 4563d0407baSopenharmony_ci RKMODULE_START_STREAM_FRONT, 4573d0407baSopenharmony_ci}; 4583d0407baSopenharmony_ci 4593d0407baSopenharmony_ci/* 4603d0407baSopenharmony_ci * the causation to do cif reset work 4613d0407baSopenharmony_ci */ 4623d0407baSopenharmony_cienum rkmodule_reset_src { 4633d0407baSopenharmony_ci RKCIF_RESET_SRC_NON = 0x0, 4643d0407baSopenharmony_ci RKCIF_RESET_SRC_ERR_CSI2, 4653d0407baSopenharmony_ci RKCIF_RESET_SRC_ERR_LVDS, 4663d0407baSopenharmony_ci RKICF_RESET_SRC_ERR_CUTOFF, 4673d0407baSopenharmony_ci RKCIF_RESET_SRC_ERR_HOTPLUG, 4683d0407baSopenharmony_ci RKCIF_RESET_SRC_ERR_APP, 4693d0407baSopenharmony_ci}; 4703d0407baSopenharmony_ci 4713d0407baSopenharmony_cistruct rkmodule_vicap_reset_info { 4723d0407baSopenharmony_ci __u32 is_reset; 4733d0407baSopenharmony_ci enum rkmodule_reset_src src; 4743d0407baSopenharmony_ci} __attribute__((packed)); 4753d0407baSopenharmony_ci 4763d0407baSopenharmony_cistruct rkmodule_bt656_mbus_info { 4773d0407baSopenharmony_ci __u32 flags; 4783d0407baSopenharmony_ci __u32 id_en_bits; 4793d0407baSopenharmony_ci} __attribute__((packed)); 4803d0407baSopenharmony_ci 4813d0407baSopenharmony_ci/* DCG ratio (float) = integer + decimal / div_coeff */ 4823d0407baSopenharmony_cistruct rkmodule_dcg_ratio { 4833d0407baSopenharmony_ci __u32 integer; 4843d0407baSopenharmony_ci __u32 decimal; 4853d0407baSopenharmony_ci __u32 div_coeff; 4863d0407baSopenharmony_ci}; 4873d0407baSopenharmony_ci 4883d0407baSopenharmony_cistruct rkmodule_channel_info { 4893d0407baSopenharmony_ci __u32 index; 4903d0407baSopenharmony_ci __u32 vc; 4913d0407baSopenharmony_ci __u32 width; 4923d0407baSopenharmony_ci __u32 height; 4933d0407baSopenharmony_ci __u32 bus_fmt; 4943d0407baSopenharmony_ci __u32 data_type; 4953d0407baSopenharmony_ci __u32 data_bit; 4963d0407baSopenharmony_ci} __attribute__((packed)); 4973d0407baSopenharmony_ci 4983d0407baSopenharmony_ci/* 4993d0407baSopenharmony_ci * link to vicap 5003d0407baSopenharmony_ci * linear mode: pad0~pad3 for id0~id3; 5013d0407baSopenharmony_ci * 5023d0407baSopenharmony_ci * HDR_X2: id0 fiexd to vc0 for long frame 5033d0407baSopenharmony_ci * id1 fixed to vc1 for short frame; 5043d0407baSopenharmony_ci * id2~id3 reserved, can config by PAD2~PAD3 5053d0407baSopenharmony_ci * 5063d0407baSopenharmony_ci * HDR_X3: id0 fiexd to vc0 for long frame 5073d0407baSopenharmony_ci * id1 fixed to vc1 for middle frame 5083d0407baSopenharmony_ci * id2 fixed to vc2 for short frame; 5093d0407baSopenharmony_ci * id3 reserved, can config by PAD3 5103d0407baSopenharmony_ci * 5113d0407baSopenharmony_ci * link to isp, the connection relationship is as follows 5123d0407baSopenharmony_ci */ 5133d0407baSopenharmony_cienum rkmodule_max_pad { 5143d0407baSopenharmony_ci PAD0, /* link to isp */ 5153d0407baSopenharmony_ci PAD1, /* link to csi wr0 | hdr x2:L x3:M */ 5163d0407baSopenharmony_ci PAD2, /* link to csi wr1 | hdr x3:L */ 5173d0407baSopenharmony_ci PAD3, /* link to csi wr2 | hdr x2:M x3:S */ 5183d0407baSopenharmony_ci PAD_MAX, 5193d0407baSopenharmony_ci}; 5203d0407baSopenharmony_ci 5213d0407baSopenharmony_ci/* 5223d0407baSopenharmony_ci * sensor exposure sync mode 5233d0407baSopenharmony_ci */ 5243d0407baSopenharmony_cienum rkmodule_sync_mode { 5253d0407baSopenharmony_ci NO_SYNC_MODE = 0, 5263d0407baSopenharmony_ci EXTERNAL_MASTER_MODE, 5273d0407baSopenharmony_ci INTERNAL_MASTER_MODE, 5283d0407baSopenharmony_ci SLAVE_MODE, 5293d0407baSopenharmony_ci}; 5303d0407baSopenharmony_ci#endif /* _UAPI_RKMODULE_CAMERA_H */ 531