[media] media: add a debug message to warn about gobj creation/removal
authorMauro Carvalho Chehab <mchehab@osg.samsung.com>
Thu, 13 Aug 2015 17:42:42 +0000 (14:42 -0300)
committerMauro Carvalho Chehab <mchehab@osg.samsung.com>
Mon, 11 Jan 2016 14:18:42 +0000 (12:18 -0200)
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: Hans Verkuil <hans.verkuil@cisco.com>
Reviewed-by: Javier Martinez Canillas <javier@osg.samsung.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
drivers/media/media-entity.c
include/media/media-entity.h

index 63fd293a3fb884859516c7520e36741a2d5f2ef3..f5b4822a324fbf80b52205d50ae2a27228948c8e 100644 (file)
 #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);
 }
 
 /**
index bf93c90e921882339f9842391a1833a935eaecfa..96a5d3e6f6f43e4dd073405190fed722728f05e5 100644 (file)
@@ -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);
This page took 0.041894 seconds and 5 git commands to generate.