提交 4155109a 编写于 作者: M Mauro Carvalho Chehab

[media] dvbdev: add a function to create DVB media graph

We need to create a DVB graph, linking the several DVB devnodes.

Add such function. Please notice that this helper function
doesn't take into account devices with multiple DVB adapters
and frontends.

For devices with multiple adapters, they should either create two
different media controller instances or to improve this function
to take the adapter ID into account.
Signed-off-by: NMauro Carvalho Chehab <mchehab@osg.samsung.com>
上级 3bde1b78
...@@ -380,6 +380,51 @@ void dvb_unregister_device(struct dvb_device *dvbdev) ...@@ -380,6 +380,51 @@ void dvb_unregister_device(struct dvb_device *dvbdev)
} }
EXPORT_SYMBOL(dvb_unregister_device); EXPORT_SYMBOL(dvb_unregister_device);
void dvb_create_media_graph(struct media_device *mdev)
{
#ifdef CONFIG_MEDIA_CONTROLLER_DVB
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, 0);
if (demux && dvr)
media_entity_create_link(demux, 1, dvr, 0, 0);
if (demux && ca)
media_entity_create_link(demux, 1, ca, 0, 0);
#endif
}
EXPORT_SYMBOL_GPL(dvb_create_media_graph);
static int dvbdev_check_free_adapter_num(int num) static int dvbdev_check_free_adapter_num(int num)
{ {
struct list_head *entry; struct list_head *entry;
......
...@@ -122,6 +122,7 @@ extern int dvb_register_device (struct dvb_adapter *adap, ...@@ -122,6 +122,7 @@ extern int dvb_register_device (struct dvb_adapter *adap,
int type); int type);
extern void dvb_unregister_device (struct dvb_device *dvbdev); extern void dvb_unregister_device (struct dvb_device *dvbdev);
void dvb_create_media_graph(struct media_device *mdev);
extern int dvb_generic_open (struct inode *inode, struct file *file); extern int dvb_generic_open (struct inode *inode, struct file *file);
extern int dvb_generic_release (struct inode *inode, struct file *file); extern int dvb_generic_release (struct inode *inode, struct file *file);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册