1
2
3
4
5
6
7
8
9
10
11#ifndef _RKISP1_COMMON_H
12#define _RKISP1_COMMON_H
13
14#include <linux/clk.h>
15#include <linux/mutex.h>
16#include <media/media-device.h>
17#include <media/media-entity.h>
18#include <media/v4l2-ctrls.h>
19#include <media/v4l2-device.h>
20#include <media/videobuf2-v4l2.h>
21
22#include "rkisp1-regs.h"
23#include "uapi/rkisp1-config.h"
24
25#define RKISP1_ISP_SD_SRC BIT(0)
26#define RKISP1_ISP_SD_SINK BIT(1)
27
28#define RKISP1_ISP_MAX_WIDTH 4032
29#define RKISP1_ISP_MAX_HEIGHT 3024
30#define RKISP1_ISP_MIN_WIDTH 32
31#define RKISP1_ISP_MIN_HEIGHT 32
32
33#define RKISP1_RSZ_MP_SRC_MAX_WIDTH 4416
34#define RKISP1_RSZ_MP_SRC_MAX_HEIGHT 3312
35#define RKISP1_RSZ_SP_SRC_MAX_WIDTH 1920
36#define RKISP1_RSZ_SP_SRC_MAX_HEIGHT 1920
37#define RKISP1_RSZ_SRC_MIN_WIDTH 32
38#define RKISP1_RSZ_SRC_MIN_HEIGHT 16
39
40#define RKISP1_DEFAULT_WIDTH 800
41#define RKISP1_DEFAULT_HEIGHT 600
42
43#define RKISP1_DRIVER_NAME "rkisp1"
44#define RKISP1_BUS_INFO "platform:" RKISP1_DRIVER_NAME
45
46#define RKISP1_MAX_BUS_CLK 8
47
48#define RKISP1_STATS_MEAS_MASK (RKISP1_CIF_ISP_AWB_DONE | \
49 RKISP1_CIF_ISP_AFM_FIN | \
50 RKISP1_CIF_ISP_EXP_END | \
51 RKISP1_CIF_ISP_HIST_MEASURE_RDY)
52enum rkisp1_rsz_pad {
53 RKISP1_RSZ_PAD_SINK,
54 RKISP1_RSZ_PAD_SRC,
55 RKISP1_RSZ_PAD_MAX
56};
57
58enum rkisp1_stream_id {
59 RKISP1_MAINPATH,
60 RKISP1_SELFPATH,
61};
62
63enum rkisp1_fmt_raw_pat_type {
64 RKISP1_RAW_RGGB = 0,
65 RKISP1_RAW_GRBG,
66 RKISP1_RAW_GBRG,
67 RKISP1_RAW_BGGR,
68};
69
70enum rkisp1_isp_pad {
71 RKISP1_ISP_PAD_SINK_VIDEO,
72 RKISP1_ISP_PAD_SINK_PARAMS,
73 RKISP1_ISP_PAD_SOURCE_VIDEO,
74 RKISP1_ISP_PAD_SOURCE_STATS,
75 RKISP1_ISP_PAD_MAX
76};
77
78
79
80
81
82struct rkisp1_sensor_async {
83 struct v4l2_async_subdev asd;
84 unsigned int lanes;
85 enum v4l2_mbus_type mbus_type;
86 unsigned int mbus_flags;
87 struct v4l2_subdev *sd;
88 struct v4l2_ctrl *pixel_rate_ctrl;
89 struct phy *dphy;
90};
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107struct rkisp1_isp {
108 struct v4l2_subdev sd;
109 struct media_pad pads[RKISP1_ISP_PAD_MAX];
110 struct v4l2_subdev_pad_config pad_cfg[RKISP1_ISP_PAD_MAX];
111 const struct rkisp1_isp_mbus_info *sink_fmt;
112 const struct rkisp1_isp_mbus_info *src_fmt;
113 struct mutex ops_lock;
114 bool is_dphy_errctrl_disabled;
115 atomic_t frame_sequence;
116};
117
118struct rkisp1_vdev_node {
119 struct vb2_queue buf_queue;
120 struct mutex vlock;
121 struct video_device vdev;
122 struct media_pad pad;
123};
124
125struct rkisp1_buffer {
126 struct vb2_v4l2_buffer vb;
127 struct list_head queue;
128 union {
129 u32 buff_addr[VIDEO_MAX_PLANES];
130 void *vaddr[VIDEO_MAX_PLANES];
131 };
132};
133
134struct rkisp1_dummy_buffer {
135 void *vaddr;
136 dma_addr_t dma_addr;
137 u32 size;
138};
139
140struct rkisp1_device;
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157struct rkisp1_capture {
158 struct rkisp1_vdev_node vnode;
159 struct rkisp1_device *rkisp1;
160 enum rkisp1_stream_id id;
161 struct rkisp1_capture_ops *ops;
162 const struct rkisp1_capture_config *config;
163 bool is_streaming;
164 bool is_stopping;
165 wait_queue_head_t done;
166 unsigned int sp_y_stride;
167 struct {
168
169 spinlock_t lock;
170 struct list_head queue;
171 struct rkisp1_dummy_buffer dummy;
172 struct rkisp1_buffer *curr;
173 struct rkisp1_buffer *next;
174 } buf;
175 struct {
176 const struct rkisp1_capture_fmt_cfg *cfg;
177 const struct v4l2_format_info *info;
178 struct v4l2_pix_format_mplane fmt;
179 } pix;
180};
181
182
183
184
185
186
187
188struct rkisp1_stats {
189 struct rkisp1_vdev_node vnode;
190 struct rkisp1_device *rkisp1;
191
192 spinlock_t lock;
193 struct list_head stat;
194 struct v4l2_format vdev_fmt;
195 bool is_streaming;
196};
197
198
199
200
201
202
203
204struct rkisp1_params {
205 struct rkisp1_vdev_node vnode;
206 struct rkisp1_device *rkisp1;
207
208 spinlock_t config_lock;
209 struct list_head params;
210 struct rkisp1_params_cfg cur_params;
211 struct v4l2_format vdev_fmt;
212 bool is_streaming;
213 bool is_first_params;
214
215 enum v4l2_quantization quantization;
216 enum rkisp1_fmt_raw_pat_type raw_type;
217};
218
219struct rkisp1_resizer {
220 struct v4l2_subdev sd;
221 enum rkisp1_stream_id id;
222 struct rkisp1_device *rkisp1;
223 struct media_pad pads[RKISP1_RSZ_PAD_MAX];
224 struct v4l2_subdev_pad_config pad_cfg[RKISP1_RSZ_PAD_MAX];
225 const struct rkisp1_rsz_config *config;
226 enum v4l2_pixel_encoding pixel_enc;
227 struct mutex ops_lock;
228};
229
230struct rkisp1_debug {
231 struct dentry *debugfs_dir;
232 unsigned long data_loss;
233 unsigned long outform_size_error;
234 unsigned long img_stabilization_size_error;
235 unsigned long inform_size_error;
236 unsigned long mipi_error;
237 unsigned long stats_error;
238 unsigned long stop_timeout[2];
239 unsigned long frame_drop[2];
240};
241
242
243
244
245
246
247
248
249
250
251
252struct rkisp1_device {
253 void __iomem *base_addr;
254 int irq;
255 struct device *dev;
256 unsigned int clk_size;
257 struct clk_bulk_data clks[RKISP1_MAX_BUS_CLK];
258 struct v4l2_device v4l2_dev;
259 struct media_device media_dev;
260 struct v4l2_async_notifier notifier;
261 struct rkisp1_sensor_async *active_sensor;
262 struct rkisp1_isp isp;
263 struct rkisp1_resizer resizer_devs[2];
264 struct rkisp1_capture capture_devs[2];
265 struct rkisp1_stats stats;
266 struct rkisp1_params params;
267 struct media_pipeline pipe;
268 struct mutex stream_lock;
269 struct rkisp1_debug debug;
270};
271
272
273
274
275
276
277
278
279struct rkisp1_isp_mbus_info {
280 u32 mbus_code;
281 enum v4l2_pixel_encoding pixel_enc;
282 u32 mipi_dt;
283 u32 yuv_seq;
284 u8 bus_width;
285 enum rkisp1_fmt_raw_pat_type bayer_pat;
286 unsigned int direction;
287};
288
289static inline void
290rkisp1_write(struct rkisp1_device *rkisp1, u32 val, unsigned int addr)
291{
292 writel(val, rkisp1->base_addr + addr);
293}
294
295static inline u32 rkisp1_read(struct rkisp1_device *rkisp1, unsigned int addr)
296{
297 return readl(rkisp1->base_addr + addr);
298}
299
300void rkisp1_sd_adjust_crop_rect(struct v4l2_rect *crop,
301 const struct v4l2_rect *bounds);
302
303void rkisp1_sd_adjust_crop(struct v4l2_rect *crop,
304 const struct v4l2_mbus_framefmt *bounds);
305
306int rkisp1_isp_register(struct rkisp1_device *rkisp1,
307 struct v4l2_device *v4l2_dev);
308void rkisp1_isp_unregister(struct rkisp1_device *rkisp1);
309
310const struct rkisp1_isp_mbus_info *rkisp1_isp_mbus_info_get(u32 mbus_code);
311
312void rkisp1_isp_isr(struct rkisp1_device *rkisp1);
313void rkisp1_mipi_isr(struct rkisp1_device *rkisp1);
314void rkisp1_capture_isr(struct rkisp1_device *rkisp1);
315void rkisp1_stats_isr(struct rkisp1_stats *stats, u32 isp_ris);
316void rkisp1_params_isr(struct rkisp1_device *rkisp1, u32 isp_mis);
317
318int rkisp1_capture_devs_register(struct rkisp1_device *rkisp1);
319void rkisp1_capture_devs_unregister(struct rkisp1_device *rkisp1);
320
321int rkisp1_resizer_devs_register(struct rkisp1_device *rkisp1);
322void rkisp1_resizer_devs_unregister(struct rkisp1_device *rkisp1);
323
324int rkisp1_stats_register(struct rkisp1_stats *stats,
325 struct v4l2_device *v4l2_dev,
326 struct rkisp1_device *rkisp1);
327void rkisp1_stats_unregister(struct rkisp1_stats *stats);
328
329void rkisp1_params_configure(struct rkisp1_params *params,
330 enum rkisp1_fmt_raw_pat_type bayer_pat,
331 enum v4l2_quantization quantization);
332void rkisp1_params_disable(struct rkisp1_params *params);
333int rkisp1_params_register(struct rkisp1_params *params,
334 struct v4l2_device *v4l2_dev,
335 struct rkisp1_device *rkisp1);
336void rkisp1_params_unregister(struct rkisp1_params *params);
337
338void rkisp1_params_isr_handler(struct rkisp1_device *rkisp1, u32 isp_mis);
339
340#endif
341