From: Loic Poulain Date: Fri, 13 Mar 2026 19:51:50 +0000 (+0100) Subject: media: qcom: camss: Add per-format BPL alignment helper X-Git-Url: http://git.ipfire.org/gitweb/index.cgi?a=commitdiff_plain;h=91978c39ee90f0549a2a74e2e56a3e09c5ce6877;p=thirdparty%2Flinux.git media: qcom: camss: Add per-format BPL alignment helper Add camss_format_get_bpl_alignment(), a helper that returns the bytes-per-line (BPL) alignment requirement for a given CAMSS format. Different RAW Bayer packing schemes impose different BPL alignment constraints (e.g. RAW10 requires multiples of 5 bytes, RAW12 multiples of 3 bytes, RAW14 multiples of 7 bytes, etc.). Centralizing this logic makes the alignment rules explicit and avoids duplicating them across the pipeline. This will allow PIX paths and buffer preparation code to correctly round up BPL values to hardware-required boundaries. Signed-off-by: Loic Poulain Reviewed-by: Bryan O'Donoghue Signed-off-by: Bryan O'Donoghue --- diff --git a/drivers/media/platform/qcom/camss/camss-format.c b/drivers/media/platform/qcom/camss/camss-format.c index 4a3d5549615c..52cb01306ee0 100644 --- a/drivers/media/platform/qcom/camss/camss-format.c +++ b/drivers/media/platform/qcom/camss/camss-format.c @@ -7,8 +7,10 @@ * Copyright (c) 2023, The Linux Foundation. All rights reserved. * Copyright (c) 2023 Qualcomm Technologies, Inc. */ +#include #include #include +#include #include "camss-format.h" @@ -33,6 +35,18 @@ u8 camss_format_get_bpp(const struct camss_format_info *formats, unsigned int nf return formats[0].mbus_bpp; } +/* + * camss_format_get_bpl_alignment - Retrieve required BPL alignment for a given format. + * @format: a pointer to the format + * + * Return the required alignment, in bytes. + */ +unsigned int camss_format_get_bpl_alignment(const struct camss_format_info *format) +{ + /* Minimal number of bytes required to keep the line length an integer number of pixels */ + return lcm_not_zero(format->mbus_bpp, BITS_PER_BYTE) / BITS_PER_BYTE; +} + /* * camss_format_find_code - Find a format code in an array * @code: a pointer to media bus format codes array diff --git a/drivers/media/platform/qcom/camss/camss-format.h b/drivers/media/platform/qcom/camss/camss-format.h index 923a48c9c3fb..4f87ac8c4975 100644 --- a/drivers/media/platform/qcom/camss/camss-format.h +++ b/drivers/media/platform/qcom/camss/camss-format.h @@ -55,6 +55,7 @@ struct camss_formats { }; u8 camss_format_get_bpp(const struct camss_format_info *formats, unsigned int nformats, u32 code); +unsigned int camss_format_get_bpl_alignment(const struct camss_format_info *f); u32 camss_format_find_code(u32 *code, unsigned int n_code, unsigned int index, u32 req_code); int camss_format_find_format(u32 code, u32 pixelformat, const struct camss_format_info *formats, unsigned int nformats);