From: Loic Poulain Date: Fri, 13 Mar 2026 19:51:52 +0000 (+0100) Subject: media: qcom: camss: vfe: Make PIX BPL alignment format-based on CAMSS_2290 X-Git-Url: http://git.ipfire.org/gitweb/index.cgi?a=commitdiff_plain;h=e458c14072d95698637f1630b9d972509dccd8d5;p=thirdparty%2Fkernel%2Flinux.git 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 Reviewed-by: Bryan O'Donoghue [bod: Fixed straggling newlines] Signed-off-by: Bryan O'Donoghue --- diff --git a/drivers/media/platform/qcom/camss/camss-vfe.c b/drivers/media/platform/qcom/camss/camss-vfe.c index cc9a9685f6b5..319d19158988 100644 --- a/drivers/media/platform/qcom/camss/camss-vfe.c +++ b/drivers/media/platform/qcom/camss/camss-vfe.c @@ -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;