OMAP: DSS2: OMAPFB: Refactor overlay address calculations
authorVille Syrjälä <ville.syrjala@nokia.com>
Wed, 17 Mar 2010 17:59:26 +0000 (19:59 +0200)
committerTomi Valkeinen <tomi.valkeinen@nokia.com>
Tue, 3 Aug 2010 12:18:45 +0000 (15:18 +0300)
Split the overlay address calculations into their own function.

Signed-off-by: Ville Syrjälä <ville.syrjala@nokia.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@nokia.com>
drivers/video/omap2/omapfb/omapfb-main.c

index 4b4506d..2ac20d2 100644 (file)
@@ -822,6 +822,40 @@ static unsigned calc_rotation_offset_vrfb(const struct fb_var_screeninfo *var,
        return offset;
 }
 
+static void omapfb_calc_addr(const struct omapfb_info *ofbi,
+                            const struct fb_var_screeninfo *var,
+                            const struct fb_fix_screeninfo *fix,
+                            int rotation, u32 *paddr, void __iomem **vaddr)
+{
+       u32 data_start_p;
+       void __iomem *data_start_v;
+       int offset;
+
+       if (ofbi->rotation_type == OMAP_DSS_ROT_VRFB) {
+               data_start_p = omapfb_get_region_rot_paddr(ofbi, rotation);
+               data_start_v = NULL;
+       } else {
+               data_start_p = omapfb_get_region_paddr(ofbi);
+               data_start_v = omapfb_get_region_vaddr(ofbi);
+       }
+
+       if (ofbi->rotation_type == OMAP_DSS_ROT_VRFB)
+               offset = calc_rotation_offset_vrfb(var, fix, rotation);
+       else
+               offset = calc_rotation_offset_dma(var, fix, rotation);
+
+       data_start_p += offset;
+       data_start_v += offset;
+
+       if (offset)
+               DBG("offset %d, %d = %d\n",
+                   var->xoffset, var->yoffset, offset);
+
+       DBG("paddr %x, vaddr %p\n", data_start_p, data_start_v);
+
+       *paddr = data_start_p;
+       *vaddr = data_start_v;
+}
 
 /* setup overlay according to the fb */
 static int omapfb_setup_overlay(struct fb_info *fbi, struct omap_overlay *ovl,
@@ -832,9 +866,8 @@ static int omapfb_setup_overlay(struct fb_info *fbi, struct omap_overlay *ovl,
        struct fb_var_screeninfo *var = &fbi->var;
        struct fb_fix_screeninfo *fix = &fbi->fix;
        enum omap_color_mode mode = 0;
-       int offset;
-       u32 data_start_p;
-       void __iomem *data_start_v;
+       u32 data_start_p = 0;
+       void __iomem *data_start_v = NULL;
        struct omap_overlay_info info;
        int xres, yres;
        int screen_width;
@@ -861,28 +894,8 @@ static int omapfb_setup_overlay(struct fb_info *fbi, struct omap_overlay *ovl,
                yres = var->yres;
        }
 
-
-       if (ofbi->rotation_type == OMAP_DSS_ROT_VRFB) {
-               data_start_p = omapfb_get_region_rot_paddr(ofbi, rotation);
-               data_start_v = NULL;
-       } else {
-               data_start_p = omapfb_get_region_paddr(ofbi);
-               data_start_v = omapfb_get_region_vaddr(ofbi);
-       }
-
-       if (ofbi->rotation_type == OMAP_DSS_ROT_VRFB)
-               offset = calc_rotation_offset_vrfb(var, fix, rotation);
-       else
-               offset = calc_rotation_offset_dma(var, fix, rotation);
-
-       data_start_p += offset;
-       data_start_v += offset;
-
-       if (offset)
-               DBG("offset %d, %d = %d\n",
-                               var->xoffset, var->yoffset, offset);
-
-       DBG("paddr %x, vaddr %p\n", data_start_p, data_start_v);
+       omapfb_calc_addr(ofbi, var, fix, rotation,
+                        &data_start_p, &data_start_v);
 
        r = fb_mode_to_dss_mode(var, &mode);
        if (r) {