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