diff options
author | Marc Dietrich <marvin24@gmx.de> | 2012-06-24 21:25:16 (GMT) |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2012-06-25 17:55:37 (GMT) |
commit | f5e3352e5185ef37700da9a51c333559381fe8fd (patch) | |
tree | 18eb3873fe94122b1885f2ac6252e3a75949d241 /drivers/staging/nvec/nvec.c | |
parent | 59d6a29e554d891a513476c13a6657825f8be270 (diff) | |
download | linux-fsl-qoriq-f5e3352e5185ef37700da9a51c333559381fe8fd.tar.xz |
staging: nvec: convert to devm_ functions
This patch cleanups the nvec and its childs by replacing calls to
resource allocations by their devm_* equivalents.
Signed-off-by: Marc Dietrich <marvin24@gmx.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/staging/nvec/nvec.c')
-rw-r--r-- | drivers/staging/nvec/nvec.c | 44 |
1 files changed, 15 insertions, 29 deletions
diff --git a/drivers/staging/nvec/nvec.c b/drivers/staging/nvec/nvec.c index 3c60088..47ffdb8 100644 --- a/drivers/staging/nvec/nvec.c +++ b/drivers/staging/nvec/nvec.c @@ -719,10 +719,9 @@ static int __devinit tegra_nvec_probe(struct platform_device *pdev) struct nvec_chip *nvec; struct nvec_msg *msg; struct resource *res; - struct resource *iomem; void __iomem *base; - nvec = kzalloc(sizeof(struct nvec_chip), GFP_KERNEL); + nvec = devm_kzalloc(&pdev->dev, sizeof(struct nvec_chip), GFP_KERNEL); if (nvec == NULL) { dev_err(&pdev->dev, "failed to reserve memory\n"); return -ENOMEM; @@ -737,15 +736,15 @@ static int __devinit tegra_nvec_probe(struct platform_device *pdev) nvec->gpio = of_get_named_gpio(nvec->dev->of_node, "request-gpios", 0); if (nvec->gpio < 0) { dev_err(&pdev->dev, "no gpio specified"); - goto failed; + return -ENODEV; } if (of_property_read_u32(nvec->dev->of_node, "slave-addr", &nvec->i2c_addr)) { dev_err(&pdev->dev, "no i2c address specified"); - goto failed; + return -ENODEV; } } else { dev_err(&pdev->dev, "no platform data\n"); - goto failed; + return -ENODEV; } res = platform_get_resource(pdev, IORESOURCE_MEM, 0); @@ -754,13 +753,7 @@ static int __devinit tegra_nvec_probe(struct platform_device *pdev) return -ENODEV; } - iomem = request_mem_region(res->start, resource_size(res), pdev->name); - if (!iomem) { - dev_err(&pdev->dev, "I2C region already claimed\n"); - return -EBUSY; - } - - base = ioremap(iomem->start, resource_size(iomem)); + base = devm_request_and_ioremap(&pdev->dev, res); if (!base) { dev_err(&pdev->dev, "Can't ioremap I2C region\n"); return -ENOMEM; @@ -769,14 +762,13 @@ static int __devinit tegra_nvec_probe(struct platform_device *pdev) res = platform_get_resource(pdev, IORESOURCE_IRQ, 0); if (!res) { dev_err(&pdev->dev, "no irq resource?\n"); - ret = -ENODEV; - goto err_iounmap; + return -ENODEV; } i2c_clk = clk_get_sys("tegra-i2c.2", NULL); if (IS_ERR(i2c_clk)) { dev_err(nvec->dev, "failed to get controller clock\n"); - goto err_iounmap; + return -ENODEV; } nvec->base = base; @@ -797,16 +789,20 @@ static int __devinit tegra_nvec_probe(struct platform_device *pdev) INIT_WORK(&nvec->tx_work, nvec_request_master); nvec->wq = alloc_workqueue("nvec", WQ_NON_REENTRANT, 2); - err = gpio_request_one(nvec->gpio, GPIOF_OUT_INIT_HIGH, "nvec gpio"); + err = devm_gpio_request_one(&pdev->dev, nvec->gpio, GPIOF_OUT_INIT_HIGH, + "nvec gpio"); if (err < 0) { dev_err(nvec->dev, "couldn't request gpio\n"); - goto failed; + destroy_workqueue(nvec->wq); + return -ENODEV; } - err = request_irq(nvec->irq, nvec_interrupt, 0, "nvec", nvec); + err = devm_request_irq(&pdev->dev, nvec->irq, nvec_interrupt, 0, + "nvec", nvec); if (err) { dev_err(nvec->dev, "couldn't request irq\n"); - goto failed; + destroy_workqueue(nvec->wq); + return -ENODEV; } disable_irq(nvec->irq); @@ -851,12 +847,6 @@ static int __devinit tegra_nvec_probe(struct platform_device *pdev) nvec_write_async(nvec, "\x01\x01\x01\x00\x00\x80\x00", 7); return 0; - -err_iounmap: - iounmap(base); -failed: - kfree(nvec); - return -ENOMEM; } static int __devexit tegra_nvec_remove(struct platform_device *pdev) @@ -865,11 +855,7 @@ static int __devexit tegra_nvec_remove(struct platform_device *pdev) nvec_write_async(nvec, EC_DISABLE_EVENT_REPORTING, 3); mfd_remove_devices(nvec->dev); - free_irq(nvec->irq, &nvec_interrupt); - iounmap(nvec->base); - gpio_free(nvec->gpio); destroy_workqueue(nvec->wq); - kfree(nvec); return 0; } |