mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-06 16:49:22 +00:00
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: H Hartley Sweeten <hsweeten@visionengravers.com> Tested-by: Mika Westerberg <mika.westerberg@iki.fi> Acked-by: Mika Westerberg <mika.westerberg@iki.fi> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
This commit is contained in:
parent
e7cff0abf9
commit
01651babb6
1 changed files with 14 additions and 35 deletions
|
@ -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)
|
||||||
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)
|
||||||
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)
|
||||||
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)
|
||||||
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue