1ea73eda5SJacopo Mondi.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later 2ea73eda5SJacopo Mondi.. c:namespace:: V4L 3ea73eda5SJacopo Mondi 4ea73eda5SJacopo Mondi.. _VIDIOC_SUBDEV_G_ROUTING: 5ea73eda5SJacopo Mondi 6ea73eda5SJacopo Mondi****************************************************** 7ea73eda5SJacopo Mondiioctl VIDIOC_SUBDEV_G_ROUTING, VIDIOC_SUBDEV_S_ROUTING 8ea73eda5SJacopo Mondi****************************************************** 9ea73eda5SJacopo Mondi 10ea73eda5SJacopo MondiName 11ea73eda5SJacopo Mondi==== 12ea73eda5SJacopo Mondi 13ea73eda5SJacopo MondiVIDIOC_SUBDEV_G_ROUTING - VIDIOC_SUBDEV_S_ROUTING - Get or set routing between streams of media pads in a media entity. 14ea73eda5SJacopo Mondi 15ea73eda5SJacopo Mondi 16ea73eda5SJacopo MondiSynopsis 17ea73eda5SJacopo Mondi======== 18ea73eda5SJacopo Mondi 19ea73eda5SJacopo Mondi.. c:macro:: VIDIOC_SUBDEV_G_ROUTING 20ea73eda5SJacopo Mondi 21ea73eda5SJacopo Mondi``int ioctl(int fd, VIDIOC_SUBDEV_G_ROUTING, struct v4l2_subdev_routing *argp)`` 22ea73eda5SJacopo Mondi 23ea73eda5SJacopo Mondi.. c:macro:: VIDIOC_SUBDEV_S_ROUTING 24ea73eda5SJacopo Mondi 25ea73eda5SJacopo Mondi``int ioctl(int fd, VIDIOC_SUBDEV_S_ROUTING, struct v4l2_subdev_routing *argp)`` 26ea73eda5SJacopo Mondi 27ea73eda5SJacopo MondiArguments 28ea73eda5SJacopo Mondi========= 29ea73eda5SJacopo Mondi 30ea73eda5SJacopo Mondi``fd`` 31ea73eda5SJacopo Mondi File descriptor returned by :ref:`open() <func-open>`. 32ea73eda5SJacopo Mondi 33ea73eda5SJacopo Mondi``argp`` 34ea73eda5SJacopo Mondi Pointer to struct :c:type:`v4l2_subdev_routing`. 35ea73eda5SJacopo Mondi 36ea73eda5SJacopo Mondi 37ea73eda5SJacopo MondiDescription 38ea73eda5SJacopo Mondi=========== 39ea73eda5SJacopo Mondi 40ea73eda5SJacopo MondiThese ioctls are used to get and set the routing in a media entity. 41ea73eda5SJacopo MondiThe routing configuration determines the flows of data inside an entity. 42ea73eda5SJacopo Mondi 43ea73eda5SJacopo MondiDrivers report their current routing tables using the 44ea73eda5SJacopo Mondi``VIDIOC_SUBDEV_G_ROUTING`` ioctl and application may enable or disable routes 45ea73eda5SJacopo Mondiwith the ``VIDIOC_SUBDEV_S_ROUTING`` ioctl, by adding or removing routes and 46ea73eda5SJacopo Mondisetting or clearing flags of the ``flags`` field of a 47ea73eda5SJacopo Mondistruct :c:type:`v4l2_subdev_route`. 48ea73eda5SJacopo Mondi 49ea73eda5SJacopo MondiAll stream configurations are reset when ``VIDIOC_SUBDEV_S_ROUTING`` is called. This 50ea73eda5SJacopo Mondimeans that the userspace must reconfigure all streams after calling the ioctl 51ea73eda5SJacopo Mondiwith e.g. ``VIDIOC_SUBDEV_S_FMT``. 52ea73eda5SJacopo Mondi 53ea73eda5SJacopo MondiOnly subdevices which have both sink and source pads can support routing. 54ea73eda5SJacopo Mondi 55ea73eda5SJacopo MondiWhen inspecting routes through ``VIDIOC_SUBDEV_G_ROUTING`` and the application 56ea73eda5SJacopo Mondiprovided ``num_routes`` is not big enough to contain all the available routes 57ea73eda5SJacopo Mondithe subdevice exposes, drivers return the ENOSPC error code and adjust the 58ea73eda5SJacopo Mondivalue of the ``num_routes`` field. Application should then reserve enough memory 59ea73eda5SJacopo Mondifor all the route entries and call ``VIDIOC_SUBDEV_G_ROUTING`` again. 60ea73eda5SJacopo Mondi 61*997a6b01STomi ValkeinenOn a successful ``VIDIOC_SUBDEV_G_ROUTING`` call the driver updates the 62*997a6b01STomi Valkeinen``num_routes`` field to reflect the actual number of routes returned. 63*997a6b01STomi Valkeinen 64ea73eda5SJacopo Mondi.. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.7cm}| 65ea73eda5SJacopo Mondi 66ea73eda5SJacopo Mondi.. c:type:: v4l2_subdev_routing 67ea73eda5SJacopo Mondi 68ea73eda5SJacopo Mondi.. flat-table:: struct v4l2_subdev_routing 69ea73eda5SJacopo Mondi :header-rows: 0 70ea73eda5SJacopo Mondi :stub-columns: 0 71ea73eda5SJacopo Mondi :widths: 1 1 2 72ea73eda5SJacopo Mondi 73ea73eda5SJacopo Mondi * - __u32 74ea73eda5SJacopo Mondi - ``which`` 75ea73eda5SJacopo Mondi - Format to modified, from enum 76ea73eda5SJacopo Mondi :ref:`v4l2_subdev_format_whence <v4l2-subdev-format-whence>`. 77ea73eda5SJacopo Mondi * - struct :c:type:`v4l2_subdev_route` 78ea73eda5SJacopo Mondi - ``routes[]`` 79ea73eda5SJacopo Mondi - Array of struct :c:type:`v4l2_subdev_route` entries 80ea73eda5SJacopo Mondi * - __u32 81ea73eda5SJacopo Mondi - ``num_routes`` 82ea73eda5SJacopo Mondi - Number of entries of the routes array 83ea73eda5SJacopo Mondi * - __u32 84ea73eda5SJacopo Mondi - ``reserved``\ [5] 85ea73eda5SJacopo Mondi - Reserved for future extensions. Applications and drivers must set 86ea73eda5SJacopo Mondi the array to zero. 87ea73eda5SJacopo Mondi 88ea73eda5SJacopo Mondi.. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.7cm}| 89ea73eda5SJacopo Mondi 90ea73eda5SJacopo Mondi.. c:type:: v4l2_subdev_route 91ea73eda5SJacopo Mondi 92ea73eda5SJacopo Mondi.. flat-table:: struct v4l2_subdev_route 93ea73eda5SJacopo Mondi :header-rows: 0 94ea73eda5SJacopo Mondi :stub-columns: 0 95ea73eda5SJacopo Mondi :widths: 1 1 2 96ea73eda5SJacopo Mondi 97ea73eda5SJacopo Mondi * - __u32 98ea73eda5SJacopo Mondi - ``sink_pad`` 99ea73eda5SJacopo Mondi - Sink pad number. 100ea73eda5SJacopo Mondi * - __u32 101ea73eda5SJacopo Mondi - ``sink_stream`` 102ea73eda5SJacopo Mondi - Sink pad stream number. 103ea73eda5SJacopo Mondi * - __u32 104ea73eda5SJacopo Mondi - ``source_pad`` 105ea73eda5SJacopo Mondi - Source pad number. 106ea73eda5SJacopo Mondi * - __u32 107ea73eda5SJacopo Mondi - ``source_stream`` 108ea73eda5SJacopo Mondi - Source pad stream number. 109ea73eda5SJacopo Mondi * - __u32 110ea73eda5SJacopo Mondi - ``flags`` 111ea73eda5SJacopo Mondi - Route enable/disable flags 112ea73eda5SJacopo Mondi :ref:`v4l2_subdev_routing_flags <v4l2-subdev-routing-flags>`. 113ea73eda5SJacopo Mondi * - __u32 114ea73eda5SJacopo Mondi - ``reserved``\ [5] 115ea73eda5SJacopo Mondi - Reserved for future extensions. Applications and drivers must set 116ea73eda5SJacopo Mondi the array to zero. 117ea73eda5SJacopo Mondi 118ea73eda5SJacopo Mondi.. tabularcolumns:: |p{6.6cm}|p{2.2cm}|p{8.7cm}| 119ea73eda5SJacopo Mondi 120ea73eda5SJacopo Mondi.. _v4l2-subdev-routing-flags: 121ea73eda5SJacopo Mondi 122ea73eda5SJacopo Mondi.. flat-table:: enum v4l2_subdev_routing_flags 123ea73eda5SJacopo Mondi :header-rows: 0 124ea73eda5SJacopo Mondi :stub-columns: 0 125ea73eda5SJacopo Mondi :widths: 3 1 4 126ea73eda5SJacopo Mondi 127ea73eda5SJacopo Mondi * - V4L2_SUBDEV_ROUTE_FL_ACTIVE 128950e9a29SSakari Ailus - 0x0001 129ea73eda5SJacopo Mondi - The route is enabled. Set by applications. 130ea73eda5SJacopo Mondi 131ea73eda5SJacopo MondiReturn Value 132ea73eda5SJacopo Mondi============ 133ea73eda5SJacopo Mondi 134ea73eda5SJacopo MondiOn success 0 is returned, on error -1 and the ``errno`` variable is set 135ea73eda5SJacopo Mondiappropriately. The generic error codes are described at the 136ea73eda5SJacopo Mondi:ref:`Generic Error Codes <gen-errors>` chapter. 137ea73eda5SJacopo Mondi 138ea73eda5SJacopo MondiENOSPC 139ea73eda5SJacopo Mondi The application provided ``num_routes`` is not big enough to contain 140ea73eda5SJacopo Mondi all the available routes the subdevice exposes. 141ea73eda5SJacopo Mondi 142ea73eda5SJacopo MondiEINVAL 143ea73eda5SJacopo Mondi The sink or source pad identifiers reference a non-existing pad, or reference 144*997a6b01STomi Valkeinen pads of different types (ie. the sink_pad identifiers refers to a source pad). 145ea73eda5SJacopo Mondi 146ea73eda5SJacopo MondiE2BIG 147ea73eda5SJacopo Mondi The application provided ``num_routes`` for ``VIDIOC_SUBDEV_S_ROUTING`` is 148ea73eda5SJacopo Mondi larger than the number of routes the driver can handle. 149