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 96228d0961b452098db4e4b49b8651d7c99981a6)
@@ -34,12 +34,55 @@
  */
 
+#include <assert.h>
 #include <errno.h>
 
 #include "amdm37x_dispc.h"
 
-const visualizer_ops_t amdm37x_dispc_vis_ops = { 0 };
+static int handle_damage(visualizer_t *vs,
+    sysarg_t x0, sysarg_t y0, sysarg_t width, sysarg_t height,
+    sysarg_t x_offset, sysarg_t y_offset)
+{
+	return EOK;
+}
 
-int amdm37x_dispc_init(amdm37x_dispc_t *instance)
+static const visualizer_ops_t amdm37x_dispc_vis_ops = {
+	.handle_damage = handle_damage,
+	// TODO DO we need dummy implementations of stuff like claim, yield, ...
+};
+
+static void mode_init(vslmode_list_element_t *mode,
+    unsigned width, unsigned height, visual_t visual)
 {
+	mode->mode.index = 0;
+	mode->mode.version = 0;
+	mode->mode.refresh_rate = 0;
+	mode->mode.screen_aspect.width = width;
+	mode->mode.screen_aspect.height = height;
+	mode->mode.screen_width = width;
+	mode->mode.screen_height = height;
+	mode->mode.cell_aspect.width = 1;
+	mode->mode.cell_aspect.height = 1;
+	mode->mode.cell_visual.pixel_visual = visual;
+
+	link_initialize(&mode->link);
+
+}
+
+int amdm37x_dispc_init(amdm37x_dispc_t *instance, visualizer_t *vis)
+{
+	assert(instance);
+	assert(vis);
+
+	unsigned width = CONFIG_BFB_WIDTH;
+	unsigned height = CONFIG_BFB_HEIGHT;
+	unsigned bpp = CONFIG_BFB_BPP;
+
+	mode_init(&instance->modes[0], width, height, bpp); //TODO convert bpp to visual
+
+	/* Handle vis stuff */
+	vis->dev_ctx = instance;
+	vis->def_mode_idx = 0;
+	list_append(&instance->modes[0].link, &vis->modes);
+
 	return EOK;
 };
Index: uspace/drv/fb/amdm37x_dispc/amdm37x_dispc.h
===================================================================
--- uspace/drv/fb/amdm37x_dispc/amdm37x_dispc.h	(revision 9cc4b2b474c0fb0b4f6e55bb4f264332f77f3fdd)
+++ uspace/drv/fb/amdm37x_dispc/amdm37x_dispc.h	(revision 96228d0961b452098db4e4b49b8651d7c99981a6)
@@ -38,4 +38,6 @@
 
 #include <graph.h>
+#include <abi/fb/visuals.h>
+#include <pixconv.h>
 
 #include "amdm37x_dispc_regs.h"
@@ -43,10 +45,23 @@
 typedef struct {
 	amdm37x_dispc_regs_t *regs;
+
+	unsigned fb_width;
+	unsigned fb_height;
+	unsigned offset;
+	unsigned scanline;
+	visual_t visual;
+
+	pixel2visual_t pixel2visual;
+	visual2pixel_t visual2pixel;
+	visual_mask_t visual_mask;
+	unsigned pixel_bytes;
+
+	size_t size;
 	void *fb_data;
+
+	vslmode_list_element_t modes[1];
 } amdm37x_dispc_t;
 
-extern const visualizer_ops_t amdm37x_dispc_vis_ops;
-
-int amdm37x_dispc_init(amdm37x_dispc_t *instance);
+int amdm37x_dispc_init(amdm37x_dispc_t *instance, visualizer_t *vis);
 int amdm37x_dispc_fini(amdm37x_dispc_t *instance);
 
Index: uspace/drv/fb/amdm37x_dispc/main.c
===================================================================
--- uspace/drv/fb/amdm37x_dispc/main.c	(revision 9cc4b2b474c0fb0b4f6e55bb4f264332f77f3fdd)
+++ uspace/drv/fb/amdm37x_dispc/main.c	(revision 96228d0961b452098db4e4b49b8651d7c99981a6)
@@ -57,4 +57,5 @@
 static int amdm37x_dispc_dev_add(ddf_dev_t *dev)
 {
+	/* Visualizer part */
 	ddf_fun_t *fun = ddf_fun_create(dev, fun_exposed, "dispc");
 	if (!fun) {
@@ -63,4 +64,15 @@
 	}
 
+	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->reg_svc_handle = ddf_fun_get_handle(fun);
+
+	ddf_fun_set_ops(fun, &graph_fun_ops);
 	/* Hw part */
 	amdm37x_dispc_t *dispc =
@@ -72,5 +84,5 @@
 	}
 
-	int ret = amdm37x_dispc_init(dispc);
+	int ret = amdm37x_dispc_init(dispc, vis);
 	if (ret != EOK) {
 		ddf_log_error("Failed to init dispc: %s\n", str_error(ret));
@@ -79,20 +91,5 @@
 	}
 
-	/* 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);
+	/* Report to devman */
 	ret = ddf_fun_bind(fun);
 	if (ret != EOK) {
