From 896f8bce6d830ddb86b9297e813876e6cbd287a0 Mon Sep 17 00:00:00 2001 From: James Simmons Date: Wed, 9 Apr 2003 18:48:22 -0700 Subject: [PATCH] [FBDEV] Made the upper layer code always use the cursor mask of struct fb_cursor inside struct fb_info. This moved memory management of the mask and image data to the upper layers. [RADEON FBDEV] Updates for the Radeon 9100. --- drivers/video/console/fbcon.c | 13 +- drivers/video/i810/i810.h | 1 - drivers/video/i810/i810_main.c | 18 +-- drivers/video/radeonfb.c | 17 ++- drivers/video/riva/fbdev.c | 243 +++++++++++++++------------------ drivers/video/softcursor.c | 13 +- 6 files changed, 140 insertions(+), 165 deletions(-) diff --git a/drivers/video/console/fbcon.c b/drivers/video/console/fbcon.c index 3620335ada195..905f2d3aa1b84 100644 --- a/drivers/video/console/fbcon.c +++ b/drivers/video/console/fbcon.c @@ -992,7 +992,6 @@ static void fbcon_cursor(struct vc_data *vc, int mode) int w = (vc->vc_font.width + 7) >> 3, c; int y = real_y(p, vc->vc_y); struct fb_cursor cursor; - char *mask = NULL; if (mode & CM_SOFTBACK) { mode &= ~CM_SOFTBACK; @@ -1045,11 +1044,15 @@ static void fbcon_cursor(struct vc_data *vc, int mode) } if ((cursor.set & FB_CUR_SETSIZE) || ((vc->vc_cursor_type & 0x0f) != p->cursor_shape)) { + char *mask = kmalloc(w*vc->vc_font.height, GFP_ATOMIC); int cur_height, size, i = 0; - mask = kmalloc(w*vc->vc_font.height, GFP_ATOMIC); if (!mask) return; - + + if (info->cursor.mask) + kfree(info->cursor.mask); + info->cursor.mask = mask; + p->cursor_shape = vc->vc_cursor_type & 0x0f; cursor.set |= FB_CUR_SETSHAPE; @@ -1080,13 +1083,9 @@ static void fbcon_cursor(struct vc_data *vc, int mode) size = cur_height * w; while (size--) mask[i++] = 0xff; - cursor.mask = mask; } info->cursor.rop = ROP_XOR; - info->fbops->fb_cursor(info, &cursor); - if (mask) - kfree(mask); vbl_cursor_cnt = CURSOR_DRAW_DELAY; break; } diff --git a/drivers/video/i810/i810.h b/drivers/video/i810/i810.h index d242710bdc85d..381b43663e49f 100644 --- a/drivers/video/i810/i810.h +++ b/drivers/video/i810/i810.h @@ -257,7 +257,6 @@ struct i810fb_par { u32 pci_state[16]; unsigned long mmio_start_phys; u8 *mmio_start_virtual; - u32 cursor_reset; u32 pitch; u32 pixconf; u32 watermark; diff --git a/drivers/video/i810/i810_main.c b/drivers/video/i810/i810_main.c index b8e5e8cbfc325..97ed0193a9541 100644 --- a/drivers/video/i810/i810_main.c +++ b/drivers/video/i810/i810_main.c @@ -1301,7 +1301,6 @@ static int i810fb_set_par(struct fb_info *info) decode_var(&info->var, par); i810_load_regs(par); i810_init_cursor(par); - par->cursor_reset = 1; encode_fix(&info->fix, info); @@ -1340,24 +1339,17 @@ static int i810fb_cursor(struct fb_info *info, struct fb_cursor *cursor) { struct i810fb_par *par = (struct i810fb_par *)info->par; u8 *mmio = par->mmio_start_virtual; - static u8 data[64 * 8]; + u8 data[64 * 8]; if (!info->var.accel_flags || par->dev_flags & LOCKUP) return soft_cursor(info, cursor); if (cursor->image.width > 64 || cursor->image.height > 64) - return 1; + return -ENXIO; - if ((i810_readl(CURBASE, mmio) & 0xf) != par->cursor_heap.physical) { + if ((i810_readl(CURBASE, mmio) & 0xf) != par->cursor_heap.physical) i810_init_cursor(par); - par->cursor_reset = 1; - } - if (par->cursor_reset) { - cursor->set = FB_CUR_SETALL; - par->cursor_reset = 0; - } - i810_enable_cursor(mmio, OFF); if (cursor->set & FB_CUR_SETHOT) @@ -1397,12 +1389,12 @@ static int i810fb_cursor(struct fb_info *info, struct fb_cursor *cursor) switch (info->cursor.rop) { case ROP_XOR: for (i = 0; i < size; i++) - data[i] = cursor->image.data[i] ^ cursor->mask[i]; + data[i] = cursor->image.data[i] ^ info->cursor.mask[i]; break; case ROP_COPY: default: for (i = 0; i < size; i++) - data[i] = cursor->image.data[i] & cursor->mask[i]; + data[i] = cursor->image.data[i] & info->cursor.mask[i]; break; } i810_load_cursor_image(info->cursor.image.width, diff --git a/drivers/video/radeonfb.c b/drivers/video/radeonfb.c index bfeb2390d1f0e..a6491cfda2e3e 100644 --- a/drivers/video/radeonfb.c +++ b/drivers/video/radeonfb.c @@ -121,7 +121,8 @@ enum radeon_chips { RADEON_ND, RADEON_NE, RADEON_NF, - RADEON_NG + RADEON_NG, + RADEON_QM /* LN (my Radeon 9100) */ }; enum radeon_arch { @@ -168,7 +169,8 @@ static struct radeon_chip_info { { "9700 ND", RADEON_R300 }, { "9700 NE", RADEON_R300 }, { "9700 NF", RADEON_R300 }, - { "9700 NG", RADEON_R300 } + { "9700 NG", RADEON_R300 }, + { "9100 QM", RADEON_R200 } /* LN (my Radeon 9100) */ }; @@ -213,6 +215,7 @@ static struct pci_device_id radeonfb_pci_table[] __devinitdata = { { PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_RADEON_NE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, RADEON_NE}, { PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_RADEON_NF, PCI_ANY_ID, PCI_ANY_ID, 0, 0, RADEON_NF}, { PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_RADEON_NG, PCI_ANY_ID, PCI_ANY_ID, 0, 0, RADEON_NG}, + { PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_RADEON_QM, PCI_ANY_ID, PCI_ANY_ID, 0, 0, RADEON_QM}, /* LN (my Radeon 9100) */ { 0, } }; MODULE_DEVICE_TABLE(pci, radeonfb_pci_table); @@ -884,6 +887,16 @@ static void radeon_get_pllinfo(struct radeonfb_info *rinfo, char *bios_seg) case PCI_DEVICE_ID_ATI_RADEON_ND: case PCI_DEVICE_ID_ATI_RADEON_NE: case PCI_DEVICE_ID_ATI_RADEON_NF: + case PCI_DEVICE_ID_ATI_RADEON_NG: + rinfo->pll.ppll_max = 40000; + rinfo->pll.ppll_min = 20000; + rinfo->pll.xclk = 27000; + rinfo->pll.ref_div = 12; + rinfo->pll.ref_clk = 2700; + break; + case PCI_DEVICE_ID_ATI_RADEON_ND: + case PCI_DEVICE_ID_ATI_RADEON_NE: + case PCI_DEVICE_ID_ATI_RADEON_NF: case PCI_DEVICE_ID_ATI_RADEON_NG: rinfo->pll.ppll_max = 40000; rinfo->pll.ppll_min = 20000; diff --git a/drivers/video/riva/fbdev.c b/drivers/video/riva/fbdev.c index f873334046d38..d6676ae5fc705 100644 --- a/drivers/video/riva/fbdev.c +++ b/drivers/video/riva/fbdev.c @@ -297,34 +297,34 @@ static char *mode_option __initdata = NULL; #endif static struct fb_fix_screeninfo rivafb_fix = { - .id = "nVidia", - .type = FB_TYPE_PACKED_PIXELS, - .xpanstep = 1, - .ypanstep = 1, + id: "nVidia", + type: FB_TYPE_PACKED_PIXELS, + xpanstep: 1, + ypanstep: 1, }; static struct fb_var_screeninfo rivafb_default_var = { - .xres = 640, - .yres = 480, - .xres_virtual = 640, - .yres_virtual = 480, - .bits_per_pixel = 8, - .red = {0, 8, 0}, - .green = {0, 8, 0}, - .blue = {0, 8, 0}, - .transp = {0, 0, 0}, - .activate = FB_ACTIVATE_NOW, - .height = -1, - .width = -1, - .accel_flags = FB_ACCELF_TEXT, - .pixclock = 39721, - .left_margin = 40, - .right_margin = 24, - .upper_margin = 32, - .lower_margin = 11, - .hsync_len = 96, - .vsync_len = 2, - .vmode = FB_VMODE_NONINTERLACED + xres: 640, + yres: 480, + xres_virtual: 640, + yres_virtual: 480, + bits_per_pixel: 8, + red: {0, 8, 0}, + green: {0, 8, 0}, + blue: {0, 8, 0}, + transp: {0, 0, 0}, + activate: FB_ACTIVATE_NOW, + height: -1, + width: -1, + accel_flags: FB_ACCELF_TEXT, + pixclock: 39721, + left_margin: 40, + right_margin: 24, + upper_margin: 32, + lower_margin: 11, + hsync_len: 96, + vsync_len: 2, + vmode: FB_VMODE_NONINTERLACED }; /* from GGI */ @@ -420,6 +420,50 @@ static inline unsigned char MISCin(struct riva_par *par) return (VGA_RD08(par->riva.PVIO, 0x3cc)); } +static u8 byte_rev[256] = { + 0x00, 0x80, 0x40, 0xc0, 0x20, 0xa0, 0x60, 0xe0, + 0x10, 0x90, 0x50, 0xd0, 0x30, 0xb0, 0x70, 0xf0, + 0x08, 0x88, 0x48, 0xc8, 0x28, 0xa8, 0x68, 0xe8, + 0x18, 0x98, 0x58, 0xd8, 0x38, 0xb8, 0x78, 0xf8, + 0x04, 0x84, 0x44, 0xc4, 0x24, 0xa4, 0x64, 0xe4, + 0x14, 0x94, 0x54, 0xd4, 0x34, 0xb4, 0x74, 0xf4, + 0x0c, 0x8c, 0x4c, 0xcc, 0x2c, 0xac, 0x6c, 0xec, + 0x1c, 0x9c, 0x5c, 0xdc, 0x3c, 0xbc, 0x7c, 0xfc, + 0x02, 0x82, 0x42, 0xc2, 0x22, 0xa2, 0x62, 0xe2, + 0x12, 0x92, 0x52, 0xd2, 0x32, 0xb2, 0x72, 0xf2, + 0x0a, 0x8a, 0x4a, 0xca, 0x2a, 0xaa, 0x6a, 0xea, + 0x1a, 0x9a, 0x5a, 0xda, 0x3a, 0xba, 0x7a, 0xfa, + 0x06, 0x86, 0x46, 0xc6, 0x26, 0xa6, 0x66, 0xe6, + 0x16, 0x96, 0x56, 0xd6, 0x36, 0xb6, 0x76, 0xf6, + 0x0e, 0x8e, 0x4e, 0xce, 0x2e, 0xae, 0x6e, 0xee, + 0x1e, 0x9e, 0x5e, 0xde, 0x3e, 0xbe, 0x7e, 0xfe, + 0x01, 0x81, 0x41, 0xc1, 0x21, 0xa1, 0x61, 0xe1, + 0x11, 0x91, 0x51, 0xd1, 0x31, 0xb1, 0x71, 0xf1, + 0x09, 0x89, 0x49, 0xc9, 0x29, 0xa9, 0x69, 0xe9, + 0x19, 0x99, 0x59, 0xd9, 0x39, 0xb9, 0x79, 0xf9, + 0x05, 0x85, 0x45, 0xc5, 0x25, 0xa5, 0x65, 0xe5, + 0x15, 0x95, 0x55, 0xd5, 0x35, 0xb5, 0x75, 0xf5, + 0x0d, 0x8d, 0x4d, 0xcd, 0x2d, 0xad, 0x6d, 0xed, + 0x1d, 0x9d, 0x5d, 0xdd, 0x3d, 0xbd, 0x7d, 0xfd, + 0x03, 0x83, 0x43, 0xc3, 0x23, 0xa3, 0x63, 0xe3, + 0x13, 0x93, 0x53, 0xd3, 0x33, 0xb3, 0x73, 0xf3, + 0x0b, 0x8b, 0x4b, 0xcb, 0x2b, 0xab, 0x6b, 0xeb, + 0x1b, 0x9b, 0x5b, 0xdb, 0x3b, 0xbb, 0x7b, 0xfb, + 0x07, 0x87, 0x47, 0xc7, 0x27, 0xa7, 0x67, 0xe7, + 0x17, 0x97, 0x57, 0xd7, 0x37, 0xb7, 0x77, 0xf7, + 0x0f, 0x8f, 0x4f, 0xcf, 0x2f, 0xaf, 0x6f, 0xef, + 0x1f, 0x9f, 0x5f, 0xdf, 0x3f, 0xbf, 0x7f, 0xff, +}; + +static inline void reverse_order(u32 *l) +{ + u8 *a = (u8 *)l; + *a = byte_rev[*a], a++; + *a = byte_rev[*a], a++; + *a = byte_rev[*a], a++; + *a = byte_rev[*a]; +} + /* ------------------------------------------------------------------------- * * * cursor stuff @@ -429,7 +473,6 @@ static inline unsigned char MISCin(struct riva_par *par) /** * rivafb_load_cursor_image - load cursor image to hardware * @data: address to monochrome bitmap (1 = foreground color, 0 = background) - * @mask: address to mask (1 = write image pixel, 0 = do not write pixel) * @par: pointer to private data * @w: width of cursor image in pixels * @h: height of cursor image in scanlines @@ -438,44 +481,36 @@ static inline unsigned char MISCin(struct riva_par *par) * * DESCRIPTiON: * Loads cursor image based on a monochrome source and mask bitmap. The - * mask bit determines if the image pixel is to be written to the framebuffer - * or not. The imaage bits determines the color of the pixel, 0 for - * background, 1 for foreground. Only the affected region (as determined - * by @w and @h parameters) will be updated. + * image bits determines the color of the pixel, 0 for background, 1 for + * foreground. Only the affected region (as determined by @w and @h + * parameters) will be updated. * * CALLED FROM: * rivafb_cursor() */ -static void rivafb_load_cursor_image(u8 *data, u8 *mask, struct riva_par *par, - int w, int h, u16 bg, u16 fg) +static void rivafb_load_cursor_image(struct riva_par *par, u8 *data, + u16 bg, u16 fg, u32 w, u32 h) { int i, j, k = 0; - u32 b, m, tmp; + u32 b, tmp; for (i = 0; i < h; i++) { b = *((u32 *)data)++; - m = *((u32 *)mask)++; + reverse_order(&b); + for (j = 0; j < w/2; j++) { tmp = 0; #if defined (__BIG_ENDIAN) - if (m & (1 << 31)) - tmp = (b & (1 << 31)) ? fg << 16 : bg << 16; + tmp = (b & (1 << 31)) ? fg << 16 : bg << 16; b <<= 1; - m <<= 1; - if (m & (1 << 31)) - tmp |= (b & (1 << 31)) ? fg : bg; + tmp |= (b & (1 << 31)) ? fg : bg; b <<= 1; - m <<= 1; #else - if (m & 1) - tmp = (b & 1) ? fg : bg; + tmp = (b & 1) ? fg : bg; b >>= 1; - m >>= 1; - if (m & 1) - tmp |= (b & 1) ? fg << 16 : bg << 16; + tmp |= (b & 1) ? fg << 16 : bg << 16; b >>= 1; - m >>= 1; #endif writel(tmp, par->riva.CURSOR + k++); } @@ -1104,14 +1139,6 @@ static int rivafb_pan_display(struct fb_var_screeninfo *var, par->riva.SetStartAddress(&par->riva, base); - /* - * HACK: The hardware cursor occasionally disappears during fast scrolling. - * We just reset the cursor each time we change the start address. - * This also has a beneficial side effect of restoring the cursor - * image when switching from X. - */ - par->cursor_reset = 1; - info->var.xoffset = var->xoffset; info->var.yoffset = var->yoffset; @@ -1311,50 +1338,6 @@ static void rivafb_copyarea(struct fb_info *info, const struct fb_copyarea *regi wait_for_idle(par); } -static u8 byte_rev[256] = { - 0x00, 0x80, 0x40, 0xc0, 0x20, 0xa0, 0x60, 0xe0, - 0x10, 0x90, 0x50, 0xd0, 0x30, 0xb0, 0x70, 0xf0, - 0x08, 0x88, 0x48, 0xc8, 0x28, 0xa8, 0x68, 0xe8, - 0x18, 0x98, 0x58, 0xd8, 0x38, 0xb8, 0x78, 0xf8, - 0x04, 0x84, 0x44, 0xc4, 0x24, 0xa4, 0x64, 0xe4, - 0x14, 0x94, 0x54, 0xd4, 0x34, 0xb4, 0x74, 0xf4, - 0x0c, 0x8c, 0x4c, 0xcc, 0x2c, 0xac, 0x6c, 0xec, - 0x1c, 0x9c, 0x5c, 0xdc, 0x3c, 0xbc, 0x7c, 0xfc, - 0x02, 0x82, 0x42, 0xc2, 0x22, 0xa2, 0x62, 0xe2, - 0x12, 0x92, 0x52, 0xd2, 0x32, 0xb2, 0x72, 0xf2, - 0x0a, 0x8a, 0x4a, 0xca, 0x2a, 0xaa, 0x6a, 0xea, - 0x1a, 0x9a, 0x5a, 0xda, 0x3a, 0xba, 0x7a, 0xfa, - 0x06, 0x86, 0x46, 0xc6, 0x26, 0xa6, 0x66, 0xe6, - 0x16, 0x96, 0x56, 0xd6, 0x36, 0xb6, 0x76, 0xf6, - 0x0e, 0x8e, 0x4e, 0xce, 0x2e, 0xae, 0x6e, 0xee, - 0x1e, 0x9e, 0x5e, 0xde, 0x3e, 0xbe, 0x7e, 0xfe, - 0x01, 0x81, 0x41, 0xc1, 0x21, 0xa1, 0x61, 0xe1, - 0x11, 0x91, 0x51, 0xd1, 0x31, 0xb1, 0x71, 0xf1, - 0x09, 0x89, 0x49, 0xc9, 0x29, 0xa9, 0x69, 0xe9, - 0x19, 0x99, 0x59, 0xd9, 0x39, 0xb9, 0x79, 0xf9, - 0x05, 0x85, 0x45, 0xc5, 0x25, 0xa5, 0x65, 0xe5, - 0x15, 0x95, 0x55, 0xd5, 0x35, 0xb5, 0x75, 0xf5, - 0x0d, 0x8d, 0x4d, 0xcd, 0x2d, 0xad, 0x6d, 0xed, - 0x1d, 0x9d, 0x5d, 0xdd, 0x3d, 0xbd, 0x7d, 0xfd, - 0x03, 0x83, 0x43, 0xc3, 0x23, 0xa3, 0x63, 0xe3, - 0x13, 0x93, 0x53, 0xd3, 0x33, 0xb3, 0x73, 0xf3, - 0x0b, 0x8b, 0x4b, 0xcb, 0x2b, 0xab, 0x6b, 0xeb, - 0x1b, 0x9b, 0x5b, 0xdb, 0x3b, 0xbb, 0x7b, 0xfb, - 0x07, 0x87, 0x47, 0xc7, 0x27, 0xa7, 0x67, 0xe7, - 0x17, 0x97, 0x57, 0xd7, 0x37, 0xb7, 0x77, 0xf7, - 0x0f, 0x8f, 0x4f, 0xcf, 0x2f, 0xaf, 0x6f, 0xef, - 0x1f, 0x9f, 0x5f, 0xdf, 0x3f, 0xbf, 0x7f, 0xff, -}; - -static inline void reverse_order(u32 *l) -{ - u8 *a = (u8 *)l; - *a = byte_rev[*a], a++; - *a = byte_rev[*a], a++; - *a = byte_rev[*a], a++; - *a = byte_rev[*a]; -} - static inline void convert_bgcolor_16(u32 *col) { *col = ((*col & 0x00007C00) << 9) @@ -1463,21 +1446,18 @@ static void rivafb_imageblit(struct fb_info *info, */ static int rivafb_cursor(struct fb_info *info, struct fb_cursor *cursor) { - static u8 data[MAX_CURS*MAX_CURS/8], mask[MAX_CURS*MAX_CURS/8]; struct riva_par *par = (struct riva_par *) info->par; int i, j, d_idx = 0, s_idx = 0; - u16 flags = cursor->set, fg, bg; - - if (par->cursor_reset) { - flags = FB_CUR_SETALL; - par->cursor_reset = 0; - } + u8 data[MAX_CURS * MAX_CURS/8]; + u16 fg, bg, size = 0; par->riva.ShowHideCursor(&par->riva, 0); - if (flags & FB_CUR_SETPOS) { + if (cursor->set & FB_CUR_SETPOS) { u32 xx, yy, temp; + info->cursor.image.dx = cursor->image.dx; + info->cursor.image.dy = cursor->image.dy; yy = cursor->image.dy - info->var.yoffset; xx = cursor->image.dx - info->var.xoffset; temp = xx & 0xFFFF; @@ -1486,38 +1466,40 @@ static int rivafb_cursor(struct fb_info *info, struct fb_cursor *cursor) par->riva.PRAMDAC[0x0000300/4] = temp; } - if (flags & FB_CUR_SETSIZE) { - memset(data, 0, MAX_CURS * MAX_CURS/8); - memset(mask, 0, MAX_CURS * MAX_CURS/8); + if (cursor->set & FB_CUR_SETSIZE) { + info->cursor.image.height = cursor->image.height; + info->cursor.image.width = cursor->image.width; memset_io(par->riva.CURSOR, 0, MAX_CURS * MAX_CURS * 2); } - if (flags & (FB_CUR_SETSHAPE | FB_CUR_SETCMAP)) { - int bg_idx = cursor->image.bg_color; - int fg_idx = cursor->image.fg_color; - int width = (cursor->image.width+7)/8; + if (cursor->set & FB_CUR_SETCMAP) { + info->cursor.image.bg_color = cursor->image.bg_color; + info->cursor.image.fg_color = cursor->image.fg_color; + } + + if (cursor->set & (FB_CUR_SETSHAPE | FB_CUR_SETCMAP)) { + u32 bg_idx = info->cursor.image.bg_color; + u32 fg_idx = info->cursor.image.fg_color; + u32 width = (info->cursor.image.width+7) >> 3; u8 *dat = (u8 *) cursor->image.data; - u8 *msk = (u8 *) cursor->mask; + u8 *msk = (u8 *) info->cursor.mask; - switch (cursor->rop) { + switch (info->cursor.rop) { case ROP_XOR: - for (i = 0; i < cursor->image.height; i++) { + for (i = 0; i < info->cursor.image.height; i++) { for (j = 0; j < width; j++) { d_idx = i * MAX_CURS/8 + j; - data[d_idx] = byte_rev[dat[s_idx] ^ - msk[s_idx]]; - mask[d_idx] = byte_rev[msk[s_idx]]; + data[d_idx] = dat[s_idx] ^ msk[s_idx]; s_idx++; } } break; case ROP_COPY: default: - for (i = 0; i < cursor->image.height; i++) { + for (i = 0; i < info->cursor.image.height; i++) { for (j = 0; j < width; j++) { d_idx = i * MAX_CURS/8 + j; - data[d_idx] = byte_rev[dat[s_idx]]; - mask[d_idx] = byte_rev[msk[s_idx]]; + data[d_idx] = dat[s_idx] & msk[s_idx]; s_idx++; } } @@ -1533,10 +1515,12 @@ static int rivafb_cursor(struct fb_info *info, struct fb_cursor *cursor) ((info->cmap.blue[fg_idx] & 0xf8) >> 3) | 1 << 15; par->riva.LockUnlock(&par->riva, 0); - rivafb_load_cursor_image(data, mask, par, cursor->image.width, - cursor->image.height, bg, fg); + + rivafb_load_cursor_image(par, data, bg, fg, + info->cursor.image.width, + info->cursor.image.height); } - if (cursor->enable) + if (info->cursor.enable) par->riva.ShowHideCursor(&par->riva, 1); return 0; } @@ -1600,7 +1584,6 @@ static int __init riva_set_fbinfo(struct fb_info *info) info->pixmap.buf_align = 4; info->pixmap.scan_align = 4; info->pixmap.flags = FB_PIXMAP_SYSTEM; - return 0; } @@ -1975,10 +1958,10 @@ int __init rivafb_setup(char *options) #endif /* !MODULE */ static struct pci_driver rivafb_driver = { - .name = "rivafb", - .id_table = rivafb_pci_tbl, - .probe = rivafb_probe, - .remove = __exit_p(rivafb_remove), + name: "rivafb", + id_table: rivafb_pci_tbl, + probe: rivafb_probe, + remove: __exit_p(rivafb_remove), }; diff --git a/drivers/video/softcursor.c b/drivers/video/softcursor.c index 78ddba021f7b5..a71e1d841a077 100644 --- a/drivers/video/softcursor.c +++ b/drivers/video/softcursor.c @@ -55,17 +55,6 @@ int soft_cursor(struct fb_info *info, struct fb_cursor *cursor) size &= ~buf_align; dst = info->pixmap.addr + fb_get_buffer_offset(info, size); - if (cursor->set & FB_CUR_SETSHAPE) { - if (cursor->set & FB_CUR_SETSIZE) { - if (info->cursor.mask) - kfree(info->cursor.mask); - info->cursor.mask = kmalloc(dsize, GFP_ATOMIC); - if (!info->cursor.mask) - return -ENOMEM; - } - memcpy(info->cursor.mask, cursor->mask, dsize); - } - if (info->cursor.enable) { switch (info->cursor.rop) { case ROP_XOR: @@ -81,7 +70,7 @@ int soft_cursor(struct fb_info *info, struct fb_cursor *cursor) } else memcpy(src, cursor->image.data, size); - move_buf_aligned(info, dst, src, d_pitch, s_pitch,info->cursor.image.height); + move_buf_aligned(info, dst, src, d_pitch, s_pitch, info->cursor.image.height); info->cursor.image.data = dst; -- 2.53.0