1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun /* Copyright (c) 2019 Fuzhou Rockchip Electronics Co., Ltd. */ 3*4882a593Smuzhiyun 4*4882a593Smuzhiyun #ifndef _RKISPP_PARAMS_H 5*4882a593Smuzhiyun #define _RKISPP_PARAMS_H 6*4882a593Smuzhiyun 7*4882a593Smuzhiyun #include <linux/fec-config.h> 8*4882a593Smuzhiyun #include <linux/rk-ispp-config.h> 9*4882a593Smuzhiyun #include "common.h" 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun enum rkispp_paramvdev_id { 12*4882a593Smuzhiyun PARAM_VDEV_TNR = 0, 13*4882a593Smuzhiyun PARAM_VDEV_NR, 14*4882a593Smuzhiyun PARAM_VDEV_FEC, 15*4882a593Smuzhiyun PARAM_VDEV_MAX 16*4882a593Smuzhiyun }; 17*4882a593Smuzhiyun 18*4882a593Smuzhiyun #define ISPP_PACK_4BYTE(a, b, c, d) \ 19*4882a593Smuzhiyun (((a) & 0xFF) << 0 | ((b) & 0xFF) << 8 | \ 20*4882a593Smuzhiyun ((c) & 0xFF) << 16 | ((d) & 0xFF) << 24) 21*4882a593Smuzhiyun 22*4882a593Smuzhiyun #define ISPP_PACK_4BIT(a, b, c, d, e, f, g, h) \ 23*4882a593Smuzhiyun (((a) & 0xf) << 0 | ((b) & 0xf) << 4 | \ 24*4882a593Smuzhiyun ((c) & 0xf) << 8 | ((d) & 0xf) << 12 | \ 25*4882a593Smuzhiyun ((e) & 0xf) << 16 | ((f) & 0xf) << 20 | \ 26*4882a593Smuzhiyun ((g) & 0xf) << 24 | ((h) & 0xf) << 28) 27*4882a593Smuzhiyun 28*4882a593Smuzhiyun #define ISPP_PACK_4BYTE(a, b, c, d) \ 29*4882a593Smuzhiyun (((a) & 0xFF) << 0 | ((b) & 0xFF) << 8 | \ 30*4882a593Smuzhiyun ((c) & 0xFF) << 16 | ((d) & 0xFF) << 24) 31*4882a593Smuzhiyun 32*4882a593Smuzhiyun #define ISPP_PACK_2SHORT(a, b) \ 33*4882a593Smuzhiyun (((a) & 0xFFFF) << 0 | ((b) & 0xFFFF) << 16) 34*4882a593Smuzhiyun 35*4882a593Smuzhiyun #define ISPP_NOBIG_OVERFLOW_SIZE (2560 * 1440) 36*4882a593Smuzhiyun 37*4882a593Smuzhiyun /* rkispp parameters device 38*4882a593Smuzhiyun * config_lock: lock to protect config 39*4882a593Smuzhiyun * params: queued buffer list 40*4882a593Smuzhiyun * cur_buf: current buf of parameters 41*4882a593Smuzhiyun * first_params: the first params should take effect immediately 42*4882a593Smuzhiyun */ 43*4882a593Smuzhiyun struct rkispp_params_vdev { 44*4882a593Smuzhiyun struct rkispp_vdev_node vnode; 45*4882a593Smuzhiyun struct rkispp_device *dev; 46*4882a593Smuzhiyun struct rkispp_params_ops *params_ops; 47*4882a593Smuzhiyun 48*4882a593Smuzhiyun spinlock_t config_lock; 49*4882a593Smuzhiyun struct list_head params; 50*4882a593Smuzhiyun struct rkispp_buffer *cur_buf; 51*4882a593Smuzhiyun 52*4882a593Smuzhiyun struct v4l2_format vdev_fmt; 53*4882a593Smuzhiyun bool streamon; 54*4882a593Smuzhiyun bool first_params; 55*4882a593Smuzhiyun bool is_subs_evt; 56*4882a593Smuzhiyun 57*4882a593Smuzhiyun struct rkispp_dummy_buffer buf_fec[FEC_MESH_BUF_MAX]; 58*4882a593Smuzhiyun u32 buf_fec_idx; 59*4882a593Smuzhiyun u32 buf_cnt; 60*4882a593Smuzhiyun enum rkispp_paramvdev_id vdev_id; 61*4882a593Smuzhiyun }; 62*4882a593Smuzhiyun 63*4882a593Smuzhiyun struct rkispp_params_ops { 64*4882a593Smuzhiyun void (*rkispp_params_cfg)(struct rkispp_params_vdev *params_vdev, u32 frame_id); 65*4882a593Smuzhiyun void (*rkispp_params_vb2_buf_queue)(struct vb2_buffer *vb); 66*4882a593Smuzhiyun }; 67*4882a593Smuzhiyun 68*4882a593Smuzhiyun int rkispp_register_params_vdevs(struct rkispp_device *dev); 69*4882a593Smuzhiyun void rkispp_unregister_params_vdevs(struct rkispp_device *dev); 70*4882a593Smuzhiyun void rkispp_params_get_fecbuf_inf(struct rkispp_params_vdev *params_vdev, 71*4882a593Smuzhiyun struct rkispp_fecbuf_info *fecbuf); 72*4882a593Smuzhiyun void rkispp_params_set_fecbuf_size(struct rkispp_params_vdev *params_vdev, 73*4882a593Smuzhiyun struct rkispp_fecbuf_size *fecsize); 74*4882a593Smuzhiyun 75*4882a593Smuzhiyun #endif 76