Loading drivers/media/platform/msm/camera_v2/isp/msm_isp_axi_util.c +26 −0 Original line number Diff line number Diff line Loading @@ -1642,12 +1642,38 @@ void msm_isp_halt_send_error(struct vfe_device *vfe_dev, uint32_t event) struct msm_isp_event_data error_event; struct msm_vfe_axi_halt_cmd halt_cmd; uint32_t irq_status0, irq_status1; struct vfe_device *vfe_dev_other = NULL; uint32_t vfe_id_other = 0; unsigned long flags; if (atomic_read(&vfe_dev->error_info.overflow_state) != NO_OVERFLOW) /* Recovery is already in Progress */ return; /* if there are no active streams - do not start recovery */ if (vfe_dev->is_split) { if (vfe_dev->pdev->id == ISP_VFE0) vfe_id_other = ISP_VFE1; else vfe_id_other = ISP_VFE0; spin_lock_irqsave( &vfe_dev->common_data->common_dev_data_lock, flags); vfe_dev_other = vfe_dev->common_data->dual_vfe_res-> vfe_dev[vfe_id_other]; if (!vfe_dev->axi_data.num_active_stream || !vfe_dev_other->axi_data.num_active_stream) { spin_unlock_irqrestore( &vfe_dev->common_data->common_dev_data_lock, flags); pr_err("%s:skip the recovery as no active streams\n", __func__); return; } spin_unlock_irqrestore( &vfe_dev->common_data->common_dev_data_lock, flags); } else if (!vfe_dev->axi_data.num_active_stream) return; if (ISP_EVENT_PING_PONG_MISMATCH == event && vfe_dev->axi_data.recovery_count < MAX_RECOVERY_THRESHOLD) { vfe_dev->hw_info->vfe_ops.irq_ops. Loading Loading
drivers/media/platform/msm/camera_v2/isp/msm_isp_axi_util.c +26 −0 Original line number Diff line number Diff line Loading @@ -1642,12 +1642,38 @@ void msm_isp_halt_send_error(struct vfe_device *vfe_dev, uint32_t event) struct msm_isp_event_data error_event; struct msm_vfe_axi_halt_cmd halt_cmd; uint32_t irq_status0, irq_status1; struct vfe_device *vfe_dev_other = NULL; uint32_t vfe_id_other = 0; unsigned long flags; if (atomic_read(&vfe_dev->error_info.overflow_state) != NO_OVERFLOW) /* Recovery is already in Progress */ return; /* if there are no active streams - do not start recovery */ if (vfe_dev->is_split) { if (vfe_dev->pdev->id == ISP_VFE0) vfe_id_other = ISP_VFE1; else vfe_id_other = ISP_VFE0; spin_lock_irqsave( &vfe_dev->common_data->common_dev_data_lock, flags); vfe_dev_other = vfe_dev->common_data->dual_vfe_res-> vfe_dev[vfe_id_other]; if (!vfe_dev->axi_data.num_active_stream || !vfe_dev_other->axi_data.num_active_stream) { spin_unlock_irqrestore( &vfe_dev->common_data->common_dev_data_lock, flags); pr_err("%s:skip the recovery as no active streams\n", __func__); return; } spin_unlock_irqrestore( &vfe_dev->common_data->common_dev_data_lock, flags); } else if (!vfe_dev->axi_data.num_active_stream) return; if (ISP_EVENT_PING_PONG_MISMATCH == event && vfe_dev->axi_data.recovery_count < MAX_RECOVERY_THRESHOLD) { vfe_dev->hw_info->vfe_ops.irq_ops. Loading