]> git.karo-electronics.de Git - linux-beck.git/commitdiff
staging: xillybus: Use devm_ API on probe and remove
authorEli Billauer <eli.billauer@gmail.com>
Sun, 11 May 2014 16:53:46 +0000 (19:53 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 23 May 2014 17:11:48 +0000 (02:11 +0900)
Suggested-by: Baruch Siach <baruch@tkos.co.il>
Signed-off-by: Eli Billauer <eli.billauer@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/xillybus/xillybus.h
drivers/staging/xillybus/xillybus_core.c
drivers/staging/xillybus/xillybus_of.c
drivers/staging/xillybus/xillybus_pcie.c

index e5e91d6128851ecc487108cda67e058e0a6d3b00..78a749a7a1c1de72f48b29fbe3e8da7c816840b1 100644 (file)
@@ -116,7 +116,6 @@ struct xilly_endpoint {
         */
        struct pci_dev *pdev;
        struct device *dev;
-       struct resource res; /* OF devices only */
        struct xilly_endpoint_hardware *ephw;
 
        struct list_head ep_list;
index b0a6696f2da02949c61762cd493618b8e2da57ac..fe8f9d28b03ba7bf84ce3c50ecccb23d67bee406 100644 (file)
@@ -2094,7 +2094,7 @@ struct xilly_endpoint *xillybus_init_endpoint(struct pci_dev *pdev,
 {
        struct xilly_endpoint *endpoint;
 
-       endpoint = kzalloc(sizeof(*endpoint), GFP_KERNEL);
+       endpoint = devm_kzalloc(dev, sizeof(*endpoint), GFP_KERNEL);
        if (!endpoint) {
                dev_err(dev, "Failed to allocate memory. Aborting.\n");
                return NULL;
index 23a609b0ab1d5201d7ef837e8f26377da1cef6bf..46ea010b4ac65afc7eadc1d016bb062ddd01dce9 100644 (file)
@@ -19,6 +19,7 @@
 #include <linux/of_address.h>
 #include <linux/of_device.h>
 #include <linux/of_platform.h>
+#include <linux/err.h>
 #include "xillybus.h"
 
 MODULE_DESCRIPTION("Xillybus driver for Open Firmware");
@@ -123,6 +124,7 @@ static int xilly_drv_probe(struct platform_device *op)
        struct xilly_endpoint *endpoint;
        int rc = 0;
        int irq;
+       struct resource res;
        struct xilly_endpoint_hardware *ephw = &of_hw;
 
        if (of_property_read_bool(dev->of_node, "dma-coherent"))
@@ -135,38 +137,26 @@ static int xilly_drv_probe(struct platform_device *op)
 
        dev_set_drvdata(dev, endpoint);
 
-       rc = of_address_to_resource(dev->of_node, 0, &endpoint->res);
+       rc = of_address_to_resource(dev->of_node, 0, &res);
        if (rc) {
                dev_warn(endpoint->dev,
                         "Failed to obtain device tree resource\n");
-               goto failed_request_regions;
+               return rc;
        }
 
-       if  (!request_mem_region(endpoint->res.start,
-                                resource_size(&endpoint->res), xillyname)) {
-               dev_err(endpoint->dev,
-                       "request_mem_region failed. Aborting.\n");
-               rc = -EBUSY;
-               goto failed_request_regions;
-       }
+       endpoint->registers = devm_ioremap_resource(dev, &res);
 
-       endpoint->registers = of_iomap(dev->of_node, 0);
-       if (!endpoint->registers) {
-               dev_err(endpoint->dev,
-                       "Failed to map I/O memory. Aborting.\n");
-               rc = -EIO;
-               goto failed_iomap0;
-       }
+       if (IS_ERR(endpoint->registers))
+               return PTR_ERR(endpoint->registers);
 
        irq = irq_of_parse_and_map(dev->of_node, 0);
 
-       rc = request_irq(irq, xillybus_isr, 0, xillyname, endpoint);
+       rc = devm_request_irq(dev, irq, xillybus_isr, 0, xillyname, endpoint);
 
        if (rc) {
                dev_err(endpoint->dev,
                        "Failed to register IRQ handler. Aborting.\n");
-               rc = -ENODEV;
-               goto failed_register_irq;
+               return -ENODEV;
        }
 
        rc = xillybus_endpoint_discovery(endpoint);
@@ -174,18 +164,8 @@ static int xilly_drv_probe(struct platform_device *op)
        if (!rc)
                return 0;
 
-       free_irq(irq, endpoint);
-
-failed_register_irq:
-       iounmap(endpoint->registers);
-failed_iomap0:
-       release_mem_region(endpoint->res.start,
-                          resource_size(&endpoint->res));
-
-failed_request_regions:
        xillybus_do_cleanup(&endpoint->cleanup, endpoint);
 
-       kfree(endpoint);
        return rc;
 }
 
@@ -193,20 +173,11 @@ static int xilly_drv_remove(struct platform_device *op)
 {
        struct device *dev = &op->dev;
        struct xilly_endpoint *endpoint = dev_get_drvdata(dev);
-       int irq = irq_of_parse_and_map(dev->of_node, 0);
 
        xillybus_endpoint_remove(endpoint);
 
-       free_irq(irq, endpoint);
-
-       iounmap(endpoint->registers);
-       release_mem_region(endpoint->res.start,
-                          resource_size(&endpoint->res));
-
        xillybus_do_cleanup(&endpoint->cleanup, endpoint);
 
-       kfree(endpoint);
-
        return 0;
 }
 
index 51426d80ca7b85f13dc50f2df182a7c89ce9d7d4..a4fe51c90e92f3858b333b45899d837e92821f34 100644 (file)
@@ -141,38 +141,32 @@ static int xilly_probe(struct pci_dev *pdev,
 
        pci_set_drvdata(pdev, endpoint);
 
-       rc = pci_enable_device(pdev);
-
-       /* L0s has caused packet drops. No power saving, thank you. */
-
-       pci_disable_link_state(pdev, PCIE_LINK_STATE_L0S);
+       rc = pcim_enable_device(pdev);
 
        if (rc) {
                dev_err(endpoint->dev,
-                       "pci_enable_device() failed. Aborting.\n");
-               goto no_enable;
+                       "pcim_enable_device() failed. Aborting.\n");
+               return rc;
        }
 
+       /* L0s has caused packet drops. No power saving, thank you. */
+
+       pci_disable_link_state(pdev, PCIE_LINK_STATE_L0S);
+
        if (!(pci_resource_flags(pdev, 0) & IORESOURCE_MEM)) {
                dev_err(endpoint->dev,
                        "Incorrect BAR configuration. Aborting.\n");
-               rc = -ENODEV;
-               goto bad_bar;
+               return -ENODEV;
        }
 
-       rc = pci_request_regions(pdev, xillyname);
+       rc = pcim_iomap_regions(pdev, 0x01, xillyname);
        if (rc) {
                dev_err(endpoint->dev,
-                       "pci_request_regions() failed. Aborting.\n");
-               goto failed_request_regions;
+                       "pcim_iomap_regions() failed. Aborting.\n");
+               return rc;
        }
 
-       endpoint->registers = pci_iomap(pdev, 0, 128);
-       if (!endpoint->registers) {
-               dev_err(endpoint->dev, "Failed to map BAR 0. Aborting.\n");
-               rc = -EIO;
-               goto failed_iomap0;
-       }
+       endpoint->registers = pcim_iomap_table(pdev)[0];
 
        pci_set_master(pdev);
 
@@ -180,16 +174,15 @@ static int xilly_probe(struct pci_dev *pdev,
        if (pci_enable_msi(pdev)) {
                dev_err(endpoint->dev,
                        "Failed to enable MSI interrupts. Aborting.\n");
-               rc = -ENODEV;
-               goto failed_enable_msi;
+               return -ENODEV;
        }
-       rc = request_irq(pdev->irq, xillybus_isr, 0, xillyname, endpoint);
+       rc = devm_request_irq(&pdev->dev, pdev->irq, xillybus_isr, 0,
+                             xillyname, endpoint);
 
        if (rc) {
                dev_err(endpoint->dev,
                        "Failed to register MSI handler. Aborting.\n");
-               rc = -ENODEV;
-               goto failed_register_msi;
+               return -ENODEV;
        }
 
        /*
@@ -203,8 +196,7 @@ static int xilly_probe(struct pci_dev *pdev,
                endpoint->dma_using_dac = 0;
        else {
                dev_err(endpoint->dev, "Failed to set DMA mask. Aborting.\n");
-               rc = -ENODEV;
-               goto failed_dmamask;
+               return -ENODEV;
        }
 
        rc = xillybus_endpoint_discovery(endpoint);
@@ -212,22 +204,8 @@ static int xilly_probe(struct pci_dev *pdev,
        if (!rc)
                return 0;
 
-failed_dmamask:
-       free_irq(pdev->irq, endpoint);
-failed_register_msi:
-       pci_disable_msi(pdev);
-failed_enable_msi:
-       /* pci_clear_master(pdev); Nobody else seems to do this */
-       pci_iounmap(pdev, endpoint->registers);
-failed_iomap0:
-       pci_release_regions(pdev);
-failed_request_regions:
-bad_bar:
-       pci_disable_device(pdev);
-no_enable:
        xillybus_do_cleanup(&endpoint->cleanup, endpoint);
 
-       kfree(endpoint);
        return rc;
 }
 
@@ -237,16 +215,7 @@ static void xilly_remove(struct pci_dev *pdev)
 
        xillybus_endpoint_remove(endpoint);
 
-       free_irq(pdev->irq, endpoint);
-
-       pci_disable_msi(pdev);
-       pci_iounmap(pdev, endpoint->registers);
-       pci_release_regions(pdev);
-       pci_disable_device(pdev);
-
        xillybus_do_cleanup(&endpoint->cleanup, endpoint);
-
-       kfree(endpoint);
 }
 
 MODULE_DEVICE_TABLE(pci, xillyids);