Merge tag 'media/v6.17-1' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media

Pull media updates from Mauro Carvalho Chehab:

 - v4l2 core:
     - sub-device framework routing improvements
     - NV12M tiled variants added to v4l2_format_info
     - some fixes at control handler freeing logic
     - fixed H264 SEPARATE_COLOUR_PLANE check

 - new staging driver: Intel IPU7 PCI

 - Rockchip video decoder driver got promoted from staging

 - iris: added HEVC/VP9 encoder/decoder support

 - vsp1: driver has gained Renesas VSPX support

 - uvc:
     - switched to vb2 ioctl helpers
     - added MSXU 1.5 metadata support

 - atomisp: GC0310 sensor driver cleanups in preparation for moving it
   out of staging

 - Lots of cleanup, fixes and improvements

* tag 'media/v6.17-1' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media: (310 commits)
  media: rkvdec: Unstage the driver
  media: rkvdec: Remove TODO file
  media: dt-bindings: rockchip: Add RK3576 Video Decoder bindings
  media: dt-bindings: rockchip: Document RK3588 Video Decoder bindings
  media: amphion: Support dmabuf and v4l2 buffer without binding
  media: verisilicon: postproc: 4K support
  media: v4l2: Add support for NV12M tiled variants to v4l2_format_info()
  media: uvcvideo: Use a count variable for meta_formats instead of 0 terminating
  media: uvcvideo: Auto-set UVC_QUIRK_MSXU_META
  media: uvcvideo: Introduce V4L2_META_FMT_UVC_MSXU_1_5
  media: uvcvideo: Introduce dev->meta_formats
  media: Documentation: Add note about UVCH length field
  media: uvcvideo: Do not mark valid metadata as invalid
  media: uvcvideo: uvc_v4l2_unlocked_ioctl: Invert PM logic
  media: core: export v4l2_translate_cmd
  media: uvcvideo: Turn on the camera if V4L2_EVENT_SUB_FL_SEND_INITIAL
  media: uvcvideo: Remove stream->is_streaming field
  media: uvcvideo: Split uvc_stop_streaming()
  media: uvcvideo: Handle locks in uvc_queue_return_buffers
  media: uvcvideo: Use vb2 ioctl and fop helpers
  ...
This commit is contained in:
Linus Torvalds
2025-07-31 13:16:09 -07:00
314 changed files with 23149 additions and 4618 deletions

View File

@@ -21,10 +21,11 @@
/* preferred byte alignment for outputs */
#define PISP_BACK_END_OUTPUT_MAX_ALIGN 64u
/* minimum allowed tile width anywhere in the pipeline */
#define PISP_BACK_END_MIN_TILE_WIDTH 16u
/* minimum allowed tile width anywhere in the pipeline */
#define PISP_BACK_END_MIN_TILE_HEIGHT 16u
/* minimum allowed tile sizes anywhere in the pipeline */
#define PISP_BACK_END_MIN_TILE_WIDTH 16u
#define PISP_BACK_END_MIN_TILE_HEIGHT 16u
#define PISP_BACK_END_MAX_TILE_WIDTH 65536u
#define PISP_BACK_END_MAX_TILE_HEIGHT 65536u
#define PISP_BACK_END_NUM_OUTPUTS 2
#define PISP_BACK_END_HOG_OUTPUT 1

View File

@@ -169,6 +169,13 @@
*/
#define RKISP1_CIF_ISP_COMPAND_NUM_POINTS 64
/*
* Wide Dynamic Range
*/
#define RKISP1_CIF_ISP_WDR_CURVE_NUM_INTERV 32
#define RKISP1_CIF_ISP_WDR_CURVE_NUM_COEFF (RKISP1_CIF_ISP_WDR_CURVE_NUM_INTERV + 1)
#define RKISP1_CIF_ISP_WDR_CURVE_NUM_DY_REGS 4
/*
* Measurement types
*/
@@ -889,6 +896,72 @@ struct rkisp1_cif_isp_compand_curve_config {
__u32 y[RKISP1_CIF_ISP_COMPAND_NUM_POINTS];
};
/**
* struct rkisp1_cif_isp_wdr_tone_curve - Tone mapping curve definition for WDR.
*
* @dY: the dYn increments for horizontal (input) axis of the tone curve.
* each 3-bit dY value represents an increment of 2**(value+3).
* dY[0] bits 0:2 is increment dY1, bit 3 unused
* dY[0] bits 4:6 is increment dY2, bit 7 unused
* ...
* dY[0] bits 28:30 is increment dY8, bit 31 unused
* ... and so on till dY[3] bits 28:30 is increment dY32, bit 31 unused.
* @ym: the Ym values for the vertical (output) axis of the tone curve.
* each value is 13 bit.
*/
struct rkisp1_cif_isp_wdr_tone_curve {
__u32 dY[RKISP1_CIF_ISP_WDR_CURVE_NUM_DY_REGS];
__u16 ym[RKISP1_CIF_ISP_WDR_CURVE_NUM_COEFF];
};
/**
* struct rkisp1_cif_isp_wdr_iref_config - Illumination reference config for WDR.
*
* Use illumination reference value as described below, instead of only the
* luminance (Y) value for tone mapping and gain calculations:
* IRef = (rgb_factor * RGBMax_tr + (8 - rgb_factor) * Y)/8
*
* @rgb_factor: defines how much influence the RGBmax approach has in
* comparison to Y (valid values are 0..8).
* @use_y9_8: use Y*9/8 for maximum value calculation along with the
* default of R, G, B for noise reduction.
* @use_rgb7_8: decrease RGBMax by 7/8 for noise reduction.
* @disable_transient: disable transient calculation between Y and RGBY_max.
*/
struct rkisp1_cif_isp_wdr_iref_config {
__u8 rgb_factor;
__u8 use_y9_8;
__u8 use_rgb7_8;
__u8 disable_transient;
};
/**
* struct rkisp1_cif_isp_wdr_config - Configuration for wide dynamic range.
*
* @tone_curve: tone mapping curve.
* @iref_config: illumination reference configuration. (when use_iref is true)
* @rgb_offset: RGB offset value for RGB operation mode. (12 bits)
* @luma_offset: luminance offset value for RGB operation mode. (12 bits)
* @dmin_thresh: lower threshold for deltaMin value. (12 bits)
* @dmin_strength: strength factor for deltaMin. (valid range is 0x00..0x10)
* @use_rgb_colorspace: use RGB instead of luminance/chrominance colorspace.
* @bypass_chroma_mapping: disable chrominance mapping (only valid if
* use_rgb_colorspace = 0)
* @use_iref: use illumination reference instead of Y for tone mapping
* and gain calculations.
*/
struct rkisp1_cif_isp_wdr_config {
struct rkisp1_cif_isp_wdr_tone_curve tone_curve;
struct rkisp1_cif_isp_wdr_iref_config iref_config;
__u16 rgb_offset;
__u16 luma_offset;
__u16 dmin_thresh;
__u8 dmin_strength;
__u8 use_rgb_colorspace;
__u8 bypass_chroma_mapping;
__u8 use_iref;
};
/*---------- PART2: Measurement Statistics ------------*/
/**
@@ -1059,6 +1132,7 @@ struct rkisp1_stat_buffer {
* @RKISP1_EXT_PARAMS_BLOCK_TYPE_COMPAND_BLS: BLS in the compand block
* @RKISP1_EXT_PARAMS_BLOCK_TYPE_COMPAND_EXPAND: Companding expand curve
* @RKISP1_EXT_PARAMS_BLOCK_TYPE_COMPAND_COMPRESS: Companding compress curve
* @RKISP1_EXT_PARAMS_BLOCK_TYPE_WDR: Wide dynamic range
*/
enum rkisp1_ext_params_block_type {
RKISP1_EXT_PARAMS_BLOCK_TYPE_BLS,
@@ -1081,11 +1155,15 @@ enum rkisp1_ext_params_block_type {
RKISP1_EXT_PARAMS_BLOCK_TYPE_COMPAND_BLS,
RKISP1_EXT_PARAMS_BLOCK_TYPE_COMPAND_EXPAND,
RKISP1_EXT_PARAMS_BLOCK_TYPE_COMPAND_COMPRESS,
RKISP1_EXT_PARAMS_BLOCK_TYPE_WDR,
};
#define RKISP1_EXT_PARAMS_FL_BLOCK_DISABLE (1U << 0)
#define RKISP1_EXT_PARAMS_FL_BLOCK_ENABLE (1U << 1)
/* A bitmask of parameters blocks supported on the current hardware. */
#define RKISP1_CID_SUPPORTED_PARAMS_BLOCKS (V4L2_CID_USER_RKISP1_BASE + 0x01)
/**
* struct rkisp1_ext_params_block_header - RkISP1 extensible parameters block
* header
@@ -1460,6 +1538,23 @@ struct rkisp1_ext_params_compand_curve_config {
struct rkisp1_cif_isp_compand_curve_config config;
} __attribute__((aligned(8)));
/**
* struct rkisp1_ext_params_wdr_config - RkISP1 extensible params
* Wide dynamic range config
*
* RkISP1 extensible parameters WDR block.
* Identified by :c:type:`RKISP1_EXT_PARAMS_BLOCK_TYPE_WDR`
*
* @header: The RkISP1 extensible parameters header, see
* :c:type:`rkisp1_ext_params_block_header`
* @config: WDR configuration, see
* :c:type:`rkisp1_cif_isp_wdr_config`
*/
struct rkisp1_ext_params_wdr_config {
struct rkisp1_ext_params_block_header header;
struct rkisp1_cif_isp_wdr_config config;
} __attribute__((aligned(8)));
/*
* The rkisp1_ext_params_compand_curve_config structure is counted twice as it
* is used for both the COMPAND_EXPAND and COMPAND_COMPRESS block types.
@@ -1484,7 +1579,8 @@ struct rkisp1_ext_params_compand_curve_config {
sizeof(struct rkisp1_ext_params_afc_config) +\
sizeof(struct rkisp1_ext_params_compand_bls_config) +\
sizeof(struct rkisp1_ext_params_compand_curve_config) +\
sizeof(struct rkisp1_ext_params_compand_curve_config))
sizeof(struct rkisp1_ext_params_compand_curve_config) +\
sizeof(struct rkisp1_ext_params_wdr_config))
/**
* enum rksip1_ext_param_buffer_version - RkISP1 extensible parameters version
@@ -1520,6 +1616,14 @@ enum rksip1_ext_param_buffer_version {
* V4L2 control. If such control is not available, userspace should assume only
* RKISP1_EXT_PARAM_BUFFER_V1 is supported by the driver.
*
* The read-only V4L2 control ``RKISP1_CID_SUPPORTED_PARAMS_BLOCKS`` can be used
* to query the blocks supported by the device. It contains a bitmask where each
* bit represents the availability of the corresponding entry from the
* :c:type:`rkisp1_ext_params_block_type` enum. The current and default values
* of the control represents the blocks supported by the device instance, while
* the maximum value represents the blocks supported by the kernel driver,
* independently of the device instance.
*
* For each ISP block that userspace wants to configure, a block-specific
* structure is appended to the @data buffer, one after the other without gaps
* in between nor overlaps. Userspace shall populate the @data_size field with

View File

@@ -222,6 +222,12 @@ enum v4l2_colorfx {
*/
#define V4L2_CID_USER_UVC_BASE (V4L2_CID_USER_BASE + 0x11e0)
/*
* The base for Rockchip ISP1 driver controls.
* We reserve 16 controls for this driver.
*/
#define V4L2_CID_USER_RKISP1_BASE (V4L2_CID_USER_BASE + 0x1220)
/* MPEG-class control IDs */
/* The MPEG controls are applicable to all codec controls
* and the 'MPEG' part of the define is historical */

View File

@@ -726,7 +726,7 @@ struct v4l2_pix_format {
#define V4L2_PIX_FMT_SGBRG12 v4l2_fourcc('G', 'B', '1', '2') /* 12 GBGB.. RGRG.. */
#define V4L2_PIX_FMT_SGRBG12 v4l2_fourcc('B', 'A', '1', '2') /* 12 GRGR.. BGBG.. */
#define V4L2_PIX_FMT_SRGGB12 v4l2_fourcc('R', 'G', '1', '2') /* 12 RGRG.. GBGB.. */
/* 12bit raw bayer packed, 6 bytes for every 4 pixels */
/* 12bit raw bayer packed, 3 bytes for every 2 pixels */
#define V4L2_PIX_FMT_SBGGR12P v4l2_fourcc('p', 'B', 'C', 'C')
#define V4L2_PIX_FMT_SGBRG12P v4l2_fourcc('p', 'G', 'C', 'C')
#define V4L2_PIX_FMT_SGRBG12P v4l2_fourcc('p', 'g', 'C', 'C')
@@ -840,6 +840,12 @@ struct v4l2_pix_format {
#define V4L2_PIX_FMT_PISP_COMP2_BGGR v4l2_fourcc('P', 'C', '2', 'B') /* PiSP 8-bit mode 2 compressed BGGR bayer */
#define V4L2_PIX_FMT_PISP_COMP2_MONO v4l2_fourcc('P', 'C', '2', 'M') /* PiSP 8-bit mode 2 compressed monochrome */
/* Renesas RZ/V2H CRU packed formats. 64-bit units with contiguous pixels */
#define V4L2_PIX_FMT_RAW_CRU10 v4l2_fourcc('C', 'R', '1', '0')
#define V4L2_PIX_FMT_RAW_CRU12 v4l2_fourcc('C', 'R', '1', '2')
#define V4L2_PIX_FMT_RAW_CRU14 v4l2_fourcc('C', 'R', '1', '4')
#define V4L2_PIX_FMT_RAW_CRU20 v4l2_fourcc('C', 'R', '2', '0')
/* SDR formats - used only for Software Defined Radio devices */
#define V4L2_SDR_FMT_CU8 v4l2_fourcc('C', 'U', '0', '8') /* IQ u8 */
#define V4L2_SDR_FMT_CU16LE v4l2_fourcc('C', 'U', '1', '6') /* IQ u16le */
@@ -861,6 +867,7 @@ struct v4l2_pix_format {
#define V4L2_META_FMT_VSP1_HGT v4l2_fourcc('V', 'S', 'P', 'T') /* R-Car VSP1 2-D Histogram */
#define V4L2_META_FMT_UVC v4l2_fourcc('U', 'V', 'C', 'H') /* UVC Payload Header metadata */
#define V4L2_META_FMT_D4XX v4l2_fourcc('D', '4', 'X', 'X') /* D4XX Payload Header metadata */
#define V4L2_META_FMT_UVC_MSXU_1_5 v4l2_fourcc('U', 'V', 'C', 'M') /* UVC MSXU metadata */
#define V4L2_META_FMT_VIVID v4l2_fourcc('V', 'I', 'V', 'D') /* Vivid Metadata */
/* Vendor specific - used for RK_ISP1 camera sub-system */