forked from ~ljy/RK356X_SDK_RELEASE

hc
2023-12-11 223293205a7265c8b02882461ba8996650048ade
kernel/drivers/media/platform/rockchip/cif/mipi-csi2.h
....@@ -4,16 +4,171 @@
44 #define _RKCIF_MIPI_CSI2_H_
55
66 #include <linux/notifier.h>
7
+#include <media/v4l2-device.h>
8
+#include <media/v4l2-fwnode.h>
9
+#include <media/v4l2-subdev.h>
10
+#include <media/v4l2-event.h>
711
812 #define CSI2_ERR_FSFE_MASK (0xff << 8)
913 #define CSI2_ERR_COUNT_ALL_MASK (0xff)
1014
11
-u32 rkcif_csi2_get_sof(void);
12
-void rkcif_csi2_set_sof(u32 seq);
13
-void rkcif_csi2_event_inc_sof(void);
14
-int __init rkcif_csi2_plat_drv_init(void);
15
+#define RKCIF_V4L2_EVENT_ELEMS 4
16
+
17
+/*
18
+ * there must be 5 pads: 1 input pad from sensor, and
19
+ * the 4 virtual channel output pads
20
+ */
21
+#define CSI2_SINK_PAD 0
22
+#define CSI2_NUM_SINK_PADS 4
23
+#define CSI2_NUM_SRC_PADS 11
24
+#define CSI2_NUM_PADS 5
25
+#define CSI2_NUM_PADS_MAX 12
26
+#define CSI2_NUM_PADS_SINGLE_LINK 2
27
+#define MAX_CSI2_SENSORS 2
28
+
29
+#define RKCIF_DEFAULT_WIDTH 640
30
+#define RKCIF_DEFAULT_HEIGHT 480
31
+
32
+#define CSI_ERRSTR_LEN (256)
33
+#define CSI_VCINFO_LEN (12)
34
+
35
+/*
36
+ * The default maximum bit-rate per lane in Mbps, if the
37
+ * source subdev does not provide V4L2_CID_LINK_FREQ.
38
+ */
39
+#define CSI2_DEFAULT_MAX_MBPS 849
40
+
41
+#define IMX_MEDIA_GRP_ID_CSI2 BIT(8)
42
+#define CSIHOST_MAX_ERRINT_COUNT 10
43
+
44
+#define DEVICE_NAME "rockchip-mipi-csi2"
45
+
46
+/* CSI Host Registers Define */
47
+#define CSIHOST_N_LANES 0x04
48
+#define CSIHOST_DPHY_SHUTDOWNZ 0x08
49
+#define CSIHOST_PHY_RSTZ 0x0c
50
+#define CSIHOST_RESETN 0x10
51
+#define CSIHOST_PHY_STATE 0x14
52
+#define CSIHOST_ERR1 0x20
53
+#define CSIHOST_ERR2 0x24
54
+#define CSIHOST_MSK1 0x28
55
+#define CSIHOST_MSK2 0x2c
56
+#define CSIHOST_CONTROL 0x40
57
+
58
+#define CSIHOST_ERR1_PHYERR_SPTSYNCHS 0x0000000f
59
+#define CSIHOST_ERR1_ERR_BNDRY_MATCH 0x000000f0
60
+#define CSIHOST_ERR1_ERR_SEQ 0x00000f00
61
+#define CSIHOST_ERR1_ERR_FRM_DATA 0x0000f000
62
+#define CSIHOST_ERR1_ERR_CRC 0x0f000000
63
+#define CSIHOST_ERR1_ERR_ECC2 0x10000000
64
+#define CSIHOST_ERR1_ERR_CTRL 0x000f0000
65
+
66
+#define CSIHOST_ERR2_PHYERR_ESC 0x0000000f
67
+#define CSIHOST_ERR2_PHYERR_SOTHS 0x000000f0
68
+#define CSIHOST_ERR2_ECC_CORRECTED 0x00000f00
69
+#define CSIHOST_ERR2_ERR_ID 0x0000f000
70
+#define CSIHOST_ERR2_PHYERR_CODEHS 0x01000000
71
+
72
+#define SW_CPHY_EN(x) ((x) << 0)
73
+#define SW_DSI_EN(x) ((x) << 4)
74
+#define SW_DATATYPE_FS(x) ((x) << 8)
75
+#define SW_DATATYPE_FE(x) ((x) << 14)
76
+#define SW_DATATYPE_LS(x) ((x) << 20)
77
+#define SW_DATATYPE_LE(x) ((x) << 26)
78
+
79
+/*
80
+ * add new chip id in tail in time order
81
+ * by increasing to distinguish csi2 host version
82
+ */
83
+enum rkcsi2_chip_id {
84
+ CHIP_PX30_CSI2,
85
+ CHIP_RK1808_CSI2,
86
+ CHIP_RK3128_CSI2,
87
+ CHIP_RK3288_CSI2,
88
+ CHIP_RV1126_CSI2,
89
+ CHIP_RK3568_CSI2,
90
+ CHIP_RK3588_CSI2,
91
+ CHIP_RK3562_CSI2,
92
+};
93
+
94
+enum csi2_pads {
95
+ RK_CSI2_PAD_SINK = 0,
96
+ RK_CSI2X_PAD_SOURCE0,
97
+ RK_CSI2X_PAD_SOURCE1,
98
+ RK_CSI2X_PAD_SOURCE2,
99
+ RK_CSI2X_PAD_SOURCE3
100
+};
101
+
102
+enum csi2_err {
103
+ RK_CSI2_ERR_SOTSYN = 0x0,
104
+ RK_CSI2_ERR_FS_FE_MIS,
105
+ RK_CSI2_ERR_FRM_SEQ_ERR,
106
+ RK_CSI2_ERR_CRC_ONCE,
107
+ RK_CSI2_ERR_CRC,
108
+ RK_CSI2_ERR_ALL,
109
+ RK_CSI2_ERR_MAX
110
+};
111
+
112
+enum host_type_t {
113
+ RK_CSI_RXHOST,
114
+ RK_DSI_RXHOST
115
+};
116
+
117
+struct csi2_match_data {
118
+ int chip_id;
119
+ int num_pads;
120
+};
121
+
122
+struct csi2_sensor_info {
123
+ struct v4l2_subdev *sd;
124
+ struct v4l2_mbus_config mbus;
125
+ int lanes;
126
+};
127
+
128
+struct csi2_err_stats {
129
+ unsigned int cnt;
130
+};
131
+
132
+struct csi2_dev {
133
+ struct device *dev;
134
+ struct v4l2_subdev sd;
135
+ struct media_pad pad[CSI2_NUM_PADS_MAX];
136
+ struct clk_bulk_data *clks_bulk;
137
+ int clks_num;
138
+ struct reset_control *rsts_bulk;
139
+
140
+ void __iomem *base;
141
+ struct v4l2_async_notifier notifier;
142
+ struct v4l2_fwnode_bus_mipi_csi2 bus;
143
+
144
+ /* lock to protect all members below */
145
+ struct mutex lock;
146
+
147
+ struct v4l2_mbus_framefmt format_mbus;
148
+ struct v4l2_rect crop;
149
+ int stream_count;
150
+ struct v4l2_subdev *src_sd;
151
+ bool sink_linked[CSI2_NUM_SRC_PADS];
152
+ bool is_check_sot_sync;
153
+ struct csi2_sensor_info sensors[MAX_CSI2_SENSORS];
154
+ const struct csi2_match_data *match_data;
155
+ int num_sensors;
156
+ atomic_t frm_sync_seq;
157
+ struct csi2_err_stats err_list[RK_CSI2_ERR_MAX];
158
+ int irq1;
159
+ int irq2;
160
+ int dsi_input_en;
161
+ u32 csi_idx;
162
+ const char *dev_name;
163
+};
164
+
165
+u32 rkcif_csi2_get_sof(struct csi2_dev *csi2_dev);
166
+void rkcif_csi2_set_sof(struct csi2_dev *csi2_dev, u32 seq);
167
+void rkcif_csi2_event_inc_sof(struct csi2_dev *csi2_dev);
168
+int rkcif_csi2_plat_drv_init(void);
15169 void __exit rkcif_csi2_plat_drv_exit(void);
16170 int rkcif_csi2_register_notifier(struct notifier_block *nb);
17171 int rkcif_csi2_unregister_notifier(struct notifier_block *nb);
172
+void rkcif_csi2_event_reset_pipe(struct csi2_dev *csi2_dev, int reset_src);
18173
19174 #endif