|
@@ -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;
|