Commit 7047f298 authored by Mauro Carvalho Chehab's avatar Mauro Carvalho Chehab

[media] v4l2-mc: add an ancillary routine for PCI-based MC

Instead of copyping the same code on all PCI devices that
would have a media controller, add a core ancillary routine.
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@osg.samsung.com>
parent 8bf77f9e
...@@ -15,9 +15,44 @@ ...@@ -15,9 +15,44 @@
*/ */
#include <linux/module.h> #include <linux/module.h>
#include <linux/pci.h>
#include <media/media-entity.h> #include <media/media-entity.h>
#include <media/v4l2-mc.h> #include <media/v4l2-mc.h>
struct media_device *v4l2_mc_pci_media_device_init(struct pci_dev *pci_dev,
char *name)
{
#ifdef CONFIG_PCI
struct media_device *mdev;
mdev = kzalloc(sizeof(*mdev), GFP_KERNEL);
if (!mdev)
return NULL;
mdev->dev = &pci_dev->dev;
if (name)
strlcpy(mdev->model, name, sizeof(mdev->model));
else
strlcpy(mdev->model, pci_name(pci_dev), sizeof(mdev->model));
sprintf(mdev->bus_info, "PCI:%s", pci_name(pci_dev));
mdev->hw_revision = pci_dev->subsystem_vendor << 16
|| pci_dev->subsystem_device;
mdev->driver_version = LINUX_VERSION_CODE;
media_device_init(mdev);
return mdev;
#else
return NULL;
#endif
}
EXPORT_SYMBOL_GPL(v4l2_mc_pci_media_device_init);
int v4l2_mc_create_media_graph(struct media_device *mdev) int v4l2_mc_create_media_graph(struct media_device *mdev)
{ {
......
...@@ -92,6 +92,10 @@ enum demod_pad_index { ...@@ -92,6 +92,10 @@ enum demod_pad_index {
DEMOD_NUM_PADS DEMOD_NUM_PADS
}; };
struct pci_dev; /* We don't need to include pci.h here */
#ifdef CONFIG_MEDIA_CONTROLLER
/** /**
* v4l2_mc_create_media_graph() - create Media Controller links at the graph. * v4l2_mc_create_media_graph() - create Media Controller links at the graph.
* *
...@@ -106,11 +110,29 @@ enum demod_pad_index { ...@@ -106,11 +110,29 @@ enum demod_pad_index {
* interface centric PC-consumer's hardware, V4L2 subdev centric camera * interface centric PC-consumer's hardware, V4L2 subdev centric camera
* hardware should not use this routine, as it will not build the right graph. * hardware should not use this routine, as it will not build the right graph.
*/ */
#ifdef CONFIG_MEDIA_CONTROLLER
int v4l2_mc_create_media_graph(struct media_device *mdev); int v4l2_mc_create_media_graph(struct media_device *mdev);
/**
* v4l2_mc_pci_media_device_init() - create and initialize a
* struct &media_device from a PCI device.
*
* @pci_dev: pointer to struct pci_dev
* @name: media device name. If %NULL, the routine will use the default
* name for the pci device, given by pci_name() macro.
*/
struct media_device *v4l2_mc_pci_media_device_init(struct pci_dev *pci_dev,
char *name);
#else #else
static inline int v4l2_mc_create_media_graph(struct media_device *mdev) static inline int v4l2_mc_create_media_graph(struct media_device *mdev)
{ {
return 0; return 0;
} }
struct media_device *v4l2_mc_pci_media_device_init(struct pci_dev *pci_dev,
char *name) {
return NULL;
}
#endif #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