1 /*
2  * The Marvell camera core.  This device appears in a number of settings,
3  * so it needs platform-specific support outside of the core.
4  *
5  * Copyright 2011 Jonathan Corbet corbet@lwn.net
6  */
7 #include <linux/kernel.h>
8 #include <linux/module.h>
9 #include <linux/fs.h>
10 #include <linux/mm.h>
11 #include <linux/i2c.h>
12 #include <linux/interrupt.h>
13 #include <linux/spinlock.h>
14 #include <linux/slab.h>
15 #include <linux/device.h>
16 #include <linux/wait.h>
17 #include <linux/list.h>
18 #include <linux/dma-mapping.h>
19 #include <linux/delay.h>
20 #include <linux/vmalloc.h>
21 #include <linux/io.h>
22 #include <linux/clk.h>
23 #include <linux/videodev2.h>
24 #include <media/v4l2-device.h>
25 #include <media/v4l2-ioctl.h>
26 #include <media/v4l2-ctrls.h>
27 #include <media/v4l2-event.h>
28 #include <media/ov7670.h>
29 #include <media/videobuf2-vmalloc.h>
30 #include <media/videobuf2-dma-contig.h>
31 #include <media/videobuf2-dma-sg.h>
32 
33 #include "mcam-core.h"
34 
35 #ifdef MCAM_MODE_VMALLOC
36 /*
37  * Internal DMA buffer management.  Since the controller cannot do S/G I/O,
38  * we must have physically contiguous buffers to bring frames into.
39  * These parameters control how many buffers we use, whether we
40  * allocate them at load time (better chance of success, but nails down
41  * memory) or when somebody tries to use the camera (riskier), and,
42  * for load-time allocation, how big they should be.
43  *
44  * The controller can cycle through three buffers.  We could use
45  * more by flipping pointers around, but it probably makes little
46  * sense.
47  */
48 
49 static bool alloc_bufs_at_read;
50 module_param(alloc_bufs_at_read, bool, 0444);
51 MODULE_PARM_DESC(alloc_bufs_at_read,
52 		"Non-zero value causes DMA buffers to be allocated when the "
53 		"video capture device is read, rather than at module load "
54 		"time.  This saves memory, but decreases the chances of "
55 		"successfully getting those buffers.  This parameter is "
56 		"only used in the vmalloc buffer mode");
57 
58 static int n_dma_bufs = 3;
59 module_param(n_dma_bufs, uint, 0644);
60 MODULE_PARM_DESC(n_dma_bufs,
61 		"The number of DMA buffers to allocate.  Can be either two "
62 		"(saves memory, makes timing tighter) or three.");
63 
64 static int dma_buf_size = VGA_WIDTH * VGA_HEIGHT * 2;  /* Worst case */
65 module_param(dma_buf_size, uint, 0444);
66 MODULE_PARM_DESC(dma_buf_size,
67 		"The size of the allocated DMA buffers.  If actual operating "
68 		"parameters require larger buffers, an attempt to reallocate "
69 		"will be made.");
70 #else /* MCAM_MODE_VMALLOC */
71 static const bool alloc_bufs_at_read;
72 static const int n_dma_bufs = 3;  /* Used by S/G_PARM */
73 #endif /* MCAM_MODE_VMALLOC */
74 
75 static bool flip;
76 module_param(flip, bool, 0444);
77 MODULE_PARM_DESC(flip,
78 		"If set, the sensor will be instructed to flip the image "
79 		"vertically.");
80 
81 static int buffer_mode = -1;
82 module_param(buffer_mode, int, 0444);
83 MODULE_PARM_DESC(buffer_mode,
84 		"Set the buffer mode to be used; default is to go with what "
85 		"the platform driver asks for.  Set to 0 for vmalloc, 1 for "
86 		"DMA contiguous.");
87 
88 /*
89  * Status flags.  Always manipulated with bit operations.
90  */
91 #define CF_BUF0_VALID	 0	/* Buffers valid - first three */
92 #define CF_BUF1_VALID	 1
93 #define CF_BUF2_VALID	 2
94 #define CF_DMA_ACTIVE	 3	/* A frame is incoming */
95 #define CF_CONFIG_NEEDED 4	/* Must configure hardware */
96 #define CF_SINGLE_BUFFER 5	/* Running with a single buffer */
97 #define CF_SG_RESTART	 6	/* SG restart needed */
98 #define CF_FRAME_SOF0	 7	/* Frame 0 started */
99 #define CF_FRAME_SOF1	 8
100 #define CF_FRAME_SOF2	 9
101 
102 #define sensor_call(cam, o, f, args...) \
103 	v4l2_subdev_call(cam->sensor, o, f, ##args)
104 
105 static struct mcam_format_struct {
106 	__u8 *desc;
107 	__u32 pixelformat;
108 	int bpp;   /* Bytes per pixel */
109 	bool planar;
110 	u32 mbus_code;
111 } mcam_formats[] = {
112 	{
113 		.desc		= "YUYV 4:2:2",
114 		.pixelformat	= V4L2_PIX_FMT_YUYV,
115 		.mbus_code	= MEDIA_BUS_FMT_YUYV8_2X8,
116 		.bpp		= 2,
117 		.planar		= false,
118 	},
119 	{
120 		.desc		= "YVYU 4:2:2",
121 		.pixelformat	= V4L2_PIX_FMT_YVYU,
122 		.mbus_code	= MEDIA_BUS_FMT_YUYV8_2X8,
123 		.bpp		= 2,
124 		.planar		= false,
125 	},
126 	{
127 		.desc		= "YUV 4:2:0 PLANAR",
128 		.pixelformat	= V4L2_PIX_FMT_YUV420,
129 		.mbus_code	= MEDIA_BUS_FMT_YUYV8_2X8,
130 		.bpp		= 1,
131 		.planar		= true,
132 	},
133 	{
134 		.desc		= "YVU 4:2:0 PLANAR",
135 		.pixelformat	= V4L2_PIX_FMT_YVU420,
136 		.mbus_code	= MEDIA_BUS_FMT_YUYV8_2X8,
137 		.bpp		= 1,
138 		.planar		= true,
139 	},
140 	{
141 		.desc		= "XRGB 444",
142 		.pixelformat	= V4L2_PIX_FMT_XRGB444,
143 		.mbus_code	= MEDIA_BUS_FMT_RGB444_2X8_PADHI_LE,
144 		.bpp		= 2,
145 		.planar		= false,
146 	},
147 	{
148 		.desc		= "RGB 565",
149 		.pixelformat	= V4L2_PIX_FMT_RGB565,
150 		.mbus_code	= MEDIA_BUS_FMT_RGB565_2X8_LE,
151 		.bpp		= 2,
152 		.planar		= false,
153 	},
154 	{
155 		.desc		= "Raw RGB Bayer",
156 		.pixelformat	= V4L2_PIX_FMT_SBGGR8,
157 		.mbus_code	= MEDIA_BUS_FMT_SBGGR8_1X8,
158 		.bpp		= 1,
159 		.planar		= false,
160 	},
161 };
162 #define N_MCAM_FMTS ARRAY_SIZE(mcam_formats)
163 
mcam_find_format(u32 pixelformat)164 static struct mcam_format_struct *mcam_find_format(u32 pixelformat)
165 {
166 	unsigned i;
167 
168 	for (i = 0; i < N_MCAM_FMTS; i++)
169 		if (mcam_formats[i].pixelformat == pixelformat)
170 			return mcam_formats + i;
171 	/* Not found? Then return the first format. */
172 	return mcam_formats;
173 }
174 
175 /*
176  * The default format we use until somebody says otherwise.
177  */
178 static const struct v4l2_pix_format mcam_def_pix_format = {
179 	.width		= VGA_WIDTH,
180 	.height		= VGA_HEIGHT,
181 	.pixelformat	= V4L2_PIX_FMT_YUYV,
182 	.field		= V4L2_FIELD_NONE,
183 	.bytesperline	= VGA_WIDTH*2,
184 	.sizeimage	= VGA_WIDTH*VGA_HEIGHT*2,
185 	.colorspace	= V4L2_COLORSPACE_SRGB,
186 };
187 
188 static const u32 mcam_def_mbus_code = MEDIA_BUS_FMT_YUYV8_2X8;
189 
190 
191 /*
192  * The two-word DMA descriptor format used by the Armada 610 and like.  There
193  * Is a three-word format as well (set C1_DESC_3WORD) where the third
194  * word is a pointer to the next descriptor, but we don't use it.  Two-word
195  * descriptors have to be contiguous in memory.
196  */
197 struct mcam_dma_desc {
198 	u32 dma_addr;
199 	u32 segment_len;
200 };
201 
202 /*
203  * Our buffer type for working with videobuf2.  Note that the vb2
204  * developers have decreed that struct vb2_v4l2_buffer must be at the
205  * beginning of this structure.
206  */
207 struct mcam_vb_buffer {
208 	struct vb2_v4l2_buffer vb_buf;
209 	struct list_head queue;
210 	struct mcam_dma_desc *dma_desc;	/* Descriptor virtual address */
211 	dma_addr_t dma_desc_pa;		/* Descriptor physical address */
212 	int dma_desc_nent;		/* Number of mapped descriptors */
213 };
214 
vb_to_mvb(struct vb2_v4l2_buffer * vb)215 static inline struct mcam_vb_buffer *vb_to_mvb(struct vb2_v4l2_buffer *vb)
216 {
217 	return container_of(vb, struct mcam_vb_buffer, vb_buf);
218 }
219 
220 /*
221  * Hand a completed buffer back to user space.
222  */
mcam_buffer_done(struct mcam_camera * cam,int frame,struct vb2_v4l2_buffer * vbuf)223 static void mcam_buffer_done(struct mcam_camera *cam, int frame,
224 		struct vb2_v4l2_buffer *vbuf)
225 {
226 	vbuf->vb2_buf.planes[0].bytesused = cam->pix_format.sizeimage;
227 	vbuf->sequence = cam->buf_seq[frame];
228 	vbuf->field = V4L2_FIELD_NONE;
229 	v4l2_get_timestamp(&vbuf->timestamp);
230 	vb2_set_plane_payload(&vbuf->vb2_buf, 0, cam->pix_format.sizeimage);
231 	vb2_buffer_done(&vbuf->vb2_buf, VB2_BUF_STATE_DONE);
232 }
233 
234 
235 
236 /*
237  * Debugging and related.
238  */
239 #define cam_err(cam, fmt, arg...) \
240 	dev_err((cam)->dev, fmt, ##arg);
241 #define cam_warn(cam, fmt, arg...) \
242 	dev_warn((cam)->dev, fmt, ##arg);
243 #define cam_dbg(cam, fmt, arg...) \
244 	dev_dbg((cam)->dev, fmt, ##arg);
245 
246 
247 /*
248  * Flag manipulation helpers
249  */
mcam_reset_buffers(struct mcam_camera * cam)250 static void mcam_reset_buffers(struct mcam_camera *cam)
251 {
252 	int i;
253 
254 	cam->next_buf = -1;
255 	for (i = 0; i < cam->nbufs; i++) {
256 		clear_bit(i, &cam->flags);
257 		clear_bit(CF_FRAME_SOF0 + i, &cam->flags);
258 	}
259 }
260 
mcam_needs_config(struct mcam_camera * cam)261 static inline int mcam_needs_config(struct mcam_camera *cam)
262 {
263 	return test_bit(CF_CONFIG_NEEDED, &cam->flags);
264 }
265 
mcam_set_config_needed(struct mcam_camera * cam,int needed)266 static void mcam_set_config_needed(struct mcam_camera *cam, int needed)
267 {
268 	if (needed)
269 		set_bit(CF_CONFIG_NEEDED, &cam->flags);
270 	else
271 		clear_bit(CF_CONFIG_NEEDED, &cam->flags);
272 }
273 
274 /* ------------------------------------------------------------------- */
275 /*
276  * Make the controller start grabbing images.  Everything must
277  * be set up before doing this.
278  */
mcam_ctlr_start(struct mcam_camera * cam)279 static void mcam_ctlr_start(struct mcam_camera *cam)
280 {
281 	/* set_bit performs a read, so no other barrier should be
282 	   needed here */
283 	mcam_reg_set_bit(cam, REG_CTRL0, C0_ENABLE);
284 }
285 
mcam_ctlr_stop(struct mcam_camera * cam)286 static void mcam_ctlr_stop(struct mcam_camera *cam)
287 {
288 	mcam_reg_clear_bit(cam, REG_CTRL0, C0_ENABLE);
289 }
290 
mcam_enable_mipi(struct mcam_camera * mcam)291 static void mcam_enable_mipi(struct mcam_camera *mcam)
292 {
293 	/* Using MIPI mode and enable MIPI */
294 	cam_dbg(mcam, "camera: DPHY3=0x%x, DPHY5=0x%x, DPHY6=0x%x\n",
295 			mcam->dphy[0], mcam->dphy[1], mcam->dphy[2]);
296 	mcam_reg_write(mcam, REG_CSI2_DPHY3, mcam->dphy[0]);
297 	mcam_reg_write(mcam, REG_CSI2_DPHY5, mcam->dphy[1]);
298 	mcam_reg_write(mcam, REG_CSI2_DPHY6, mcam->dphy[2]);
299 
300 	if (!mcam->mipi_enabled) {
301 		if (mcam->lane > 4 || mcam->lane <= 0) {
302 			cam_warn(mcam, "lane number error\n");
303 			mcam->lane = 1;	/* set the default value */
304 		}
305 		/*
306 		 * 0x41 actives 1 lane
307 		 * 0x43 actives 2 lanes
308 		 * 0x45 actives 3 lanes (never happen)
309 		 * 0x47 actives 4 lanes
310 		 */
311 		mcam_reg_write(mcam, REG_CSI2_CTRL0,
312 			CSI2_C0_MIPI_EN | CSI2_C0_ACT_LANE(mcam->lane));
313 		mcam_reg_write(mcam, REG_CLKCTRL,
314 			(mcam->mclk_src << 29) | mcam->mclk_div);
315 
316 		mcam->mipi_enabled = true;
317 	}
318 }
319 
mcam_disable_mipi(struct mcam_camera * mcam)320 static void mcam_disable_mipi(struct mcam_camera *mcam)
321 {
322 	/* Using Parallel mode or disable MIPI */
323 	mcam_reg_write(mcam, REG_CSI2_CTRL0, 0x0);
324 	mcam_reg_write(mcam, REG_CSI2_DPHY3, 0x0);
325 	mcam_reg_write(mcam, REG_CSI2_DPHY5, 0x0);
326 	mcam_reg_write(mcam, REG_CSI2_DPHY6, 0x0);
327 	mcam->mipi_enabled = false;
328 }
329 
mcam_fmt_is_planar(__u32 pfmt)330 static bool mcam_fmt_is_planar(__u32 pfmt)
331 {
332 	struct mcam_format_struct *f;
333 
334 	f = mcam_find_format(pfmt);
335 	return f->planar;
336 }
337 
mcam_write_yuv_bases(struct mcam_camera * cam,unsigned frame,dma_addr_t base)338 static void mcam_write_yuv_bases(struct mcam_camera *cam,
339 				 unsigned frame, dma_addr_t base)
340 {
341 	struct v4l2_pix_format *fmt = &cam->pix_format;
342 	u32 pixel_count = fmt->width * fmt->height;
343 	dma_addr_t y, u = 0, v = 0;
344 
345 	y = base;
346 
347 	switch (fmt->pixelformat) {
348 	case V4L2_PIX_FMT_YUV420:
349 		u = y + pixel_count;
350 		v = u + pixel_count / 4;
351 		break;
352 	case V4L2_PIX_FMT_YVU420:
353 		v = y + pixel_count;
354 		u = v + pixel_count / 4;
355 		break;
356 	default:
357 		break;
358 	}
359 
360 	mcam_reg_write(cam, REG_Y0BAR + frame * 4, y);
361 	if (mcam_fmt_is_planar(fmt->pixelformat)) {
362 		mcam_reg_write(cam, REG_U0BAR + frame * 4, u);
363 		mcam_reg_write(cam, REG_V0BAR + frame * 4, v);
364 	}
365 }
366 
367 /* ------------------------------------------------------------------- */
368 
369 #ifdef MCAM_MODE_VMALLOC
370 /*
371  * Code specific to the vmalloc buffer mode.
372  */
373 
374 /*
375  * Allocate in-kernel DMA buffers for vmalloc mode.
376  */
mcam_alloc_dma_bufs(struct mcam_camera * cam,int loadtime)377 static int mcam_alloc_dma_bufs(struct mcam_camera *cam, int loadtime)
378 {
379 	int i;
380 
381 	mcam_set_config_needed(cam, 1);
382 	if (loadtime)
383 		cam->dma_buf_size = dma_buf_size;
384 	else
385 		cam->dma_buf_size = cam->pix_format.sizeimage;
386 	if (n_dma_bufs > 3)
387 		n_dma_bufs = 3;
388 
389 	cam->nbufs = 0;
390 	for (i = 0; i < n_dma_bufs; i++) {
391 		cam->dma_bufs[i] = dma_alloc_coherent(cam->dev,
392 				cam->dma_buf_size, cam->dma_handles + i,
393 				GFP_KERNEL);
394 		if (cam->dma_bufs[i] == NULL) {
395 			cam_warn(cam, "Failed to allocate DMA buffer\n");
396 			break;
397 		}
398 		(cam->nbufs)++;
399 	}
400 
401 	switch (cam->nbufs) {
402 	case 1:
403 		dma_free_coherent(cam->dev, cam->dma_buf_size,
404 				cam->dma_bufs[0], cam->dma_handles[0]);
405 		cam->nbufs = 0;
406 	case 0:
407 		cam_err(cam, "Insufficient DMA buffers, cannot operate\n");
408 		return -ENOMEM;
409 
410 	case 2:
411 		if (n_dma_bufs > 2)
412 			cam_warn(cam, "Will limp along with only 2 buffers\n");
413 		break;
414 	}
415 	return 0;
416 }
417 
mcam_free_dma_bufs(struct mcam_camera * cam)418 static void mcam_free_dma_bufs(struct mcam_camera *cam)
419 {
420 	int i;
421 
422 	for (i = 0; i < cam->nbufs; i++) {
423 		dma_free_coherent(cam->dev, cam->dma_buf_size,
424 				cam->dma_bufs[i], cam->dma_handles[i]);
425 		cam->dma_bufs[i] = NULL;
426 	}
427 	cam->nbufs = 0;
428 }
429 
430 
431 /*
432  * Set up DMA buffers when operating in vmalloc mode
433  */
mcam_ctlr_dma_vmalloc(struct mcam_camera * cam)434 static void mcam_ctlr_dma_vmalloc(struct mcam_camera *cam)
435 {
436 	/*
437 	 * Store the first two YUV buffers. Then either
438 	 * set the third if it exists, or tell the controller
439 	 * to just use two.
440 	 */
441 	mcam_write_yuv_bases(cam, 0, cam->dma_handles[0]);
442 	mcam_write_yuv_bases(cam, 1, cam->dma_handles[1]);
443 	if (cam->nbufs > 2) {
444 		mcam_write_yuv_bases(cam, 2, cam->dma_handles[2]);
445 		mcam_reg_clear_bit(cam, REG_CTRL1, C1_TWOBUFS);
446 	} else
447 		mcam_reg_set_bit(cam, REG_CTRL1, C1_TWOBUFS);
448 	if (cam->chip_id == MCAM_CAFE)
449 		mcam_reg_write(cam, REG_UBAR, 0); /* 32 bits only */
450 }
451 
452 /*
453  * Copy data out to user space in the vmalloc case
454  */
mcam_frame_tasklet(unsigned long data)455 static void mcam_frame_tasklet(unsigned long data)
456 {
457 	struct mcam_camera *cam = (struct mcam_camera *) data;
458 	int i;
459 	unsigned long flags;
460 	struct mcam_vb_buffer *buf;
461 
462 	spin_lock_irqsave(&cam->dev_lock, flags);
463 	for (i = 0; i < cam->nbufs; i++) {
464 		int bufno = cam->next_buf;
465 
466 		if (cam->state != S_STREAMING || bufno < 0)
467 			break;  /* I/O got stopped */
468 		if (++(cam->next_buf) >= cam->nbufs)
469 			cam->next_buf = 0;
470 		if (!test_bit(bufno, &cam->flags))
471 			continue;
472 		if (list_empty(&cam->buffers)) {
473 			cam->frame_state.singles++;
474 			break;  /* Leave it valid, hope for better later */
475 		}
476 		cam->frame_state.delivered++;
477 		clear_bit(bufno, &cam->flags);
478 		buf = list_first_entry(&cam->buffers, struct mcam_vb_buffer,
479 				queue);
480 		list_del_init(&buf->queue);
481 		/*
482 		 * Drop the lock during the big copy.  This *should* be safe...
483 		 */
484 		spin_unlock_irqrestore(&cam->dev_lock, flags);
485 		memcpy(vb2_plane_vaddr(&buf->vb_buf.vb2_buf, 0),
486 				cam->dma_bufs[bufno],
487 				cam->pix_format.sizeimage);
488 		mcam_buffer_done(cam, bufno, &buf->vb_buf);
489 		spin_lock_irqsave(&cam->dev_lock, flags);
490 	}
491 	spin_unlock_irqrestore(&cam->dev_lock, flags);
492 }
493 
494 
495 /*
496  * Make sure our allocated buffers are up to the task.
497  */
mcam_check_dma_buffers(struct mcam_camera * cam)498 static int mcam_check_dma_buffers(struct mcam_camera *cam)
499 {
500 	if (cam->nbufs > 0 && cam->dma_buf_size < cam->pix_format.sizeimage)
501 			mcam_free_dma_bufs(cam);
502 	if (cam->nbufs == 0)
503 		return mcam_alloc_dma_bufs(cam, 0);
504 	return 0;
505 }
506 
mcam_vmalloc_done(struct mcam_camera * cam,int frame)507 static void mcam_vmalloc_done(struct mcam_camera *cam, int frame)
508 {
509 	tasklet_schedule(&cam->s_tasklet);
510 }
511 
512 #else /* MCAM_MODE_VMALLOC */
513 
mcam_alloc_dma_bufs(struct mcam_camera * cam,int loadtime)514 static inline int mcam_alloc_dma_bufs(struct mcam_camera *cam, int loadtime)
515 {
516 	return 0;
517 }
518 
mcam_free_dma_bufs(struct mcam_camera * cam)519 static inline void mcam_free_dma_bufs(struct mcam_camera *cam)
520 {
521 	return;
522 }
523 
mcam_check_dma_buffers(struct mcam_camera * cam)524 static inline int mcam_check_dma_buffers(struct mcam_camera *cam)
525 {
526 	return 0;
527 }
528 
529 
530 
531 #endif /* MCAM_MODE_VMALLOC */
532 
533 
534 #ifdef MCAM_MODE_DMA_CONTIG
535 /* ---------------------------------------------------------------------- */
536 /*
537  * DMA-contiguous code.
538  */
539 
540 /*
541  * Set up a contiguous buffer for the given frame.  Here also is where
542  * the underrun strategy is set: if there is no buffer available, reuse
543  * the buffer from the other BAR and set the CF_SINGLE_BUFFER flag to
544  * keep the interrupt handler from giving that buffer back to user
545  * space.  In this way, we always have a buffer to DMA to and don't
546  * have to try to play games stopping and restarting the controller.
547  */
mcam_set_contig_buffer(struct mcam_camera * cam,int frame)548 static void mcam_set_contig_buffer(struct mcam_camera *cam, int frame)
549 {
550 	struct mcam_vb_buffer *buf;
551 	dma_addr_t dma_handle;
552 	struct vb2_v4l2_buffer *vb;
553 
554 	/*
555 	 * If there are no available buffers, go into single mode
556 	 */
557 	if (list_empty(&cam->buffers)) {
558 		buf = cam->vb_bufs[frame ^ 0x1];
559 		set_bit(CF_SINGLE_BUFFER, &cam->flags);
560 		cam->frame_state.singles++;
561 	} else {
562 		/*
563 		 * OK, we have a buffer we can use.
564 		 */
565 		buf = list_first_entry(&cam->buffers, struct mcam_vb_buffer,
566 					queue);
567 		list_del_init(&buf->queue);
568 		clear_bit(CF_SINGLE_BUFFER, &cam->flags);
569 	}
570 
571 	cam->vb_bufs[frame] = buf;
572 	vb = &buf->vb_buf;
573 
574 	dma_handle = vb2_dma_contig_plane_dma_addr(&vb->vb2_buf, 0);
575 	mcam_write_yuv_bases(cam, frame, dma_handle);
576 }
577 
578 /*
579  * Initial B_DMA_contig setup.
580  */
mcam_ctlr_dma_contig(struct mcam_camera * cam)581 static void mcam_ctlr_dma_contig(struct mcam_camera *cam)
582 {
583 	mcam_reg_set_bit(cam, REG_CTRL1, C1_TWOBUFS);
584 	cam->nbufs = 2;
585 	mcam_set_contig_buffer(cam, 0);
586 	mcam_set_contig_buffer(cam, 1);
587 }
588 
589 /*
590  * Frame completion handling.
591  */
mcam_dma_contig_done(struct mcam_camera * cam,int frame)592 static void mcam_dma_contig_done(struct mcam_camera *cam, int frame)
593 {
594 	struct mcam_vb_buffer *buf = cam->vb_bufs[frame];
595 
596 	if (!test_bit(CF_SINGLE_BUFFER, &cam->flags)) {
597 		cam->frame_state.delivered++;
598 		cam->vb_bufs[frame] = NULL;
599 		mcam_buffer_done(cam, frame, &buf->vb_buf);
600 	}
601 	mcam_set_contig_buffer(cam, frame);
602 }
603 
604 #endif /* MCAM_MODE_DMA_CONTIG */
605 
606 #ifdef MCAM_MODE_DMA_SG
607 /* ---------------------------------------------------------------------- */
608 /*
609  * Scatter/gather-specific code.
610  */
611 
612 /*
613  * Set up the next buffer for S/G I/O; caller should be sure that
614  * the controller is stopped and a buffer is available.
615  */
mcam_sg_next_buffer(struct mcam_camera * cam)616 static void mcam_sg_next_buffer(struct mcam_camera *cam)
617 {
618 	struct mcam_vb_buffer *buf;
619 
620 	buf = list_first_entry(&cam->buffers, struct mcam_vb_buffer, queue);
621 	list_del_init(&buf->queue);
622 	/*
623 	 * Very Bad Not Good Things happen if you don't clear
624 	 * C1_DESC_ENA before making any descriptor changes.
625 	 */
626 	mcam_reg_clear_bit(cam, REG_CTRL1, C1_DESC_ENA);
627 	mcam_reg_write(cam, REG_DMA_DESC_Y, buf->dma_desc_pa);
628 	mcam_reg_write(cam, REG_DESC_LEN_Y,
629 			buf->dma_desc_nent*sizeof(struct mcam_dma_desc));
630 	mcam_reg_write(cam, REG_DESC_LEN_U, 0);
631 	mcam_reg_write(cam, REG_DESC_LEN_V, 0);
632 	mcam_reg_set_bit(cam, REG_CTRL1, C1_DESC_ENA);
633 	cam->vb_bufs[0] = buf;
634 }
635 
636 /*
637  * Initial B_DMA_sg setup
638  */
mcam_ctlr_dma_sg(struct mcam_camera * cam)639 static void mcam_ctlr_dma_sg(struct mcam_camera *cam)
640 {
641 	/*
642 	 * The list-empty condition can hit us at resume time
643 	 * if the buffer list was empty when the system was suspended.
644 	 */
645 	if (list_empty(&cam->buffers)) {
646 		set_bit(CF_SG_RESTART, &cam->flags);
647 		return;
648 	}
649 
650 	mcam_reg_clear_bit(cam, REG_CTRL1, C1_DESC_3WORD);
651 	mcam_sg_next_buffer(cam);
652 	cam->nbufs = 3;
653 }
654 
655 
656 /*
657  * Frame completion with S/G is trickier.  We can't muck with
658  * a descriptor chain on the fly, since the controller buffers it
659  * internally.  So we have to actually stop and restart; Marvell
660  * says this is the way to do it.
661  *
662  * Of course, stopping is easier said than done; experience shows
663  * that the controller can start a frame *after* C0_ENABLE has been
664  * cleared.  So when running in S/G mode, the controller is "stopped"
665  * on receipt of the start-of-frame interrupt.  That means we can
666  * safely change the DMA descriptor array here and restart things
667  * (assuming there's another buffer waiting to go).
668  */
mcam_dma_sg_done(struct mcam_camera * cam,int frame)669 static void mcam_dma_sg_done(struct mcam_camera *cam, int frame)
670 {
671 	struct mcam_vb_buffer *buf = cam->vb_bufs[0];
672 
673 	/*
674 	 * If we're no longer supposed to be streaming, don't do anything.
675 	 */
676 	if (cam->state != S_STREAMING)
677 		return;
678 	/*
679 	 * If we have another buffer available, put it in and
680 	 * restart the engine.
681 	 */
682 	if (!list_empty(&cam->buffers)) {
683 		mcam_sg_next_buffer(cam);
684 		mcam_ctlr_start(cam);
685 	/*
686 	 * Otherwise set CF_SG_RESTART and the controller will
687 	 * be restarted once another buffer shows up.
688 	 */
689 	} else {
690 		set_bit(CF_SG_RESTART, &cam->flags);
691 		cam->frame_state.singles++;
692 		cam->vb_bufs[0] = NULL;
693 	}
694 	/*
695 	 * Now we can give the completed frame back to user space.
696 	 */
697 	cam->frame_state.delivered++;
698 	mcam_buffer_done(cam, frame, &buf->vb_buf);
699 }
700 
701 
702 /*
703  * Scatter/gather mode requires stopping the controller between
704  * frames so we can put in a new DMA descriptor array.  If no new
705  * buffer exists at frame completion, the controller is left stopped;
706  * this function is charged with gettig things going again.
707  */
mcam_sg_restart(struct mcam_camera * cam)708 static void mcam_sg_restart(struct mcam_camera *cam)
709 {
710 	mcam_ctlr_dma_sg(cam);
711 	mcam_ctlr_start(cam);
712 	clear_bit(CF_SG_RESTART, &cam->flags);
713 }
714 
715 #else /* MCAM_MODE_DMA_SG */
716 
mcam_sg_restart(struct mcam_camera * cam)717 static inline void mcam_sg_restart(struct mcam_camera *cam)
718 {
719 	return;
720 }
721 
722 #endif /* MCAM_MODE_DMA_SG */
723 
724 /* ---------------------------------------------------------------------- */
725 /*
726  * Buffer-mode-independent controller code.
727  */
728 
729 /*
730  * Image format setup
731  */
mcam_ctlr_image(struct mcam_camera * cam)732 static void mcam_ctlr_image(struct mcam_camera *cam)
733 {
734 	struct v4l2_pix_format *fmt = &cam->pix_format;
735 	u32 widthy = 0, widthuv = 0, imgsz_h, imgsz_w;
736 
737 	cam_dbg(cam, "camera: bytesperline = %d; height = %d\n",
738 		fmt->bytesperline, fmt->sizeimage / fmt->bytesperline);
739 	imgsz_h = (fmt->height << IMGSZ_V_SHIFT) & IMGSZ_V_MASK;
740 	imgsz_w = (fmt->width * 2) & IMGSZ_H_MASK;
741 
742 	switch (fmt->pixelformat) {
743 	case V4L2_PIX_FMT_YUYV:
744 	case V4L2_PIX_FMT_YVYU:
745 		widthy = fmt->width * 2;
746 		widthuv = 0;
747 		break;
748 	case V4L2_PIX_FMT_YUV420:
749 	case V4L2_PIX_FMT_YVU420:
750 		widthy = fmt->width;
751 		widthuv = fmt->width / 2;
752 		break;
753 	default:
754 		widthy = fmt->bytesperline;
755 		widthuv = 0;
756 		break;
757 	}
758 
759 	mcam_reg_write_mask(cam, REG_IMGPITCH, widthuv << 16 | widthy,
760 			IMGP_YP_MASK | IMGP_UVP_MASK);
761 	mcam_reg_write(cam, REG_IMGSIZE, imgsz_h | imgsz_w);
762 	mcam_reg_write(cam, REG_IMGOFFSET, 0x0);
763 
764 	/*
765 	 * Tell the controller about the image format we are using.
766 	 */
767 	switch (fmt->pixelformat) {
768 	case V4L2_PIX_FMT_YUV420:
769 	case V4L2_PIX_FMT_YVU420:
770 		mcam_reg_write_mask(cam, REG_CTRL0,
771 			C0_DF_YUV | C0_YUV_420PL | C0_YUVE_VYUY, C0_DF_MASK);
772 		break;
773 	case V4L2_PIX_FMT_YUYV:
774 		mcam_reg_write_mask(cam, REG_CTRL0,
775 			C0_DF_YUV | C0_YUV_PACKED | C0_YUVE_NOSWAP, C0_DF_MASK);
776 		break;
777 	case V4L2_PIX_FMT_YVYU:
778 		mcam_reg_write_mask(cam, REG_CTRL0,
779 			C0_DF_YUV | C0_YUV_PACKED | C0_YUVE_SWAP24, C0_DF_MASK);
780 		break;
781 	case V4L2_PIX_FMT_XRGB444:
782 		mcam_reg_write_mask(cam, REG_CTRL0,
783 			C0_DF_RGB | C0_RGBF_444 | C0_RGB4_XBGR, C0_DF_MASK);
784 		break;
785 	case V4L2_PIX_FMT_RGB565:
786 		mcam_reg_write_mask(cam, REG_CTRL0,
787 			C0_DF_RGB | C0_RGBF_565 | C0_RGB5_BGGR, C0_DF_MASK);
788 		break;
789 	case V4L2_PIX_FMT_SBGGR8:
790 		mcam_reg_write_mask(cam, REG_CTRL0,
791 			C0_DF_RGB | C0_RGB5_GRBG, C0_DF_MASK);
792 		break;
793 	default:
794 		cam_err(cam, "camera: unknown format: %#x\n", fmt->pixelformat);
795 		break;
796 	}
797 
798 	/*
799 	 * Make sure it knows we want to use hsync/vsync.
800 	 */
801 	mcam_reg_write_mask(cam, REG_CTRL0, C0_SIF_HVSYNC, C0_SIFM_MASK);
802 	/*
803 	 * This field controls the generation of EOF(DVP only)
804 	 */
805 	if (cam->bus_type != V4L2_MBUS_CSI2)
806 		mcam_reg_set_bit(cam, REG_CTRL0,
807 				C0_EOF_VSYNC | C0_VEDGE_CTRL);
808 }
809 
810 
811 /*
812  * Configure the controller for operation; caller holds the
813  * device mutex.
814  */
mcam_ctlr_configure(struct mcam_camera * cam)815 static int mcam_ctlr_configure(struct mcam_camera *cam)
816 {
817 	unsigned long flags;
818 
819 	spin_lock_irqsave(&cam->dev_lock, flags);
820 	clear_bit(CF_SG_RESTART, &cam->flags);
821 	cam->dma_setup(cam);
822 	mcam_ctlr_image(cam);
823 	mcam_set_config_needed(cam, 0);
824 	spin_unlock_irqrestore(&cam->dev_lock, flags);
825 	return 0;
826 }
827 
mcam_ctlr_irq_enable(struct mcam_camera * cam)828 static void mcam_ctlr_irq_enable(struct mcam_camera *cam)
829 {
830 	/*
831 	 * Clear any pending interrupts, since we do not
832 	 * expect to have I/O active prior to enabling.
833 	 */
834 	mcam_reg_write(cam, REG_IRQSTAT, FRAMEIRQS);
835 	mcam_reg_set_bit(cam, REG_IRQMASK, FRAMEIRQS);
836 }
837 
mcam_ctlr_irq_disable(struct mcam_camera * cam)838 static void mcam_ctlr_irq_disable(struct mcam_camera *cam)
839 {
840 	mcam_reg_clear_bit(cam, REG_IRQMASK, FRAMEIRQS);
841 }
842 
843 
844 
mcam_ctlr_init(struct mcam_camera * cam)845 static void mcam_ctlr_init(struct mcam_camera *cam)
846 {
847 	unsigned long flags;
848 
849 	spin_lock_irqsave(&cam->dev_lock, flags);
850 	/*
851 	 * Make sure it's not powered down.
852 	 */
853 	mcam_reg_clear_bit(cam, REG_CTRL1, C1_PWRDWN);
854 	/*
855 	 * Turn off the enable bit.  It sure should be off anyway,
856 	 * but it's good to be sure.
857 	 */
858 	mcam_reg_clear_bit(cam, REG_CTRL0, C0_ENABLE);
859 	/*
860 	 * Clock the sensor appropriately.  Controller clock should
861 	 * be 48MHz, sensor "typical" value is half that.
862 	 */
863 	mcam_reg_write_mask(cam, REG_CLKCTRL, 2, CLK_DIV_MASK);
864 	spin_unlock_irqrestore(&cam->dev_lock, flags);
865 }
866 
867 
868 /*
869  * Stop the controller, and don't return until we're really sure that no
870  * further DMA is going on.
871  */
mcam_ctlr_stop_dma(struct mcam_camera * cam)872 static void mcam_ctlr_stop_dma(struct mcam_camera *cam)
873 {
874 	unsigned long flags;
875 
876 	/*
877 	 * Theory: stop the camera controller (whether it is operating
878 	 * or not).  Delay briefly just in case we race with the SOF
879 	 * interrupt, then wait until no DMA is active.
880 	 */
881 	spin_lock_irqsave(&cam->dev_lock, flags);
882 	clear_bit(CF_SG_RESTART, &cam->flags);
883 	mcam_ctlr_stop(cam);
884 	cam->state = S_IDLE;
885 	spin_unlock_irqrestore(&cam->dev_lock, flags);
886 	/*
887 	 * This is a brutally long sleep, but experience shows that
888 	 * it can take the controller a while to get the message that
889 	 * it needs to stop grabbing frames.  In particular, we can
890 	 * sometimes (on mmp) get a frame at the end WITHOUT the
891 	 * start-of-frame indication.
892 	 */
893 	msleep(150);
894 	if (test_bit(CF_DMA_ACTIVE, &cam->flags))
895 		cam_err(cam, "Timeout waiting for DMA to end\n");
896 		/* This would be bad news - what now? */
897 	spin_lock_irqsave(&cam->dev_lock, flags);
898 	mcam_ctlr_irq_disable(cam);
899 	spin_unlock_irqrestore(&cam->dev_lock, flags);
900 }
901 
902 /*
903  * Power up and down.
904  */
mcam_ctlr_power_up(struct mcam_camera * cam)905 static int mcam_ctlr_power_up(struct mcam_camera *cam)
906 {
907 	unsigned long flags;
908 	int ret;
909 
910 	spin_lock_irqsave(&cam->dev_lock, flags);
911 	ret = cam->plat_power_up(cam);
912 	if (ret) {
913 		spin_unlock_irqrestore(&cam->dev_lock, flags);
914 		return ret;
915 	}
916 	mcam_reg_clear_bit(cam, REG_CTRL1, C1_PWRDWN);
917 	spin_unlock_irqrestore(&cam->dev_lock, flags);
918 	msleep(5); /* Just to be sure */
919 	return 0;
920 }
921 
mcam_ctlr_power_down(struct mcam_camera * cam)922 static void mcam_ctlr_power_down(struct mcam_camera *cam)
923 {
924 	unsigned long flags;
925 
926 	spin_lock_irqsave(&cam->dev_lock, flags);
927 	/*
928 	 * School of hard knocks department: be sure we do any register
929 	 * twiddling on the controller *before* calling the platform
930 	 * power down routine.
931 	 */
932 	mcam_reg_set_bit(cam, REG_CTRL1, C1_PWRDWN);
933 	cam->plat_power_down(cam);
934 	spin_unlock_irqrestore(&cam->dev_lock, flags);
935 }
936 
937 /* -------------------------------------------------------------------- */
938 /*
939  * Communications with the sensor.
940  */
941 
__mcam_cam_reset(struct mcam_camera * cam)942 static int __mcam_cam_reset(struct mcam_camera *cam)
943 {
944 	return sensor_call(cam, core, reset, 0);
945 }
946 
947 /*
948  * We have found the sensor on the i2c.  Let's try to have a
949  * conversation.
950  */
mcam_cam_init(struct mcam_camera * cam)951 static int mcam_cam_init(struct mcam_camera *cam)
952 {
953 	int ret;
954 
955 	if (cam->state != S_NOTREADY)
956 		cam_warn(cam, "Cam init with device in funky state %d",
957 				cam->state);
958 	ret = __mcam_cam_reset(cam);
959 	/* Get/set parameters? */
960 	cam->state = S_IDLE;
961 	mcam_ctlr_power_down(cam);
962 	return ret;
963 }
964 
965 /*
966  * Configure the sensor to match the parameters we have.  Caller should
967  * hold s_mutex
968  */
mcam_cam_set_flip(struct mcam_camera * cam)969 static int mcam_cam_set_flip(struct mcam_camera *cam)
970 {
971 	struct v4l2_control ctrl;
972 
973 	memset(&ctrl, 0, sizeof(ctrl));
974 	ctrl.id = V4L2_CID_VFLIP;
975 	ctrl.value = flip;
976 	return sensor_call(cam, core, s_ctrl, &ctrl);
977 }
978 
979 
mcam_cam_configure(struct mcam_camera * cam)980 static int mcam_cam_configure(struct mcam_camera *cam)
981 {
982 	struct v4l2_subdev_format format = {
983 		.which = V4L2_SUBDEV_FORMAT_ACTIVE,
984 	};
985 	int ret;
986 
987 	v4l2_fill_mbus_format(&format.format, &cam->pix_format, cam->mbus_code);
988 	ret = sensor_call(cam, core, init, 0);
989 	if (ret == 0)
990 		ret = sensor_call(cam, pad, set_fmt, NULL, &format);
991 	/*
992 	 * OV7670 does weird things if flip is set *before* format...
993 	 */
994 	ret += mcam_cam_set_flip(cam);
995 	return ret;
996 }
997 
998 /*
999  * Get everything ready, and start grabbing frames.
1000  */
mcam_read_setup(struct mcam_camera * cam)1001 static int mcam_read_setup(struct mcam_camera *cam)
1002 {
1003 	int ret;
1004 	unsigned long flags;
1005 
1006 	/*
1007 	 * Configuration.  If we still don't have DMA buffers,
1008 	 * make one last, desperate attempt.
1009 	 */
1010 	if (cam->buffer_mode == B_vmalloc && cam->nbufs == 0 &&
1011 			mcam_alloc_dma_bufs(cam, 0))
1012 		return -ENOMEM;
1013 
1014 	if (mcam_needs_config(cam)) {
1015 		mcam_cam_configure(cam);
1016 		ret = mcam_ctlr_configure(cam);
1017 		if (ret)
1018 			return ret;
1019 	}
1020 
1021 	/*
1022 	 * Turn it loose.
1023 	 */
1024 	spin_lock_irqsave(&cam->dev_lock, flags);
1025 	clear_bit(CF_DMA_ACTIVE, &cam->flags);
1026 	mcam_reset_buffers(cam);
1027 	/*
1028 	 * Update CSI2_DPHY value
1029 	 */
1030 	if (cam->calc_dphy)
1031 		cam->calc_dphy(cam);
1032 	cam_dbg(cam, "camera: DPHY sets: dphy3=0x%x, dphy5=0x%x, dphy6=0x%x\n",
1033 			cam->dphy[0], cam->dphy[1], cam->dphy[2]);
1034 	if (cam->bus_type == V4L2_MBUS_CSI2)
1035 		mcam_enable_mipi(cam);
1036 	else
1037 		mcam_disable_mipi(cam);
1038 	mcam_ctlr_irq_enable(cam);
1039 	cam->state = S_STREAMING;
1040 	if (!test_bit(CF_SG_RESTART, &cam->flags))
1041 		mcam_ctlr_start(cam);
1042 	spin_unlock_irqrestore(&cam->dev_lock, flags);
1043 	return 0;
1044 }
1045 
1046 /* ----------------------------------------------------------------------- */
1047 /*
1048  * Videobuf2 interface code.
1049  */
1050 
mcam_vb_queue_setup(struct vb2_queue * vq,const void * parg,unsigned int * nbufs,unsigned int * num_planes,unsigned int sizes[],void * alloc_ctxs[])1051 static int mcam_vb_queue_setup(struct vb2_queue *vq,
1052 		const void *parg, unsigned int *nbufs,
1053 		unsigned int *num_planes, unsigned int sizes[],
1054 		void *alloc_ctxs[])
1055 {
1056 	const struct v4l2_format *fmt = parg;
1057 	struct mcam_camera *cam = vb2_get_drv_priv(vq);
1058 	int minbufs = (cam->buffer_mode == B_DMA_contig) ? 3 : 2;
1059 
1060 	if (fmt && fmt->fmt.pix.sizeimage < cam->pix_format.sizeimage)
1061 		return -EINVAL;
1062 	sizes[0] = fmt ? fmt->fmt.pix.sizeimage : cam->pix_format.sizeimage;
1063 	*num_planes = 1; /* Someday we have to support planar formats... */
1064 	if (*nbufs < minbufs)
1065 		*nbufs = minbufs;
1066 	if (cam->buffer_mode == B_DMA_contig)
1067 		alloc_ctxs[0] = cam->vb_alloc_ctx;
1068 	else if (cam->buffer_mode == B_DMA_sg)
1069 		alloc_ctxs[0] = cam->vb_alloc_ctx_sg;
1070 	return 0;
1071 }
1072 
1073 
mcam_vb_buf_queue(struct vb2_buffer * vb)1074 static void mcam_vb_buf_queue(struct vb2_buffer *vb)
1075 {
1076 	struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
1077 	struct mcam_vb_buffer *mvb = vb_to_mvb(vbuf);
1078 	struct mcam_camera *cam = vb2_get_drv_priv(vb->vb2_queue);
1079 	unsigned long flags;
1080 	int start;
1081 
1082 	spin_lock_irqsave(&cam->dev_lock, flags);
1083 	start = (cam->state == S_BUFWAIT) && !list_empty(&cam->buffers);
1084 	list_add(&mvb->queue, &cam->buffers);
1085 	if (cam->state == S_STREAMING && test_bit(CF_SG_RESTART, &cam->flags))
1086 		mcam_sg_restart(cam);
1087 	spin_unlock_irqrestore(&cam->dev_lock, flags);
1088 	if (start)
1089 		mcam_read_setup(cam);
1090 }
1091 
mcam_vb_requeue_bufs(struct vb2_queue * vq,enum vb2_buffer_state state)1092 static void mcam_vb_requeue_bufs(struct vb2_queue *vq,
1093 				 enum vb2_buffer_state state)
1094 {
1095 	struct mcam_camera *cam = vb2_get_drv_priv(vq);
1096 	struct mcam_vb_buffer *buf, *node;
1097 	unsigned long flags;
1098 	unsigned i;
1099 
1100 	spin_lock_irqsave(&cam->dev_lock, flags);
1101 	list_for_each_entry_safe(buf, node, &cam->buffers, queue) {
1102 		vb2_buffer_done(&buf->vb_buf.vb2_buf, state);
1103 		list_del(&buf->queue);
1104 	}
1105 	for (i = 0; i < MAX_DMA_BUFS; i++) {
1106 		buf = cam->vb_bufs[i];
1107 
1108 		if (buf) {
1109 			vb2_buffer_done(&buf->vb_buf.vb2_buf, state);
1110 			cam->vb_bufs[i] = NULL;
1111 		}
1112 	}
1113 	spin_unlock_irqrestore(&cam->dev_lock, flags);
1114 }
1115 
1116 /*
1117  * These need to be called with the mutex held from vb2
1118  */
mcam_vb_start_streaming(struct vb2_queue * vq,unsigned int count)1119 static int mcam_vb_start_streaming(struct vb2_queue *vq, unsigned int count)
1120 {
1121 	struct mcam_camera *cam = vb2_get_drv_priv(vq);
1122 	unsigned int frame;
1123 	int ret;
1124 
1125 	if (cam->state != S_IDLE) {
1126 		mcam_vb_requeue_bufs(vq, VB2_BUF_STATE_QUEUED);
1127 		return -EINVAL;
1128 	}
1129 	cam->frame_state.frames = 0;
1130 	cam->frame_state.singles = 0;
1131 	cam->frame_state.delivered = 0;
1132 	cam->sequence = 0;
1133 	/*
1134 	 * Videobuf2 sneakily hoards all the buffers and won't
1135 	 * give them to us until *after* streaming starts.  But
1136 	 * we can't actually start streaming until we have a
1137 	 * destination.  So go into a wait state and hope they
1138 	 * give us buffers soon.
1139 	 */
1140 	if (cam->buffer_mode != B_vmalloc && list_empty(&cam->buffers)) {
1141 		cam->state = S_BUFWAIT;
1142 		return 0;
1143 	}
1144 
1145 	/*
1146 	 * Ensure clear the left over frame flags
1147 	 * before every really start streaming
1148 	 */
1149 	for (frame = 0; frame < cam->nbufs; frame++)
1150 		clear_bit(CF_FRAME_SOF0 + frame, &cam->flags);
1151 
1152 	ret = mcam_read_setup(cam);
1153 	if (ret)
1154 		mcam_vb_requeue_bufs(vq, VB2_BUF_STATE_QUEUED);
1155 	return ret;
1156 }
1157 
mcam_vb_stop_streaming(struct vb2_queue * vq)1158 static void mcam_vb_stop_streaming(struct vb2_queue *vq)
1159 {
1160 	struct mcam_camera *cam = vb2_get_drv_priv(vq);
1161 
1162 	cam_dbg(cam, "stop_streaming: %d frames, %d singles, %d delivered\n",
1163 			cam->frame_state.frames, cam->frame_state.singles,
1164 			cam->frame_state.delivered);
1165 	if (cam->state == S_BUFWAIT) {
1166 		/* They never gave us buffers */
1167 		cam->state = S_IDLE;
1168 		return;
1169 	}
1170 	if (cam->state != S_STREAMING)
1171 		return;
1172 	mcam_ctlr_stop_dma(cam);
1173 	/*
1174 	 * Reset the CCIC PHY after stopping streaming,
1175 	 * otherwise, the CCIC may be unstable.
1176 	 */
1177 	if (cam->ctlr_reset)
1178 		cam->ctlr_reset(cam);
1179 	/*
1180 	 * VB2 reclaims the buffers, so we need to forget
1181 	 * about them.
1182 	 */
1183 	mcam_vb_requeue_bufs(vq, VB2_BUF_STATE_ERROR);
1184 }
1185 
1186 
1187 static const struct vb2_ops mcam_vb2_ops = {
1188 	.queue_setup		= mcam_vb_queue_setup,
1189 	.buf_queue		= mcam_vb_buf_queue,
1190 	.start_streaming	= mcam_vb_start_streaming,
1191 	.stop_streaming		= mcam_vb_stop_streaming,
1192 	.wait_prepare		= vb2_ops_wait_prepare,
1193 	.wait_finish		= vb2_ops_wait_finish,
1194 };
1195 
1196 
1197 #ifdef MCAM_MODE_DMA_SG
1198 /*
1199  * Scatter/gather mode uses all of the above functions plus a
1200  * few extras to deal with DMA mapping.
1201  */
mcam_vb_sg_buf_init(struct vb2_buffer * vb)1202 static int mcam_vb_sg_buf_init(struct vb2_buffer *vb)
1203 {
1204 	struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
1205 	struct mcam_vb_buffer *mvb = vb_to_mvb(vbuf);
1206 	struct mcam_camera *cam = vb2_get_drv_priv(vb->vb2_queue);
1207 	int ndesc = cam->pix_format.sizeimage/PAGE_SIZE + 1;
1208 
1209 	mvb->dma_desc = dma_alloc_coherent(cam->dev,
1210 			ndesc * sizeof(struct mcam_dma_desc),
1211 			&mvb->dma_desc_pa, GFP_KERNEL);
1212 	if (mvb->dma_desc == NULL) {
1213 		cam_err(cam, "Unable to get DMA descriptor array\n");
1214 		return -ENOMEM;
1215 	}
1216 	return 0;
1217 }
1218 
mcam_vb_sg_buf_prepare(struct vb2_buffer * vb)1219 static int mcam_vb_sg_buf_prepare(struct vb2_buffer *vb)
1220 {
1221 	struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
1222 	struct mcam_vb_buffer *mvb = vb_to_mvb(vbuf);
1223 	struct sg_table *sg_table = vb2_dma_sg_plane_desc(vb, 0);
1224 	struct mcam_dma_desc *desc = mvb->dma_desc;
1225 	struct scatterlist *sg;
1226 	int i;
1227 
1228 	for_each_sg(sg_table->sgl, sg, sg_table->nents, i) {
1229 		desc->dma_addr = sg_dma_address(sg);
1230 		desc->segment_len = sg_dma_len(sg);
1231 		desc++;
1232 	}
1233 	return 0;
1234 }
1235 
mcam_vb_sg_buf_cleanup(struct vb2_buffer * vb)1236 static void mcam_vb_sg_buf_cleanup(struct vb2_buffer *vb)
1237 {
1238 	struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
1239 	struct mcam_camera *cam = vb2_get_drv_priv(vb->vb2_queue);
1240 	struct mcam_vb_buffer *mvb = vb_to_mvb(vbuf);
1241 	int ndesc = cam->pix_format.sizeimage/PAGE_SIZE + 1;
1242 
1243 	dma_free_coherent(cam->dev, ndesc * sizeof(struct mcam_dma_desc),
1244 			mvb->dma_desc, mvb->dma_desc_pa);
1245 }
1246 
1247 
1248 static const struct vb2_ops mcam_vb2_sg_ops = {
1249 	.queue_setup		= mcam_vb_queue_setup,
1250 	.buf_init		= mcam_vb_sg_buf_init,
1251 	.buf_prepare		= mcam_vb_sg_buf_prepare,
1252 	.buf_queue		= mcam_vb_buf_queue,
1253 	.buf_cleanup		= mcam_vb_sg_buf_cleanup,
1254 	.start_streaming	= mcam_vb_start_streaming,
1255 	.stop_streaming		= mcam_vb_stop_streaming,
1256 	.wait_prepare		= vb2_ops_wait_prepare,
1257 	.wait_finish		= vb2_ops_wait_finish,
1258 };
1259 
1260 #endif /* MCAM_MODE_DMA_SG */
1261 
mcam_setup_vb2(struct mcam_camera * cam)1262 static int mcam_setup_vb2(struct mcam_camera *cam)
1263 {
1264 	struct vb2_queue *vq = &cam->vb_queue;
1265 
1266 	memset(vq, 0, sizeof(*vq));
1267 	vq->type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
1268 	vq->drv_priv = cam;
1269 	vq->lock = &cam->s_mutex;
1270 	vq->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC;
1271 	vq->io_modes = VB2_MMAP | VB2_USERPTR | VB2_DMABUF | VB2_READ;
1272 	vq->buf_struct_size = sizeof(struct mcam_vb_buffer);
1273 	INIT_LIST_HEAD(&cam->buffers);
1274 	switch (cam->buffer_mode) {
1275 	case B_DMA_contig:
1276 #ifdef MCAM_MODE_DMA_CONTIG
1277 		vq->ops = &mcam_vb2_ops;
1278 		vq->mem_ops = &vb2_dma_contig_memops;
1279 		cam->dma_setup = mcam_ctlr_dma_contig;
1280 		cam->frame_complete = mcam_dma_contig_done;
1281 		cam->vb_alloc_ctx = vb2_dma_contig_init_ctx(cam->dev);
1282 		if (IS_ERR(cam->vb_alloc_ctx))
1283 			return PTR_ERR(cam->vb_alloc_ctx);
1284 #endif
1285 		break;
1286 	case B_DMA_sg:
1287 #ifdef MCAM_MODE_DMA_SG
1288 		vq->ops = &mcam_vb2_sg_ops;
1289 		vq->mem_ops = &vb2_dma_sg_memops;
1290 		cam->dma_setup = mcam_ctlr_dma_sg;
1291 		cam->frame_complete = mcam_dma_sg_done;
1292 		cam->vb_alloc_ctx_sg = vb2_dma_sg_init_ctx(cam->dev);
1293 		if (IS_ERR(cam->vb_alloc_ctx_sg))
1294 			return PTR_ERR(cam->vb_alloc_ctx_sg);
1295 #endif
1296 		break;
1297 	case B_vmalloc:
1298 #ifdef MCAM_MODE_VMALLOC
1299 		tasklet_init(&cam->s_tasklet, mcam_frame_tasklet,
1300 				(unsigned long) cam);
1301 		vq->ops = &mcam_vb2_ops;
1302 		vq->mem_ops = &vb2_vmalloc_memops;
1303 		cam->dma_setup = mcam_ctlr_dma_vmalloc;
1304 		cam->frame_complete = mcam_vmalloc_done;
1305 #endif
1306 		break;
1307 	}
1308 	return vb2_queue_init(vq);
1309 }
1310 
mcam_cleanup_vb2(struct mcam_camera * cam)1311 static void mcam_cleanup_vb2(struct mcam_camera *cam)
1312 {
1313 #ifdef MCAM_MODE_DMA_CONTIG
1314 	if (cam->buffer_mode == B_DMA_contig)
1315 		vb2_dma_contig_cleanup_ctx(cam->vb_alloc_ctx);
1316 #endif
1317 #ifdef MCAM_MODE_DMA_SG
1318 	if (cam->buffer_mode == B_DMA_sg)
1319 		vb2_dma_sg_cleanup_ctx(cam->vb_alloc_ctx_sg);
1320 #endif
1321 }
1322 
1323 
1324 /* ---------------------------------------------------------------------- */
1325 /*
1326  * The long list of V4L2 ioctl() operations.
1327  */
1328 
mcam_vidioc_querycap(struct file * file,void * priv,struct v4l2_capability * cap)1329 static int mcam_vidioc_querycap(struct file *file, void *priv,
1330 		struct v4l2_capability *cap)
1331 {
1332 	struct mcam_camera *cam = video_drvdata(file);
1333 
1334 	strcpy(cap->driver, "marvell_ccic");
1335 	strcpy(cap->card, "marvell_ccic");
1336 	strlcpy(cap->bus_info, cam->bus_info, sizeof(cap->bus_info));
1337 	cap->device_caps = V4L2_CAP_VIDEO_CAPTURE |
1338 		V4L2_CAP_READWRITE | V4L2_CAP_STREAMING;
1339 	cap->capabilities = cap->device_caps | V4L2_CAP_DEVICE_CAPS;
1340 	return 0;
1341 }
1342 
1343 
mcam_vidioc_enum_fmt_vid_cap(struct file * filp,void * priv,struct v4l2_fmtdesc * fmt)1344 static int mcam_vidioc_enum_fmt_vid_cap(struct file *filp,
1345 		void *priv, struct v4l2_fmtdesc *fmt)
1346 {
1347 	if (fmt->index >= N_MCAM_FMTS)
1348 		return -EINVAL;
1349 	strlcpy(fmt->description, mcam_formats[fmt->index].desc,
1350 			sizeof(fmt->description));
1351 	fmt->pixelformat = mcam_formats[fmt->index].pixelformat;
1352 	return 0;
1353 }
1354 
mcam_vidioc_try_fmt_vid_cap(struct file * filp,void * priv,struct v4l2_format * fmt)1355 static int mcam_vidioc_try_fmt_vid_cap(struct file *filp, void *priv,
1356 		struct v4l2_format *fmt)
1357 {
1358 	struct mcam_camera *cam = video_drvdata(filp);
1359 	struct mcam_format_struct *f;
1360 	struct v4l2_pix_format *pix = &fmt->fmt.pix;
1361 	struct v4l2_subdev_pad_config pad_cfg;
1362 	struct v4l2_subdev_format format = {
1363 		.which = V4L2_SUBDEV_FORMAT_TRY,
1364 	};
1365 	int ret;
1366 
1367 	f = mcam_find_format(pix->pixelformat);
1368 	pix->pixelformat = f->pixelformat;
1369 	v4l2_fill_mbus_format(&format.format, pix, f->mbus_code);
1370 	ret = sensor_call(cam, pad, set_fmt, &pad_cfg, &format);
1371 	v4l2_fill_pix_format(pix, &format.format);
1372 	pix->bytesperline = pix->width * f->bpp;
1373 	switch (f->pixelformat) {
1374 	case V4L2_PIX_FMT_YUV420:
1375 	case V4L2_PIX_FMT_YVU420:
1376 		pix->sizeimage = pix->height * pix->bytesperline * 3 / 2;
1377 		break;
1378 	default:
1379 		pix->sizeimage = pix->height * pix->bytesperline;
1380 		break;
1381 	}
1382 	pix->colorspace = V4L2_COLORSPACE_SRGB;
1383 	return ret;
1384 }
1385 
mcam_vidioc_s_fmt_vid_cap(struct file * filp,void * priv,struct v4l2_format * fmt)1386 static int mcam_vidioc_s_fmt_vid_cap(struct file *filp, void *priv,
1387 		struct v4l2_format *fmt)
1388 {
1389 	struct mcam_camera *cam = video_drvdata(filp);
1390 	struct mcam_format_struct *f;
1391 	int ret;
1392 
1393 	/*
1394 	 * Can't do anything if the device is not idle
1395 	 * Also can't if there are streaming buffers in place.
1396 	 */
1397 	if (cam->state != S_IDLE || vb2_is_busy(&cam->vb_queue))
1398 		return -EBUSY;
1399 
1400 	f = mcam_find_format(fmt->fmt.pix.pixelformat);
1401 
1402 	/*
1403 	 * See if the formatting works in principle.
1404 	 */
1405 	ret = mcam_vidioc_try_fmt_vid_cap(filp, priv, fmt);
1406 	if (ret)
1407 		return ret;
1408 	/*
1409 	 * Now we start to change things for real, so let's do it
1410 	 * under lock.
1411 	 */
1412 	cam->pix_format = fmt->fmt.pix;
1413 	cam->mbus_code = f->mbus_code;
1414 
1415 	/*
1416 	 * Make sure we have appropriate DMA buffers.
1417 	 */
1418 	if (cam->buffer_mode == B_vmalloc) {
1419 		ret = mcam_check_dma_buffers(cam);
1420 		if (ret)
1421 			goto out;
1422 	}
1423 	mcam_set_config_needed(cam, 1);
1424 out:
1425 	return ret;
1426 }
1427 
1428 /*
1429  * Return our stored notion of how the camera is/should be configured.
1430  * The V4l2 spec wants us to be smarter, and actually get this from
1431  * the camera (and not mess with it at open time).  Someday.
1432  */
mcam_vidioc_g_fmt_vid_cap(struct file * filp,void * priv,struct v4l2_format * f)1433 static int mcam_vidioc_g_fmt_vid_cap(struct file *filp, void *priv,
1434 		struct v4l2_format *f)
1435 {
1436 	struct mcam_camera *cam = video_drvdata(filp);
1437 
1438 	f->fmt.pix = cam->pix_format;
1439 	return 0;
1440 }
1441 
1442 /*
1443  * We only have one input - the sensor - so minimize the nonsense here.
1444  */
mcam_vidioc_enum_input(struct file * filp,void * priv,struct v4l2_input * input)1445 static int mcam_vidioc_enum_input(struct file *filp, void *priv,
1446 		struct v4l2_input *input)
1447 {
1448 	if (input->index != 0)
1449 		return -EINVAL;
1450 
1451 	input->type = V4L2_INPUT_TYPE_CAMERA;
1452 	strcpy(input->name, "Camera");
1453 	return 0;
1454 }
1455 
mcam_vidioc_g_input(struct file * filp,void * priv,unsigned int * i)1456 static int mcam_vidioc_g_input(struct file *filp, void *priv, unsigned int *i)
1457 {
1458 	*i = 0;
1459 	return 0;
1460 }
1461 
mcam_vidioc_s_input(struct file * filp,void * priv,unsigned int i)1462 static int mcam_vidioc_s_input(struct file *filp, void *priv, unsigned int i)
1463 {
1464 	if (i != 0)
1465 		return -EINVAL;
1466 	return 0;
1467 }
1468 
1469 /*
1470  * G/S_PARM.  Most of this is done by the sensor, but we are
1471  * the level which controls the number of read buffers.
1472  */
mcam_vidioc_g_parm(struct file * filp,void * priv,struct v4l2_streamparm * parms)1473 static int mcam_vidioc_g_parm(struct file *filp, void *priv,
1474 		struct v4l2_streamparm *parms)
1475 {
1476 	struct mcam_camera *cam = video_drvdata(filp);
1477 	int ret;
1478 
1479 	ret = sensor_call(cam, video, g_parm, parms);
1480 	parms->parm.capture.readbuffers = n_dma_bufs;
1481 	return ret;
1482 }
1483 
mcam_vidioc_s_parm(struct file * filp,void * priv,struct v4l2_streamparm * parms)1484 static int mcam_vidioc_s_parm(struct file *filp, void *priv,
1485 		struct v4l2_streamparm *parms)
1486 {
1487 	struct mcam_camera *cam = video_drvdata(filp);
1488 	int ret;
1489 
1490 	ret = sensor_call(cam, video, s_parm, parms);
1491 	parms->parm.capture.readbuffers = n_dma_bufs;
1492 	return ret;
1493 }
1494 
mcam_vidioc_enum_framesizes(struct file * filp,void * priv,struct v4l2_frmsizeenum * sizes)1495 static int mcam_vidioc_enum_framesizes(struct file *filp, void *priv,
1496 		struct v4l2_frmsizeenum *sizes)
1497 {
1498 	struct mcam_camera *cam = video_drvdata(filp);
1499 	struct mcam_format_struct *f;
1500 	struct v4l2_subdev_frame_size_enum fse = {
1501 		.index = sizes->index,
1502 		.which = V4L2_SUBDEV_FORMAT_ACTIVE,
1503 	};
1504 	int ret;
1505 
1506 	f = mcam_find_format(sizes->pixel_format);
1507 	if (f->pixelformat != sizes->pixel_format)
1508 		return -EINVAL;
1509 	fse.code = f->mbus_code;
1510 	ret = sensor_call(cam, pad, enum_frame_size, NULL, &fse);
1511 	if (ret)
1512 		return ret;
1513 	if (fse.min_width == fse.max_width &&
1514 	    fse.min_height == fse.max_height) {
1515 		sizes->type = V4L2_FRMSIZE_TYPE_DISCRETE;
1516 		sizes->discrete.width = fse.min_width;
1517 		sizes->discrete.height = fse.min_height;
1518 		return 0;
1519 	}
1520 	sizes->type = V4L2_FRMSIZE_TYPE_CONTINUOUS;
1521 	sizes->stepwise.min_width = fse.min_width;
1522 	sizes->stepwise.max_width = fse.max_width;
1523 	sizes->stepwise.min_height = fse.min_height;
1524 	sizes->stepwise.max_height = fse.max_height;
1525 	sizes->stepwise.step_width = 1;
1526 	sizes->stepwise.step_height = 1;
1527 	return 0;
1528 }
1529 
mcam_vidioc_enum_frameintervals(struct file * filp,void * priv,struct v4l2_frmivalenum * interval)1530 static int mcam_vidioc_enum_frameintervals(struct file *filp, void *priv,
1531 		struct v4l2_frmivalenum *interval)
1532 {
1533 	struct mcam_camera *cam = video_drvdata(filp);
1534 	struct mcam_format_struct *f;
1535 	struct v4l2_subdev_frame_interval_enum fie = {
1536 		.index = interval->index,
1537 		.width = interval->width,
1538 		.height = interval->height,
1539 		.which = V4L2_SUBDEV_FORMAT_ACTIVE,
1540 	};
1541 	int ret;
1542 
1543 	f = mcam_find_format(interval->pixel_format);
1544 	if (f->pixelformat != interval->pixel_format)
1545 		return -EINVAL;
1546 	fie.code = f->mbus_code;
1547 	ret = sensor_call(cam, pad, enum_frame_interval, NULL, &fie);
1548 	if (ret)
1549 		return ret;
1550 	interval->type = V4L2_FRMIVAL_TYPE_DISCRETE;
1551 	interval->discrete = fie.interval;
1552 	return 0;
1553 }
1554 
1555 #ifdef CONFIG_VIDEO_ADV_DEBUG
mcam_vidioc_g_register(struct file * file,void * priv,struct v4l2_dbg_register * reg)1556 static int mcam_vidioc_g_register(struct file *file, void *priv,
1557 		struct v4l2_dbg_register *reg)
1558 {
1559 	struct mcam_camera *cam = video_drvdata(file);
1560 
1561 	if (reg->reg > cam->regs_size - 4)
1562 		return -EINVAL;
1563 	reg->val = mcam_reg_read(cam, reg->reg);
1564 	reg->size = 4;
1565 	return 0;
1566 }
1567 
mcam_vidioc_s_register(struct file * file,void * priv,const struct v4l2_dbg_register * reg)1568 static int mcam_vidioc_s_register(struct file *file, void *priv,
1569 		const struct v4l2_dbg_register *reg)
1570 {
1571 	struct mcam_camera *cam = video_drvdata(file);
1572 
1573 	if (reg->reg > cam->regs_size - 4)
1574 		return -EINVAL;
1575 	mcam_reg_write(cam, reg->reg, reg->val);
1576 	return 0;
1577 }
1578 #endif
1579 
1580 static const struct v4l2_ioctl_ops mcam_v4l_ioctl_ops = {
1581 	.vidioc_querycap	= mcam_vidioc_querycap,
1582 	.vidioc_enum_fmt_vid_cap = mcam_vidioc_enum_fmt_vid_cap,
1583 	.vidioc_try_fmt_vid_cap	= mcam_vidioc_try_fmt_vid_cap,
1584 	.vidioc_s_fmt_vid_cap	= mcam_vidioc_s_fmt_vid_cap,
1585 	.vidioc_g_fmt_vid_cap	= mcam_vidioc_g_fmt_vid_cap,
1586 	.vidioc_enum_input	= mcam_vidioc_enum_input,
1587 	.vidioc_g_input		= mcam_vidioc_g_input,
1588 	.vidioc_s_input		= mcam_vidioc_s_input,
1589 	.vidioc_reqbufs		= vb2_ioctl_reqbufs,
1590 	.vidioc_create_bufs	= vb2_ioctl_create_bufs,
1591 	.vidioc_querybuf	= vb2_ioctl_querybuf,
1592 	.vidioc_qbuf		= vb2_ioctl_qbuf,
1593 	.vidioc_dqbuf		= vb2_ioctl_dqbuf,
1594 	.vidioc_expbuf		= vb2_ioctl_expbuf,
1595 	.vidioc_streamon	= vb2_ioctl_streamon,
1596 	.vidioc_streamoff	= vb2_ioctl_streamoff,
1597 	.vidioc_g_parm		= mcam_vidioc_g_parm,
1598 	.vidioc_s_parm		= mcam_vidioc_s_parm,
1599 	.vidioc_enum_framesizes = mcam_vidioc_enum_framesizes,
1600 	.vidioc_enum_frameintervals = mcam_vidioc_enum_frameintervals,
1601 	.vidioc_subscribe_event = v4l2_ctrl_subscribe_event,
1602 	.vidioc_unsubscribe_event = v4l2_event_unsubscribe,
1603 #ifdef CONFIG_VIDEO_ADV_DEBUG
1604 	.vidioc_g_register	= mcam_vidioc_g_register,
1605 	.vidioc_s_register	= mcam_vidioc_s_register,
1606 #endif
1607 };
1608 
1609 /* ---------------------------------------------------------------------- */
1610 /*
1611  * Our various file operations.
1612  */
mcam_v4l_open(struct file * filp)1613 static int mcam_v4l_open(struct file *filp)
1614 {
1615 	struct mcam_camera *cam = video_drvdata(filp);
1616 	int ret;
1617 
1618 	mutex_lock(&cam->s_mutex);
1619 	ret = v4l2_fh_open(filp);
1620 	if (ret)
1621 		goto out;
1622 	if (v4l2_fh_is_singular_file(filp)) {
1623 		ret = mcam_ctlr_power_up(cam);
1624 		if (ret)
1625 			goto out;
1626 		__mcam_cam_reset(cam);
1627 		mcam_set_config_needed(cam, 1);
1628 	}
1629 out:
1630 	mutex_unlock(&cam->s_mutex);
1631 	if (ret)
1632 		v4l2_fh_release(filp);
1633 	return ret;
1634 }
1635 
1636 
mcam_v4l_release(struct file * filp)1637 static int mcam_v4l_release(struct file *filp)
1638 {
1639 	struct mcam_camera *cam = video_drvdata(filp);
1640 	bool last_open;
1641 
1642 	mutex_lock(&cam->s_mutex);
1643 	last_open = v4l2_fh_is_singular_file(filp);
1644 	_vb2_fop_release(filp, NULL);
1645 	if (last_open) {
1646 		mcam_disable_mipi(cam);
1647 		mcam_ctlr_power_down(cam);
1648 		if (cam->buffer_mode == B_vmalloc && alloc_bufs_at_read)
1649 			mcam_free_dma_bufs(cam);
1650 	}
1651 
1652 	mutex_unlock(&cam->s_mutex);
1653 	return 0;
1654 }
1655 
1656 static const struct v4l2_file_operations mcam_v4l_fops = {
1657 	.owner = THIS_MODULE,
1658 	.open = mcam_v4l_open,
1659 	.release = mcam_v4l_release,
1660 	.read = vb2_fop_read,
1661 	.poll = vb2_fop_poll,
1662 	.mmap = vb2_fop_mmap,
1663 	.unlocked_ioctl = video_ioctl2,
1664 };
1665 
1666 
1667 /*
1668  * This template device holds all of those v4l2 methods; we
1669  * clone it for specific real devices.
1670  */
1671 static struct video_device mcam_v4l_template = {
1672 	.name = "mcam",
1673 	.fops = &mcam_v4l_fops,
1674 	.ioctl_ops = &mcam_v4l_ioctl_ops,
1675 	.release = video_device_release_empty,
1676 };
1677 
1678 /* ---------------------------------------------------------------------- */
1679 /*
1680  * Interrupt handler stuff
1681  */
mcam_frame_complete(struct mcam_camera * cam,int frame)1682 static void mcam_frame_complete(struct mcam_camera *cam, int frame)
1683 {
1684 	/*
1685 	 * Basic frame housekeeping.
1686 	 */
1687 	set_bit(frame, &cam->flags);
1688 	clear_bit(CF_DMA_ACTIVE, &cam->flags);
1689 	cam->next_buf = frame;
1690 	cam->buf_seq[frame] = cam->sequence++;
1691 	cam->frame_state.frames++;
1692 	/*
1693 	 * "This should never happen"
1694 	 */
1695 	if (cam->state != S_STREAMING)
1696 		return;
1697 	/*
1698 	 * Process the frame and set up the next one.
1699 	 */
1700 	cam->frame_complete(cam, frame);
1701 }
1702 
1703 
1704 /*
1705  * The interrupt handler; this needs to be called from the
1706  * platform irq handler with the lock held.
1707  */
mccic_irq(struct mcam_camera * cam,unsigned int irqs)1708 int mccic_irq(struct mcam_camera *cam, unsigned int irqs)
1709 {
1710 	unsigned int frame, handled = 0;
1711 
1712 	mcam_reg_write(cam, REG_IRQSTAT, FRAMEIRQS); /* Clear'em all */
1713 	/*
1714 	 * Handle any frame completions.  There really should
1715 	 * not be more than one of these, or we have fallen
1716 	 * far behind.
1717 	 *
1718 	 * When running in S/G mode, the frame number lacks any
1719 	 * real meaning - there's only one descriptor array - but
1720 	 * the controller still picks a different one to signal
1721 	 * each time.
1722 	 */
1723 	for (frame = 0; frame < cam->nbufs; frame++)
1724 		if (irqs & (IRQ_EOF0 << frame) &&
1725 			test_bit(CF_FRAME_SOF0 + frame, &cam->flags)) {
1726 			mcam_frame_complete(cam, frame);
1727 			handled = 1;
1728 			clear_bit(CF_FRAME_SOF0 + frame, &cam->flags);
1729 			if (cam->buffer_mode == B_DMA_sg)
1730 				break;
1731 		}
1732 	/*
1733 	 * If a frame starts, note that we have DMA active.  This
1734 	 * code assumes that we won't get multiple frame interrupts
1735 	 * at once; may want to rethink that.
1736 	 */
1737 	for (frame = 0; frame < cam->nbufs; frame++) {
1738 		if (irqs & (IRQ_SOF0 << frame)) {
1739 			set_bit(CF_FRAME_SOF0 + frame, &cam->flags);
1740 			handled = IRQ_HANDLED;
1741 		}
1742 	}
1743 
1744 	if (handled == IRQ_HANDLED) {
1745 		set_bit(CF_DMA_ACTIVE, &cam->flags);
1746 		if (cam->buffer_mode == B_DMA_sg)
1747 			mcam_ctlr_stop(cam);
1748 	}
1749 	return handled;
1750 }
1751 
1752 /* ---------------------------------------------------------------------- */
1753 /*
1754  * Registration and such.
1755  */
1756 static struct ov7670_config sensor_cfg = {
1757 	/*
1758 	 * Exclude QCIF mode, because it only captures a tiny portion
1759 	 * of the sensor FOV
1760 	 */
1761 	.min_width = 320,
1762 	.min_height = 240,
1763 };
1764 
1765 
mccic_register(struct mcam_camera * cam)1766 int mccic_register(struct mcam_camera *cam)
1767 {
1768 	struct i2c_board_info ov7670_info = {
1769 		.type = "ov7670",
1770 		.addr = 0x42 >> 1,
1771 		.platform_data = &sensor_cfg,
1772 	};
1773 	int ret;
1774 
1775 	/*
1776 	 * Validate the requested buffer mode.
1777 	 */
1778 	if (buffer_mode >= 0)
1779 		cam->buffer_mode = buffer_mode;
1780 	if (cam->buffer_mode == B_DMA_sg &&
1781 			cam->chip_id == MCAM_CAFE) {
1782 		printk(KERN_ERR "marvell-cam: Cafe can't do S/G I/O, "
1783 			"attempting vmalloc mode instead\n");
1784 		cam->buffer_mode = B_vmalloc;
1785 	}
1786 	if (!mcam_buffer_mode_supported(cam->buffer_mode)) {
1787 		printk(KERN_ERR "marvell-cam: buffer mode %d unsupported\n",
1788 				cam->buffer_mode);
1789 		return -EINVAL;
1790 	}
1791 	/*
1792 	 * Register with V4L
1793 	 */
1794 	ret = v4l2_device_register(cam->dev, &cam->v4l2_dev);
1795 	if (ret)
1796 		return ret;
1797 
1798 	mutex_init(&cam->s_mutex);
1799 	cam->state = S_NOTREADY;
1800 	mcam_set_config_needed(cam, 1);
1801 	cam->pix_format = mcam_def_pix_format;
1802 	cam->mbus_code = mcam_def_mbus_code;
1803 	mcam_ctlr_init(cam);
1804 
1805 	/*
1806 	 * Get the v4l2 setup done.
1807 	 */
1808 	ret = v4l2_ctrl_handler_init(&cam->ctrl_handler, 10);
1809 	if (ret)
1810 		goto out_unregister;
1811 	cam->v4l2_dev.ctrl_handler = &cam->ctrl_handler;
1812 
1813 	/*
1814 	 * Try to find the sensor.
1815 	 */
1816 	sensor_cfg.clock_speed = cam->clock_speed;
1817 	sensor_cfg.use_smbus = cam->use_smbus;
1818 	cam->sensor_addr = ov7670_info.addr;
1819 	cam->sensor = v4l2_i2c_new_subdev_board(&cam->v4l2_dev,
1820 			cam->i2c_adapter, &ov7670_info, NULL);
1821 	if (cam->sensor == NULL) {
1822 		ret = -ENODEV;
1823 		goto out_unregister;
1824 	}
1825 
1826 	ret = mcam_cam_init(cam);
1827 	if (ret)
1828 		goto out_unregister;
1829 
1830 	ret = mcam_setup_vb2(cam);
1831 	if (ret)
1832 		goto out_unregister;
1833 
1834 	mutex_lock(&cam->s_mutex);
1835 	cam->vdev = mcam_v4l_template;
1836 	cam->vdev.v4l2_dev = &cam->v4l2_dev;
1837 	cam->vdev.lock = &cam->s_mutex;
1838 	cam->vdev.queue = &cam->vb_queue;
1839 	video_set_drvdata(&cam->vdev, cam);
1840 	ret = video_register_device(&cam->vdev, VFL_TYPE_GRABBER, -1);
1841 	if (ret) {
1842 		mutex_unlock(&cam->s_mutex);
1843 		goto out_unregister;
1844 	}
1845 
1846 	/*
1847 	 * If so requested, try to get our DMA buffers now.
1848 	 */
1849 	if (cam->buffer_mode == B_vmalloc && !alloc_bufs_at_read) {
1850 		if (mcam_alloc_dma_bufs(cam, 1))
1851 			cam_warn(cam, "Unable to alloc DMA buffers at load"
1852 					" will try again later.");
1853 	}
1854 
1855 	mutex_unlock(&cam->s_mutex);
1856 	return 0;
1857 
1858 out_unregister:
1859 	v4l2_ctrl_handler_free(&cam->ctrl_handler);
1860 	v4l2_device_unregister(&cam->v4l2_dev);
1861 	return ret;
1862 }
1863 
1864 
mccic_shutdown(struct mcam_camera * cam)1865 void mccic_shutdown(struct mcam_camera *cam)
1866 {
1867 	/*
1868 	 * If we have no users (and we really, really should have no
1869 	 * users) the device will already be powered down.  Trying to
1870 	 * take it down again will wedge the machine, which is frowned
1871 	 * upon.
1872 	 */
1873 	if (!list_empty(&cam->vdev.fh_list)) {
1874 		cam_warn(cam, "Removing a device with users!\n");
1875 		mcam_ctlr_power_down(cam);
1876 	}
1877 	mcam_cleanup_vb2(cam);
1878 	if (cam->buffer_mode == B_vmalloc)
1879 		mcam_free_dma_bufs(cam);
1880 	video_unregister_device(&cam->vdev);
1881 	v4l2_ctrl_handler_free(&cam->ctrl_handler);
1882 	v4l2_device_unregister(&cam->v4l2_dev);
1883 }
1884 
1885 /*
1886  * Power management
1887  */
1888 #ifdef CONFIG_PM
1889 
mccic_suspend(struct mcam_camera * cam)1890 void mccic_suspend(struct mcam_camera *cam)
1891 {
1892 	mutex_lock(&cam->s_mutex);
1893 	if (!list_empty(&cam->vdev.fh_list)) {
1894 		enum mcam_state cstate = cam->state;
1895 
1896 		mcam_ctlr_stop_dma(cam);
1897 		mcam_ctlr_power_down(cam);
1898 		cam->state = cstate;
1899 	}
1900 	mutex_unlock(&cam->s_mutex);
1901 }
1902 
mccic_resume(struct mcam_camera * cam)1903 int mccic_resume(struct mcam_camera *cam)
1904 {
1905 	int ret = 0;
1906 
1907 	mutex_lock(&cam->s_mutex);
1908 	if (!list_empty(&cam->vdev.fh_list)) {
1909 		ret = mcam_ctlr_power_up(cam);
1910 		if (ret) {
1911 			mutex_unlock(&cam->s_mutex);
1912 			return ret;
1913 		}
1914 		__mcam_cam_reset(cam);
1915 	} else {
1916 		mcam_ctlr_power_down(cam);
1917 	}
1918 	mutex_unlock(&cam->s_mutex);
1919 
1920 	set_bit(CF_CONFIG_NEEDED, &cam->flags);
1921 	if (cam->state == S_STREAMING) {
1922 		/*
1923 		 * If there was a buffer in the DMA engine at suspend
1924 		 * time, put it back on the queue or we'll forget about it.
1925 		 */
1926 		if (cam->buffer_mode == B_DMA_sg && cam->vb_bufs[0])
1927 			list_add(&cam->vb_bufs[0]->queue, &cam->buffers);
1928 		ret = mcam_read_setup(cam);
1929 	}
1930 	return ret;
1931 }
1932 #endif /* CONFIG_PM */
1933