diff --git a/arch/arm/mach-imx/include/mach/imx-ipu-fb.h b/arch/arm/mach-imx/include/mach/imx-ipu-fb.h index ee1a9b583..73028d26c 100644 --- a/arch/arm/mach-imx/include/mach/imx-ipu-fb.h +++ b/arch/arm/mach-imx/include/mach/imx-ipu-fb.h @@ -44,7 +44,9 @@ struct imx_ipu_fb_platform_data { u_int num_modes; enum disp_data_mapping disp_data_fmt; void __iomem *framebuffer; + unsigned long framebuffer_size; void __iomem *framebuffer_ovl; + unsigned long framebuffer_ovl_size; /** hook to enable backlight and stuff */ void (*enable)(int enable); /* diff --git a/drivers/video/imx-ipu-fb.c b/drivers/video/imx-ipu-fb.c index 4b9aae75f..18a70521d 100644 --- a/drivers/video/imx-ipu-fb.c +++ b/drivers/video/imx-ipu-fb.c @@ -964,6 +964,8 @@ static int sdc_fb_register_overlay(struct ipu_fb_info *fbi, void *fb) if (!overlay->screen_base) return -ENOMEM; + overlay->screen_size = pdata->framebuffer_ovl_size; + sdc_enable_channel(fbi, overlay->screen_base, IDMAC_SDC_1); ret = register_framebuffer(&fbi->overlay); @@ -1011,14 +1013,17 @@ static int imxfb_probe(struct device_d *dev) dev_info(dev, "i.MX Framebuffer driver\n"); + fbi->info.screen_size = pdata->framebuffer_size; + if (!fbi->info.screen_size) + fbi->info.screen_size = info->xres * info->yres * + (info->bits_per_pixel >> 3); /* * Use a given frambuffer or reserve some * memory for screen usage */ fbi->info.screen_base = pdata->framebuffer; if (fbi->info.screen_base == NULL) { - fbi->info.screen_base = malloc(info->xres * info->yres * - (info->bits_per_pixel >> 3)); + fbi->info.screen_base = malloc(fbi->info.screen_size); if (!fbi->info.screen_base) return -ENOMEM; }