mirror of
https://gitee.com/bianbu-linux/linux-6.6
synced 2025-07-01 23:53:16 -04:00
media: subdev: Add [GS]_ROUTING subdev ioctls and operations
Add support for subdev internal routing. A route is defined as a single stream from a sink pad to a source pad. The userspace can configure the routing via two new ioctls, VIDIOC_SUBDEV_G_ROUTING and VIDIOC_SUBDEV_S_ROUTING, and subdevs can implement the functionality with v4l2_subdev_pad_ops.set_routing(). - Add sink and source streams for multiplexed links - Copy the argument back in case of an error. This is needed to let the caller know the number of routes. - Expand and refine documentation. - Make the 'routes' pointer a __u64 __user pointer so that a compat32 version of the ioctl is not required. - Add struct v4l2_subdev_krouting to be used for subdevice operations. - Fix typecasing warnings - Check sink & source pad types - Add 'which' field - Routing to subdev state - Dropped get_routing subdev op Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Michal Simek <michal.simek@xilinx.com> Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> Signed-off-by: Jacopo Mondi <jacopo+renesas@jmondi.org> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
This commit is contained in:
parent
ea73eda508
commit
a418bb3f30
4 changed files with 173 additions and 1 deletions
|
@ -11,6 +11,7 @@
|
|||
#ifndef __LINUX_V4L2_SUBDEV_H
|
||||
#define __LINUX_V4L2_SUBDEV_H
|
||||
|
||||
#include <linux/const.h>
|
||||
#include <linux/ioctl.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/v4l2-common.h>
|
||||
|
@ -178,6 +179,46 @@ struct v4l2_subdev_capability {
|
|||
/* The v4l2 sub-device supports routing and multiplexed streams. */
|
||||
#define V4L2_SUBDEV_CAP_STREAMS 0x00000002
|
||||
|
||||
/*
|
||||
* Is the route active? An active route will start when streaming is enabled
|
||||
* on a video node.
|
||||
*/
|
||||
#define V4L2_SUBDEV_ROUTE_FL_ACTIVE (1U << 0)
|
||||
|
||||
/**
|
||||
* struct v4l2_subdev_route - A route inside a subdev
|
||||
*
|
||||
* @sink_pad: the sink pad index
|
||||
* @sink_stream: the sink stream identifier
|
||||
* @source_pad: the source pad index
|
||||
* @source_stream: the source stream identifier
|
||||
* @flags: route flags V4L2_SUBDEV_ROUTE_FL_*
|
||||
* @reserved: drivers and applications must zero this array
|
||||
*/
|
||||
struct v4l2_subdev_route {
|
||||
__u32 sink_pad;
|
||||
__u32 sink_stream;
|
||||
__u32 source_pad;
|
||||
__u32 source_stream;
|
||||
__u32 flags;
|
||||
__u32 reserved[5];
|
||||
};
|
||||
|
||||
/**
|
||||
* struct v4l2_subdev_routing - Subdev routing information
|
||||
*
|
||||
* @which: configuration type (from enum v4l2_subdev_format_whence)
|
||||
* @num_routes: the total number of routes in the routes array
|
||||
* @routes: pointer to the routes array
|
||||
* @reserved: drivers and applications must zero this array
|
||||
*/
|
||||
struct v4l2_subdev_routing {
|
||||
__u32 which;
|
||||
__u32 num_routes;
|
||||
__u64 routes;
|
||||
__u32 reserved[6];
|
||||
};
|
||||
|
||||
/* Backwards compatibility define --- to be removed */
|
||||
#define v4l2_subdev_edid v4l2_edid
|
||||
|
||||
|
@ -193,6 +234,8 @@ struct v4l2_subdev_capability {
|
|||
#define VIDIOC_SUBDEV_S_CROP _IOWR('V', 60, struct v4l2_subdev_crop)
|
||||
#define VIDIOC_SUBDEV_G_SELECTION _IOWR('V', 61, struct v4l2_subdev_selection)
|
||||
#define VIDIOC_SUBDEV_S_SELECTION _IOWR('V', 62, struct v4l2_subdev_selection)
|
||||
#define VIDIOC_SUBDEV_G_ROUTING _IOWR('V', 38, struct v4l2_subdev_routing)
|
||||
#define VIDIOC_SUBDEV_S_ROUTING _IOWR('V', 39, struct v4l2_subdev_routing)
|
||||
/* The following ioctls are identical to the ioctls in videodev2.h */
|
||||
#define VIDIOC_SUBDEV_G_STD _IOR('V', 23, v4l2_std_id)
|
||||
#define VIDIOC_SUBDEV_S_STD _IOW('V', 24, v4l2_std_id)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue