diff options
author | Sachin Kamat <sachin.kamat@linaro.org> | 2012-06-19 02:17:39 -0400 |
---|---|---|
committer | Inki Dae <inki.dae@samsung.com> | 2012-07-26 22:13:55 -0400 |
commit | edc572662a97773053a8d46a59794a08467f5115 (patch) | |
tree | 554fa5e79b7a86d7cc495de9cbbd66be12e13e9f | |
parent | 2fb16de3275fc49eb25f673b23752c590bfc10ba (diff) |
drm/exynos: Use devm_* functions in exynos_drm_fimd.c
devm_* functions are device managed functions and make error handling
and cleanup cleaner and simpler.
Signed-off-by: Sachin Kamat <sachin.kamat@linaro.org>
Signed-off-by: Sachin Kamat <sachin.kamat@samsung.com>
Signed-off-by: Inki Dae <inki.dae@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
-rw-r--r-- | drivers/gpu/drm/exynos/exynos_drm_fimd.c | 40 |
1 files changed, 8 insertions, 32 deletions
diff --git a/drivers/gpu/drm/exynos/exynos_drm_fimd.c b/drivers/gpu/drm/exynos/exynos_drm_fimd.c index 29fdbfeb43cb..a68d2b313f03 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_fimd.c +++ b/drivers/gpu/drm/exynos/exynos_drm_fimd.c | |||
@@ -78,7 +78,6 @@ struct fimd_context { | |||
78 | struct drm_crtc *crtc; | 78 | struct drm_crtc *crtc; |
79 | struct clk *bus_clk; | 79 | struct clk *bus_clk; |
80 | struct clk *lcd_clk; | 80 | struct clk *lcd_clk; |
81 | struct resource *regs_res; | ||
82 | void __iomem *regs; | 81 | void __iomem *regs; |
83 | struct fimd_win_data win_data[WINDOWS_NR]; | 82 | struct fimd_win_data win_data[WINDOWS_NR]; |
84 | unsigned int clkdiv; | 83 | unsigned int clkdiv; |
@@ -813,7 +812,7 @@ static int __devinit fimd_probe(struct platform_device *pdev) | |||
813 | return -EINVAL; | 812 | return -EINVAL; |
814 | } | 813 | } |
815 | 814 | ||
816 | ctx = kzalloc(sizeof(*ctx), GFP_KERNEL); | 815 | ctx = devm_kzalloc(&pdev->dev, sizeof(*ctx), GFP_KERNEL); |
817 | if (!ctx) | 816 | if (!ctx) |
818 | return -ENOMEM; | 817 | return -ENOMEM; |
819 | 818 | ||
@@ -838,33 +837,26 @@ static int __devinit fimd_probe(struct platform_device *pdev) | |||
838 | goto err_clk; | 837 | goto err_clk; |
839 | } | 838 | } |
840 | 839 | ||
841 | ctx->regs_res = request_mem_region(res->start, resource_size(res), | 840 | ctx->regs = devm_request_and_ioremap(&pdev->dev, res); |
842 | dev_name(dev)); | ||
843 | if (!ctx->regs_res) { | ||
844 | dev_err(dev, "failed to claim register region\n"); | ||
845 | ret = -ENOENT; | ||
846 | goto err_clk; | ||
847 | } | ||
848 | |||
849 | ctx->regs = ioremap(res->start, resource_size(res)); | ||
850 | if (!ctx->regs) { | 841 | if (!ctx->regs) { |
851 | dev_err(dev, "failed to map registers\n"); | 842 | dev_err(dev, "failed to map registers\n"); |
852 | ret = -ENXIO; | 843 | ret = -ENXIO; |
853 | goto err_req_region_io; | 844 | goto err_clk; |
854 | } | 845 | } |
855 | 846 | ||
856 | res = platform_get_resource(pdev, IORESOURCE_IRQ, 0); | 847 | res = platform_get_resource(pdev, IORESOURCE_IRQ, 0); |
857 | if (!res) { | 848 | if (!res) { |
858 | dev_err(dev, "irq request failed.\n"); | 849 | dev_err(dev, "irq request failed.\n"); |
859 | goto err_req_region_irq; | 850 | goto err_clk; |
860 | } | 851 | } |
861 | 852 | ||
862 | ctx->irq = res->start; | 853 | ctx->irq = res->start; |
863 | 854 | ||
864 | ret = request_irq(ctx->irq, fimd_irq_handler, 0, "drm_fimd", ctx); | 855 | ret = devm_request_irq(&pdev->dev, ctx->irq, fimd_irq_handler, |
865 | if (ret < 0) { | 856 | 0, "drm_fimd", ctx); |
857 | if (ret) { | ||
866 | dev_err(dev, "irq request failed.\n"); | 858 | dev_err(dev, "irq request failed.\n"); |
867 | goto err_req_irq; | 859 | goto err_clk; |
868 | } | 860 | } |
869 | 861 | ||
870 | ctx->vidcon0 = pdata->vidcon0; | 862 | ctx->vidcon0 = pdata->vidcon0; |
@@ -899,14 +891,6 @@ static int __devinit fimd_probe(struct platform_device *pdev) | |||
899 | 891 | ||
900 | return 0; | 892 | return 0; |
901 | 893 | ||
902 | err_req_irq: | ||
903 | err_req_region_irq: | ||
904 | iounmap(ctx->regs); | ||
905 | |||
906 | err_req_region_io: | ||
907 | release_resource(ctx->regs_res); | ||
908 | kfree(ctx->regs_res); | ||
909 | |||
910 | err_clk: | 894 | err_clk: |
911 | clk_disable(ctx->lcd_clk); | 895 | clk_disable(ctx->lcd_clk); |
912 | clk_put(ctx->lcd_clk); | 896 | clk_put(ctx->lcd_clk); |
@@ -916,7 +900,6 @@ err_bus_clk: | |||
916 | clk_put(ctx->bus_clk); | 900 | clk_put(ctx->bus_clk); |
917 | 901 | ||
918 | err_clk_get: | 902 | err_clk_get: |
919 | kfree(ctx); | ||
920 | return ret; | 903 | return ret; |
921 | } | 904 | } |
922 | 905 | ||
@@ -944,13 +927,6 @@ out: | |||
944 | clk_put(ctx->lcd_clk); | 927 | clk_put(ctx->lcd_clk); |
945 | clk_put(ctx->bus_clk); | 928 | clk_put(ctx->bus_clk); |
946 | 929 | ||
947 | iounmap(ctx->regs); | ||
948 | release_resource(ctx->regs_res); | ||
949 | kfree(ctx->regs_res); | ||
950 | free_irq(ctx->irq, ctx); | ||
951 | |||
952 | kfree(ctx); | ||
953 | |||
954 | return 0; | 930 | return 0; |
955 | } | 931 | } |
956 | 932 | ||