aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/media/usb/au0828/au0828-core.c26
-rw-r--r--drivers/media/v4l2-core/v4l2-mc.c18
2 files changed, 26 insertions, 18 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,
456{ 456{
457#ifdef CONFIG_MEDIA_CONTROLLER 457#ifdef CONFIG_MEDIA_CONTROLLER
458 int ret; 458 int ret;
459 struct media_entity *entity, *demod = NULL, *tuner = NULL;
459 460
460 if (!dev->media_dev) 461 if (!dev->media_dev)
461 return 0; 462 return 0;
@@ -479,6 +480,31 @@ static int au0828_media_device_register(struct au0828_dev *dev,
479 */ 480 */
480 au0828_media_graph_notify(NULL, (void *) dev); 481 au0828_media_graph_notify(NULL, (void *) dev);
481 } 482 }
483
484 /*
485 * Find tuner and demod to disable the link between
486 * the two to avoid disable step when tuner is requested
487 * by video or audio. Note that this step can't be done
488 * until dvb graph is created during dvb register.
489 */
490 media_device_for_each_entity(entity, dev->media_dev) {
491 if (entity->function == MEDIA_ENT_F_DTV_DEMOD)
492 demod = entity;
493 else if (entity->function == MEDIA_ENT_F_TUNER)
494 tuner = entity;
495 }
496 /* Disable link between tuner and demod */
497 if (tuner && demod) {
498 struct media_link *link;
499
500 list_for_each_entry(link, &demod->links, list) {
501 if (link->sink->entity == demod &&
502 link->source->entity == tuner) {
503 media_entity_setup_link(link, 0);
504 }
505 }
506 }
507
482 /* register entity_notify callback */ 508 /* register entity_notify callback */
483 dev->entity_notify.notify_data = (void *) dev; 509 dev->entity_notify.notify_data = (void *) dev;
484 dev->entity_notify.notify = (void *) au0828_media_graph_notify; 510 dev->entity_notify.notify = (void *) au0828_media_graph_notify;
diff --git a/drivers/media/v4l2-core/v4l2-mc.c b/drivers/media/v4l2-core/v4l2-mc.c
index f8b6e3be634f..2a7b79bc90fd 100644
--- a/drivers/media/v4l2-core/v4l2-mc.c
+++ b/drivers/media/v4l2-core/v4l2-mc.c
@@ -57,9 +57,6 @@ int v4l2_mc_create_media_graph(struct media_device *mdev)
57 case MEDIA_ENT_F_ATV_DECODER: 57 case MEDIA_ENT_F_ATV_DECODER:
58 decoder = entity; 58 decoder = entity;
59 break; 59 break;
60 case MEDIA_ENT_F_DTV_DEMOD:
61 dtv_demod = entity;
62 break;
63 case MEDIA_ENT_F_IO_V4L: 60 case MEDIA_ENT_F_IO_V4L:
64 io_v4l = entity; 61 io_v4l = entity;
65 break; 62 break;
@@ -194,21 +191,6 @@ int v4l2_mc_create_media_graph(struct media_device *mdev)
194 flags = 0; 191 flags = 0;
195 } 192 }
196 193
197 /*
198 * Disable tuner to demod link to avoid disable step
199 * when tuner is requested by video or audio
200 */
201 if (tuner && dtv_demod) {
202 struct media_link *link;
203
204 list_for_each_entry(link, &dtv_demod->links, list) {
205 if (link->sink->entity == dtv_demod &&
206 link->source->entity == tuner) {
207 media_entity_setup_link(link, 0);
208 }
209 }
210 }
211
212 return 0; 194 return 0;
213} 195}
214EXPORT_SYMBOL_GPL(v4l2_mc_create_media_graph); 196EXPORT_SYMBOL_GPL(v4l2_mc_create_media_graph);