.. | .. |
---|
185 | 185 | spin_lock_irqsave(¶ms_vdev->config_lock, flags); |
---|
186 | 186 | list_add_tail(¶ms_buf->queue, ¶ms_vdev->params); |
---|
187 | 187 | spin_unlock_irqrestore(¶ms_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(¶ms_vdev->config_lock, flags); |
---|
| 196 | + while (!list_empty(¶ms_vdev->params)) { |
---|
| 197 | + buf = list_first_entry(¶ms_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(¶ms_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 | + } |
---|
188 | 210 | } |
---|
189 | 211 | |
---|
190 | 212 | static void rkisp_params_vb2_stop_streaming(struct vb2_queue *vq) |
---|
.. | .. |
---|
193 | 215 | struct rkisp_device *dev = params_vdev->dev; |
---|
194 | 216 | struct rkisp_buffer *buf; |
---|
195 | 217 | unsigned long flags; |
---|
196 | | - int i; |
---|
197 | 218 | |
---|
198 | 219 | /* stop params input firstly */ |
---|
199 | 220 | spin_lock_irqsave(¶ms_vdev->config_lock, flags); |
---|
200 | 221 | params_vdev->streamon = false; |
---|
201 | 222 | wake_up(&dev->sync_onoff); |
---|
202 | | - spin_unlock_irqrestore(¶ms_vdev->config_lock, flags); |
---|
203 | | - |
---|
204 | | - for (i = 0; i < RKISP_ISP_PARAMS_REQ_BUFS_MAX; i++) { |
---|
205 | | - spin_lock_irqsave(¶ms_vdev->config_lock, flags); |
---|
206 | | - if (!list_empty(¶ms_vdev->params)) { |
---|
207 | | - buf = list_first_entry(¶ms_vdev->params, |
---|
208 | | - struct rkisp_buffer, queue); |
---|
209 | | - list_del(&buf->queue); |
---|
210 | | - spin_unlock_irqrestore(¶ms_vdev->config_lock, |
---|
211 | | - flags); |
---|
212 | | - } else { |
---|
213 | | - spin_unlock_irqrestore(¶ms_vdev->config_lock, |
---|
214 | | - flags); |
---|
215 | | - break; |
---|
216 | | - } |
---|
217 | | - |
---|
| 223 | + while (!list_empty(¶ms_vdev->params)) { |
---|
| 224 | + buf = list_first_entry(¶ms_vdev->params, |
---|
| 225 | + struct rkisp_buffer, queue); |
---|
| 226 | + list_del(&buf->queue); |
---|
218 | 227 | vb2_buffer_done(&buf->vb.vb2_buf, VB2_BUF_STATE_ERROR); |
---|
219 | 228 | } |
---|
220 | | - |
---|
221 | 229 | if (params_vdev->cur_buf) { |
---|
222 | 230 | buf = params_vdev->cur_buf; |
---|
223 | 231 | vb2_buffer_done(&buf->vb.vb2_buf, VB2_BUF_STATE_ERROR); |
---|
224 | 232 | params_vdev->cur_buf = NULL; |
---|
225 | 233 | } |
---|
| 234 | + spin_unlock_irqrestore(¶ms_vdev->config_lock, flags); |
---|
226 | 235 | |
---|
227 | 236 | if (dev->is_pre_on) { |
---|
228 | 237 | params_vdev->first_cfg_params = true; |
---|
.. | .. |
---|
368 | 377 | params_vdev->ops->param_cfg(params_vdev, frame_id, RKISP_PARAMS_IMD); |
---|
369 | 378 | } |
---|
370 | 379 | |
---|
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) |
---|
372 | 381 | { |
---|
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; |
---|
375 | 385 | |
---|
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 | + } |
---|
380 | 390 | if (params_vdev->ops->param_cfgsram) |
---|
381 | 391 | params_vdev->ops->param_cfgsram(params_vdev); |
---|
382 | 392 | } |
---|
.. | .. |
---|
455 | 465 | params_vdev->ops->stream_stop(params_vdev); |
---|
456 | 466 | if (params_vdev->ops->fop_release) |
---|
457 | 467 | params_vdev->ops->fop_release(params_vdev); |
---|
| 468 | + params_vdev->first_cfg_params = false; |
---|
458 | 469 | } |
---|
459 | 470 | |
---|
460 | 471 | bool rkisp_params_check_bigmode(struct rkisp_isp_params_vdev *params_vdev) |
---|