Commit 02603930 authored by Geert Uytterhoeven's avatar Geert Uytterhoeven

fbdev: atafb - Fix line length handling

  - Make sure par->next_line is always set (this was done for Falcon only),
    as all the text console drawing operations need a valid par->next_line,
  - Make sure fix->line_length is always set, as some userspace applications
    need it because they don't have fallback code for the case where it's zero.
Signed-off-by: default avatarGeert Uytterhoeven <geert@linux-m68k.org>
parent ae04d140
...@@ -614,7 +614,7 @@ static int tt_encode_fix(struct fb_fix_screeninfo *fix, struct atafb_par *par) ...@@ -614,7 +614,7 @@ static int tt_encode_fix(struct fb_fix_screeninfo *fix, struct atafb_par *par)
fix->xpanstep = 0; fix->xpanstep = 0;
fix->ypanstep = 1; fix->ypanstep = 1;
fix->ywrapstep = 0; fix->ywrapstep = 0;
fix->line_length = 0; fix->line_length = par->next_line;
fix->accel = FB_ACCEL_ATARIBLITT; fix->accel = FB_ACCEL_ATARIBLITT;
return 0; return 0;
} }
...@@ -691,6 +691,7 @@ static int tt_decode_var(struct fb_var_screeninfo *var, struct atafb_par *par) ...@@ -691,6 +691,7 @@ static int tt_decode_var(struct fb_var_screeninfo *var, struct atafb_par *par)
return -EINVAL; return -EINVAL;
par->yres_virtual = yres_virtual; par->yres_virtual = yres_virtual;
par->screen_base = screen_base + var->yoffset * linelen; par->screen_base = screen_base + var->yoffset * linelen;
par->next_line = linelen;
return 0; return 0;
} }
...@@ -918,7 +919,7 @@ static int falcon_encode_fix(struct fb_fix_screeninfo *fix, ...@@ -918,7 +919,7 @@ static int falcon_encode_fix(struct fb_fix_screeninfo *fix,
fix->visual = FB_VISUAL_TRUECOLOR; fix->visual = FB_VISUAL_TRUECOLOR;
fix->xpanstep = 2; fix->xpanstep = 2;
} }
fix->line_length = 0; fix->line_length = par->next_line;
fix->accel = FB_ACCEL_ATARIBLITT; fix->accel = FB_ACCEL_ATARIBLITT;
return 0; return 0;
} }
...@@ -1852,7 +1853,7 @@ static int stste_encode_fix(struct fb_fix_screeninfo *fix, ...@@ -1852,7 +1853,7 @@ static int stste_encode_fix(struct fb_fix_screeninfo *fix,
fix->ypanstep = 0; fix->ypanstep = 0;
} }
fix->ywrapstep = 0; fix->ywrapstep = 0;
fix->line_length = 0; fix->line_length = par->next_line;
fix->accel = FB_ACCEL_ATARIBLITT; fix->accel = FB_ACCEL_ATARIBLITT;
return 0; return 0;
} }
...@@ -1910,6 +1911,7 @@ static int stste_decode_var(struct fb_var_screeninfo *var, ...@@ -1910,6 +1911,7 @@ static int stste_decode_var(struct fb_var_screeninfo *var,
return -EINVAL; return -EINVAL;
par->yres_virtual = yres_virtual; par->yres_virtual = yres_virtual;
par->screen_base = screen_base + var->yoffset * linelen; par->screen_base = screen_base + var->yoffset * linelen;
par->next_line = linelen;
return 0; return 0;
} }
...@@ -2169,7 +2171,7 @@ static int ext_encode_fix(struct fb_fix_screeninfo *fix, struct atafb_par *par) ...@@ -2169,7 +2171,7 @@ static int ext_encode_fix(struct fb_fix_screeninfo *fix, struct atafb_par *par)
fix->xpanstep = 0; fix->xpanstep = 0;
fix->ypanstep = 0; fix->ypanstep = 0;
fix->ywrapstep = 0; fix->ywrapstep = 0;
fix->line_length = 0; fix->line_length = par->next_line;
return 0; return 0;
} }
...@@ -2184,6 +2186,8 @@ static int ext_decode_var(struct fb_var_screeninfo *var, struct atafb_par *par) ...@@ -2184,6 +2186,8 @@ static int ext_decode_var(struct fb_var_screeninfo *var, struct atafb_par *par)
var->xoffset > 0 || var->xoffset > 0 ||
var->yoffset > 0) var->yoffset > 0)
return -EINVAL; return -EINVAL;
par->next_line = external_xres_virtual * external_depth / 8;
return 0; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment