Commit 9bfd4ab5 authored by Steve Longerbeam's avatar Steve Longerbeam Committed by Greg Kroah-Hartman

media: rcar-vin: Allow independent VIN link enablement

[ Upstream commit c5ff0edb ]

There is a block of code in rvin_group_link_notify() that prevents
enabling a link to a VIN node if any entity in the media graph is
in use. This prevents enabling a VIN link even if there is an in-use
entity somewhere in the graph that is independent of the link's
pipeline.

For example, the code block will prevent enabling a link from
the first rcar-csi2 receiver to a VIN node even if there is an
enabled link somewhere far upstream on the second independent
rcar-csi2 receiver pipeline.

If this code block is meant to prevent modifying a link if any entity
in the graph is actively involved in streaming (because modifying
the CHSEL register fields can disrupt any/all running streams), then
the entities stream counts should be checked rather than the use counts.

(There is already such a check in __media_entity_setup_link() that verifies
the stream_count of the link's source and sink entities are both zero,
but that is insufficient, since there should be no running streams in
the entire graph).

Modify the code block to check the entity stream_count instead of the
use_count (and elaborate on the comment). VIN node links can now be
enabled even if there are other independent in-use entities that are
not streaming.

Fixes: c0cc5aef ("media: rcar-vin: add link notify for Gen3")
Signed-off-by: default avatarSteve Longerbeam <slongerbeam@gmail.com>
Reviewed-by: default avatarNiklas Söderlund <niklas.soderlund+renesas@ragnatech.se>
Signed-off-by: default avatarHans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+samsung@kernel.org>
Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
parent 2e6bcc32
...@@ -131,9 +131,13 @@ static int rvin_group_link_notify(struct media_link *link, u32 flags, ...@@ -131,9 +131,13 @@ static int rvin_group_link_notify(struct media_link *link, u32 flags,
!is_media_entity_v4l2_video_device(link->sink->entity)) !is_media_entity_v4l2_video_device(link->sink->entity))
return 0; return 0;
/* If any entity is in use don't allow link changes. */ /*
* Don't allow link changes if any entity in the graph is
* streaming, modifying the CHSEL register fields can disrupt
* running streams.
*/
media_device_for_each_entity(entity, &group->mdev) media_device_for_each_entity(entity, &group->mdev)
if (entity->use_count) if (entity->stream_count)
return -EBUSY; return -EBUSY;
mutex_lock(&group->lock); mutex_lock(&group->lock);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment