1 /*
2  * camera image capture (abstract) bus driver
3  *
4  * Copyright (C) 2008, Guennadi Liakhovetski <kernel@pengutronix.de>
5  *
6  * This driver provides an interface between platform-specific camera
7  * busses and camera devices. It should be used if the camera is
8  * connected not over a "proper" bus like PCI or USB, but over a
9  * special bus, like, for example, the Quick Capture interface on PXA270
10  * SoCs. Later it should also be used for i.MX31 SoCs from Freescale.
11  * It can handle multiple cameras and / or multiple busses, which can
12  * be used, e.g., in stereo-vision applications.
13  *
14  * This program is free software; you can redistribute it and/or modify
15  * it under the terms of the GNU General Public License version 2 as
16  * published by the Free Software Foundation.
17  */
18 
19 #include <linux/device.h>
20 #include <linux/err.h>
21 #include <linux/i2c.h>
22 #include <linux/init.h>
23 #include <linux/list.h>
24 #include <linux/mutex.h>
25 #include <linux/module.h>
26 #include <linux/platform_device.h>
27 #include <linux/regulator/consumer.h>
28 #include <linux/slab.h>
29 #include <linux/pm_runtime.h>
30 #include <linux/vmalloc.h>
31 
32 #include <media/soc_camera.h>
33 #include <media/v4l2-common.h>
34 #include <media/v4l2-ioctl.h>
35 #include <media/v4l2-dev.h>
36 #include <media/videobuf-core.h>
37 #include <media/videobuf2-core.h>
38 #include <media/soc_mediabus.h>
39 
40 /* Default to VGA resolution */
41 #define DEFAULT_WIDTH	640
42 #define DEFAULT_HEIGHT	480
43 
44 #define is_streaming(ici, icd)				\
45 	(((ici)->ops->init_videobuf) ?			\
46 	 (icd)->vb_vidq.streaming :			\
47 	 vb2_is_streaming(&(icd)->vb2_vidq))
48 
49 static LIST_HEAD(hosts);
50 static LIST_HEAD(devices);
51 static DEFINE_MUTEX(list_lock);		/* Protects the list of hosts */
52 
soc_camera_power_on(struct soc_camera_device * icd,struct soc_camera_link * icl)53 static int soc_camera_power_on(struct soc_camera_device *icd,
54 			       struct soc_camera_link *icl)
55 {
56 	struct v4l2_subdev *sd = soc_camera_to_subdev(icd);
57 	int ret = regulator_bulk_enable(icl->num_regulators,
58 					icl->regulators);
59 	if (ret < 0) {
60 		dev_err(icd->pdev, "Cannot enable regulators\n");
61 		return ret;
62 	}
63 
64 	if (icl->power) {
65 		ret = icl->power(icd->pdev, 1);
66 		if (ret < 0) {
67 			dev_err(icd->pdev,
68 				"Platform failed to power-on the camera.\n");
69 			goto elinkpwr;
70 		}
71 	}
72 
73 	ret = v4l2_subdev_call(sd, core, s_power, 1);
74 	if (ret < 0 && ret != -ENOIOCTLCMD && ret != -ENODEV)
75 		goto esdpwr;
76 
77 	return 0;
78 
79 esdpwr:
80 	if (icl->power)
81 		icl->power(icd->pdev, 0);
82 elinkpwr:
83 	regulator_bulk_disable(icl->num_regulators,
84 			       icl->regulators);
85 	return ret;
86 }
87 
soc_camera_power_off(struct soc_camera_device * icd,struct soc_camera_link * icl)88 static int soc_camera_power_off(struct soc_camera_device *icd,
89 				struct soc_camera_link *icl)
90 {
91 	struct v4l2_subdev *sd = soc_camera_to_subdev(icd);
92 	int ret = v4l2_subdev_call(sd, core, s_power, 0);
93 
94 	if (ret < 0 && ret != -ENOIOCTLCMD && ret != -ENODEV)
95 		return ret;
96 
97 	if (icl->power) {
98 		ret = icl->power(icd->pdev, 0);
99 		if (ret < 0) {
100 			dev_err(icd->pdev,
101 				"Platform failed to power-off the camera.\n");
102 			return ret;
103 		}
104 	}
105 
106 	ret = regulator_bulk_disable(icl->num_regulators,
107 				     icl->regulators);
108 	if (ret < 0)
109 		dev_err(icd->pdev, "Cannot disable regulators\n");
110 
111 	return ret;
112 }
113 
soc_camera_xlate_by_fourcc(struct soc_camera_device * icd,unsigned int fourcc)114 const struct soc_camera_format_xlate *soc_camera_xlate_by_fourcc(
115 	struct soc_camera_device *icd, unsigned int fourcc)
116 {
117 	unsigned int i;
118 
119 	for (i = 0; i < icd->num_user_formats; i++)
120 		if (icd->user_formats[i].host_fmt->fourcc == fourcc)
121 			return icd->user_formats + i;
122 	return NULL;
123 }
124 EXPORT_SYMBOL(soc_camera_xlate_by_fourcc);
125 
126 /**
127  * soc_camera_apply_board_flags() - apply platform SOCAM_SENSOR_INVERT_* flags
128  * @icl:	camera platform parameters
129  * @cfg:	media bus configuration
130  * @return:	resulting flags
131  */
soc_camera_apply_board_flags(struct soc_camera_link * icl,const struct v4l2_mbus_config * cfg)132 unsigned long soc_camera_apply_board_flags(struct soc_camera_link *icl,
133 					   const struct v4l2_mbus_config *cfg)
134 {
135 	unsigned long f, flags = cfg->flags;
136 
137 	/* If only one of the two polarities is supported, switch to the opposite */
138 	if (icl->flags & SOCAM_SENSOR_INVERT_HSYNC) {
139 		f = flags & (V4L2_MBUS_HSYNC_ACTIVE_HIGH | V4L2_MBUS_HSYNC_ACTIVE_LOW);
140 		if (f == V4L2_MBUS_HSYNC_ACTIVE_HIGH || f == V4L2_MBUS_HSYNC_ACTIVE_LOW)
141 			flags ^= V4L2_MBUS_HSYNC_ACTIVE_HIGH | V4L2_MBUS_HSYNC_ACTIVE_LOW;
142 	}
143 
144 	if (icl->flags & SOCAM_SENSOR_INVERT_VSYNC) {
145 		f = flags & (V4L2_MBUS_VSYNC_ACTIVE_HIGH | V4L2_MBUS_VSYNC_ACTIVE_LOW);
146 		if (f == V4L2_MBUS_VSYNC_ACTIVE_HIGH || f == V4L2_MBUS_VSYNC_ACTIVE_LOW)
147 			flags ^= V4L2_MBUS_VSYNC_ACTIVE_HIGH | V4L2_MBUS_VSYNC_ACTIVE_LOW;
148 	}
149 
150 	if (icl->flags & SOCAM_SENSOR_INVERT_PCLK) {
151 		f = flags & (V4L2_MBUS_PCLK_SAMPLE_RISING | V4L2_MBUS_PCLK_SAMPLE_FALLING);
152 		if (f == V4L2_MBUS_PCLK_SAMPLE_RISING || f == V4L2_MBUS_PCLK_SAMPLE_FALLING)
153 			flags ^= V4L2_MBUS_PCLK_SAMPLE_RISING | V4L2_MBUS_PCLK_SAMPLE_FALLING;
154 	}
155 
156 	return flags;
157 }
158 EXPORT_SYMBOL(soc_camera_apply_board_flags);
159 
160 #define pixfmtstr(x) (x) & 0xff, ((x) >> 8) & 0xff, ((x) >> 16) & 0xff, \
161 	((x) >> 24) & 0xff
162 
soc_camera_try_fmt(struct soc_camera_device * icd,struct v4l2_format * f)163 static int soc_camera_try_fmt(struct soc_camera_device *icd,
164 			      struct v4l2_format *f)
165 {
166 	struct soc_camera_host *ici = to_soc_camera_host(icd->parent);
167 	struct v4l2_pix_format *pix = &f->fmt.pix;
168 	int ret;
169 
170 	dev_dbg(icd->pdev, "TRY_FMT(%c%c%c%c, %ux%u)\n",
171 		pixfmtstr(pix->pixelformat), pix->width, pix->height);
172 
173 	pix->bytesperline = 0;
174 	pix->sizeimage = 0;
175 
176 	ret = ici->ops->try_fmt(icd, f);
177 	if (ret < 0)
178 		return ret;
179 
180 	if (!pix->sizeimage) {
181 		if (!pix->bytesperline) {
182 			const struct soc_camera_format_xlate *xlate;
183 
184 			xlate = soc_camera_xlate_by_fourcc(icd, pix->pixelformat);
185 			if (!xlate)
186 				return -EINVAL;
187 
188 			ret = soc_mbus_bytes_per_line(pix->width,
189 						      xlate->host_fmt);
190 			if (ret > 0)
191 				pix->bytesperline = ret;
192 		}
193 		if (pix->bytesperline)
194 			pix->sizeimage = pix->bytesperline * pix->height;
195 	}
196 
197 	return 0;
198 }
199 
soc_camera_try_fmt_vid_cap(struct file * file,void * priv,struct v4l2_format * f)200 static int soc_camera_try_fmt_vid_cap(struct file *file, void *priv,
201 				      struct v4l2_format *f)
202 {
203 	struct soc_camera_device *icd = file->private_data;
204 
205 	WARN_ON(priv != file->private_data);
206 
207 	/* Only single-plane capture is supported so far */
208 	if (f->type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
209 		return -EINVAL;
210 
211 	/* limit format to hardware capabilities */
212 	return soc_camera_try_fmt(icd, f);
213 }
214 
soc_camera_enum_input(struct file * file,void * priv,struct v4l2_input * inp)215 static int soc_camera_enum_input(struct file *file, void *priv,
216 				 struct v4l2_input *inp)
217 {
218 	if (inp->index != 0)
219 		return -EINVAL;
220 
221 	/* default is camera */
222 	inp->type = V4L2_INPUT_TYPE_CAMERA;
223 	inp->std  = V4L2_STD_UNKNOWN;
224 	strcpy(inp->name, "Camera");
225 
226 	return 0;
227 }
228 
soc_camera_g_input(struct file * file,void * priv,unsigned int * i)229 static int soc_camera_g_input(struct file *file, void *priv, unsigned int *i)
230 {
231 	*i = 0;
232 
233 	return 0;
234 }
235 
soc_camera_s_input(struct file * file,void * priv,unsigned int i)236 static int soc_camera_s_input(struct file *file, void *priv, unsigned int i)
237 {
238 	if (i > 0)
239 		return -EINVAL;
240 
241 	return 0;
242 }
243 
soc_camera_s_std(struct file * file,void * priv,v4l2_std_id * a)244 static int soc_camera_s_std(struct file *file, void *priv, v4l2_std_id *a)
245 {
246 	struct soc_camera_device *icd = file->private_data;
247 	struct v4l2_subdev *sd = soc_camera_to_subdev(icd);
248 
249 	return v4l2_subdev_call(sd, core, s_std, *a);
250 }
251 
soc_camera_g_std(struct file * file,void * priv,v4l2_std_id * a)252 static int soc_camera_g_std(struct file *file, void *priv, v4l2_std_id *a)
253 {
254 	struct soc_camera_device *icd = file->private_data;
255 	struct v4l2_subdev *sd = soc_camera_to_subdev(icd);
256 
257 	return v4l2_subdev_call(sd, core, g_std, a);
258 }
259 
soc_camera_enum_fsizes(struct file * file,void * fh,struct v4l2_frmsizeenum * fsize)260 static int soc_camera_enum_fsizes(struct file *file, void *fh,
261 					 struct v4l2_frmsizeenum *fsize)
262 {
263 	struct soc_camera_device *icd = file->private_data;
264 	struct soc_camera_host *ici = to_soc_camera_host(icd->parent);
265 
266 	return ici->ops->enum_fsizes(icd, fsize);
267 }
268 
soc_camera_reqbufs(struct file * file,void * priv,struct v4l2_requestbuffers * p)269 static int soc_camera_reqbufs(struct file *file, void *priv,
270 			      struct v4l2_requestbuffers *p)
271 {
272 	int ret;
273 	struct soc_camera_device *icd = file->private_data;
274 	struct soc_camera_host *ici = to_soc_camera_host(icd->parent);
275 
276 	WARN_ON(priv != file->private_data);
277 
278 	if (icd->streamer && icd->streamer != file)
279 		return -EBUSY;
280 
281 	if (ici->ops->init_videobuf) {
282 		ret = videobuf_reqbufs(&icd->vb_vidq, p);
283 		if (ret < 0)
284 			return ret;
285 
286 		ret = ici->ops->reqbufs(icd, p);
287 	} else {
288 		ret = vb2_reqbufs(&icd->vb2_vidq, p);
289 	}
290 
291 	if (!ret && !icd->streamer)
292 		icd->streamer = file;
293 
294 	return ret;
295 }
296 
soc_camera_querybuf(struct file * file,void * priv,struct v4l2_buffer * p)297 static int soc_camera_querybuf(struct file *file, void *priv,
298 			       struct v4l2_buffer *p)
299 {
300 	struct soc_camera_device *icd = file->private_data;
301 	struct soc_camera_host *ici = to_soc_camera_host(icd->parent);
302 
303 	WARN_ON(priv != file->private_data);
304 
305 	if (ici->ops->init_videobuf)
306 		return videobuf_querybuf(&icd->vb_vidq, p);
307 	else
308 		return vb2_querybuf(&icd->vb2_vidq, p);
309 }
310 
soc_camera_qbuf(struct file * file,void * priv,struct v4l2_buffer * p)311 static int soc_camera_qbuf(struct file *file, void *priv,
312 			   struct v4l2_buffer *p)
313 {
314 	struct soc_camera_device *icd = file->private_data;
315 	struct soc_camera_host *ici = to_soc_camera_host(icd->parent);
316 
317 	WARN_ON(priv != file->private_data);
318 
319 	if (icd->streamer != file)
320 		return -EBUSY;
321 
322 	if (ici->ops->init_videobuf)
323 		return videobuf_qbuf(&icd->vb_vidq, p);
324 	else
325 		return vb2_qbuf(&icd->vb2_vidq, p);
326 }
327 
soc_camera_dqbuf(struct file * file,void * priv,struct v4l2_buffer * p)328 static int soc_camera_dqbuf(struct file *file, void *priv,
329 			    struct v4l2_buffer *p)
330 {
331 	struct soc_camera_device *icd = file->private_data;
332 	struct soc_camera_host *ici = to_soc_camera_host(icd->parent);
333 
334 	WARN_ON(priv != file->private_data);
335 
336 	if (icd->streamer != file)
337 		return -EBUSY;
338 
339 	if (ici->ops->init_videobuf)
340 		return videobuf_dqbuf(&icd->vb_vidq, p, file->f_flags & O_NONBLOCK);
341 	else
342 		return vb2_dqbuf(&icd->vb2_vidq, p, file->f_flags & O_NONBLOCK);
343 }
344 
soc_camera_create_bufs(struct file * file,void * priv,struct v4l2_create_buffers * create)345 static int soc_camera_create_bufs(struct file *file, void *priv,
346 			    struct v4l2_create_buffers *create)
347 {
348 	struct soc_camera_device *icd = file->private_data;
349 	struct soc_camera_host *ici = to_soc_camera_host(icd->parent);
350 
351 	/* videobuf2 only */
352 	if (ici->ops->init_videobuf)
353 		return -EINVAL;
354 	else
355 		return vb2_create_bufs(&icd->vb2_vidq, create);
356 }
357 
soc_camera_prepare_buf(struct file * file,void * priv,struct v4l2_buffer * b)358 static int soc_camera_prepare_buf(struct file *file, void *priv,
359 				  struct v4l2_buffer *b)
360 {
361 	struct soc_camera_device *icd = file->private_data;
362 	struct soc_camera_host *ici = to_soc_camera_host(icd->parent);
363 
364 	/* videobuf2 only */
365 	if (ici->ops->init_videobuf)
366 		return -EINVAL;
367 	else
368 		return vb2_prepare_buf(&icd->vb2_vidq, b);
369 }
370 
371 /* Always entered with .video_lock held */
soc_camera_init_user_formats(struct soc_camera_device * icd)372 static int soc_camera_init_user_formats(struct soc_camera_device *icd)
373 {
374 	struct v4l2_subdev *sd = soc_camera_to_subdev(icd);
375 	struct soc_camera_host *ici = to_soc_camera_host(icd->parent);
376 	unsigned int i, fmts = 0, raw_fmts = 0;
377 	int ret;
378 	enum v4l2_mbus_pixelcode code;
379 
380 	while (!v4l2_subdev_call(sd, video, enum_mbus_fmt, raw_fmts, &code))
381 		raw_fmts++;
382 
383 	if (!ici->ops->get_formats)
384 		/*
385 		 * Fallback mode - the host will have to serve all
386 		 * sensor-provided formats one-to-one to the user
387 		 */
388 		fmts = raw_fmts;
389 	else
390 		/*
391 		 * First pass - only count formats this host-sensor
392 		 * configuration can provide
393 		 */
394 		for (i = 0; i < raw_fmts; i++) {
395 			ret = ici->ops->get_formats(icd, i, NULL);
396 			if (ret < 0)
397 				return ret;
398 			fmts += ret;
399 		}
400 
401 	if (!fmts)
402 		return -ENXIO;
403 
404 	icd->user_formats =
405 		vmalloc(fmts * sizeof(struct soc_camera_format_xlate));
406 	if (!icd->user_formats)
407 		return -ENOMEM;
408 
409 	dev_dbg(icd->pdev, "Found %d supported formats.\n", fmts);
410 
411 	/* Second pass - actually fill data formats */
412 	fmts = 0;
413 	for (i = 0; i < raw_fmts; i++)
414 		if (!ici->ops->get_formats) {
415 			v4l2_subdev_call(sd, video, enum_mbus_fmt, i, &code);
416 			icd->user_formats[fmts].host_fmt =
417 				soc_mbus_get_fmtdesc(code);
418 			if (icd->user_formats[fmts].host_fmt)
419 				icd->user_formats[fmts++].code = code;
420 		} else {
421 			ret = ici->ops->get_formats(icd, i,
422 						    &icd->user_formats[fmts]);
423 			if (ret < 0)
424 				goto egfmt;
425 			fmts += ret;
426 		}
427 
428 	icd->num_user_formats = fmts;
429 	icd->current_fmt = &icd->user_formats[0];
430 
431 	return 0;
432 
433 egfmt:
434 	vfree(icd->user_formats);
435 	return ret;
436 }
437 
438 /* Always entered with .video_lock held */
soc_camera_free_user_formats(struct soc_camera_device * icd)439 static void soc_camera_free_user_formats(struct soc_camera_device *icd)
440 {
441 	struct soc_camera_host *ici = to_soc_camera_host(icd->parent);
442 
443 	if (ici->ops->put_formats)
444 		ici->ops->put_formats(icd);
445 	icd->current_fmt = NULL;
446 	icd->num_user_formats = 0;
447 	vfree(icd->user_formats);
448 	icd->user_formats = NULL;
449 }
450 
451 /* Called with .vb_lock held, or from the first open(2), see comment there */
soc_camera_set_fmt(struct soc_camera_device * icd,struct v4l2_format * f)452 static int soc_camera_set_fmt(struct soc_camera_device *icd,
453 			      struct v4l2_format *f)
454 {
455 	struct soc_camera_host *ici = to_soc_camera_host(icd->parent);
456 	struct v4l2_pix_format *pix = &f->fmt.pix;
457 	int ret;
458 
459 	dev_dbg(icd->pdev, "S_FMT(%c%c%c%c, %ux%u)\n",
460 		pixfmtstr(pix->pixelformat), pix->width, pix->height);
461 
462 	/* We always call try_fmt() before set_fmt() or set_crop() */
463 	ret = soc_camera_try_fmt(icd, f);
464 	if (ret < 0)
465 		return ret;
466 
467 	ret = ici->ops->set_fmt(icd, f);
468 	if (ret < 0) {
469 		return ret;
470 	} else if (!icd->current_fmt ||
471 		   icd->current_fmt->host_fmt->fourcc != pix->pixelformat) {
472 		dev_err(icd->pdev,
473 			"Host driver hasn't set up current format correctly!\n");
474 		return -EINVAL;
475 	}
476 
477 	icd->user_width		= pix->width;
478 	icd->user_height	= pix->height;
479 	icd->bytesperline	= pix->bytesperline;
480 	icd->sizeimage		= pix->sizeimage;
481 	icd->colorspace		= pix->colorspace;
482 	icd->field		= pix->field;
483 	if (ici->ops->init_videobuf)
484 		icd->vb_vidq.field = pix->field;
485 
486 	dev_dbg(icd->pdev, "set width: %d height: %d\n",
487 		icd->user_width, icd->user_height);
488 
489 	/* set physical bus parameters */
490 	return ici->ops->set_bus_param(icd);
491 }
492 
soc_camera_open(struct file * file)493 static int soc_camera_open(struct file *file)
494 {
495 	struct video_device *vdev = video_devdata(file);
496 	struct soc_camera_device *icd = dev_get_drvdata(vdev->parent);
497 	struct soc_camera_link *icl = to_soc_camera_link(icd);
498 	struct soc_camera_host *ici;
499 	int ret;
500 
501 	if (!to_soc_camera_control(icd))
502 		/* No device driver attached */
503 		return -ENODEV;
504 
505 	ici = to_soc_camera_host(icd->parent);
506 
507 	if (!try_module_get(ici->ops->owner)) {
508 		dev_err(icd->pdev, "Couldn't lock capture bus driver.\n");
509 		return -EINVAL;
510 	}
511 
512 	icd->use_count++;
513 
514 	/* Now we really have to activate the camera */
515 	if (icd->use_count == 1) {
516 		/* Restore parameters before the last close() per V4L2 API */
517 		struct v4l2_format f = {
518 			.type = V4L2_BUF_TYPE_VIDEO_CAPTURE,
519 			.fmt.pix = {
520 				.width		= icd->user_width,
521 				.height		= icd->user_height,
522 				.field		= icd->field,
523 				.colorspace	= icd->colorspace,
524 				.pixelformat	=
525 					icd->current_fmt->host_fmt->fourcc,
526 			},
527 		};
528 
529 		ret = soc_camera_power_on(icd, icl);
530 		if (ret < 0)
531 			goto epower;
532 
533 		/* The camera could have been already on, try to reset */
534 		if (icl->reset)
535 			icl->reset(icd->pdev);
536 
537 		ret = ici->ops->add(icd);
538 		if (ret < 0) {
539 			dev_err(icd->pdev, "Couldn't activate the camera: %d\n", ret);
540 			goto eiciadd;
541 		}
542 
543 		pm_runtime_enable(&icd->vdev->dev);
544 		ret = pm_runtime_resume(&icd->vdev->dev);
545 		if (ret < 0 && ret != -ENOSYS)
546 			goto eresume;
547 
548 		/*
549 		 * Try to configure with default parameters. Notice: this is the
550 		 * very first open, so, we cannot race against other calls,
551 		 * apart from someone else calling open() simultaneously, but
552 		 * .video_lock is protecting us against it.
553 		 */
554 		ret = soc_camera_set_fmt(icd, &f);
555 		if (ret < 0)
556 			goto esfmt;
557 
558 		if (ici->ops->init_videobuf) {
559 			ici->ops->init_videobuf(&icd->vb_vidq, icd);
560 		} else {
561 			ret = ici->ops->init_videobuf2(&icd->vb2_vidq, icd);
562 			if (ret < 0)
563 				goto einitvb;
564 		}
565 		v4l2_ctrl_handler_setup(&icd->ctrl_handler);
566 	}
567 
568 	file->private_data = icd;
569 	dev_dbg(icd->pdev, "camera device open\n");
570 
571 	return 0;
572 
573 	/*
574 	 * First four errors are entered with the .video_lock held
575 	 * and use_count == 1
576 	 */
577 einitvb:
578 esfmt:
579 	pm_runtime_disable(&icd->vdev->dev);
580 eresume:
581 	ici->ops->remove(icd);
582 eiciadd:
583 	soc_camera_power_off(icd, icl);
584 epower:
585 	icd->use_count--;
586 	module_put(ici->ops->owner);
587 
588 	return ret;
589 }
590 
soc_camera_close(struct file * file)591 static int soc_camera_close(struct file *file)
592 {
593 	struct soc_camera_device *icd = file->private_data;
594 	struct soc_camera_host *ici = to_soc_camera_host(icd->parent);
595 
596 	icd->use_count--;
597 	if (!icd->use_count) {
598 		struct soc_camera_link *icl = to_soc_camera_link(icd);
599 
600 		pm_runtime_suspend(&icd->vdev->dev);
601 		pm_runtime_disable(&icd->vdev->dev);
602 
603 		if (ici->ops->init_videobuf2)
604 			vb2_queue_release(&icd->vb2_vidq);
605 		ici->ops->remove(icd);
606 
607 		soc_camera_power_off(icd, icl);
608 	}
609 
610 	if (icd->streamer == file)
611 		icd->streamer = NULL;
612 
613 	module_put(ici->ops->owner);
614 
615 	dev_dbg(icd->pdev, "camera device close\n");
616 
617 	return 0;
618 }
619 
soc_camera_read(struct file * file,char __user * buf,size_t count,loff_t * ppos)620 static ssize_t soc_camera_read(struct file *file, char __user *buf,
621 			       size_t count, loff_t *ppos)
622 {
623 	struct soc_camera_device *icd = file->private_data;
624 	int err = -EINVAL;
625 
626 	dev_err(icd->pdev, "camera device read not implemented\n");
627 
628 	return err;
629 }
630 
soc_camera_mmap(struct file * file,struct vm_area_struct * vma)631 static int soc_camera_mmap(struct file *file, struct vm_area_struct *vma)
632 {
633 	struct soc_camera_device *icd = file->private_data;
634 	struct soc_camera_host *ici = to_soc_camera_host(icd->parent);
635 	int err;
636 
637 	dev_dbg(icd->pdev, "mmap called, vma=0x%08lx\n", (unsigned long)vma);
638 
639 	if (icd->streamer != file)
640 		return -EBUSY;
641 
642 	if (ici->ops->init_videobuf)
643 		err = videobuf_mmap_mapper(&icd->vb_vidq, vma);
644 	else
645 		err = vb2_mmap(&icd->vb2_vidq, vma);
646 
647 	dev_dbg(icd->pdev, "vma start=0x%08lx, size=%ld, ret=%d\n",
648 		(unsigned long)vma->vm_start,
649 		(unsigned long)vma->vm_end - (unsigned long)vma->vm_start,
650 		err);
651 
652 	return err;
653 }
654 
soc_camera_poll(struct file * file,poll_table * pt)655 static unsigned int soc_camera_poll(struct file *file, poll_table *pt)
656 {
657 	struct soc_camera_device *icd = file->private_data;
658 	struct soc_camera_host *ici = to_soc_camera_host(icd->parent);
659 
660 	if (icd->streamer != file)
661 		return -EBUSY;
662 
663 	if (ici->ops->init_videobuf && list_empty(&icd->vb_vidq.stream)) {
664 		dev_err(icd->pdev, "Trying to poll with no queued buffers!\n");
665 		return POLLERR;
666 	}
667 
668 	return ici->ops->poll(file, pt);
669 }
670 
soc_camera_lock(struct vb2_queue * vq)671 void soc_camera_lock(struct vb2_queue *vq)
672 {
673 	struct soc_camera_device *icd = vb2_get_drv_priv(vq);
674 	mutex_lock(&icd->video_lock);
675 }
676 EXPORT_SYMBOL(soc_camera_lock);
677 
soc_camera_unlock(struct vb2_queue * vq)678 void soc_camera_unlock(struct vb2_queue *vq)
679 {
680 	struct soc_camera_device *icd = vb2_get_drv_priv(vq);
681 	mutex_unlock(&icd->video_lock);
682 }
683 EXPORT_SYMBOL(soc_camera_unlock);
684 
685 static struct v4l2_file_operations soc_camera_fops = {
686 	.owner		= THIS_MODULE,
687 	.open		= soc_camera_open,
688 	.release	= soc_camera_close,
689 	.unlocked_ioctl	= video_ioctl2,
690 	.read		= soc_camera_read,
691 	.mmap		= soc_camera_mmap,
692 	.poll		= soc_camera_poll,
693 };
694 
soc_camera_s_fmt_vid_cap(struct file * file,void * priv,struct v4l2_format * f)695 static int soc_camera_s_fmt_vid_cap(struct file *file, void *priv,
696 				    struct v4l2_format *f)
697 {
698 	struct soc_camera_device *icd = file->private_data;
699 	int ret;
700 
701 	WARN_ON(priv != file->private_data);
702 
703 	if (f->type != V4L2_BUF_TYPE_VIDEO_CAPTURE) {
704 		dev_warn(icd->pdev, "Wrong buf-type %d\n", f->type);
705 		return -EINVAL;
706 	}
707 
708 	if (icd->streamer && icd->streamer != file)
709 		return -EBUSY;
710 
711 	if (is_streaming(to_soc_camera_host(icd->parent), icd)) {
712 		dev_err(icd->pdev, "S_FMT denied: queue initialised\n");
713 		return -EBUSY;
714 	}
715 
716 	ret = soc_camera_set_fmt(icd, f);
717 
718 	if (!ret && !icd->streamer)
719 		icd->streamer = file;
720 
721 	return ret;
722 }
723 
soc_camera_enum_fmt_vid_cap(struct file * file,void * priv,struct v4l2_fmtdesc * f)724 static int soc_camera_enum_fmt_vid_cap(struct file *file, void  *priv,
725 				       struct v4l2_fmtdesc *f)
726 {
727 	struct soc_camera_device *icd = file->private_data;
728 	const struct soc_mbus_pixelfmt *format;
729 
730 	WARN_ON(priv != file->private_data);
731 
732 	if (f->index >= icd->num_user_formats)
733 		return -EINVAL;
734 
735 	format = icd->user_formats[f->index].host_fmt;
736 
737 	if (format->name)
738 		strlcpy(f->description, format->name, sizeof(f->description));
739 	f->pixelformat = format->fourcc;
740 	return 0;
741 }
742 
soc_camera_g_fmt_vid_cap(struct file * file,void * priv,struct v4l2_format * f)743 static int soc_camera_g_fmt_vid_cap(struct file *file, void *priv,
744 				    struct v4l2_format *f)
745 {
746 	struct soc_camera_device *icd = file->private_data;
747 	struct v4l2_pix_format *pix = &f->fmt.pix;
748 
749 	WARN_ON(priv != file->private_data);
750 
751 	if (f->type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
752 		return -EINVAL;
753 
754 	pix->width		= icd->user_width;
755 	pix->height		= icd->user_height;
756 	pix->bytesperline	= icd->bytesperline;
757 	pix->sizeimage		= icd->sizeimage;
758 	pix->field		= icd->field;
759 	pix->pixelformat	= icd->current_fmt->host_fmt->fourcc;
760 	pix->colorspace		= icd->colorspace;
761 	dev_dbg(icd->pdev, "current_fmt->fourcc: 0x%08x\n",
762 		icd->current_fmt->host_fmt->fourcc);
763 	return 0;
764 }
765 
soc_camera_querycap(struct file * file,void * priv,struct v4l2_capability * cap)766 static int soc_camera_querycap(struct file *file, void  *priv,
767 			       struct v4l2_capability *cap)
768 {
769 	struct soc_camera_device *icd = file->private_data;
770 	struct soc_camera_host *ici = to_soc_camera_host(icd->parent);
771 
772 	WARN_ON(priv != file->private_data);
773 
774 	strlcpy(cap->driver, ici->drv_name, sizeof(cap->driver));
775 	return ici->ops->querycap(ici, cap);
776 }
777 
soc_camera_streamon(struct file * file,void * priv,enum v4l2_buf_type i)778 static int soc_camera_streamon(struct file *file, void *priv,
779 			       enum v4l2_buf_type i)
780 {
781 	struct soc_camera_device *icd = file->private_data;
782 	struct soc_camera_host *ici = to_soc_camera_host(icd->parent);
783 	struct v4l2_subdev *sd = soc_camera_to_subdev(icd);
784 	int ret;
785 
786 	WARN_ON(priv != file->private_data);
787 
788 	if (i != V4L2_BUF_TYPE_VIDEO_CAPTURE)
789 		return -EINVAL;
790 
791 	if (icd->streamer != file)
792 		return -EBUSY;
793 
794 	/* This calls buf_queue from host driver's videobuf_queue_ops */
795 	if (ici->ops->init_videobuf)
796 		ret = videobuf_streamon(&icd->vb_vidq);
797 	else
798 		ret = vb2_streamon(&icd->vb2_vidq, i);
799 
800 	if (!ret)
801 		v4l2_subdev_call(sd, video, s_stream, 1);
802 
803 	return ret;
804 }
805 
soc_camera_streamoff(struct file * file,void * priv,enum v4l2_buf_type i)806 static int soc_camera_streamoff(struct file *file, void *priv,
807 				enum v4l2_buf_type i)
808 {
809 	struct soc_camera_device *icd = file->private_data;
810 	struct v4l2_subdev *sd = soc_camera_to_subdev(icd);
811 	struct soc_camera_host *ici = to_soc_camera_host(icd->parent);
812 
813 	WARN_ON(priv != file->private_data);
814 
815 	if (i != V4L2_BUF_TYPE_VIDEO_CAPTURE)
816 		return -EINVAL;
817 
818 	if (icd->streamer != file)
819 		return -EBUSY;
820 
821 	/*
822 	 * This calls buf_release from host driver's videobuf_queue_ops for all
823 	 * remaining buffers. When the last buffer is freed, stop capture
824 	 */
825 	if (ici->ops->init_videobuf)
826 		videobuf_streamoff(&icd->vb_vidq);
827 	else
828 		vb2_streamoff(&icd->vb2_vidq, i);
829 
830 	v4l2_subdev_call(sd, video, s_stream, 0);
831 
832 	return 0;
833 }
834 
soc_camera_cropcap(struct file * file,void * fh,struct v4l2_cropcap * a)835 static int soc_camera_cropcap(struct file *file, void *fh,
836 			      struct v4l2_cropcap *a)
837 {
838 	struct soc_camera_device *icd = file->private_data;
839 	struct soc_camera_host *ici = to_soc_camera_host(icd->parent);
840 
841 	return ici->ops->cropcap(icd, a);
842 }
843 
soc_camera_g_crop(struct file * file,void * fh,struct v4l2_crop * a)844 static int soc_camera_g_crop(struct file *file, void *fh,
845 			     struct v4l2_crop *a)
846 {
847 	struct soc_camera_device *icd = file->private_data;
848 	struct soc_camera_host *ici = to_soc_camera_host(icd->parent);
849 	int ret;
850 
851 	ret = ici->ops->get_crop(icd, a);
852 
853 	return ret;
854 }
855 
856 /*
857  * According to the V4L2 API, drivers shall not update the struct v4l2_crop
858  * argument with the actual geometry, instead, the user shall use G_CROP to
859  * retrieve it.
860  */
soc_camera_s_crop(struct file * file,void * fh,struct v4l2_crop * a)861 static int soc_camera_s_crop(struct file *file, void *fh,
862 			     struct v4l2_crop *a)
863 {
864 	struct soc_camera_device *icd = file->private_data;
865 	struct soc_camera_host *ici = to_soc_camera_host(icd->parent);
866 	struct v4l2_rect *rect = &a->c;
867 	struct v4l2_crop current_crop;
868 	int ret;
869 
870 	if (a->type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
871 		return -EINVAL;
872 
873 	dev_dbg(icd->pdev, "S_CROP(%ux%u@%u:%u)\n",
874 		rect->width, rect->height, rect->left, rect->top);
875 
876 	/* If get_crop fails, we'll let host and / or client drivers decide */
877 	ret = ici->ops->get_crop(icd, &current_crop);
878 
879 	/* Prohibit window size change with initialised buffers */
880 	if (ret < 0) {
881 		dev_err(icd->pdev,
882 			"S_CROP denied: getting current crop failed\n");
883 	} else if ((a->c.width == current_crop.c.width &&
884 		    a->c.height == current_crop.c.height) ||
885 		   !is_streaming(ici, icd)) {
886 		/* same size or not streaming - use .set_crop() */
887 		ret = ici->ops->set_crop(icd, a);
888 	} else if (ici->ops->set_livecrop) {
889 		ret = ici->ops->set_livecrop(icd, a);
890 	} else {
891 		dev_err(icd->pdev,
892 			"S_CROP denied: queue initialised and sizes differ\n");
893 		ret = -EBUSY;
894 	}
895 
896 	return ret;
897 }
898 
soc_camera_g_parm(struct file * file,void * fh,struct v4l2_streamparm * a)899 static int soc_camera_g_parm(struct file *file, void *fh,
900 			     struct v4l2_streamparm *a)
901 {
902 	struct soc_camera_device *icd = file->private_data;
903 	struct soc_camera_host *ici = to_soc_camera_host(icd->parent);
904 
905 	if (ici->ops->get_parm)
906 		return ici->ops->get_parm(icd, a);
907 
908 	return -ENOIOCTLCMD;
909 }
910 
soc_camera_s_parm(struct file * file,void * fh,struct v4l2_streamparm * a)911 static int soc_camera_s_parm(struct file *file, void *fh,
912 			     struct v4l2_streamparm *a)
913 {
914 	struct soc_camera_device *icd = file->private_data;
915 	struct soc_camera_host *ici = to_soc_camera_host(icd->parent);
916 
917 	if (ici->ops->set_parm)
918 		return ici->ops->set_parm(icd, a);
919 
920 	return -ENOIOCTLCMD;
921 }
922 
soc_camera_g_chip_ident(struct file * file,void * fh,struct v4l2_dbg_chip_ident * id)923 static int soc_camera_g_chip_ident(struct file *file, void *fh,
924 				   struct v4l2_dbg_chip_ident *id)
925 {
926 	struct soc_camera_device *icd = file->private_data;
927 	struct v4l2_subdev *sd = soc_camera_to_subdev(icd);
928 
929 	return v4l2_subdev_call(sd, core, g_chip_ident, id);
930 }
931 
932 #ifdef CONFIG_VIDEO_ADV_DEBUG
soc_camera_g_register(struct file * file,void * fh,struct v4l2_dbg_register * reg)933 static int soc_camera_g_register(struct file *file, void *fh,
934 				 struct v4l2_dbg_register *reg)
935 {
936 	struct soc_camera_device *icd = file->private_data;
937 	struct v4l2_subdev *sd = soc_camera_to_subdev(icd);
938 
939 	return v4l2_subdev_call(sd, core, g_register, reg);
940 }
941 
soc_camera_s_register(struct file * file,void * fh,struct v4l2_dbg_register * reg)942 static int soc_camera_s_register(struct file *file, void *fh,
943 				 struct v4l2_dbg_register *reg)
944 {
945 	struct soc_camera_device *icd = file->private_data;
946 	struct v4l2_subdev *sd = soc_camera_to_subdev(icd);
947 
948 	return v4l2_subdev_call(sd, core, s_register, reg);
949 }
950 #endif
951 
952 static int soc_camera_probe(struct soc_camera_device *icd);
953 
954 /* So far this function cannot fail */
scan_add_host(struct soc_camera_host * ici)955 static void scan_add_host(struct soc_camera_host *ici)
956 {
957 	struct soc_camera_device *icd;
958 
959 	mutex_lock(&list_lock);
960 
961 	list_for_each_entry(icd, &devices, list) {
962 		if (icd->iface == ici->nr) {
963 			int ret;
964 
965 			icd->parent = ici->v4l2_dev.dev;
966 			ret = soc_camera_probe(icd);
967 		}
968 	}
969 
970 	mutex_unlock(&list_lock);
971 }
972 
973 #ifdef CONFIG_I2C_BOARDINFO
soc_camera_init_i2c(struct soc_camera_device * icd,struct soc_camera_link * icl)974 static int soc_camera_init_i2c(struct soc_camera_device *icd,
975 			       struct soc_camera_link *icl)
976 {
977 	struct i2c_client *client;
978 	struct soc_camera_host *ici = to_soc_camera_host(icd->parent);
979 	struct i2c_adapter *adap = i2c_get_adapter(icl->i2c_adapter_id);
980 	struct v4l2_subdev *subdev;
981 
982 	if (!adap) {
983 		dev_err(icd->pdev, "Cannot get I2C adapter #%d. No driver?\n",
984 			icl->i2c_adapter_id);
985 		goto ei2cga;
986 	}
987 
988 	icl->board_info->platform_data = icl;
989 
990 	subdev = v4l2_i2c_new_subdev_board(&ici->v4l2_dev, adap,
991 				icl->board_info, NULL);
992 	if (!subdev)
993 		goto ei2cnd;
994 
995 	client = v4l2_get_subdevdata(subdev);
996 
997 	/* Use to_i2c_client(dev) to recover the i2c client */
998 	icd->control = &client->dev;
999 
1000 	return 0;
1001 ei2cnd:
1002 	i2c_put_adapter(adap);
1003 ei2cga:
1004 	return -ENODEV;
1005 }
1006 
soc_camera_free_i2c(struct soc_camera_device * icd)1007 static void soc_camera_free_i2c(struct soc_camera_device *icd)
1008 {
1009 	struct i2c_client *client =
1010 		to_i2c_client(to_soc_camera_control(icd));
1011 	struct i2c_adapter *adap = client->adapter;
1012 
1013 	icd->control = NULL;
1014 	v4l2_device_unregister_subdev(i2c_get_clientdata(client));
1015 	i2c_unregister_device(client);
1016 	i2c_put_adapter(adap);
1017 }
1018 #else
1019 #define soc_camera_init_i2c(icd, icl)	(-ENODEV)
1020 #define soc_camera_free_i2c(icd)	do {} while (0)
1021 #endif
1022 
1023 static int soc_camera_video_start(struct soc_camera_device *icd);
1024 static int video_dev_create(struct soc_camera_device *icd);
1025 /* Called during host-driver probe */
soc_camera_probe(struct soc_camera_device * icd)1026 static int soc_camera_probe(struct soc_camera_device *icd)
1027 {
1028 	struct soc_camera_host *ici = to_soc_camera_host(icd->parent);
1029 	struct soc_camera_link *icl = to_soc_camera_link(icd);
1030 	struct device *control = NULL;
1031 	struct v4l2_subdev *sd;
1032 	struct v4l2_mbus_framefmt mf;
1033 	int ret;
1034 
1035 	dev_info(icd->pdev, "Probing %s\n", dev_name(icd->pdev));
1036 
1037 	/*
1038 	 * Currently the subdev with the largest number of controls (13) is
1039 	 * ov6550. So let's pick 16 as a hint for the control handler. Note
1040 	 * that this is a hint only: too large and you waste some memory, too
1041 	 * small and there is a (very) small performance hit when looking up
1042 	 * controls in the internal hash.
1043 	 */
1044 	ret = v4l2_ctrl_handler_init(&icd->ctrl_handler, 16);
1045 	if (ret < 0)
1046 		return ret;
1047 
1048 	ret = regulator_bulk_get(icd->pdev, icl->num_regulators,
1049 				 icl->regulators);
1050 	if (ret < 0)
1051 		goto ereg;
1052 
1053 	/*
1054 	 * This will not yet call v4l2_subdev_core_ops::s_power(1), because the
1055 	 * subdevice has not been initialised yet. We'll have to call it once
1056 	 * again after initialisation, even though it shouldn't be needed, we
1057 	 * don't do any IO here.
1058 	 */
1059 	ret = soc_camera_power_on(icd, icl);
1060 	if (ret < 0)
1061 		goto epower;
1062 
1063 	/* The camera could have been already on, try to reset */
1064 	if (icl->reset)
1065 		icl->reset(icd->pdev);
1066 
1067 	ret = ici->ops->add(icd);
1068 	if (ret < 0)
1069 		goto eadd;
1070 
1071 	/* Must have icd->vdev before registering the device */
1072 	ret = video_dev_create(icd);
1073 	if (ret < 0)
1074 		goto evdc;
1075 
1076 	/* Non-i2c cameras, e.g., soc_camera_platform, have no board_info */
1077 	if (icl->board_info) {
1078 		ret = soc_camera_init_i2c(icd, icl);
1079 		if (ret < 0)
1080 			goto eadddev;
1081 	} else if (!icl->add_device || !icl->del_device) {
1082 		ret = -EINVAL;
1083 		goto eadddev;
1084 	} else {
1085 		if (icl->module_name)
1086 			ret = request_module(icl->module_name);
1087 
1088 		ret = icl->add_device(icd);
1089 		if (ret < 0)
1090 			goto eadddev;
1091 
1092 		/*
1093 		 * FIXME: this is racy, have to use driver-binding notification,
1094 		 * when it is available
1095 		 */
1096 		control = to_soc_camera_control(icd);
1097 		if (!control || !control->driver || !dev_get_drvdata(control) ||
1098 		    !try_module_get(control->driver->owner)) {
1099 			icl->del_device(icd);
1100 			ret = -ENODEV;
1101 			goto enodrv;
1102 		}
1103 	}
1104 
1105 	sd = soc_camera_to_subdev(icd);
1106 	sd->grp_id = soc_camera_grp_id(icd);
1107 	v4l2_set_subdev_hostdata(sd, icd);
1108 
1109 	if (v4l2_ctrl_add_handler(&icd->ctrl_handler, sd->ctrl_handler))
1110 		goto ectrl;
1111 
1112 	/* At this point client .probe() should have run already */
1113 	ret = soc_camera_init_user_formats(icd);
1114 	if (ret < 0)
1115 		goto eiufmt;
1116 
1117 	icd->field = V4L2_FIELD_ANY;
1118 
1119 	/*
1120 	 * ..._video_start() will create a device node, video_register_device()
1121 	 * itself is protected against concurrent open() calls, but we also have
1122 	 * to protect our data.
1123 	 */
1124 	mutex_lock(&icd->video_lock);
1125 
1126 	ret = soc_camera_video_start(icd);
1127 	if (ret < 0)
1128 		goto evidstart;
1129 
1130 	ret = v4l2_subdev_call(sd, core, s_power, 1);
1131 	if (ret < 0 && ret != -ENOIOCTLCMD)
1132 		goto esdpwr;
1133 
1134 	/* Try to improve our guess of a reasonable window format */
1135 	if (!v4l2_subdev_call(sd, video, g_mbus_fmt, &mf)) {
1136 		icd->user_width		= mf.width;
1137 		icd->user_height	= mf.height;
1138 		icd->colorspace		= mf.colorspace;
1139 		icd->field		= mf.field;
1140 	}
1141 
1142 	ici->ops->remove(icd);
1143 
1144 	soc_camera_power_off(icd, icl);
1145 
1146 	mutex_unlock(&icd->video_lock);
1147 
1148 	return 0;
1149 
1150 esdpwr:
1151 	video_unregister_device(icd->vdev);
1152 evidstart:
1153 	mutex_unlock(&icd->video_lock);
1154 	soc_camera_free_user_formats(icd);
1155 eiufmt:
1156 ectrl:
1157 	if (icl->board_info) {
1158 		soc_camera_free_i2c(icd);
1159 	} else {
1160 		icl->del_device(icd);
1161 		module_put(control->driver->owner);
1162 	}
1163 enodrv:
1164 eadddev:
1165 	video_device_release(icd->vdev);
1166 	icd->vdev = NULL;
1167 evdc:
1168 	ici->ops->remove(icd);
1169 eadd:
1170 	soc_camera_power_off(icd, icl);
1171 epower:
1172 	regulator_bulk_free(icl->num_regulators, icl->regulators);
1173 ereg:
1174 	v4l2_ctrl_handler_free(&icd->ctrl_handler);
1175 	return ret;
1176 }
1177 
1178 /*
1179  * This is called on device_unregister, which only means we have to disconnect
1180  * from the host, but not remove ourselves from the device list
1181  */
soc_camera_remove(struct soc_camera_device * icd)1182 static int soc_camera_remove(struct soc_camera_device *icd)
1183 {
1184 	struct soc_camera_link *icl = to_soc_camera_link(icd);
1185 	struct video_device *vdev = icd->vdev;
1186 
1187 	BUG_ON(!icd->parent);
1188 
1189 	v4l2_ctrl_handler_free(&icd->ctrl_handler);
1190 	if (vdev) {
1191 		video_unregister_device(vdev);
1192 		icd->vdev = NULL;
1193 	}
1194 
1195 	if (icl->board_info) {
1196 		soc_camera_free_i2c(icd);
1197 	} else {
1198 		struct device_driver *drv = to_soc_camera_control(icd)->driver;
1199 		if (drv) {
1200 			icl->del_device(icd);
1201 			module_put(drv->owner);
1202 		}
1203 	}
1204 	soc_camera_free_user_formats(icd);
1205 
1206 	regulator_bulk_free(icl->num_regulators, icl->regulators);
1207 
1208 	return 0;
1209 }
1210 
default_cropcap(struct soc_camera_device * icd,struct v4l2_cropcap * a)1211 static int default_cropcap(struct soc_camera_device *icd,
1212 			   struct v4l2_cropcap *a)
1213 {
1214 	struct v4l2_subdev *sd = soc_camera_to_subdev(icd);
1215 	return v4l2_subdev_call(sd, video, cropcap, a);
1216 }
1217 
default_g_crop(struct soc_camera_device * icd,struct v4l2_crop * a)1218 static int default_g_crop(struct soc_camera_device *icd, struct v4l2_crop *a)
1219 {
1220 	struct v4l2_subdev *sd = soc_camera_to_subdev(icd);
1221 	return v4l2_subdev_call(sd, video, g_crop, a);
1222 }
1223 
default_s_crop(struct soc_camera_device * icd,struct v4l2_crop * a)1224 static int default_s_crop(struct soc_camera_device *icd, struct v4l2_crop *a)
1225 {
1226 	struct v4l2_subdev *sd = soc_camera_to_subdev(icd);
1227 	return v4l2_subdev_call(sd, video, s_crop, a);
1228 }
1229 
default_g_parm(struct soc_camera_device * icd,struct v4l2_streamparm * parm)1230 static int default_g_parm(struct soc_camera_device *icd,
1231 			  struct v4l2_streamparm *parm)
1232 {
1233 	struct v4l2_subdev *sd = soc_camera_to_subdev(icd);
1234 	return v4l2_subdev_call(sd, video, g_parm, parm);
1235 }
1236 
default_s_parm(struct soc_camera_device * icd,struct v4l2_streamparm * parm)1237 static int default_s_parm(struct soc_camera_device *icd,
1238 			  struct v4l2_streamparm *parm)
1239 {
1240 	struct v4l2_subdev *sd = soc_camera_to_subdev(icd);
1241 	return v4l2_subdev_call(sd, video, s_parm, parm);
1242 }
1243 
default_enum_fsizes(struct soc_camera_device * icd,struct v4l2_frmsizeenum * fsize)1244 static int default_enum_fsizes(struct soc_camera_device *icd,
1245 			  struct v4l2_frmsizeenum *fsize)
1246 {
1247 	int ret;
1248 	struct v4l2_subdev *sd = soc_camera_to_subdev(icd);
1249 	const struct soc_camera_format_xlate *xlate;
1250 	__u32 pixfmt = fsize->pixel_format;
1251 	struct v4l2_frmsizeenum fsize_mbus = *fsize;
1252 
1253 	xlate = soc_camera_xlate_by_fourcc(icd, pixfmt);
1254 	if (!xlate)
1255 		return -EINVAL;
1256 	/* map xlate-code to pixel_format, sensor only handle xlate-code*/
1257 	fsize_mbus.pixel_format = xlate->code;
1258 
1259 	ret = v4l2_subdev_call(sd, video, enum_mbus_fsizes, &fsize_mbus);
1260 	if (ret < 0)
1261 		return ret;
1262 
1263 	*fsize = fsize_mbus;
1264 	fsize->pixel_format = pixfmt;
1265 
1266 	return 0;
1267 }
1268 
soc_camera_host_register(struct soc_camera_host * ici)1269 int soc_camera_host_register(struct soc_camera_host *ici)
1270 {
1271 	struct soc_camera_host *ix;
1272 	int ret;
1273 
1274 	if (!ici || !ici->ops ||
1275 	    !ici->ops->try_fmt ||
1276 	    !ici->ops->set_fmt ||
1277 	    !ici->ops->set_bus_param ||
1278 	    !ici->ops->querycap ||
1279 	    ((!ici->ops->init_videobuf ||
1280 	      !ici->ops->reqbufs) &&
1281 	     !ici->ops->init_videobuf2) ||
1282 	    !ici->ops->add ||
1283 	    !ici->ops->remove ||
1284 	    !ici->ops->poll ||
1285 	    !ici->v4l2_dev.dev)
1286 		return -EINVAL;
1287 
1288 	if (!ici->ops->set_crop)
1289 		ici->ops->set_crop = default_s_crop;
1290 	if (!ici->ops->get_crop)
1291 		ici->ops->get_crop = default_g_crop;
1292 	if (!ici->ops->cropcap)
1293 		ici->ops->cropcap = default_cropcap;
1294 	if (!ici->ops->set_parm)
1295 		ici->ops->set_parm = default_s_parm;
1296 	if (!ici->ops->get_parm)
1297 		ici->ops->get_parm = default_g_parm;
1298 	if (!ici->ops->enum_fsizes)
1299 		ici->ops->enum_fsizes = default_enum_fsizes;
1300 
1301 	mutex_lock(&list_lock);
1302 	list_for_each_entry(ix, &hosts, list) {
1303 		if (ix->nr == ici->nr) {
1304 			ret = -EBUSY;
1305 			goto edevreg;
1306 		}
1307 	}
1308 
1309 	ret = v4l2_device_register(ici->v4l2_dev.dev, &ici->v4l2_dev);
1310 	if (ret < 0)
1311 		goto edevreg;
1312 
1313 	list_add_tail(&ici->list, &hosts);
1314 	mutex_unlock(&list_lock);
1315 
1316 	scan_add_host(ici);
1317 
1318 	return 0;
1319 
1320 edevreg:
1321 	mutex_unlock(&list_lock);
1322 	return ret;
1323 }
1324 EXPORT_SYMBOL(soc_camera_host_register);
1325 
1326 /* Unregister all clients! */
soc_camera_host_unregister(struct soc_camera_host * ici)1327 void soc_camera_host_unregister(struct soc_camera_host *ici)
1328 {
1329 	struct soc_camera_device *icd;
1330 
1331 	mutex_lock(&list_lock);
1332 
1333 	list_del(&ici->list);
1334 	list_for_each_entry(icd, &devices, list)
1335 		if (icd->iface == ici->nr && to_soc_camera_control(icd))
1336 			soc_camera_remove(icd);
1337 
1338 	mutex_unlock(&list_lock);
1339 
1340 	v4l2_device_unregister(&ici->v4l2_dev);
1341 }
1342 EXPORT_SYMBOL(soc_camera_host_unregister);
1343 
1344 /* Image capture device */
soc_camera_device_register(struct soc_camera_device * icd)1345 static int soc_camera_device_register(struct soc_camera_device *icd)
1346 {
1347 	struct soc_camera_device *ix;
1348 	int num = -1, i;
1349 
1350 	for (i = 0; i < 256 && num < 0; i++) {
1351 		num = i;
1352 		/* Check if this index is available on this interface */
1353 		list_for_each_entry(ix, &devices, list) {
1354 			if (ix->iface == icd->iface && ix->devnum == i) {
1355 				num = -1;
1356 				break;
1357 			}
1358 		}
1359 	}
1360 
1361 	if (num < 0)
1362 		/*
1363 		 * ok, we have 256 cameras on this host...
1364 		 * man, stay reasonable...
1365 		 */
1366 		return -ENOMEM;
1367 
1368 	icd->devnum		= num;
1369 	icd->use_count		= 0;
1370 	icd->host_priv		= NULL;
1371 	mutex_init(&icd->video_lock);
1372 
1373 	list_add_tail(&icd->list, &devices);
1374 
1375 	return 0;
1376 }
1377 
1378 static const struct v4l2_ioctl_ops soc_camera_ioctl_ops = {
1379 	.vidioc_querycap	 = soc_camera_querycap,
1380 	.vidioc_try_fmt_vid_cap  = soc_camera_try_fmt_vid_cap,
1381 	.vidioc_g_fmt_vid_cap    = soc_camera_g_fmt_vid_cap,
1382 	.vidioc_s_fmt_vid_cap    = soc_camera_s_fmt_vid_cap,
1383 	.vidioc_enum_fmt_vid_cap = soc_camera_enum_fmt_vid_cap,
1384 	.vidioc_enum_input	 = soc_camera_enum_input,
1385 	.vidioc_g_input		 = soc_camera_g_input,
1386 	.vidioc_s_input		 = soc_camera_s_input,
1387 	.vidioc_s_std		 = soc_camera_s_std,
1388 	.vidioc_g_std		 = soc_camera_g_std,
1389 	.vidioc_enum_framesizes  = soc_camera_enum_fsizes,
1390 	.vidioc_reqbufs		 = soc_camera_reqbufs,
1391 	.vidioc_querybuf	 = soc_camera_querybuf,
1392 	.vidioc_qbuf		 = soc_camera_qbuf,
1393 	.vidioc_dqbuf		 = soc_camera_dqbuf,
1394 	.vidioc_create_bufs	 = soc_camera_create_bufs,
1395 	.vidioc_prepare_buf	 = soc_camera_prepare_buf,
1396 	.vidioc_streamon	 = soc_camera_streamon,
1397 	.vidioc_streamoff	 = soc_camera_streamoff,
1398 	.vidioc_cropcap		 = soc_camera_cropcap,
1399 	.vidioc_g_crop		 = soc_camera_g_crop,
1400 	.vidioc_s_crop		 = soc_camera_s_crop,
1401 	.vidioc_g_parm		 = soc_camera_g_parm,
1402 	.vidioc_s_parm		 = soc_camera_s_parm,
1403 	.vidioc_g_chip_ident     = soc_camera_g_chip_ident,
1404 #ifdef CONFIG_VIDEO_ADV_DEBUG
1405 	.vidioc_g_register	 = soc_camera_g_register,
1406 	.vidioc_s_register	 = soc_camera_s_register,
1407 #endif
1408 };
1409 
video_dev_create(struct soc_camera_device * icd)1410 static int video_dev_create(struct soc_camera_device *icd)
1411 {
1412 	struct soc_camera_host *ici = to_soc_camera_host(icd->parent);
1413 	struct video_device *vdev = video_device_alloc();
1414 
1415 	if (!vdev)
1416 		return -ENOMEM;
1417 
1418 	strlcpy(vdev->name, ici->drv_name, sizeof(vdev->name));
1419 
1420 	vdev->parent		= icd->pdev;
1421 	vdev->current_norm	= V4L2_STD_UNKNOWN;
1422 	vdev->fops		= &soc_camera_fops;
1423 	vdev->ioctl_ops		= &soc_camera_ioctl_ops;
1424 	vdev->release		= video_device_release;
1425 	vdev->tvnorms		= V4L2_STD_UNKNOWN;
1426 	vdev->ctrl_handler	= &icd->ctrl_handler;
1427 	vdev->lock		= &icd->video_lock;
1428 
1429 	icd->vdev = vdev;
1430 
1431 	return 0;
1432 }
1433 
1434 /*
1435  * Called from soc_camera_probe() above (with .video_lock held???)
1436  */
soc_camera_video_start(struct soc_camera_device * icd)1437 static int soc_camera_video_start(struct soc_camera_device *icd)
1438 {
1439 	const struct device_type *type = icd->vdev->dev.type;
1440 	int ret;
1441 
1442 	if (!icd->parent)
1443 		return -ENODEV;
1444 
1445 	ret = video_register_device(icd->vdev, VFL_TYPE_GRABBER, -1);
1446 	if (ret < 0) {
1447 		dev_err(icd->pdev, "video_register_device failed: %d\n", ret);
1448 		return ret;
1449 	}
1450 
1451 	/* Restore device type, possibly set by the subdevice driver */
1452 	icd->vdev->dev.type = type;
1453 
1454 	return 0;
1455 }
1456 
soc_camera_pdrv_probe(struct platform_device * pdev)1457 static int __devinit soc_camera_pdrv_probe(struct platform_device *pdev)
1458 {
1459 	struct soc_camera_link *icl = pdev->dev.platform_data;
1460 	struct soc_camera_device *icd;
1461 	int ret;
1462 
1463 	if (!icl)
1464 		return -EINVAL;
1465 
1466 	icd = kzalloc(sizeof(*icd), GFP_KERNEL);
1467 	if (!icd)
1468 		return -ENOMEM;
1469 
1470 	icd->iface = icl->bus_id;
1471 	icd->link = icl;
1472 	icd->pdev = &pdev->dev;
1473 	platform_set_drvdata(pdev, icd);
1474 
1475 	ret = soc_camera_device_register(icd);
1476 	if (ret < 0)
1477 		goto escdevreg;
1478 
1479 	icd->user_width		= DEFAULT_WIDTH;
1480 	icd->user_height	= DEFAULT_HEIGHT;
1481 
1482 	return 0;
1483 
1484 escdevreg:
1485 	kfree(icd);
1486 
1487 	return ret;
1488 }
1489 
1490 /*
1491  * Only called on rmmod for each platform device, since they are not
1492  * hot-pluggable. Now we know, that all our users - hosts and devices have
1493  * been unloaded already
1494  */
soc_camera_pdrv_remove(struct platform_device * pdev)1495 static int __devexit soc_camera_pdrv_remove(struct platform_device *pdev)
1496 {
1497 	struct soc_camera_device *icd = platform_get_drvdata(pdev);
1498 
1499 	if (!icd)
1500 		return -EINVAL;
1501 
1502 	list_del(&icd->list);
1503 
1504 	kfree(icd);
1505 
1506 	return 0;
1507 }
1508 
1509 static struct platform_driver __refdata soc_camera_pdrv = {
1510 	.remove  = __devexit_p(soc_camera_pdrv_remove),
1511 	.driver  = {
1512 		.name	= "soc-camera-pdrv",
1513 		.owner	= THIS_MODULE,
1514 	},
1515 };
1516 
soc_camera_init(void)1517 static int __init soc_camera_init(void)
1518 {
1519 	return platform_driver_probe(&soc_camera_pdrv, soc_camera_pdrv_probe);
1520 }
1521 
soc_camera_exit(void)1522 static void __exit soc_camera_exit(void)
1523 {
1524 	platform_driver_unregister(&soc_camera_pdrv);
1525 }
1526 
1527 module_init(soc_camera_init);
1528 module_exit(soc_camera_exit);
1529 
1530 MODULE_DESCRIPTION("Image capture bus driver");
1531 MODULE_AUTHOR("Guennadi Liakhovetski <kernel@pengutronix.de>");
1532 MODULE_LICENSE("GPL");
1533 MODULE_ALIAS("platform:soc-camera-pdrv");
1534