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

Commit 26d096f2 authored by Harsh Shah's avatar Harsh Shah Committed by Junzhe Zou
Browse files

msm: camera: isp: Update logic for assigning Master frame ID



Existing logic for assigning Master frame ID when Slave is already active
was causing frame ID jumps. These jumps would cause missing buffer issues.
Update logic to accurately set frame ID on Master based on timestamp.
Also compare requested frame id with eof to refuse frame request in a
wrong time.

Change-Id: I1dd42c55b2e8d92f4cbe81ebaa4c4225a9d83af8
Signed-off-by: default avatarHarsh Shah <harshs@codeaurora.org>
Signed-off-by: default avatarJunzhe Zou <jnzhezou@codeaurora.org>
parent f75272fe
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -161,6 +161,8 @@ struct msm_vfe_irq_ops {
	void (*config_irq)(struct vfe_device *vfe_dev,
		uint32_t irq_status0, uint32_t irq_status1,
		enum msm_isp_irq_operation);
	void (*process_eof_irq)(struct vfe_device *vfe_dev,
		uint32_t irq_status0);
};

struct msm_vfe_axi_ops {
@@ -478,6 +480,7 @@ struct msm_vfe_src_info {
	struct timeval time_stamp;
	enum msm_vfe_dual_hw_type dual_hw_type;
	struct msm_vfe_dual_hw_ms_info dual_hw_ms_info;
	uint32_t eof_id;
};

struct msm_vfe_fetch_engine_info {
+2 −1
Original line number Diff line number Diff line
@@ -1452,7 +1452,7 @@ static void msm_vfe40_update_camif_state(struct vfe_device *vfe_dev,
		msm_camera_io_w(0x0, vfe_dev->vfe_base + 0x30);
		msm_camera_io_w_mb(0x81, vfe_dev->vfe_base + 0x34);
		msm_camera_io_w_mb(0x1, vfe_dev->vfe_base + 0x24);
		msm_vfe40_config_irq(vfe_dev, 0xF7, 0x81,
		msm_vfe40_config_irq(vfe_dev, 0x17, 0x81,
				MSM_ISP_IRQ_ENABLE);
		msm_camera_io_w_mb(0x140000, vfe_dev->vfe_base + 0x318);

@@ -2274,6 +2274,7 @@ struct msm_vfe_hardware_info vfe40_hw_info = {
			.process_stats_irq = msm_isp_process_stats_irq,
			.process_epoch_irq = msm_vfe40_process_epoch_irq,
			.config_irq = msm_vfe40_config_irq,
			.process_eof_irq = msm_isp47_process_eof_irq,
		},
		.axi_ops = {
			.reload_wm = msm_vfe40_axi_reload_wm,
+2 −1
Original line number Diff line number Diff line
@@ -1041,7 +1041,7 @@ static void msm_vfe44_update_camif_state(struct vfe_device *vfe_dev,
		msm_camera_io_w_mb(0x81, vfe_dev->vfe_base + 0x34);
		msm_camera_io_w_mb(0x1, vfe_dev->vfe_base + 0x24);

		msm_vfe44_config_irq(vfe_dev, 0xF7, 0x81,
		msm_vfe44_config_irq(vfe_dev, 0x17, 0x81,
				MSM_ISP_IRQ_ENABLE);
		msm_camera_io_w_mb(0x140000, vfe_dev->vfe_base + 0x318);

@@ -1847,6 +1847,7 @@ struct msm_vfe_hardware_info vfe44_hw_info = {
			.process_stats_irq = msm_isp_process_stats_irq,
			.process_epoch_irq = msm_vfe44_process_epoch_irq,
			.config_irq = msm_vfe44_config_irq,
			.process_eof_irq = msm_isp47_process_eof_irq,
		},
		.axi_ops = {
			.reload_wm = msm_vfe44_axi_reload_wm,
+2 −1
Original line number Diff line number Diff line
@@ -1117,7 +1117,7 @@ static void msm_vfe46_update_camif_state(struct vfe_device *vfe_dev,
		msm_camera_io_w(0x0, vfe_dev->vfe_base + 0x64);
		msm_camera_io_w(0x81, vfe_dev->vfe_base + 0x68);
		msm_camera_io_w(0x1, vfe_dev->vfe_base + 0x58);
		msm_vfe46_config_irq(vfe_dev, 0x15, 0x81,
		msm_vfe46_config_irq(vfe_dev, 0x17, 0x81,
					MSM_ISP_IRQ_ENABLE);

		bus_en =
@@ -1951,6 +1951,7 @@ struct msm_vfe_hardware_info vfe46_hw_info = {
			.process_stats_irq = msm_isp_process_stats_irq,
			.process_epoch_irq = msm_vfe46_process_epoch_irq,
			.config_irq = msm_vfe46_config_irq,
			.process_eof_irq = msm_isp47_process_eof_irq,
		},
		.axi_ops = {
			.reload_wm = msm_vfe46_axi_reload_wm,
+10 −2
Original line number Diff line number Diff line
@@ -662,6 +662,13 @@ void msm_vfe47_process_epoch_irq(struct vfe_device *vfe_dev,
	}
}

void msm_isp47_process_eof_irq(struct vfe_device *vfe_dev,
	uint32_t irq_status0)
{
	if (irq_status0 & BIT(1))
		vfe_dev->axi_data.src_info[VFE_PIX_0].eof_id++;
}

void msm_vfe47_reg_update(struct vfe_device *vfe_dev,
	enum msm_vfe_input_src frame_src)
{
@@ -1469,7 +1476,7 @@ void msm_vfe47_update_camif_state(struct vfe_device *vfe_dev,
		msm_camera_io_w(0x0, vfe_dev->vfe_base + 0x64);
		msm_camera_io_w(0x81, vfe_dev->vfe_base + 0x68);
		msm_camera_io_w(0x1, vfe_dev->vfe_base + 0x58);
		msm_vfe47_config_irq(vfe_dev, 0x15, 0x81,
		msm_vfe47_config_irq(vfe_dev, 0x17, 0x81,
					MSM_ISP_IRQ_ENABLE);

		if ((vfe_dev->hvx_cmd > HVX_DISABLE) &&
@@ -2682,6 +2689,7 @@ struct msm_vfe_hardware_info vfe47_hw_info = {
			.process_stats_irq = msm_isp_process_stats_irq,
			.process_epoch_irq = msm_vfe47_process_epoch_irq,
			.config_irq = msm_vfe47_config_irq,
			.process_eof_irq = msm_isp47_process_eof_irq,
		},
		.axi_ops = {
			.reload_wm = msm_vfe47_axi_reload_wm,
Loading