spi: rcar: Use devm_* managed allocators

This simplies error and cleanup code paths.

Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Signed-off-by: Mark Brown <broonie@linaro.org>
This commit is contained in:
Laurent Pinchart 2013-11-27 01:41:46 +01:00 committed by Mark Brown
parent 5ffbe2d90d
commit 5d79e9ac89
1 changed files with 13 additions and 25 deletions

View File

@ -889,9 +889,6 @@ static int rspi_remove(struct platform_device *pdev)
spi_unregister_master(rspi->master); spi_unregister_master(rspi->master);
rspi_release_dma(rspi); rspi_release_dma(rspi);
free_irq(platform_get_irq(pdev, 0), rspi);
clk_put(rspi->clk);
iounmap(rspi->addr);
return 0; return 0;
} }
@ -913,12 +910,6 @@ static int rspi_probe(struct platform_device *pdev)
dev_err(&pdev->dev, "there is no set_config_register\n"); dev_err(&pdev->dev, "there is no set_config_register\n");
return -ENODEV; return -ENODEV;
} }
/* get base addr */
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
if (unlikely(res == NULL)) {
dev_err(&pdev->dev, "invalid resource\n");
return -EINVAL;
}
irq = platform_get_irq(pdev, 0); irq = platform_get_irq(pdev, 0);
if (irq < 0) { if (irq < 0) {
@ -936,19 +927,20 @@ static int rspi_probe(struct platform_device *pdev)
platform_set_drvdata(pdev, rspi); platform_set_drvdata(pdev, rspi);
rspi->ops = ops; rspi->ops = ops;
rspi->master = master; rspi->master = master;
rspi->addr = ioremap(res->start, resource_size(res));
if (rspi->addr == NULL) { res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
dev_err(&pdev->dev, "ioremap error.\n"); rspi->addr = devm_ioremap_resource(&pdev->dev, res);
ret = -ENOMEM; if (IS_ERR(rspi->addr)) {
ret = PTR_ERR(rspi->addr);
goto error1; goto error1;
} }
snprintf(clk_name, sizeof(clk_name), "%s%d", id_entry->name, pdev->id); snprintf(clk_name, sizeof(clk_name), "%s%d", id_entry->name, pdev->id);
rspi->clk = clk_get(&pdev->dev, clk_name); rspi->clk = devm_clk_get(&pdev->dev, clk_name);
if (IS_ERR(rspi->clk)) { if (IS_ERR(rspi->clk)) {
dev_err(&pdev->dev, "cannot get clock\n"); dev_err(&pdev->dev, "cannot get clock\n");
ret = PTR_ERR(rspi->clk); ret = PTR_ERR(rspi->clk);
goto error2; goto error1;
} }
clk_enable(rspi->clk); clk_enable(rspi->clk);
@ -966,36 +958,32 @@ static int rspi_probe(struct platform_device *pdev)
master->transfer = rspi_transfer; master->transfer = rspi_transfer;
master->cleanup = rspi_cleanup; master->cleanup = rspi_cleanup;
ret = request_irq(irq, rspi_irq, 0, dev_name(&pdev->dev), rspi); ret = devm_request_irq(&pdev->dev, irq, rspi_irq, 0,
dev_name(&pdev->dev), rspi);
if (ret < 0) { if (ret < 0) {
dev_err(&pdev->dev, "request_irq error\n"); dev_err(&pdev->dev, "request_irq error\n");
goto error3; goto error1;
} }
rspi->irq = irq; rspi->irq = irq;
ret = rspi_request_dma(rspi, pdev); ret = rspi_request_dma(rspi, pdev);
if (ret < 0) { if (ret < 0) {
dev_err(&pdev->dev, "rspi_request_dma failed.\n"); dev_err(&pdev->dev, "rspi_request_dma failed.\n");
goto error4; goto error2;
} }
ret = spi_register_master(master); ret = spi_register_master(master);
if (ret < 0) { if (ret < 0) {
dev_err(&pdev->dev, "spi_register_master error.\n"); dev_err(&pdev->dev, "spi_register_master error.\n");
goto error4; goto error2;
} }
dev_info(&pdev->dev, "probed\n"); dev_info(&pdev->dev, "probed\n");
return 0; return 0;
error4:
rspi_release_dma(rspi);
free_irq(irq, rspi);
error3:
clk_put(rspi->clk);
error2: error2:
iounmap(rspi->addr); rspi_release_dma(rspi);
error1: error1:
spi_master_put(master); spi_master_put(master);