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

[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
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -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
+4 −1
Original line number Diff line number Diff line
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 −0
Original line number Diff line number Diff line
/*
 * 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 −0
Original line number Diff line number Diff line
/*
 * 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);
+3 −26
Original line number Diff line number Diff line
@@ -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;