[media] exynos4-is: Move common functions to a separate module
authorSylwester Nawrocki <s.nawrocki@samsung.com>
Mon, 10 Jun 2013 11:51:44 +0000 (08:51 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Thu, 13 Jun 2013 00:52:40 +0000 (21:52 -0300)
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>
drivers/media/platform/exynos4-is/Kconfig
drivers/media/platform/exynos4-is/Makefile
drivers/media/platform/exynos4-is/common.c [new file with mode: 0644]
drivers/media/platform/exynos4-is/common.h [new file with mode: 0644]
drivers/media/platform/exynos4-is/fimc-lite.c

index 6ff99b5849f9b78a3a2548a25c64d12b4069b980..c622532174e361800c00ef24a3cfa62d6a5272fc 100644 (file)
@@ -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
index f25f46377399daae5e2962486f7e5cc7f3af9809..c2ff29ba68561302c1c9d78c31d6229fa63e8bef 100644 (file)
@@ -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
diff --git a/drivers/media/platform/exynos4-is/common.c b/drivers/media/platform/exynos4-is/common.c
new file mode 100644 (file)
index 0000000..57f9010
--- /dev/null
@@ -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");
diff --git a/drivers/media/platform/exynos4-is/common.h b/drivers/media/platform/exynos4-is/common.h
new file mode 100644 (file)
index 0000000..3c39803
--- /dev/null
@@ -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);
index 5634799ab9441065b803f586c9821ad6a8f7155e..6daa88531e6ee179f9ee043404a008259a8bcfea 100644 (file)
@@ -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;