[media] dvbdev: add support for indirect interface links
authorMauro Carvalho Chehab <mchehab@osg.samsung.com>
Fri, 21 Aug 2015 12:32:38 +0000 (09:32 -0300)
committerMauro Carvalho Chehab <mchehab@osg.samsung.com>
Mon, 11 Jan 2016 14:18:48 +0000 (12:18 -0200)
Some interfaces indirectly control multiple entities.
Add support for those.

Acked-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
drivers/media/dvb-core/dvbdev.c

index 6bf61d4..ada0738 100644 (file)
@@ -441,6 +441,7 @@ 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;
+       struct media_interface *intf;
 
        if (!mdev)
                return;
@@ -476,6 +477,16 @@ void dvb_create_media_graph(struct dvb_adapter *adap)
 
        if (demux && ca)
                media_create_pad_link(demux, 1, ca, 0, MEDIA_LNK_FL_ENABLED);
+
+       /* Create indirect interface links for FE->tuner, DVR->demux and CA->ca */
+       list_for_each_entry(intf, &mdev->interfaces, list) {
+               if (intf->type == MEDIA_INTF_T_DVB_CA && ca)
+                       media_create_intf_link(ca, intf, 0);
+               if (intf->type == MEDIA_INTF_T_DVB_FE && tuner)
+                       media_create_intf_link(tuner, intf, 0);
+               if (intf->type == MEDIA_INTF_T_DVB_DVR && demux)
+                       media_create_intf_link(demux, intf, 0);
+       }
 }
 EXPORT_SYMBOL_GPL(dvb_create_media_graph);
 #endif