media: qcom: camss: vfe: Make PIX BPL alignment format-based on CAMSS_2290

Split the VFE bytes-per-line (BPL) alignment logic into separate
helpers for RDI and PIX paths. RDI is usually aligned on RDI write
engine bus constraint such as 64-bit or 128-bit. But PIX engine
is usually (at least on platform I looked at) based on pixel format.

On CAMSS_2290, PIX BPL alignment is set to 0 to indicate that the
alignment must be derived from the pixel format. This allows the
pipeline to use camss_format_get_bpl_alignment().

For other platforms, retain the legacy PIX default (16 bytes), until
PIX is properly tested/enabled.

A future improvement would be to remove platform-specific conditionals
from the VFE code and move the alignment requirements into the
per-platform VFE resource data.

Signed-off-by: Loic Poulain <loic.poulain@oss.qualcomm.com>
Reviewed-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
[bod: Fixed straggling newlines]
Signed-off-by: Bryan O'Donoghue <bod@kernel.org>
This commit is contained in:
Loic Poulain 2026-03-13 20:51:52 +01:00 committed by Bryan O'Donoghue
parent ac437a96b7
commit e458c14072

View File

@ -1998,7 +1998,7 @@ static const struct media_entity_operations vfe_media_ops = {
.link_validate = v4l2_subdev_link_validate,
};
static int vfe_bpl_align(struct vfe_device *vfe)
static int vfe_bpl_align_rdi(struct vfe_device *vfe)
{
int ret = 8;
@ -2023,6 +2023,24 @@ static int vfe_bpl_align(struct vfe_device *vfe)
return ret;
}
static int vfe_bpl_align_pix(struct vfe_device *vfe)
{
int ret = 16;
switch (vfe->camss->res->version) {
case CAMSS_2290:
/* The alignment/bpl depends solely on the pixel format and is
* computed dynamically in camss_format_get_bpl_alignment().
*/
ret = 0;
break;
default:
break;
}
return ret;
}
/*
* msm_vfe_register_entities - Register subdev node for VFE module
* @vfe: VFE device
@ -2089,11 +2107,12 @@ int msm_vfe_register_entities(struct vfe_device *vfe,
}
video_out->ops = &vfe->video_ops;
video_out->bpl_alignment = vfe_bpl_align(vfe);
video_out->line_based = 0;
if (i == VFE_LINE_PIX) {
video_out->bpl_alignment = 16;
video_out->bpl_alignment = vfe_bpl_align_pix(vfe);
video_out->line_based = 1;
} else {
video_out->bpl_alignment = vfe_bpl_align_rdi(vfe);
video_out->line_based = 0;
}
video_out->nformats = vfe->line[i].nformats;