mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-08 11:50:43 +09:00
media: rockchip: isp/ispp: release ldch/fec buffer when close video
Signed-off-by: Hu Kejun <william.hu@rock-chips.com> Change-Id: I527e2658e69c11c415f3df4b604693d1ef18b360
This commit is contained in:
@@ -232,8 +232,12 @@ static int rkisp_params_fh_open(struct file *filp)
|
||||
static int rkisp_params_fop_release(struct file *file)
|
||||
{
|
||||
struct rkisp_isp_params_vdev *params = video_drvdata(file);
|
||||
struct video_device *vdev = video_devdata(file);
|
||||
int ret;
|
||||
|
||||
if (file->private_data == vdev->queue->owner && params->ops->fop_release)
|
||||
params->ops->fop_release(params);
|
||||
|
||||
ret = vb2_fop_release(file);
|
||||
if (!ret) {
|
||||
ret = v4l2_pipeline_pm_use(¶ms->vnode.vdev.entity, 0);
|
||||
|
||||
@@ -30,6 +30,7 @@ struct rkisp_isp_params_ops {
|
||||
void (*set_ldchbuf_size)(struct rkisp_isp_params_vdev *params_vdev,
|
||||
struct rkisp_ldchbuf_size *ldchsize);
|
||||
void (*stream_stop)(struct rkisp_isp_params_vdev *params_vdev);
|
||||
void (*fop_release)(struct rkisp_isp_params_vdev *params_vdev);
|
||||
};
|
||||
|
||||
/*
|
||||
|
||||
@@ -4033,6 +4033,12 @@ rkisp_params_stream_stop_v2x(struct rkisp_isp_params_vdev *params_vdev)
|
||||
rkisp_free_buffer(ispdev, &priv_val->buf_3dnr);
|
||||
}
|
||||
|
||||
static void
|
||||
rkisp_params_fop_release_v2x(struct rkisp_isp_params_vdev *params_vdev)
|
||||
{
|
||||
rkisp_deinit_ldch_buf(params_vdev);
|
||||
}
|
||||
|
||||
/* Not called when the camera active, thus not isr protection. */
|
||||
static void
|
||||
rkisp_params_disable_isp_v2x(struct rkisp_isp_params_vdev *params_vdev)
|
||||
@@ -4196,6 +4202,7 @@ static struct rkisp_isp_params_ops rkisp_isp_params_ops_tbl = {
|
||||
.get_ldchbuf_inf = rkisp_params_get_ldchbuf_inf_v2x,
|
||||
.set_ldchbuf_size = rkisp_params_set_ldchbuf_size_v2x,
|
||||
.stream_stop = rkisp_params_stream_stop_v2x,
|
||||
.fop_release = rkisp_params_fop_release_v2x,
|
||||
};
|
||||
|
||||
int rkisp_init_params_vdev_v21(struct rkisp_isp_params_vdev *params_vdev)
|
||||
|
||||
@@ -4333,6 +4333,12 @@ rkisp_params_set_ldchbuf_size_v2x(struct rkisp_isp_params_vdev *params_vdev,
|
||||
rkisp_init_ldch_buf(params_vdev, ldchsize);
|
||||
}
|
||||
|
||||
static void
|
||||
rkisp_params_fop_release_v2x(struct rkisp_isp_params_vdev *params_vdev)
|
||||
{
|
||||
rkisp_deinit_ldch_buf(params_vdev);
|
||||
}
|
||||
|
||||
/* Not called when the camera active, thus not isr protection. */
|
||||
static void
|
||||
rkisp_params_disable_isp_v2x(struct rkisp_isp_params_vdev *params_vdev)
|
||||
@@ -4482,6 +4488,7 @@ static struct rkisp_isp_params_ops rkisp_isp_params_ops_tbl = {
|
||||
.param_cfgsram = rkisp_params_cfgsram_v2x,
|
||||
.get_ldchbuf_inf = rkisp_params_get_ldchbuf_inf_v2x,
|
||||
.set_ldchbuf_size = rkisp_params_set_ldchbuf_size_v2x,
|
||||
.fop_release = rkisp_params_fop_release_v2x,
|
||||
};
|
||||
|
||||
int rkisp_init_params_vdev_v2x(struct rkisp_isp_params_vdev *params_vdev)
|
||||
|
||||
@@ -909,9 +909,13 @@ static int
|
||||
rkispp_param_fh_release(struct file *filp)
|
||||
{
|
||||
struct rkispp_params_vdev *params = video_drvdata(filp);
|
||||
struct video_device *vdev = video_devdata(filp);
|
||||
struct rkispp_device *isppdev = params->dev;
|
||||
int ret;
|
||||
|
||||
if (filp->private_data == vdev->queue->owner)
|
||||
rkispp_param_deinit_fecbuf(params);
|
||||
|
||||
ret = vb2_fop_release(filp);
|
||||
if (!ret) {
|
||||
ret = v4l2_pipeline_pm_use(¶ms->vnode.vdev.entity, 0);
|
||||
@@ -919,7 +923,6 @@ rkispp_param_fh_release(struct file *filp)
|
||||
v4l2_err(&isppdev->v4l2_dev,
|
||||
"pipeline power off failed %d\n", ret);
|
||||
}
|
||||
rkispp_param_deinit_fecbuf(params);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user