Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drivers/iio/adc/at91_adc.c: use devm_ functions

The various devm_ functions allocate memory that is released when a driver
detaches. This patch uses these functions for data that is allocated in
the probe function of a platform device and is only freed in the remove
function.

The call to platform_get_resource(pdev, IORESOURCE_MEM, 0) is moved coser
to the call to devm_request_and_ioremap, which is th first use of the
result of platform_get_resource.

This does not use devm_request_irq to ensure that free_irq is executed
before its idev argument is freed.

Signed-off-by: Julia Lawall <Julia.Lawall@lip6.fr>
Reviewed-by: Lars-Peter Clausen <lars@metafoo.de>
Signed-off-by: Jonathan Cameron <jic23@kernel.org>

authored by

Julia Lawall and committed by
Jonathan Cameron
390d75c1 d16f6dbd

+8 -34
+8 -34
drivers/iio/adc/at91_adc.c
··· 545 545 goto error_free_device; 546 546 } 547 547 548 - res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 549 - if (!res) { 550 - dev_err(&pdev->dev, "No resource defined\n"); 551 - ret = -ENXIO; 552 - goto error_ret; 553 - } 554 - 555 548 platform_set_drvdata(pdev, idev); 556 549 557 550 idev->dev.parent = &pdev->dev; ··· 559 566 goto error_free_device; 560 567 } 561 568 562 - if (!request_mem_region(res->start, resource_size(res), 563 - "AT91 adc registers")) { 564 - dev_err(&pdev->dev, "Resources are unavailable.\n"); 565 - ret = -EBUSY; 566 - goto error_free_device; 567 - } 569 + res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 568 570 569 - st->reg_base = ioremap(res->start, resource_size(res)); 571 + st->reg_base = devm_request_and_ioremap(&pdev->dev, res); 570 572 if (!st->reg_base) { 571 - dev_err(&pdev->dev, "Failed to map registers.\n"); 572 573 ret = -ENOMEM; 573 - goto error_release_mem; 574 + goto error_free_device; 574 575 } 575 576 576 577 /* ··· 579 592 idev); 580 593 if (ret) { 581 594 dev_err(&pdev->dev, "Failed to allocate IRQ.\n"); 582 - goto error_unmap_reg; 595 + goto error_free_device; 583 596 } 584 597 585 - st->clk = clk_get(&pdev->dev, "adc_clk"); 598 + st->clk = devm_clk_get(&pdev->dev, "adc_clk"); 586 599 if (IS_ERR(st->clk)) { 587 600 dev_err(&pdev->dev, "Failed to get the clock.\n"); 588 601 ret = PTR_ERR(st->clk); ··· 592 605 ret = clk_prepare(st->clk); 593 606 if (ret) { 594 607 dev_err(&pdev->dev, "Could not prepare the clock.\n"); 595 - goto error_free_clk; 608 + goto error_free_irq; 596 609 } 597 610 598 611 ret = clk_enable(st->clk); ··· 601 614 goto error_unprepare_clk; 602 615 } 603 616 604 - st->adc_clk = clk_get(&pdev->dev, "adc_op_clk"); 617 + st->adc_clk = devm_clk_get(&pdev->dev, "adc_op_clk"); 605 618 if (IS_ERR(st->adc_clk)) { 606 619 dev_err(&pdev->dev, "Failed to get the ADC clock.\n"); 607 620 ret = PTR_ERR(st->clk); ··· 611 624 ret = clk_prepare(st->adc_clk); 612 625 if (ret) { 613 626 dev_err(&pdev->dev, "Could not prepare the ADC clock.\n"); 614 - goto error_free_adc_clk; 627 + goto error_disable_clk; 615 628 } 616 629 617 630 ret = clk_enable(st->adc_clk); ··· 684 697 clk_disable(st->adc_clk); 685 698 error_unprepare_adc_clk: 686 699 clk_unprepare(st->adc_clk); 687 - error_free_adc_clk: 688 - clk_put(st->adc_clk); 689 700 error_disable_clk: 690 701 clk_disable(st->clk); 691 702 error_unprepare_clk: 692 703 clk_unprepare(st->clk); 693 - error_free_clk: 694 - clk_put(st->clk); 695 704 error_free_irq: 696 705 free_irq(st->irq, idev); 697 - error_unmap_reg: 698 - iounmap(st->reg_base); 699 - error_release_mem: 700 - release_mem_region(res->start, resource_size(res)); 701 706 error_free_device: 702 707 iio_device_free(idev); 703 708 error_ret: ··· 699 720 static int __devexit at91_adc_remove(struct platform_device *pdev) 700 721 { 701 722 struct iio_dev *idev = platform_get_drvdata(pdev); 702 - struct resource *res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 703 723 struct at91_adc_state *st = iio_priv(idev); 704 724 705 725 iio_device_unregister(idev); 706 726 at91_adc_trigger_remove(idev); 707 727 at91_adc_buffer_remove(idev); 708 728 clk_disable_unprepare(st->adc_clk); 709 - clk_put(st->adc_clk); 710 729 clk_disable(st->clk); 711 730 clk_unprepare(st->clk); 712 - clk_put(st->clk); 713 731 free_irq(st->irq, idev); 714 - iounmap(st->reg_base); 715 - release_mem_region(res->start, resource_size(res)); 716 732 iio_device_free(idev); 717 733 718 734 return 0;