Merge tag 'qcom-drivers-for-6.9-2' of https://git.kernel.org/pub/scm/linux/kernel...
[linux-block.git] / drivers / media / platform / rockchip / rkisp1 / rkisp1-capture.c
1 // SPDX-License-Identifier: (GPL-2.0+ OR MIT)
2 /*
3  * Rockchip ISP1 Driver - V4l capture device
4  *
5  * Copyright (C) 2019 Collabora, Ltd.
6  *
7  * Based on Rockchip ISP1 driver by Rockchip Electronics Co., Ltd.
8  * Copyright (C) 2017 Rockchip Electronics Co., Ltd.
9  */
10
11 #include <linux/delay.h>
12 #include <linux/pm_runtime.h>
13 #include <media/v4l2-common.h>
14 #include <media/v4l2-event.h>
15 #include <media/v4l2-fh.h>
16 #include <media/v4l2-ioctl.h>
17 #include <media/v4l2-mc.h>
18 #include <media/v4l2-subdev.h>
19 #include <media/videobuf2-dma-contig.h>
20
21 #include "rkisp1-common.h"
22
23 /*
24  * NOTE: There are two capture video devices in rkisp1, selfpath and mainpath.
25  *
26  * differences between selfpath and mainpath
27  * available mp sink input: isp
28  * available sp sink input : isp, dma(TODO)
29  * available mp sink pad fmts: yuv422, raw
30  * available sp sink pad fmts: yuv422, yuv420......
31  * available mp source fmts: yuv, raw, jpeg(TODO)
32  * available sp source fmts: yuv, rgb
33  */
34
35 #define RKISP1_SP_DEV_NAME      RKISP1_DRIVER_NAME "_selfpath"
36 #define RKISP1_MP_DEV_NAME      RKISP1_DRIVER_NAME "_mainpath"
37
38 #define RKISP1_MIN_BUFFERS_NEEDED 3
39
40 enum rkisp1_plane {
41         RKISP1_PLANE_Y  = 0,
42         RKISP1_PLANE_CB = 1,
43         RKISP1_PLANE_CR = 2
44 };
45
46 /*
47  * @fourcc: pixel format
48  * @fmt_type: helper filed for pixel format
49  * @uv_swap: if cb cr swapped, for yuv
50  * @write_format: defines how YCbCr self picture data is written to memory
51  * @output_format: defines sp output format
52  * @mbus: the mbus code on the src resizer pad that matches the pixel format
53  */
54 struct rkisp1_capture_fmt_cfg {
55         u32 fourcc;
56         u8 uv_swap;
57         u32 write_format;
58         u32 output_format;
59         u32 mbus;
60 };
61
62 struct rkisp1_capture_ops {
63         void (*config)(struct rkisp1_capture *cap);
64         void (*stop)(struct rkisp1_capture *cap);
65         void (*enable)(struct rkisp1_capture *cap);
66         void (*disable)(struct rkisp1_capture *cap);
67         void (*set_data_path)(struct rkisp1_capture *cap);
68         bool (*is_stopped)(struct rkisp1_capture *cap);
69 };
70
71 struct rkisp1_capture_config {
72         const struct rkisp1_capture_fmt_cfg *fmts;
73         int fmt_size;
74         struct {
75                 u32 y_size_init;
76                 u32 cb_size_init;
77                 u32 cr_size_init;
78                 u32 y_base_ad_init;
79                 u32 cb_base_ad_init;
80                 u32 cr_base_ad_init;
81                 u32 y_offs_cnt_init;
82                 u32 cb_offs_cnt_init;
83                 u32 cr_offs_cnt_init;
84         } mi;
85 };
86
87 /*
88  * The supported pixel formats for mainpath. NOTE, pixel formats with identical 'mbus'
89  * are grouped together. This is assumed and used by the function rkisp1_cap_enum_mbus_codes
90  */
91 static const struct rkisp1_capture_fmt_cfg rkisp1_mp_fmts[] = {
92         /* yuv422 */
93         {
94                 .fourcc = V4L2_PIX_FMT_YUYV,
95                 .uv_swap = 0,
96                 .write_format = RKISP1_MI_CTRL_MP_WRITE_YUVINT,
97                 .mbus = MEDIA_BUS_FMT_YUYV8_2X8,
98         }, {
99                 .fourcc = V4L2_PIX_FMT_YUV422P,
100                 .uv_swap = 0,
101                 .write_format = RKISP1_MI_CTRL_MP_WRITE_YUV_PLA_OR_RAW8,
102                 .mbus = MEDIA_BUS_FMT_YUYV8_2X8,
103         }, {
104                 .fourcc = V4L2_PIX_FMT_NV16,
105                 .uv_swap = 0,
106                 .write_format = RKISP1_MI_CTRL_MP_WRITE_YUV_SPLA,
107                 .mbus = MEDIA_BUS_FMT_YUYV8_2X8,
108         }, {
109                 .fourcc = V4L2_PIX_FMT_NV61,
110                 .uv_swap = 1,
111                 .write_format = RKISP1_MI_CTRL_MP_WRITE_YUV_SPLA,
112                 .mbus = MEDIA_BUS_FMT_YUYV8_2X8,
113         }, {
114                 .fourcc = V4L2_PIX_FMT_NV16M,
115                 .uv_swap = 0,
116                 .write_format = RKISP1_MI_CTRL_MP_WRITE_YUV_SPLA,
117                 .mbus = MEDIA_BUS_FMT_YUYV8_2X8,
118         }, {
119                 .fourcc = V4L2_PIX_FMT_NV61M,
120                 .uv_swap = 1,
121                 .write_format = RKISP1_MI_CTRL_MP_WRITE_YUV_SPLA,
122                 .mbus = MEDIA_BUS_FMT_YUYV8_2X8,
123         }, {
124                 .fourcc = V4L2_PIX_FMT_YVU422M,
125                 .uv_swap = 1,
126                 .write_format = RKISP1_MI_CTRL_MP_WRITE_YUV_PLA_OR_RAW8,
127                 .mbus = MEDIA_BUS_FMT_YUYV8_2X8,
128         },
129         /* yuv400 */
130         {
131                 .fourcc = V4L2_PIX_FMT_GREY,
132                 .uv_swap = 0,
133                 .write_format = RKISP1_MI_CTRL_MP_WRITE_YUV_PLA_OR_RAW8,
134                 .mbus = MEDIA_BUS_FMT_YUYV8_2X8,
135         },
136         /* yuv420 */
137         {
138                 .fourcc = V4L2_PIX_FMT_NV21,
139                 .uv_swap = 1,
140                 .write_format = RKISP1_MI_CTRL_MP_WRITE_YUV_SPLA,
141                 .mbus = MEDIA_BUS_FMT_YUYV8_1_5X8,
142         }, {
143                 .fourcc = V4L2_PIX_FMT_NV12,
144                 .uv_swap = 0,
145                 .write_format = RKISP1_MI_CTRL_MP_WRITE_YUV_SPLA,
146                 .mbus = MEDIA_BUS_FMT_YUYV8_1_5X8,
147         }, {
148                 .fourcc = V4L2_PIX_FMT_NV21M,
149                 .uv_swap = 1,
150                 .write_format = RKISP1_MI_CTRL_MP_WRITE_YUV_SPLA,
151                 .mbus = MEDIA_BUS_FMT_YUYV8_1_5X8,
152         }, {
153                 .fourcc = V4L2_PIX_FMT_NV12M,
154                 .uv_swap = 0,
155                 .write_format = RKISP1_MI_CTRL_MP_WRITE_YUV_SPLA,
156                 .mbus = MEDIA_BUS_FMT_YUYV8_1_5X8,
157         }, {
158                 .fourcc = V4L2_PIX_FMT_YUV420,
159                 .uv_swap = 0,
160                 .write_format = RKISP1_MI_CTRL_MP_WRITE_YUV_PLA_OR_RAW8,
161                 .mbus = MEDIA_BUS_FMT_YUYV8_1_5X8,
162         }, {
163                 .fourcc = V4L2_PIX_FMT_YVU420,
164                 .uv_swap = 1,
165                 .write_format = RKISP1_MI_CTRL_MP_WRITE_YUV_PLA_OR_RAW8,
166                 .mbus = MEDIA_BUS_FMT_YUYV8_1_5X8,
167         },
168         /* raw */
169         {
170                 .fourcc = V4L2_PIX_FMT_SRGGB8,
171                 .write_format = RKISP1_MI_CTRL_MP_WRITE_YUV_PLA_OR_RAW8,
172                 .mbus = MEDIA_BUS_FMT_SRGGB8_1X8,
173         }, {
174                 .fourcc = V4L2_PIX_FMT_SGRBG8,
175                 .write_format = RKISP1_MI_CTRL_MP_WRITE_YUV_PLA_OR_RAW8,
176                 .mbus = MEDIA_BUS_FMT_SGRBG8_1X8,
177         }, {
178                 .fourcc = V4L2_PIX_FMT_SGBRG8,
179                 .write_format = RKISP1_MI_CTRL_MP_WRITE_YUV_PLA_OR_RAW8,
180                 .mbus = MEDIA_BUS_FMT_SGBRG8_1X8,
181         }, {
182                 .fourcc = V4L2_PIX_FMT_SBGGR8,
183                 .write_format = RKISP1_MI_CTRL_MP_WRITE_YUV_PLA_OR_RAW8,
184                 .mbus = MEDIA_BUS_FMT_SBGGR8_1X8,
185         }, {
186                 .fourcc = V4L2_PIX_FMT_SRGGB10,
187                 .write_format = RKISP1_MI_CTRL_MP_WRITE_RAW12,
188                 .mbus = MEDIA_BUS_FMT_SRGGB10_1X10,
189         }, {
190                 .fourcc = V4L2_PIX_FMT_SGRBG10,
191                 .write_format = RKISP1_MI_CTRL_MP_WRITE_RAW12,
192                 .mbus = MEDIA_BUS_FMT_SGRBG10_1X10,
193         }, {
194                 .fourcc = V4L2_PIX_FMT_SGBRG10,
195                 .write_format = RKISP1_MI_CTRL_MP_WRITE_RAW12,
196                 .mbus = MEDIA_BUS_FMT_SGBRG10_1X10,
197         }, {
198                 .fourcc = V4L2_PIX_FMT_SBGGR10,
199                 .write_format = RKISP1_MI_CTRL_MP_WRITE_RAW12,
200                 .mbus = MEDIA_BUS_FMT_SBGGR10_1X10,
201         }, {
202                 .fourcc = V4L2_PIX_FMT_SRGGB12,
203                 .write_format = RKISP1_MI_CTRL_MP_WRITE_RAW12,
204                 .mbus = MEDIA_BUS_FMT_SRGGB12_1X12,
205         }, {
206                 .fourcc = V4L2_PIX_FMT_SGRBG12,
207                 .write_format = RKISP1_MI_CTRL_MP_WRITE_RAW12,
208                 .mbus = MEDIA_BUS_FMT_SGRBG12_1X12,
209         }, {
210                 .fourcc = V4L2_PIX_FMT_SGBRG12,
211                 .write_format = RKISP1_MI_CTRL_MP_WRITE_RAW12,
212                 .mbus = MEDIA_BUS_FMT_SGBRG12_1X12,
213         }, {
214                 .fourcc = V4L2_PIX_FMT_SBGGR12,
215                 .write_format = RKISP1_MI_CTRL_MP_WRITE_RAW12,
216                 .mbus = MEDIA_BUS_FMT_SBGGR12_1X12,
217         },
218 };
219
220 /*
221  * The supported pixel formats for selfpath. NOTE, pixel formats with identical 'mbus'
222  * are grouped together. This is assumed and used by the function rkisp1_cap_enum_mbus_codes
223  */
224 static const struct rkisp1_capture_fmt_cfg rkisp1_sp_fmts[] = {
225         /* yuv422 */
226         {
227                 .fourcc = V4L2_PIX_FMT_YUYV,
228                 .uv_swap = 0,
229                 .write_format = RKISP1_MI_CTRL_SP_WRITE_INT,
230                 .output_format = RKISP1_MI_CTRL_SP_OUTPUT_YUV422,
231                 .mbus = MEDIA_BUS_FMT_YUYV8_2X8,
232         }, {
233                 .fourcc = V4L2_PIX_FMT_YUV422P,
234                 .uv_swap = 0,
235                 .write_format = RKISP1_MI_CTRL_SP_WRITE_PLA,
236                 .output_format = RKISP1_MI_CTRL_SP_OUTPUT_YUV422,
237                 .mbus = MEDIA_BUS_FMT_YUYV8_2X8,
238         }, {
239                 .fourcc = V4L2_PIX_FMT_NV16,
240                 .uv_swap = 0,
241                 .write_format = RKISP1_MI_CTRL_SP_WRITE_SPLA,
242                 .output_format = RKISP1_MI_CTRL_SP_OUTPUT_YUV422,
243                 .mbus = MEDIA_BUS_FMT_YUYV8_2X8,
244         }, {
245                 .fourcc = V4L2_PIX_FMT_NV61,
246                 .uv_swap = 1,
247                 .write_format = RKISP1_MI_CTRL_SP_WRITE_SPLA,
248                 .output_format = RKISP1_MI_CTRL_SP_OUTPUT_YUV422,
249                 .mbus = MEDIA_BUS_FMT_YUYV8_2X8,
250         }, {
251                 .fourcc = V4L2_PIX_FMT_NV16M,
252                 .uv_swap = 0,
253                 .write_format = RKISP1_MI_CTRL_SP_WRITE_SPLA,
254                 .output_format = RKISP1_MI_CTRL_SP_OUTPUT_YUV422,
255                 .mbus = MEDIA_BUS_FMT_YUYV8_2X8,
256         }, {
257                 .fourcc = V4L2_PIX_FMT_NV61M,
258                 .uv_swap = 1,
259                 .write_format = RKISP1_MI_CTRL_SP_WRITE_SPLA,
260                 .output_format = RKISP1_MI_CTRL_SP_OUTPUT_YUV422,
261                 .mbus = MEDIA_BUS_FMT_YUYV8_2X8,
262         }, {
263                 .fourcc = V4L2_PIX_FMT_YVU422M,
264                 .uv_swap = 1,
265                 .write_format = RKISP1_MI_CTRL_SP_WRITE_PLA,
266                 .output_format = RKISP1_MI_CTRL_SP_OUTPUT_YUV422,
267                 .mbus = MEDIA_BUS_FMT_YUYV8_2X8,
268         },
269         /* yuv400 */
270         {
271                 .fourcc = V4L2_PIX_FMT_GREY,
272                 .uv_swap = 0,
273                 .write_format = RKISP1_MI_CTRL_SP_WRITE_PLA,
274                 .output_format = RKISP1_MI_CTRL_SP_OUTPUT_YUV422,
275                 .mbus = MEDIA_BUS_FMT_YUYV8_2X8,
276         },
277         /* rgb */
278         {
279                 .fourcc = V4L2_PIX_FMT_XBGR32,
280                 .write_format = RKISP1_MI_CTRL_SP_WRITE_PLA,
281                 .output_format = RKISP1_MI_CTRL_SP_OUTPUT_RGB888,
282                 .mbus = MEDIA_BUS_FMT_YUYV8_2X8,
283         }, {
284                 .fourcc = V4L2_PIX_FMT_RGB565,
285                 .write_format = RKISP1_MI_CTRL_SP_WRITE_PLA,
286                 .output_format = RKISP1_MI_CTRL_SP_OUTPUT_RGB565,
287                 .mbus = MEDIA_BUS_FMT_YUYV8_2X8,
288         },
289         /* yuv420 */
290         {
291                 .fourcc = V4L2_PIX_FMT_NV21,
292                 .uv_swap = 1,
293                 .write_format = RKISP1_MI_CTRL_SP_WRITE_SPLA,
294                 .output_format = RKISP1_MI_CTRL_SP_OUTPUT_YUV420,
295                 .mbus = MEDIA_BUS_FMT_YUYV8_1_5X8,
296         }, {
297                 .fourcc = V4L2_PIX_FMT_NV12,
298                 .uv_swap = 0,
299                 .write_format = RKISP1_MI_CTRL_SP_WRITE_SPLA,
300                 .output_format = RKISP1_MI_CTRL_SP_OUTPUT_YUV420,
301                 .mbus = MEDIA_BUS_FMT_YUYV8_1_5X8,
302         }, {
303                 .fourcc = V4L2_PIX_FMT_NV21M,
304                 .uv_swap = 1,
305                 .write_format = RKISP1_MI_CTRL_SP_WRITE_SPLA,
306                 .output_format = RKISP1_MI_CTRL_SP_OUTPUT_YUV420,
307                 .mbus = MEDIA_BUS_FMT_YUYV8_1_5X8,
308         }, {
309                 .fourcc = V4L2_PIX_FMT_NV12M,
310                 .uv_swap = 0,
311                 .write_format = RKISP1_MI_CTRL_SP_WRITE_SPLA,
312                 .output_format = RKISP1_MI_CTRL_SP_OUTPUT_YUV420,
313                 .mbus = MEDIA_BUS_FMT_YUYV8_1_5X8,
314         }, {
315                 .fourcc = V4L2_PIX_FMT_YUV420,
316                 .uv_swap = 0,
317                 .write_format = RKISP1_MI_CTRL_SP_WRITE_PLA,
318                 .output_format = RKISP1_MI_CTRL_SP_OUTPUT_YUV420,
319                 .mbus = MEDIA_BUS_FMT_YUYV8_1_5X8,
320         }, {
321                 .fourcc = V4L2_PIX_FMT_YVU420,
322                 .uv_swap = 1,
323                 .write_format = RKISP1_MI_CTRL_SP_WRITE_PLA,
324                 .output_format = RKISP1_MI_CTRL_SP_OUTPUT_YUV420,
325                 .mbus = MEDIA_BUS_FMT_YUYV8_1_5X8,
326         },
327 };
328
329 static const struct rkisp1_capture_config rkisp1_capture_config_mp = {
330         .fmts = rkisp1_mp_fmts,
331         .fmt_size = ARRAY_SIZE(rkisp1_mp_fmts),
332         .mi = {
333                 .y_size_init =          RKISP1_CIF_MI_MP_Y_SIZE_INIT,
334                 .cb_size_init =         RKISP1_CIF_MI_MP_CB_SIZE_INIT,
335                 .cr_size_init =         RKISP1_CIF_MI_MP_CR_SIZE_INIT,
336                 .y_base_ad_init =       RKISP1_CIF_MI_MP_Y_BASE_AD_INIT,
337                 .cb_base_ad_init =      RKISP1_CIF_MI_MP_CB_BASE_AD_INIT,
338                 .cr_base_ad_init =      RKISP1_CIF_MI_MP_CR_BASE_AD_INIT,
339                 .y_offs_cnt_init =      RKISP1_CIF_MI_MP_Y_OFFS_CNT_INIT,
340                 .cb_offs_cnt_init =     RKISP1_CIF_MI_MP_CB_OFFS_CNT_INIT,
341                 .cr_offs_cnt_init =     RKISP1_CIF_MI_MP_CR_OFFS_CNT_INIT,
342         },
343 };
344
345 static const struct rkisp1_capture_config rkisp1_capture_config_sp = {
346         .fmts = rkisp1_sp_fmts,
347         .fmt_size = ARRAY_SIZE(rkisp1_sp_fmts),
348         .mi = {
349                 .y_size_init =          RKISP1_CIF_MI_SP_Y_SIZE_INIT,
350                 .cb_size_init =         RKISP1_CIF_MI_SP_CB_SIZE_INIT,
351                 .cr_size_init =         RKISP1_CIF_MI_SP_CR_SIZE_INIT,
352                 .y_base_ad_init =       RKISP1_CIF_MI_SP_Y_BASE_AD_INIT,
353                 .cb_base_ad_init =      RKISP1_CIF_MI_SP_CB_BASE_AD_INIT,
354                 .cr_base_ad_init =      RKISP1_CIF_MI_SP_CR_BASE_AD_INIT,
355                 .y_offs_cnt_init =      RKISP1_CIF_MI_SP_Y_OFFS_CNT_INIT,
356                 .cb_offs_cnt_init =     RKISP1_CIF_MI_SP_CB_OFFS_CNT_INIT,
357                 .cr_offs_cnt_init =     RKISP1_CIF_MI_SP_CR_OFFS_CNT_INIT,
358         },
359 };
360
361 static inline struct rkisp1_vdev_node *
362 rkisp1_vdev_to_node(struct video_device *vdev)
363 {
364         return container_of(vdev, struct rkisp1_vdev_node, vdev);
365 }
366
367 int rkisp1_cap_enum_mbus_codes(struct rkisp1_capture *cap,
368                                struct v4l2_subdev_mbus_code_enum *code)
369 {
370         const struct rkisp1_capture_fmt_cfg *fmts = cap->config->fmts;
371         /*
372          * initialize curr_mbus to non existing mbus code 0 to ensure it is
373          * different from fmts[0].mbus
374          */
375         u32 curr_mbus = 0;
376         int i, n = 0;
377
378         for (i = 0; i < cap->config->fmt_size; i++) {
379                 if (fmts[i].mbus == curr_mbus)
380                         continue;
381
382                 curr_mbus = fmts[i].mbus;
383                 if (n++ == code->index) {
384                         code->code = curr_mbus;
385                         return 0;
386                 }
387         }
388         return -EINVAL;
389 }
390
391 /* ----------------------------------------------------------------------------
392  * Stream operations for self-picture path (sp) and main-picture path (mp)
393  */
394
395 static void rkisp1_mi_config_ctrl(struct rkisp1_capture *cap)
396 {
397         u32 mi_ctrl = rkisp1_read(cap->rkisp1, RKISP1_CIF_MI_CTRL);
398
399         mi_ctrl &= ~GENMASK(17, 16);
400         mi_ctrl |= RKISP1_CIF_MI_CTRL_BURST_LEN_LUM_64;
401
402         mi_ctrl &= ~GENMASK(19, 18);
403         mi_ctrl |= RKISP1_CIF_MI_CTRL_BURST_LEN_CHROM_64;
404
405         mi_ctrl |= RKISP1_CIF_MI_CTRL_INIT_BASE_EN |
406                    RKISP1_CIF_MI_CTRL_INIT_OFFSET_EN;
407
408         rkisp1_write(cap->rkisp1, RKISP1_CIF_MI_CTRL, mi_ctrl);
409 }
410
411 static u32 rkisp1_pixfmt_comp_size(const struct v4l2_pix_format_mplane *pixm,
412                                    unsigned int component)
413 {
414         /*
415          * If packed format, then plane_fmt[0].sizeimage is the sum of all
416          * components, so we need to calculate just the size of Y component.
417          * See rkisp1_fill_pixfmt().
418          */
419         if (!component && pixm->num_planes == 1)
420                 return pixm->plane_fmt[0].bytesperline * pixm->height;
421         return pixm->plane_fmt[component].sizeimage;
422 }
423
424 static void rkisp1_irq_frame_end_enable(struct rkisp1_capture *cap)
425 {
426         u32 mi_imsc = rkisp1_read(cap->rkisp1, RKISP1_CIF_MI_IMSC);
427
428         mi_imsc |= RKISP1_CIF_MI_FRAME(cap);
429         rkisp1_write(cap->rkisp1, RKISP1_CIF_MI_IMSC, mi_imsc);
430 }
431
432 static void rkisp1_mp_config(struct rkisp1_capture *cap)
433 {
434         const struct v4l2_pix_format_mplane *pixm = &cap->pix.fmt;
435         struct rkisp1_device *rkisp1 = cap->rkisp1;
436         u32 reg;
437
438         rkisp1_write(rkisp1, cap->config->mi.y_size_init,
439                      rkisp1_pixfmt_comp_size(pixm, RKISP1_PLANE_Y));
440         rkisp1_write(rkisp1, cap->config->mi.cb_size_init,
441                      rkisp1_pixfmt_comp_size(pixm, RKISP1_PLANE_CB));
442         rkisp1_write(rkisp1, cap->config->mi.cr_size_init,
443                      rkisp1_pixfmt_comp_size(pixm, RKISP1_PLANE_CR));
444
445         rkisp1_irq_frame_end_enable(cap);
446
447         /* set uv swapping for semiplanar formats */
448         if (cap->pix.info->comp_planes == 2) {
449                 reg = rkisp1_read(rkisp1, RKISP1_CIF_MI_XTD_FORMAT_CTRL);
450                 if (cap->pix.cfg->uv_swap)
451                         reg |= RKISP1_CIF_MI_XTD_FMT_CTRL_MP_CB_CR_SWAP;
452                 else
453                         reg &= ~RKISP1_CIF_MI_XTD_FMT_CTRL_MP_CB_CR_SWAP;
454                 rkisp1_write(rkisp1, RKISP1_CIF_MI_XTD_FORMAT_CTRL, reg);
455         }
456
457         rkisp1_mi_config_ctrl(cap);
458
459         reg = rkisp1_read(rkisp1, RKISP1_CIF_MI_CTRL);
460         reg &= ~RKISP1_MI_CTRL_MP_FMT_MASK;
461         reg |= cap->pix.cfg->write_format;
462         rkisp1_write(rkisp1, RKISP1_CIF_MI_CTRL, reg);
463
464         reg = rkisp1_read(rkisp1, RKISP1_CIF_MI_CTRL);
465         reg |= RKISP1_CIF_MI_MP_AUTOUPDATE_ENABLE;
466         rkisp1_write(rkisp1, RKISP1_CIF_MI_CTRL, reg);
467 }
468
469 static void rkisp1_sp_config(struct rkisp1_capture *cap)
470 {
471         const struct v4l2_pix_format_mplane *pixm = &cap->pix.fmt;
472         struct rkisp1_device *rkisp1 = cap->rkisp1;
473         u32 mi_ctrl, reg;
474
475         rkisp1_write(rkisp1, cap->config->mi.y_size_init,
476                      rkisp1_pixfmt_comp_size(pixm, RKISP1_PLANE_Y));
477         rkisp1_write(rkisp1, cap->config->mi.cb_size_init,
478                      rkisp1_pixfmt_comp_size(pixm, RKISP1_PLANE_CB));
479         rkisp1_write(rkisp1, cap->config->mi.cr_size_init,
480                      rkisp1_pixfmt_comp_size(pixm, RKISP1_PLANE_CR));
481
482         rkisp1_write(rkisp1, RKISP1_CIF_MI_SP_Y_LLENGTH, cap->sp_y_stride);
483         rkisp1_write(rkisp1, RKISP1_CIF_MI_SP_Y_PIC_WIDTH, pixm->width);
484         rkisp1_write(rkisp1, RKISP1_CIF_MI_SP_Y_PIC_HEIGHT, pixm->height);
485         rkisp1_write(rkisp1, RKISP1_CIF_MI_SP_Y_PIC_SIZE,
486                      cap->sp_y_stride * pixm->height);
487
488         rkisp1_irq_frame_end_enable(cap);
489
490         /* set uv swapping for semiplanar formats */
491         if (cap->pix.info->comp_planes == 2) {
492                 reg = rkisp1_read(rkisp1, RKISP1_CIF_MI_XTD_FORMAT_CTRL);
493                 if (cap->pix.cfg->uv_swap)
494                         reg |= RKISP1_CIF_MI_XTD_FMT_CTRL_SP_CB_CR_SWAP;
495                 else
496                         reg &= ~RKISP1_CIF_MI_XTD_FMT_CTRL_SP_CB_CR_SWAP;
497                 rkisp1_write(rkisp1, RKISP1_CIF_MI_XTD_FORMAT_CTRL, reg);
498         }
499
500         rkisp1_mi_config_ctrl(cap);
501
502         mi_ctrl = rkisp1_read(rkisp1, RKISP1_CIF_MI_CTRL);
503         mi_ctrl &= ~RKISP1_MI_CTRL_SP_FMT_MASK;
504         mi_ctrl |= cap->pix.cfg->write_format |
505                    RKISP1_MI_CTRL_SP_INPUT_YUV422 |
506                    cap->pix.cfg->output_format |
507                    RKISP1_CIF_MI_SP_AUTOUPDATE_ENABLE;
508         rkisp1_write(rkisp1, RKISP1_CIF_MI_CTRL, mi_ctrl);
509 }
510
511 static void rkisp1_mp_disable(struct rkisp1_capture *cap)
512 {
513         u32 mi_ctrl = rkisp1_read(cap->rkisp1, RKISP1_CIF_MI_CTRL);
514
515         mi_ctrl &= ~(RKISP1_CIF_MI_CTRL_MP_ENABLE |
516                      RKISP1_CIF_MI_CTRL_RAW_ENABLE);
517         rkisp1_write(cap->rkisp1, RKISP1_CIF_MI_CTRL, mi_ctrl);
518 }
519
520 static void rkisp1_sp_disable(struct rkisp1_capture *cap)
521 {
522         u32 mi_ctrl = rkisp1_read(cap->rkisp1, RKISP1_CIF_MI_CTRL);
523
524         mi_ctrl &= ~RKISP1_CIF_MI_CTRL_SP_ENABLE;
525         rkisp1_write(cap->rkisp1, RKISP1_CIF_MI_CTRL, mi_ctrl);
526 }
527
528 static void rkisp1_mp_enable(struct rkisp1_capture *cap)
529 {
530         u32 mi_ctrl;
531
532         rkisp1_mp_disable(cap);
533
534         mi_ctrl = rkisp1_read(cap->rkisp1, RKISP1_CIF_MI_CTRL);
535         if (v4l2_is_format_bayer(cap->pix.info))
536                 mi_ctrl |= RKISP1_CIF_MI_CTRL_RAW_ENABLE;
537         /* YUV */
538         else
539                 mi_ctrl |= RKISP1_CIF_MI_CTRL_MP_ENABLE;
540
541         rkisp1_write(cap->rkisp1, RKISP1_CIF_MI_CTRL, mi_ctrl);
542 }
543
544 static void rkisp1_sp_enable(struct rkisp1_capture *cap)
545 {
546         u32 mi_ctrl = rkisp1_read(cap->rkisp1, RKISP1_CIF_MI_CTRL);
547
548         mi_ctrl |= RKISP1_CIF_MI_CTRL_SP_ENABLE;
549         rkisp1_write(cap->rkisp1, RKISP1_CIF_MI_CTRL, mi_ctrl);
550 }
551
552 static void rkisp1_mp_sp_stop(struct rkisp1_capture *cap)
553 {
554         if (!cap->is_streaming)
555                 return;
556         rkisp1_write(cap->rkisp1, RKISP1_CIF_MI_ICR, RKISP1_CIF_MI_FRAME(cap));
557         cap->ops->disable(cap);
558 }
559
560 static bool rkisp1_mp_is_stopped(struct rkisp1_capture *cap)
561 {
562         u32 en = RKISP1_CIF_MI_CTRL_SHD_MP_IN_ENABLED |
563                  RKISP1_CIF_MI_CTRL_SHD_RAW_OUT_ENABLED;
564
565         return !(rkisp1_read(cap->rkisp1, RKISP1_CIF_MI_CTRL_SHD) & en);
566 }
567
568 static bool rkisp1_sp_is_stopped(struct rkisp1_capture *cap)
569 {
570         return !(rkisp1_read(cap->rkisp1, RKISP1_CIF_MI_CTRL_SHD) &
571                  RKISP1_CIF_MI_CTRL_SHD_SP_IN_ENABLED);
572 }
573
574 static void rkisp1_mp_set_data_path(struct rkisp1_capture *cap)
575 {
576         u32 dpcl = rkisp1_read(cap->rkisp1, RKISP1_CIF_VI_DPCL);
577
578         dpcl = dpcl | RKISP1_CIF_VI_DPCL_CHAN_MODE_MP |
579                RKISP1_CIF_VI_DPCL_MP_MUX_MRSZ_MI;
580         rkisp1_write(cap->rkisp1, RKISP1_CIF_VI_DPCL, dpcl);
581 }
582
583 static void rkisp1_sp_set_data_path(struct rkisp1_capture *cap)
584 {
585         u32 dpcl = rkisp1_read(cap->rkisp1, RKISP1_CIF_VI_DPCL);
586
587         dpcl |= RKISP1_CIF_VI_DPCL_CHAN_MODE_SP;
588         rkisp1_write(cap->rkisp1, RKISP1_CIF_VI_DPCL, dpcl);
589 }
590
591 static const struct rkisp1_capture_ops rkisp1_capture_ops_mp = {
592         .config = rkisp1_mp_config,
593         .enable = rkisp1_mp_enable,
594         .disable = rkisp1_mp_disable,
595         .stop = rkisp1_mp_sp_stop,
596         .set_data_path = rkisp1_mp_set_data_path,
597         .is_stopped = rkisp1_mp_is_stopped,
598 };
599
600 static const struct rkisp1_capture_ops rkisp1_capture_ops_sp = {
601         .config = rkisp1_sp_config,
602         .enable = rkisp1_sp_enable,
603         .disable = rkisp1_sp_disable,
604         .stop = rkisp1_mp_sp_stop,
605         .set_data_path = rkisp1_sp_set_data_path,
606         .is_stopped = rkisp1_sp_is_stopped,
607 };
608
609 /* ----------------------------------------------------------------------------
610  * Frame buffer operations
611  */
612
613 static int rkisp1_dummy_buf_create(struct rkisp1_capture *cap)
614 {
615         const struct v4l2_pix_format_mplane *pixm = &cap->pix.fmt;
616         struct rkisp1_dummy_buffer *dummy_buf = &cap->buf.dummy;
617
618         dummy_buf->size = max3(rkisp1_pixfmt_comp_size(pixm, RKISP1_PLANE_Y),
619                                rkisp1_pixfmt_comp_size(pixm, RKISP1_PLANE_CB),
620                                rkisp1_pixfmt_comp_size(pixm, RKISP1_PLANE_CR));
621
622         /* The driver never access vaddr, no mapping is required */
623         dummy_buf->vaddr = dma_alloc_attrs(cap->rkisp1->dev,
624                                            dummy_buf->size,
625                                            &dummy_buf->dma_addr,
626                                            GFP_KERNEL,
627                                            DMA_ATTR_NO_KERNEL_MAPPING);
628         if (!dummy_buf->vaddr)
629                 return -ENOMEM;
630
631         return 0;
632 }
633
634 static void rkisp1_dummy_buf_destroy(struct rkisp1_capture *cap)
635 {
636         dma_free_attrs(cap->rkisp1->dev,
637                        cap->buf.dummy.size, cap->buf.dummy.vaddr,
638                        cap->buf.dummy.dma_addr, DMA_ATTR_NO_KERNEL_MAPPING);
639 }
640
641 static void rkisp1_set_next_buf(struct rkisp1_capture *cap)
642 {
643         cap->buf.curr = cap->buf.next;
644         cap->buf.next = NULL;
645
646         if (!list_empty(&cap->buf.queue)) {
647                 u32 *buff_addr;
648
649                 cap->buf.next = list_first_entry(&cap->buf.queue, struct rkisp1_buffer, queue);
650                 list_del(&cap->buf.next->queue);
651
652                 buff_addr = cap->buf.next->buff_addr;
653
654                 rkisp1_write(cap->rkisp1, cap->config->mi.y_base_ad_init,
655                              buff_addr[RKISP1_PLANE_Y]);
656                 /*
657                  * In order to support grey format we capture
658                  * YUV422 planar format from the camera and
659                  * set the U and V planes to the dummy buffer
660                  */
661                 if (cap->pix.cfg->fourcc == V4L2_PIX_FMT_GREY) {
662                         rkisp1_write(cap->rkisp1,
663                                      cap->config->mi.cb_base_ad_init,
664                                      cap->buf.dummy.dma_addr);
665                         rkisp1_write(cap->rkisp1,
666                                      cap->config->mi.cr_base_ad_init,
667                                      cap->buf.dummy.dma_addr);
668                 } else {
669                         rkisp1_write(cap->rkisp1,
670                                      cap->config->mi.cb_base_ad_init,
671                                      buff_addr[RKISP1_PLANE_CB]);
672                         rkisp1_write(cap->rkisp1,
673                                      cap->config->mi.cr_base_ad_init,
674                                      buff_addr[RKISP1_PLANE_CR]);
675                 }
676         } else {
677                 /*
678                  * Use the dummy space allocated by dma_alloc_coherent to
679                  * throw data if there is no available buffer.
680                  */
681                 rkisp1_write(cap->rkisp1, cap->config->mi.y_base_ad_init,
682                              cap->buf.dummy.dma_addr);
683                 rkisp1_write(cap->rkisp1, cap->config->mi.cb_base_ad_init,
684                              cap->buf.dummy.dma_addr);
685                 rkisp1_write(cap->rkisp1, cap->config->mi.cr_base_ad_init,
686                              cap->buf.dummy.dma_addr);
687         }
688
689         /* Set plane offsets */
690         rkisp1_write(cap->rkisp1, cap->config->mi.y_offs_cnt_init, 0);
691         rkisp1_write(cap->rkisp1, cap->config->mi.cb_offs_cnt_init, 0);
692         rkisp1_write(cap->rkisp1, cap->config->mi.cr_offs_cnt_init, 0);
693 }
694
695 /*
696  * This function is called when a frame end comes. The next frame
697  * is processing and we should set up buffer for next-next frame,
698  * otherwise it will overflow.
699  */
700 static void rkisp1_handle_buffer(struct rkisp1_capture *cap)
701 {
702         struct rkisp1_isp *isp = &cap->rkisp1->isp;
703         struct rkisp1_buffer *curr_buf;
704
705         spin_lock(&cap->buf.lock);
706         curr_buf = cap->buf.curr;
707
708         if (curr_buf) {
709                 curr_buf->vb.sequence = isp->frame_sequence;
710                 curr_buf->vb.vb2_buf.timestamp = ktime_get_boottime_ns();
711                 curr_buf->vb.field = V4L2_FIELD_NONE;
712                 vb2_buffer_done(&curr_buf->vb.vb2_buf, VB2_BUF_STATE_DONE);
713         } else {
714                 cap->rkisp1->debug.frame_drop[cap->id]++;
715         }
716
717         rkisp1_set_next_buf(cap);
718         spin_unlock(&cap->buf.lock);
719 }
720
721 irqreturn_t rkisp1_capture_isr(int irq, void *ctx)
722 {
723         struct device *dev = ctx;
724         struct rkisp1_device *rkisp1 = dev_get_drvdata(dev);
725         unsigned int i;
726         u32 status;
727
728         status = rkisp1_read(rkisp1, RKISP1_CIF_MI_MIS);
729         if (!status)
730                 return IRQ_NONE;
731
732         rkisp1_write(rkisp1, RKISP1_CIF_MI_ICR, status);
733
734         for (i = 0; i < ARRAY_SIZE(rkisp1->capture_devs); ++i) {
735                 struct rkisp1_capture *cap = &rkisp1->capture_devs[i];
736
737                 if (!(status & RKISP1_CIF_MI_FRAME(cap)))
738                         continue;
739                 if (!cap->is_stopping) {
740                         rkisp1_handle_buffer(cap);
741                         continue;
742                 }
743                 /*
744                  * Make sure stream is actually stopped, whose state
745                  * can be read from the shadow register, before
746                  * wake_up() thread which would immediately free all
747                  * frame buffers. stop() takes effect at the next
748                  * frame end that sync the configurations to shadow
749                  * regs.
750                  */
751                 if (!cap->ops->is_stopped(cap)) {
752                         cap->ops->stop(cap);
753                         continue;
754                 }
755                 cap->is_stopping = false;
756                 cap->is_streaming = false;
757                 wake_up(&cap->done);
758         }
759
760         return IRQ_HANDLED;
761 }
762
763 /* ----------------------------------------------------------------------------
764  * Vb2 operations
765  */
766
767 static int rkisp1_vb2_queue_setup(struct vb2_queue *queue,
768                                   unsigned int *num_buffers,
769                                   unsigned int *num_planes,
770                                   unsigned int sizes[],
771                                   struct device *alloc_devs[])
772 {
773         struct rkisp1_capture *cap = queue->drv_priv;
774         const struct v4l2_pix_format_mplane *pixm = &cap->pix.fmt;
775         unsigned int i;
776
777         if (*num_planes) {
778                 if (*num_planes != pixm->num_planes)
779                         return -EINVAL;
780
781                 for (i = 0; i < pixm->num_planes; i++)
782                         if (sizes[i] < pixm->plane_fmt[i].sizeimage)
783                                 return -EINVAL;
784         } else {
785                 *num_planes = pixm->num_planes;
786                 for (i = 0; i < pixm->num_planes; i++)
787                         sizes[i] = pixm->plane_fmt[i].sizeimage;
788         }
789
790         return 0;
791 }
792
793 static int rkisp1_vb2_buf_init(struct vb2_buffer *vb)
794 {
795         struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
796         struct rkisp1_buffer *ispbuf =
797                 container_of(vbuf, struct rkisp1_buffer, vb);
798         struct rkisp1_capture *cap = vb->vb2_queue->drv_priv;
799         const struct v4l2_pix_format_mplane *pixm = &cap->pix.fmt;
800         unsigned int i;
801
802         memset(ispbuf->buff_addr, 0, sizeof(ispbuf->buff_addr));
803         for (i = 0; i < pixm->num_planes; i++)
804                 ispbuf->buff_addr[i] = vb2_dma_contig_plane_dma_addr(vb, i);
805
806         /* Convert to non-MPLANE */
807         if (pixm->num_planes == 1) {
808                 ispbuf->buff_addr[RKISP1_PLANE_CB] =
809                         ispbuf->buff_addr[RKISP1_PLANE_Y] +
810                         rkisp1_pixfmt_comp_size(pixm, RKISP1_PLANE_Y);
811                 ispbuf->buff_addr[RKISP1_PLANE_CR] =
812                         ispbuf->buff_addr[RKISP1_PLANE_CB] +
813                         rkisp1_pixfmt_comp_size(pixm, RKISP1_PLANE_CB);
814         }
815
816         /*
817          * uv swap can be supported for planar formats by switching
818          * the address of cb and cr
819          */
820         if (cap->pix.info->comp_planes == 3 && cap->pix.cfg->uv_swap)
821                 swap(ispbuf->buff_addr[RKISP1_PLANE_CR],
822                      ispbuf->buff_addr[RKISP1_PLANE_CB]);
823         return 0;
824 }
825
826 static void rkisp1_vb2_buf_queue(struct vb2_buffer *vb)
827 {
828         struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
829         struct rkisp1_buffer *ispbuf =
830                 container_of(vbuf, struct rkisp1_buffer, vb);
831         struct rkisp1_capture *cap = vb->vb2_queue->drv_priv;
832
833         spin_lock_irq(&cap->buf.lock);
834         list_add_tail(&ispbuf->queue, &cap->buf.queue);
835         spin_unlock_irq(&cap->buf.lock);
836 }
837
838 static int rkisp1_vb2_buf_prepare(struct vb2_buffer *vb)
839 {
840         struct rkisp1_capture *cap = vb->vb2_queue->drv_priv;
841         unsigned int i;
842
843         for (i = 0; i < cap->pix.fmt.num_planes; i++) {
844                 unsigned long size = cap->pix.fmt.plane_fmt[i].sizeimage;
845
846                 if (vb2_plane_size(vb, i) < size) {
847                         dev_err(cap->rkisp1->dev,
848                                 "User buffer too small (%ld < %ld)\n",
849                                 vb2_plane_size(vb, i), size);
850                         return -EINVAL;
851                 }
852                 vb2_set_plane_payload(vb, i, size);
853         }
854
855         return 0;
856 }
857
858 static void rkisp1_return_all_buffers(struct rkisp1_capture *cap,
859                                       enum vb2_buffer_state state)
860 {
861         struct rkisp1_buffer *buf;
862
863         spin_lock_irq(&cap->buf.lock);
864         if (cap->buf.curr) {
865                 vb2_buffer_done(&cap->buf.curr->vb.vb2_buf, state);
866                 cap->buf.curr = NULL;
867         }
868         if (cap->buf.next) {
869                 vb2_buffer_done(&cap->buf.next->vb.vb2_buf, state);
870                 cap->buf.next = NULL;
871         }
872         while (!list_empty(&cap->buf.queue)) {
873                 buf = list_first_entry(&cap->buf.queue,
874                                        struct rkisp1_buffer, queue);
875                 list_del(&buf->queue);
876                 vb2_buffer_done(&buf->vb.vb2_buf, state);
877         }
878         spin_unlock_irq(&cap->buf.lock);
879 }
880
881 /*
882  * Most registers inside the rockchip ISP1 have shadow register since
883  * they must not be changed while processing a frame.
884  * Usually, each sub-module updates its shadow register after
885  * processing the last pixel of a frame.
886  */
887 static void rkisp1_cap_stream_enable(struct rkisp1_capture *cap)
888 {
889         struct rkisp1_device *rkisp1 = cap->rkisp1;
890         struct rkisp1_capture *other = &rkisp1->capture_devs[cap->id ^ 1];
891
892         cap->ops->set_data_path(cap);
893         cap->ops->config(cap);
894
895         /* Setup a buffer for the next frame */
896         spin_lock_irq(&cap->buf.lock);
897         rkisp1_set_next_buf(cap);
898         cap->ops->enable(cap);
899         /* It's safe to configure ACTIVE and SHADOW registers for the
900          * first stream. While when the second is starting, do NOT
901          * force update because it also updates the first one.
902          *
903          * The latter case would drop one more buffer(that is 2) since
904          * there's no buffer in a shadow register when the second FE received.
905          * This's also required because the second FE maybe corrupt
906          * especially when run at 120fps.
907          */
908         if (!other->is_streaming) {
909                 /* force cfg update */
910                 rkisp1_write(rkisp1, RKISP1_CIF_MI_INIT,
911                              RKISP1_CIF_MI_INIT_SOFT_UPD);
912                 rkisp1_set_next_buf(cap);
913         }
914         spin_unlock_irq(&cap->buf.lock);
915         cap->is_streaming = true;
916 }
917
918 static void rkisp1_cap_stream_disable(struct rkisp1_capture *cap)
919 {
920         int ret;
921
922         /* Stream should stop in interrupt. If it doesn't, stop it by force. */
923         cap->is_stopping = true;
924         ret = wait_event_timeout(cap->done,
925                                  !cap->is_streaming,
926                                  msecs_to_jiffies(1000));
927         if (!ret) {
928                 cap->rkisp1->debug.stop_timeout[cap->id]++;
929                 cap->ops->stop(cap);
930                 cap->is_stopping = false;
931                 cap->is_streaming = false;
932         }
933 }
934
935 /*
936  * rkisp1_pipeline_stream_disable - disable nodes in the pipeline
937  *
938  * Call s_stream(false) in the reverse order from
939  * rkisp1_pipeline_stream_enable() and disable the DMA engine.
940  * Should be called before video_device_pipeline_stop()
941  */
942 static void rkisp1_pipeline_stream_disable(struct rkisp1_capture *cap)
943         __must_hold(&cap->rkisp1->stream_lock)
944 {
945         struct rkisp1_device *rkisp1 = cap->rkisp1;
946
947         rkisp1_cap_stream_disable(cap);
948
949         /*
950          * If the other capture is streaming, isp and sensor nodes shouldn't
951          * be disabled, skip them.
952          */
953         if (rkisp1->pipe.start_count < 2)
954                 v4l2_subdev_call(&rkisp1->isp.sd, video, s_stream, false);
955
956         v4l2_subdev_call(&rkisp1->resizer_devs[cap->id].sd, video, s_stream,
957                          false);
958 }
959
960 /*
961  * rkisp1_pipeline_stream_enable - enable nodes in the pipeline
962  *
963  * Enable the DMA Engine and call s_stream(true) through the pipeline.
964  * Should be called after video_device_pipeline_start()
965  */
966 static int rkisp1_pipeline_stream_enable(struct rkisp1_capture *cap)
967         __must_hold(&cap->rkisp1->stream_lock)
968 {
969         struct rkisp1_device *rkisp1 = cap->rkisp1;
970         int ret;
971
972         rkisp1_cap_stream_enable(cap);
973
974         ret = v4l2_subdev_call(&rkisp1->resizer_devs[cap->id].sd, video,
975                                s_stream, true);
976         if (ret)
977                 goto err_disable_cap;
978
979         /*
980          * If the other capture is streaming, isp and sensor nodes are already
981          * enabled, skip them.
982          */
983         if (rkisp1->pipe.start_count > 1)
984                 return 0;
985
986         ret = v4l2_subdev_call(&rkisp1->isp.sd, video, s_stream, true);
987         if (ret)
988                 goto err_disable_rsz;
989
990         return 0;
991
992 err_disable_rsz:
993         v4l2_subdev_call(&rkisp1->resizer_devs[cap->id].sd, video, s_stream,
994                          false);
995 err_disable_cap:
996         rkisp1_cap_stream_disable(cap);
997
998         return ret;
999 }
1000
1001 static void rkisp1_vb2_stop_streaming(struct vb2_queue *queue)
1002 {
1003         struct rkisp1_capture *cap = queue->drv_priv;
1004         struct rkisp1_vdev_node *node = &cap->vnode;
1005         struct rkisp1_device *rkisp1 = cap->rkisp1;
1006         int ret;
1007
1008         mutex_lock(&cap->rkisp1->stream_lock);
1009
1010         rkisp1_pipeline_stream_disable(cap);
1011
1012         rkisp1_return_all_buffers(cap, VB2_BUF_STATE_ERROR);
1013
1014         v4l2_pipeline_pm_put(&node->vdev.entity);
1015         ret = pm_runtime_put(rkisp1->dev);
1016         if (ret < 0)
1017                 dev_err(rkisp1->dev, "power down failed error:%d\n", ret);
1018
1019         rkisp1_dummy_buf_destroy(cap);
1020
1021         video_device_pipeline_stop(&node->vdev);
1022
1023         mutex_unlock(&cap->rkisp1->stream_lock);
1024 }
1025
1026 static int
1027 rkisp1_vb2_start_streaming(struct vb2_queue *queue, unsigned int count)
1028 {
1029         struct rkisp1_capture *cap = queue->drv_priv;
1030         struct media_entity *entity = &cap->vnode.vdev.entity;
1031         int ret;
1032
1033         mutex_lock(&cap->rkisp1->stream_lock);
1034
1035         ret = video_device_pipeline_start(&cap->vnode.vdev, &cap->rkisp1->pipe);
1036         if (ret) {
1037                 dev_err(cap->rkisp1->dev, "start pipeline failed %d\n", ret);
1038                 goto err_ret_buffers;
1039         }
1040
1041         ret = rkisp1_dummy_buf_create(cap);
1042         if (ret)
1043                 goto err_pipeline_stop;
1044
1045         ret = pm_runtime_resume_and_get(cap->rkisp1->dev);
1046         if (ret < 0) {
1047                 dev_err(cap->rkisp1->dev, "power up failed %d\n", ret);
1048                 goto err_destroy_dummy;
1049         }
1050         ret = v4l2_pipeline_pm_get(entity);
1051         if (ret) {
1052                 dev_err(cap->rkisp1->dev, "open cif pipeline failed %d\n", ret);
1053                 goto err_pipe_pm_put;
1054         }
1055
1056         ret = rkisp1_pipeline_stream_enable(cap);
1057         if (ret)
1058                 goto err_v4l2_pm_put;
1059
1060         mutex_unlock(&cap->rkisp1->stream_lock);
1061
1062         return 0;
1063
1064 err_v4l2_pm_put:
1065         v4l2_pipeline_pm_put(entity);
1066 err_pipe_pm_put:
1067         pm_runtime_put(cap->rkisp1->dev);
1068 err_destroy_dummy:
1069         rkisp1_dummy_buf_destroy(cap);
1070 err_pipeline_stop:
1071         video_device_pipeline_stop(&cap->vnode.vdev);
1072 err_ret_buffers:
1073         rkisp1_return_all_buffers(cap, VB2_BUF_STATE_QUEUED);
1074         mutex_unlock(&cap->rkisp1->stream_lock);
1075
1076         return ret;
1077 }
1078
1079 static const struct vb2_ops rkisp1_vb2_ops = {
1080         .queue_setup = rkisp1_vb2_queue_setup,
1081         .buf_init = rkisp1_vb2_buf_init,
1082         .buf_queue = rkisp1_vb2_buf_queue,
1083         .buf_prepare = rkisp1_vb2_buf_prepare,
1084         .wait_prepare = vb2_ops_wait_prepare,
1085         .wait_finish = vb2_ops_wait_finish,
1086         .stop_streaming = rkisp1_vb2_stop_streaming,
1087         .start_streaming = rkisp1_vb2_start_streaming,
1088 };
1089
1090 /* ----------------------------------------------------------------------------
1091  * IOCTLs operations
1092  */
1093
1094 static const struct v4l2_format_info *
1095 rkisp1_fill_pixfmt(struct v4l2_pix_format_mplane *pixm,
1096                    enum rkisp1_stream_id id)
1097 {
1098         struct v4l2_plane_pix_format *plane_y = &pixm->plane_fmt[0];
1099         const struct v4l2_format_info *info;
1100         unsigned int i;
1101         u32 stride;
1102
1103         memset(pixm->plane_fmt, 0, sizeof(pixm->plane_fmt));
1104         info = v4l2_format_info(pixm->pixelformat);
1105         pixm->num_planes = info->mem_planes;
1106
1107         /*
1108          * The SP supports custom strides, expressed as a number of pixels for
1109          * the Y plane. Clamp the stride to a reasonable value to avoid integer
1110          * overflows when calculating the bytesperline and sizeimage values.
1111          */
1112         if (id == RKISP1_SELFPATH)
1113                 stride = clamp(DIV_ROUND_UP(plane_y->bytesperline, info->bpp[0]),
1114                                pixm->width, 65536U);
1115         else
1116                 stride = pixm->width;
1117
1118         plane_y->bytesperline = stride * info->bpp[0];
1119         plane_y->sizeimage = plane_y->bytesperline * pixm->height;
1120
1121         for (i = 1; i < info->comp_planes; i++) {
1122                 struct v4l2_plane_pix_format *plane = &pixm->plane_fmt[i];
1123
1124                 /* bytesperline for other components derive from Y component */
1125                 plane->bytesperline = DIV_ROUND_UP(stride, info->hdiv) *
1126                                       info->bpp[i];
1127                 plane->sizeimage = plane->bytesperline *
1128                                    DIV_ROUND_UP(pixm->height, info->vdiv);
1129         }
1130
1131         /*
1132          * If pixfmt is packed, then plane_fmt[0] should contain the total size
1133          * considering all components. plane_fmt[i] for i > 0 should be ignored
1134          * by userspace as mem_planes == 1, but we are keeping information there
1135          * for convenience.
1136          */
1137         if (info->mem_planes == 1)
1138                 for (i = 1; i < info->comp_planes; i++)
1139                         plane_y->sizeimage += pixm->plane_fmt[i].sizeimage;
1140
1141         return info;
1142 }
1143
1144 static const struct rkisp1_capture_fmt_cfg *
1145 rkisp1_find_fmt_cfg(const struct rkisp1_capture *cap, const u32 pixelfmt)
1146 {
1147         unsigned int i;
1148
1149         for (i = 0; i < cap->config->fmt_size; i++) {
1150                 if (cap->config->fmts[i].fourcc == pixelfmt)
1151                         return &cap->config->fmts[i];
1152         }
1153         return NULL;
1154 }
1155
1156 static void rkisp1_try_fmt(const struct rkisp1_capture *cap,
1157                            struct v4l2_pix_format_mplane *pixm,
1158                            const struct rkisp1_capture_fmt_cfg **fmt_cfg,
1159                            const struct v4l2_format_info **fmt_info)
1160 {
1161         const struct rkisp1_capture_config *config = cap->config;
1162         const struct rkisp1_capture_fmt_cfg *fmt;
1163         const struct v4l2_format_info *info;
1164         static const unsigned int max_widths[] = {
1165                 RKISP1_RSZ_MP_SRC_MAX_WIDTH, RKISP1_RSZ_SP_SRC_MAX_WIDTH
1166         };
1167         static const unsigned int max_heights[] = {
1168                 RKISP1_RSZ_MP_SRC_MAX_HEIGHT, RKISP1_RSZ_SP_SRC_MAX_HEIGHT
1169         };
1170
1171         fmt = rkisp1_find_fmt_cfg(cap, pixm->pixelformat);
1172         if (!fmt) {
1173                 fmt = config->fmts;
1174                 pixm->pixelformat = fmt->fourcc;
1175         }
1176
1177         pixm->width = clamp_t(u32, pixm->width,
1178                               RKISP1_RSZ_SRC_MIN_WIDTH, max_widths[cap->id]);
1179         pixm->height = clamp_t(u32, pixm->height,
1180                                RKISP1_RSZ_SRC_MIN_HEIGHT, max_heights[cap->id]);
1181
1182         pixm->field = V4L2_FIELD_NONE;
1183         pixm->colorspace = V4L2_COLORSPACE_DEFAULT;
1184         pixm->ycbcr_enc = V4L2_YCBCR_ENC_DEFAULT;
1185         pixm->quantization = V4L2_QUANTIZATION_DEFAULT;
1186
1187         info = rkisp1_fill_pixfmt(pixm, cap->id);
1188
1189         if (fmt_cfg)
1190                 *fmt_cfg = fmt;
1191         if (fmt_info)
1192                 *fmt_info = info;
1193 }
1194
1195 static void rkisp1_set_fmt(struct rkisp1_capture *cap,
1196                            struct v4l2_pix_format_mplane *pixm)
1197 {
1198         rkisp1_try_fmt(cap, pixm, &cap->pix.cfg, &cap->pix.info);
1199         cap->pix.fmt = *pixm;
1200
1201         /* SP supports custom stride in number of pixels of the Y plane */
1202         if (cap->id == RKISP1_SELFPATH)
1203                 cap->sp_y_stride = pixm->plane_fmt[0].bytesperline /
1204                                    cap->pix.info->bpp[0];
1205 }
1206
1207 static int rkisp1_try_fmt_vid_cap_mplane(struct file *file, void *fh,
1208                                          struct v4l2_format *f)
1209 {
1210         struct rkisp1_capture *cap = video_drvdata(file);
1211
1212         rkisp1_try_fmt(cap, &f->fmt.pix_mp, NULL, NULL);
1213
1214         return 0;
1215 }
1216
1217 static int rkisp1_enum_fmt_vid_cap_mplane(struct file *file, void *priv,
1218                                           struct v4l2_fmtdesc *f)
1219 {
1220         struct rkisp1_capture *cap = video_drvdata(file);
1221         const struct rkisp1_capture_fmt_cfg *fmt = NULL;
1222         unsigned int i, n = 0;
1223
1224         if (!f->mbus_code) {
1225                 if (f->index >= cap->config->fmt_size)
1226                         return -EINVAL;
1227
1228                 fmt = &cap->config->fmts[f->index];
1229                 f->pixelformat = fmt->fourcc;
1230                 return 0;
1231         }
1232
1233         for (i = 0; i < cap->config->fmt_size; i++) {
1234                 if (cap->config->fmts[i].mbus != f->mbus_code)
1235                         continue;
1236
1237                 if (n++ == f->index) {
1238                         f->pixelformat = cap->config->fmts[i].fourcc;
1239                         return 0;
1240                 }
1241         }
1242         return -EINVAL;
1243 }
1244
1245 static int rkisp1_enum_framesizes(struct file *file, void *fh,
1246                                   struct v4l2_frmsizeenum *fsize)
1247 {
1248         static const unsigned int max_widths[] = {
1249                 RKISP1_RSZ_MP_SRC_MAX_WIDTH,
1250                 RKISP1_RSZ_SP_SRC_MAX_WIDTH,
1251         };
1252         static const unsigned int max_heights[] = {
1253                 RKISP1_RSZ_MP_SRC_MAX_HEIGHT,
1254                 RKISP1_RSZ_SP_SRC_MAX_HEIGHT,
1255         };
1256         struct rkisp1_capture *cap = video_drvdata(file);
1257
1258         if (fsize->index != 0)
1259                 return -EINVAL;
1260
1261         fsize->type = V4L2_FRMSIZE_TYPE_STEPWISE;
1262
1263         fsize->stepwise.min_width = RKISP1_RSZ_SRC_MIN_WIDTH;
1264         fsize->stepwise.max_width = max_widths[cap->id];
1265         fsize->stepwise.step_width = 2;
1266
1267         fsize->stepwise.min_height = RKISP1_RSZ_SRC_MIN_HEIGHT;
1268         fsize->stepwise.max_height = max_heights[cap->id];
1269         fsize->stepwise.step_height = 2;
1270
1271         return 0;
1272 }
1273
1274 static int rkisp1_s_fmt_vid_cap_mplane(struct file *file,
1275                                        void *priv, struct v4l2_format *f)
1276 {
1277         struct rkisp1_capture *cap = video_drvdata(file);
1278         struct rkisp1_vdev_node *node =
1279                                 rkisp1_vdev_to_node(&cap->vnode.vdev);
1280
1281         if (vb2_is_busy(&node->buf_queue))
1282                 return -EBUSY;
1283
1284         rkisp1_set_fmt(cap, &f->fmt.pix_mp);
1285
1286         return 0;
1287 }
1288
1289 static int rkisp1_g_fmt_vid_cap_mplane(struct file *file, void *fh,
1290                                        struct v4l2_format *f)
1291 {
1292         struct rkisp1_capture *cap = video_drvdata(file);
1293
1294         f->fmt.pix_mp = cap->pix.fmt;
1295
1296         return 0;
1297 }
1298
1299 static int
1300 rkisp1_querycap(struct file *file, void *priv, struct v4l2_capability *cap)
1301 {
1302         strscpy(cap->driver, RKISP1_DRIVER_NAME, sizeof(cap->driver));
1303         strscpy(cap->card, RKISP1_DRIVER_NAME, sizeof(cap->card));
1304         strscpy(cap->bus_info, RKISP1_BUS_INFO, sizeof(cap->bus_info));
1305
1306         return 0;
1307 }
1308
1309 static const struct v4l2_ioctl_ops rkisp1_v4l2_ioctl_ops = {
1310         .vidioc_reqbufs = vb2_ioctl_reqbufs,
1311         .vidioc_querybuf = vb2_ioctl_querybuf,
1312         .vidioc_create_bufs = vb2_ioctl_create_bufs,
1313         .vidioc_qbuf = vb2_ioctl_qbuf,
1314         .vidioc_expbuf = vb2_ioctl_expbuf,
1315         .vidioc_dqbuf = vb2_ioctl_dqbuf,
1316         .vidioc_prepare_buf = vb2_ioctl_prepare_buf,
1317         .vidioc_streamon = vb2_ioctl_streamon,
1318         .vidioc_streamoff = vb2_ioctl_streamoff,
1319         .vidioc_try_fmt_vid_cap_mplane = rkisp1_try_fmt_vid_cap_mplane,
1320         .vidioc_s_fmt_vid_cap_mplane = rkisp1_s_fmt_vid_cap_mplane,
1321         .vidioc_g_fmt_vid_cap_mplane = rkisp1_g_fmt_vid_cap_mplane,
1322         .vidioc_enum_fmt_vid_cap = rkisp1_enum_fmt_vid_cap_mplane,
1323         .vidioc_enum_framesizes = rkisp1_enum_framesizes,
1324         .vidioc_querycap = rkisp1_querycap,
1325         .vidioc_subscribe_event = v4l2_ctrl_subscribe_event,
1326         .vidioc_unsubscribe_event = v4l2_event_unsubscribe,
1327 };
1328
1329 static int rkisp1_capture_link_validate(struct media_link *link)
1330 {
1331         struct video_device *vdev =
1332                 media_entity_to_video_device(link->sink->entity);
1333         struct v4l2_subdev *sd =
1334                 media_entity_to_v4l2_subdev(link->source->entity);
1335         struct rkisp1_capture *cap = video_get_drvdata(vdev);
1336         const struct rkisp1_capture_fmt_cfg *fmt =
1337                 rkisp1_find_fmt_cfg(cap, cap->pix.fmt.pixelformat);
1338         struct v4l2_subdev_format sd_fmt = {
1339                 .which = V4L2_SUBDEV_FORMAT_ACTIVE,
1340                 .pad = link->source->index,
1341         };
1342         int ret;
1343
1344         ret = v4l2_subdev_call(sd, pad, get_fmt, NULL, &sd_fmt);
1345         if (ret)
1346                 return ret;
1347
1348         if (sd_fmt.format.height != cap->pix.fmt.height ||
1349             sd_fmt.format.width != cap->pix.fmt.width ||
1350             sd_fmt.format.code != fmt->mbus) {
1351                 dev_dbg(cap->rkisp1->dev,
1352                         "link '%s':%u -> '%s':%u not valid: 0x%04x/%ux%u != 0x%04x/%ux%u\n",
1353                         link->source->entity->name, link->source->index,
1354                         link->sink->entity->name, link->sink->index,
1355                         sd_fmt.format.code, sd_fmt.format.width,
1356                         sd_fmt.format.height, fmt->mbus, cap->pix.fmt.width,
1357                         cap->pix.fmt.height);
1358                 return -EPIPE;
1359         }
1360
1361         return 0;
1362 }
1363
1364 /* ----------------------------------------------------------------------------
1365  * core functions
1366  */
1367
1368 static const struct media_entity_operations rkisp1_media_ops = {
1369         .link_validate = rkisp1_capture_link_validate,
1370 };
1371
1372 static const struct v4l2_file_operations rkisp1_fops = {
1373         .open = v4l2_fh_open,
1374         .release = vb2_fop_release,
1375         .unlocked_ioctl = video_ioctl2,
1376         .poll = vb2_fop_poll,
1377         .mmap = vb2_fop_mmap,
1378 };
1379
1380 static void rkisp1_unregister_capture(struct rkisp1_capture *cap)
1381 {
1382         if (!video_is_registered(&cap->vnode.vdev))
1383                 return;
1384
1385         media_entity_cleanup(&cap->vnode.vdev.entity);
1386         vb2_video_unregister_device(&cap->vnode.vdev);
1387         mutex_destroy(&cap->vnode.vlock);
1388 }
1389
1390 void rkisp1_capture_devs_unregister(struct rkisp1_device *rkisp1)
1391 {
1392         struct rkisp1_capture *mp = &rkisp1->capture_devs[RKISP1_MAINPATH];
1393         struct rkisp1_capture *sp = &rkisp1->capture_devs[RKISP1_SELFPATH];
1394
1395         rkisp1_unregister_capture(mp);
1396         rkisp1_unregister_capture(sp);
1397 }
1398
1399 static int rkisp1_register_capture(struct rkisp1_capture *cap)
1400 {
1401         static const char * const dev_names[] = {
1402                 RKISP1_MP_DEV_NAME, RKISP1_SP_DEV_NAME
1403         };
1404         struct v4l2_device *v4l2_dev = &cap->rkisp1->v4l2_dev;
1405         struct video_device *vdev = &cap->vnode.vdev;
1406         struct rkisp1_vdev_node *node;
1407         struct vb2_queue *q;
1408         int ret;
1409
1410         strscpy(vdev->name, dev_names[cap->id], sizeof(vdev->name));
1411         node = rkisp1_vdev_to_node(vdev);
1412         mutex_init(&node->vlock);
1413
1414         vdev->ioctl_ops = &rkisp1_v4l2_ioctl_ops;
1415         vdev->release = video_device_release_empty;
1416         vdev->fops = &rkisp1_fops;
1417         vdev->minor = -1;
1418         vdev->v4l2_dev = v4l2_dev;
1419         vdev->lock = &node->vlock;
1420         vdev->device_caps = V4L2_CAP_VIDEO_CAPTURE_MPLANE |
1421                             V4L2_CAP_STREAMING | V4L2_CAP_IO_MC;
1422         vdev->entity.ops = &rkisp1_media_ops;
1423         video_set_drvdata(vdev, cap);
1424         vdev->vfl_dir = VFL_DIR_RX;
1425         node->pad.flags = MEDIA_PAD_FL_SINK;
1426
1427         q = &node->buf_queue;
1428         q->type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
1429         q->io_modes = VB2_MMAP | VB2_DMABUF;
1430         q->drv_priv = cap;
1431         q->ops = &rkisp1_vb2_ops;
1432         q->mem_ops = &vb2_dma_contig_memops;
1433         q->buf_struct_size = sizeof(struct rkisp1_buffer);
1434         q->min_queued_buffers = RKISP1_MIN_BUFFERS_NEEDED;
1435         q->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC;
1436         q->lock = &node->vlock;
1437         q->dev = cap->rkisp1->dev;
1438         ret = vb2_queue_init(q);
1439         if (ret) {
1440                 dev_err(cap->rkisp1->dev,
1441                         "vb2 queue init failed (err=%d)\n", ret);
1442                 goto error;
1443         }
1444
1445         vdev->queue = q;
1446
1447         ret = media_entity_pads_init(&vdev->entity, 1, &node->pad);
1448         if (ret)
1449                 goto error;
1450
1451         ret = video_register_device(vdev, VFL_TYPE_VIDEO, -1);
1452         if (ret) {
1453                 dev_err(cap->rkisp1->dev,
1454                         "failed to register %s, ret=%d\n", vdev->name, ret);
1455                 goto error;
1456         }
1457
1458         v4l2_info(v4l2_dev, "registered %s as /dev/video%d\n", vdev->name,
1459                   vdev->num);
1460
1461         return 0;
1462
1463 error:
1464         media_entity_cleanup(&vdev->entity);
1465         mutex_destroy(&node->vlock);
1466         return ret;
1467 }
1468
1469 static void
1470 rkisp1_capture_init(struct rkisp1_device *rkisp1, enum rkisp1_stream_id id)
1471 {
1472         struct rkisp1_capture *cap = &rkisp1->capture_devs[id];
1473         struct v4l2_pix_format_mplane pixm;
1474
1475         memset(cap, 0, sizeof(*cap));
1476         cap->id = id;
1477         cap->rkisp1 = rkisp1;
1478
1479         INIT_LIST_HEAD(&cap->buf.queue);
1480         init_waitqueue_head(&cap->done);
1481         spin_lock_init(&cap->buf.lock);
1482         if (cap->id == RKISP1_SELFPATH) {
1483                 cap->ops = &rkisp1_capture_ops_sp;
1484                 cap->config = &rkisp1_capture_config_sp;
1485         } else {
1486                 cap->ops = &rkisp1_capture_ops_mp;
1487                 cap->config = &rkisp1_capture_config_mp;
1488         }
1489
1490         cap->is_streaming = false;
1491
1492         memset(&pixm, 0, sizeof(pixm));
1493         pixm.pixelformat = V4L2_PIX_FMT_YUYV;
1494         pixm.width = RKISP1_DEFAULT_WIDTH;
1495         pixm.height = RKISP1_DEFAULT_HEIGHT;
1496         rkisp1_set_fmt(cap, &pixm);
1497 }
1498
1499 int rkisp1_capture_devs_register(struct rkisp1_device *rkisp1)
1500 {
1501         unsigned int i;
1502         int ret;
1503
1504         for (i = 0; i < ARRAY_SIZE(rkisp1->capture_devs); i++) {
1505                 struct rkisp1_capture *cap = &rkisp1->capture_devs[i];
1506
1507                 rkisp1_capture_init(rkisp1, i);
1508
1509                 ret = rkisp1_register_capture(cap);
1510                 if (ret) {
1511                         rkisp1_capture_devs_unregister(rkisp1);
1512                         return ret;
1513                 }
1514         }
1515
1516         return 0;
1517
1518 }