Commit 7d456e4e authored by Sachin Kamat's avatar Sachin Kamat Committed by Jonathan Cameron

staging: iio: lpc32xx_adc: Use devm_* APIs

devm_* APIs are device managed and make code simpler.
This also fixes an error in return type during clk_get
failure.
Signed-off-by: default avatarSachin Kamat <sachin.kamat@linaro.org>
Cc: Roland Stigge <stigge@antcom.de>
Signed-off-by: default avatarJonathan Cameron <jic23@kernel.org>
parent 6a88fa48
...@@ -137,43 +137,39 @@ static int lpc32xx_adc_probe(struct platform_device *pdev) ...@@ -137,43 +137,39 @@ static int lpc32xx_adc_probe(struct platform_device *pdev)
res = platform_get_resource(pdev, IORESOURCE_MEM, 0); res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
if (!res) { if (!res) {
dev_err(&pdev->dev, "failed to get platform I/O memory\n"); dev_err(&pdev->dev, "failed to get platform I/O memory\n");
retval = -EBUSY; return -EBUSY;
goto errout1;
} }
iodev = iio_device_alloc(sizeof(struct lpc32xx_adc_info)); iodev = devm_iio_device_alloc(&pdev->dev, sizeof(*info));
if (!iodev) { if (!iodev)
dev_err(&pdev->dev, "failed allocating iio device\n"); return -ENOMEM;
retval = -ENOMEM;
goto errout1;
}
info = iio_priv(iodev); info = iio_priv(iodev);
info->adc_base = ioremap(res->start, resource_size(res)); info->adc_base = devm_ioremap(&pdev->dev, res->start,
resource_size(res));
if (!info->adc_base) { if (!info->adc_base) {
dev_err(&pdev->dev, "failed mapping memory\n"); dev_err(&pdev->dev, "failed mapping memory\n");
retval = -EBUSY; return -EBUSY;
goto errout2;
} }
info->clk = clk_get(&pdev->dev, NULL); info->clk = devm_clk_get(&pdev->dev, NULL);
if (IS_ERR(info->clk)) { if (IS_ERR(info->clk)) {
dev_err(&pdev->dev, "failed getting clock\n"); dev_err(&pdev->dev, "failed getting clock\n");
goto errout3; return PTR_ERR(info->clk);
} }
irq = platform_get_irq(pdev, 0); irq = platform_get_irq(pdev, 0);
if ((irq < 0) || (irq >= NR_IRQS)) { if ((irq < 0) || (irq >= NR_IRQS)) {
dev_err(&pdev->dev, "failed getting interrupt resource\n"); dev_err(&pdev->dev, "failed getting interrupt resource\n");
retval = -EINVAL; return -EINVAL;
goto errout4;
} }
retval = request_irq(irq, lpc32xx_adc_isr, 0, MOD_NAME, info); retval = devm_request_irq(&pdev->dev, irq, lpc32xx_adc_isr, 0,
MOD_NAME, info);
if (retval < 0) { if (retval < 0) {
dev_err(&pdev->dev, "failed requesting interrupt\n"); dev_err(&pdev->dev, "failed requesting interrupt\n");
goto errout4; return retval;
} }
platform_set_drvdata(pdev, iodev); platform_set_drvdata(pdev, iodev);
...@@ -189,35 +185,18 @@ static int lpc32xx_adc_probe(struct platform_device *pdev) ...@@ -189,35 +185,18 @@ static int lpc32xx_adc_probe(struct platform_device *pdev)
retval = iio_device_register(iodev); retval = iio_device_register(iodev);
if (retval) if (retval)
goto errout5; return retval;
dev_info(&pdev->dev, "LPC32XX ADC driver loaded, IRQ %d\n", irq); dev_info(&pdev->dev, "LPC32XX ADC driver loaded, IRQ %d\n", irq);
return 0; return 0;
errout5:
free_irq(irq, info);
errout4:
clk_put(info->clk);
errout3:
iounmap(info->adc_base);
errout2:
iio_device_free(iodev);
errout1:
return retval;
} }
static int lpc32xx_adc_remove(struct platform_device *pdev) static int lpc32xx_adc_remove(struct platform_device *pdev)
{ {
struct iio_dev *iodev = platform_get_drvdata(pdev); struct iio_dev *iodev = platform_get_drvdata(pdev);
struct lpc32xx_adc_info *info = iio_priv(iodev);
int irq = platform_get_irq(pdev, 0);
iio_device_unregister(iodev); iio_device_unregister(iodev);
free_irq(irq, info);
clk_put(info->clk);
iounmap(info->adc_base);
iio_device_free(iodev);
return 0; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment