diff options
author | Mauro Carvalho Chehab <mchehab@osg.samsung.com> | 2016-03-02 14:11:41 +0100 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@osg.samsung.com> | 2016-03-03 10:23:20 +0100 |
commit | 9822f4173f84cb7c592edb5e1478b7903f69d018 (patch) | |
tree | a8851c62011b3b7933dc481d196eb8dfbf3af71e /drivers/media/usb | |
parent | [media] au0828: use standard demod pads struct (diff) | |
download | linux-9822f4173f84cb7c592edb5e1478b7903f69d018.tar.xz linux-9822f4173f84cb7c592edb5e1478b7903f69d018.zip |
[media] au0828: use v4l2_mc_create_media_graph()
There's no reason to implement its own function to create the
media graph. So, use the core one.
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
Diffstat (limited to 'drivers/media/usb')
-rw-r--r-- | drivers/media/usb/au0828/au0828-video.c | 103 |
1 files changed, 5 insertions, 98 deletions
diff --git a/drivers/media/usb/au0828/au0828-video.c b/drivers/media/usb/au0828/au0828-video.c index b82deda02643..c0839d62ff13 100644 --- a/drivers/media/usb/au0828/au0828-video.c +++ b/drivers/media/usb/au0828/au0828-video.c @@ -35,6 +35,7 @@ #include <linux/init.h> #include <linux/device.h> #include <media/v4l2-common.h> +#include <media/v4l2-mc.h> #include <media/v4l2-ioctl.h> #include <media/v4l2-event.h> #include <media/tuner.h> @@ -652,102 +653,6 @@ void au0828_usb_v4l2_media_release(struct au0828_dev *dev) #endif } -static int au0828_create_media_graph(struct au0828_dev *dev) -{ -#ifdef CONFIG_MEDIA_CONTROLLER - struct media_device *mdev = dev->media_dev; - struct media_entity *entity; - struct media_entity *tuner = NULL, *decoder = NULL, *demod = NULL; - int i, ret; - - if (!mdev) - return 0; - - media_device_for_each_entity(entity, mdev) { - switch (entity->function) { - case MEDIA_ENT_F_TUNER: - tuner = entity; - break; - case MEDIA_ENT_F_ATV_DECODER: - decoder = entity; - break; - case MEDIA_ENT_F_DTV_DEMOD: - demod = entity; - break; - } - } - - /* Analog setup, using tuner as a link */ - - /* Something bad happened! */ - if (!decoder) - return -EINVAL; - - if (tuner) { - dev->tuner = tuner; - ret = media_create_pad_link(tuner, TUNER_PAD_OUTPUT, - decoder, DEMOD_PAD_IF_INPUT, 0); - if (ret) - return ret; - } - ret = media_create_pad_link(decoder, DEMOD_PAD_VID_OUT, - &dev->vdev.entity, 0, - MEDIA_LNK_FL_ENABLED); - if (ret) - return ret; - ret = media_create_pad_link(decoder, DEMOD_PAD_VBI_OUT, - &dev->vbi_dev.entity, 0, - MEDIA_LNK_FL_ENABLED); - if (ret) - return ret; - - for (i = 0; i < AU0828_MAX_INPUT; i++) { - struct media_entity *ent = &dev->input_ent[i]; - - switch (AUVI_INPUT(i).type) { - case AU0828_VMUX_UNDEFINED: - break; - case AU0828_VMUX_CABLE: - case AU0828_VMUX_TELEVISION: - case AU0828_VMUX_DVB: - if (!tuner) - break; - - ret = media_create_pad_link(ent, 0, tuner, - TUNER_PAD_RF_INPUT, - MEDIA_LNK_FL_ENABLED); - if (ret) - return ret; - break; - case AU0828_VMUX_COMPOSITE: - case AU0828_VMUX_SVIDEO: - /* FIXME: fix the decoder PAD */ - ret = media_create_pad_link(ent, 0, decoder, - DEMOD_PAD_IF_INPUT, 0); - if (ret) - return ret; - break; - } - } - - /* - * Disable tuner to demod link to avoid disable step - * when tuner is requested by video or audio - */ - 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); - } - } - } -#endif - return 0; -} - static void au0828_usb_v4l2_release(struct v4l2_device *v4l2_dev) { struct au0828_dev *dev = @@ -2120,14 +2025,16 @@ int au0828_analog_register(struct au0828_dev *dev, ret = -ENODEV; goto err_reg_vbi_dev; } - retval = au0828_create_media_graph(dev); + +#ifdef CONFIG_MEDIA_CONTROLLER + retval = v4l2_mc_create_media_graph(dev->media_dev); if (retval) { pr_err("%s() au0282_dev_register failed to create graph\n", __func__); ret = -ENODEV; goto err_reg_vbi_dev; } - +#endif dprintk(1, "%s completed!\n", __func__); |