Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit dc538805 authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "msm: isp: Fix pingpong mismatch issue during cds"

parents 0bab8d44 4985bc6a
Loading
Loading
Loading
Loading
+48 −32
Original line number Diff line number Diff line
@@ -1354,19 +1354,9 @@ void msm_isp_axi_cfg_update(struct vfe_device *vfe_dev,
					cfg_wm_reg(vfe_dev, stream_info, j);
			/*Resume AXI*/
			stream_info->state = RESUME_PENDING;
			if (vfe_dev->is_split) {
				msm_isp_update_dual_HW_axi(vfe_dev,
					stream_info);
			} else {
				msm_isp_axi_stream_enable_cfg(
					vfe_dev,
					&axi_data->stream_info[i], 1);
				stream_info->state = RESUMING;
			}
			msm_isp_update_dual_HW_axi(vfe_dev, stream_info);
		} else if (stream_info->state == RESUMING) {
			stream_info->runtime_output_format =
				stream_info->output_format;
			stream_info->state = ACTIVE;
			msm_isp_update_dual_HW_axi(vfe_dev, stream_info);
		}
		spin_unlock_irqrestore(&stream_info->lock, flags);
	}
@@ -2416,7 +2406,7 @@ static int msm_isp_update_dual_HW_axi(struct vfe_device *vfe_dev,
	}

	dual_vfe_res = vfe_dev->common_data->dual_vfe_res;

	if (vfe_dev->is_split) {
		if (!dual_vfe_res->vfe_dev[ISP_VFE0] ||
			!dual_vfe_res->vfe_dev[ISP_VFE1] ||
			!dual_vfe_res->axi_data[ISP_VFE0] ||
@@ -2426,18 +2416,44 @@ static int msm_isp_update_dual_HW_axi(struct vfe_device *vfe_dev,
		} else {
			if (stream_info->state == RESUME_PENDING &&
				(dual_vfe_res->axi_data[!vfe_dev->pdev->id]->
			stream_info[stream_idx].state == RESUME_PENDING)) {
			/* Update the AXI only after both ISPs receiving the
				Reg update interrupt*/
				stream_info[stream_idx].state ==
				RESUME_PENDING)) {
				/* Update the AXI only after both ISPs receiving
					the Reg update interrupt*/
				for (vfe_id = 0; vfe_id < MAX_VFE; vfe_id++) {
					rc = msm_isp_axi_stream_enable_cfg(
						dual_vfe_res->vfe_dev[vfe_id],
					&dual_vfe_res->axi_data[vfe_id]->
						&dual_vfe_res->
						axi_data[vfe_id]->
						stream_info[stream_idx], 1);
					dual_vfe_res->axi_data[vfe_id]->
						stream_info[stream_idx].state =
						RESUMING;
				}
			} else if (stream_info->state == RESUMING &&
				(dual_vfe_res->axi_data[!vfe_dev->pdev->id]->
				 stream_info[stream_idx].state == RESUMING)) {
				for (vfe_id = 0; vfe_id < MAX_VFE; vfe_id++) {
					dual_vfe_res->axi_data[vfe_id]->
						stream_info[stream_idx].
						runtime_output_format =
						stream_info->output_format;
					dual_vfe_res->axi_data[vfe_id]->
						stream_info[stream_idx].state =
						ACTIVE;
				}
			}

		}
	} else {
		if (stream_info->state == RESUME_PENDING) {
			msm_isp_axi_stream_enable_cfg(
				vfe_dev, stream_info, 0);
			stream_info->state = RESUMING;
		} else if (stream_info->state == RESUMING) {
			stream_info->runtime_output_format =
				stream_info->output_format;
			stream_info->state = ACTIVE;
		}
	}
	return rc;