Skip to content

Commit

Permalink
OMAP: DSS2: OMAPFB: Refactor overlay address calculations
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Ville Syrjälä authored and Tomi Valkeinen committed Aug 3, 2010
1 parent 8cab90f commit 46d3524
Showing 1 changed file with 38 additions and 25 deletions.
63 changes: 38 additions & 25 deletions drivers/video/omap2/omapfb/omapfb-main.c
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -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;
Expand All @@ -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) {
Expand Down

0 comments on commit 46d3524

Please sign in to comment.