root/drivers/media/platform/raspberrypi/rp1-cfe/cfe-fmts.h
/* SPDX-License-Identifier: GPL-2.0 */
/*
 * RP1 Camera Front End formats definition
 *
 * Copyright (C) 2021-2024 - Raspberry Pi Ltd.
 */
#ifndef _CFE_FMTS_H_
#define _CFE_FMTS_H_

#include "cfe.h"
#include <media/mipi-csi2.h>

static const struct cfe_fmt formats[] = {
        /* YUV Formats */
        {
                .fourcc = V4L2_PIX_FMT_YUYV,
                .code = MEDIA_BUS_FMT_YUYV8_1X16,
                .depth = 16,
                .csi_dt = MIPI_CSI2_DT_YUV422_8B,
        },
        {
                .fourcc = V4L2_PIX_FMT_UYVY,
                .code = MEDIA_BUS_FMT_UYVY8_1X16,
                .depth = 16,
                .csi_dt = MIPI_CSI2_DT_YUV422_8B,
        },
        {
                .fourcc = V4L2_PIX_FMT_YVYU,
                .code = MEDIA_BUS_FMT_YVYU8_1X16,
                .depth = 16,
                .csi_dt = MIPI_CSI2_DT_YUV422_8B,
        },
        {
                .fourcc = V4L2_PIX_FMT_VYUY,
                .code = MEDIA_BUS_FMT_VYUY8_1X16,
                .depth = 16,
                .csi_dt = MIPI_CSI2_DT_YUV422_8B,
        },
        {
                /* RGB Formats */
                .fourcc = V4L2_PIX_FMT_RGB565, /* gggbbbbb rrrrrggg */
                .code = MEDIA_BUS_FMT_RGB565_2X8_LE,
                .depth = 16,
                .csi_dt = MIPI_CSI2_DT_RGB565,
        },
        {       .fourcc = V4L2_PIX_FMT_RGB565X, /* rrrrrggg gggbbbbb */
                .code = MEDIA_BUS_FMT_RGB565_2X8_BE,
                .depth = 16,
                .csi_dt = MIPI_CSI2_DT_RGB565,
        },
        {
                .fourcc = V4L2_PIX_FMT_RGB555, /* gggbbbbb arrrrrgg */
                .code = MEDIA_BUS_FMT_RGB555_2X8_PADHI_LE,
                .depth = 16,
                .csi_dt = MIPI_CSI2_DT_RGB555,
        },
        {
                .fourcc = V4L2_PIX_FMT_RGB555X, /* arrrrrgg gggbbbbb */
                .code = MEDIA_BUS_FMT_RGB555_2X8_PADHI_BE,
                .depth = 16,
                .csi_dt = MIPI_CSI2_DT_RGB555,
        },
        {
                .fourcc = V4L2_PIX_FMT_RGB24, /* rgb */
                .code = MEDIA_BUS_FMT_RGB888_1X24,
                .depth = 24,
                .csi_dt = MIPI_CSI2_DT_RGB888,
        },
        {
                .fourcc = V4L2_PIX_FMT_BGR24, /* bgr */
                .code = MEDIA_BUS_FMT_BGR888_1X24,
                .depth = 24,
                .csi_dt = MIPI_CSI2_DT_RGB888,
        },
        {
                .fourcc = V4L2_PIX_FMT_RGB32, /* argb */
                .code = MEDIA_BUS_FMT_ARGB8888_1X32,
                .depth = 32,
                .csi_dt = 0x0,
        },

        /* Bayer Formats */
        {
                .fourcc = V4L2_PIX_FMT_SBGGR8,
                .code = MEDIA_BUS_FMT_SBGGR8_1X8,
                .depth = 8,
                .csi_dt = MIPI_CSI2_DT_RAW8,
                .remap = { V4L2_PIX_FMT_SBGGR16, V4L2_PIX_FMT_PISP_COMP1_BGGR },
        },
        {
                .fourcc = V4L2_PIX_FMT_SGBRG8,
                .code = MEDIA_BUS_FMT_SGBRG8_1X8,
                .depth = 8,
                .csi_dt = MIPI_CSI2_DT_RAW8,
                .remap = { V4L2_PIX_FMT_SGBRG16, V4L2_PIX_FMT_PISP_COMP1_GBRG },
        },
        {
                .fourcc = V4L2_PIX_FMT_SGRBG8,
                .code = MEDIA_BUS_FMT_SGRBG8_1X8,
                .depth = 8,
                .csi_dt = MIPI_CSI2_DT_RAW8,
                .remap = { V4L2_PIX_FMT_SGRBG16, V4L2_PIX_FMT_PISP_COMP1_GRBG },
        },
        {
                .fourcc = V4L2_PIX_FMT_SRGGB8,
                .code = MEDIA_BUS_FMT_SRGGB8_1X8,
                .depth = 8,
                .csi_dt = MIPI_CSI2_DT_RAW8,
                .remap = { V4L2_PIX_FMT_SRGGB16, V4L2_PIX_FMT_PISP_COMP1_RGGB },
        },
        {
                .fourcc = V4L2_PIX_FMT_SBGGR10P,
                .code = MEDIA_BUS_FMT_SBGGR10_1X10,
                .depth = 10,
                .csi_dt = MIPI_CSI2_DT_RAW10,
                .remap = { V4L2_PIX_FMT_SBGGR16, V4L2_PIX_FMT_PISP_COMP1_BGGR },
        },
        {
                .fourcc = V4L2_PIX_FMT_SGBRG10P,
                .code = MEDIA_BUS_FMT_SGBRG10_1X10,
                .depth = 10,
                .csi_dt = MIPI_CSI2_DT_RAW10,
                .remap = { V4L2_PIX_FMT_SGBRG16, V4L2_PIX_FMT_PISP_COMP1_GBRG },
        },
        {
                .fourcc = V4L2_PIX_FMT_SGRBG10P,
                .code = MEDIA_BUS_FMT_SGRBG10_1X10,
                .depth = 10,
                .csi_dt = MIPI_CSI2_DT_RAW10,
                .remap = { V4L2_PIX_FMT_SGRBG16, V4L2_PIX_FMT_PISP_COMP1_GRBG },
        },
        {
                .fourcc = V4L2_PIX_FMT_SRGGB10P,
                .code = MEDIA_BUS_FMT_SRGGB10_1X10,
                .depth = 10,
                .csi_dt = MIPI_CSI2_DT_RAW10,
                .remap = { V4L2_PIX_FMT_SRGGB16, V4L2_PIX_FMT_PISP_COMP1_RGGB },
        },
        {
                .fourcc = V4L2_PIX_FMT_SBGGR12P,
                .code = MEDIA_BUS_FMT_SBGGR12_1X12,
                .depth = 12,
                .csi_dt = MIPI_CSI2_DT_RAW12,
                .remap = { V4L2_PIX_FMT_SBGGR16, V4L2_PIX_FMT_PISP_COMP1_BGGR },
        },
        {
                .fourcc = V4L2_PIX_FMT_SGBRG12P,
                .code = MEDIA_BUS_FMT_SGBRG12_1X12,
                .depth = 12,
                .csi_dt = MIPI_CSI2_DT_RAW12,
                .remap = { V4L2_PIX_FMT_SGBRG16, V4L2_PIX_FMT_PISP_COMP1_GBRG },
        },
        {
                .fourcc = V4L2_PIX_FMT_SGRBG12P,
                .code = MEDIA_BUS_FMT_SGRBG12_1X12,
                .depth = 12,
                .csi_dt = MIPI_CSI2_DT_RAW12,
                .remap = { V4L2_PIX_FMT_SGRBG16, V4L2_PIX_FMT_PISP_COMP1_GRBG },
        },
        {
                .fourcc = V4L2_PIX_FMT_SRGGB12P,
                .code = MEDIA_BUS_FMT_SRGGB12_1X12,
                .depth = 12,
                .csi_dt = MIPI_CSI2_DT_RAW12,
                .remap = { V4L2_PIX_FMT_SRGGB16, V4L2_PIX_FMT_PISP_COMP1_RGGB },
        },
        {
                .fourcc = V4L2_PIX_FMT_SBGGR14P,
                .code = MEDIA_BUS_FMT_SBGGR14_1X14,
                .depth = 14,
                .csi_dt = MIPI_CSI2_DT_RAW14,
                .remap = { V4L2_PIX_FMT_SBGGR16, V4L2_PIX_FMT_PISP_COMP1_BGGR },
        },
        {
                .fourcc = V4L2_PIX_FMT_SGBRG14P,
                .code = MEDIA_BUS_FMT_SGBRG14_1X14,
                .depth = 14,
                .csi_dt = MIPI_CSI2_DT_RAW14,
                .remap = { V4L2_PIX_FMT_SGBRG16, V4L2_PIX_FMT_PISP_COMP1_GBRG },
        },
        {
                .fourcc = V4L2_PIX_FMT_SGRBG14P,
                .code = MEDIA_BUS_FMT_SGRBG14_1X14,
                .depth = 14,
                .csi_dt = MIPI_CSI2_DT_RAW14,
                .remap = { V4L2_PIX_FMT_SGRBG16, V4L2_PIX_FMT_PISP_COMP1_GRBG },
        },
        {
                .fourcc = V4L2_PIX_FMT_SRGGB14P,
                .code = MEDIA_BUS_FMT_SRGGB14_1X14,
                .depth = 14,
                .csi_dt = MIPI_CSI2_DT_RAW14,
                .remap = { V4L2_PIX_FMT_SRGGB16, V4L2_PIX_FMT_PISP_COMP1_RGGB },
        },
        {
                .fourcc = V4L2_PIX_FMT_SBGGR16,
                .code = MEDIA_BUS_FMT_SBGGR16_1X16,
                .depth = 16,
                .csi_dt = MIPI_CSI2_DT_RAW16,
                .flags = CFE_FORMAT_FLAG_FE_OUT,
                .remap = { V4L2_PIX_FMT_SBGGR16, V4L2_PIX_FMT_PISP_COMP1_BGGR },
        },
        {
                .fourcc = V4L2_PIX_FMT_SGBRG16,
                .code = MEDIA_BUS_FMT_SGBRG16_1X16,
                .depth = 16,
                .csi_dt = MIPI_CSI2_DT_RAW16,
                .flags = CFE_FORMAT_FLAG_FE_OUT,
                .remap = { V4L2_PIX_FMT_SGBRG16, V4L2_PIX_FMT_PISP_COMP1_GBRG },
        },
        {
                .fourcc = V4L2_PIX_FMT_SGRBG16,
                .code = MEDIA_BUS_FMT_SGRBG16_1X16,
                .depth = 16,
                .csi_dt = MIPI_CSI2_DT_RAW16,
                .flags = CFE_FORMAT_FLAG_FE_OUT,
                .remap = { V4L2_PIX_FMT_SGRBG16, V4L2_PIX_FMT_PISP_COMP1_GRBG },
        },
        {
                .fourcc = V4L2_PIX_FMT_SRGGB16,
                .code = MEDIA_BUS_FMT_SRGGB16_1X16,
                .depth = 16,
                .csi_dt = MIPI_CSI2_DT_RAW16,
                .flags = CFE_FORMAT_FLAG_FE_OUT,
                .remap = { V4L2_PIX_FMT_SRGGB16, V4L2_PIX_FMT_PISP_COMP1_RGGB },
        },
        /* PiSP Compressed Mode 1 */
        {
                .fourcc = V4L2_PIX_FMT_PISP_COMP1_RGGB,
                .code = MEDIA_BUS_FMT_SRGGB16_1X16,
                .depth = 8,
                .flags = CFE_FORMAT_FLAG_FE_OUT,
        },
        {
                .fourcc = V4L2_PIX_FMT_PISP_COMP1_BGGR,
                .code = MEDIA_BUS_FMT_SBGGR16_1X16,
                .depth = 8,
                .flags = CFE_FORMAT_FLAG_FE_OUT,
        },
        {
                .fourcc = V4L2_PIX_FMT_PISP_COMP1_GBRG,
                .code = MEDIA_BUS_FMT_SGBRG16_1X16,
                .depth = 8,
                .flags = CFE_FORMAT_FLAG_FE_OUT,
        },
        {
                .fourcc = V4L2_PIX_FMT_PISP_COMP1_GRBG,
                .code = MEDIA_BUS_FMT_SGRBG16_1X16,
                .depth = 8,
                .flags = CFE_FORMAT_FLAG_FE_OUT,
        },
        /* Greyscale format */
        {
                .fourcc = V4L2_PIX_FMT_GREY,
                .code = MEDIA_BUS_FMT_Y8_1X8,
                .depth = 8,
                .csi_dt = MIPI_CSI2_DT_RAW8,
                .remap = { V4L2_PIX_FMT_Y16, V4L2_PIX_FMT_PISP_COMP1_MONO },
        },
        {
                .fourcc = V4L2_PIX_FMT_Y10P,
                .code = MEDIA_BUS_FMT_Y10_1X10,
                .depth = 10,
                .csi_dt = MIPI_CSI2_DT_RAW10,
                .remap = { V4L2_PIX_FMT_Y16, V4L2_PIX_FMT_PISP_COMP1_MONO },
        },
        {
                .fourcc = V4L2_PIX_FMT_Y12P,
                .code = MEDIA_BUS_FMT_Y12_1X12,
                .depth = 12,
                .csi_dt = MIPI_CSI2_DT_RAW12,
                .remap = { V4L2_PIX_FMT_Y16, V4L2_PIX_FMT_PISP_COMP1_MONO },
        },
        {
                .fourcc = V4L2_PIX_FMT_Y14P,
                .code = MEDIA_BUS_FMT_Y14_1X14,
                .depth = 14,
                .csi_dt = MIPI_CSI2_DT_RAW14,
                .remap = { V4L2_PIX_FMT_Y16, V4L2_PIX_FMT_PISP_COMP1_MONO },
        },
        {
                .fourcc = V4L2_PIX_FMT_Y16,
                .code = MEDIA_BUS_FMT_Y16_1X16,
                .depth = 16,
                .csi_dt = MIPI_CSI2_DT_RAW16,
                .flags = CFE_FORMAT_FLAG_FE_OUT,
                .remap = { V4L2_PIX_FMT_Y16, V4L2_PIX_FMT_PISP_COMP1_MONO },
        },
        {
                .fourcc = V4L2_PIX_FMT_PISP_COMP1_MONO,
                .code = MEDIA_BUS_FMT_Y16_1X16,
                .depth = 8,
                .flags = CFE_FORMAT_FLAG_FE_OUT,
        },

        /* Embedded data formats */
        {
                .fourcc = V4L2_META_FMT_GENERIC_8,
                .code = MEDIA_BUS_FMT_META_8,
                .depth = 8,
                .csi_dt = MIPI_CSI2_DT_EMBEDDED_8B,
                .flags = CFE_FORMAT_FLAG_META_CAP,
        },
        {
                .fourcc = V4L2_META_FMT_GENERIC_CSI2_10,
                .code = MEDIA_BUS_FMT_META_10,
                .depth = 10,
                .csi_dt = MIPI_CSI2_DT_EMBEDDED_8B,
                .flags = CFE_FORMAT_FLAG_META_CAP,
        },
        {
                .fourcc = V4L2_META_FMT_GENERIC_CSI2_12,
                .code = MEDIA_BUS_FMT_META_12,
                .depth = 12,
                .csi_dt = MIPI_CSI2_DT_EMBEDDED_8B,
                .flags = CFE_FORMAT_FLAG_META_CAP,
        },

        /* Frontend formats */
        {
                .fourcc = V4L2_META_FMT_RPI_FE_CFG,
                .code = MEDIA_BUS_FMT_FIXED,
                .flags = CFE_FORMAT_FLAG_META_OUT,
        },
        {
                .fourcc = V4L2_META_FMT_RPI_FE_STATS,
                .code = MEDIA_BUS_FMT_FIXED,
                .flags = CFE_FORMAT_FLAG_META_CAP,
        },
};

#endif /* _CFE_FMTS_H_ */