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