[qsd8k] basic support for fbcon.
diff --git a/platform/qsd8k/lcdc.c b/platform/qsd8k/lcdc.c
index c603d0e..7dad422 100644
--- a/platform/qsd8k/lcdc.c
+++ b/platform/qsd8k/lcdc.c
@@ -30,15 +30,10 @@
 #include <stdlib.h>
 #include <reg.h>
 #include <platform/iomap.h>
+#include <dev/fbcon.h>
 
 #define MSM_MDP_BASE1 0xAA200000
 
-unsigned fb_width  = 0;
-unsigned fb_height = 0;
-
-static unsigned short *FB;
-
-
 #define LCDC_PIXCLK_IN_PS 26
 #define LCDC_FB_PHYS      0x16600000
 #define LCDC_FB_BPP       16
@@ -88,36 +83,44 @@
 #define DMA_OUT_SEL_LCDC                    BIT(20)
 #define DMA_IBUF_FORMAT_RGB565              BIT(25)
 
+static struct fbcon_config fb_cfg = {
+	.height		= LCDC_FB_HEIGHT,
+	.width		= LCDC_FB_WIDTH,
+	.stride		= LCDC_FB_WIDTH,
+	.format		= FB_FORMAT_RGB565,
+	.bpp		= LCDC_FB_BPP,
+	.update_start	= NULL,
+	.update_done	= NULL,
+};
+
 void lcdc_clock_init(unsigned rate);
 
-void lcdc_init(void)
+struct fbcon_config *lcdc_init(void)
 {
 	unsigned n;
 
 	dprintf(INFO, "lcdc_init()\n");
 
-	fb_width  = LCDC_FB_WIDTH;
-	fb_height = LCDC_FB_HEIGHT;
-	dprintf(INFO, "panel is %d x %d\n", fb_width, fb_height);
+	dprintf(INFO, "panel is %d x %d\n", fb_cfg.width, fb_cfg.height);
 
-	FB = LCDC_FB_PHYS; //alloc(2 * fb_width * fb_height);
-
-	FB = memalign(4096, 2 * fb_width * fb_height);
-	dprintf(INFO, "FB %p\n", FB);
+	fb_cfg.base =
+		memalign(4096, fb_cfg.width * fb_cfg.height * (fb_cfg.bpp / 8));
+	dprintf(INFO, "FB %p\n", fb_cfg.base);
 
 	lcdc_clock_init(1000000000 / LCDC_PIXCLK_IN_PS);
 
-	writel(FB, MSM_MDP_BASE1 + 0x90008);
-	writel((LCDC_FB_HEIGHT << 16) | LCDC_FB_WIDTH, MSM_MDP_BASE1 + 0x90004);
-	writel(LCDC_FB_WIDTH * LCDC_FB_BPP / 8, MSM_MDP_BASE1 + 0x9000c);
+	writel(fb_cfg.base, MSM_MDP_BASE1 + 0x90008);
+
+	writel((fb_cfg.height << 16) | fb_cfg.width, MSM_MDP_BASE1 + 0x90004);
+	writel(fb_cfg.width * fb_cfg.bpp / 8, MSM_MDP_BASE1 + 0x9000c);
 	writel(0, MSM_MDP_BASE1 + 0x90010);
 
 	writel(DMA_PACK_ALIGN_LSB|DMA_PACK_PATTERN_RGB|DMA_DITHER_EN|DMA_OUT_SEL_LCDC|
 	       DMA_IBUF_FORMAT_RGB565|DMA_DSTC0G_8BITS|DMA_DSTC1B_8BITS|DMA_DSTC2R_8BITS,
 	       MSM_MDP_BASE1 + 0x90000);
 
-	int hsync_period  = LCDC_HSYNC_PULSE_WIDTH_DCLK + LCDC_HSYNC_BACK_PORCH_DCLK + LCDC_FB_WIDTH + LCDC_HSYNC_FRONT_PORCH_DCLK;
-	int vsync_period  = (LCDC_VSYNC_PULSE_WIDTH_LINES + LCDC_VSYNC_BACK_PORCH_LINES + LCDC_FB_HEIGHT + LCDC_VSYNC_FRONT_PORCH_LINES) * hsync_period;
+	int hsync_period  = LCDC_HSYNC_PULSE_WIDTH_DCLK + LCDC_HSYNC_BACK_PORCH_DCLK + fb_cfg.width + LCDC_HSYNC_FRONT_PORCH_DCLK;
+	int vsync_period  = (LCDC_VSYNC_PULSE_WIDTH_LINES + LCDC_VSYNC_BACK_PORCH_LINES + fb_cfg.height + LCDC_VSYNC_FRONT_PORCH_LINES) * hsync_period;
 	int hsync_ctrl    = (hsync_period << 16) | LCDC_HSYNC_PULSE_WIDTH_DCLK;
 	int hsync_start_x = LCDC_HSYNC_PULSE_WIDTH_DCLK + LCDC_HSYNC_BACK_PORCH_DCLK;
 	int hsync_end_x   = hsync_period - LCDC_HSYNC_FRONT_PORCH_DCLK - 1;
@@ -141,11 +144,5 @@
 
 	writel(1, MSM_MDP_BASE1 + 0xe0000);
 
-	for(n = 0; n < (fb_width * fb_height); n++) FB[n] = 0x01f0;
+	return &fb_cfg;
 }
-
-void *mddi_framebuffer(void)
-{
-	return FB;
-}
-