From 94f9e09ce531d48b2e46208f9b1c8733a74c22de Mon Sep 17 00:00:00 2001
From: "Antonino A. Daplas" <adaplas@gmail.com>
Date: Mon, 9 Jan 2006 20:53:07 -0800
Subject: [PATCH] fbdev: imsttfb: Driver cleanups

- remove unneeded casts

- the pseudo_palette, if using the generic drawing functions, must always be
  u32 regardless of the bpp

- use framebuffer_alloc/framebuffer_release to allocate memory

Signed-off-by: Antonino Daplas <adaplas@pol.net>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
---
 drivers/video/imsttfb.c | 56 ++++++++++++++++++++++++-------------------------
 1 file changed, 27 insertions(+), 29 deletions(-)

(limited to 'drivers/video/imsttfb.c')

diff --git a/drivers/video/imsttfb.c b/drivers/video/imsttfb.c
index 7fbe24206b19..a5d813050db5 100644
--- a/drivers/video/imsttfb.c
+++ b/drivers/video/imsttfb.c
@@ -323,6 +323,7 @@ struct imstt_par {
 	unsigned long cmap_regs_phys;
 	__u8 *cmap_regs;
 	__u32 ramdac;
+	__u32 palette[16];
 };
  
 enum {
@@ -657,7 +658,7 @@ set_imstt_regvals_tvp (struct imstt_par *par, u_int bpp)
 static void
 set_imstt_regvals (struct fb_info *info, u_int bpp)
 {
-	struct imstt_par *par = (struct imstt_par *) info->par;
+	struct imstt_par *par = info->par;
 	struct imstt_regvals *init = &par->init;
 	__u32 ctl, pitch, byteswap, scr;
 
@@ -749,7 +750,7 @@ set_imstt_regvals (struct fb_info *info, u_int bpp)
 static inline void
 set_offset (struct fb_var_screeninfo *var, struct fb_info *info)
 {
-	struct imstt_par *par = (struct imstt_par *) info->par;
+	struct imstt_par *par = info->par;
 	__u32 off = var->yoffset * (info->fix.line_length >> 3)
 		    + ((var->xoffset * (var->bits_per_pixel >> 3)) >> 3);
 	write_reg_le32(par->dc_regs, SSR, off);
@@ -863,7 +864,7 @@ imsttfb_check_var(struct fb_var_screeninfo *var, struct fb_info *info)
 static int
 imsttfb_set_par(struct fb_info *info) 
 {
-	struct imstt_par *par = (struct imstt_par *) info->par;
+	struct imstt_par *par = info->par;
 		
 	if (!compute_imstt_regvals(par, info->var.xres, info->var.yres))
 		return -EINVAL;
@@ -881,7 +882,7 @@ static int
 imsttfb_setcolreg (u_int regno, u_int red, u_int green, u_int blue,
 		   u_int transp, struct fb_info *info)
 {
-	struct imstt_par *par = (struct imstt_par *) info->par;
+	struct imstt_par *par = info->par;
 	u_int bpp = info->var.bits_per_pixel;
 
 	if (regno > 255)
@@ -905,14 +906,17 @@ imsttfb_setcolreg (u_int regno, u_int red, u_int green, u_int blue,
 	if (regno < 16)
 		switch (bpp) {
 			case 16:
-				((u16 *)info->pseudo_palette)[regno] = (regno << (info->var.green.length == 5 ? 10 : 11)) | (regno << 5) | regno;
+				par->palette[regno] =
+					(regno << (info->var.green.length ==
+					5 ? 10 : 11)) | (regno << 5) | regno;
 				break;
 			case 24:
-				((u32 *)info->pseudo_palette)[regno] = (regno << 16) | (regno << 8) | regno;
+				par->palette[regno] =
+					(regno << 16) | (regno << 8) | regno;
 				break;
 			case 32: {
 				int i = (regno << 8) | regno;
-				((u32 *)info->pseudo_palette)[regno] = (i << 16) | i;
+				par->palette[regno] = (i << 16) |i;
 				break;
 			}
 		}
@@ -935,7 +939,7 @@ imsttfb_pan_display(struct fb_var_screeninfo *var, struct fb_info *info)
 static int 
 imsttfb_blank(int blank, struct fb_info *info)
 {
-	struct imstt_par *par = (struct imstt_par *) info->par;
+	struct imstt_par *par = info->par;
 	__u32 ctrl;
 
 	ctrl = read_reg_le32(par->dc_regs, STGCTL);
@@ -989,7 +993,7 @@ imsttfb_blank(int blank, struct fb_info *info)
 static void
 imsttfb_fillrect(struct fb_info *info, const struct fb_fillrect *rect)
 { 
-	struct imstt_par *par = (struct imstt_par *) info->par;
+	struct imstt_par *par = info->par;
 	__u32 Bpp, line_pitch, bgc, dx, dy, width, height;
 
 	bgc = rect->color;
@@ -1033,7 +1037,7 @@ imsttfb_fillrect(struct fb_info *info, const struct fb_fillrect *rect)
 static void
 imsttfb_copyarea(struct fb_info *info, const struct fb_copyarea *area)
 {
-	struct imstt_par *par = (struct imstt_par *) info->par;
+	struct imstt_par *par = info->par;
 	__u32 Bpp, line_pitch, fb_offset_old, fb_offset_new, sp, dp_octl;
  	__u32 cnt, bltctl, sx, sy, dx, dy, height, width;
 
@@ -1195,7 +1199,7 @@ imstt_set_cursor(struct imstt_par *par, struct fb_image *d, int on)
 static int 
 imsttfb_cursor(struct fb_info *info, struct fb_cursor *cursor)
 {
-	struct imstt_par *par = (struct imstt_par *) info->par;
+	struct imstt_par *par = info->par;
         u32 flags = cursor->set, fg, bg, xx, yy;
 
 	if (cursor->dest == NULL && cursor->rop == ROP_XOR)
@@ -1266,7 +1270,7 @@ static int
 imsttfb_ioctl(struct inode *inode, struct file *file, u_int cmd,
 	      u_long arg, struct fb_info *info)
 {
-	struct imstt_par *par = (struct imstt_par *) info->par;
+	struct imstt_par *par = info->par;
 	void __user *argp = (void __user *)arg;
 	__u32 reg[2];
 	__u8 idx[2];
@@ -1350,7 +1354,7 @@ static struct fb_ops imsttfb_ops = {
 static void __devinit
 init_imstt(struct fb_info *info)
 {
-	struct imstt_par *par = (struct imstt_par *) info->par;
+	struct imstt_par *par = info->par;
 	__u32 i, tmp, *ip, *end;
 
 	tmp = read_reg_le32(par->dc_regs, PRC);
@@ -1413,7 +1417,7 @@ init_imstt(struct fb_info *info)
 	if ((info->var.xres * info->var.yres) * (info->var.bits_per_pixel >> 3) > info->fix.smem_len
 	    || !(compute_imstt_regvals(par, info->var.xres, info->var.yres))) {
 		printk("imsttfb: %ux%ux%u not supported\n", info->var.xres, info->var.yres, info->var.bits_per_pixel);
-		kfree(info);
+		framebuffer_release(info);
 		return;
 	}
 
@@ -1449,7 +1453,7 @@ init_imstt(struct fb_info *info)
 	fb_alloc_cmap(&info->cmap, 0, 0);
 
 	if (register_framebuffer(info) < 0) {
-		kfree(info);
+		framebuffer_release(info);
 		return;
 	}
 
@@ -1474,26 +1478,21 @@ imsttfb_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
 		printk(KERN_ERR "imsttfb: no OF node for pci device\n");
 #endif /* CONFIG_PPC_OF */
 
-	size = sizeof(struct fb_info) + sizeof(struct imstt_par) +
-		sizeof(u32) * 16;
-
-	info = kmalloc(size, GFP_KERNEL);
+	info = framebuffer_alloc(sizeof(struct imstt_par), &pdev->dev);
 
 	if (!info) {
 		printk(KERN_ERR "imsttfb: Can't allocate memory\n");
 		return -ENOMEM;
 	}
 
-	memset(info, 0, size);
-
-	par = (struct imstt_par *) (info + 1);
+	par = info->par;
 
 	addr = pci_resource_start (pdev, 0);
 	size = pci_resource_len (pdev, 0);
 
 	if (!request_mem_region(addr, size, "imsttfb")) {
 		printk(KERN_ERR "imsttfb: Can't reserve memory region\n");
-		kfree(info);
+		framebuffer_release(info);
 		return -ENODEV;
 	}
 
@@ -1516,14 +1515,13 @@ imsttfb_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
 	}
 
 	info->fix.smem_start = addr;
-	info->screen_base = (__u8 *)ioremap(addr, par->ramdac == IBM ? 0x400000 : 0x800000);
+	info->screen_base = (__u8 *)ioremap(addr, par->ramdac == IBM ?
+					    0x400000 : 0x800000);
 	info->fix.mmio_start = addr + 0x800000;
 	par->dc_regs = ioremap(addr + 0x800000, 0x1000);
 	par->cmap_regs_phys = addr + 0x840000;
 	par->cmap_regs = (__u8 *)ioremap(addr + 0x840000, 0x1000);
-	info->par = par;
-	info->pseudo_palette = (void *) (par + 1);
-	info->device = &pdev->dev;
+	info->pseudo_palette = par->palette;
 	init_imstt(info);
 
 	pci_set_drvdata(pdev, info);
@@ -1534,7 +1532,7 @@ static void __devexit
 imsttfb_remove(struct pci_dev *pdev)
 {
 	struct fb_info *info = pci_get_drvdata(pdev);
-	struct imstt_par *par = (struct imstt_par *) info->par;
+	struct imstt_par *par = info->par;
 	int size = pci_resource_len(pdev, 0);
 
 	unregister_framebuffer(info);
@@ -1542,7 +1540,7 @@ imsttfb_remove(struct pci_dev *pdev)
 	iounmap(par->dc_regs);
 	iounmap(info->screen_base);
 	release_mem_region(info->fix.smem_start, size);
-	kfree(info);
+	framebuffer_release(info);
 }
 
 #ifndef MODULE
-- 
cgit v1.2.1