162306a36Sopenharmony_ci.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later 262306a36Sopenharmony_ci.. c:namespace:: V4L 362306a36Sopenharmony_ci 462306a36Sopenharmony_ci.. _VIDIOC_SUBDEV_G_ROUTING: 562306a36Sopenharmony_ci 662306a36Sopenharmony_ci****************************************************** 762306a36Sopenharmony_ciioctl VIDIOC_SUBDEV_G_ROUTING, VIDIOC_SUBDEV_S_ROUTING 862306a36Sopenharmony_ci****************************************************** 962306a36Sopenharmony_ci 1062306a36Sopenharmony_ciName 1162306a36Sopenharmony_ci==== 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_ciVIDIOC_SUBDEV_G_ROUTING - VIDIOC_SUBDEV_S_ROUTING - Get or set routing between streams of media pads in a media entity. 1462306a36Sopenharmony_ci 1562306a36Sopenharmony_ci 1662306a36Sopenharmony_ciSynopsis 1762306a36Sopenharmony_ci======== 1862306a36Sopenharmony_ci 1962306a36Sopenharmony_ci.. c:macro:: VIDIOC_SUBDEV_G_ROUTING 2062306a36Sopenharmony_ci 2162306a36Sopenharmony_ci``int ioctl(int fd, VIDIOC_SUBDEV_G_ROUTING, struct v4l2_subdev_routing *argp)`` 2262306a36Sopenharmony_ci 2362306a36Sopenharmony_ci.. c:macro:: VIDIOC_SUBDEV_S_ROUTING 2462306a36Sopenharmony_ci 2562306a36Sopenharmony_ci``int ioctl(int fd, VIDIOC_SUBDEV_S_ROUTING, struct v4l2_subdev_routing *argp)`` 2662306a36Sopenharmony_ci 2762306a36Sopenharmony_ciArguments 2862306a36Sopenharmony_ci========= 2962306a36Sopenharmony_ci 3062306a36Sopenharmony_ci``fd`` 3162306a36Sopenharmony_ci File descriptor returned by :ref:`open() <func-open>`. 3262306a36Sopenharmony_ci 3362306a36Sopenharmony_ci``argp`` 3462306a36Sopenharmony_ci Pointer to struct :c:type:`v4l2_subdev_routing`. 3562306a36Sopenharmony_ci 3662306a36Sopenharmony_ci 3762306a36Sopenharmony_ciDescription 3862306a36Sopenharmony_ci=========== 3962306a36Sopenharmony_ci 4062306a36Sopenharmony_ciThese ioctls are used to get and set the routing in a media entity. 4162306a36Sopenharmony_ciThe routing configuration determines the flows of data inside an entity. 4262306a36Sopenharmony_ci 4362306a36Sopenharmony_ciDrivers report their current routing tables using the 4462306a36Sopenharmony_ci``VIDIOC_SUBDEV_G_ROUTING`` ioctl and application may enable or disable routes 4562306a36Sopenharmony_ciwith the ``VIDIOC_SUBDEV_S_ROUTING`` ioctl, by adding or removing routes and 4662306a36Sopenharmony_cisetting or clearing flags of the ``flags`` field of a 4762306a36Sopenharmony_cistruct :c:type:`v4l2_subdev_route`. 4862306a36Sopenharmony_ci 4962306a36Sopenharmony_ciAll stream configurations are reset when ``VIDIOC_SUBDEV_S_ROUTING`` is called. This 5062306a36Sopenharmony_cimeans that the userspace must reconfigure all streams after calling the ioctl 5162306a36Sopenharmony_ciwith e.g. ``VIDIOC_SUBDEV_S_FMT``. 5262306a36Sopenharmony_ci 5362306a36Sopenharmony_ciOnly subdevices which have both sink and source pads can support routing. 5462306a36Sopenharmony_ci 5562306a36Sopenharmony_ciWhen inspecting routes through ``VIDIOC_SUBDEV_G_ROUTING`` and the application 5662306a36Sopenharmony_ciprovided ``num_routes`` is not big enough to contain all the available routes 5762306a36Sopenharmony_cithe subdevice exposes, drivers return the ENOSPC error code and adjust the 5862306a36Sopenharmony_civalue of the ``num_routes`` field. Application should then reserve enough memory 5962306a36Sopenharmony_cifor all the route entries and call ``VIDIOC_SUBDEV_G_ROUTING`` again. 6062306a36Sopenharmony_ci 6162306a36Sopenharmony_ciOn a successful ``VIDIOC_SUBDEV_G_ROUTING`` call the driver updates the 6262306a36Sopenharmony_ci``num_routes`` field to reflect the actual number of routes returned. 6362306a36Sopenharmony_ci 6462306a36Sopenharmony_ci.. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.7cm}| 6562306a36Sopenharmony_ci 6662306a36Sopenharmony_ci.. c:type:: v4l2_subdev_routing 6762306a36Sopenharmony_ci 6862306a36Sopenharmony_ci.. flat-table:: struct v4l2_subdev_routing 6962306a36Sopenharmony_ci :header-rows: 0 7062306a36Sopenharmony_ci :stub-columns: 0 7162306a36Sopenharmony_ci :widths: 1 1 2 7262306a36Sopenharmony_ci 7362306a36Sopenharmony_ci * - __u32 7462306a36Sopenharmony_ci - ``which`` 7562306a36Sopenharmony_ci - Format to modified, from enum 7662306a36Sopenharmony_ci :ref:`v4l2_subdev_format_whence <v4l2-subdev-format-whence>`. 7762306a36Sopenharmony_ci * - struct :c:type:`v4l2_subdev_route` 7862306a36Sopenharmony_ci - ``routes[]`` 7962306a36Sopenharmony_ci - Array of struct :c:type:`v4l2_subdev_route` entries 8062306a36Sopenharmony_ci * - __u32 8162306a36Sopenharmony_ci - ``num_routes`` 8262306a36Sopenharmony_ci - Number of entries of the routes array 8362306a36Sopenharmony_ci * - __u32 8462306a36Sopenharmony_ci - ``reserved``\ [5] 8562306a36Sopenharmony_ci - Reserved for future extensions. Applications and drivers must set 8662306a36Sopenharmony_ci the array to zero. 8762306a36Sopenharmony_ci 8862306a36Sopenharmony_ci.. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.7cm}| 8962306a36Sopenharmony_ci 9062306a36Sopenharmony_ci.. c:type:: v4l2_subdev_route 9162306a36Sopenharmony_ci 9262306a36Sopenharmony_ci.. flat-table:: struct v4l2_subdev_route 9362306a36Sopenharmony_ci :header-rows: 0 9462306a36Sopenharmony_ci :stub-columns: 0 9562306a36Sopenharmony_ci :widths: 1 1 2 9662306a36Sopenharmony_ci 9762306a36Sopenharmony_ci * - __u32 9862306a36Sopenharmony_ci - ``sink_pad`` 9962306a36Sopenharmony_ci - Sink pad number. 10062306a36Sopenharmony_ci * - __u32 10162306a36Sopenharmony_ci - ``sink_stream`` 10262306a36Sopenharmony_ci - Sink pad stream number. 10362306a36Sopenharmony_ci * - __u32 10462306a36Sopenharmony_ci - ``source_pad`` 10562306a36Sopenharmony_ci - Source pad number. 10662306a36Sopenharmony_ci * - __u32 10762306a36Sopenharmony_ci - ``source_stream`` 10862306a36Sopenharmony_ci - Source pad stream number. 10962306a36Sopenharmony_ci * - __u32 11062306a36Sopenharmony_ci - ``flags`` 11162306a36Sopenharmony_ci - Route enable/disable flags 11262306a36Sopenharmony_ci :ref:`v4l2_subdev_routing_flags <v4l2-subdev-routing-flags>`. 11362306a36Sopenharmony_ci * - __u32 11462306a36Sopenharmony_ci - ``reserved``\ [5] 11562306a36Sopenharmony_ci - Reserved for future extensions. Applications and drivers must set 11662306a36Sopenharmony_ci the array to zero. 11762306a36Sopenharmony_ci 11862306a36Sopenharmony_ci.. tabularcolumns:: |p{6.6cm}|p{2.2cm}|p{8.7cm}| 11962306a36Sopenharmony_ci 12062306a36Sopenharmony_ci.. _v4l2-subdev-routing-flags: 12162306a36Sopenharmony_ci 12262306a36Sopenharmony_ci.. flat-table:: enum v4l2_subdev_routing_flags 12362306a36Sopenharmony_ci :header-rows: 0 12462306a36Sopenharmony_ci :stub-columns: 0 12562306a36Sopenharmony_ci :widths: 3 1 4 12662306a36Sopenharmony_ci 12762306a36Sopenharmony_ci * - V4L2_SUBDEV_ROUTE_FL_ACTIVE 12862306a36Sopenharmony_ci - 0x0001 12962306a36Sopenharmony_ci - The route is enabled. Set by applications. 13062306a36Sopenharmony_ci 13162306a36Sopenharmony_ciReturn Value 13262306a36Sopenharmony_ci============ 13362306a36Sopenharmony_ci 13462306a36Sopenharmony_ciOn success 0 is returned, on error -1 and the ``errno`` variable is set 13562306a36Sopenharmony_ciappropriately. The generic error codes are described at the 13662306a36Sopenharmony_ci:ref:`Generic Error Codes <gen-errors>` chapter. 13762306a36Sopenharmony_ci 13862306a36Sopenharmony_ciENOSPC 13962306a36Sopenharmony_ci The application provided ``num_routes`` is not big enough to contain 14062306a36Sopenharmony_ci all the available routes the subdevice exposes. 14162306a36Sopenharmony_ci 14262306a36Sopenharmony_ciEINVAL 14362306a36Sopenharmony_ci The sink or source pad identifiers reference a non-existing pad, or reference 14462306a36Sopenharmony_ci pads of different types (ie. the sink_pad identifiers refers to a source pad). 14562306a36Sopenharmony_ci 14662306a36Sopenharmony_ciE2BIG 14762306a36Sopenharmony_ci The application provided ``num_routes`` for ``VIDIOC_SUBDEV_S_ROUTING`` is 14862306a36Sopenharmony_ci larger than the number of routes the driver can handle. 149