[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
5 changed files with 66 additions and 28 deletions
|
@ -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
|
||||||
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
|
||||||
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
|
||||||
|
|
|
@ -1,10 +1,13 @@
|
||||||
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
|
||||||
|
|
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/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,
|
||||||
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,
|
||||||
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)
|
||||||
* 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;
|
||||||
|
|
Loading…
Add table
Reference in a new issue