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/interrupt.h>
16#include <linux/mutex.h>
17#include <linux/rkisp1-config.h>
18#include <media/media-device.h>
19#include <media/media-entity.h>
20#include <media/v4l2-ctrls.h>
21#include <media/v4l2-device.h>
22#include <media/videobuf2-v4l2.h>
23
24#include "rkisp1-regs.h"
25
26
27
28
29
30#define RKISP1_ISP_SD_SRC BIT(0)
31#define RKISP1_ISP_SD_SINK BIT(1)
32
33
34#define RKISP1_ISP_MAX_WIDTH 4032
35#define RKISP1_ISP_MAX_HEIGHT 3024
36#define RKISP1_ISP_MIN_WIDTH 32
37#define RKISP1_ISP_MIN_HEIGHT 32
38
39#define RKISP1_RSZ_MP_SRC_MAX_WIDTH 4416
40#define RKISP1_RSZ_MP_SRC_MAX_HEIGHT 3312
41#define RKISP1_RSZ_SP_SRC_MAX_WIDTH 1920
42#define RKISP1_RSZ_SP_SRC_MAX_HEIGHT 1920
43#define RKISP1_RSZ_SRC_MIN_WIDTH 32
44#define RKISP1_RSZ_SRC_MIN_HEIGHT 16
45
46
47#define RKISP1_DEFAULT_WIDTH 800
48#define RKISP1_DEFAULT_HEIGHT 600
49
50#define RKISP1_DRIVER_NAME "rkisp1"
51#define RKISP1_BUS_INFO "platform:" RKISP1_DRIVER_NAME
52
53
54#define RKISP1_MAX_BUS_CLK 8
55
56
57#define RKISP1_STATS_MEAS_MASK (RKISP1_CIF_ISP_AWB_DONE | \
58 RKISP1_CIF_ISP_AFM_FIN | \
59 RKISP1_CIF_ISP_EXP_END | \
60 RKISP1_CIF_ISP_HIST_MEASURE_RDY)
61
62
63enum rkisp1_rsz_pad {
64 RKISP1_RSZ_PAD_SINK,
65 RKISP1_RSZ_PAD_SRC,
66 RKISP1_RSZ_PAD_MAX
67};
68
69
70enum rkisp1_stream_id {
71 RKISP1_MAINPATH,
72 RKISP1_SELFPATH,
73};
74
75
76enum rkisp1_fmt_raw_pat_type {
77 RKISP1_RAW_RGGB = 0,
78 RKISP1_RAW_GRBG,
79 RKISP1_RAW_GBRG,
80 RKISP1_RAW_BGGR,
81};
82
83
84enum rkisp1_isp_pad {
85 RKISP1_ISP_PAD_SINK_VIDEO,
86 RKISP1_ISP_PAD_SINK_PARAMS,
87 RKISP1_ISP_PAD_SOURCE_VIDEO,
88 RKISP1_ISP_PAD_SOURCE_STATS,
89 RKISP1_ISP_PAD_MAX
90};
91
92
93
94
95
96
97
98
99
100
101
102
103
104struct rkisp1_sensor_async {
105 struct v4l2_async_subdev asd;
106 unsigned int lanes;
107 enum v4l2_mbus_type mbus_type;
108 unsigned int mbus_flags;
109 struct v4l2_subdev *sd;
110 struct v4l2_ctrl *pixel_rate_ctrl;
111 struct phy *dphy;
112};
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127struct rkisp1_isp {
128 struct v4l2_subdev sd;
129 struct media_pad pads[RKISP1_ISP_PAD_MAX];
130 struct v4l2_subdev_pad_config pad_cfg[RKISP1_ISP_PAD_MAX];
131 const struct rkisp1_isp_mbus_info *sink_fmt;
132 const struct rkisp1_isp_mbus_info *src_fmt;
133 struct mutex ops_lock;
134 bool is_dphy_errctrl_disabled;
135 __u32 frame_sequence;
136};
137
138
139
140
141
142
143
144
145
146struct rkisp1_vdev_node {
147 struct vb2_queue buf_queue;
148 struct mutex vlock;
149 struct video_device vdev;
150 struct media_pad pad;
151};
152
153
154
155
156
157
158
159
160
161struct rkisp1_buffer {
162 struct vb2_v4l2_buffer vb;
163 struct list_head queue;
164 u32 buff_addr[VIDEO_MAX_PLANES];
165};
166
167
168
169
170
171
172
173
174
175struct rkisp1_dummy_buffer {
176 void *vaddr;
177 dma_addr_t dma_addr;
178 u32 size;
179};
180
181struct rkisp1_device;
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210struct rkisp1_capture {
211 struct rkisp1_vdev_node vnode;
212 struct rkisp1_device *rkisp1;
213 enum rkisp1_stream_id id;
214 const struct rkisp1_capture_ops *ops;
215 const struct rkisp1_capture_config *config;
216 bool is_streaming;
217 bool is_stopping;
218 wait_queue_head_t done;
219 unsigned int sp_y_stride;
220 struct {
221
222 spinlock_t lock;
223 struct list_head queue;
224 struct rkisp1_dummy_buffer dummy;
225 struct rkisp1_buffer *curr;
226 struct rkisp1_buffer *next;
227 } buf;
228 struct {
229 const struct rkisp1_capture_fmt_cfg *cfg;
230 const struct v4l2_format_info *info;
231 struct v4l2_pix_format_mplane fmt;
232 } pix;
233};
234
235struct rkisp1_stats;
236struct rkisp1_stats_ops {
237 void (*get_awb_meas)(struct rkisp1_stats *stats,
238 struct rkisp1_stat_buffer *pbuf);
239 void (*get_aec_meas)(struct rkisp1_stats *stats,
240 struct rkisp1_stat_buffer *pbuf);
241 void (*get_hst_meas)(struct rkisp1_stats *stats,
242 struct rkisp1_stat_buffer *pbuf);
243};
244
245
246
247
248
249
250
251
252
253
254struct rkisp1_stats {
255 struct rkisp1_vdev_node vnode;
256 struct rkisp1_device *rkisp1;
257 const struct rkisp1_stats_ops *ops;
258
259 spinlock_t lock;
260 struct list_head stat;
261 struct v4l2_format vdev_fmt;
262};
263
264struct rkisp1_params;
265struct rkisp1_params_ops {
266 void (*lsc_matrix_config)(struct rkisp1_params *params,
267 const struct rkisp1_cif_isp_lsc_config *pconfig);
268 void (*goc_config)(struct rkisp1_params *params,
269 const struct rkisp1_cif_isp_goc_config *arg);
270 void (*awb_meas_config)(struct rkisp1_params *params,
271 const struct rkisp1_cif_isp_awb_meas_config *arg);
272 void (*awb_meas_enable)(struct rkisp1_params *params,
273 const struct rkisp1_cif_isp_awb_meas_config *arg,
274 bool en);
275 void (*awb_gain_config)(struct rkisp1_params *params,
276 const struct rkisp1_cif_isp_awb_gain_config *arg);
277 void (*aec_config)(struct rkisp1_params *params,
278 const struct rkisp1_cif_isp_aec_config *arg);
279 void (*hst_config)(struct rkisp1_params *params,
280 const struct rkisp1_cif_isp_hst_config *arg);
281 void (*hst_enable)(struct rkisp1_params *params,
282 const struct rkisp1_cif_isp_hst_config *arg, bool en);
283 void (*afm_config)(struct rkisp1_params *params,
284 const struct rkisp1_cif_isp_afc_config *arg);
285};
286
287
288
289
290
291
292
293
294
295
296
297
298
299struct rkisp1_params {
300 struct rkisp1_vdev_node vnode;
301 struct rkisp1_device *rkisp1;
302 const struct rkisp1_params_ops *ops;
303
304 spinlock_t config_lock;
305 struct list_head params;
306 struct v4l2_format vdev_fmt;
307
308 enum v4l2_quantization quantization;
309 enum rkisp1_fmt_raw_pat_type raw_type;
310};
311
312
313
314
315
316
317
318
319
320
321
322
323
324struct rkisp1_resizer {
325 struct v4l2_subdev sd;
326 enum rkisp1_stream_id id;
327 struct rkisp1_device *rkisp1;
328 struct media_pad pads[RKISP1_RSZ_PAD_MAX];
329 struct v4l2_subdev_pad_config pad_cfg[RKISP1_RSZ_PAD_MAX];
330 const struct rkisp1_rsz_config *config;
331 enum v4l2_pixel_encoding pixel_enc;
332 struct mutex ops_lock;
333};
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352struct rkisp1_debug {
353 struct dentry *debugfs_dir;
354 unsigned long data_loss;
355 unsigned long outform_size_error;
356 unsigned long img_stabilization_size_error;
357 unsigned long inform_size_error;
358 unsigned long irq_delay;
359 unsigned long mipi_error;
360 unsigned long stats_error;
361 unsigned long stop_timeout[2];
362 unsigned long frame_drop[2];
363};
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386struct rkisp1_device {
387 void __iomem *base_addr;
388 struct device *dev;
389 unsigned int clk_size;
390 struct clk_bulk_data clks[RKISP1_MAX_BUS_CLK];
391 struct v4l2_device v4l2_dev;
392 struct media_device media_dev;
393 struct v4l2_async_notifier notifier;
394 struct rkisp1_sensor_async *active_sensor;
395 struct rkisp1_isp isp;
396 struct rkisp1_resizer resizer_devs[2];
397 struct rkisp1_capture capture_devs[2];
398 struct rkisp1_stats stats;
399 struct rkisp1_params params;
400 struct media_pipeline pipe;
401 struct mutex stream_lock;
402 struct rkisp1_debug debug;
403};
404
405
406
407
408
409
410
411
412
413
414
415
416
417struct rkisp1_isp_mbus_info {
418 u32 mbus_code;
419 enum v4l2_pixel_encoding pixel_enc;
420 u32 mipi_dt;
421 u32 yuv_seq;
422 u8 bus_width;
423 enum rkisp1_fmt_raw_pat_type bayer_pat;
424 unsigned int direction;
425};
426
427static inline void
428rkisp1_write(struct rkisp1_device *rkisp1, u32 val, unsigned int addr)
429{
430 writel(val, rkisp1->base_addr + addr);
431}
432
433static inline u32 rkisp1_read(struct rkisp1_device *rkisp1, unsigned int addr)
434{
435 return readl(rkisp1->base_addr + addr);
436}
437
438
439
440
441
442
443
444
445
446int rkisp1_cap_enum_mbus_codes(struct rkisp1_capture *cap,
447 struct v4l2_subdev_mbus_code_enum *code);
448
449
450
451
452
453
454
455void rkisp1_sd_adjust_crop_rect(struct v4l2_rect *crop,
456 const struct v4l2_rect *bounds);
457
458
459
460
461
462
463
464void rkisp1_sd_adjust_crop(struct v4l2_rect *crop,
465 const struct v4l2_mbus_framefmt *bounds);
466
467
468
469
470
471
472const struct rkisp1_isp_mbus_info *rkisp1_isp_mbus_info_get(u32 mbus_code);
473
474
475
476
477
478
479
480
481
482void rkisp1_params_configure(struct rkisp1_params *params,
483 enum rkisp1_fmt_raw_pat_type bayer_pat,
484 enum v4l2_quantization quantization);
485
486
487
488
489
490
491
492void rkisp1_params_disable(struct rkisp1_params *params);
493
494
495irqreturn_t rkisp1_isp_isr(int irq, void *ctx);
496irqreturn_t rkisp1_mipi_isr(int irq, void *ctx);
497irqreturn_t rkisp1_capture_isr(int irq, void *ctx);
498void rkisp1_stats_isr(struct rkisp1_stats *stats, u32 isp_ris);
499void rkisp1_params_isr(struct rkisp1_device *rkisp1);
500
501
502int rkisp1_capture_devs_register(struct rkisp1_device *rkisp1);
503void rkisp1_capture_devs_unregister(struct rkisp1_device *rkisp1);
504
505int rkisp1_isp_register(struct rkisp1_device *rkisp1);
506void rkisp1_isp_unregister(struct rkisp1_device *rkisp1);
507
508int rkisp1_resizer_devs_register(struct rkisp1_device *rkisp1);
509void rkisp1_resizer_devs_unregister(struct rkisp1_device *rkisp1);
510
511int rkisp1_stats_register(struct rkisp1_device *rkisp1);
512void rkisp1_stats_unregister(struct rkisp1_device *rkisp1);
513
514int rkisp1_params_register(struct rkisp1_device *rkisp1);
515void rkisp1_params_unregister(struct rkisp1_device *rkisp1);
516
517#endif
518