/* SPDX-License-Identifier: LGPL-2.1-or-later */ /* * uvc-gadget control API * * Copyright (C) 2020 Rockchip Electronics Co., Ltd. * * Author: Bin Yang */ #ifndef __UVC_CTRL_H__ #define __UVC_CTRL_H__ #include #include #ifdef __cplusplus extern "C" { #endif #define UVC_UNIT_ID_ERR 0 #define UVC_UNIT_ID_CT 1 #define UVC_UNIT_ID_PU 2 #define UVC_UNIT_ID_XU 6 #define U_CUR 0 #define U_MIN 1 #define U_MAX 2 #define U_DEF 3 #define U_RES 4 #define U_SIZE 5 struct uvc_request_ct { __u8 scan_mode[U_SIZE]; __u8 ae_mode[U_SIZE]; __u8 ae_priority[U_SIZE]; __u32 exposure_abs[U_SIZE]; __u8 exposure_rel[U_SIZE]; __u16 focus_abs[U_SIZE]; __u16 focus_rel[U_SIZE]; __u8 focus_auto[U_SIZE]; __u16 iris_abs[U_SIZE]; __u16 iris_rel[U_SIZE]; __u16 zoom_abs[U_SIZE]; __u8 zoom_rel[U_SIZE][3]; __u8 pantilt_abs[U_SIZE][8]; __u8 pantilt_rel[U_SIZE][4]; __u16 roll_abs[U_SIZE]; __u16 roll_rel[U_SIZE]; __u8 privacy[U_SIZE]; }; struct uvc_request_pu { __u16 backlight[U_SIZE]; __u16 brightness[U_SIZE]; __u16 contrast[U_SIZE]; __u16 gain[U_SIZE]; __u8 pl_freq[U_SIZE]; __u16 hue[U_SIZE]; __u16 saturation[U_SIZE]; __u16 sharpness[U_SIZE]; __u16 gamma[U_SIZE]; __u16 wb_temp[U_SIZE]; __u8 wb_temp_auto[U_SIZE]; __u32 wb_component[U_SIZE]; __u8 wb_component_auto[U_SIZE]; __u16 digital_mult[U_SIZE]; __u16 digital_mult_limit[U_SIZE]; __u8 hue_auto[U_SIZE]; __u8 analog_video[U_SIZE]; __u8 analog_lock[U_SIZE]; }; struct uvc_request_xu { __u8 data[60]; }; enum uvc_req_dir { USB_TRAN_IN = 0, USB_TRAN_OUT, USB_TRAN_INFO }; struct uvc_request_param { __u8 entity; __u8 req; __u8 cs; __u8 len; __u8 get_len; enum uvc_req_dir dir; }; typedef int(*uvc_ctrl_func_t)(struct uvc_source *, struct uvc_request_param *, void *); int uvc_control_func_register(struct uvc_source *src, uint8_t entity_id, uvc_ctrl_func_t func); void uvc_control_func_unregister(struct uvc_source *src); #ifdef __cplusplus } #endif #endif /* __UVC_CTRL_H__ */