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

Commit 66ea0712 authored by Sagar Gore's avatar Sagar Gore
Browse files

msm: camera: isp: Fix for incorrect reg update on PIX



In case of dual VFE and RDI path is enabled, RDI reg update
should not interefere with PIX path. But due to incorrect
reg update written to hardware, it is resulting in line
noise or split patterns. Correction made in reg update
programming.

Change-Id: I43fde4fe11d75e4a4d3d883f144497748d3073f6
Signed-off-by: default avatarSagar Gore <sgore@codeaurora.org>
parent 81e1da90
Loading
Loading
Loading
Loading
+3 −4
Original line number Diff line number Diff line
@@ -746,14 +746,13 @@ static void msm_vfe40_reg_update(struct vfe_device *vfe_dev,
		vfe_dev->reg_update_requested;
	if ((vfe_dev->is_split && vfe_dev->pdev->id == ISP_VFE1) &&
		((frame_src == VFE_PIX_0) || (frame_src == VFE_SRC_MAX))) {
		msm_camera_io_w_mb(
			vfe_dev->dual_vfe_res->reg_update_mask[ISP_VFE0],
		msm_camera_io_w_mb(update_mask,
			vfe_dev->dual_vfe_res->vfe_base[ISP_VFE0] + 0x378);
		msm_camera_io_w_mb(vfe_dev->reg_update_requested,
		msm_camera_io_w_mb(update_mask,
			vfe_dev->vfe_base + 0x378);
	} else if (!vfe_dev->is_split ||
		(frame_src >= VFE_RAW_0 && frame_src <= VFE_SRC_MAX)) {
		msm_camera_io_w_mb(vfe_dev->reg_update_requested,
		msm_camera_io_w_mb(update_mask,
			vfe_dev->vfe_base + 0x378);
	}
	spin_unlock_irqrestore(&vfe_dev->reg_update_lock, flags);
+3 −4
Original line number Diff line number Diff line
@@ -619,14 +619,13 @@ static void msm_vfe44_reg_update(struct vfe_device *vfe_dev,
		vfe_dev->reg_update_requested;
	if ((vfe_dev->is_split && vfe_dev->pdev->id == ISP_VFE1) &&
		((frame_src == VFE_PIX_0) || (frame_src == VFE_SRC_MAX))) {
		msm_camera_io_w_mb(
			vfe_dev->dual_vfe_res->reg_update_mask[ISP_VFE0],
		msm_camera_io_w_mb(update_mask,
			vfe_dev->dual_vfe_res->vfe_base[ISP_VFE0] + 0x378);
		msm_camera_io_w_mb(vfe_dev->reg_update_requested,
		msm_camera_io_w_mb(update_mask,
			vfe_dev->vfe_base + 0x378);
	} else if (!vfe_dev->is_split ||
		(frame_src >= VFE_RAW_0 && frame_src <= VFE_SRC_MAX)) {
		msm_camera_io_w_mb(vfe_dev->reg_update_requested,
		msm_camera_io_w_mb(update_mask,
			vfe_dev->vfe_base + 0x378);
	}
	spin_unlock_irqrestore(&vfe_dev->reg_update_lock, flags);
+3 −4
Original line number Diff line number Diff line
@@ -546,14 +546,13 @@ static void msm_vfe46_reg_update(struct vfe_device *vfe_dev,
		vfe_dev->reg_update_requested;
	if ((vfe_dev->is_split && vfe_dev->pdev->id == ISP_VFE1) &&
		((frame_src == VFE_PIX_0) || (frame_src == VFE_SRC_MAX))) {
		msm_camera_io_w_mb(
			vfe_dev->dual_vfe_res->reg_update_mask[ISP_VFE0],
		msm_camera_io_w_mb(update_mask,
			vfe_dev->dual_vfe_res->vfe_base[ISP_VFE0] + 0x3D8);
		msm_camera_io_w_mb(vfe_dev->reg_update_requested,
		msm_camera_io_w_mb(update_mask,
			vfe_dev->vfe_base + 0x3D8);
	} else if (!vfe_dev->is_split ||
		(frame_src >= VFE_RAW_0 && frame_src <= VFE_SRC_MAX)) {
		msm_camera_io_w_mb(vfe_dev->reg_update_requested,
		msm_camera_io_w_mb(update_mask,
			vfe_dev->vfe_base + 0x3D8);
	}
	spin_unlock_irqrestore(&vfe_dev->reg_update_lock, flags);
+3 −4
Original line number Diff line number Diff line
@@ -647,14 +647,13 @@ static void msm_vfe47_reg_update(struct vfe_device *vfe_dev,
		vfe_dev->reg_update_requested;
	if ((vfe_dev->is_split && vfe_dev->pdev->id == ISP_VFE1) &&
		((frame_src == VFE_PIX_0) || (frame_src == VFE_SRC_MAX))) {
		msm_camera_io_w_mb(
			vfe_dev->dual_vfe_res->reg_update_mask[ISP_VFE0],
		msm_camera_io_w_mb(update_mask,
			vfe_dev->dual_vfe_res->vfe_base[ISP_VFE0] + 0x4AC);
		msm_camera_io_w_mb(vfe_dev->reg_update_requested,
		msm_camera_io_w_mb(update_mask,
			vfe_dev->vfe_base + 0x4AC);
	} else if (!vfe_dev->is_split ||
		(frame_src >= VFE_RAW_0 && frame_src <= VFE_SRC_MAX)) {
		msm_camera_io_w_mb(vfe_dev->reg_update_requested,
		msm_camera_io_w_mb(update_mask,
			vfe_dev->vfe_base + 0x4AC);
	}
	spin_unlock_irqrestore(&vfe_dev->reg_update_lock, flags);
+2 −2
Original line number Diff line number Diff line
@@ -851,7 +851,7 @@ int msm_isp_request_axi_stream(struct vfe_device *vfe_dev, void *arg)

	stream_info->memory_input = stream_cfg_cmd->memory_input;
	vfe_dev->reg_update_requested &=
		~(BIT(stream_info->stream_src));
		~(BIT(SRC_TO_INTF(stream_info->stream_src)));

	msm_isp_axi_reserve_wm(&vfe_dev->axi_data, stream_info);

@@ -2167,7 +2167,7 @@ static int msm_isp_stop_axi_stream(struct vfe_device *vfe_dev,
			HANDLE_TO_IDX(stream_cfg_cmd->stream_handle[i])];
		msm_isp_deinit_stream_ping_pong_reg(vfe_dev, stream_info);
		vfe_dev->reg_update_requested &=
			~(BIT(stream_info->stream_src));
			~(BIT(SRC_TO_INTF(stream_info->stream_src)));
	}

	return rc;