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 <shravyas@codeaurora.org>
This commit is contained in:
Shravya Samala 2020-09-21 19:09:33 +05:30 • committed by Gerrit - the friendly Code Review server
commit ab2e87cde1
4 changed files with 15 additions and 12 deletions

View file

@ -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;

View file

@ -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;

View file

@ -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

View file

@ -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;