Commit 045a1fac authored by Sylwester Nawrocki's avatar Sylwester Nawrocki Committed by Mauro Carvalho Chehab

[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: default avatarSylwester Nawrocki <s.nawrocki@samsung.com>
Signed-off-by: default avatarKyungmin Park <kyungmin.park@samsung.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent a44e3b20
...@@ -8,12 +8,16 @@ config VIDEO_SAMSUNG_EXYNOS4_IS ...@@ -8,12 +8,16 @@ config VIDEO_SAMSUNG_EXYNOS4_IS
if VIDEO_SAMSUNG_EXYNOS4_IS if VIDEO_SAMSUNG_EXYNOS4_IS
config VIDEO_EXYNOS4_IS_COMMON
tristate
config VIDEO_S5P_FIMC config VIDEO_S5P_FIMC
tristate "S5P/EXYNOS4 FIMC/CAMIF camera interface driver" tristate "S5P/EXYNOS4 FIMC/CAMIF camera interface driver"
depends on I2C depends on I2C
select VIDEOBUF2_DMA_CONTIG select VIDEOBUF2_DMA_CONTIG
select V4L2_MEM2MEM_DEV select V4L2_MEM2MEM_DEV
select MFD_SYSCON if OF select MFD_SYSCON if OF
select VIDEO_EXYNOS4_IS_COMMON
help help
This is a V4L2 driver for Samsung S5P and EXYNOS4 SoC camera host This is a V4L2 driver for Samsung S5P and EXYNOS4 SoC camera host
interface and video postprocessor (FIMC) devices. interface and video postprocessor (FIMC) devices.
...@@ -38,6 +42,7 @@ config VIDEO_EXYNOS_FIMC_LITE ...@@ -38,6 +42,7 @@ config VIDEO_EXYNOS_FIMC_LITE
tristate "EXYNOS FIMC-LITE camera interface driver" tristate "EXYNOS FIMC-LITE camera interface driver"
depends on I2C depends on I2C
select VIDEOBUF2_DMA_CONTIG select VIDEOBUF2_DMA_CONTIG
select VIDEO_EXYNOS4_IS_COMMON
help help
This is a V4L2 driver for Samsung EXYNOS4/5 SoC FIMC-LITE camera This is a V4L2 driver for Samsung EXYNOS4/5 SoC FIMC-LITE camera
host interface. host interface.
...@@ -58,4 +63,4 @@ config VIDEO_EXYNOS4_FIMC_IS ...@@ -58,4 +63,4 @@ config VIDEO_EXYNOS4_FIMC_IS
To compile this driver as a module, choose M here: the To compile this driver as a module, choose M here: the
module will be called exynos4-fimc-is. module will be called exynos4-fimc-is.
endif # VIDEO_SAMSUNG_S5P_FIMC endif # VIDEO_SAMSUNG_EXYNOS4_IS
s5p-fimc-objs := fimc-core.o fimc-reg.o fimc-m2m.o fimc-capture.o media-dev.o 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 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.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 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_S5P_MIPI_CSIS) += s5p-csis.o
obj-$(CONFIG_VIDEO_EXYNOS_FIMC_LITE) += exynos-fimc-lite.o obj-$(CONFIG_VIDEO_EXYNOS_FIMC_LITE) += exynos-fimc-lite.o
obj-$(CONFIG_VIDEO_EXYNOS4_FIMC_IS) += exynos-fimc-is.o obj-$(CONFIG_VIDEO_EXYNOS4_FIMC_IS) += exynos-fimc-is.o
obj-$(CONFIG_VIDEO_S5P_FIMC) += s5p-fimc.o obj-$(CONFIG_VIDEO_S5P_FIMC) += s5p-fimc.o
obj-$(CONFIG_VIDEO_EXYNOS4_IS_COMMON) += exynos4-is-common.o
/*
* 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");
/*
* 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 @@ ...@@ -32,6 +32,7 @@
#include <media/videobuf2-dma-contig.h> #include <media/videobuf2-dma-contig.h>
#include <media/s5p_fimc.h> #include <media/s5p_fimc.h>
#include "common.h"
#include "fimc-core.h" #include "fimc-core.h"
#include "fimc-lite.h" #include "fimc-lite.h"
#include "fimc-lite-reg.h" #include "fimc-lite-reg.h"
...@@ -131,30 +132,6 @@ static const struct fimc_fmt *fimc_lite_find_format(const u32 *pixelformat, ...@@ -131,30 +132,6 @@ static const struct fimc_fmt *fimc_lite_find_format(const u32 *pixelformat,
return def_fmt; 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) static int fimc_lite_hw_init(struct fimc_lite *fimc, bool isp_output)
{ {
struct fimc_source_info *si; struct fimc_source_info *si;
...@@ -830,7 +807,7 @@ static int fimc_lite_streamon(struct file *file, void *priv, ...@@ -830,7 +807,7 @@ static int fimc_lite_streamon(struct file *file, void *priv,
if (ret < 0) if (ret < 0)
goto err_p_stop; 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); ret = vb2_ioctl_streamon(file, priv, type);
if (!ret) { if (!ret) {
...@@ -1212,7 +1189,7 @@ static int fimc_lite_subdev_s_stream(struct v4l2_subdev *sd, int on) ...@@ -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 * The pipeline links are protected through entity.stream_count
* so there is no need to take the media graph mutex here. * 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) if (atomic_read(&fimc->out_path) != FIMC_IO_ISP)
return -ENOIOCTLCMD; return -ENOIOCTLCMD;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment