[PATCH] fbdev: kyrofb: Driver cleanups
Antonino A. Daplas [Tue, 10 Jan 2006 04:53:08 +0000 (20:53 -0800)]
- remove unneeded casts

- use framebuffer_alloc/framebuffer_release to allocate/free memory

- the pseudo_palette is always u32 regardless of bpp if using generic
  drawing functions

Signed-off-by: Antonino Daplas <adaplas@pol.net>
Acked-by: Paul Mundt <lethal@linux-sh.org>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>

drivers/video/kyro/fbdev.c
include/video/kyro.h

index 5eb4d5c..bcd359b 100644 (file)
@@ -73,8 +73,6 @@ static struct fb_var_screeninfo kyro_var __devinitdata = {
        .vmode          = FB_VMODE_NONINTERLACED,
 };
 
-static struct kyrofb_info *currentpar;
-
 typedef struct {
        STG4000REG __iomem *pSTGReg;    /* Virtual address of PCI register region */
        u32 ulNextFreeVidMem;   /* Offset from start of vid mem to next free region */
@@ -309,7 +307,7 @@ enum {
 /* Accessors */
 static int kyro_dev_video_mode_set(struct fb_info *info)
 {
-       struct kyrofb_info *par = (struct kyrofb_info *)info->par;
+       struct kyrofb_info *par = info->par;
 
        /* Turn off display */
        StopVTG(deviceInfo.pSTGReg);
@@ -402,7 +400,7 @@ static inline unsigned long get_line_length(int x, int bpp)
 
 static int kyrofb_check_var(struct fb_var_screeninfo *var, struct fb_info *info)
 {
-       struct kyrofb_info *par = (struct kyrofb_info *)info->par;
+       struct kyrofb_info *par = info->par;
 
        if (var->bits_per_pixel != 16 && var->bits_per_pixel != 32) {
                printk(KERN_WARNING "kyrofb: depth not supported: %u\n", var->bits_per_pixel);
@@ -478,7 +476,7 @@ static int kyrofb_check_var(struct fb_var_screeninfo *var, struct fb_info *info)
 
 static int kyrofb_set_par(struct fb_info *info)
 {
-       struct kyrofb_info *par = (struct kyrofb_info *)info->par;
+       struct kyrofb_info *par = info->par;
        unsigned long lineclock;
        unsigned long frameclock;
 
@@ -536,20 +534,22 @@ static int kyrofb_set_par(struct fb_info *info)
 static int kyrofb_setcolreg(u_int regno, u_int red, u_int green,
                            u_int blue, u_int transp, struct fb_info *info)
 {
+       struct kyrofb_info *par = info->par;
+
        if (regno > 255)
                return 1;       /* Invalid register */
 
        if (regno < 16) {
                switch (info->var.bits_per_pixel) {
                case 16:
-                       ((u16*)(info->pseudo_palette))[regno] =
+                       par->palette[regno] =
                             (red   & 0xf800) |
                            ((green & 0xfc00) >> 5) |
                            ((blue  & 0xf800) >> 11);
                        break;
                case 32:
                        red >>= 8; green >>= 8; blue >>= 8; transp >>= 8;
-                       ((u32*)(info->pseudo_palette))[regno] =
+                       par->palette[regno] =
                            (transp << 24) | (red << 16) | (green << 8) | blue;
                        break;
                }
@@ -675,6 +675,7 @@ static int __devinit kyrofb_probe(struct pci_dev *pdev,
                                  const struct pci_device_id *ent)
 {
        struct fb_info *info;
+       struct kyrofb_info *currentpar;
        unsigned long size;
        int err;
 
@@ -683,14 +684,11 @@ static int __devinit kyrofb_probe(struct pci_dev *pdev,
                return err;
        }
 
-       size = sizeof(struct fb_info) + sizeof(struct kyrofb_info) + 16 * sizeof(u32);
-       info = kmalloc(size, GFP_KERNEL);
+       info = framebuffer_alloc(sizeof(struct kyrofb_info), &pdev->dev);
        if (!info)
                return -ENOMEM;
 
-       memset(info, 0, size);
-
-       currentpar = (struct kyrofb_info *)(info + 1);
+       currentpar = info->par;
 
        kyro_fix.smem_start = pci_resource_start(pdev, 0);
        kyro_fix.smem_len   = pci_resource_len(pdev, 0);
@@ -716,8 +714,7 @@ static int __devinit kyrofb_probe(struct pci_dev *pdev,
 
        info->fbops             = &kyrofb_ops;
        info->fix               = kyro_fix;
-       info->par               = currentpar;
-       info->pseudo_palette    = (void *)(currentpar + 1);
+       info->pseudo_palette    = currentpar->palette;
        info->flags             = FBINFO_DEFAULT;
 
        SetCoreClockPLL(deviceInfo.pSTGReg, pdev);
@@ -741,7 +738,6 @@ static int __devinit kyrofb_probe(struct pci_dev *pdev,
 
        fb_memset(info->screen_base, 0, size);
 
-       info->device = &pdev->dev;
        if (register_framebuffer(info) < 0)
                goto out_unmap;
 
@@ -757,7 +753,7 @@ static int __devinit kyrofb_probe(struct pci_dev *pdev,
 out_unmap:
        iounmap(currentpar->regbase);
        iounmap(info->screen_base);
-       kfree(info);
+       framebuffer_release(info);
 
        return -EINVAL;
 }
@@ -765,7 +761,7 @@ out_unmap:
 static void __devexit kyrofb_remove(struct pci_dev *pdev)
 {
        struct fb_info *info = pci_get_drvdata(pdev);
-       struct kyrofb_info *par = (struct kyrofb_info *)info->par;
+       struct kyrofb_info *par = info->par;
 
        /* Reset the board */
        StopVTG(deviceInfo.pSTGReg);
@@ -789,7 +785,7 @@ static void __devexit kyrofb_remove(struct pci_dev *pdev)
 
        unregister_framebuffer(info);
        pci_set_drvdata(pdev, NULL);
-       kfree(info);
+       framebuffer_release(info);
 }
 
 static int __init kyrofb_init(void)
index 1bed37c..dba7de2 100644 (file)
@@ -15,6 +15,7 @@
 struct kyrofb_info {
        void __iomem *regbase;
 
+       u32 palette[16];
        u32 HTot;       /* Hor Total Time    */
        u32 HFP;        /* Hor Front Porch   */
        u32 HST;        /* Hor Sync Time     */