static int fimc_md_link_notify(struct media_link *link, unsigned int flags, unsigned int notification) { struct media_entity *sink = link->sink->entity; int ret = 0; /* Before link disconnection */ if (notification == MEDIA_DEV_NOTIFY_PRE_LINK_CH) { if (!(flags & MEDIA_LNK_FL_ENABLED)) ret = __fimc_md_modify_pipelines(sink, false); #if 0 else /* TODO: Link state change validation */ #endif /* After link activation */ } else if (notification == MEDIA_DEV_NOTIFY_POST_LINK_CH &&
static int fimc_md_link_notify(struct media_link *link, unsigned int flags, 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; int ret = 0; /* Before link disconnection */ 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)) ret = __fimc_md_modify_pipelines(sink, false, graph); #if 0 else /* TODO: Link state change validation */ #endif /* After link activation */ } else if (notification == MEDIA_DEV_NOTIFY_POST_LINK_CH) {
{ struct media_entity *sink = link->sink->entity; int ret = 0; /* Before link disconnection */ if (notification == MEDIA_DEV_NOTIFY_PRE_LINK_CH) { if (!(flags & MEDIA_LNK_FL_ENABLED)) ret = __fimc_md_modify_pipelines(sink, false); #if 0 else /* TODO: Link state change validation */ #endif /* After link activation */ } else if (notification == MEDIA_DEV_NOTIFY_POST_LINK_CH && (link->flags & MEDIA_LNK_FL_ENABLED)) { ret = __fimc_md_modify_pipelines(sink, true); } return ret ? -EPIPE : 0; } static ssize_t fimc_md_sysfs_show(struct device *dev, struct device_attribute *attr, char *buf) { struct platform_device *pdev = to_platform_device(dev); struct fimc_md *fmd = platform_get_drvdata(pdev); if (fmd->user_subdev_api) return strlcpy(buf, "Sub-device API (sub-dev)\n", PAGE_SIZE); return strlcpy(buf, "V4L2 video node only API (vid-dev)\n", PAGE_SIZE);