aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media
diff options
context:
space:
mode:
authorSachin Kamat <sachin.kamat@linaro.org>2012-05-14 07:22:27 -0400
committerMauro Carvalho Chehab <mchehab@redhat.com>2012-05-20 08:07:44 -0400
commitd310f478e288ee7b2fa638339680460430e73e03 (patch)
treef11638f1fae1b473b2b332e159317e9102b325bf /drivers/media
parent5b58b95405aafbaf7362564dbcf6231836f1433c (diff)
[media] s5p-mfc: Use devm_* functions in s5p_mfc.c file
devm_* functions are device managed functions and make error handling and cleanup simpler. Signed-off-by: Sachin Kamat <sachin.kamat@linaro.org> Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/media')
-rw-r--r--drivers/media/video/s5p-mfc/s5p_mfc.c63
-rw-r--r--drivers/media/video/s5p-mfc/s5p_mfc_common.h2
2 files changed, 14 insertions, 51 deletions
diff --git a/drivers/media/video/s5p-mfc/s5p_mfc.c b/drivers/media/video/s5p-mfc/s5p_mfc.c
index 6fc22256847b..9bb68e7b5ae8 100644
--- a/drivers/media/video/s5p-mfc/s5p_mfc.c
+++ b/drivers/media/video/s5p-mfc/s5p_mfc.c
@@ -948,7 +948,7 @@ static int s5p_mfc_probe(struct platform_device *pdev)
948 int ret; 948 int ret;
949 949
950 pr_debug("%s++\n", __func__); 950 pr_debug("%s++\n", __func__);
951 dev = kzalloc(sizeof *dev, GFP_KERNEL); 951 dev = devm_kzalloc(&pdev->dev, sizeof *dev, GFP_KERNEL);
952 if (!dev) { 952 if (!dev) {
953 dev_err(&pdev->dev, "Not enough memory for MFC device\n"); 953 dev_err(&pdev->dev, "Not enough memory for MFC device\n");
954 return -ENOMEM; 954 return -ENOMEM;
@@ -959,49 +959,35 @@ static int s5p_mfc_probe(struct platform_device *pdev)
959 dev->plat_dev = pdev; 959 dev->plat_dev = pdev;
960 if (!dev->plat_dev) { 960 if (!dev->plat_dev) {
961 dev_err(&pdev->dev, "No platform data specified\n"); 961 dev_err(&pdev->dev, "No platform data specified\n");
962 ret = -ENODEV; 962 return -ENODEV;
963 goto err_dev;
964 } 963 }
965 964
966 ret = s5p_mfc_init_pm(dev); 965 ret = s5p_mfc_init_pm(dev);
967 if (ret < 0) { 966 if (ret < 0) {
968 dev_err(&pdev->dev, "failed to get mfc clock source\n"); 967 dev_err(&pdev->dev, "failed to get mfc clock source\n");
969 goto err_clk; 968 return ret;
970 } 969 }
971 970
972 res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 971 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
973 if (res == NULL) {
974 dev_err(&pdev->dev, "failed to get memory region resource\n");
975 ret = -ENOENT;
976 goto err_res;
977 }
978 972
979 dev->mfc_mem = request_mem_region(res->start, resource_size(res), 973 dev->regs_base = devm_request_and_ioremap(&pdev->dev, res);
980 pdev->name);
981 if (dev->mfc_mem == NULL) {
982 dev_err(&pdev->dev, "failed to get memory region\n");
983 ret = -ENOENT;
984 goto err_mem_reg;
985 }
986 dev->regs_base = ioremap(dev->mfc_mem->start, resource_size(dev->mfc_mem));
987 if (dev->regs_base == NULL) { 974 if (dev->regs_base == NULL) {
988 dev_err(&pdev->dev, "failed to ioremap address region\n"); 975 dev_err(&pdev->dev, "Failed to obtain io memory\n");
989 ret = -ENOENT; 976 return -ENOENT;
990 goto err_ioremap;
991 } 977 }
992 978
993 res = platform_get_resource(pdev, IORESOURCE_IRQ, 0); 979 res = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
994 if (res == NULL) { 980 if (res == NULL) {
995 dev_err(&pdev->dev, "failed to get irq resource\n"); 981 dev_err(&pdev->dev, "failed to get irq resource\n");
996 ret = -ENOENT; 982 ret = -ENOENT;
997 goto err_get_res; 983 goto err_res;
998 } 984 }
999 dev->irq = res->start; 985 dev->irq = res->start;
1000 ret = request_irq(dev->irq, s5p_mfc_irq, IRQF_DISABLED, pdev->name, 986 ret = devm_request_irq(&pdev->dev, dev->irq, s5p_mfc_irq,
1001 dev); 987 IRQF_DISABLED, pdev->name, dev);
1002 if (ret) { 988 if (ret) {
1003 dev_err(&pdev->dev, "Failed to install irq (%d)\n", ret); 989 dev_err(&pdev->dev, "Failed to install irq (%d)\n", ret);
1004 goto err_req_irq; 990 goto err_res;
1005 } 991 }
1006 992
1007 dev->mem_dev_l = device_find_child(&dev->plat_dev->dev, "s5p-mfc-l", 993 dev->mem_dev_l = device_find_child(&dev->plat_dev->dev, "s5p-mfc-l",
@@ -1009,20 +995,20 @@ static int s5p_mfc_probe(struct platform_device *pdev)
1009 if (!dev->mem_dev_l) { 995 if (!dev->mem_dev_l) {
1010 mfc_err("Mem child (L) device get failed\n"); 996 mfc_err("Mem child (L) device get failed\n");
1011 ret = -ENODEV; 997 ret = -ENODEV;
1012 goto err_find_child; 998 goto err_res;
1013 } 999 }
1014 dev->mem_dev_r = device_find_child(&dev->plat_dev->dev, "s5p-mfc-r", 1000 dev->mem_dev_r = device_find_child(&dev->plat_dev->dev, "s5p-mfc-r",
1015 match_child); 1001 match_child);
1016 if (!dev->mem_dev_r) { 1002 if (!dev->mem_dev_r) {
1017 mfc_err("Mem child (R) device get failed\n"); 1003 mfc_err("Mem child (R) device get failed\n");
1018 ret = -ENODEV; 1004 ret = -ENODEV;
1019 goto err_find_child; 1005 goto err_res;
1020 } 1006 }
1021 1007
1022 dev->alloc_ctx[0] = vb2_dma_contig_init_ctx(dev->mem_dev_l); 1008 dev->alloc_ctx[0] = vb2_dma_contig_init_ctx(dev->mem_dev_l);
1023 if (IS_ERR_OR_NULL(dev->alloc_ctx[0])) { 1009 if (IS_ERR_OR_NULL(dev->alloc_ctx[0])) {
1024 ret = PTR_ERR(dev->alloc_ctx[0]); 1010 ret = PTR_ERR(dev->alloc_ctx[0]);
1025 goto err_mem_init_ctx_0; 1011 goto err_res;
1026 } 1012 }
1027 dev->alloc_ctx[1] = vb2_dma_contig_init_ctx(dev->mem_dev_r); 1013 dev->alloc_ctx[1] = vb2_dma_contig_init_ctx(dev->mem_dev_r);
1028 if (IS_ERR_OR_NULL(dev->alloc_ctx[1])) { 1014 if (IS_ERR_OR_NULL(dev->alloc_ctx[1])) {
@@ -1116,22 +1102,9 @@ err_v4l2_dev_reg:
1116 vb2_dma_contig_cleanup_ctx(dev->alloc_ctx[1]); 1102 vb2_dma_contig_cleanup_ctx(dev->alloc_ctx[1]);
1117err_mem_init_ctx_1: 1103err_mem_init_ctx_1:
1118 vb2_dma_contig_cleanup_ctx(dev->alloc_ctx[0]); 1104 vb2_dma_contig_cleanup_ctx(dev->alloc_ctx[0]);
1119err_mem_init_ctx_0:
1120err_find_child:
1121 free_irq(dev->irq, dev);
1122err_req_irq:
1123err_get_res:
1124 iounmap(dev->regs_base);
1125 dev->regs_base = NULL;
1126err_ioremap:
1127 release_resource(dev->mfc_mem);
1128 kfree(dev->mfc_mem);
1129err_mem_reg:
1130err_res: 1105err_res:
1131 s5p_mfc_final_pm(dev); 1106 s5p_mfc_final_pm(dev);
1132err_clk: 1107
1133err_dev:
1134 kfree(dev);
1135 pr_debug("%s-- with error\n", __func__); 1108 pr_debug("%s-- with error\n", __func__);
1136 return ret; 1109 return ret;
1137 1110
@@ -1154,15 +1127,7 @@ static int __devexit s5p_mfc_remove(struct platform_device *pdev)
1154 vb2_dma_contig_cleanup_ctx(dev->alloc_ctx[0]); 1127 vb2_dma_contig_cleanup_ctx(dev->alloc_ctx[0]);
1155 vb2_dma_contig_cleanup_ctx(dev->alloc_ctx[1]); 1128 vb2_dma_contig_cleanup_ctx(dev->alloc_ctx[1]);
1156 1129
1157 free_irq(dev->irq, dev);
1158 iounmap(dev->regs_base);
1159 if (dev->mfc_mem) {
1160 release_resource(dev->mfc_mem);
1161 kfree(dev->mfc_mem);
1162 dev->mfc_mem = NULL;
1163 }
1164 s5p_mfc_final_pm(dev); 1130 s5p_mfc_final_pm(dev);
1165 kfree(dev);
1166 return 0; 1131 return 0;
1167} 1132}
1168 1133
diff --git a/drivers/media/video/s5p-mfc/s5p_mfc_common.h b/drivers/media/video/s5p-mfc/s5p_mfc_common.h
index 91146fa622e4..bd5706a6bad1 100644
--- a/drivers/media/video/s5p-mfc/s5p_mfc_common.h
+++ b/drivers/media/video/s5p-mfc/s5p_mfc_common.h
@@ -185,7 +185,6 @@ struct s5p_mfc_pm {
185 * @mem_dev_r: child device of the right memory bank (1) 185 * @mem_dev_r: child device of the right memory bank (1)
186 * @regs_base: base address of the MFC hw registers 186 * @regs_base: base address of the MFC hw registers
187 * @irq: irq resource 187 * @irq: irq resource
188 * @mfc_mem: MFC registers memory resource
189 * @dec_ctrl_handler: control framework handler for decoding 188 * @dec_ctrl_handler: control framework handler for decoding
190 * @enc_ctrl_handler: control framework handler for encoding 189 * @enc_ctrl_handler: control framework handler for encoding
191 * @pm: power management control 190 * @pm: power management control
@@ -221,7 +220,6 @@ struct s5p_mfc_dev {
221 struct device *mem_dev_r; 220 struct device *mem_dev_r;
222 void __iomem *regs_base; 221 void __iomem *regs_base;
223 int irq; 222 int irq;
224 struct resource *mfc_mem;
225 struct v4l2_ctrl_handler dec_ctrl_handler; 223 struct v4l2_ctrl_handler dec_ctrl_handler;
226 struct v4l2_ctrl_handler enc_ctrl_handler; 224 struct v4l2_ctrl_handler enc_ctrl_handler;
227 struct s5p_mfc_pm pm; 225 struct s5p_mfc_pm pm;