diff options
author | Sachin Kamat <sachin.kamat@linaro.org> | 2012-05-14 07:22:27 -0400 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2012-05-20 08:07:44 -0400 |
commit | d310f478e288ee7b2fa638339680460430e73e03 (patch) | |
tree | f11638f1fae1b473b2b332e159317e9102b325bf /drivers/media | |
parent | 5b58b95405aafbaf7362564dbcf6231836f1433c (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.c | 63 | ||||
-rw-r--r-- | drivers/media/video/s5p-mfc/s5p_mfc_common.h | 2 |
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]); |
1117 | err_mem_init_ctx_1: | 1103 | err_mem_init_ctx_1: |
1118 | vb2_dma_contig_cleanup_ctx(dev->alloc_ctx[0]); | 1104 | vb2_dma_contig_cleanup_ctx(dev->alloc_ctx[0]); |
1119 | err_mem_init_ctx_0: | ||
1120 | err_find_child: | ||
1121 | free_irq(dev->irq, dev); | ||
1122 | err_req_irq: | ||
1123 | err_get_res: | ||
1124 | iounmap(dev->regs_base); | ||
1125 | dev->regs_base = NULL; | ||
1126 | err_ioremap: | ||
1127 | release_resource(dev->mfc_mem); | ||
1128 | kfree(dev->mfc_mem); | ||
1129 | err_mem_reg: | ||
1130 | err_res: | 1105 | err_res: |
1131 | s5p_mfc_final_pm(dev); | 1106 | s5p_mfc_final_pm(dev); |
1132 | err_clk: | 1107 | |
1133 | err_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; |