OSDN Git Service

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 f57767e..355bb36 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 34a344b..b9ee535 100644 (file)
@@ -44,6 +44,133 @@ 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 955dacd..6e6bdf8 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);