Commit f90c5d79 authored by Shuah Khan's avatar Shuah Khan Committed by Mauro Carvalho Chehab

[media] media: au0828-core register entity_notify hook

Register entity_notify async hook to create links between existing
bridge driver entities and a newly added non-bridge driver entities. For
example, this handler creates link between V4L decoder entity and ALSA
mixer entity.

[mchehab@osg.samsung.com: fix merge conflicts and make
 au0828_media_graph_notify static to shut up a warning]
Signed-off-by: default avatarShuah Khan <shuahkh@osg.samsung.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@osg.samsung.com>
parent b1769651
......@@ -20,6 +20,7 @@
*/
#include "au0828.h"
#include "au8522.h"
#include <linux/module.h>
#include <linux/slab.h>
......@@ -204,14 +205,43 @@ static int au0828_media_device_init(struct au0828_dev *dev,
return 0;
}
static void au0828_media_graph_notify(struct media_entity *new,
void *notify_data)
{
#ifdef CONFIG_MEDIA_CONTROLLER
struct au0828_dev *dev = (struct au0828_dev *) notify_data;
int ret;
if (!dev->decoder)
return;
switch (new->function) {
case MEDIA_ENT_F_AUDIO_MIXER:
ret = media_create_pad_link(dev->decoder,
AU8522_PAD_AUDIO_OUT,
new, 0,
MEDIA_LNK_FL_ENABLED);
if (ret)
dev_err(&dev->usbdev->dev,
"Mixer Pad Link Create Error: %d\n",
ret);
break;
default:
break;
}
#endif
}
static int au0828_media_device_register(struct au0828_dev *dev,
struct usb_device *udev)
{
#ifdef CONFIG_MEDIA_CONTROLLER
int ret;
if (dev->media_dev &&
!media_devnode_is_registered(&dev->media_dev->devnode)) {
if (!dev->media_dev)
return 0;
if (!media_devnode_is_registered(&dev->media_dev->devnode)) {
/* register media device */
ret = media_device_register(dev->media_dev);
......@@ -221,6 +251,17 @@ static int au0828_media_device_register(struct au0828_dev *dev,
return ret;
}
}
/* register entity_notify callback */
dev->entity_notify.notify_data = (void *) dev;
dev->entity_notify.notify = (void *) au0828_media_graph_notify;
ret = media_device_register_entity_notify(dev->media_dev,
&dev->entity_notify);
if (ret) {
dev_err(&udev->dev,
"Media Device register entity_notify Error: %d\n",
ret);
return ret;
}
#endif
return 0;
}
......
......@@ -282,6 +282,7 @@ struct au0828_dev {
struct media_entity *decoder;
struct media_entity input_ent[AU0828_MAX_INPUT];
struct media_pad input_pad[AU0828_MAX_INPUT];
struct media_entity_notify entity_notify;
#endif
};
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment