[PATCH] imsttfb: New framebuffer_alloc API and class_dev changes
DORMANTno replies
From: Kronos <hidden>
Date: 2003-09-15 20:16:37
Hi, this patch converts driver/video/imsttfb.c to framebuffer_alloc: ======== drivers/video/imsttfb.c 1.32 ======== D 1.32 03/09/13 23:44:31+02:00 kronos@kronoz.cjb.net 35 34 18/15/1588 P drivers/video/imsttfb.c C switch to framebuffer_alloc ------------------------------------------------ ===== drivers/video/imsttfb.c 1.31 vs 1.32 =====
--- 1.31/drivers/video/imsttfb.c Fri Aug 22 08:27:08 2003
+++ 1.32/drivers/video/imsttfb.c Sat Sep 13 23:44:31 2003@@ -402,6 +402,7 @@ */ static int imsttfb_probe(struct pci_dev *pdev, const struct pci_device_id *ent); static void imsttfb_remove(struct pci_dev *pdev); +static void release_imstt_par(struct fb_info *info); /* * Register access
@@ -1442,7 +1443,6 @@ info->fbops = &imsttfb_ops; info->flags = FBINFO_FLAG_DEFAULT; - info->dev = &pdev->dev; fb_alloc_cmap(&info->cmap, 0, 0);
@@ -1463,19 +1463,16 @@ struct imstt_par *par; struct fb_info *info; - size = sizeof(struct fb_info) + sizeof(struct imstt_par) + - sizeof(u32) * 16; + size = sizeof(struct imstt_par) + sizeof(u32) * 16; - info = kmalloc(size, GFP_KERNEL); + info = framebuffer_alloc(size, &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);
@@ -1507,7 +1504,7 @@ par->dc_regs = (__u32 *)ioremap(addr + 0x800000, 0x1000); par->cmap_regs_phys = addr + 0x840000; par->cmap_regs = (__u8 *)ioremap(addr + 0x840000, 0x1000); - info->par = par; + info->release = &release_imstt_par; info->pseudo_palette = (void *) (par + 1); init_imstt(info, pdev);
@@ -1515,19 +1512,25 @@ return 0; } +static void release_imstt_par(struct fb_info *info) { + struct imstt_par *par = info->par; + struct pci_dev *pdev = to_pci_dev(info->class_dev.dev); + int size = pci_resource_len(pdev, 0); + + iounmap(par->cmap_regs); + iounmap(par->dc_regs); + iounmap(info->screen_base); + release_mem_region(info->fix.smem_start, size); +} + 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; - int size = pci_resource_len(pdev, 0); unregister_framebuffer(info); - iounmap(par->cmap_regs); - iounmap(par->dc_regs); - iounmap(info->screen_base); - release_mem_region(info->fix.smem_start, size); - kfree(info); + + pci_set_drvdata(pdev, NULL); } #ifndef MODULE
Luca -- Reply-To: kronos@kronoz.cjb.net Home: http://kronoz.cjb.net "It is more complicated than you think" -- The Eighth Networking Truth from RFC 1925 ------------------------------------------------------- This sf.net email is sponsored by:ThinkGeek Welcome to geek heaven. http://thinkgeek.com/sf