hc
2024-01-03 2f7c68cb55ecb7331f2381deb497c27155f32faf
kernel/drivers/media/platform/rockchip/isp/isp_params.c
....@@ -185,6 +185,28 @@
185185 spin_lock_irqsave(&params_vdev->config_lock, flags);
186186 list_add_tail(&params_buf->queue, &params_vdev->params);
187187 spin_unlock_irqrestore(&params_vdev->config_lock, flags);
188
+
189
+ if (params_vdev->dev->is_first_double) {
190
+ struct isp32_isp_params_cfg *params = params_buf->vaddr[0];
191
+ struct rkisp_buffer *buf;
192
+
193
+ if (!(params->module_cfg_update & ISP32_MODULE_RTT_FST))
194
+ return;
195
+ spin_lock_irqsave(&params_vdev->config_lock, flags);
196
+ while (!list_empty(&params_vdev->params)) {
197
+ buf = list_first_entry(&params_vdev->params,
198
+ struct rkisp_buffer, queue);
199
+ if (buf == params_buf)
200
+ break;
201
+ list_del(&buf->queue);
202
+ vb2_buffer_done(&buf->vb.vb2_buf, VB2_BUF_STATE_DONE);
203
+ }
204
+ spin_unlock_irqrestore(&params_vdev->config_lock, flags);
205
+ dev_info(params_vdev->dev->dev,
206
+ "first params:%d for rtt resume\n", params->frame_id);
207
+ params_vdev->dev->is_first_double = false;
208
+ rkisp_trigger_read_back(params_vdev->dev, false, false, false);
209
+ }
188210 }
189211
190212 static void rkisp_params_vb2_stop_streaming(struct vb2_queue *vq)
....@@ -193,36 +215,23 @@
193215 struct rkisp_device *dev = params_vdev->dev;
194216 struct rkisp_buffer *buf;
195217 unsigned long flags;
196
- int i;
197218
198219 /* stop params input firstly */
199220 spin_lock_irqsave(&params_vdev->config_lock, flags);
200221 params_vdev->streamon = false;
201222 wake_up(&dev->sync_onoff);
202
- spin_unlock_irqrestore(&params_vdev->config_lock, flags);
203
-
204
- for (i = 0; i < RKISP_ISP_PARAMS_REQ_BUFS_MAX; i++) {
205
- spin_lock_irqsave(&params_vdev->config_lock, flags);
206
- if (!list_empty(&params_vdev->params)) {
207
- buf = list_first_entry(&params_vdev->params,
208
- struct rkisp_buffer, queue);
209
- list_del(&buf->queue);
210
- spin_unlock_irqrestore(&params_vdev->config_lock,
211
- flags);
212
- } else {
213
- spin_unlock_irqrestore(&params_vdev->config_lock,
214
- flags);
215
- break;
216
- }
217
-
223
+ while (!list_empty(&params_vdev->params)) {
224
+ buf = list_first_entry(&params_vdev->params,
225
+ struct rkisp_buffer, queue);
226
+ list_del(&buf->queue);
218227 vb2_buffer_done(&buf->vb.vb2_buf, VB2_BUF_STATE_ERROR);
219228 }
220
-
221229 if (params_vdev->cur_buf) {
222230 buf = params_vdev->cur_buf;
223231 vb2_buffer_done(&buf->vb.vb2_buf, VB2_BUF_STATE_ERROR);
224232 params_vdev->cur_buf = NULL;
225233 }
234
+ spin_unlock_irqrestore(&params_vdev->config_lock, flags);
226235
227236 if (dev->is_pre_on) {
228237 params_vdev->first_cfg_params = true;
....@@ -368,15 +377,16 @@
368377 params_vdev->ops->param_cfg(params_vdev, frame_id, RKISP_PARAMS_IMD);
369378 }
370379
371
-void rkisp_params_cfgsram(struct rkisp_isp_params_vdev *params_vdev)
380
+void rkisp_params_cfgsram(struct rkisp_isp_params_vdev *params_vdev, bool is_check)
372381 {
373
- if (params_vdev->dev->procfs.mode & RKISP_PROCFS_FIL_SW)
374
- return;
382
+ if (is_check) {
383
+ if (params_vdev->dev->procfs.mode & RKISP_PROCFS_FIL_SW)
384
+ return;
375385
376
- /* multi device to switch sram config */
377
- if (params_vdev->dev->hw_dev->is_single)
378
- return;
379
-
386
+ /* multi device to switch sram config */
387
+ if (params_vdev->dev->hw_dev->is_single)
388
+ return;
389
+ }
380390 if (params_vdev->ops->param_cfgsram)
381391 params_vdev->ops->param_cfgsram(params_vdev);
382392 }
....@@ -455,6 +465,7 @@
455465 params_vdev->ops->stream_stop(params_vdev);
456466 if (params_vdev->ops->fop_release)
457467 params_vdev->ops->fop_release(params_vdev);
468
+ params_vdev->first_cfg_params = false;
458469 }
459470
460471 bool rkisp_params_check_bigmode(struct rkisp_isp_params_vdev *params_vdev)