소스 검색

msm: camera: ife: Adjust epoch configuration

In case if calculated epoch is more than last
active line, then there is a chance that calculated epoch
is closer to EOF. This results in missing Epoch notification
at CRM.
Check if calculated epoch is greater than half of
last active line, then configure epoch at half the active lines.

CRs-Fixed: 2781565
Change-Id: Icb44d2e0e72b4ff36bd500ce51016cce418ff205
Signed-off-by: Shravya Samala <[email protected]>
Shravya Samala 4 년 전
부모
커밋
ab2e87cde1

+ 4 - 4
drivers/cam_isp/isp_hw_mgr/isp_hw/tfe_hw/cam_tfe_core.c

@@ -1972,10 +1972,10 @@ static int cam_tfe_camif_resource_start(
 
 	/* Epoch config */
 	epoch0_irq_mask = (((rsrc_data->last_line + rsrc_data->vbi_value) -
-			rsrc_data->first_line) / 2) +
-			rsrc_data->first_line;
-	if (epoch0_irq_mask > rsrc_data->last_line)
-		epoch0_irq_mask = rsrc_data->last_line;
+			rsrc_data->first_line) / 2);
+	if (epoch0_irq_mask > (rsrc_data->last_line - rsrc_data->first_line))
+		epoch0_irq_mask = (rsrc_data->last_line -
+					rsrc_data->first_line);
 
 	epoch1_irq_mask = rsrc_data->reg_data->epoch_line_cfg &
 			0xFFFF;

+ 4 - 3
drivers/cam_isp/isp_hw_mgr/isp_hw/vfe_hw/vfe_top/cam_vfe_camif_ver2.c

@@ -426,10 +426,11 @@ static int cam_vfe_camif_resource_start(
 	default:
 		epoch0_irq_mask = (((rsrc_data->last_line +
 				rsrc_data->vbi_value) -
-				rsrc_data->first_line) / 2) +
+				rsrc_data->first_line) / 2);
+		if ((epoch0_irq_mask) >
+			(rsrc_data->last_line - rsrc_data->first_line))
+			epoch0_irq_mask = rsrc_data->last_line -
 				rsrc_data->first_line;
-		if (epoch0_irq_mask > rsrc_data->last_line)
-			epoch0_irq_mask = rsrc_data->last_line;
 
 		epoch1_irq_mask = rsrc_data->reg_data->epoch_line_cfg &
 				0xFFFF;

+ 4 - 2
drivers/cam_isp/isp_hw_mgr/isp_hw/vfe_hw/vfe_top/cam_vfe_camif_ver3.c

@@ -471,8 +471,10 @@ static int cam_vfe_camif_ver3_resource_start(
 		epoch0_line_cfg = ((rsrc_data->last_line +
 			rsrc_data->vbi_value) -
 			rsrc_data->first_line) / 4;
-		if (epoch0_line_cfg > rsrc_data->last_line)
-			epoch0_line_cfg = rsrc_data->last_line;
+		if ((epoch0_line_cfg * 2) >
+			(rsrc_data->last_line - rsrc_data->first_line))
+			epoch0_line_cfg = (rsrc_data->last_line -
+				rsrc_data->first_line)/2;
 	/* epoch line cfg will still be configured at midpoint of the
 	 * frame width. We use '/ 4' instead of '/ 2'
 	 * cause it is multipixel path

+ 3 - 3
drivers/cam_isp/isp_hw_mgr/isp_hw/vfe_hw/vfe_top/cam_vfe_fe_ver1.c

@@ -307,9 +307,9 @@ static int cam_vfe_fe_resource_start(
 
 	/* epoch config */
 	epoch0_irq_mask = (((rsrc_data->last_line + rsrc_data->vbi_value) -
-		rsrc_data->first_line) / 2) + rsrc_data->first_line;
-	if (epoch0_irq_mask > rsrc_data->last_line)
-		epoch0_irq_mask = rsrc_data->last_line;
+		rsrc_data->first_line) / 2);
+	if (epoch0_irq_mask > (rsrc_data->last_line - rsrc_data->first_line))
+		epoch0_irq_mask = rsrc_data->last_line - rsrc_data->first_line;
 
 	epoch1_irq_mask = rsrc_data->reg_data->epoch_line_cfg & 0xFFFF;
 	computed_epoch_line_cfg = (epoch0_irq_mask << 16) | epoch1_irq_mask;