]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
media: qcom: camss: vfe: Make PIX BPL alignment format-based on CAMSS_2290
authorLoic Poulain <loic.poulain@oss.qualcomm.com>
Fri, 13 Mar 2026 19:51:52 +0000 (20:51 +0100)
committerBryan O'Donoghue <bod@kernel.org>
Fri, 8 May 2026 23:22:59 +0000 (00:22 +0100)
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>
drivers/media/platform/qcom/camss/camss-vfe.c

index cc9a9685f6b5401fcd838d5744446e2b201df933..319d191589884777bced456867e5a2a4211a2770 100644 (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;