media: rockchip: isp: enable clock on when open param/stats/luma node

Signed-off-by: Hu Kejun <william.hu@rock-chips.com>
Change-Id: I700a355237b226d77aaac928ec2824005409c7af
This commit is contained in:
Hu Kejun
2020-03-27 09:35:42 +08:00
committed by Tao Huang
parent 261e809617
commit 96d3682cb4
3 changed files with 96 additions and 9 deletions

View File

@@ -77,12 +77,42 @@ static const struct v4l2_ioctl_ops rkisp_luma_ioctl = {
.vidioc_querycap = rkisp_luma_querycap
};
static int rkisp_luma_fh_open(struct file *filp)
{
struct rkisp_luma_vdev *params = video_drvdata(filp);
int ret;
ret = v4l2_fh_open(filp);
if (!ret) {
ret = v4l2_pipeline_pm_use(&params->vnode.vdev.entity, 1);
if (ret < 0)
vb2_fop_release(filp);
}
return ret;
}
static int rkisp_luma_fop_release(struct file *file)
{
struct rkisp_luma_vdev *luma = video_drvdata(file);
int ret;
ret = vb2_fop_release(file);
if (!ret) {
ret = v4l2_pipeline_pm_use(&luma->vnode.vdev.entity, 0);
if (ret < 0)
v4l2_err(&luma->dev->v4l2_dev,
"set pipeline power failed %d\n", ret);
}
return ret;
}
struct v4l2_file_operations rkisp_luma_fops = {
.mmap = vb2_fop_mmap,
.unlocked_ioctl = video_ioctl2,
.poll = vb2_fop_poll,
.open = v4l2_fh_open,
.release = vb2_fop_release
.open = rkisp_luma_fh_open,
.release = rkisp_luma_fop_release
};
static int rkisp_luma_vb2_queue_setup(struct vb2_queue *vq,
@@ -405,7 +435,6 @@ int rkisp_register_luma_vdev(struct rkisp_luma_vdev *luma_vdev,
strlcpy(vdev->name, "rkisp-mipi-luma", sizeof(vdev->name));
video_set_drvdata(vdev, luma_vdev);
vdev->ioctl_ops = &rkisp_luma_ioctl;
vdev->fops = &rkisp_luma_fops;
vdev->release = video_device_release_empty;

View File

@@ -206,12 +206,42 @@ static struct vb2_ops rkisp_params_vb2_ops = {
};
static int rkisp_params_fh_open(struct file *filp)
{
struct rkisp_isp_params_vdev *params = video_drvdata(filp);
int ret;
ret = v4l2_fh_open(filp);
if (!ret) {
ret = v4l2_pipeline_pm_use(&params->vnode.vdev.entity, 1);
if (ret < 0)
vb2_fop_release(filp);
}
return ret;
}
static int rkisp_params_fop_release(struct file *file)
{
struct rkisp_isp_params_vdev *params = video_drvdata(file);
int ret;
ret = vb2_fop_release(file);
if (!ret) {
ret = v4l2_pipeline_pm_use(&params->vnode.vdev.entity, 0);
if (ret < 0)
v4l2_err(&params->dev->v4l2_dev,
"set pipeline power failed %d\n", ret);
}
return ret;
}
struct v4l2_file_operations rkisp_params_fops = {
.mmap = vb2_fop_mmap,
.unlocked_ioctl = video_ioctl2,
.poll = vb2_fop_poll,
.open = v4l2_fh_open,
.release = vb2_fop_release
.open = rkisp_params_fh_open,
.release = rkisp_params_fop_release
};
static int
@@ -289,7 +319,6 @@ int rkisp_register_params_vdev(struct rkisp_isp_params_vdev *params_vdev,
strlcpy(vdev->name, PARAMS_NAME, sizeof(vdev->name));
video_set_drvdata(vdev, params_vdev);
vdev->ioctl_ops = &rkisp_params_ioctl;
vdev->fops = &rkisp_params_fops;
vdev->release = video_device_release_empty;

View File

@@ -79,12 +79,42 @@ static const struct v4l2_ioctl_ops rkisp_stats_ioctl = {
.vidioc_querycap = rkisp_stats_querycap
};
static int rkisp_stats_fh_open(struct file *filp)
{
struct rkisp_isp_stats_vdev *stats = video_drvdata(filp);
int ret;
ret = v4l2_fh_open(filp);
if (!ret) {
ret = v4l2_pipeline_pm_use(&stats->vnode.vdev.entity, 1);
if (ret < 0)
vb2_fop_release(filp);
}
return ret;
}
static int rkisp_stats_fop_release(struct file *file)
{
struct rkisp_isp_stats_vdev *stats = video_drvdata(file);
int ret;
ret = vb2_fop_release(file);
if (!ret) {
ret = v4l2_pipeline_pm_use(&stats->vnode.vdev.entity, 0);
if (ret < 0)
v4l2_err(&stats->dev->v4l2_dev,
"set pipeline power failed %d\n", ret);
}
return ret;
}
struct v4l2_file_operations rkisp_stats_fops = {
.mmap = vb2_fop_mmap,
.unlocked_ioctl = video_ioctl2,
.poll = vb2_fop_poll,
.open = v4l2_fh_open,
.release = vb2_fop_release
.open = rkisp_stats_fh_open,
.release = rkisp_stats_fop_release
};
static int rkisp_stats_vb2_queue_setup(struct vb2_queue *vq,
@@ -265,7 +295,6 @@ int rkisp_register_stats_vdev(struct rkisp_isp_stats_vdev *stats_vdev,
strlcpy(vdev->name, STATS_NAME, sizeof(vdev->name));
video_set_drvdata(vdev, stats_vdev);
vdev->ioctl_ops = &rkisp_stats_ioctl;
vdev->fops = &rkisp_stats_fops;
vdev->release = video_device_release_empty;