[media] exynos4-is: Move common functions to a separate module
Create a common module (exynos4-is-common.ko) for common functions used across the exynos4-is video device and subdev drivers. Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com> Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
parent
a44e3b206a
commit
045a1faca8
|
@ -8,12 +8,16 @@ config VIDEO_SAMSUNG_EXYNOS4_IS
|
|||
|
||||
if VIDEO_SAMSUNG_EXYNOS4_IS
|
||||
|
||||
config VIDEO_EXYNOS4_IS_COMMON
|
||||
tristate
|
||||
|
||||
config VIDEO_S5P_FIMC
|
||||
tristate "S5P/EXYNOS4 FIMC/CAMIF camera interface driver"
|
||||
depends on I2C
|
||||
select VIDEOBUF2_DMA_CONTIG
|
||||
select V4L2_MEM2MEM_DEV
|
||||
select MFD_SYSCON if OF
|
||||
select VIDEO_EXYNOS4_IS_COMMON
|
||||
help
|
||||
This is a V4L2 driver for Samsung S5P and EXYNOS4 SoC camera host
|
||||
interface and video postprocessor (FIMC) devices.
|
||||
|
@ -38,6 +42,7 @@ config VIDEO_EXYNOS_FIMC_LITE
|
|||
tristate "EXYNOS FIMC-LITE camera interface driver"
|
||||
depends on I2C
|
||||
select VIDEOBUF2_DMA_CONTIG
|
||||
select VIDEO_EXYNOS4_IS_COMMON
|
||||
help
|
||||
This is a V4L2 driver for Samsung EXYNOS4/5 SoC FIMC-LITE camera
|
||||
host interface.
|
||||
|
@ -58,4 +63,4 @@ config VIDEO_EXYNOS4_FIMC_IS
|
|||
To compile this driver as a module, choose M here: the
|
||||
module will be called exynos4-fimc-is.
|
||||
|
||||
endif # VIDEO_SAMSUNG_S5P_FIMC
|
||||
endif # VIDEO_SAMSUNG_EXYNOS4_IS
|
||||
|
|
|
@ -1,10 +1,13 @@
|
|||
s5p-fimc-objs := fimc-core.o fimc-reg.o fimc-m2m.o fimc-capture.o media-dev.o
|
||||
exynos-fimc-lite-objs += fimc-lite-reg.o fimc-lite.o
|
||||
s5p-csis-objs := mipi-csis.o
|
||||
exynos4-is-common-objs := common.o
|
||||
|
||||
exynos-fimc-is-objs := fimc-is.o fimc-isp.o fimc-is-sensor.o fimc-is-regs.o
|
||||
exynos-fimc-is-objs += fimc-is-param.o fimc-is-errno.o fimc-is-i2c.o
|
||||
s5p-csis-objs := mipi-csis.o
|
||||
|
||||
obj-$(CONFIG_VIDEO_S5P_MIPI_CSIS) += s5p-csis.o
|
||||
obj-$(CONFIG_VIDEO_EXYNOS_FIMC_LITE) += exynos-fimc-lite.o
|
||||
obj-$(CONFIG_VIDEO_EXYNOS4_FIMC_IS) += exynos-fimc-is.o
|
||||
obj-$(CONFIG_VIDEO_S5P_FIMC) += s5p-fimc.o
|
||||
obj-$(CONFIG_VIDEO_EXYNOS4_IS_COMMON) += exynos4-is-common.o
|
||||
|
|
41
drivers/media/platform/exynos4-is/common.c
Normal file
41
drivers/media/platform/exynos4-is/common.c
Normal file
|
@ -0,0 +1,41 @@
|
|||
/*
|
||||
* Samsung S5P/EXYNOS4 SoC Camera Subsystem driver
|
||||
*
|
||||
* Copyright (C) 2013 Samsung Electronics Co., Ltd.
|
||||
* Author: Sylwester Nawrocki <s.nawrocki@samsung.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#include <linux/module.h>
|
||||
#include <media/s5p_fimc.h>
|
||||
#include "common.h"
|
||||
|
||||
/* Called with the media graph mutex held or entity->stream_count > 0. */
|
||||
struct v4l2_subdev *fimc_find_remote_sensor(struct media_entity *entity)
|
||||
{
|
||||
struct media_pad *pad = &entity->pads[0];
|
||||
struct v4l2_subdev *sd;
|
||||
|
||||
while (pad->flags & MEDIA_PAD_FL_SINK) {
|
||||
/* source pad */
|
||||
pad = media_entity_remote_pad(pad);
|
||||
if (pad == NULL ||
|
||||
media_entity_type(pad->entity) != MEDIA_ENT_T_V4L2_SUBDEV)
|
||||
break;
|
||||
|
||||
sd = media_entity_to_v4l2_subdev(pad->entity);
|
||||
|
||||
if (sd->grp_id == GRP_ID_FIMC_IS_SENSOR ||
|
||||
sd->grp_id == GRP_ID_SENSOR)
|
||||
return sd;
|
||||
/* sink pad */
|
||||
pad = &sd->entity.pads[0];
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
EXPORT_SYMBOL(fimc_find_remote_sensor);
|
||||
|
||||
MODULE_LICENSE("GPL");
|
12
drivers/media/platform/exynos4-is/common.h
Normal file
12
drivers/media/platform/exynos4-is/common.h
Normal file
|
@ -0,0 +1,12 @@
|
|||
/*
|
||||
* Copyright (C) 2013 Samsung Electronics Co., Ltd.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#include <media/media-entity.h>
|
||||
#include <media/v4l2-subdev.h>
|
||||
|
||||
struct v4l2_subdev *fimc_find_remote_sensor(struct media_entity *entity);
|
|
@ -32,6 +32,7 @@
|
|||
#include <media/videobuf2-dma-contig.h>
|
||||
#include <media/s5p_fimc.h>
|
||||
|
||||
#include "common.h"
|
||||
#include "fimc-core.h"
|
||||
#include "fimc-lite.h"
|
||||
#include "fimc-lite-reg.h"
|
||||
|
@ -131,30 +132,6 @@ static const struct fimc_fmt *fimc_lite_find_format(const u32 *pixelformat,
|
|||
return def_fmt;
|
||||
}
|
||||
|
||||
/* Called with the media graph mutex held or @me stream_count > 0. */
|
||||
static struct v4l2_subdev *__find_remote_sensor(struct media_entity *me)
|
||||
{
|
||||
struct media_pad *pad = &me->pads[0];
|
||||
struct v4l2_subdev *sd;
|
||||
|
||||
while (pad->flags & MEDIA_PAD_FL_SINK) {
|
||||
/* source pad */
|
||||
pad = media_entity_remote_pad(pad);
|
||||
if (pad == NULL ||
|
||||
media_entity_type(pad->entity) != MEDIA_ENT_T_V4L2_SUBDEV)
|
||||
break;
|
||||
|
||||
sd = media_entity_to_v4l2_subdev(pad->entity);
|
||||
|
||||
if (sd->grp_id == GRP_ID_FIMC_IS_SENSOR ||
|
||||
sd->grp_id == GRP_ID_SENSOR)
|
||||
return sd;
|
||||
/* sink pad */
|
||||
pad = &sd->entity.pads[0];
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static int fimc_lite_hw_init(struct fimc_lite *fimc, bool isp_output)
|
||||
{
|
||||
struct fimc_source_info *si;
|
||||
|
@ -830,7 +807,7 @@ static int fimc_lite_streamon(struct file *file, void *priv,
|
|||
if (ret < 0)
|
||||
goto err_p_stop;
|
||||
|
||||
fimc->sensor = __find_remote_sensor(&fimc->subdev.entity);
|
||||
fimc->sensor = fimc_find_remote_sensor(&fimc->subdev.entity);
|
||||
|
||||
ret = vb2_ioctl_streamon(file, priv, type);
|
||||
if (!ret) {
|
||||
|
@ -1212,7 +1189,7 @@ static int fimc_lite_subdev_s_stream(struct v4l2_subdev *sd, int on)
|
|||
* The pipeline links are protected through entity.stream_count
|
||||
* so there is no need to take the media graph mutex here.
|
||||
*/
|
||||
fimc->sensor = __find_remote_sensor(&sd->entity);
|
||||
fimc->sensor = fimc_find_remote_sensor(&sd->entity);
|
||||
|
||||
if (atomic_read(&fimc->out_path) != FIMC_IO_ISP)
|
||||
return -ENOIOCTLCMD;
|
||||
|
|
Loading…
Reference in a new issue