hc
2023-12-11 6778948f9de86c3cfaf36725a7c87dcff9ba247f
kernel/drivers/media/platform/rockchip/isp/isp_params.c
....@@ -146,11 +146,12 @@
146146 struct rkisp_buffer *params_buf = to_rkisp_buffer(vbuf);
147147 struct vb2_queue *vq = vb->vb2_queue;
148148 struct rkisp_isp_params_vdev *params_vdev = vq->drv_priv;
149
+ struct rkisp_device *dev = params_vdev->dev;
149150 void *first_param;
150151 unsigned long flags;
151152 unsigned int cur_frame_id = -1;
152153
153
- cur_frame_id = atomic_read(&params_vdev->dev->isp_sdev.frm_sync_seq) - 1;
154
+ cur_frame_id = atomic_read(&dev->isp_sdev.frm_sync_seq) - 1;
154155 if (params_vdev->first_params) {
155156 first_param = vb2_plane_vaddr(vb, 0);
156157 params_vdev->ops->save_first_param(params_vdev, first_param);
....@@ -159,16 +160,22 @@
159160 vb2_buffer_done(&params_buf->vb.vb2_buf, VB2_BUF_STATE_DONE);
160161 params_vdev->first_params = false;
161162 wake_up(&params_vdev->dev->sync_onoff);
162
- if (params_vdev->dev->is_first_double) {
163
- dev_info(params_vdev->dev->dev, "first params for fast\n");
164
- params_vdev->dev->is_first_double = false;
165
- rkisp_trigger_read_back(params_vdev->dev, false, false, false);
163
+ if (dev->is_first_double) {
164
+ dev_info(dev->dev, "first params for fast\n");
165
+ dev->is_first_double = false;
166
+ dev->sw_rd_cnt = 0;
167
+ if (dev->hw_dev->unite == ISP_UNITE_ONE) {
168
+ dev->unite_index = ISP_UNITE_LEFT;
169
+ dev->sw_rd_cnt += dev->hw_dev->is_multi_overflow ? 3 : 1;
170
+ }
171
+ params_vdev->rdbk_times = dev->sw_rd_cnt + 1;
172
+ rkisp_trigger_read_back(dev, false, false, false);
166173 }
167
- dev_info(params_vdev->dev->dev, "first params buf queue\n");
174
+ dev_info(dev->dev, "first params buf queue\n");
168175 return;
169176 }
170177
171
- if (params_vdev->dev->procfs.mode &
178
+ if (dev->procfs.mode &
172179 (RKISP_PROCFS_FIL_AIQ | RKISP_PROCFS_FIL_SW)) {
173180 vb2_buffer_done(&params_buf->vb.vb2_buf, VB2_BUF_STATE_DONE);
174181 return;
....@@ -208,9 +215,7 @@
208215 break;
209216 }
210217
211
- if (buf)
212
- vb2_buffer_done(&buf->vb.vb2_buf, VB2_BUF_STATE_ERROR);
213
- buf = NULL;
218
+ vb2_buffer_done(&buf->vb.vb2_buf, VB2_BUF_STATE_ERROR);
214219 }
215220
216221 if (params_vdev->cur_buf) {
....@@ -284,10 +289,21 @@
284289 return ret;
285290 }
286291
292
+static __poll_t rkisp_params_fop_poll(struct file *file, poll_table *wait)
293
+{
294
+ struct video_device *vdev = video_devdata(file);
295
+
296
+ /* buf done or subscribe event */
297
+ if (vdev->queue->owner == file->private_data)
298
+ return vb2_fop_poll(file, wait);
299
+ else
300
+ return v4l2_ctrl_poll(file, wait);
301
+}
302
+
287303 struct v4l2_file_operations rkisp_params_fops = {
288304 .mmap = vb2_fop_mmap,
289305 .unlocked_ioctl = video_ioctl2,
290
- .poll = vb2_fop_poll,
306
+ .poll = rkisp_params_fop_poll,
291307 .open = rkisp_params_fh_open,
292308 .release = rkisp_params_fop_release
293309 };
....@@ -395,8 +411,7 @@
395411 stream->out_isp_fmt.fmt_type == FMT_RGB)
396412 rkisp_unite_set_bits(dev, ISP3X_MI_WR_CTRL, mask,
397413 quantization == V4L2_QUANTIZATION_FULL_RANGE ?
398
- mask : 0,
399
- false, dev->hw_dev->is_unite);
414
+ mask : 0, false);
400415 dev->isp_sdev.quantization = quantization;
401416 }
402417 }