aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSachin Kamat <sachin.kamat@linaro.org>2012-06-19 02:17:39 -0400
committerInki Dae <inki.dae@samsung.com>2012-07-26 22:13:55 -0400
commitedc572662a97773053a8d46a59794a08467f5115 (patch)
tree554fa5e79b7a86d7cc495de9cbbd66be12e13e9f
parent2fb16de3275fc49eb25f673b23752c590bfc10ba (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.c40
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
902err_req_irq:
903err_req_region_irq:
904 iounmap(ctx->regs);
905
906err_req_region_io:
907 release_resource(ctx->regs_res);
908 kfree(ctx->regs_res);
909
910err_clk: 894err_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
918err_clk_get: 902err_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