diff options
-rw-r--r-- | drivers/media/usb/au0828/au0828-core.c | 26 | ||||
-rw-r--r-- | drivers/media/v4l2-core/v4l2-mc.c | 18 |
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 | } |
214 | EXPORT_SYMBOL_GPL(v4l2_mc_create_media_graph); | 196 | EXPORT_SYMBOL_GPL(v4l2_mc_create_media_graph); |