diff options
author | Shuah Khan <shuahkh@osg.samsung.com> | 2016-03-10 05:15:38 +0300 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@osg.samsung.com> | 2016-03-10 19:44:10 +0300 |
commit | 840f5b0572ea9ddaca2bf5540a171013e92c97bd (patch) | |
tree | 485eb1f256b9bcafa80f6e405969e1205f3046cf /drivers/media/usb/au0828 | |
parent | 778f2a3c1644bf446c4069477fbdf99b7a40a55a (diff) | |
download | linux-840f5b0572ea9ddaca2bf5540a171013e92c97bd.tar.xz |
media: au0828 disable tuner to demod link in au0828_media_device_register()
Disable tuner to demod link in au0828_media_device_register(). This step
should be done after dvb graph is created.
[mchehab@osg.samsung.com: Solve conflictst to apply it upstream]
Signed-off-by: Shuah Khan <shuahkh@osg.samsung.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
Diffstat (limited to 'drivers/media/usb/au0828')
-rw-r--r-- | drivers/media/usb/au0828/au0828-core.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/drivers/media/usb/au0828/au0828-core.c b/drivers/media/usb/au0828/au0828-core.c index 7fc3dba5e2b6..5dc82e8c8670 100644 --- a/drivers/media/usb/au0828/au0828-core.c +++ b/drivers/media/usb/au0828/au0828-core.c @@ -456,6 +456,7 @@ static int au0828_media_device_register(struct au0828_dev *dev, { #ifdef CONFIG_MEDIA_CONTROLLER int ret; + struct media_entity *entity, *demod = NULL, *tuner = NULL; if (!dev->media_dev) return 0; @@ -479,6 +480,31 @@ static int au0828_media_device_register(struct au0828_dev *dev, */ au0828_media_graph_notify(NULL, (void *) dev); } + + /* + * Find tuner and demod to disable the link between + * the two to avoid disable step when tuner is requested + * by video or audio. Note that this step can't be done + * until dvb graph is created during dvb register. + */ + media_device_for_each_entity(entity, dev->media_dev) { + if (entity->function == MEDIA_ENT_F_DTV_DEMOD) + demod = entity; + else if (entity->function == MEDIA_ENT_F_TUNER) + tuner = entity; + } + /* Disable link between tuner and demod */ + if (tuner && demod) { + struct media_link *link; + + list_for_each_entry(link, &demod->links, list) { + if (link->sink->entity == demod && + link->source->entity == tuner) { + media_entity_setup_link(link, 0); + } + } + } + /* register entity_notify callback */ dev->entity_notify.notify_data = (void *) dev; dev->entity_notify.notify = (void *) au0828_media_graph_notify; |