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