Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

[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
Loading
Loading
Loading
Loading
+35 −0
Original line number Diff line number Diff line
@@ -15,9 +15,44 @@
 */

#include <linux/module.h>
#include <linux/pci.h>
#include <media/media-entity.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)

{
+23 −1
Original line number Diff line number Diff line
@@ -92,6 +92,10 @@ enum demod_pad_index {
	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.
 *
@@ -106,11 +110,29 @@ enum demod_pad_index {
 * interface centric PC-consumer's hardware, V4L2 subdev centric camera
 * 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);

/**
 * 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
static inline int v4l2_mc_create_media_graph(struct media_device *mdev)
{
	return 0;
}

struct media_device *v4l2_mc_pci_media_device_init(struct pci_dev *pci_dev,
						   char *name) {
	return NULL;
}

#endif