aboutsummaryrefslogtreecommitdiffstats
path: root/sound/soc/tegra
diff options
context:
space:
mode:
authorStephen Warren <swarren@nvidia.com>2012-04-06 13:14:04 -0400
committerMark Brown <broonie@opensource.wolfsonmicro.com>2012-04-06 13:22:06 -0400
commit17933db2e4758b0cefdf23124087b488bce24b82 (patch)
treecb9d7ffe51117b9181ec1fad2b6c08ab0b00d1eb /sound/soc/tegra
parent7613c508dfd7880cb7e17ad5eb64b9dfb0b80292 (diff)
ASoC: tegra: use devm_ APIs in SPDIF driver
The devm_ APIs remove the need to manually clean up allocations, thus removing some code. Signed-off-by: Stephen Warren <swarren@nvidia.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Diffstat (limited to 'sound/soc/tegra')
-rw-r--r--sound/soc/tegra/tegra20_spdif.c33
1 files changed, 10 insertions, 23 deletions
diff --git a/sound/soc/tegra/tegra20_spdif.c b/sound/soc/tegra/tegra20_spdif.c
index 00a2d33352f4..ef5d49ed5658 100644
--- a/sound/soc/tegra/tegra20_spdif.c
+++ b/sound/soc/tegra/tegra20_spdif.c
@@ -245,11 +245,12 @@ static __devinit int tegra20_spdif_platform_probe(struct platform_device *pdev)
245 struct resource *mem, *memregion, *dmareq; 245 struct resource *mem, *memregion, *dmareq;
246 int ret; 246 int ret;
247 247
248 spdif = kzalloc(sizeof(struct tegra20_spdif), GFP_KERNEL); 248 spdif = devm_kzalloc(&pdev->dev, sizeof(struct tegra20_spdif),
249 GFP_KERNEL);
249 if (!spdif) { 250 if (!spdif) {
250 dev_err(&pdev->dev, "Can't allocate tegra20_spdif\n"); 251 dev_err(&pdev->dev, "Can't allocate tegra20_spdif\n");
251 ret = -ENOMEM; 252 ret = -ENOMEM;
252 goto exit; 253 goto err;
253 } 254 }
254 dev_set_drvdata(&pdev->dev, spdif); 255 dev_set_drvdata(&pdev->dev, spdif);
255 256
@@ -257,7 +258,7 @@ static __devinit int tegra20_spdif_platform_probe(struct platform_device *pdev)
257 if (IS_ERR(spdif->clk_spdif_out)) { 258 if (IS_ERR(spdif->clk_spdif_out)) {
258 pr_err("Can't retrieve spdif clock\n"); 259 pr_err("Can't retrieve spdif clock\n");
259 ret = PTR_ERR(spdif->clk_spdif_out); 260 ret = PTR_ERR(spdif->clk_spdif_out);
260 goto err_free; 261 goto err;
261 } 262 }
262 263
263 mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); 264 mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
@@ -274,19 +275,19 @@ static __devinit int tegra20_spdif_platform_probe(struct platform_device *pdev)
274 goto err_clk_put; 275 goto err_clk_put;
275 } 276 }
276 277
277 memregion = request_mem_region(mem->start, resource_size(mem), 278 memregion = devm_request_mem_region(&pdev->dev, mem->start,
278 DRV_NAME); 279 resource_size(mem), DRV_NAME);
279 if (!memregion) { 280 if (!memregion) {
280 dev_err(&pdev->dev, "Memory region already claimed\n"); 281 dev_err(&pdev->dev, "Memory region already claimed\n");
281 ret = -EBUSY; 282 ret = -EBUSY;
282 goto err_clk_put; 283 goto err_clk_put;
283 } 284 }
284 285
285 spdif->regs = ioremap(mem->start, resource_size(mem)); 286 spdif->regs = devm_ioremap(&pdev->dev, mem->start, resource_size(mem));
286 if (!spdif->regs) { 287 if (!spdif->regs) {
287 dev_err(&pdev->dev, "ioremap failed\n"); 288 dev_err(&pdev->dev, "ioremap failed\n");
288 ret = -ENOMEM; 289 ret = -ENOMEM;
289 goto err_release; 290 goto err_clk_put;
290 } 291 }
291 292
292 spdif->playback_dma_data.addr = mem->start + TEGRA20_SPDIF_DATA_OUT; 293 spdif->playback_dma_data.addr = mem->start + TEGRA20_SPDIF_DATA_OUT;
@@ -298,7 +299,7 @@ static __devinit int tegra20_spdif_platform_probe(struct platform_device *pdev)
298 if (ret) { 299 if (ret) {
299 dev_err(&pdev->dev, "Could not register DAI: %d\n", ret); 300 dev_err(&pdev->dev, "Could not register DAI: %d\n", ret);
300 ret = -ENOMEM; 301 ret = -ENOMEM;
301 goto err_unmap; 302 goto err_clk_put;
302 } 303 }
303 304
304 ret = tegra_pcm_platform_register(&pdev->dev); 305 ret = tegra_pcm_platform_register(&pdev->dev);
@@ -313,37 +314,23 @@ static __devinit int tegra20_spdif_platform_probe(struct platform_device *pdev)
313 314
314err_unregister_dai: 315err_unregister_dai:
315 snd_soc_unregister_dai(&pdev->dev); 316 snd_soc_unregister_dai(&pdev->dev);
316err_unmap:
317 iounmap(spdif->regs);
318err_release:
319 release_mem_region(mem->start, resource_size(mem));
320err_clk_put: 317err_clk_put:
321 clk_put(spdif->clk_spdif_out); 318 clk_put(spdif->clk_spdif_out);
322err_free: 319err:
323 kfree(spdif);
324exit:
325 return ret; 320 return ret;
326} 321}
327 322
328static int __devexit tegra20_spdif_platform_remove(struct platform_device *pdev) 323static int __devexit tegra20_spdif_platform_remove(struct platform_device *pdev)
329{ 324{
330 struct tegra20_spdif *spdif = dev_get_drvdata(&pdev->dev); 325 struct tegra20_spdif *spdif = dev_get_drvdata(&pdev->dev);
331 struct resource *res;
332 326
333 tegra_pcm_platform_unregister(&pdev->dev); 327 tegra_pcm_platform_unregister(&pdev->dev);
334 snd_soc_unregister_dai(&pdev->dev); 328 snd_soc_unregister_dai(&pdev->dev);
335 329
336 tegra20_spdif_debug_remove(spdif); 330 tegra20_spdif_debug_remove(spdif);
337 331
338 iounmap(spdif->regs);
339
340 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
341 release_mem_region(res->start, resource_size(res));
342
343 clk_put(spdif->clk_spdif_out); 332 clk_put(spdif->clk_spdif_out);
344 333
345 kfree(spdif);
346
347 return 0; 334 return 0;
348} 335}
349 336