Index: uspace/drv/fb/amdm37x_dispc/Makefile
===================================================================
--- uspace/drv/fb/amdm37x_dispc/Makefile	(revision 74db5a13cdf345c1ab652a87c0d835d45e0b2169)
+++ uspace/drv/fb/amdm37x_dispc/Makefile	(revision 9cc4b2b474c0fb0b4f6e55bb4f264332f77f3fdd)
@@ -45,4 +45,5 @@
 SOURCES = \
 	port.c \
+	amdm37x_dispc.c \
 	main.c
 
Index: uspace/drv/fb/amdm37x_dispc/amdm37x_dispc.c
===================================================================
--- uspace/drv/fb/amdm37x_dispc/amdm37x_dispc.c	(revision 9cc4b2b474c0fb0b4f6e55bb4f264332f77f3fdd)
+++ uspace/drv/fb/amdm37x_dispc/amdm37x_dispc.c	(revision 9cc4b2b474c0fb0b4f6e55bb4f264332f77f3fdd)
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2013 Jan Vesely
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup amdm37x
+ * @{
+ */
+/**
+ * @file
+ */
+
+#include <errno.h>
+
+#include "amdm37x_dispc.h"
+
+const visualizer_ops_t amdm37x_dispc_vis_ops = { 0 };
+
+int amdm37x_dispc_init(amdm37x_dispc_t *instance)
+{
+	return EOK;
+};
+
+int amdm37x_dispc_fini(amdm37x_dispc_t *instance)
+{
+	return EOK;
+};
+
Index: uspace/drv/fb/amdm37x_dispc/amdm37x_dispc.h
===================================================================
--- uspace/drv/fb/amdm37x_dispc/amdm37x_dispc.h	(revision 74db5a13cdf345c1ab652a87c0d835d45e0b2169)
+++ uspace/drv/fb/amdm37x_dispc/amdm37x_dispc.h	(revision 9cc4b2b474c0fb0b4f6e55bb4f264332f77f3fdd)
@@ -37,4 +37,6 @@
 #define AMDM37X_DISPC_H_
 
+#include <graph.h>
+
 #include "amdm37x_dispc_regs.h"
 
@@ -44,15 +46,10 @@
 } amdm37x_dispc_t;
 
-static inline int amdm37x_dispc_init(amdm37x_dispc_t *instance)
-{
-	return EOK;
-};
-static inline int amdm37x_dispc_fini(amdm37x_dispc_t *instance)
-{
-	return EOK;
-};
+extern const visualizer_ops_t amdm37x_dispc_vis_ops;
+
+int amdm37x_dispc_init(amdm37x_dispc_t *instance);
+int amdm37x_dispc_fini(amdm37x_dispc_t *instance);
 
 #endif
-
 /** @}
  */
Index: uspace/drv/fb/amdm37x_dispc/main.c
===================================================================
--- uspace/drv/fb/amdm37x_dispc/main.c	(revision 74db5a13cdf345c1ab652a87c0d835d45e0b2169)
+++ uspace/drv/fb/amdm37x_dispc/main.c	(revision 9cc4b2b474c0fb0b4f6e55bb4f264332f77f3fdd)
@@ -62,6 +62,8 @@
 		return ENOMEM;
 	}
+
+	/* Hw part */
 	amdm37x_dispc_t *dispc =
-	    ddf_fun_data_alloc(fun, sizeof(amdm37x_dispc_t));
+	    ddf_dev_data_alloc(dev, sizeof(amdm37x_dispc_t));
 	if (!dispc) {
 		ddf_log_error("Failed to allocate dispc structure\n");
@@ -69,5 +71,5 @@
 		return ENOMEM;
 	}
-	ddf_fun_set_ops(fun, &graph_fun_ops);
+
 	int ret = amdm37x_dispc_init(dispc);
 	if (ret != EOK) {
@@ -76,4 +78,21 @@
 		return ret;
 	}
+
+	/* Visualizer part */
+	visualizer_t *vis = ddf_fun_data_alloc(fun, sizeof(visualizer_t));
+	if (!vis) {
+		ddf_log_error("Failed to allocate visualizer structure\n");
+		ddf_fun_destroy(fun);
+		return ENOMEM;
+	}
+
+	graph_init_visualizer(vis);
+	vis->def_mode_idx = 0; // TODO: What is this? Why is this not handled
+	                       // via init?
+	vis->ops = amdm37x_dispc_vis_ops;
+	vis->dev_ctx = dispc;
+	vis->reg_svc_handle = ddf_fun_get_handle(fun);
+
+	ddf_fun_set_ops(fun, &graph_fun_ops);
 	ret = ddf_fun_bind(fun);
 	if (ret != EOK) {
@@ -83,4 +102,5 @@
 		return ret;
 	}
+	ddf_fun_add_to_category(fun, "visualizer");
 	return EOK;
 }
