[1/8] media: Add a pixel format for MIPI packed 12bit luma only.

Message ID 20240209164825.166800-2-jacopo.mondi@ideasonboard.com (mailing list archive)
State Superseded
Headers
Series media: raspberrypi: Add support for PiSP Back End |

Commit Message

Jacopo Mondi Feb. 9, 2024, 4:48 p.m. UTC
  From: Dave Stevenson <dave.stevenson@raspberrypi.com>

This is the format used by monochrome 12bit image sensors.

Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
Signed-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
---
 .../userspace-api/media/v4l/pixfmt-y12p.rst   | 38 +++++++++++++++++++
 .../userspace-api/media/v4l/yuv-formats.rst   |  1 +
 drivers/media/v4l2-core/v4l2-ioctl.c          |  1 +
 include/uapi/linux/videodev2.h                |  1 +
 4 files changed, 41 insertions(+)
 create mode 100644 Documentation/userspace-api/media/v4l/pixfmt-y12p.rst
  

Comments

Nicolas Dufresne Feb. 9, 2024, 5:53 p.m. UTC | #1
Le vendredi 09 février 2024 à 17:48 +0100, Jacopo Mondi a écrit :
> From: Dave Stevenson <dave.stevenson@raspberrypi.com>
> 
> This is the format used by monochrome 12bit image sensors.
> 
> Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
> Signed-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
> ---
>  .../userspace-api/media/v4l/pixfmt-y12p.rst   | 38 +++++++++++++++++++
>  .../userspace-api/media/v4l/yuv-formats.rst   |  1 +
>  drivers/media/v4l2-core/v4l2-ioctl.c          |  1 +
>  include/uapi/linux/videodev2.h                |  1 +
>  4 files changed, 41 insertions(+)
>  create mode 100644 Documentation/userspace-api/media/v4l/pixfmt-y12p.rst
> 
> diff --git a/Documentation/userspace-api/media/v4l/pixfmt-y12p.rst b/Documentation/userspace-api/media/v4l/pixfmt-y12p.rst
> new file mode 100644
> index 000000000000..b2eb4a72724d
> --- /dev/null
> +++ b/Documentation/userspace-api/media/v4l/pixfmt-y12p.rst
> @@ -0,0 +1,38 @@
> +.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
> +
> +.. _V4L2-PIX-FMT-Y12P:
> +
> +******************************
> +V4L2_PIX_FMT_Y12P ('Y12P')
> +******************************
> +
> +Grey-scale image as a MIPI RAW12 packed array
> +
> +
> +Description
> +===========
> +
> +This is a packed grey-scale image format with a depth of 12 bits per
> +pixel. Two consecutive pixels are packed into 3 bytes. The first 2 bytes
> +contain the 8 high order bits of the pixels, and the 3rd byte contains the 4
> +least significants bits of each pixel, in the same order.

This is an interesting arrangement, which make me feel that Y12P is perhaps bit
too generic ? Perhaps something like:

  V4L2_PIX_FMT_Y12_MIPI

That being said, I don't mind if you reserve the nice and short name for the
first occurrence of such format in 20 years (it might equally be the last). Will
they do the same for Y10, by storing 4 bytes of higher 8bit of 4 pixels, and
packing the remaining lower 2 bits packed in the fif bytes ? Cause for this one,
we'd have confusion, since CODEC usually just place all the bits in order over 5
bytes here (which have its own issues of course).

> +
> +**Byte Order.**
> +Each cell is one byte.
> +
> +.. tabularcolumns:: |p{2.2cm}|p{1.2cm}|p{1.2cm}|p{3.1cm}|
> +
> +
> +.. flat-table::
> +    :header-rows:  0
> +    :stub-columns: 0
> +    :widths:       2 1 1 1
> +
> +
> +    -  -  start + 0:
> +       -  Y'\ :sub:`00high`
> +       -  Y'\ :sub:`01high`
> +       -  Y'\ :sub:`01low`\ (bits 7--4)
> +
> +          Y'\ :sub:`00low`\ (bits 3--0)
> +
> diff --git a/Documentation/userspace-api/media/v4l/yuv-formats.rst b/Documentation/userspace-api/media/v4l/yuv-formats.rst
> index 24b34cdfa6fe..7c9ccfdd94cd 100644
> --- a/Documentation/userspace-api/media/v4l/yuv-formats.rst
> +++ b/Documentation/userspace-api/media/v4l/yuv-formats.rst
> @@ -267,6 +267,7 @@ image.
>      pixfmt-packed-yuv
>      pixfmt-yuv-planar
>      pixfmt-yuv-luma
> +    pixfmt-y12p
>      pixfmt-y8i
>      pixfmt-y12i
>      pixfmt-uv8
> diff --git a/drivers/media/v4l2-core/v4l2-ioctl.c b/drivers/media/v4l2-core/v4l2-ioctl.c
> index 33076af4dfdb..483498c55899 100644
> --- a/drivers/media/v4l2-core/v4l2-ioctl.c
> +++ b/drivers/media/v4l2-core/v4l2-ioctl.c
> @@ -1311,6 +1311,7 @@ static void v4l_fill_fmtdesc(struct v4l2_fmtdesc *fmt)
>  	case V4L2_PIX_FMT_Y16_BE:	descr = "16-bit Greyscale BE"; break;
>  	case V4L2_PIX_FMT_Y10BPACK:	descr = "10-bit Greyscale (Packed)"; break;
>  	case V4L2_PIX_FMT_Y10P:		descr = "10-bit Greyscale (MIPI Packed)"; break;
> +	case V4L2_PIX_FMT_Y12P:		descr = "12-bit Greyscale (MIPI Packed)"; break;
>  	case V4L2_PIX_FMT_IPU3_Y10:	descr = "10-bit greyscale (IPU3 Packed)"; break;
>  	case V4L2_PIX_FMT_Y8I:		descr = "Interleaved 8-bit Greyscale"; break;
>  	case V4L2_PIX_FMT_Y12I:		descr = "Interleaved 12-bit Greyscale"; break;
> diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h
> index a8015e5e7fa4..11ebf9b22ccb 100644
> --- a/include/uapi/linux/videodev2.h
> +++ b/include/uapi/linux/videodev2.h
> @@ -598,6 +598,7 @@ struct v4l2_pix_format {
>  /* Grey bit-packed formats */
>  #define V4L2_PIX_FMT_Y10BPACK    v4l2_fourcc('Y', '1', '0', 'B') /* 10  Greyscale bit-packed */
>  #define V4L2_PIX_FMT_Y10P    v4l2_fourcc('Y', '1', '0', 'P') /* 10  Greyscale, MIPI RAW10 packed */
> +#define V4L2_PIX_FMT_Y12P    v4l2_fourcc('Y', '1', '2', 'P') /* 12  Greyscale, MIPI RAW12 packed */
>  #define V4L2_PIX_FMT_IPU3_Y10		v4l2_fourcc('i', 'p', '3', 'y') /* IPU3 packed 10-bit greyscale */
>  
>  /* Palette formats */
  
Dave Stevenson Feb. 9, 2024, 7:28 p.m. UTC | #2
Hi Nicolas

On Fri, 9 Feb 2024 at 17:53, Nicolas Dufresne <nicolas@ndufresne.ca> wrote:
>
> Le vendredi 09 février 2024 à 17:48 +0100, Jacopo Mondi a écrit :
> > From: Dave Stevenson <dave.stevenson@raspberrypi.com>
> >
> > This is the format used by monochrome 12bit image sensors.
> >
> > Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
> > Signed-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
> > ---
> >  .../userspace-api/media/v4l/pixfmt-y12p.rst   | 38 +++++++++++++++++++
> >  .../userspace-api/media/v4l/yuv-formats.rst   |  1 +
> >  drivers/media/v4l2-core/v4l2-ioctl.c          |  1 +
> >  include/uapi/linux/videodev2.h                |  1 +
> >  4 files changed, 41 insertions(+)
> >  create mode 100644 Documentation/userspace-api/media/v4l/pixfmt-y12p.rst
> >
> > diff --git a/Documentation/userspace-api/media/v4l/pixfmt-y12p.rst b/Documentation/userspace-api/media/v4l/pixfmt-y12p.rst
> > new file mode 100644
> > index 000000000000..b2eb4a72724d
> > --- /dev/null
> > +++ b/Documentation/userspace-api/media/v4l/pixfmt-y12p.rst
> > @@ -0,0 +1,38 @@
> > +.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
> > +
> > +.. _V4L2-PIX-FMT-Y12P:
> > +
> > +******************************
> > +V4L2_PIX_FMT_Y12P ('Y12P')
> > +******************************
> > +
> > +Grey-scale image as a MIPI RAW12 packed array
> > +
> > +
> > +Description
> > +===========
> > +
> > +This is a packed grey-scale image format with a depth of 12 bits per
> > +pixel. Two consecutive pixels are packed into 3 bytes. The first 2 bytes
> > +contain the 8 high order bits of the pixels, and the 3rd byte contains the 4
> > +least significants bits of each pixel, in the same order.
>
> This is an interesting arrangement, which make me feel that Y12P is perhaps bit
> too generic ? Perhaps something like:
>
>   V4L2_PIX_FMT_Y12_MIPI
>
> That being said, I don't mind if you reserve the nice and short name for the
> first occurrence of such format in 20 years (it might equally be the last). Will
> they do the same for Y10, by storing 4 bytes of higher 8bit of 4 pixels, and
> packing the remaining lower 2 bits packed in the fif bytes ? Cause for this one,
> we'd have confusion, since CODEC usually just place all the bits in order over 5
> bytes here (which have its own issues of course).

We already have V4L2_PIX_FMT_Y10P defined for the MIPI packing for
10bit luma-only.
https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/pixfmt-yuv-luma.html

This is only extending the definitions for the other bit depths using
the same pattern.

Adding the P is also the same pattern as for the Bayer formats -
V4L2_PIX_FMT_SRGGB10 for the 10bit unpacked to 16bit, and
V4L2_PIX_FMT_SRGGB10P for the MIPI packed variant.

I'm not inventing anything new here :)

  Dave

> > +
> > +**Byte Order.**
> > +Each cell is one byte.
> > +
> > +.. tabularcolumns:: |p{2.2cm}|p{1.2cm}|p{1.2cm}|p{3.1cm}|
> > +
> > +
> > +.. flat-table::
> > +    :header-rows:  0
> > +    :stub-columns: 0
> > +    :widths:       2 1 1 1
> > +
> > +
> > +    -  -  start + 0:
> > +       -  Y'\ :sub:`00high`
> > +       -  Y'\ :sub:`01high`
> > +       -  Y'\ :sub:`01low`\ (bits 7--4)
> > +
> > +          Y'\ :sub:`00low`\ (bits 3--0)
> > +
> > diff --git a/Documentation/userspace-api/media/v4l/yuv-formats.rst b/Documentation/userspace-api/media/v4l/yuv-formats.rst
> > index 24b34cdfa6fe..7c9ccfdd94cd 100644
> > --- a/Documentation/userspace-api/media/v4l/yuv-formats.rst
> > +++ b/Documentation/userspace-api/media/v4l/yuv-formats.rst
> > @@ -267,6 +267,7 @@ image.
> >      pixfmt-packed-yuv
> >      pixfmt-yuv-planar
> >      pixfmt-yuv-luma
> > +    pixfmt-y12p
> >      pixfmt-y8i
> >      pixfmt-y12i
> >      pixfmt-uv8
> > diff --git a/drivers/media/v4l2-core/v4l2-ioctl.c b/drivers/media/v4l2-core/v4l2-ioctl.c
> > index 33076af4dfdb..483498c55899 100644
> > --- a/drivers/media/v4l2-core/v4l2-ioctl.c
> > +++ b/drivers/media/v4l2-core/v4l2-ioctl.c
> > @@ -1311,6 +1311,7 @@ static void v4l_fill_fmtdesc(struct v4l2_fmtdesc *fmt)
> >       case V4L2_PIX_FMT_Y16_BE:       descr = "16-bit Greyscale BE"; break;
> >       case V4L2_PIX_FMT_Y10BPACK:     descr = "10-bit Greyscale (Packed)"; break;
> >       case V4L2_PIX_FMT_Y10P:         descr = "10-bit Greyscale (MIPI Packed)"; break;
> > +     case V4L2_PIX_FMT_Y12P:         descr = "12-bit Greyscale (MIPI Packed)"; break;
> >       case V4L2_PIX_FMT_IPU3_Y10:     descr = "10-bit greyscale (IPU3 Packed)"; break;
> >       case V4L2_PIX_FMT_Y8I:          descr = "Interleaved 8-bit Greyscale"; break;
> >       case V4L2_PIX_FMT_Y12I:         descr = "Interleaved 12-bit Greyscale"; break;
> > diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h
> > index a8015e5e7fa4..11ebf9b22ccb 100644
> > --- a/include/uapi/linux/videodev2.h
> > +++ b/include/uapi/linux/videodev2.h
> > @@ -598,6 +598,7 @@ struct v4l2_pix_format {
> >  /* Grey bit-packed formats */
> >  #define V4L2_PIX_FMT_Y10BPACK    v4l2_fourcc('Y', '1', '0', 'B') /* 10  Greyscale bit-packed */
> >  #define V4L2_PIX_FMT_Y10P    v4l2_fourcc('Y', '1', '0', 'P') /* 10  Greyscale, MIPI RAW10 packed */
> > +#define V4L2_PIX_FMT_Y12P    v4l2_fourcc('Y', '1', '2', 'P') /* 12  Greyscale, MIPI RAW12 packed */
> >  #define V4L2_PIX_FMT_IPU3_Y10                v4l2_fourcc('i', 'p', '3', 'y') /* IPU3 packed 10-bit greyscale */
> >
> >  /* Palette formats */
>
  
Nicolas Dufresne Feb. 9, 2024, 9:15 p.m. UTC | #3
Le vendredi 09 février 2024 à 19:28 +0000, Dave Stevenson a écrit :
> Hi Nicolas
> 
> On Fri, 9 Feb 2024 at 17:53, Nicolas Dufresne <nicolas@ndufresne.ca> wrote:
> > 
> > Le vendredi 09 février 2024 à 17:48 +0100, Jacopo Mondi a écrit :
> > > From: Dave Stevenson <dave.stevenson@raspberrypi.com>
> > > 
> > > This is the format used by monochrome 12bit image sensors.
> > > 
> > > Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
> > > Signed-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
> > > ---
> > >  .../userspace-api/media/v4l/pixfmt-y12p.rst   | 38 +++++++++++++++++++
> > >  .../userspace-api/media/v4l/yuv-formats.rst   |  1 +
> > >  drivers/media/v4l2-core/v4l2-ioctl.c          |  1 +
> > >  include/uapi/linux/videodev2.h                |  1 +
> > >  4 files changed, 41 insertions(+)
> > >  create mode 100644 Documentation/userspace-api/media/v4l/pixfmt-y12p.rst
> > > 
> > > diff --git a/Documentation/userspace-api/media/v4l/pixfmt-y12p.rst b/Documentation/userspace-api/media/v4l/pixfmt-y12p.rst
> > > new file mode 100644
> > > index 000000000000..b2eb4a72724d
> > > --- /dev/null
> > > +++ b/Documentation/userspace-api/media/v4l/pixfmt-y12p.rst
> > > @@ -0,0 +1,38 @@
> > > +.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
> > > +
> > > +.. _V4L2-PIX-FMT-Y12P:
> > > +
> > > +******************************
> > > +V4L2_PIX_FMT_Y12P ('Y12P')
> > > +******************************
> > > +
> > > +Grey-scale image as a MIPI RAW12 packed array
> > > +
> > > +
> > > +Description
> > > +===========
> > > +
> > > +This is a packed grey-scale image format with a depth of 12 bits per
> > > +pixel. Two consecutive pixels are packed into 3 bytes. The first 2 bytes
> > > +contain the 8 high order bits of the pixels, and the 3rd byte contains the 4
> > > +least significants bits of each pixel, in the same order.
> > 
> > This is an interesting arrangement, which make me feel that Y12P is perhaps bit
> > too generic ? Perhaps something like:
> > 
> >   V4L2_PIX_FMT_Y12_MIPI
> > 
> > That being said, I don't mind if you reserve the nice and short name for the
> > first occurrence of such format in 20 years (it might equally be the last). Will
> > they do the same for Y10, by storing 4 bytes of higher 8bit of 4 pixels, and
> > packing the remaining lower 2 bits packed in the fif bytes ? Cause for this one,
> > we'd have confusion, since CODEC usually just place all the bits in order over 5
> > bytes here (which have its own issues of course).
> 
> We already have V4L2_PIX_FMT_Y10P defined for the MIPI packing for
> 10bit luma-only.
> https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/pixfmt-yuv-luma.html
> 
> This is only extending the definitions for the other bit depths using
> the same pattern.
> 
> Adding the P is also the same pattern as for the Bayer formats -
> V4L2_PIX_FMT_SRGGB10 for the 10bit unpacked to 16bit, and
> V4L2_PIX_FMT_SRGGB10P for the MIPI packed variant.
> 
> I'm not inventing anything new here :)

A bit sad, but what can we do, I keep missing patches ;-P

Nicolas

> 
>   Dave
> 
> > > +
> > > +**Byte Order.**
> > > +Each cell is one byte.
> > > +
> > > +.. tabularcolumns:: |p{2.2cm}|p{1.2cm}|p{1.2cm}|p{3.1cm}|
> > > +
> > > +
> > > +.. flat-table::
> > > +    :header-rows:  0
> > > +    :stub-columns: 0
> > > +    :widths:       2 1 1 1
> > > +
> > > +
> > > +    -  -  start + 0:
> > > +       -  Y'\ :sub:`00high`
> > > +       -  Y'\ :sub:`01high`
> > > +       -  Y'\ :sub:`01low`\ (bits 7--4)
> > > +
> > > +          Y'\ :sub:`00low`\ (bits 3--0)
> > > +
> > > diff --git a/Documentation/userspace-api/media/v4l/yuv-formats.rst b/Documentation/userspace-api/media/v4l/yuv-formats.rst
> > > index 24b34cdfa6fe..7c9ccfdd94cd 100644
> > > --- a/Documentation/userspace-api/media/v4l/yuv-formats.rst
> > > +++ b/Documentation/userspace-api/media/v4l/yuv-formats.rst
> > > @@ -267,6 +267,7 @@ image.
> > >      pixfmt-packed-yuv
> > >      pixfmt-yuv-planar
> > >      pixfmt-yuv-luma
> > > +    pixfmt-y12p
> > >      pixfmt-y8i
> > >      pixfmt-y12i
> > >      pixfmt-uv8
> > > diff --git a/drivers/media/v4l2-core/v4l2-ioctl.c b/drivers/media/v4l2-core/v4l2-ioctl.c
> > > index 33076af4dfdb..483498c55899 100644
> > > --- a/drivers/media/v4l2-core/v4l2-ioctl.c
> > > +++ b/drivers/media/v4l2-core/v4l2-ioctl.c
> > > @@ -1311,6 +1311,7 @@ static void v4l_fill_fmtdesc(struct v4l2_fmtdesc *fmt)
> > >       case V4L2_PIX_FMT_Y16_BE:       descr = "16-bit Greyscale BE"; break;
> > >       case V4L2_PIX_FMT_Y10BPACK:     descr = "10-bit Greyscale (Packed)"; break;
> > >       case V4L2_PIX_FMT_Y10P:         descr = "10-bit Greyscale (MIPI Packed)"; break;
> > > +     case V4L2_PIX_FMT_Y12P:         descr = "12-bit Greyscale (MIPI Packed)"; break;
> > >       case V4L2_PIX_FMT_IPU3_Y10:     descr = "10-bit greyscale (IPU3 Packed)"; break;
> > >       case V4L2_PIX_FMT_Y8I:          descr = "Interleaved 8-bit Greyscale"; break;
> > >       case V4L2_PIX_FMT_Y12I:         descr = "Interleaved 12-bit Greyscale"; break;
> > > diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h
> > > index a8015e5e7fa4..11ebf9b22ccb 100644
> > > --- a/include/uapi/linux/videodev2.h
> > > +++ b/include/uapi/linux/videodev2.h
> > > @@ -598,6 +598,7 @@ struct v4l2_pix_format {
> > >  /* Grey bit-packed formats */
> > >  #define V4L2_PIX_FMT_Y10BPACK    v4l2_fourcc('Y', '1', '0', 'B') /* 10  Greyscale bit-packed */
> > >  #define V4L2_PIX_FMT_Y10P    v4l2_fourcc('Y', '1', '0', 'P') /* 10  Greyscale, MIPI RAW10 packed */
> > > +#define V4L2_PIX_FMT_Y12P    v4l2_fourcc('Y', '1', '2', 'P') /* 12  Greyscale, MIPI RAW12 packed */
> > >  #define V4L2_PIX_FMT_IPU3_Y10                v4l2_fourcc('i', 'p', '3', 'y') /* IPU3 packed 10-bit greyscale */
> > > 
> > >  /* Palette formats */
> >
  
Dave Stevenson Feb. 12, 2024, 11:58 a.m. UTC | #4
On Fri, 9 Feb 2024 at 21:15, Nicolas Dufresne <nicolas@ndufresne.ca> wrote:
>
> Le vendredi 09 février 2024 à 19:28 +0000, Dave Stevenson a écrit :
> > Hi Nicolas
> >
> > On Fri, 9 Feb 2024 at 17:53, Nicolas Dufresne <nicolas@ndufresne.ca> wrote:
> > >
> > > Le vendredi 09 février 2024 à 17:48 +0100, Jacopo Mondi a écrit :
> > > > From: Dave Stevenson <dave.stevenson@raspberrypi.com>
> > > >
> > > > This is the format used by monochrome 12bit image sensors.
> > > >
> > > > Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
> > > > Signed-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
> > > > ---
> > > >  .../userspace-api/media/v4l/pixfmt-y12p.rst   | 38 +++++++++++++++++++
> > > >  .../userspace-api/media/v4l/yuv-formats.rst   |  1 +
> > > >  drivers/media/v4l2-core/v4l2-ioctl.c          |  1 +
> > > >  include/uapi/linux/videodev2.h                |  1 +
> > > >  4 files changed, 41 insertions(+)
> > > >  create mode 100644 Documentation/userspace-api/media/v4l/pixfmt-y12p.rst
> > > >
> > > > diff --git a/Documentation/userspace-api/media/v4l/pixfmt-y12p.rst b/Documentation/userspace-api/media/v4l/pixfmt-y12p.rst
> > > > new file mode 100644
> > > > index 000000000000..b2eb4a72724d
> > > > --- /dev/null
> > > > +++ b/Documentation/userspace-api/media/v4l/pixfmt-y12p.rst
> > > > @@ -0,0 +1,38 @@
> > > > +.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
> > > > +
> > > > +.. _V4L2-PIX-FMT-Y12P:
> > > > +
> > > > +******************************
> > > > +V4L2_PIX_FMT_Y12P ('Y12P')
> > > > +******************************
> > > > +
> > > > +Grey-scale image as a MIPI RAW12 packed array
> > > > +
> > > > +
> > > > +Description
> > > > +===========
> > > > +
> > > > +This is a packed grey-scale image format with a depth of 12 bits per
> > > > +pixel. Two consecutive pixels are packed into 3 bytes. The first 2 bytes
> > > > +contain the 8 high order bits of the pixels, and the 3rd byte contains the 4
> > > > +least significants bits of each pixel, in the same order.
> > >
> > > This is an interesting arrangement, which make me feel that Y12P is perhaps bit
> > > too generic ? Perhaps something like:
> > >
> > >   V4L2_PIX_FMT_Y12_MIPI
> > >
> > > That being said, I don't mind if you reserve the nice and short name for the
> > > first occurrence of such format in 20 years (it might equally be the last). Will
> > > they do the same for Y10, by storing 4 bytes of higher 8bit of 4 pixels, and
> > > packing the remaining lower 2 bits packed in the fif bytes ? Cause for this one,
> > > we'd have confusion, since CODEC usually just place all the bits in order over 5
> > > bytes here (which have its own issues of course).
> >
> > We already have V4L2_PIX_FMT_Y10P defined for the MIPI packing for
> > 10bit luma-only.
> > https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/pixfmt-yuv-luma.html
> >
> > This is only extending the definitions for the other bit depths using
> > the same pattern.
> >
> > Adding the P is also the same pattern as for the Bayer formats -
> > V4L2_PIX_FMT_SRGGB10 for the 10bit unpacked to 16bit, and
> > V4L2_PIX_FMT_SRGGB10P for the MIPI packed variant.
> >
> > I'm not inventing anything new here :)
>
> A bit sad, but what can we do, I keep missing patches ;-P

Not recently though.

V4L2_PIX_FMT_Y10P was added in July 2018. [1]
The use of V4L2_PIX_FMT_Sxxxx10P for Bayer format MIPI 10 bit packing
was added in Dec 2014 [2]

  Dave

[1] 6e15bec49f36 media: v4l: Add new 10-bit packed grayscale format
[2] 4353e36ee84d [media] v4l: Add packed Bayer raw10 pixel formats

> Nicolas
>
> >
> >   Dave
> >
> > > > +
> > > > +**Byte Order.**
> > > > +Each cell is one byte.
> > > > +
> > > > +.. tabularcolumns:: |p{2.2cm}|p{1.2cm}|p{1.2cm}|p{3.1cm}|
> > > > +
> > > > +
> > > > +.. flat-table::
> > > > +    :header-rows:  0
> > > > +    :stub-columns: 0
> > > > +    :widths:       2 1 1 1
> > > > +
> > > > +
> > > > +    -  -  start + 0:
> > > > +       -  Y'\ :sub:`00high`
> > > > +       -  Y'\ :sub:`01high`
> > > > +       -  Y'\ :sub:`01low`\ (bits 7--4)
> > > > +
> > > > +          Y'\ :sub:`00low`\ (bits 3--0)
> > > > +
> > > > diff --git a/Documentation/userspace-api/media/v4l/yuv-formats.rst b/Documentation/userspace-api/media/v4l/yuv-formats.rst
> > > > index 24b34cdfa6fe..7c9ccfdd94cd 100644
> > > > --- a/Documentation/userspace-api/media/v4l/yuv-formats.rst
> > > > +++ b/Documentation/userspace-api/media/v4l/yuv-formats.rst
> > > > @@ -267,6 +267,7 @@ image.
> > > >      pixfmt-packed-yuv
> > > >      pixfmt-yuv-planar
> > > >      pixfmt-yuv-luma
> > > > +    pixfmt-y12p
> > > >      pixfmt-y8i
> > > >      pixfmt-y12i
> > > >      pixfmt-uv8
> > > > diff --git a/drivers/media/v4l2-core/v4l2-ioctl.c b/drivers/media/v4l2-core/v4l2-ioctl.c
> > > > index 33076af4dfdb..483498c55899 100644
> > > > --- a/drivers/media/v4l2-core/v4l2-ioctl.c
> > > > +++ b/drivers/media/v4l2-core/v4l2-ioctl.c
> > > > @@ -1311,6 +1311,7 @@ static void v4l_fill_fmtdesc(struct v4l2_fmtdesc *fmt)
> > > >       case V4L2_PIX_FMT_Y16_BE:       descr = "16-bit Greyscale BE"; break;
> > > >       case V4L2_PIX_FMT_Y10BPACK:     descr = "10-bit Greyscale (Packed)"; break;
> > > >       case V4L2_PIX_FMT_Y10P:         descr = "10-bit Greyscale (MIPI Packed)"; break;
> > > > +     case V4L2_PIX_FMT_Y12P:         descr = "12-bit Greyscale (MIPI Packed)"; break;
> > > >       case V4L2_PIX_FMT_IPU3_Y10:     descr = "10-bit greyscale (IPU3 Packed)"; break;
> > > >       case V4L2_PIX_FMT_Y8I:          descr = "Interleaved 8-bit Greyscale"; break;
> > > >       case V4L2_PIX_FMT_Y12I:         descr = "Interleaved 12-bit Greyscale"; break;
> > > > diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h
> > > > index a8015e5e7fa4..11ebf9b22ccb 100644
> > > > --- a/include/uapi/linux/videodev2.h
> > > > +++ b/include/uapi/linux/videodev2.h
> > > > @@ -598,6 +598,7 @@ struct v4l2_pix_format {
> > > >  /* Grey bit-packed formats */
> > > >  #define V4L2_PIX_FMT_Y10BPACK    v4l2_fourcc('Y', '1', '0', 'B') /* 10  Greyscale bit-packed */
> > > >  #define V4L2_PIX_FMT_Y10P    v4l2_fourcc('Y', '1', '0', 'P') /* 10  Greyscale, MIPI RAW10 packed */
> > > > +#define V4L2_PIX_FMT_Y12P    v4l2_fourcc('Y', '1', '2', 'P') /* 12  Greyscale, MIPI RAW12 packed */
> > > >  #define V4L2_PIX_FMT_IPU3_Y10                v4l2_fourcc('i', 'p', '3', 'y') /* IPU3 packed 10-bit greyscale */
> > > >
> > > >  /* Palette formats */
> > >
>
  
Sakari Ailus Feb. 12, 2024, 12:49 p.m. UTC | #5
Hi Jacopo,

On Fri, Feb 09, 2024 at 05:48:16PM +0100, Jacopo Mondi wrote:
> From: Dave Stevenson <dave.stevenson@raspberrypi.com>
> 
> This is the format used by monochrome 12bit image sensors.
> 
> Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
> Signed-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
> ---
>  .../userspace-api/media/v4l/pixfmt-y12p.rst   | 38 +++++++++++++++++++
>  .../userspace-api/media/v4l/yuv-formats.rst   |  1 +
>  drivers/media/v4l2-core/v4l2-ioctl.c          |  1 +
>  include/uapi/linux/videodev2.h                |  1 +
>  4 files changed, 41 insertions(+)
>  create mode 100644 Documentation/userspace-api/media/v4l/pixfmt-y12p.rst
> 
> diff --git a/Documentation/userspace-api/media/v4l/pixfmt-y12p.rst b/Documentation/userspace-api/media/v4l/pixfmt-y12p.rst
> new file mode 100644
> index 000000000000..b2eb4a72724d
> --- /dev/null
> +++ b/Documentation/userspace-api/media/v4l/pixfmt-y12p.rst
> @@ -0,0 +1,38 @@
> +.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
> +
> +.. _V4L2-PIX-FMT-Y12P:
> +
> +******************************
> +V4L2_PIX_FMT_Y12P ('Y12P')
> +******************************

You have extra asterisks here.

> +
> +Grey-scale image as a MIPI RAW12 packed array

I think you may mention it aligns with MIPI CSI-2 but the same packing may
be used elsewhere, it's fairly trivial. The similar Bayer format
definitions don't mention this.

> +
> +
> +Description
> +===========
> +
> +This is a packed grey-scale image format with a depth of 12 bits per
> +pixel. Two consecutive pixels are packed into 3 bytes. The first 2 bytes
> +contain the 8 high order bits of the pixels, and the 3rd byte contains the 4
> +least significants bits of each pixel, in the same order.
> +
> +**Byte Order.**
> +Each cell is one byte.
> +
> +.. tabularcolumns:: |p{2.2cm}|p{1.2cm}|p{1.2cm}|p{3.1cm}|
> +
> +
> +.. flat-table::
> +    :header-rows:  0
> +    :stub-columns: 0
> +    :widths:       2 1 1 1
> +
> +
> +    -  -  start + 0:
> +       -  Y'\ :sub:`00high`
> +       -  Y'\ :sub:`01high`
> +       -  Y'\ :sub:`01low`\ (bits 7--4)
> +

Is the newline here intentional?

> +          Y'\ :sub:`00low`\ (bits 3--0)
> +
> diff --git a/Documentation/userspace-api/media/v4l/yuv-formats.rst b/Documentation/userspace-api/media/v4l/yuv-formats.rst
> index 24b34cdfa6fe..7c9ccfdd94cd 100644
> --- a/Documentation/userspace-api/media/v4l/yuv-formats.rst
> +++ b/Documentation/userspace-api/media/v4l/yuv-formats.rst
> @@ -267,6 +267,7 @@ image.
>      pixfmt-packed-yuv
>      pixfmt-yuv-planar
>      pixfmt-yuv-luma
> +    pixfmt-y12p
>      pixfmt-y8i
>      pixfmt-y12i
>      pixfmt-uv8
> diff --git a/drivers/media/v4l2-core/v4l2-ioctl.c b/drivers/media/v4l2-core/v4l2-ioctl.c
> index 33076af4dfdb..483498c55899 100644
> --- a/drivers/media/v4l2-core/v4l2-ioctl.c
> +++ b/drivers/media/v4l2-core/v4l2-ioctl.c
> @@ -1311,6 +1311,7 @@ static void v4l_fill_fmtdesc(struct v4l2_fmtdesc *fmt)
>  	case V4L2_PIX_FMT_Y16_BE:	descr = "16-bit Greyscale BE"; break;
>  	case V4L2_PIX_FMT_Y10BPACK:	descr = "10-bit Greyscale (Packed)"; break;
>  	case V4L2_PIX_FMT_Y10P:		descr = "10-bit Greyscale (MIPI Packed)"; break;
> +	case V4L2_PIX_FMT_Y12P:		descr = "12-bit Greyscale (MIPI Packed)"; break;
>  	case V4L2_PIX_FMT_IPU3_Y10:	descr = "10-bit greyscale (IPU3 Packed)"; break;
>  	case V4L2_PIX_FMT_Y8I:		descr = "Interleaved 8-bit Greyscale"; break;
>  	case V4L2_PIX_FMT_Y12I:		descr = "Interleaved 12-bit Greyscale"; break;
> diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h
> index a8015e5e7fa4..11ebf9b22ccb 100644
> --- a/include/uapi/linux/videodev2.h
> +++ b/include/uapi/linux/videodev2.h
> @@ -598,6 +598,7 @@ struct v4l2_pix_format {
>  /* Grey bit-packed formats */
>  #define V4L2_PIX_FMT_Y10BPACK    v4l2_fourcc('Y', '1', '0', 'B') /* 10  Greyscale bit-packed */
>  #define V4L2_PIX_FMT_Y10P    v4l2_fourcc('Y', '1', '0', 'P') /* 10  Greyscale, MIPI RAW10 packed */
> +#define V4L2_PIX_FMT_Y12P    v4l2_fourcc('Y', '1', '2', 'P') /* 12  Greyscale, MIPI RAW12 packed */
>  #define V4L2_PIX_FMT_IPU3_Y10		v4l2_fourcc('i', 'p', '3', 'y') /* IPU3 packed 10-bit greyscale */
>  
>  /* Palette formats */
  
Jacopo Mondi Feb. 23, 2024, 9:15 a.m. UTC | #6
Hello

On Mon, Feb 12, 2024 at 11:58:32AM +0000, Dave Stevenson wrote:
> On Fri, 9 Feb 2024 at 21:15, Nicolas Dufresne <nicolas@ndufresne.ca> wrote:
> >
> > Le vendredi 09 février 2024 à 19:28 +0000, Dave Stevenson a écrit :
> > > Hi Nicolas
> > >
> > > On Fri, 9 Feb 2024 at 17:53, Nicolas Dufresne <nicolas@ndufresne.ca> wrote:
> > > >
> > > > Le vendredi 09 février 2024 à 17:48 +0100, Jacopo Mondi a écrit :
> > > > > From: Dave Stevenson <dave.stevenson@raspberrypi.com>
> > > > >
> > > > > This is the format used by monochrome 12bit image sensors.
> > > > >
> > > > > Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
> > > > > Signed-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
> > > > > ---
> > > > >  .../userspace-api/media/v4l/pixfmt-y12p.rst   | 38 +++++++++++++++++++
> > > > >  .../userspace-api/media/v4l/yuv-formats.rst   |  1 +
> > > > >  drivers/media/v4l2-core/v4l2-ioctl.c          |  1 +
> > > > >  include/uapi/linux/videodev2.h                |  1 +
> > > > >  4 files changed, 41 insertions(+)
> > > > >  create mode 100644 Documentation/userspace-api/media/v4l/pixfmt-y12p.rst
> > > > >
> > > > > diff --git a/Documentation/userspace-api/media/v4l/pixfmt-y12p.rst b/Documentation/userspace-api/media/v4l/pixfmt-y12p.rst
> > > > > new file mode 100644
> > > > > index 000000000000..b2eb4a72724d
> > > > > --- /dev/null
> > > > > +++ b/Documentation/userspace-api/media/v4l/pixfmt-y12p.rst
> > > > > @@ -0,0 +1,38 @@
> > > > > +.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
> > > > > +
> > > > > +.. _V4L2-PIX-FMT-Y12P:
> > > > > +
> > > > > +******************************
> > > > > +V4L2_PIX_FMT_Y12P ('Y12P')
> > > > > +******************************
> > > > > +
> > > > > +Grey-scale image as a MIPI RAW12 packed array
> > > > > +
> > > > > +
> > > > > +Description
> > > > > +===========
> > > > > +
> > > > > +This is a packed grey-scale image format with a depth of 12 bits per
> > > > > +pixel. Two consecutive pixels are packed into 3 bytes. The first 2 bytes
> > > > > +contain the 8 high order bits of the pixels, and the 3rd byte contains the 4
> > > > > +least significants bits of each pixel, in the same order.
> > > >
> > > > This is an interesting arrangement, which make me feel that Y12P is perhaps bit
> > > > too generic ? Perhaps something like:
> > > >
> > > >   V4L2_PIX_FMT_Y12_MIPI
> > > >
> > > > That being said, I don't mind if you reserve the nice and short name for the
> > > > first occurrence of such format in 20 years (it might equally be the last). Will
> > > > they do the same for Y10, by storing 4 bytes of higher 8bit of 4 pixels, and
> > > > packing the remaining lower 2 bits packed in the fif bytes ? Cause for this one,
> > > > we'd have confusion, since CODEC usually just place all the bits in order over 5
> > > > bytes here (which have its own issues of course).
> > >
> > > We already have V4L2_PIX_FMT_Y10P defined for the MIPI packing for
> > > 10bit luma-only.
> > > https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/pixfmt-yuv-luma.html
> > >
> > > This is only extending the definitions for the other bit depths using
> > > the same pattern.
> > >

I now wonder why creating two new files instead of adding Y12P and
Y14P to the table of luma-only formats we have in the above mentioned
file.

In the notes at the bottom of the page we can indeed report that the P
variants of the Y10 Y12 and Y14 formats are packed according to the
MIPI CSI-2 specification, even if, as Dave said, this is a pretty
standard convention for the educated readers of the v4l2 spec.

In facts, this is what has been done already for the existing luma
formats in:
af4f45057695 ("media: doc: pixfmt-yuv: Move all luma-only YUV formats to common file")

So I guess it's correct to keep expanding the existing file instead of
adding new ones. Sorry for not having realized it earlier.


> > > Adding the P is also the same pattern as for the Bayer formats -
> > > V4L2_PIX_FMT_SRGGB10 for the 10bit unpacked to 16bit, and
> > > V4L2_PIX_FMT_SRGGB10P for the MIPI packed variant.
> > >
> > > I'm not inventing anything new here :)
> >
> > A bit sad, but what can we do, I keep missing patches ;-P
>
> Not recently though.
>
> V4L2_PIX_FMT_Y10P was added in July 2018. [1]
> The use of V4L2_PIX_FMT_Sxxxx10P for Bayer format MIPI 10 bit packing
> was added in Dec 2014 [2]
>
>   Dave
>
> [1] 6e15bec49f36 media: v4l: Add new 10-bit packed grayscale format
> [2] 4353e36ee84d [media] v4l: Add packed Bayer raw10 pixel formats
>
> > Nicolas
> >
> > >
> > >   Dave
> > >
> > > > > +
> > > > > +**Byte Order.**
> > > > > +Each cell is one byte.
> > > > > +
> > > > > +.. tabularcolumns:: |p{2.2cm}|p{1.2cm}|p{1.2cm}|p{3.1cm}|
> > > > > +
> > > > > +
> > > > > +.. flat-table::
> > > > > +    :header-rows:  0
> > > > > +    :stub-columns: 0
> > > > > +    :widths:       2 1 1 1
> > > > > +
> > > > > +
> > > > > +    -  -  start + 0:
> > > > > +       -  Y'\ :sub:`00high`
> > > > > +       -  Y'\ :sub:`01high`
> > > > > +       -  Y'\ :sub:`01low`\ (bits 7--4)
> > > > > +
> > > > > +          Y'\ :sub:`00low`\ (bits 3--0)
> > > > > +
> > > > > diff --git a/Documentation/userspace-api/media/v4l/yuv-formats.rst b/Documentation/userspace-api/media/v4l/yuv-formats.rst
> > > > > index 24b34cdfa6fe..7c9ccfdd94cd 100644
> > > > > --- a/Documentation/userspace-api/media/v4l/yuv-formats.rst
> > > > > +++ b/Documentation/userspace-api/media/v4l/yuv-formats.rst
> > > > > @@ -267,6 +267,7 @@ image.
> > > > >      pixfmt-packed-yuv
> > > > >      pixfmt-yuv-planar
> > > > >      pixfmt-yuv-luma
> > > > > +    pixfmt-y12p
> > > > >      pixfmt-y8i
> > > > >      pixfmt-y12i
> > > > >      pixfmt-uv8
> > > > > diff --git a/drivers/media/v4l2-core/v4l2-ioctl.c b/drivers/media/v4l2-core/v4l2-ioctl.c
> > > > > index 33076af4dfdb..483498c55899 100644
> > > > > --- a/drivers/media/v4l2-core/v4l2-ioctl.c
> > > > > +++ b/drivers/media/v4l2-core/v4l2-ioctl.c
> > > > > @@ -1311,6 +1311,7 @@ static void v4l_fill_fmtdesc(struct v4l2_fmtdesc *fmt)
> > > > >       case V4L2_PIX_FMT_Y16_BE:       descr = "16-bit Greyscale BE"; break;
> > > > >       case V4L2_PIX_FMT_Y10BPACK:     descr = "10-bit Greyscale (Packed)"; break;
> > > > >       case V4L2_PIX_FMT_Y10P:         descr = "10-bit Greyscale (MIPI Packed)"; break;
> > > > > +     case V4L2_PIX_FMT_Y12P:         descr = "12-bit Greyscale (MIPI Packed)"; break;
> > > > >       case V4L2_PIX_FMT_IPU3_Y10:     descr = "10-bit greyscale (IPU3 Packed)"; break;
> > > > >       case V4L2_PIX_FMT_Y8I:          descr = "Interleaved 8-bit Greyscale"; break;
> > > > >       case V4L2_PIX_FMT_Y12I:         descr = "Interleaved 12-bit Greyscale"; break;
> > > > > diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h
> > > > > index a8015e5e7fa4..11ebf9b22ccb 100644
> > > > > --- a/include/uapi/linux/videodev2.h
> > > > > +++ b/include/uapi/linux/videodev2.h
> > > > > @@ -598,6 +598,7 @@ struct v4l2_pix_format {
> > > > >  /* Grey bit-packed formats */
> > > > >  #define V4L2_PIX_FMT_Y10BPACK    v4l2_fourcc('Y', '1', '0', 'B') /* 10  Greyscale bit-packed */
> > > > >  #define V4L2_PIX_FMT_Y10P    v4l2_fourcc('Y', '1', '0', 'P') /* 10  Greyscale, MIPI RAW10 packed */
> > > > > +#define V4L2_PIX_FMT_Y12P    v4l2_fourcc('Y', '1', '2', 'P') /* 12  Greyscale, MIPI RAW12 packed */
> > > > >  #define V4L2_PIX_FMT_IPU3_Y10                v4l2_fourcc('i', 'p', '3', 'y') /* IPU3 packed 10-bit greyscale */
> > > > >
> > > > >  /* Palette formats */
> > > >
> >
  

Patch

diff --git a/Documentation/userspace-api/media/v4l/pixfmt-y12p.rst b/Documentation/userspace-api/media/v4l/pixfmt-y12p.rst
new file mode 100644
index 000000000000..b2eb4a72724d
--- /dev/null
+++ b/Documentation/userspace-api/media/v4l/pixfmt-y12p.rst
@@ -0,0 +1,38 @@ 
+.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
+
+.. _V4L2-PIX-FMT-Y12P:
+
+******************************
+V4L2_PIX_FMT_Y12P ('Y12P')
+******************************
+
+Grey-scale image as a MIPI RAW12 packed array
+
+
+Description
+===========
+
+This is a packed grey-scale image format with a depth of 12 bits per
+pixel. Two consecutive pixels are packed into 3 bytes. The first 2 bytes
+contain the 8 high order bits of the pixels, and the 3rd byte contains the 4
+least significants bits of each pixel, in the same order.
+
+**Byte Order.**
+Each cell is one byte.
+
+.. tabularcolumns:: |p{2.2cm}|p{1.2cm}|p{1.2cm}|p{3.1cm}|
+
+
+.. flat-table::
+    :header-rows:  0
+    :stub-columns: 0
+    :widths:       2 1 1 1
+
+
+    -  -  start + 0:
+       -  Y'\ :sub:`00high`
+       -  Y'\ :sub:`01high`
+       -  Y'\ :sub:`01low`\ (bits 7--4)
+
+          Y'\ :sub:`00low`\ (bits 3--0)
+
diff --git a/Documentation/userspace-api/media/v4l/yuv-formats.rst b/Documentation/userspace-api/media/v4l/yuv-formats.rst
index 24b34cdfa6fe..7c9ccfdd94cd 100644
--- a/Documentation/userspace-api/media/v4l/yuv-formats.rst
+++ b/Documentation/userspace-api/media/v4l/yuv-formats.rst
@@ -267,6 +267,7 @@  image.
     pixfmt-packed-yuv
     pixfmt-yuv-planar
     pixfmt-yuv-luma
+    pixfmt-y12p
     pixfmt-y8i
     pixfmt-y12i
     pixfmt-uv8
diff --git a/drivers/media/v4l2-core/v4l2-ioctl.c b/drivers/media/v4l2-core/v4l2-ioctl.c
index 33076af4dfdb..483498c55899 100644
--- a/drivers/media/v4l2-core/v4l2-ioctl.c
+++ b/drivers/media/v4l2-core/v4l2-ioctl.c
@@ -1311,6 +1311,7 @@  static void v4l_fill_fmtdesc(struct v4l2_fmtdesc *fmt)
 	case V4L2_PIX_FMT_Y16_BE:	descr = "16-bit Greyscale BE"; break;
 	case V4L2_PIX_FMT_Y10BPACK:	descr = "10-bit Greyscale (Packed)"; break;
 	case V4L2_PIX_FMT_Y10P:		descr = "10-bit Greyscale (MIPI Packed)"; break;
+	case V4L2_PIX_FMT_Y12P:		descr = "12-bit Greyscale (MIPI Packed)"; break;
 	case V4L2_PIX_FMT_IPU3_Y10:	descr = "10-bit greyscale (IPU3 Packed)"; break;
 	case V4L2_PIX_FMT_Y8I:		descr = "Interleaved 8-bit Greyscale"; break;
 	case V4L2_PIX_FMT_Y12I:		descr = "Interleaved 12-bit Greyscale"; break;
diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h
index a8015e5e7fa4..11ebf9b22ccb 100644
--- a/include/uapi/linux/videodev2.h
+++ b/include/uapi/linux/videodev2.h
@@ -598,6 +598,7 @@  struct v4l2_pix_format {
 /* Grey bit-packed formats */
 #define V4L2_PIX_FMT_Y10BPACK    v4l2_fourcc('Y', '1', '0', 'B') /* 10  Greyscale bit-packed */
 #define V4L2_PIX_FMT_Y10P    v4l2_fourcc('Y', '1', '0', 'P') /* 10  Greyscale, MIPI RAW10 packed */
+#define V4L2_PIX_FMT_Y12P    v4l2_fourcc('Y', '1', '2', 'P') /* 12  Greyscale, MIPI RAW12 packed */
 #define V4L2_PIX_FMT_IPU3_Y10		v4l2_fourcc('i', 'p', '3', 'y') /* IPU3 packed 10-bit greyscale */
 
 /* Palette formats */