media: rp1: cfe: Add cfe_find_16bit_code() and cfe_find_compressed_code()
authorTomi Valkeinen <tomi.valkeinen@ideasonboard.com>
Fri, 29 Sep 2023 14:14:11 +0000 (17:14 +0300)
committerDom Cobley <popcornmix@gmail.com>
Mon, 19 Feb 2024 11:35:21 +0000 (11:35 +0000)
Add helper functions which, given an mbus code, return the 16-bit
remapped mbus code or the compressed mbus code.

Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
drivers/media/platform/raspberrypi/rp1_cfe/cfe.c
drivers/media/platform/raspberrypi/rp1_cfe/cfe.h

index 8d356be..1df1392 100644 (file)
@@ -473,6 +473,46 @@ const struct cfe_fmt *find_format_by_pix(u32 pixelformat)
        return NULL;
 }
 
+/*
+ * Given the mbus code, find the 16 bit remapped code. Returns 0 if no remap
+ * possible.
+ */
+u32 cfe_find_16bit_code(u32 code)
+{
+       const struct cfe_fmt *cfe_fmt;
+
+       cfe_fmt = find_format_by_code(code);
+
+       if (!cfe_fmt || !cfe_fmt->remap[CFE_REMAP_16BIT])
+               return 0;
+
+       cfe_fmt = find_format_by_pix(cfe_fmt->remap[CFE_REMAP_16BIT]);
+       if (!cfe_fmt)
+               return 0;
+
+       return cfe_fmt->code;
+}
+
+/*
+ * Given the mbus code, find the 8 bit compressed code. Returns 0 if no remap
+ * possible.
+ */
+u32 cfe_find_compressed_code(u32 code)
+{
+       const struct cfe_fmt *cfe_fmt;
+
+       cfe_fmt = find_format_by_code(code);
+
+       if (!cfe_fmt || !cfe_fmt->remap[CFE_REMAP_COMPRESSED])
+               return 0;
+
+       cfe_fmt = find_format_by_pix(cfe_fmt->remap[CFE_REMAP_COMPRESSED]);
+       if (!cfe_fmt)
+               return 0;
+
+       return cfe_fmt->code;
+}
+
 static int cfe_calc_format_size_bpl(struct cfe_device *cfe,
                                    const struct cfe_fmt *fmt,
                                    struct v4l2_format *f)
index 13a3852..637b63a 100644 (file)
@@ -37,5 +37,7 @@ extern const struct v4l2_mbus_framefmt cfe_default_meta_format;
 
 const struct cfe_fmt *find_format_by_code(u32 code);
 const struct cfe_fmt *find_format_by_pix(u32 pixelformat);
+u32 cfe_find_16bit_code(u32 code);
+u32 cfe_find_compressed_code(u32 code);
 
 #endif