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/rkispp-config.h> 9 #include "common.h" 10 11 /* rkispp parameters device 12 * config_lock: lock to protect config 13 * params: queued buffer list 14 * cur_params: ispp params config 15 * cur_params: current buf of parameters 16 * first_params: the first params should take effect immediately 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 struct rkispp_params_vdev { 38 struct rkispp_vdev_node vnode; 39 struct rkispp_device *dev; 40 struct rkispp_params_ops *params_ops; 41 42 spinlock_t config_lock; 43 struct list_head params; 44 struct rkispp_params_cfg *cur_params; 45 struct fec_params_cfg *fec_params; 46 struct rkispp_buffer *cur_buf; 47 48 struct v4l2_format vdev_fmt; 49 bool streamon; 50 bool first_params; 51 bool is_subs_evt; 52 53 struct rkispp_dummy_buffer buf_fec[FEC_MESH_BUF_NUM]; 54 u32 buf_fec_idx; 55 }; 56 57 struct rkispp_params_ops { 58 void (*rkispp_params_cfg)(struct rkispp_params_vdev *params_vdev, u32 frame_id); 59 void (*rkispp_params_vb2_buf_queue)(struct vb2_buffer *vb); 60 }; 61 62 int rkispp_register_params_vdev(struct rkispp_device *dev); 63 void rkispp_unregister_params_vdev(struct rkispp_device *dev); 64 void rkispp_params_get_fecbuf_inf(struct rkispp_params_vdev *params_vdev, 65 struct rkispp_fecbuf_info *fecbuf); 66 void rkispp_params_set_fecbuf_size(struct rkispp_params_vdev *params_vdev, 67 struct rkispp_fecbuf_size *fecsize); 68 69 #endif 70