freescale DIU: add virtual resolution and panning support
Application can now have the virtual resoltuion and use FBIOPAN_DISPLAY ioctl to pan. Signed-off-by: York Sun <yorksun@freescale.com> Cc: Kumar Gala <galak@gate.crashing.org> Cc: "Antonino A. Daplas" <adaplas@pol.net> Cc: Krzysztof Helt <krzysztof.h1@poczta.fm> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
8c5a1cf0ad
commit
ae5591e3f4
@ -777,6 +777,22 @@ static void unmap_video_memory(struct fb_info *info)
|
||||
info->fix.smem_len = 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Using the fb_var_screeninfo in fb_info we set the aoi of this
|
||||
* particular framebuffer. It is a light version of fsl_diu_set_par.
|
||||
*/
|
||||
static int fsl_diu_set_aoi(struct fb_info *info)
|
||||
{
|
||||
struct fb_var_screeninfo *var = &info->var;
|
||||
struct mfb_info *mfbi = info->par;
|
||||
struct diu_ad *ad = mfbi->ad;
|
||||
|
||||
/* AOI should not be greater than display size */
|
||||
ad->offset_xyi = cpu_to_le32((var->yoffset << 16) | var->xoffset);
|
||||
ad->offset_xyd = cpu_to_le32((mfbi->y_aoi_d << 16) | mfbi->x_aoi_d);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Using the fb_var_screeninfo in fb_info we set the resolution of this
|
||||
* particular framebuffer. This function alters the fb_fix_screeninfo stored
|
||||
@ -817,11 +833,11 @@ static int fsl_diu_set_par(struct fb_info *info)
|
||||
diu_ops.get_pixel_format(var->bits_per_pixel,
|
||||
machine_data->monitor_port);
|
||||
ad->addr = cpu_to_le32(info->fix.smem_start);
|
||||
ad->src_size_g_alpha = cpu_to_le32((var->yres << 12) |
|
||||
var->xres) | mfbi->g_alpha;
|
||||
/* fix me. AOI should not be greater than display size */
|
||||
ad->src_size_g_alpha = cpu_to_le32((var->yres_virtual << 12) |
|
||||
var->xres_virtual) | mfbi->g_alpha;
|
||||
/* AOI should not be greater than display size */
|
||||
ad->aoi_size = cpu_to_le32((var->yres << 16) | var->xres);
|
||||
ad->offset_xyi = 0;
|
||||
ad->offset_xyi = cpu_to_le32((var->yoffset << 16) | var->xoffset);
|
||||
ad->offset_xyd = cpu_to_le32((mfbi->y_aoi_d << 16) | mfbi->x_aoi_d);
|
||||
|
||||
/* Disable chroma keying function */
|
||||
@ -921,6 +937,8 @@ static int fsl_diu_pan_display(struct fb_var_screeninfo *var,
|
||||
else
|
||||
info->var.vmode &= ~FB_VMODE_YWRAP;
|
||||
|
||||
fsl_diu_set_aoi(info);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -989,7 +1007,7 @@ static int fsl_diu_ioctl(struct fb_info *info, unsigned int cmd,
|
||||
pr_debug("set AOI display offset of index %d to (%d,%d)\n",
|
||||
mfbi->index, aoi_d.x_aoi_d, aoi_d.y_aoi_d);
|
||||
fsl_diu_check_var(&info->var, info);
|
||||
fsl_diu_set_par(info);
|
||||
fsl_diu_set_aoi(info);
|
||||
break;
|
||||
case MFB_GET_AOID:
|
||||
aoi_d.x_aoi_d = mfbi->x_aoi_d;
|
||||
|
Loading…
Reference in New Issue
Block a user