forked from mirrors/linux
		
	 2d83eb5d24
			
		
	
	
		2d83eb5d24
		
	
	
	
	
		
			
			Since v4l2_fill_fmtdesc will be called in the ioctl v4l_enum_fmt anyway. We can set the format description and compressed flag from v4l_fill_fmtdesc and can remove the extra name field in uvc_format_desc. Reviewed-by: Daniel Scally <dan.scally@ideasonboard.com> Tested-by: Daniel Scally <dan.scally@ideasonboard.com> Signed-off-by: Michael Grzeschik <m.grzeschik@pengutronix.de> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Link: https://lore.kernel.org/r/20230126231456.3402323-6-m.grzeschik@pengutronix.de Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
		
			
				
	
	
		
			158 lines
		
	
	
	
		
			6.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			158 lines
		
	
	
	
		
			6.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* SPDX-License-Identifier: GPL-2.0-or-later */
 | |
| /*
 | |
|  *  v4l2 uvc internal API header
 | |
|  *
 | |
|  *  Some commonly needed functions for uvc drivers
 | |
|  */
 | |
| 
 | |
| #ifndef __LINUX_V4L2_UVC_H
 | |
| #define __LINUX_V4L2_UVC_H
 | |
| 
 | |
| /* ------------------------------------------------------------------------
 | |
|  * GUIDs
 | |
|  */
 | |
| #define UVC_GUID_UVC_CAMERA \
 | |
| 	{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
 | |
| 	 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01}
 | |
| #define UVC_GUID_UVC_OUTPUT \
 | |
| 	{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
 | |
| 	 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02}
 | |
| #define UVC_GUID_UVC_MEDIA_TRANSPORT_INPUT \
 | |
| 	{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
 | |
| 	 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03}
 | |
| #define UVC_GUID_UVC_PROCESSING \
 | |
| 	{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
 | |
| 	 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01}
 | |
| #define UVC_GUID_UVC_SELECTOR \
 | |
| 	{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
 | |
| 	 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02}
 | |
| #define UVC_GUID_EXT_GPIO_CONTROLLER \
 | |
| 	{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
 | |
| 	 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03}
 | |
| 
 | |
| #define UVC_GUID_FORMAT_MJPEG \
 | |
