[PATCH 36/74] media: qcom: camss: csid: Add helper function csid_ipp_bayer_pattern
From: bod
Date: Mon Oct 05 2026 - 13:28:57 EST
From: Bryan O'Donoghue <bryan.odonoghue@xxxxxxxxxx>
Simple helper function which translates a media bus format into the
appropriate CSID IPP pixel format.
Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@xxxxxxxxxx>
---
drivers/media/platform/qcom/camss/camss-csid.c | 28 ++++++++++++++++++++++++++
drivers/media/platform/qcom/camss/camss-csid.h | 16 +++++++++++++++
2 files changed, 44 insertions(+)
diff --git a/drivers/media/platform/qcom/camss/camss-csid.c b/drivers/media/platform/qcom/camss/camss-csid.c
index 645e02ad6b9b1..abdd7195fa6c5 100644
--- a/drivers/media/platform/qcom/camss/camss-csid.c
+++ b/drivers/media/platform/qcom/camss/camss-csid.c
@@ -1437,3 +1437,31 @@ inline bool csid_is_lite(struct csid_device *csid)
{
return csid->camss->res->csid_res[csid->id].csid.is_lite;
}
+
+int csid_ipp_bayer_pattern(u32 code)
+{
+ switch (code) {
+ case MEDIA_BUS_FMT_SRGGB8_1X8:
+ case MEDIA_BUS_FMT_SRGGB10_1X10:
+ case MEDIA_BUS_FMT_SRGGB12_1X12:
+ case MEDIA_BUS_FMT_SRGGB14_1X14:
+ return CSID_IPP_BAYER_RGGB;
+ case MEDIA_BUS_FMT_SGRBG8_1X8:
+ case MEDIA_BUS_FMT_SGRBG10_1X10:
+ case MEDIA_BUS_FMT_SGRBG12_1X12:
+ case MEDIA_BUS_FMT_SGRBG14_1X14:
+ return CSID_IPP_BAYER_GRBG;
+ case MEDIA_BUS_FMT_SBGGR8_1X8:
+ case MEDIA_BUS_FMT_SBGGR10_1X10:
+ case MEDIA_BUS_FMT_SBGGR12_1X12:
+ case MEDIA_BUS_FMT_SBGGR14_1X14:
+ return CSID_IPP_BAYER_BGGR;
+ case MEDIA_BUS_FMT_SGBRG8_1X8:
+ case MEDIA_BUS_FMT_SGBRG10_1X10:
+ case MEDIA_BUS_FMT_SGBRG12_1X12:
+ case MEDIA_BUS_FMT_SGBRG14_1X14:
+ return CSID_IPP_BAYER_GBRG;
+ default:
+ return -EINVAL;
+ }
+}
diff --git a/drivers/media/platform/qcom/camss/camss-csid.h b/drivers/media/platform/qcom/camss/camss-csid.h
index 53f43ae7b9327..400995f35f0ef 100644
--- a/drivers/media/platform/qcom/camss/camss-csid.h
+++ b/drivers/media/platform/qcom/camss/camss-csid.h
@@ -44,6 +44,13 @@ enum csid_testgen_mode {
CSID_PAYLOAD_MODE_NUM_SUPPORTED_GEN2 = 9, /* excluding disabled */
};
+enum csid_ipp_bayer_pattern {
+ CSID_IPP_BAYER_RGGB = 0,
+ CSID_IPP_BAYER_GRBG,
+ CSID_IPP_BAYER_BGGR,
+ CSID_IPP_BAYER_GBRG,
+};
+
struct csid_format_info {
u32 code;
u8 data_type;
@@ -247,4 +254,13 @@ u32 csid_hw_version(struct csid_device *csid);
u32 csid_src_pad_code(struct csid_device *csid, u32 sink_code,
unsigned int match_format_idx, u32 match_code);
+/*
+ * csid_ipp_bayer_pattern - IPP Bayer pattern for media bus code
+ *
+ * code: the media_bus code
+ *
+ * Return: IPP bayer pattern constant for reg programming or -EINVAL
+ */
+int csid_ipp_bayer_pattern(u32 code);
+
#endif /* QC_MSM_CAMSS_CSID_H */
--
2.55.0