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

Commit 4985bc6a authored by Abhishek Kondaveeti's avatar Abhishek Kondaveeti Committed by Gerrit - the friendly Code Review server
Browse files

msm: isp: Fix pingpong mismatch issue during cds



During CDS toggle enable wms only after both ISPs
receives the register update inetrrupt. This will ensure
the ping pong mismatch during cds toggle.

CRs-Fixed: 955803

Change-Id: Id9fde8b7523b17e512cca26a5e2346960c2b7e6b
Signed-off-by: default avatarAbhishek Kondaveeti <akondave@codeaurora.org>
parent 53d1dd96
Loading
Loading
Loading
Loading
+48 −32
Original line number Diff line number Diff line
@@ -1350,19 +1350,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);
	}
@@ -2420,7 +2410,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] ||
@@ -2430,18 +2420,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;