summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/media/platform/exynos/fimc-is/fimc-is-core.h1
-rw-r--r--drivers/media/platform/exynos/fimc-is/fimc-is-video-3aa.c6
-rw-r--r--drivers/media/platform/exynos/fimc-is/fimc-is-video-3aac.c6
-rw-r--r--drivers/media/platform/exynos/fimc-is/fimc-is-video-companion.c7
-rw-r--r--drivers/media/platform/exynos/fimc-is/fimc-is-video-isp.c6
-rw-r--r--drivers/media/platform/exynos/fimc-is/fimc-is-video-scc.c6
-rw-r--r--drivers/media/platform/exynos/fimc-is/fimc-is-video-scp.c6
-rw-r--r--drivers/media/platform/exynos/fimc-is/fimc-is-video-sensor.c11
-rw-r--r--drivers/media/platform/exynos/fimc-is/fimc-is-video-vdisc.c6
-rw-r--r--drivers/media/platform/exynos/fimc-is/fimc-is-video-vdiso.c6
10 files changed, 61 insertions, 0 deletions
diff --git a/drivers/media/platform/exynos/fimc-is/fimc-is-core.h b/drivers/media/platform/exynos/fimc-is/fimc-is-core.h
index 720806e019e8..5925a3612921 100644
--- a/drivers/media/platform/exynos/fimc-is/fimc-is-core.h
+++ b/drivers/media/platform/exynos/fimc-is/fimc-is-core.h
@@ -284,6 +284,7 @@ struct fimc_is_core {
bool use_module_check;
bool running_rear_camera;
bool running_front_camera;
+ bool fimc_is_companion_opened;
};
extern struct device *fimc_is_dev;
diff --git a/drivers/media/platform/exynos/fimc-is/fimc-is-video-3aa.c b/drivers/media/platform/exynos/fimc-is/fimc-is-video-3aa.c
index c06b3f0e6d81..08b023b09897 100644
--- a/drivers/media/platform/exynos/fimc-is/fimc-is-video-3aa.c
+++ b/drivers/media/platform/exynos/fimc-is/fimc-is-video-3aa.c
@@ -135,6 +135,12 @@ static int fimc_is_3aa_video_open(struct file *file)
else
core = container_of(video, struct fimc_is_core, video_3a1);
+ if (!core->fimc_is_companion_opened) {
+ pr_info("%s: /dev/video109 (companion) must be opened first\n",
+ __func__);
+ return -EINVAL;
+ }
+
ret = open_vctx(file, video, &vctx, FRAMEMGR_ID_3AA_GRP, FRAMEMGR_ID_3AAP);
if (ret) {
err("open_vctx is fail(%d)", ret);
diff --git a/drivers/media/platform/exynos/fimc-is/fimc-is-video-3aac.c b/drivers/media/platform/exynos/fimc-is/fimc-is-video-3aac.c
index 28387c6f3b2d..9f25ab4abcc1 100644
--- a/drivers/media/platform/exynos/fimc-is/fimc-is-video-3aac.c
+++ b/drivers/media/platform/exynos/fimc-is/fimc-is-video-3aac.c
@@ -129,6 +129,12 @@ static int fimc_is_3aac_video_open(struct file *file)
else
core = container_of(video, struct fimc_is_core, video_3a1c);
+ if (!core->fimc_is_companion_opened) {
+ pr_info("%s: /dev/video109 (companion) must be opened first\n",
+ __func__);
+ return -EINVAL;
+ }
+
ret = open_vctx(file, video, &vctx, FRAMEMGR_ID_INVALID, FRAMEMGR_ID_3AAC);
if (ret) {
err("open_vctx is fail(%d)", ret);
diff --git a/drivers/media/platform/exynos/fimc-is/fimc-is-video-companion.c b/drivers/media/platform/exynos/fimc-is/fimc-is-video-companion.c
index a1ed1e65e877..5ea30cd123e2 100644
--- a/drivers/media/platform/exynos/fimc-is/fimc-is-video-companion.c
+++ b/drivers/media/platform/exynos/fimc-is/fimc-is-video-companion.c
@@ -30,6 +30,7 @@
#include "fimc-is-device-companion.h"
#include "fimc-is-video.h"
+#include "fimc-is-core.h"
const struct v4l2_file_operations fimc_is_comp_video_fops;
const struct v4l2_ioctl_ops fimc_is_comp_video_ioctl_ops;
@@ -125,6 +126,7 @@ static int fimc_is_comp_video_open(struct file *file)
struct fimc_is_video_ctx *vctx;
struct fimc_is_device_companion *device;
struct platform_device *fimc_is_pdev;
+ struct fimc_is_core *core;
fimc_is_pdev = to_platform_device(fimc_is_dev);
exynos_fimc_is_cfg_cam_clk(fimc_is_pdev);
@@ -132,6 +134,7 @@ static int fimc_is_comp_video_open(struct file *file)
vctx = NULL;
video = video_drvdata(file);
device = container_of(video, struct fimc_is_device_companion, video);
+ core = device->private_data;
ret = open_vctx(file, video, &vctx, FRAMEMGR_ID_INVALID, FRAMEMGR_ID_INVALID);
if (ret) {
@@ -148,6 +151,7 @@ static int fimc_is_comp_video_open(struct file *file)
goto p_err;
}
+ core->fimc_is_companion_opened = 1;
p_err:
return ret;
}
@@ -158,11 +162,13 @@ static int fimc_is_comp_video_close(struct file *file)
struct fimc_is_video *video = NULL;
struct fimc_is_video_ctx *vctx = NULL;
struct fimc_is_device_companion *device = NULL;
+ struct fimc_is_core *core;
BUG_ON(!file);
video = video_drvdata(file);
device = container_of(video, struct fimc_is_device_companion, video);
+ core = device->private_data;
vctx = file->private_data;
if (!vctx) {
@@ -182,6 +188,7 @@ static int fimc_is_comp_video_close(struct file *file)
err("close_vctx is fail(%d)", ret);
p_err:
+ core->fimc_is_companion_opened = 0;
return ret;
}
diff --git a/drivers/media/platform/exynos/fimc-is/fimc-is-video-isp.c b/drivers/media/platform/exynos/fimc-is/fimc-is-video-isp.c
index 944fe62eabbf..c9d936dd71e9 100644
--- a/drivers/media/platform/exynos/fimc-is/fimc-is-video-isp.c
+++ b/drivers/media/platform/exynos/fimc-is/fimc-is-video-isp.c
@@ -95,6 +95,12 @@ static int fimc_is_isp_video_open(struct file *file)
video = video_drvdata(file);
core = container_of(video, struct fimc_is_core, video_isp);
+ if (!core->fimc_is_companion_opened) {
+ pr_info("%s: /dev/video109 (companion) must be opened first\n",
+ __func__);
+ return -EINVAL;
+ }
+
ret = open_vctx(file, video, &vctx, FRAMEMGR_ID_ISP_GRP, FRAMEMGR_ID_INVALID);
if (ret) {
err("open_vctx is fail(%d)", ret);
diff --git a/drivers/media/platform/exynos/fimc-is/fimc-is-video-scc.c b/drivers/media/platform/exynos/fimc-is/fimc-is-video-scc.c
index a14132d1711c..75704ae1b145 100644
--- a/drivers/media/platform/exynos/fimc-is/fimc-is-video-scc.c
+++ b/drivers/media/platform/exynos/fimc-is/fimc-is-video-scc.c
@@ -91,6 +91,12 @@ static int fimc_is_scc_video_open(struct file *file)
video = video_drvdata(file);
core = container_of(video, struct fimc_is_core, video_scc);
+ if (!core->fimc_is_companion_opened) {
+ pr_info("%s: /dev/video109 (companion) must be opened first\n",
+ __func__);
+ return -EINVAL;
+ }
+
ret = open_vctx(file, video, &vctx, FRAMEMGR_ID_INVALID, FRAMEMGR_ID_SCC);
if (ret) {
err("open_vctx is fail(%d)", ret);
diff --git a/drivers/media/platform/exynos/fimc-is/fimc-is-video-scp.c b/drivers/media/platform/exynos/fimc-is/fimc-is-video-scp.c
index 3b7e7c4ee8fb..2026260a6a17 100644
--- a/drivers/media/platform/exynos/fimc-is/fimc-is-video-scp.c
+++ b/drivers/media/platform/exynos/fimc-is/fimc-is-video-scp.c
@@ -91,6 +91,12 @@ static int fimc_is_scp_video_open(struct file *file)
video = video_drvdata(file);
core = container_of(video, struct fimc_is_core, video_scp);
+ if (!core->fimc_is_companion_opened) {
+ pr_info("%s: /dev/video109 (companion) must be opened first\n",
+ __func__);
+ return -EINVAL;
+ }
+
ret = open_vctx(file, video, &vctx, FRAMEMGR_ID_INVALID, FRAMEMGR_ID_SCP);
if (ret) {
err("open_vctx is fail(%d)", ret);
diff --git a/drivers/media/platform/exynos/fimc-is/fimc-is-video-sensor.c b/drivers/media/platform/exynos/fimc-is/fimc-is-video-sensor.c
index 7fa395623832..d1b194ac63bc 100644
--- a/drivers/media/platform/exynos/fimc-is/fimc-is-video-sensor.c
+++ b/drivers/media/platform/exynos/fimc-is/fimc-is-video-sensor.c
@@ -89,11 +89,22 @@ static int fimc_is_sen_video_open(struct file *file)
struct fimc_is_video *video;
struct fimc_is_video_ctx *vctx;
struct fimc_is_device_sensor *device;
+ struct platform_device *fimc_is_pdev;
+ struct fimc_is_core *core;
+
+ fimc_is_pdev = to_platform_device(fimc_is_dev);
+ core = dev_get_drvdata(fimc_is_dev);
vctx = NULL;
video = video_drvdata(file);
device = container_of(video, struct fimc_is_device_sensor, video);
+ if (!core->fimc_is_companion_opened) {
+ pr_info("%s: /dev/video109 (companion) must be opened first\n",
+ __func__);
+ return -EINVAL;
+ }
+
ret = open_vctx(file, video, &vctx, FRAMEMGR_ID_INVALID, FRAMEMGR_ID_SENSOR);
if (ret) {
err("open_vctx is fail(%d)", ret);
diff --git a/drivers/media/platform/exynos/fimc-is/fimc-is-video-vdisc.c b/drivers/media/platform/exynos/fimc-is/fimc-is-video-vdisc.c
index 8e9df9f5000f..0ce8579ff771 100644
--- a/drivers/media/platform/exynos/fimc-is/fimc-is-video-vdisc.c
+++ b/drivers/media/platform/exynos/fimc-is/fimc-is-video-vdisc.c
@@ -85,6 +85,12 @@ static int fimc_is_vdc_video_open(struct file *file)
video = video_drvdata(file);
core = container_of(video, struct fimc_is_core, video_vdc);
+ if (!core->fimc_is_companion_opened) {
+ pr_info("%s: /dev/video109 (companion) must be opened first\n",
+ __func__);
+ return -EINVAL;
+ }
+
ret = open_vctx(file, video, &vctx, FRAMEMGR_ID_INVALID, FRAMEMGR_ID_DIS);
if (ret) {
err("open_vctx is fail(%d)", ret);
diff --git a/drivers/media/platform/exynos/fimc-is/fimc-is-video-vdiso.c b/drivers/media/platform/exynos/fimc-is/fimc-is-video-vdiso.c
index c219bc5a56e2..cc670d0fcd12 100644
--- a/drivers/media/platform/exynos/fimc-is/fimc-is-video-vdiso.c
+++ b/drivers/media/platform/exynos/fimc-is/fimc-is-video-vdiso.c
@@ -86,6 +86,12 @@ static int fimc_is_vdo_video_open(struct file *file)
video = video_drvdata(file);
core = container_of(video, struct fimc_is_core, video_vdo);
+ if (!core->fimc_is_companion_opened) {
+ pr_info("%s: /dev/video109 (companion) must be opened first\n",
+ __func__);
+ return -EINVAL;
+ }
+
ret = open_vctx(file, video, &vctx, FRAMEMGR_ID_DIS_GRP, FRAMEMGR_ID_INVALID);
if (ret) {
err("open_vctx is fail(%d)", ret);