Index: uspace/drv/fb/amdm37x_dispc/amdm37x_dispc.c
===================================================================
--- uspace/drv/fb/amdm37x_dispc/amdm37x_dispc.c	(revision f03f10744d42849b83f002d092b667ce95d167aa)
+++ uspace/drv/fb/amdm37x_dispc/amdm37x_dispc.c	(revision 943a1dc6ab874d3e6f042f1e852128e77c75e872)
@@ -55,31 +55,26 @@
 
 
-static unsigned visual2bpp(visual_t visual)
-{
-	switch(visual) {
-	case VISUAL_INDIRECT_8:
-		return 1;
-	case VISUAL_RGB_5_5_5_LE:
-	case VISUAL_RGB_5_5_5_BE:
-	case VISUAL_RGB_5_6_5_LE:
-	case VISUAL_RGB_5_6_5_BE:
-		return 2;
-	case VISUAL_BGR_8_8_8:
-	case VISUAL_RGB_8_8_8:
-		return 3;
-	case VISUAL_BGR_0_8_8_8:
-	case VISUAL_BGR_8_8_8_0:
-	case VISUAL_ABGR_8_8_8_8:
-	case VISUAL_BGRA_8_8_8_8:
-	case VISUAL_RGB_0_8_8_8:
-	case VISUAL_RGB_8_8_8_0:
-	case VISUAL_ARGB_8_8_8_8:
-	case VISUAL_RGBA_8_8_8_8:
-		return 4;
-	case VISUAL_UNKNOWN:
-		return 0;
-	}
-	return 0;
-}
+static const struct {
+	unsigned bpp;
+	pixel2visual_t func;
+} pixel2visual_table[] = {
+	[VISUAL_INDIRECT_8] = { .bpp = 1, .func = pixel2bgr_323 },
+	[VISUAL_RGB_5_5_5_LE] = { .bpp = 2, .func = pixel2rgb_555_le },
+	[VISUAL_RGB_5_5_5_BE] = { .bpp = 2, .func = pixel2rgb_555_be },
+	[VISUAL_RGB_5_6_5_LE] = { .bpp = 2, .func = pixel2rgb_565_le },
+	[VISUAL_RGB_5_6_5_BE] = { .bpp = 2, .func = pixel2rgb_565_be },
+	[VISUAL_BGR_8_8_8] = { .bpp = 3, .func = pixel2bgr_888 },
+	[VISUAL_RGB_8_8_8] = { .bpp = 3, .func = pixel2rgb_888 },
+	[VISUAL_BGR_0_8_8_8] = { .bpp = 4, .func = pixel2rgb_0888 },
+	[VISUAL_BGR_8_8_8_0] = { .bpp = 4, .func = pixel2bgr_8880 },
+	[VISUAL_ABGR_8_8_8_8] = { .bpp = 4, .func = pixel2abgr_8888 },
+	[VISUAL_BGRA_8_8_8_8] = { .bpp = 4, .func = pixel2bgra_8888 },
+	[VISUAL_RGB_0_8_8_8] = { .bpp = 4, .func = pixel2rgb_0888 },
+	[VISUAL_RGB_8_8_8_0] = { .bpp = 4, .func = pixel2rgb_8880 },
+	[VISUAL_ARGB_8_8_8_8] = { .bpp = 4, .func = pixel2argb_8888 },
+	[VISUAL_RGBA_8_8_8_8] = { .bpp = 4, .func = pixel2rgba_8888 },
+};
+
+
 
 static void mode_init(vslmode_list_element_t *mode,
@@ -251,5 +246,7 @@
 	amdm37x_dispc_t *dispc = vis->dev_ctx;
 	const visual_t visual = mode.cell_visual.pixel_visual;
-	const unsigned bpp = visual2bpp(visual);
+	assert(visual < sizeof(pixel2visual_table) / sizeof(pixel2visual_table[0]));
+	const unsigned bpp = pixel2visual_table[visual].bpp;
+	pixel2visual_t p2v = pixel2visual_table[visual].func;
 	const unsigned x = mode.screen_width;
 	const unsigned y = mode.screen_height;
@@ -269,4 +266,5 @@
 	dispc->active_fb.pitch = 0;
 	dispc->active_fb.bpp = bpp;
+	dispc->active_fb.pixel2visual = p2v;
 	assert(mode.index < 1);
 
@@ -293,5 +291,5 @@
 			pixel_t *pixel = pixelmap_pixel_at(map, x0, y);
 			for (sysarg_t x = x0; x < width + x0; ++x) {
-				dispc->pixel2visual(
+				dispc->active_fb.pixel2visual(
 				    dispc->fb_data + FB_POS(x, y), *pixel++);
 			}
@@ -300,5 +298,5 @@
 		for (sysarg_t y = y0; y < height + y0; ++y) {
 			for (sysarg_t x = x0; x < width + x0; ++x) {
-				dispc->pixel2visual(
+				dispc->active_fb.pixel2visual(
 				    dispc->fb_data + FB_POS(x, y),
 				    *pixelmap_pixel_at(map,
Index: uspace/drv/fb/amdm37x_dispc/amdm37x_dispc.h
===================================================================
--- uspace/drv/fb/amdm37x_dispc/amdm37x_dispc.h	(revision f03f10744d42849b83f002d092b667ce95d167aa)
+++ uspace/drv/fb/amdm37x_dispc/amdm37x_dispc.h	(revision 943a1dc6ab874d3e6f042f1e852128e77c75e872)
@@ -46,12 +46,6 @@
 	amdm37x_dispc_regs_t *regs;
 
-	unsigned offset;
-	visual_t visual;
-
-	pixel2visual_t pixel2visual;
-	visual2pixel_t visual2pixel;
-	visual_mask_t visual_mask;
-
 	struct {
+		pixel2visual_t pixel2visual;
 		unsigned width;
 		unsigned height;
Index: uspace/drv/fb/amdm37x_dispc/amdm37x_dispc.ma
===================================================================
--- uspace/drv/fb/amdm37x_dispc/amdm37x_dispc.ma	(revision 943a1dc6ab874d3e6f042f1e852128e77c75e872)
+++ uspace/drv/fb/amdm37x_dispc/amdm37x_dispc.ma	(revision 943a1dc6ab874d3e6f042f1e852128e77c75e872)
@@ -0,0 +1,1 @@
+10 virtual&kfb
Index: pace/drv/fb/amdm37x_dispc/kfb.ma
===================================================================
--- uspace/drv/fb/amdm37x_dispc/kfb.ma	(revision f03f10744d42849b83f002d092b667ce95d167aa)
+++ 	(revision )
@@ -1,1 +1,0 @@
-10 virtual&kfb
