media: ti-vpe: cal: Move format handling to cal.c and expose helpers
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Sun, 6 Dec 2020 23:53:32 +0000 (00:53 +0100)
committerMauro Carvalho Chehab <mchehab+huawei@kernel.org>
Mon, 4 Jan 2021 10:31:03 +0000 (11:31 +0100)
The cal_formats array contain the description of all formats supported
by the hardware. It's currently used by the V4L2 video device operations
only, but will be needed by the CAMERARX subdev code too. Move it from
cal-video.c to cal.c and add helper functions to access it.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Benoit Parrot <bparrot@ti.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
drivers/media/platform/ti-vpe/cal-video.c
drivers/media/platform/ti-vpe/cal.c
drivers/media/platform/ti-vpe/cal.h

index f57767e79ca59ea037319f511722abdeaf7bc20c..355bb365daf0d68e79cadfb4267f0c02535e2299 100644 (file)
 
 #include "cal.h"
 
-/* ------------------------------------------------------------------
- *     Format Handling
- * ------------------------------------------------------------------
- */
-
-static const struct cal_fmt cal_formats[] = {
-       {
-               .fourcc         = V4L2_PIX_FMT_YUYV,
-               .code           = MEDIA_BUS_FMT_YUYV8_2X8,
-               .bpp            = 16,
-       }, {
-               .fourcc         = V4L2_PIX_FMT_UYVY,
-               .code           = MEDIA_BUS_FMT_UYVY8_2X8,
-               .bpp            = 16,
-       }, {
-               .fourcc         = V4L2_PIX_FMT_YVYU,
-               .code           = MEDIA_BUS_FMT_YVYU8_2X8,
-               .bpp            = 16,
-       }, {
-               .fourcc         = V4L2_PIX_FMT_VYUY,
-               .code           = MEDIA_BUS_FMT_VYUY8_2X8,
-               .bpp            = 16,
-       }, {
-               .fourcc         = V4L2_PIX_FMT_RGB565, /* gggbbbbb rrrrrggg */
-               .code           = MEDIA_BUS_FMT_RGB565_2X8_LE,
-               .bpp            = 16,
-       }, {
-               .fourcc         = V4L2_PIX_FMT_RGB565X, /* rrrrrggg gggbbbbb */
-               .code           = MEDIA_BUS_FMT_RGB565_2X8_BE,
-               .bpp            = 16,
-       }, {
-               .fourcc         = V4L2_PIX_FMT_RGB555, /* gggbbbbb arrrrrgg */
-               .code           = MEDIA_BUS_FMT_RGB555_2X8_PADHI_LE,
-               .bpp            = 16,
-       }, {
-               .fourcc         = V4L2_PIX_FMT_RGB555X, /* arrrrrgg gggbbbbb */
-               .code           = MEDIA_BUS_FMT_RGB555_2X8_PADHI_BE,
-               .bpp            = 16,
-       }, {
-               .fourcc         = V4L2_PIX_FMT_RGB24, /* rgb */
-               .code           = MEDIA_BUS_FMT_RGB888_2X12_LE,
-               .bpp            = 24,
-       }, {
-               .fourcc         = V4L2_PIX_FMT_BGR24, /* bgr */
-               .code           = MEDIA_BUS_FMT_RGB888_2X12_BE,
-               .bpp            = 24,
-       }, {
-               .fourcc         = V4L2_PIX_FMT_RGB32, /* argb */
-               .code           = MEDIA_BUS_FMT_ARGB8888_1X32,
-               .bpp            = 32,
-       }, {
-               .fourcc         = V4L2_PIX_FMT_SBGGR8,
-               .code           = MEDIA_BUS_FMT_SBGGR8_1X8,
-               .bpp            = 8,
-       }, {
-               .fourcc         = V4L2_PIX_FMT_SGBRG8,
-               .code           = MEDIA_BUS_FMT_SGBRG8_1X8,
-               .bpp            = 8,
-       }, {
-               .fourcc         = V4L2_PIX_FMT_SGRBG8,
-               .code           = MEDIA_BUS_FMT_SGRBG8_1X8,
-               .bpp            = 8,
-       }, {
-               .fourcc         = V4L2_PIX_FMT_SRGGB8,
-               .code           = MEDIA_BUS_FMT_SRGGB8_1X8,
-               .bpp            = 8,
-       }, {
-               .fourcc         = V4L2_PIX_FMT_SBGGR10,
-               .code           = MEDIA_BUS_FMT_SBGGR10_1X10,
-               .bpp            = 10,
-       }, {
-               .fourcc         = V4L2_PIX_FMT_SGBRG10,
-               .code           = MEDIA_BUS_FMT_SGBRG10_1X10,
-               .bpp            = 10,
-       }, {
-               .fourcc         = V4L2_PIX_FMT_SGRBG10,
-               .code           = MEDIA_BUS_FMT_SGRBG10_1X10,
-               .bpp            = 10,
-       }, {
-               .fourcc         = V4L2_PIX_FMT_SRGGB10,
-               .code           = MEDIA_BUS_FMT_SRGGB10_1X10,
-               .bpp            = 10,
-       }, {
-               .fourcc         = V4L2_PIX_FMT_SBGGR12,
-               .code           = MEDIA_BUS_FMT_SBGGR12_1X12,
-               .bpp            = 12,
-       }, {
-               .fourcc         = V4L2_PIX_FMT_SGBRG12,
-               .code           = MEDIA_BUS_FMT_SGBRG12_1X12,
-               .bpp            = 12,
-       }, {
-               .fourcc         = V4L2_PIX_FMT_SGRBG12,
-               .code           = MEDIA_BUS_FMT_SGRBG12_1X12,
-               .bpp            = 12,
-       }, {
-               .fourcc         = V4L2_PIX_FMT_SRGGB12,
-               .code           = MEDIA_BUS_FMT_SRGGB12_1X12,
-               .bpp            = 12,
-       },
-};
-
 /*  Print Four-character-code (FOURCC) */
 static char *fourcc_to_str(u32 fmt)
 {
@@ -726,7 +625,7 @@ static int cal_ctx_v4l2_init_formats(struct cal_ctx *ctx)
        int ret = 0;
 
        /* Enumerate sub device formats and enable all matching local formats */
-       ctx->active_fmt = devm_kcalloc(ctx->cal->dev, ARRAY_SIZE(cal_formats),
+       ctx->active_fmt = devm_kcalloc(ctx->cal->dev, cal_num_formats,
                                       sizeof(*ctx->active_fmt), GFP_KERNEL);
        ctx->num_active_fmt = 0;
 
@@ -744,7 +643,7 @@ static int cal_ctx_v4l2_init_formats(struct cal_ctx *ctx)
                        "subdev %s: code: %04x idx: %u\n",
                        ctx->phy->sensor->name, mbus_code.code, j);
 
-               for (k = 0; k < ARRAY_SIZE(cal_formats); k++) {
+               for (k = 0; k < cal_num_formats; k++) {
                        const struct cal_fmt *fmt = &cal_formats[k];
 
                        if (mbus_code.code == fmt->code) {
index 34a344b7f08a6b1a13d9a0df0d2c5574d5b11e1e..b9ee535513e80ce698c79bae8b30a3dee8e342f7 100644 (file)
@@ -43,6 +43,133 @@ unsigned int cal_debug;
 module_param_named(debug, cal_debug, uint, 0644);
 MODULE_PARM_DESC(debug, "activates debug info");
 
+/* ------------------------------------------------------------------
+ *     Format Handling
+ * ------------------------------------------------------------------
+ */
+
+const struct cal_fmt cal_formats[] = {
+       {
+               .fourcc         = V4L2_PIX_FMT_YUYV,
+               .code           = MEDIA_BUS_FMT_YUYV8_2X8,
+               .bpp            = 16,
+       }, {
+               .fourcc         = V4L2_PIX_FMT_UYVY,
+               .code           = MEDIA_BUS_FMT_UYVY8_2X8,
+               .bpp            = 16,
+       }, {
+               .fourcc         = V4L2_PIX_FMT_YVYU,
+               .code           = MEDIA_BUS_FMT_YVYU8_2X8,
+               .bpp            = 16,
+       }, {
+               .fourcc         = V4L2_PIX_FMT_VYUY,
+               .code           = MEDIA_BUS_FMT_VYUY8_2X8,
+               .bpp            = 16,
+       }, {
+               .fourcc         = V4L2_PIX_FMT_RGB565, /* gggbbbbb rrrrrggg */
+               .code           = MEDIA_BUS_FMT_RGB565_2X8_LE,
+               .bpp            = 16,
+       }, {
+               .fourcc         = V4L2_PIX_FMT_RGB565X, /* rrrrrggg gggbbbbb */
+               .code           = MEDIA_BUS_FMT_RGB565_2X8_BE,
+               .bpp            = 16,
+       }, {
+               .fourcc         = V4L2_PIX_FMT_RGB555, /* gggbbbbb arrrrrgg */
+               .code           = MEDIA_BUS_FMT_RGB555_2X8_PADHI_LE,
+               .bpp            = 16,
+       }, {
+               .fourcc         = V4L2_PIX_FMT_RGB555X, /* arrrrrgg gggbbbbb */
+               .code           = MEDIA_BUS_FMT_RGB555_2X8_PADHI_BE,
+               .bpp            = 16,
+       }, {
+               .fourcc         = V4L2_PIX_FMT_RGB24, /* rgb */
+               .code           = MEDIA_BUS_FMT_RGB888_2X12_LE,
+               .bpp            = 24,
+       }, {
+               .fourcc         = V4L2_PIX_FMT_BGR24, /* bgr */
+               .code           = MEDIA_BUS_FMT_RGB888_2X12_BE,
+               .bpp            = 24,
+       }, {
+               .fourcc         = V4L2_PIX_FMT_RGB32, /* argb */
+               .code           = MEDIA_BUS_FMT_ARGB8888_1X32,
+               .bpp            = 32,
+       }, {
+               .fourcc         = V4L2_PIX_FMT_SBGGR8,
+               .code           = MEDIA_BUS_FMT_SBGGR8_1X8,
+               .bpp            = 8,
+       }, {
+               .fourcc         = V4L2_PIX_FMT_SGBRG8,
+               .code           = MEDIA_BUS_FMT_SGBRG8_1X8,
+               .bpp            = 8,
+       }, {
+               .fourcc         = V4L2_PIX_FMT_SGRBG8,
+               .code           = MEDIA_BUS_FMT_SGRBG8_1X8,
+               .bpp            = 8,
+       }, {
+               .fourcc         = V4L2_PIX_FMT_SRGGB8,
+               .code           = MEDIA_BUS_FMT_SRGGB8_1X8,
+               .bpp            = 8,
+       }, {
+               .fourcc         = V4L2_PIX_FMT_SBGGR10,
+               .code           = MEDIA_BUS_FMT_SBGGR10_1X10,
+               .bpp            = 10,
+       }, {
+               .fourcc         = V4L2_PIX_FMT_SGBRG10,
+               .code           = MEDIA_BUS_FMT_SGBRG10_1X10,
+               .bpp            = 10,
+       }, {
+               .fourcc         = V4L2_PIX_FMT_SGRBG10,
+               .code           = MEDIA_BUS_FMT_SGRBG10_1X10,
+               .bpp            = 10,
+       }, {
+               .fourcc         = V4L2_PIX_FMT_SRGGB10,
+               .code           = MEDIA_BUS_FMT_SRGGB10_1X10,
+               .bpp            = 10,
+       }, {
+               .fourcc         = V4L2_PIX_FMT_SBGGR12,
+               .code           = MEDIA_BUS_FMT_SBGGR12_1X12,
+               .bpp            = 12,
+       }, {
+               .fourcc         = V4L2_PIX_FMT_SGBRG12,
+               .code           = MEDIA_BUS_FMT_SGBRG12_1X12,
+               .bpp            = 12,
+       }, {
+               .fourcc         = V4L2_PIX_FMT_SGRBG12,
+               .code           = MEDIA_BUS_FMT_SGRBG12_1X12,
+               .bpp            = 12,
+       }, {
+               .fourcc         = V4L2_PIX_FMT_SRGGB12,
+               .code           = MEDIA_BUS_FMT_SRGGB12_1X12,
+               .bpp            = 12,
+       },
+};
+
+const unsigned int cal_num_formats = ARRAY_SIZE(cal_formats);
+
+const struct cal_fmt *cal_format_by_fourcc(u32 fourcc)
+{
+       unsigned int i;
+
+       for (i = 0; i < ARRAY_SIZE(cal_formats); ++i) {
+               if (cal_formats[i].fourcc == fourcc)
+                       return &cal_formats[i];
+       }
+
+       return NULL;
+}
+
+const struct cal_fmt *cal_format_by_code(u32 code)
+{
+       unsigned int i;
+
+       for (i = 0; i < ARRAY_SIZE(cal_formats); ++i) {
+               if (cal_formats[i].code == code)
+                       return &cal_formats[i];
+       }
+
+       return NULL;
+}
+
 /* ------------------------------------------------------------------
  *     Platform Data
  * ------------------------------------------------------------------
index 955dacd878e76db9e5561f07a47762f39d5c72b4..6e6bdf8af3d072f2d56e1b716b2aca8a923a0198 100644 (file)
@@ -244,6 +244,11 @@ static inline void cal_set_field(u32 *valp, u32 field, u32 mask)
        *valp = val;
 }
 
+extern const struct cal_fmt cal_formats[];
+extern const unsigned int cal_num_formats;
+const struct cal_fmt *cal_format_by_fourcc(u32 fourcc);
+const struct cal_fmt *cal_format_by_code(u32 code);
+
 void cal_quickdump_regs(struct cal_dev *cal);
 
 void cal_camerarx_disable(struct cal_camerarx *phy);