• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* SPDX-License-Identifier: GPL-2.0 */
2 /* Copyright (c) 2019 Fuzhou Rockchip Electronics Co., Ltd. */
3 
4 #ifndef _RKISP_CSI_H
5 #define _RKISP_CSI_H
6 
7 #include <linux/kfifo.h>
8 
9 #define CSI_DEV_NAME DRIVER_NAME "-csi-subdev"
10 
11 #define HDR_MAX_DUMMY_BUF 3
12 /* define max dmatx to use for hdr */
13 #define HDR_DMA_MAX 3
14 #define HDR_DMA0 0
15 #define HDR_DMA1 1
16 #define HDR_DMA2 2
17 
18 #define IS_HDR_RDBK(x) ({ \
19 	typeof(x) __x = (x); \
20 	(__x == HDR_RDBK_FRAME1 || \
21 	 __x == HDR_RDBK_FRAME2 || \
22 	 __x == HDR_RDBK_FRAME3); \
23 })
24 
25 enum {
26 	T_CMD_QUEUE,
27 	T_CMD_DEQUEUE,
28 	T_CMD_LEN,
29 	T_CMD_END,
30 };
31 
32 enum hdr_op_mode {
33 	HDR_NORMAL = 0,
34 	HDR_RDBK_FRAME1 = 4,
35 	HDR_RDBK_FRAME2 = 5,
36 	HDR_RDBK_FRAME3 = 6,
37 	HDR_FRAMEX2_DDR = 8,
38 	HDR_LINEX2_DDR = 9,
39 	HDR_LINEX2_NO_DDR = 10,
40 	HDR_FRAMEX3_DDR = 12,
41 	HDR_LINEX3_DDR = 13,
42 };
43 
44 enum rkisp_csi_pad {
45 	CSI_SINK = 0,
46 	CSI_SRC_CH0,
47 	CSI_SRC_CH1,
48 	CSI_SRC_CH2,
49 	CSI_SRC_CH3,
50 	CSI_SRC_CH4,
51 	CSI_PAD_MAX
52 };
53 
54 struct sink_info {
55 	u8 index;
56 	u8 linked;
57 };
58 
59 /*
60  * struct rkisp_csi_device
61  * sink: csi link enable flags
62  * mipi_di: Data Identifier (vc[7:6],dt[5:0])
63  * tx_first: flags for dmatx first Y_STATE irq
64  */
65 struct rkisp_csi_device {
66 	struct rkisp_device *ispdev;
67 	struct v4l2_subdev sd;
68 	struct media_pad pads[CSI_PAD_MAX];
69 	struct sink_info sink[CSI_PAD_MAX - 1];
70 	int max_pad;
71 	u32 err_cnt;
72 	u32 irq_cnt;
73 	u8 mipi_di[CSI_PAD_MAX - 1];
74 	u8 tx_first[HDR_DMA_MAX];
75 };
76 
77 int rkisp_register_csi_subdev(struct rkisp_device *dev,
78 			      struct v4l2_device *v4l2_dev);
79 void rkisp_unregister_csi_subdev(struct rkisp_device *dev);
80 
81 int rkisp_csi_config_patch(struct rkisp_device *dev);
82 void rkisp_csi_sof(struct rkisp_device *dev, u8 id);
83 #endif
84