mirror of
https://github.com/adulau/aha.git
synced 2024-12-30 12:46:17 +00:00
pm2fb: panning and hardware cursor fixes
This patch: - disallows setting of virtual height above 2048 as it does not work for accelerated copyarea and imageblit - fixes blinking of pm2v cursor by pushing cursor outside the display (x=2047) - fixes hardware cursor position on Permedia 2 chips with panning enabled - enables hardware cursor by default Signed-off-by: Krzysztof Helt <krzysztof.h1@wp.pl> Signed-off-by: Antonino Daplas <adaplas@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
2a36f9c497
commit
1ddc28d7e7
1 changed files with 19 additions and 16 deletions
|
@ -66,7 +66,7 @@
|
|||
/*
|
||||
* Driver data
|
||||
*/
|
||||
static int hwcursor;
|
||||
static int hwcursor = 1;
|
||||
static char *mode __devinitdata;
|
||||
|
||||
/*
|
||||
|
@ -587,6 +587,11 @@ static int pm2fb_check_var(struct fb_var_screeninfo *var, struct fb_info *info)
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* permedia cannot blit over 2048 */
|
||||
if (var->yres_virtual > 2047) {
|
||||
var->yres_virtual = 2047;
|
||||
}
|
||||
|
||||
if (var->xoffset) {
|
||||
DPRINTK("xoffset not supported\n");
|
||||
return -EINVAL;
|
||||
|
@ -1258,12 +1263,21 @@ static int pm2vfb_cursor(struct fb_info *info, struct fb_cursor *cursor)
|
|||
{
|
||||
struct pm2fb_par *par = info->par;
|
||||
u8 mode = PM2F_CURSORMODE_TYPE_X;
|
||||
int x = cursor->image.dx - info->var.xoffset;
|
||||
int y = cursor->image.dy - info->var.yoffset;
|
||||
|
||||
if (cursor->enable)
|
||||
mode |= PM2F_CURSORMODE_CURSOR_ENABLE;
|
||||
|
||||
pm2v_RDAC_WR(par, PM2VI_RD_CURSOR_MODE, mode);
|
||||
|
||||
if (!cursor->enable)
|
||||
x = 2047; /* push it outside display */
|
||||
pm2v_RDAC_WR(par, PM2VI_RD_CURSOR_X_LOW, x & 0xff);
|
||||
pm2v_RDAC_WR(par, PM2VI_RD_CURSOR_X_HIGH, (x >> 8) & 0xf);
|
||||
pm2v_RDAC_WR(par, PM2VI_RD_CURSOR_Y_LOW, y & 0xff);
|
||||
pm2v_RDAC_WR(par, PM2VI_RD_CURSOR_Y_HIGH, (y >> 8) & 0xf);
|
||||
|
||||
/*
|
||||
* If the cursor is not be changed this means either we want the
|
||||
* current cursor state (if enable is set) or we want to query what
|
||||
|
@ -1272,16 +1286,6 @@ static int pm2vfb_cursor(struct fb_info *info, struct fb_cursor *cursor)
|
|||
if (!cursor->set)
|
||||
return 0;
|
||||
|
||||
if (cursor->set & FB_CUR_SETPOS) {
|
||||
int x = cursor->image.dx - info->var.xoffset;
|
||||
int y = cursor->image.dy - info->var.yoffset;
|
||||
|
||||
pm2v_RDAC_WR(par, PM2VI_RD_CURSOR_X_LOW, x & 0xff);
|
||||
pm2v_RDAC_WR(par, PM2VI_RD_CURSOR_X_HIGH, (x >> 8) & 0xf);
|
||||
pm2v_RDAC_WR(par, PM2VI_RD_CURSOR_Y_LOW, y & 0xff);
|
||||
pm2v_RDAC_WR(par, PM2VI_RD_CURSOR_Y_HIGH, (y >> 8) & 0xf);
|
||||
}
|
||||
|
||||
if (cursor->set & FB_CUR_SETHOT) {
|
||||
pm2v_RDAC_WR(par, PM2VI_RD_CURSOR_X_HOT,
|
||||
cursor->hot.x & 0x3f);
|
||||
|
@ -1373,7 +1377,7 @@ static int pm2fb_cursor(struct fb_info *info, struct fb_cursor *cursor)
|
|||
if (par->type == PM2_TYPE_PERMEDIA2V)
|
||||
return pm2vfb_cursor(info, cursor);
|
||||
|
||||
mode = 0;
|
||||
mode = 0x40;
|
||||
if (cursor->enable)
|
||||
mode = 0x43;
|
||||
|
||||
|
@ -1388,10 +1392,9 @@ static int pm2fb_cursor(struct fb_info *info, struct fb_cursor *cursor)
|
|||
return 0;
|
||||
|
||||
if (cursor->set & FB_CUR_SETPOS) {
|
||||
int x, y;
|
||||
int x = cursor->image.dx - info->var.xoffset + 63;
|
||||
int y = cursor->image.dy - info->var.yoffset + 63;
|
||||
|
||||
x = cursor->image.dx + 63;
|
||||
y = cursor->image.dy + 63;
|
||||
WAIT_FIFO(par, 4);
|
||||
pm2_WR(par, PM2R_RD_CURSOR_X_LSB, x & 0xff);
|
||||
pm2_WR(par, PM2R_RD_CURSOR_X_MSB, (x >> 8) & 0x7);
|
||||
|
@ -1838,7 +1841,7 @@ module_param(noaccel, bool, 0);
|
|||
MODULE_PARM_DESC(noaccel, "Disable acceleration");
|
||||
module_param(hwcursor, int, 0644);
|
||||
MODULE_PARM_DESC(hwcursor, "Enable hardware cursor "
|
||||
"(1=enable, 0=disable, default=0)");
|
||||
"(1=enable, 0=disable, default=1)");
|
||||
#ifdef CONFIG_MTRR
|
||||
module_param(nomtrr, bool, 0);
|
||||
MODULE_PARM_DESC(nomtrr, "Disable MTRR support (0 or 1=disabled) (default=0)");
|
||||
|
|
Loading…
Reference in a new issue