Merge branches 'arm/rockchip', 'arm/exynos', 'arm/smmu', 'x86/vt-d', 'x86/amd', ...
[firefly-linux-kernel-4.4.55.git] / drivers / media / dvb-core / dvbdev.c
index c5de02455b173cefdb2d834497d48506fee6b439..13bb57f0457f7f9514628c177ae00784bc4e4461 100644 (file)
@@ -380,6 +380,52 @@ void dvb_unregister_device(struct dvb_device *dvbdev)
 }
 EXPORT_SYMBOL(dvb_unregister_device);
 
+
+#ifdef CONFIG_MEDIA_CONTROLLER_DVB
+void dvb_create_media_graph(struct dvb_adapter *adap)
+{
+       struct media_device *mdev = adap->mdev;
+       struct media_entity *entity, *tuner = NULL, *fe = NULL;
+       struct media_entity *demux = NULL, *dvr = NULL, *ca = NULL;
+
+       if (!mdev)
+               return;
+
+       media_device_for_each_entity(entity, mdev) {
+               switch (entity->type) {
+               case MEDIA_ENT_T_V4L2_SUBDEV_TUNER:
+                       tuner = entity;
+                       break;
+               case MEDIA_ENT_T_DEVNODE_DVB_FE:
+                       fe = entity;
+                       break;
+               case MEDIA_ENT_T_DEVNODE_DVB_DEMUX:
+                       demux = entity;
+                       break;
+               case MEDIA_ENT_T_DEVNODE_DVB_DVR:
+                       dvr = entity;
+                       break;
+               case MEDIA_ENT_T_DEVNODE_DVB_CA:
+                       ca = entity;
+                       break;
+               }
+       }
+
+       if (tuner && fe)
+               media_entity_create_link(tuner, 0, fe, 0, 0);
+
+       if (fe && demux)
+               media_entity_create_link(fe, 1, demux, 0, MEDIA_LNK_FL_ENABLED);
+
+       if (demux && dvr)
+               media_entity_create_link(demux, 1, dvr, 0, MEDIA_LNK_FL_ENABLED);
+
+       if (demux && ca)
+               media_entity_create_link(demux, 1, ca, 0, MEDIA_LNK_FL_ENABLED);
+}
+EXPORT_SYMBOL_GPL(dvb_create_media_graph);
+#endif
+
 static int dvbdev_check_free_adapter_num(int num)
 {
        struct list_head *entry;