xref: /openbmc/linux/drivers/media/platform/samsung/exynos4-is/common.c (revision 4f2c0a4acffbec01079c28f839422e64ddeff004)
1238c84f7SMauro Carvalho Chehab // SPDX-License-Identifier: GPL-2.0-only
2238c84f7SMauro Carvalho Chehab /*
3238c84f7SMauro Carvalho Chehab  * Samsung S5P/EXYNOS4 SoC Camera Subsystem driver
4238c84f7SMauro Carvalho Chehab  *
5238c84f7SMauro Carvalho Chehab  * Copyright (C) 2013 Samsung Electronics Co., Ltd.
6238c84f7SMauro Carvalho Chehab  * Author: Sylwester Nawrocki <s.nawrocki@samsung.com>
7238c84f7SMauro Carvalho Chehab  */
8238c84f7SMauro Carvalho Chehab 
9238c84f7SMauro Carvalho Chehab #include <linux/module.h>
10238c84f7SMauro Carvalho Chehab #include <media/drv-intf/exynos-fimc.h>
11238c84f7SMauro Carvalho Chehab #include "common.h"
12238c84f7SMauro Carvalho Chehab 
13238c84f7SMauro Carvalho Chehab /*
14238c84f7SMauro Carvalho Chehab  * Called with the media graph mutex held or media_entity_is_streaming(entity)
15238c84f7SMauro Carvalho Chehab  * true.
16238c84f7SMauro Carvalho Chehab  */
fimc_find_remote_sensor(struct media_entity * entity)17238c84f7SMauro Carvalho Chehab struct v4l2_subdev *fimc_find_remote_sensor(struct media_entity *entity)
18238c84f7SMauro Carvalho Chehab {
19238c84f7SMauro Carvalho Chehab 	struct media_pad *pad = &entity->pads[0];
20238c84f7SMauro Carvalho Chehab 	struct v4l2_subdev *sd;
21238c84f7SMauro Carvalho Chehab 
22238c84f7SMauro Carvalho Chehab 	while (pad->flags & MEDIA_PAD_FL_SINK) {
23238c84f7SMauro Carvalho Chehab 		/* source pad */
24*b2e44430SLaurent Pinchart 		pad = media_pad_remote_pad_first(pad);
25238c84f7SMauro Carvalho Chehab 		if (!pad || !is_media_entity_v4l2_subdev(pad->entity))
26238c84f7SMauro Carvalho Chehab 			break;
27238c84f7SMauro Carvalho Chehab 
28238c84f7SMauro Carvalho Chehab 		sd = media_entity_to_v4l2_subdev(pad->entity);
29238c84f7SMauro Carvalho Chehab 
30238c84f7SMauro Carvalho Chehab 		if (sd->grp_id == GRP_ID_FIMC_IS_SENSOR ||
31238c84f7SMauro Carvalho Chehab 		    sd->grp_id == GRP_ID_SENSOR)
32238c84f7SMauro Carvalho Chehab 			return sd;
33238c84f7SMauro Carvalho Chehab 		/* sink pad */
34238c84f7SMauro Carvalho Chehab 		pad = &sd->entity.pads[0];
35238c84f7SMauro Carvalho Chehab 	}
36238c84f7SMauro Carvalho Chehab 	return NULL;
37238c84f7SMauro Carvalho Chehab }
38238c84f7SMauro Carvalho Chehab EXPORT_SYMBOL(fimc_find_remote_sensor);
39238c84f7SMauro Carvalho Chehab 
__fimc_vidioc_querycap(struct device * dev,struct v4l2_capability * cap)40238c84f7SMauro Carvalho Chehab void __fimc_vidioc_querycap(struct device *dev, struct v4l2_capability *cap)
41238c84f7SMauro Carvalho Chehab {
42238c84f7SMauro Carvalho Chehab 	strscpy(cap->driver, dev->driver->name, sizeof(cap->driver));
43238c84f7SMauro Carvalho Chehab 	strscpy(cap->card, dev->driver->name, sizeof(cap->card));
44238c84f7SMauro Carvalho Chehab }
45238c84f7SMauro Carvalho Chehab EXPORT_SYMBOL(__fimc_vidioc_querycap);
46238c84f7SMauro Carvalho Chehab 
47238c84f7SMauro Carvalho Chehab MODULE_LICENSE("GPL");
48