[media] v4l: exynos4-is: Use the new media graph walk interface
The media graph walk requires initialisation and cleanup soon. Update the users to perform the soon necessary API calls. Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> Cc: Javier Martinez Canillas <javier@osg.samsung.com> Cc: Kamil Debski <k.debski@samsung.com> Cc: Sylwester Nawrocki <s.nawrocki@samsung.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
This commit is contained in:
committed by
Mauro Carvalho Chehab
parent
28461451c0
commit
fd7e5309a5
@ -1046,10 +1046,10 @@ static int __fimc_md_modify_pipeline(struct media_entity *entity, bool enable)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Locking: called with entity->graph_obj.mdev->graph_mutex mutex held. */
|
/* Locking: called with entity->graph_obj.mdev->graph_mutex mutex held. */
|
||||||
static int __fimc_md_modify_pipelines(struct media_entity *entity, bool enable)
|
static int __fimc_md_modify_pipelines(struct media_entity *entity, bool enable,
|
||||||
|
struct media_entity_graph *graph)
|
||||||
{
|
{
|
||||||
struct media_entity *entity_err = entity;
|
struct media_entity *entity_err = entity;
|
||||||
struct media_entity_graph graph;
|
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -1058,9 +1058,9 @@ static int __fimc_md_modify_pipelines(struct media_entity *entity, bool enable)
|
|||||||
* through active links. This is needed as we cannot power on/off the
|
* through active links. This is needed as we cannot power on/off the
|
||||||
* subdevs in random order.
|
* subdevs in random order.
|
||||||
*/
|
*/
|
||||||
media_entity_graph_walk_start(&graph, entity);
|
media_entity_graph_walk_start(graph, entity);
|
||||||
|
|
||||||
while ((entity = media_entity_graph_walk_next(&graph))) {
|
while ((entity = media_entity_graph_walk_next(graph))) {
|
||||||
if (!is_media_entity_v4l2_io(entity))
|
if (!is_media_entity_v4l2_io(entity))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
@ -1071,10 +1071,11 @@ static int __fimc_md_modify_pipelines(struct media_entity *entity, bool enable)
|
|||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
err:
|
|
||||||
media_entity_graph_walk_start(&graph, entity_err);
|
|
||||||
|
|
||||||
while ((entity_err = media_entity_graph_walk_next(&graph))) {
|
err:
|
||||||
|
media_entity_graph_walk_start(graph, entity_err);
|
||||||
|
|
||||||
|
while ((entity_err = media_entity_graph_walk_next(graph))) {
|
||||||
if (!is_media_entity_v4l2_io(entity_err))
|
if (!is_media_entity_v4l2_io(entity_err))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
@ -1090,21 +1091,29 @@ static int __fimc_md_modify_pipelines(struct media_entity *entity, bool enable)
|
|||||||
static int fimc_md_link_notify(struct media_link *link, unsigned int flags,
|
static int fimc_md_link_notify(struct media_link *link, unsigned int flags,
|
||||||
unsigned int notification)
|
unsigned int notification)
|
||||||
{
|
{
|
||||||
|
struct media_entity_graph *graph =
|
||||||
|
&container_of(link->graph_obj.mdev, struct fimc_md,
|
||||||
|
media_dev)->link_setup_graph;
|
||||||
struct media_entity *sink = link->sink->entity;
|
struct media_entity *sink = link->sink->entity;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
/* Before link disconnection */
|
/* Before link disconnection */
|
||||||
if (notification == MEDIA_DEV_NOTIFY_PRE_LINK_CH) {
|
if (notification == MEDIA_DEV_NOTIFY_PRE_LINK_CH) {
|
||||||
|
ret = media_entity_graph_walk_init(graph,
|
||||||
|
link->graph_obj.mdev);
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
if (!(flags & MEDIA_LNK_FL_ENABLED))
|
if (!(flags & MEDIA_LNK_FL_ENABLED))
|
||||||
ret = __fimc_md_modify_pipelines(sink, false);
|
ret = __fimc_md_modify_pipelines(sink, false, graph);
|
||||||
#if 0
|
#if 0
|
||||||
else
|
else
|
||||||
/* TODO: Link state change validation */
|
/* TODO: Link state change validation */
|
||||||
#endif
|
#endif
|
||||||
/* After link activation */
|
/* After link activation */
|
||||||
} else if (notification == MEDIA_DEV_NOTIFY_POST_LINK_CH &&
|
} else if (notification == MEDIA_DEV_NOTIFY_POST_LINK_CH) {
|
||||||
(link->flags & MEDIA_LNK_FL_ENABLED)) {
|
if (link->flags & MEDIA_LNK_FL_ENABLED)
|
||||||
ret = __fimc_md_modify_pipelines(sink, true);
|
ret = __fimc_md_modify_pipelines(sink, true, graph);
|
||||||
|
media_entity_graph_walk_cleanup(graph);
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret ? -EPIPE : 0;
|
return ret ? -EPIPE : 0;
|
||||||
|
@ -154,6 +154,7 @@ struct fimc_md {
|
|||||||
bool user_subdev_api;
|
bool user_subdev_api;
|
||||||
spinlock_t slock;
|
spinlock_t slock;
|
||||||
struct list_head pipelines;
|
struct list_head pipelines;
|
||||||
|
struct media_entity_graph link_setup_graph;
|
||||||
};
|
};
|
||||||
|
|
||||||
static inline
|
static inline
|
||||||
|
Reference in New Issue
Block a user