From: Sakari Ailus <sakari.ailus@linux.intel.com>
To: linux-media@vger.kernel.org
Cc: laurent.pinchart@ideasonboard.com,
Philipp Zabel <p.zabel@pengutronix.de>,
hverkuil@xs4all.nl, Francesco Dolcini <francesco@dolcini.it>,
aishwarya.kothari@toradex.com, Robert Foss <rfoss@kernel.org>,
Todor Tomov <todor.too@gmail.com>,
Hyun Kwon <hyun.kwon@xilinx.com>,
bingbu.cao@intel.com
Subject: [PATCH v2 00/31] Separate links and async sub-devices
Date: Tue, 16 May 2023 12:54:46 +0300 [thread overview]
Message-ID: <20230516095517.611711-1-sakari.ailus@linux.intel.com> (raw)
Hi all,
This set adds support for multiple downstream links in an async
sub-device, by separating the sub-device registration from the link
creation.
A new concept, V4L2 async connection is added. A connection later on
translates to an MC ancillary or data link. Generally async notifiers have
a number of connections but at that level there is no knowledge of how
many sub-devices they will connect to. The bound and unbound callbacks now
work on connections. For the existing drivers there's only one connection
so I do not expect regressions because of that.
Async sub-device fwnode matching will now take place between the device
(the dev field of struct v4l2_subdev) and a struct v4l2_async_connection
(an endpoint for devices that have endpoints or the device for those that
do not). This is because the graph data structure only describes
point-to-point connections so therefore defining one end of the connection
defines the entire connection.
This set is unlikely to address all needs people have related to the async
framework but I think that beyond what it does, it paves some way for
addressing more of those additional needs.
To be frank, I'd like to get rid of the entire V4L2 async framework, but
it would require allowing much more dynamic driver initialisation,
including sub-devices and device nodes popping up in the system in the
order and extent there is successfully probed hardware. Until that, and
this may well be the entire foreseeable future, we have at least some of
this complexity.
since v1:
- Fixed object relation issues. The set has now been tested on an
async sub-device with two pads connected by data links to sub-devices on
a notifier (struct) device. (Multiple notifiers should work, too, but
has not been tested.)
- Add a function to obtain an async connection based on the sub-device.
This is useful for drivers for accessing their own link specific data.
- Improved documentation. Include a patch documenting
v4l2_async_nf_add_fwnode().
- Return endpoint matching and address adv748x driver breakage in v1. It's
a special case so other drivers can remain simpler.
- Swap notifier initialisation arguments, by making the notifier the first
argument.
- Remove extra fwnode_handle_put() in max9286_v4l2_unregister().
- Make struct device available before notifier initialisation for
consistent debug messages.
- Simplify notifier and async sub-device linked lists. Consistent list
head and list entry naming.
- Drop leftovers from an early experimenation work in rkisp1 and omap3isp
drivers.
- Simplify xilinx-vipp sub-device binding.
- Use if()s in notifier_dev() of v4l2-async.c.
- Improved debug messages in v4l2-async.c, use v4l2-async prefix and
generally with notifier device.
- Call match types with macros V4L2_ASYNC_MATCH_TYPE_* (was
V4L2_ASYNC_MATCH_*).
- Create ancillary links only when the sub-device is registered, not when
a connection is bound (which can take place more than once for a
sub-device).
- Rename struct v4l2_async_match as v4l2_async_match_desc.
- Perform list initialisation in notifier init rather than registration.
- Get rid of the "readd" parameter for v4l2_async_nf_unbind_all_subdevs().
- Check async sub-device validity on a notifier only when the notifier is
registered. This removes extra list traversal and simplifies the code.
- Remove extra list initialisation in v4l2_async_register_subdev().
- Drop v4l2_async_cleanup(). It was no longer useful, called from a single
place.
- Lots of kerneldoc fixes (mostly changed argument names).
since RFC v1:
- Address missing API usage changes in a lot of drivers.
- Fix compilation problems in intermediate patches.
- Move V4L2 device registration earlier or move notifier initialisation
and fwnode endpoint parsing past the current V4L2 device registration
(patches 11--16).
Jacopo Mondi (1):
media: v4l: async: Drop v4l2_async_nf_parse_fwnode_endpoints()
Sakari Ailus (30):
media: Documentation: v4l: Document missing async subdev function
media: xilinx-vipp: Clean up bound async notifier callback
media: v4l: async: Add some debug prints
media: v4l: async: Clean testing for duplicated async subdevs
media: v4l: async: Drop unneeded list entry initialisation
media: v4l: async: Don't check whether asd is NULL in validity check
media: v4l: async: Make V4L2 async match information a struct
media: v4l: async: Rename V4L2_ASYNC_MATCH_ macros, add TYPE_
media: v4l: async: Only pass match information for async subdev
validation
media: v4l: async: Clean up list heads and entries
media: v4l: async: Simplify async sub-device fwnode matching
media: v4l: async: Rename v4l2_async_subdev as v4l2_async_connection
media: v4l: async: Clean up error handling in v4l2_async_match_notify
media: v4l: async: Drop duplicate handling when adding connections
media: v4l: async: Rework internal lists
media: v4l: async: Obtain async connection based on sub-device
media: v4l: async: Differentiate connecting and creating sub-devices
media: v4l: async: Try more connections
media: v4l: async: Support fwnode endpoint list matching for subdevs
media: adv748x: Return to endpoint matching
media: pxa_camera: Fix probe error handling
media: pxa_camera: Register V4L2 device early, fix probe error
handling
media: marvell: cafe: Register V4L2 device earlier
media: am437x-vpfe: Register V4L2 device early
media: omap3isp: Initialise V4L2 async notifier later
media: xilinx-vipp: Init async notifier after registering V4L2 device
media: davinci: Init async notifier after registering V4L2 device
media: qcom: Initialise V4L2 async notifier later
media: v4l: async: Set v4l2_device in async notifier init
media: Documentation: v4l: Document sub-device notifiers
.../driver-api/media/v4l2-subdev.rst | 28 +-
drivers/media/i2c/adv748x/adv748x-csi2.c | 13 +-
drivers/media/i2c/max9286.c | 27 +-
drivers/media/i2c/rdacm20.c | 16 +-
drivers/media/i2c/rdacm21.c | 15 +-
drivers/media/i2c/st-mipid02.c | 12 +-
drivers/media/i2c/tc358746.c | 15 +-
drivers/media/pci/intel/ipu3/ipu3-cio2-main.c | 14 +-
drivers/media/platform/atmel/atmel-isi.c | 12 +-
drivers/media/platform/atmel/atmel-isi.h | 2 +-
drivers/media/platform/cadence/cdns-csi2rx.c | 10 +-
drivers/media/platform/intel/pxa_camera.c | 77 +-
drivers/media/platform/marvell/cafe-driver.c | 18 +-
drivers/media/platform/marvell/mcam-core.c | 12 +-
drivers/media/platform/marvell/mmp-driver.c | 6 +-
.../platform/microchip/microchip-csi2dc.c | 11 +-
.../platform/microchip/microchip-isc-base.c | 4 +-
.../media/platform/microchip/microchip-isc.h | 2 +-
.../microchip/microchip-sama5d2-isc.c | 9 +-
.../microchip/microchip-sama7g5-isc.c | 9 +-
drivers/media/platform/nxp/imx-mipi-csis.c | 10 +-
drivers/media/platform/nxp/imx7-media-csi.c | 10 +-
.../platform/nxp/imx8-isi/imx8-isi-core.c | 12 +-
drivers/media/platform/qcom/camss/camss.c | 26 +-
drivers/media/platform/qcom/camss/camss.h | 2 +-
drivers/media/platform/renesas/rcar-isp.c | 12 +-
.../platform/renesas/rcar-vin/rcar-core.c | 26 +-
.../platform/renesas/rcar-vin/rcar-csi2.c | 12 +-
.../platform/renesas/rcar-vin/rcar-vin.h | 4 +-
drivers/media/platform/renesas/rcar_drif.c | 12 +-
drivers/media/platform/renesas/renesas-ceu.c | 10 +-
.../platform/renesas/rzg2l-cru/rzg2l-core.c | 14 +-
.../platform/renesas/rzg2l-cru/rzg2l-cru.h | 2 +-
.../platform/renesas/rzg2l-cru/rzg2l-csi2.c | 12 +-
.../platform/rockchip/rkisp1/rkisp1-common.h | 2 +-
.../platform/rockchip/rkisp1/rkisp1-csi.c | 7 +-
.../platform/rockchip/rkisp1/rkisp1-dev.c | 12 +-
.../platform/rockchip/rkisp1/rkisp1-isp.c | 8 +-
.../platform/samsung/exynos4-is/media-dev.c | 11 +-
.../platform/samsung/exynos4-is/media-dev.h | 2 +-
drivers/media/platform/st/stm32/stm32-dcmi.c | 12 +-
.../platform/sunxi/sun4i-csi/sun4i_csi.c | 10 +-
.../sunxi/sun6i-csi/sun6i_csi_bridge.c | 8 +-
.../sunxi/sun6i-csi/sun6i_csi_bridge.h | 2 +-
.../sunxi/sun6i-mipi-csi2/sun6i_mipi_csi2.c | 10 +-
.../sun8i_a83t_mipi_csi2.c | 10 +-
.../media/platform/ti/am437x/am437x-vpfe.c | 36 +-
.../media/platform/ti/am437x/am437x-vpfe.h | 2 +-
drivers/media/platform/ti/cal/cal.c | 10 +-
.../media/platform/ti/davinci/vpif_capture.c | 33 +-
drivers/media/platform/ti/omap3isp/isp.c | 28 +-
drivers/media/platform/ti/omap3isp/isp.h | 15 +-
drivers/media/platform/ti/omap3isp/ispccdc.c | 13 +-
drivers/media/platform/ti/omap3isp/ispccp2.c | 2 +
drivers/media/platform/ti/omap3isp/ispcsi2.c | 2 +
.../media/platform/ti/omap3isp/ispcsiphy.c | 15 +-
drivers/media/platform/video-mux.c | 10 +-
drivers/media/platform/xilinx/xilinx-vipp.c | 55 +-
drivers/media/v4l2-core/v4l2-async.c | 781 +++++++++++-------
drivers/media/v4l2-core/v4l2-fwnode.c | 109 +--
drivers/media/v4l2-core/v4l2-subdev.c | 13 +
.../media/deprecated/atmel/atmel-isc-base.c | 4 +-
.../media/deprecated/atmel/atmel-isc.h | 2 +-
.../deprecated/atmel/atmel-sama5d2-isc.c | 9 +-
.../deprecated/atmel/atmel-sama7g5-isc.c | 4 +-
drivers/staging/media/imx/imx-media-csi.c | 10 +-
.../staging/media/imx/imx-media-dev-common.c | 6 +-
drivers/staging/media/imx/imx-media-dev.c | 2 +-
drivers/staging/media/imx/imx-media-of.c | 4 +-
drivers/staging/media/imx/imx6-mipi-csi2.c | 12 +-
drivers/staging/media/imx/imx8mq-mipi-csi2.c | 10 +-
.../media/sunxi/sun6i-isp/sun6i_isp_proc.c | 6 +-
.../media/sunxi/sun6i-isp/sun6i_isp_proc.h | 2 +-
drivers/staging/media/tegra-video/vi.c | 18 +-
drivers/staging/media/tegra-video/vi.h | 2 +-
include/media/davinci/vpif_types.h | 2 +-
include/media/v4l2-async.h | 236 +++---
include/media/v4l2-fwnode.h | 68 +-
include/media/v4l2-subdev.h | 12 +-
79 files changed, 1088 insertions(+), 1015 deletions(-)
--
2.30.2
next reply other threads:[~2023-05-16 9:56 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-05-16 9:54 Sakari Ailus [this message]
2023-05-16 9:54 ` [PATCH v2 01/31] media: v4l: async: Drop v4l2_async_nf_parse_fwnode_endpoints() Sakari Ailus
2023-05-16 9:54 ` [PATCH v2 02/31] media: Documentation: v4l: Document missing async subdev function Sakari Ailus
2023-05-16 9:54 ` [PATCH v2 03/31] media: xilinx-vipp: Clean up bound async notifier callback Sakari Ailus
2023-05-16 9:54 ` [PATCH v2 04/31] media: v4l: async: Add some debug prints Sakari Ailus
2023-05-16 9:54 ` [PATCH v2 05/31] media: v4l: async: Clean testing for duplicated async subdevs Sakari Ailus
2023-05-16 9:54 ` [PATCH v2 06/31] media: v4l: async: Drop unneeded list entry initialisation Sakari Ailus
2023-05-16 9:54 ` [PATCH v2 07/31] media: v4l: async: Don't check whether asd is NULL in validity check Sakari Ailus
2023-05-16 9:54 ` [PATCH v2 08/31] media: v4l: async: Make V4L2 async match information a struct Sakari Ailus
2023-05-16 9:54 ` [PATCH v2 09/31] media: v4l: async: Rename V4L2_ASYNC_MATCH_ macros, add TYPE_ Sakari Ailus
2023-05-16 9:54 ` [PATCH v2 10/31] media: v4l: async: Only pass match information for async subdev validation Sakari Ailus
2023-05-16 9:54 ` [PATCH v2 11/31] media: v4l: async: Clean up list heads and entries Sakari Ailus
2023-05-16 9:54 ` [PATCH v2 12/31] media: v4l: async: Simplify async sub-device fwnode matching Sakari Ailus
2023-05-16 9:54 ` [PATCH v2 13/31] media: v4l: async: Rename v4l2_async_subdev as v4l2_async_connection Sakari Ailus
2023-05-16 9:55 ` [PATCH v2 14/31] media: v4l: async: Clean up error handling in v4l2_async_match_notify Sakari Ailus
2023-05-16 9:55 ` [PATCH v2 15/31] media: v4l: async: Drop duplicate handling when adding connections Sakari Ailus
2023-05-16 9:55 ` [PATCH v2 16/31] media: v4l: async: Rework internal lists Sakari Ailus
2023-05-16 9:55 ` [PATCH v2 17/31] media: v4l: async: Obtain async connection based on sub-device Sakari Ailus
2023-05-16 9:55 ` [PATCH v2 18/31] media: v4l: async: Differentiate connecting and creating sub-devices Sakari Ailus
2023-05-16 9:55 ` [PATCH v2 19/31] media: v4l: async: Try more connections Sakari Ailus
2023-05-16 9:55 ` [PATCH v2 20/31] media: v4l: async: Support fwnode endpoint list matching for subdevs Sakari Ailus
2023-05-16 9:55 ` [PATCH v2 21/31] media: adv748x: Return to endpoint matching Sakari Ailus
2023-05-16 9:55 ` [PATCH v2 22/31] media: pxa_camera: Fix probe error handling Sakari Ailus
2023-05-16 9:55 ` [PATCH v2 23/31] media: pxa_camera: Register V4L2 device early, fix " Sakari Ailus
2023-05-16 9:55 ` [PATCH v2 24/31] media: marvell: cafe: Register V4L2 device earlier Sakari Ailus
2023-05-16 9:55 ` [PATCH v2 25/31] media: am437x-vpfe: Register V4L2 device early Sakari Ailus
2023-05-16 9:55 ` [PATCH v2 26/31] media: omap3isp: Initialise V4L2 async notifier later Sakari Ailus
2023-05-16 9:55 ` [PATCH v2 27/31] media: xilinx-vipp: Init async notifier after registering V4L2 device Sakari Ailus
2023-05-16 9:55 ` [PATCH v2 28/31] media: davinci: " Sakari Ailus
2023-05-16 9:55 ` [PATCH v2 29/31] media: qcom: Initialise V4L2 async notifier later Sakari Ailus
2023-05-16 9:55 ` [PATCH v2 30/31] media: v4l: async: Set v4l2_device in async notifier init Sakari Ailus
2023-05-16 20:46 ` kernel test robot
2023-05-16 9:55 ` [PATCH v2 31/31] media: Documentation: v4l: Document sub-device notifiers Sakari Ailus
2023-05-17 7:57 ` [PATCH v2 00/31] Separate links and async sub-devices Alexander Stein
2023-05-17 9:15 ` Sakari Ailus
2023-05-17 9:16 ` Sakari Ailus
2023-05-17 9:43 ` Philipp Zabel
2023-05-17 11:24 ` Marcel Ziswiler
2023-05-17 12:06 ` Philipp Zabel
2023-05-17 21:33 ` Sakari Ailus
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230516095517.611711-1-sakari.ailus@linux.intel.com \
--to=sakari.ailus@linux.intel.com \
--cc=aishwarya.kothari@toradex.com \
--cc=bingbu.cao@intel.com \
--cc=francesco@dolcini.it \
--cc=hverkuil@xs4all.nl \
--cc=hyun.kwon@xilinx.com \
--cc=laurent.pinchart@ideasonboard.com \
--cc=linux-media@vger.kernel.org \
--cc=p.zabel@pengutronix.de \
--cc=rfoss@kernel.org \
--cc=todor.too@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.