atyfb: Fix hardware cursor handling
PATCH 3/12 atyfb: Fix hardware cursor handling
Fix image and color handling in atyfb_cursor()
- In the 2-bit scheme of the cursor image, just set the first bit to be always zero (turn off transparency and/or XOR), and just do the masking manually
- The cursor color is converted into 32-bit RGBA8888 using struct fb_cmap. Each component in the cmap is u16 in size, so mask the upper 8 bits.
Signed-off-by Antonino Daplas <[email protected]>
---
drivers/video/aty/mach64_cursor.c | 33 +++++++++++++-------------------- 1 files changed, 13 insertions(+), 20 deletions(-)
drivers/video/aty/mach64_cursor.c +13 -20
@@ -66,11 +66,6 @@ static const u8 cursor_bits_lookup[16] = 0x01, 0x41, 0x11, 0x51, 0x05, 0x45, 0x15, 0x55 }; -static const u8 cursor_mask_lookup[16 ] = { -0xaa ,0x2a ,0x8a ,0x0a ,0xa2 ,0x22 ,0x82 ,0x02 , -0xa8 ,0x28 ,0x88 ,0x08 ,0xa0 ,0x20 ,0x80 ,0x00 -}; -static int atyfb_cursor (struct fb_info *info,struct fb_cursor *cursor) {struct atyfb_par *par = (struct atyfb_par *) info->par;
@@ -130,13 +125,13 @@ static int atyfb_cursor(struct fb_info * fg_idx = cursor->image.fg_color; bg_idx = cursor->image.bg_color; - fg = (info->cmap.red[fg_idx] <<24 ) | - (info->cmap.green[fg_idx] <<16 ) | - (info->cmap.blue[fg_idx] <<8 ) |15 ; - - bg = (info->cmap.red[bg_idx] <<24 ) | - (info->cmap.green[bg_idx] <<16 ) | - (info->cmap.blue[bg_idx] <<8 ); + fg = ((info->cmap.red[fg_idx] &0xff ) <<24 ) | + ((info->cmap.green[fg_idx] &0xff ) <<16 ) | + ((info->cmap.blue[fg_idx] &0xff ) <<8 ) |0xff ; + + bg = ((info->cmap.red[bg_idx] &0xff ) <<24 ) | + ((info->cmap.green[bg_idx] &0xff ) <<16 ) | + ((info->cmap.blue[bg_idx] &0xff ) <<8 );wait_for_fifo (2 , par);aty_st_le32 (CUR_CLR0 , bg, par);
@@ -166,19 +161,17 @@ static int atyfb_cursor(struct fb_info *switch (cursor->rop) {case ROP_XOR :// Upper 4 bits of mask data -fb_writeb (cursor_mask_lookup[m >>4 ] | - cursor_bits_lookup[(b ^ m) >>4 ], dst++); +fb_writeb (cursor_bits_lookup[(b ^ m) >>4 ], dst++);// Lower 4 bits of mask -fb_writeb (cursor_mask_lookup[m &0x0f ] | - cursor_bits_lookup[(b ^ m) &0x0f ], dst++); +fb_writeb (cursor_bits_lookup[(b ^ m) &0x0f ], + dst++);break ;case ROP_COPY :// Upper 4 bits of mask data -fb_writeb (cursor_mask_lookup[m >>4 ] | - cursor_bits_lookup[(b & m) >>4 ], dst++); +fb_writeb (cursor_bits_lookup[(b & m) >>4 ], dst++);// Lower 4 bits of mask -fb_writeb (cursor_mask_lookup[m &0x0f ] | - cursor_bits_lookup[(b & m) &0x0f ], dst++); +fb_writeb (cursor_bits_lookup[(b & m) &0x0f ], + dst++);break ; } }
-------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security? Get stuff done quickly with pre-integrated technology to make your job easier Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642