162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Samsung S5P/EXYNOS4 SoC Camera Subsystem driver 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * Copyright (C) 2013 Samsung Electronics Co., Ltd. 662306a36Sopenharmony_ci * Author: Sylwester Nawrocki <s.nawrocki@samsung.com> 762306a36Sopenharmony_ci */ 862306a36Sopenharmony_ci 962306a36Sopenharmony_ci#include <linux/module.h> 1062306a36Sopenharmony_ci#include <media/drv-intf/exynos-fimc.h> 1162306a36Sopenharmony_ci#include "common.h" 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_ci/* 1462306a36Sopenharmony_ci * Called with the media graph mutex held or media_entity_is_streaming(entity) 1562306a36Sopenharmony_ci * true. 1662306a36Sopenharmony_ci */ 1762306a36Sopenharmony_cistruct v4l2_subdev *fimc_find_remote_sensor(struct media_entity *entity) 1862306a36Sopenharmony_ci{ 1962306a36Sopenharmony_ci struct media_pad *pad = &entity->pads[0]; 2062306a36Sopenharmony_ci struct v4l2_subdev *sd; 2162306a36Sopenharmony_ci 2262306a36Sopenharmony_ci while (pad->flags & MEDIA_PAD_FL_SINK) { 2362306a36Sopenharmony_ci /* source pad */ 2462306a36Sopenharmony_ci pad = media_pad_remote_pad_first(pad); 2562306a36Sopenharmony_ci if (!pad || !is_media_entity_v4l2_subdev(pad->entity)) 2662306a36Sopenharmony_ci break; 2762306a36Sopenharmony_ci 2862306a36Sopenharmony_ci sd = media_entity_to_v4l2_subdev(pad->entity); 2962306a36Sopenharmony_ci 3062306a36Sopenharmony_ci if (sd->grp_id == GRP_ID_FIMC_IS_SENSOR || 3162306a36Sopenharmony_ci sd->grp_id == GRP_ID_SENSOR) 3262306a36Sopenharmony_ci return sd; 3362306a36Sopenharmony_ci /* sink pad */ 3462306a36Sopenharmony_ci pad = &sd->entity.pads[0]; 3562306a36Sopenharmony_ci } 3662306a36Sopenharmony_ci return NULL; 3762306a36Sopenharmony_ci} 3862306a36Sopenharmony_ciEXPORT_SYMBOL(fimc_find_remote_sensor); 3962306a36Sopenharmony_ci 4062306a36Sopenharmony_civoid __fimc_vidioc_querycap(struct device *dev, struct v4l2_capability *cap) 4162306a36Sopenharmony_ci{ 4262306a36Sopenharmony_ci strscpy(cap->driver, dev->driver->name, sizeof(cap->driver)); 4362306a36Sopenharmony_ci strscpy(cap->card, dev->driver->name, sizeof(cap->card)); 4462306a36Sopenharmony_ci} 4562306a36Sopenharmony_ciEXPORT_SYMBOL(__fimc_vidioc_querycap); 4662306a36Sopenharmony_ci 4762306a36Sopenharmony_ciMODULE_LICENSE("GPL"); 48