mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-09 12:17:12 +09:00
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:
@@ -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(¶ms->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;
|
||||
|
||||
@@ -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(¶ms->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(¶ms->vnode.vdev.entity, 0);
|
||||
if (ret < 0)
|
||||
v4l2_err(¶ms->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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user