From 6778948f9de86c3cfaf36725a7c87dcff9ba247f Mon Sep 17 00:00:00 2001 From: hc <hc@nodka.com> Date: Mon, 11 Dec 2023 08:20:59 +0000 Subject: [PATCH] kernel_5.10 no rt --- kernel/drivers/media/platform/rockchip/isp/isp_params.c | 41 ++++++++++++++++++++++++++++------------- 1 files changed, 28 insertions(+), 13 deletions(-) diff --git a/kernel/drivers/media/platform/rockchip/isp/isp_params.c b/kernel/drivers/media/platform/rockchip/isp/isp_params.c index 020ff5a..3db85a2 100644 --- a/kernel/drivers/media/platform/rockchip/isp/isp_params.c +++ b/kernel/drivers/media/platform/rockchip/isp/isp_params.c @@ -146,11 +146,12 @@ struct rkisp_buffer *params_buf = to_rkisp_buffer(vbuf); struct vb2_queue *vq = vb->vb2_queue; struct rkisp_isp_params_vdev *params_vdev = vq->drv_priv; + struct rkisp_device *dev = params_vdev->dev; void *first_param; unsigned long flags; unsigned int cur_frame_id = -1; - cur_frame_id = atomic_read(¶ms_vdev->dev->isp_sdev.frm_sync_seq) - 1; + cur_frame_id = atomic_read(&dev->isp_sdev.frm_sync_seq) - 1; if (params_vdev->first_params) { first_param = vb2_plane_vaddr(vb, 0); params_vdev->ops->save_first_param(params_vdev, first_param); @@ -159,16 +160,22 @@ vb2_buffer_done(¶ms_buf->vb.vb2_buf, VB2_BUF_STATE_DONE); params_vdev->first_params = false; wake_up(¶ms_vdev->dev->sync_onoff); - if (params_vdev->dev->is_first_double) { - dev_info(params_vdev->dev->dev, "first params for fast\n"); - params_vdev->dev->is_first_double = false; - rkisp_trigger_read_back(params_vdev->dev, false, false, false); + if (dev->is_first_double) { + dev_info(dev->dev, "first params for fast\n"); + dev->is_first_double = false; + dev->sw_rd_cnt = 0; + if (dev->hw_dev->unite == ISP_UNITE_ONE) { + dev->unite_index = ISP_UNITE_LEFT; + dev->sw_rd_cnt += dev->hw_dev->is_multi_overflow ? 3 : 1; + } + params_vdev->rdbk_times = dev->sw_rd_cnt + 1; + rkisp_trigger_read_back(dev, false, false, false); } - dev_info(params_vdev->dev->dev, "first params buf queue\n"); + dev_info(dev->dev, "first params buf queue\n"); return; } - if (params_vdev->dev->procfs.mode & + if (dev->procfs.mode & (RKISP_PROCFS_FIL_AIQ | RKISP_PROCFS_FIL_SW)) { vb2_buffer_done(¶ms_buf->vb.vb2_buf, VB2_BUF_STATE_DONE); return; @@ -208,9 +215,7 @@ break; } - if (buf) - vb2_buffer_done(&buf->vb.vb2_buf, VB2_BUF_STATE_ERROR); - buf = NULL; + vb2_buffer_done(&buf->vb.vb2_buf, VB2_BUF_STATE_ERROR); } if (params_vdev->cur_buf) { @@ -284,10 +289,21 @@ return ret; } +static __poll_t rkisp_params_fop_poll(struct file *file, poll_table *wait) +{ + struct video_device *vdev = video_devdata(file); + + /* buf done or subscribe event */ + if (vdev->queue->owner == file->private_data) + return vb2_fop_poll(file, wait); + else + return v4l2_ctrl_poll(file, wait); +} + struct v4l2_file_operations rkisp_params_fops = { .mmap = vb2_fop_mmap, .unlocked_ioctl = video_ioctl2, - .poll = vb2_fop_poll, + .poll = rkisp_params_fop_poll, .open = rkisp_params_fh_open, .release = rkisp_params_fop_release }; @@ -395,8 +411,7 @@ stream->out_isp_fmt.fmt_type == FMT_RGB) rkisp_unite_set_bits(dev, ISP3X_MI_WR_CTRL, mask, quantization == V4L2_QUANTIZATION_FULL_RANGE ? - mask : 0, - false, dev->hw_dev->is_unite); + mask : 0, false); dev->isp_sdev.quantization = quantization; } } -- Gitblit v1.6.2