diff -Nur a/drivers/video/sunxi/disp2/disp/dev_fb.c b/drivers/video/sunxi/disp2/disp/dev_fb.c --- a/drivers/video/sunxi/disp2/disp/dev_fb.c 2016-01-05 19:45:42.000000000 +0100 +++ b/drivers/video/sunxi/disp2/disp/dev_fb.c 2016-02-16 18:24:35.505409579 +0100 @@ -41,9 +41,6 @@ extern disp_drv_info g_disp_drv; -#define FBHANDTOID(handle) ((handle) - 100) -#define FBIDTOHAND(ID) ((ID) + 100) - static struct __fb_addr_para g_fb_addr; s32 sunxi_get_fb_addr_para(struct __fb_addr_para *fb_addr_para) @@ -535,8 +532,6 @@ for(sel = 0; sel < num_screens; sel++) { if(sel==g_fbi.fb_mode[info->node]) { - u32 buffer_num = 1; - u32 y_offset = 0; s32 chan = g_fbi.layer_hdl[info->node][0]; s32 layer_id = g_fbi.layer_hdl[info->node][1]; disp_layer_config config; @@ -550,10 +545,10 @@ __wrn("fb %d, get_layer_config(%d,%d,%d) fail\n", info->node, sel, chan, layer_id); return -1; } - config.info.fb.crop.x = ((long long)var->xoffset) << 32; - config.info.fb.crop.y = ((unsigned long long)(var->yoffset + y_offset)) << 32;; - config.info.fb.crop.width = ((long long)var->xres) << 32; - config.info.fb.crop.height = ((long long)(var->yres / buffer_num)) << 32; + config.info.fb.crop.x = ((long long)(var->xoffset)) << 32; + config.info.fb.crop.y = ((long long)(var->yoffset)) << 32; + config.info.fb.crop.width = ((long long)(var->xres)) << 32; + config.info.fb.crop.height = ((long long)(var->yres)) << 32; if(0 != mgr->set_layer_config(mgr, &config, 1)) { __wrn("fb %d, set_layer_config(%d,%d,%d) fail\n", info->node, sel, chan, layer_id); return -1; @@ -615,25 +610,25 @@ if(sel==g_fbi.fb_mode[info->node]) { struct fb_var_screeninfo *var = &info->var; struct fb_fix_screeninfo * fix = &info->fix; - u32 buffer_num = 1; - u32 y_offset = 0; s32 chan = g_fbi.layer_hdl[info->node][0]; s32 layer_id = g_fbi.layer_hdl[info->node][1]; disp_layer_config config; struct disp_manager *mgr = g_disp_drv.mgr[sel]; - if(mgr && mgr->get_layer_config && mgr->set_layer_config) { + if(mgr && mgr->get_layer_config) { config.channel = chan; config.layer_id = layer_id; mgr->get_layer_config(mgr, &config, 1); } var_to_disp_fb(&(config.info.fb), var, fix); - config.info.fb.crop.x = var->xoffset; - config.info.fb.crop.y = var->yoffset + y_offset; - config.info.fb.crop.width = var->xres; - config.info.fb.crop.height = var->yres / buffer_num; - if(mgr && mgr->get_layer_config && mgr->set_layer_config) + config.info.fb.crop.x = ((long long)(var->xoffset)) << 32; + config.info.fb.crop.y = ((long long)(var->yoffset)) << 32; + config.info.fb.crop.width = ((long long)(var->xres)) << 32; + config.info.fb.crop.height = ((long long)(var->yres)) << 32; + config.info.screen_win.width = var->xres; + config.info.screen_win.height = var->yres; + if(mgr && mgr->set_layer_config) mgr->set_layer_config(mgr, &config, 1); } } @@ -1136,7 +1131,7 @@ for(sel = 0; sel < num_screens; sel++) { if(sel == fb_para->fb_mode) { - u32 y_offset = 0, src_width = xres, src_height = yres; + u32 src_width = xres, src_height = yres; disp_video_timings tt; struct disp_manager *mgr = NULL; mgr = g_disp_drv.mgr[sel]; @@ -1170,13 +1165,13 @@ Fb_map_kernel_logo(sel, info); } config.info.screen_win.width = (0 == fb_para->output_width)? src_width:fb_para->output_width; - config.info.screen_win.height = (0 == fb_para->output_height)? src_width:fb_para->output_height; + config.info.screen_win.height = (0 == fb_para->output_height)? src_height:fb_para->output_height; config.info.mode = LAYER_MODE_BUFFER; config.info.alpha_mode = 1; config.info.alpha_value = 0xff; - config.info.fb.crop.x = ((long long)0) << 32; - config.info.fb.crop.y = ((long long)y_offset) << 32; + config.info.fb.crop.x = 0LL; + config.info.fb.crop.y = 0LL; config.info.fb.crop.width = ((long long)src_width) << 32; config.info.fb.crop.height = ((long long)src_height) << 32; config.info.screen_win.x = 0; @@ -1401,7 +1396,7 @@ for(fb_id=0; fb_id