Skip to content

Commit

Permalink
[PATCH] fbdev: Fix logo rotation if width != height
Browse files Browse the repository at this point in the history
Logo drawing crashes or produces a corrupt display if the logo width and
height are not equal.  The dimensions are transposed prior to the actual
rotation and the width is used instead of the height in the actual rotation
code.  These produce a corrupt image.

Signed-off-by: Antonino Daplas <adaplas@pol.net>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
  • Loading branch information
Antonino A. Daplas authored and Linus Torvalds committed Jun 26, 2006
1 parent 4efefd1 commit f837e6f
Showing 1 changed file with 10 additions and 10 deletions.
20 changes: 10 additions & 10 deletions drivers/video/fbmem.c
Original file line number Diff line number Diff line change
Expand Up @@ -334,11 +334,11 @@ static void fb_rotate_logo_ud(const u8 *in, u8 *out, u32 width, u32 height)

static void fb_rotate_logo_cw(const u8 *in, u8 *out, u32 width, u32 height)
{
int i, j, w = width - 1;
int i, j, h = height - 1;

for (i = 0; i < height; i++)
for (j = 0; j < width; j++)
out[height * j + w - i] = *in++;
out[height * j + h - i] = *in++;
}

static void fb_rotate_logo_ccw(const u8 *in, u8 *out, u32 width, u32 height)
Expand All @@ -356,24 +356,24 @@ static void fb_rotate_logo(struct fb_info *info, u8 *dst,
u32 tmp;

if (rotate == FB_ROTATE_UD) {
image->dx = info->var.xres - image->width;
image->dy = info->var.yres - image->height;
fb_rotate_logo_ud(image->data, dst, image->width,
image->height);
image->dx = info->var.xres - image->width;
image->dy = info->var.yres - image->height;
} else if (rotate == FB_ROTATE_CW) {
tmp = image->width;
image->width = image->height;
image->height = tmp;
image->dx = info->var.xres - image->height;
fb_rotate_logo_cw(image->data, dst, image->width,
image->height);
} else if (rotate == FB_ROTATE_CCW) {
tmp = image->width;
image->width = image->height;
image->height = tmp;
image->dy = info->var.yres - image->width;
image->dx = info->var.xres - image->width;
} else if (rotate == FB_ROTATE_CCW) {
fb_rotate_logo_ccw(image->data, dst, image->width,
image->height);
tmp = image->width;
image->width = image->height;
image->height = tmp;
image->dy = info->var.yres - image->height;
}

image->data = dst;
Expand Down

0 comments on commit f837e6f

Please sign in to comment.