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

[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
...@@ -26,6 +26,69 @@ ...@@ -26,6 +26,69 @@
#include <media/media-entity.h> #include <media/media-entity.h>
#include <media/media-device.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 * media_gobj_init - Initialize a graph object
* *
...@@ -43,6 +106,8 @@ void media_gobj_init(struct media_device *mdev, ...@@ -43,6 +106,8 @@ void media_gobj_init(struct media_device *mdev,
enum media_gobj_type type, enum media_gobj_type type,
struct media_gobj *gobj) struct media_gobj *gobj)
{ {
gobj->mdev = mdev;
/* Create a per-type unique object ID */ /* Create a per-type unique object ID */
switch (type) { switch (type) {
case MEDIA_GRAPH_ENTITY: case MEDIA_GRAPH_ENTITY:
...@@ -55,6 +120,7 @@ void media_gobj_init(struct media_device *mdev, ...@@ -55,6 +120,7 @@ void media_gobj_init(struct media_device *mdev,
gobj->id = media_gobj_gen_id(type, ++mdev->link_id); gobj->id = media_gobj_gen_id(type, ++mdev->link_id);
break; break;
} }
dev_dbg_obj(__func__, gobj);
} }
/** /**
...@@ -66,7 +132,7 @@ void media_gobj_init(struct media_device *mdev, ...@@ -66,7 +132,7 @@ void media_gobj_init(struct media_device *mdev,
*/ */
void media_gobj_remove(struct media_gobj *gobj) void media_gobj_remove(struct media_gobj *gobj)
{ {
/* For now, nothing to do */ dev_dbg_obj(__func__, gobj);
} }
/** /**
......
...@@ -61,6 +61,7 @@ enum media_gobj_type { ...@@ -61,6 +61,7 @@ enum media_gobj_type {
* All objects on the media graph should have this struct embedded * All objects on the media graph should have this struct embedded
*/ */
struct media_gobj { struct media_gobj {
struct media_device *mdev;
u32 id; u32 id;
}; };
...@@ -199,6 +200,12 @@ struct media_entity_graph { ...@@ -199,6 +200,12 @@ struct media_entity_graph {
#define gobj_to_entity(gobj) \ #define gobj_to_entity(gobj) \
container_of(gobj, struct media_entity, graph_obj) 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, void media_gobj_init(struct media_device *mdev,
enum media_gobj_type type, enum media_gobj_type type,
struct media_gobj *gobj); struct media_gobj *gobj);
......
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