From: "Antonino A. Daplas" <adaplas@hotpop.com>

fix hw cursor in doublescan modes 

Signed-off-by: Alexander Kern <alex.kern@gmx.de>
Signed-off-by: Antonino Daplas <adaplas@pol.net>
Signed-off-by: Andrew Morton <akpm@osdl.org>
---

 25-akpm/drivers/video/aty/mach64_cursor.c |   15 +++++++++------
 1 files changed, 9 insertions(+), 6 deletions(-)

diff -puN drivers/video/aty/mach64_cursor.c~fbdev-fix-cursor-in-doublescan-mode-in-atyfb drivers/video/aty/mach64_cursor.c
--- 25/drivers/video/aty/mach64_cursor.c~fbdev-fix-cursor-in-doublescan-mode-in-atyfb	2004-11-10 18:36:21.771088640 -0800
+++ 25-akpm/drivers/video/aty/mach64_cursor.c	2004-11-10 18:36:21.774088184 -0800
@@ -75,7 +75,7 @@ int atyfb_cursor(struct fb_info *info, s
 {
 	struct atyfb_par *par = (struct atyfb_par *) info->par;
 	u16 xoff, yoff;
-	int x, y;
+	int x, y, h;
 
 #ifdef __sparc__
 	if (par->mmaped)
@@ -106,17 +106,20 @@ int atyfb_cursor(struct fb_info *info, s
 			yoff = 0;
 		}
 
+		h = cursor->image.height;
+
 		/*
-		 * In doublescan mode, the cursor location also needs to be
-		 * doubled.
+		 * In doublescan mode, the cursor location
+		 * and heigh also needs to be doubled.
 		 */
-                if (par->crtc.gen_cntl & CRTC_DBL_SCAN_EN)
+                if (par->crtc.gen_cntl & CRTC_DBL_SCAN_EN) {
 			y<<=1;
+			h<<=1;
+		}
 		wait_for_fifo(4, par);
 		aty_st_le32(CUR_OFFSET, (info->fix.smem_len >> 3) + (yoff << 1), par);
 		aty_st_le32(CUR_HORZ_VERT_OFF,
-			    ((u32) (64 - cursor->image.height + yoff) << 16) | xoff,
-			    par);
+			    ((u32) (64 - h + yoff) << 16) | xoff, par);
 		aty_st_le32(CUR_HORZ_VERT_POSN, ((u32) y << 16) | x, par);
 	}
 
_