| 	{ 'M',  'J',  'P',  'G', 0x00, 0x00, 0x10, 0x00, \
 | |
| 	 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
 | |
| #define UVC_GUID_FORMAT_YUY2 \
 | |
| 	{ 'Y',  'U',  'Y',  '2', 0x00, 0x00, 0x10, 0x00, \
 | |
| 	 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
 | |
| #define UVC_GUID_FORMAT_YUY2_ISIGHT \
 | |
| 	{ 'Y',  'U',  'Y',  '2', 0x00, 0x00, 0x10, 0x00, \
 | |
| 	 0x80, 0x00, 0x00, 0x00, 0x00, 0x38, 0x9b, 0x71}
 | |
| #define UVC_GUID_FORMAT_NV12 \
 | |
| 	{ 'N',  'V',  '1',  '2', 0x00, 0x00, 0x10, 0x00, \
 | |
| 	 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
 | |
| #define UVC_GUID_FORMAT_YV12 \
 | |
| 	{ 'Y',  'V',  '1',  '2', 0x00, 0x00, 0x10, 0x00, \
 | |
| 	 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
 | |
| #define UVC_GUID_FORMAT_I420 \
 | |
| 	{ 'I',  '4',  '2',  '0', 0x00, 0x00, 0x10, 0x00, \
 | |
| 	 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
 | |
| #define UVC_GUID_FORMAT_UYVY \
 | |
| 	{ 'U',  'Y',  'V',  'Y', 0x00, 0x00, 0x10, 0x00, \
 | |
| 	 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
 | |
| #define UVC_GUID_FORMAT_Y800 \
 | |
| 	{ 'Y',  '8',  '0',  '0', 0x00, 0x00, 0x10, 0x00, \
 | |
| 	 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
 | |
| #define UVC_GUID_FORMAT_Y8 \
 | |
| 	{ 'Y',  '8',  ' ',  ' ', 0x00, 0x00, 0x10, 0x00, \
 | |
| 	 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
 | |
| #define UVC_GUID_FORMAT_Y10 \
 | |
| 	{ 'Y',  '1',  '0',  ' ', 0x00, 0x00, 0x10, 0x00, \
 | |
| 	 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
 | |
| #define UVC_GUID_FORMAT_Y12 \
 | |
| 	{ 'Y',  '1',  '2',  ' ', 0x00, 0x00, 0x10, 0x00, \
 | |
| 	 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
 | |
| #define UVC_GUID_FORMAT_Y16 \
 | |
| 	{ 'Y',  '1',  '6',  ' ', 0x00, 0x00, 0x10, 0x00, \
 | |
| 	 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
 | |
| #define UVC_GUID_FORMAT_BY8 \
 | |
| 	{ 'B',  'Y',  '8',  ' ', 0x00, 0x00, 0x10, 0x00, \
 | |
| 	 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
 | |
| #define UVC_GUID_FORMAT_BA81 \
 | |
| 	{ 'B',  'A',  '8',  '1', 0x00, 0x00, 0x10, 0x00, \
 | |
| 	 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
 | |
| #define UVC_GUID_FORMAT_GBRG \
 | |
| 	{ 'G',  'B',  'R',  'G', 0x00, 0x00, 0x10, 0x00, \
 | |
| 	 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
 | |
| #define UVC_GUID_FORMAT_GRBG \
 | |
| 	{ 'G',  'R',  'B',  'G', 0x00, 0x00, 0x10, 0x00, \
 | |
| 	 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
 | |
| #define UVC_GUID_FORMAT_RGGB \
 | |
| 	{ 'R',  'G',  'G',  'B', 0x00, 0x00, 0x10, 0x00, \
 | |
| 	 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
 | |
| #define UVC_GUID_FORMAT_BG16 \
 | |
| 	{ 'B',  'G',  '1',  '6', 0x00, 0x00, 0x10, 0x00, \
 | |
| 	 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
 | |
| #define UVC_GUID_FORMAT_GB16 \
 | |
| 	{ 'G',  'B',  '1',  '6', 0x00, 0x00, 0x10, 0x00, \
 | |
| 	 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
 | |
| #define UVC_GUID_FORMAT_RG16 \
 | |
| 	{ 'R',  'G',  '1',  '6', 0x00, 0x00, 0x10, 0x00, \
 | |
| 	 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
 | |
| #define UVC_GUID_FORMAT_GR16 \
 | |
| 	{ 'G',  'R',  '1',  '6', 0x00, 0x00, 0x10, 0x00, \
 | |
| 	 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
 | |
| #define UVC_GUID_FORMAT_RGBP \
 | |
| 	{ 'R',  'G',  'B',  'P', 0x00, 0x00, 0x10, 0x00, \
 | |
| 	 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
 | |
| #define UVC_GUID_FORMAT_BGR3 \
 | |
| 	{ 0x7d, 0xeb, 0x36, 0xe4, 0x4f, 0x52, 0xce, 0x11, \
 | |
| 	 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70}
 | |
| #define UVC_GUID_FORMAT_BGR4 \
 | |
| 	{ 0x7e, 0xeb, 0x36, 0xe4, 0x4f, 0x52, 0xce, 0x11, \
 | |
| 	 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70}
 | |
| #define UVC_GUID_FORMAT_M420 \
 | |
| 	{ 'M',  '4',  '2',  '0', 0x00, 0x00, 0x10, 0x00, \
 | |
| 	 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
 | |
| 
 | |
| #define UVC_GUID_FORMAT_H264 \
 | |
| 	{ 'H',  '2',  '6',  '4', 0x00, 0x00, 0x10, 0x00, \
 | |
| 	 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
 | |
| #define UVC_GUID_FORMAT_H265 \
 | |
| 	{ 'H',  '2',  '6',  '5', 0x00, 0x00, 0x10, 0x00, \
 | |
| 	 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
 | |
| #define UVC_GUID_FORMAT_Y8I \
 | |
| 	{ 'Y',  '8',  'I',  ' ', 0x00, 0x00, 0x10, 0x00, \
 | |
| 	 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
 | |
| #define UVC_GUID_FORMAT_Y12I \
 | |
| 	{ 'Y',  '1',  '2',  'I', 0x00, 0x00, 0x10, 0x00, \
 | |
| 	 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
 | |
| #define UVC_GUID_FORMAT_Z16 \
 | |
| 	{ 'Z',  '1',  '6',  ' ', 0x00, 0x00, 0x10, 0x00, \
 | |
| 	 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
 | |
| #define UVC_GUID_FORMAT_RW10 \
 | |
| 	{ 'R',  'W',  '1',  '0', 0x00, 0x00, 0x10, 0x00, \
 | |
| 	 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
 | |
| #define UVC_GUID_FORMAT_INVZ \
 | |
| 	{ 'I',  'N',  'V',  'Z', 0x90, 0x2d, 0x58, 0x4a, \
 | |
| 	 0x92, 0x0b, 0x77, 0x3f, 0x1f, 0x2c, 0x55, 0x6b}
 | |
| #define UVC_GUID_FORMAT_INZI \
 | |
| 	{ 'I',  'N',  'Z',  'I', 0x66, 0x1a, 0x42, 0xa2, \
 | |
| 	 0x90, 0x65, 0xd0, 0x18, 0x14, 0xa8, 0xef, 0x8a}
 | |
| #define UVC_GUID_FORMAT_INVI \
 | |
| 	{ 'I',  'N',  'V',  'I', 0xdb, 0x57, 0x49, 0x5e, \
 | |
| 	 0x8e, 0x3f, 0xf4, 0x79, 0x53, 0x2b, 0x94, 0x6f}
 | |
| #define UVC_GUID_FORMAT_CNF4 \
 | |
| 	{ 'C',  ' ',  ' ',  ' ', 0x00, 0x00, 0x10, 0x00, \
 | |
| 	 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
 | |
| 
 | |
| #define UVC_GUID_FORMAT_D3DFMT_L8 \
 | |
| 	{0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, \
 | |
| 	 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
 | |
| #define UVC_GUID_FORMAT_KSMEDIA_L8_IR \
 | |
| 	{0x32, 0x00, 0x00, 0x00, 0x02, 0x00, 0x10, 0x00, \
 | |
| 	 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
 | |
| 
 | |
| #define UVC_GUID_FORMAT_HEVC \
 | |
| 	{ 'H',  'E',  'V',  'C', 0x00, 0x00, 0x10, 0x00, \
 | |
| 	 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
 | |
| 
 | |
| struct uvc_format_desc {
 | |
| 	u8 guid[16];
 | |
| 	u32 fcc;
 | |
| };
 | |
| 
 | |
| const struct uvc_format_desc *uvc_format_by_guid(const u8 guid[16]);
 | |
| 
 | |
| #endif /* __LINUX_V4L2_UVC_H */
 |