Commit 01651bab authored by H Hartley Sweeten's avatar H Hartley Sweeten Committed by Mark Brown

ASoC: ep93xx-i2s: use devm_* helpers to cleanup probe

Use the devm_* helpers to cleanup the probe routine. This also eliminates
having to carry the mem value in the private data for the remove.
Signed-off-by: default avatarH Hartley Sweeten <hsweeten@visionengravers.com>
Tested-by: default avatarMika Westerberg <mika.westerberg@iki.fi>
Acked-by: default avatarMika Westerberg <mika.westerberg@iki.fi>
Signed-off-by: default avatarMark Brown <broonie@opensource.wolfsonmicro.com>
parent e7cff0ab
...@@ -63,7 +63,6 @@ struct ep93xx_i2s_info { ...@@ -63,7 +63,6 @@ struct ep93xx_i2s_info {
struct clk *sclk; struct clk *sclk;
struct clk *lrclk; struct clk *lrclk;
struct ep93xx_pcm_dma_params *dma_params; struct ep93xx_pcm_dma_params *dma_params;
struct resource *mem;
void __iomem *regs; void __iomem *regs;
}; };
...@@ -373,38 +372,22 @@ static int ep93xx_i2s_probe(struct platform_device *pdev) ...@@ -373,38 +372,22 @@ static int ep93xx_i2s_probe(struct platform_device *pdev)
struct resource *res; struct resource *res;
int err; int err;
info = kzalloc(sizeof(struct ep93xx_i2s_info), GFP_KERNEL); info = devm_kzalloc(&pdev->dev, sizeof(*info), GFP_KERNEL);
if (!info) { if (!info)
err = -ENOMEM; return -ENOMEM;
goto fail;
}
dev_set_drvdata(&pdev->dev, info);
info->dma_params = ep93xx_i2s_dma_params;
res = platform_get_resource(pdev, IORESOURCE_MEM, 0); res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
if (!res) { if (!res)
err = -ENODEV; return -ENODEV;
goto fail_free_info;
}
info->mem = request_mem_region(res->start, resource_size(res), info->regs = devm_request_and_ioremap(&pdev->dev, res);
pdev->name); if (!info->regs)
if (!info->mem) { return -ENXIO;
err = -EBUSY;
goto fail_free_info;
}
info->regs = ioremap(info->mem->start, resource_size(info->mem));
if (!info->regs) {
err = -ENXIO;
goto fail_release_mem;
}
info->mclk = clk_get(&pdev->dev, "mclk"); info->mclk = clk_get(&pdev->dev, "mclk");
if (IS_ERR(info->mclk)) { if (IS_ERR(info->mclk)) {
err = PTR_ERR(info->mclk); err = PTR_ERR(info->mclk);
goto fail_unmap_mem; goto fail;
} }
info->sclk = clk_get(&pdev->dev, "sclk"); info->sclk = clk_get(&pdev->dev, "sclk");
...@@ -419,6 +402,9 @@ static int ep93xx_i2s_probe(struct platform_device *pdev) ...@@ -419,6 +402,9 @@ static int ep93xx_i2s_probe(struct platform_device *pdev)
goto fail_put_sclk; goto fail_put_sclk;
} }
dev_set_drvdata(&pdev->dev, info);
info->dma_params = ep93xx_i2s_dma_params;
err = snd_soc_register_dai(&pdev->dev, &ep93xx_i2s_dai); err = snd_soc_register_dai(&pdev->dev, &ep93xx_i2s_dai);
if (err) if (err)
goto fail_put_lrclk; goto fail_put_lrclk;
...@@ -426,17 +412,12 @@ static int ep93xx_i2s_probe(struct platform_device *pdev) ...@@ -426,17 +412,12 @@ static int ep93xx_i2s_probe(struct platform_device *pdev)
return 0; return 0;
fail_put_lrclk: fail_put_lrclk:
dev_set_drvdata(&pdev->dev, NULL);
clk_put(info->lrclk); clk_put(info->lrclk);
fail_put_sclk: fail_put_sclk:
clk_put(info->sclk); clk_put(info->sclk);
fail_put_mclk: fail_put_mclk:
clk_put(info->mclk); clk_put(info->mclk);
fail_unmap_mem:
iounmap(info->regs);
fail_release_mem:
release_mem_region(info->mem->start, resource_size(info->mem));
fail_free_info:
kfree(info);
fail: fail:
return err; return err;
} }
...@@ -446,12 +427,10 @@ static int __devexit ep93xx_i2s_remove(struct platform_device *pdev) ...@@ -446,12 +427,10 @@ static int __devexit ep93xx_i2s_remove(struct platform_device *pdev)
struct ep93xx_i2s_info *info = dev_get_drvdata(&pdev->dev); struct ep93xx_i2s_info *info = dev_get_drvdata(&pdev->dev);
snd_soc_unregister_dai(&pdev->dev); snd_soc_unregister_dai(&pdev->dev);
dev_set_drvdata(&pdev->dev, NULL);
clk_put(info->lrclk); clk_put(info->lrclk);
clk_put(info->sclk); clk_put(info->sclk);
clk_put(info->mclk); clk_put(info->mclk);
iounmap(info->regs);
release_mem_region(info->mem->start, resource_size(info->mem));
kfree(info);
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