drivers/video/mbx/mbxfb.c: use devm_ functions
authorDamien Cassou <damien.cassou@lifl.fr>
Tue, 31 Jul 2012 16:39:18 +0000 (18:39 +0200)
committerFlorian Tobias Schandinat <FlorianSchandinat@gmx.de>
Thu, 23 Aug 2012 13:01:04 +0000 (13:01 +0000)
The various devm_ functions allocate memory that is released when a driver
detaches.  This patch uses these functions for data that is allocated in
the probe function of a platform device and is only freed in the remove
function.

Signed-off-by: Damien Cassou <damien.cassou@lifl.fr>
Signed-off-by: Florian Tobias Schandinat <FlorianSchandinat@gmx.de>
drivers/video/mbx/mbxfb.c

index 85e4f44..9229acf 100644 (file)
@@ -939,8 +939,9 @@ static int __devinit mbxfb_probe(struct platform_device *dev)
        }
        mfbi->reg_phys_addr = mfbi->reg_res->start;
 
-       mfbi->reg_virt_addr = ioremap_nocache(mfbi->reg_phys_addr,
-                                             res_size(mfbi->reg_req));
+       mfbi->reg_virt_addr = devm_ioremap_nocache(&dev->dev,
+                                                  mfbi->reg_phys_addr,
+                                                  res_size(mfbi->reg_req));
        if (!mfbi->reg_virt_addr) {
                dev_err(&dev->dev, "failed to ioremap Marathon registers\n");
                ret = -EINVAL;
@@ -948,12 +949,12 @@ static int __devinit mbxfb_probe(struct platform_device *dev)
        }
        virt_base_2700 = mfbi->reg_virt_addr;
 
-       mfbi->fb_virt_addr = ioremap_nocache(mfbi->fb_phys_addr,
-                                            res_size(mfbi->fb_req));
+       mfbi->fb_virt_addr = devm_ioremap_nocache(&dev->dev, mfbi->fb_phys_addr,
+                                                 res_size(mfbi->fb_req));
        if (!mfbi->fb_virt_addr) {
                dev_err(&dev->dev, "failed to ioremap frame buffer\n");
                ret = -EINVAL;
-               goto err4;
+               goto err3;
        }
 
        fbi->screen_base = (char __iomem *)(mfbi->fb_virt_addr + 0x60000);
@@ -971,7 +972,7 @@ static int __devinit mbxfb_probe(struct platform_device *dev)
        if (ret < 0) {
                dev_err(&dev->dev, "fb_alloc_cmap failed\n");
                ret = -EINVAL;
-               goto err5;
+               goto err3;
        }
 
        platform_set_drvdata(dev, fbi);
@@ -996,10 +997,6 @@ static int __devinit mbxfb_probe(struct platform_device *dev)
 
 err6:
        fb_dealloc_cmap(&fbi->cmap);
-err5:
-       iounmap(mfbi->fb_virt_addr);
-err4:
-       iounmap(mfbi->reg_virt_addr);
 err3:
        release_mem_region(mfbi->reg_res->start, res_size(mfbi->reg_res));
 err2:
@@ -1026,10 +1023,7 @@ static int __devexit mbxfb_remove(struct platform_device *dev)
                        if (mfbi->platform_remove)
                                mfbi->platform_remove(fbi);
 
-                       if (mfbi->fb_virt_addr)
-                               iounmap(mfbi->fb_virt_addr);
-                       if (mfbi->reg_virt_addr)
-                               iounmap(mfbi->reg_virt_addr);
+
                        if (mfbi->reg_req)
                                release_mem_region(mfbi->reg_req->start,
                                                   res_size(mfbi->reg_req));