xref: /OK3568_Linux_fs/kernel/drivers/media/platform/rockchip/ispp/params.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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