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

Commit 39a956c4 authored by Mauro Carvalho Chehab's avatar Mauro Carvalho Chehab
Browse files

[media] media: add a debug message to warn about gobj creation/removal



It helps to check if the media controller is doing the
right thing with the object creation and removal.

No extra code/data will be produced if DEBUG or
CONFIG_DYNAMIC_DEBUG is not enabled.

Acked-by: default avatarHans Verkuil <hans.verkuil@cisco.com>
Reviewed-by: default avatarJavier Martinez Canillas <javier@osg.samsung.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@osg.samsung.com>
parent 8f5a3188
Loading
Loading
Loading
Loading
+67 −1
Original line number Diff line number Diff line
@@ -26,6 +26,69 @@
#include <media/media-entity.h>
#include <media/media-device.h>

/**
 *  dev_dbg_obj - Prints in debug mode a change on some object
 *
 * @event_name:	Name of the event to report. Could be __func__
 * @gobj:	Pointer to the object
 *
 * Enabled only if DEBUG or CONFIG_DYNAMIC_DEBUG. Otherwise, it
 * won't produce any code.
 */
static inline const char *gobj_type(enum media_gobj_type type)
{
	switch (type) {
	case MEDIA_GRAPH_ENTITY:
		return "entity";
	case MEDIA_GRAPH_PAD:
		return "pad";
	case MEDIA_GRAPH_LINK:
		return "link";
	default:
		return "unknown";
	}
}

static void dev_dbg_obj(const char *event_name,  struct media_gobj *gobj)
{
#if defined(DEBUG) || defined (CONFIG_DYNAMIC_DEBUG)
	switch (media_type(gobj)) {
	case MEDIA_GRAPH_ENTITY:
		dev_dbg(gobj->mdev->dev,
			"%s: id 0x%08x entity#%d: '%s'\n",
			event_name, gobj->id, media_localid(gobj),
			gobj_to_entity(gobj)->name);
		break;
	case MEDIA_GRAPH_LINK:
	{
		struct media_link *link = gobj_to_link(gobj);

		dev_dbg(gobj->mdev->dev,
			"%s: id 0x%08x link#%d: '%s' %s#%d ==> '%s' %s#%d\n",
			event_name, gobj->id, media_localid(gobj),

			link->source->entity->name,
			gobj_type(media_type(&link->source->graph_obj)),
			media_localid(&link->source->graph_obj),

			link->sink->entity->name,
			gobj_type(media_type(&link->sink->graph_obj)),
			media_localid(&link->sink->graph_obj));
		break;
	}
	case MEDIA_GRAPH_PAD:
	{
		struct media_pad *pad = gobj_to_pad(gobj);

		dev_dbg(gobj->mdev->dev,
			"%s: id 0x%08x pad#%d: '%s':%d\n",
			event_name, gobj->id, media_localid(gobj),
			pad->entity->name, pad->index);
	}
	}
#endif
}

/**
 *  media_gobj_init - Initialize a graph object
 *
@@ -43,6 +106,8 @@ void media_gobj_init(struct media_device *mdev,
			   enum media_gobj_type type,
			   struct media_gobj *gobj)
{
	gobj->mdev = mdev;

	/* Create a per-type unique object ID */
	switch (type) {
	case MEDIA_GRAPH_ENTITY:
@@ -55,6 +120,7 @@ void media_gobj_init(struct media_device *mdev,
		gobj->id = media_gobj_gen_id(type, ++mdev->link_id);
		break;
	}
	dev_dbg_obj(__func__, gobj);
}

/**
@@ -66,7 +132,7 @@ void media_gobj_init(struct media_device *mdev,
 */
void media_gobj_remove(struct media_gobj *gobj)
{
	/* For now, nothing to do */
	dev_dbg_obj(__func__, gobj);
}

/**
+7 −0
Original line number Diff line number Diff line
@@ -61,6 +61,7 @@ enum media_gobj_type {
 * All objects on the media graph should have this struct embedded
 */
struct media_gobj {
	struct media_device	*mdev;
	u32			id;
};

@@ -199,6 +200,12 @@ struct media_entity_graph {
#define gobj_to_entity(gobj) \
		container_of(gobj, struct media_entity, graph_obj)

#define gobj_to_pad(gobj) \
		container_of(gobj, struct media_pad, graph_obj)

#define gobj_to_link(gobj) \
		container_of(gobj, struct media_link, graph_obj)

void media_gobj_init(struct media_device *mdev,
		    enum media_gobj_type type,
		    struct media_gobj *gobj);