]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
media: ipu6: isys: Add support for monochrome media bus formats
authorHans de Goede <hansg@kernel.org>
Mon, 20 Oct 2025 15:37:41 +0000 (17:37 +0200)
committerHans Verkuil <hverkuil+cisco@kernel.org>
Thu, 13 Nov 2025 09:57:52 +0000 (10:57 +0100)
Add support for monochrome media bus formats, for use with monochrome/IR
camera sensors.

This has been tested on a Dell XPS 13 9320 with OV1A1B IR sensor.

Signed-off-by: Hans de Goede <hansg@kernel.org>
Reviewed-by: Bingbu Cao <bingbu.cao@intel.com>
Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Hans Verkuil <hverkuil+cisco@kernel.org>
drivers/media/pci/intel/ipu6/ipu6-isys-csi2.c
drivers/media/pci/intel/ipu6/ipu6-isys-subdev.c
drivers/media/pci/intel/ipu6/ipu6-isys-video.c

index d858976112ba2bfc2907f9b88dc6c6434053f4a3..43a2a16a3c2a64bcf69745d28a914e9878f021d0 100644 (file)
@@ -42,6 +42,10 @@ static const u32 csi2_supported_codes[] = {
        MEDIA_BUS_FMT_SGBRG8_1X8,
        MEDIA_BUS_FMT_SGRBG8_1X8,
        MEDIA_BUS_FMT_SRGGB8_1X8,
+       MEDIA_BUS_FMT_Y8_1X8,
+       MEDIA_BUS_FMT_Y10_1X10,
+       MEDIA_BUS_FMT_Y12_1X12,
+       MEDIA_BUS_FMT_Y16_1X16,
        MEDIA_BUS_FMT_META_8,
        MEDIA_BUS_FMT_META_10,
        MEDIA_BUS_FMT_META_12,
index 463a0adf9e131cc5de753d0496ca9c78dac26d22..869e7d4ba572248bd83714be01ac1fd6477e6ebb 100644 (file)
@@ -25,24 +25,28 @@ unsigned int ipu6_isys_mbus_code_to_bpp(u32 code)
        case MEDIA_BUS_FMT_RGB565_1X16:
        case MEDIA_BUS_FMT_UYVY8_1X16:
        case MEDIA_BUS_FMT_YUYV8_1X16:
+       case MEDIA_BUS_FMT_Y16_1X16:
        case MEDIA_BUS_FMT_META_16:
                return 16;
        case MEDIA_BUS_FMT_SBGGR12_1X12:
        case MEDIA_BUS_FMT_SGBRG12_1X12:
        case MEDIA_BUS_FMT_SGRBG12_1X12:
        case MEDIA_BUS_FMT_SRGGB12_1X12:
+       case MEDIA_BUS_FMT_Y12_1X12:
        case MEDIA_BUS_FMT_META_12:
                return 12;
        case MEDIA_BUS_FMT_SBGGR10_1X10:
        case MEDIA_BUS_FMT_SGBRG10_1X10:
        case MEDIA_BUS_FMT_SGRBG10_1X10:
        case MEDIA_BUS_FMT_SRGGB10_1X10:
+       case MEDIA_BUS_FMT_Y10_1X10:
        case MEDIA_BUS_FMT_META_10:
                return 10;
        case MEDIA_BUS_FMT_SBGGR8_1X8:
        case MEDIA_BUS_FMT_SGBRG8_1X8:
        case MEDIA_BUS_FMT_SGRBG8_1X8:
        case MEDIA_BUS_FMT_SRGGB8_1X8:
+       case MEDIA_BUS_FMT_Y8_1X8:
        case MEDIA_BUS_FMT_META_8:
                return 8;
        default:
@@ -65,21 +69,25 @@ unsigned int ipu6_isys_mbus_code_to_mipi(u32 code)
        case MEDIA_BUS_FMT_SGBRG16_1X16:
        case MEDIA_BUS_FMT_SGRBG16_1X16:
        case MEDIA_BUS_FMT_SRGGB16_1X16:
+       case MEDIA_BUS_FMT_Y16_1X16:
                return MIPI_CSI2_DT_RAW16;
        case MEDIA_BUS_FMT_SBGGR12_1X12:
        case MEDIA_BUS_FMT_SGBRG12_1X12:
        case MEDIA_BUS_FMT_SGRBG12_1X12:
        case MEDIA_BUS_FMT_SRGGB12_1X12:
+       case MEDIA_BUS_FMT_Y12_1X12:
                return MIPI_CSI2_DT_RAW12;
        case MEDIA_BUS_FMT_SBGGR10_1X10:
        case MEDIA_BUS_FMT_SGBRG10_1X10:
        case MEDIA_BUS_FMT_SGRBG10_1X10:
        case MEDIA_BUS_FMT_SRGGB10_1X10:
+       case MEDIA_BUS_FMT_Y10_1X10:
                return MIPI_CSI2_DT_RAW10;
        case MEDIA_BUS_FMT_SBGGR8_1X8:
        case MEDIA_BUS_FMT_SGBRG8_1X8:
        case MEDIA_BUS_FMT_SGRBG8_1X8:
        case MEDIA_BUS_FMT_SRGGB8_1X8:
+       case MEDIA_BUS_FMT_Y8_1X8:
                return MIPI_CSI2_DT_RAW8;
        case MEDIA_BUS_FMT_META_8:
        case MEDIA_BUS_FMT_META_10:
@@ -96,15 +104,23 @@ unsigned int ipu6_isys_mbus_code_to_mipi(u32 code)
 
 bool ipu6_isys_is_bayer_format(u32 code)
 {
-       switch (ipu6_isys_mbus_code_to_mipi(code)) {
-       case MIPI_CSI2_DT_RAW8:
-       case MIPI_CSI2_DT_RAW10:
-       case MIPI_CSI2_DT_RAW12:
-       case MIPI_CSI2_DT_RAW14:
-       case MIPI_CSI2_DT_RAW16:
-       case MIPI_CSI2_DT_RAW20:
-       case MIPI_CSI2_DT_RAW24:
-       case MIPI_CSI2_DT_RAW28:
+       switch (code) {
+       case MEDIA_BUS_FMT_SBGGR8_1X8:
+       case MEDIA_BUS_FMT_SGBRG8_1X8:
+       case MEDIA_BUS_FMT_SGRBG8_1X8:
+       case MEDIA_BUS_FMT_SRGGB8_1X8:
+       case MEDIA_BUS_FMT_SBGGR10_1X10:
+       case MEDIA_BUS_FMT_SGBRG10_1X10:
+       case MEDIA_BUS_FMT_SGRBG10_1X10:
+       case MEDIA_BUS_FMT_SRGGB10_1X10:
+       case MEDIA_BUS_FMT_SBGGR12_1X12:
+       case MEDIA_BUS_FMT_SGBRG12_1X12:
+       case MEDIA_BUS_FMT_SGRBG12_1X12:
+       case MEDIA_BUS_FMT_SRGGB12_1X12:
+       case MEDIA_BUS_FMT_SRGGB16_1X16:
+       case MEDIA_BUS_FMT_SGRBG16_1X16:
+       case MEDIA_BUS_FMT_SGBRG16_1X16:
+       case MEDIA_BUS_FMT_SBGGR16_1X16:
                return true;
        default:
                return false;
index f3f3bc0615e5dc698be5c479dfed8ef2eb49cbfb..dec8f5ffcfa5fe47d5256e276bff6a5806d3c8bc 100644 (file)
@@ -77,6 +77,20 @@ const struct ipu6_isys_pixelformat ipu6_isys_pfmts[] = {
          IPU6_FW_ISYS_FRAME_FORMAT_RAW10 },
        { V4L2_PIX_FMT_SRGGB10P, 10, 10, MEDIA_BUS_FMT_SRGGB10_1X10,
          IPU6_FW_ISYS_FRAME_FORMAT_RAW10 },
+
+       { V4L2_PIX_FMT_GREY, 8, 8, MEDIA_BUS_FMT_Y8_1X8,
+         IPU6_FW_ISYS_FRAME_FORMAT_RAW8 },
+       { V4L2_PIX_FMT_Y10, 16, 10, MEDIA_BUS_FMT_Y10_1X10,
+         IPU6_FW_ISYS_FRAME_FORMAT_RAW16 },
+       { V4L2_PIX_FMT_Y12, 16, 12, MEDIA_BUS_FMT_Y12_1X12,
+         IPU6_FW_ISYS_FRAME_FORMAT_RAW16 },
+       { V4L2_PIX_FMT_Y16, 16, 16, MEDIA_BUS_FMT_Y16_1X16,
+         IPU6_FW_ISYS_FRAME_FORMAT_RAW16 },
+       { V4L2_PIX_FMT_Y10P, 10, 10, MEDIA_BUS_FMT_Y10_1X10,
+         IPU6_FW_ISYS_FRAME_FORMAT_RAW10 },
+       { V4L2_PIX_FMT_Y12P, 12, 12, MEDIA_BUS_FMT_Y12_1X12,
+         IPU6_FW_ISYS_FRAME_FORMAT_RAW12 },
+
        { V4L2_PIX_FMT_UYVY, 16, 16, MEDIA_BUS_FMT_UYVY8_1X16,
          IPU6_FW_ISYS_FRAME_FORMAT_UYVY},
        { V4L2_PIX_FMT_YUYV, 16, 16, MEDIA_BUS_FMT_YUYV8_1X16,