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

[media] V4L2: mx3_camera: convert to managed resource allocation

Use devm_* resource allocators to simplify the driver's probe and clean up
paths.

Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>

authored by

Guennadi Liakhovetski and committed by
Mauro Carvalho Chehab
72f28744 23272427

+10 -37
+10 -37
drivers/media/platform/soc_camera/mx3_camera.c
··· 1151 1151 struct soc_camera_host *soc_host; 1152 1152 1153 1153 res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 1154 - if (!res) { 1155 - err = -ENODEV; 1156 - goto egetres; 1157 - } 1154 + base = devm_ioremap_resource(&pdev->dev, res); 1155 + if (IS_ERR(base)) 1156 + return PTR_ERR(base); 1158 1157 1159 - mx3_cam = vzalloc(sizeof(*mx3_cam)); 1158 + mx3_cam = devm_kzalloc(&pdev->dev, sizeof(*mx3_cam), GFP_KERNEL); 1160 1159 if (!mx3_cam) { 1161 1160 dev_err(&pdev->dev, "Could not allocate mx3 camera object\n"); 1162 - err = -ENOMEM; 1163 - goto ealloc; 1161 + return -ENOMEM; 1164 1162 } 1165 1163 1166 - mx3_cam->clk = clk_get(&pdev->dev, NULL); 1167 - if (IS_ERR(mx3_cam->clk)) { 1168 - err = PTR_ERR(mx3_cam->clk); 1169 - goto eclkget; 1170 - } 1164 + mx3_cam->clk = devm_clk_get(&pdev->dev, NULL); 1165 + if (IS_ERR(mx3_cam->clk)) 1166 + return PTR_ERR(mx3_cam->clk); 1171 1167 1172 1168 mx3_cam->pdata = pdev->dev.platform_data; 1173 1169 mx3_cam->platform_flags = mx3_cam->pdata->flags; ··· 1197 1201 INIT_LIST_HEAD(&mx3_cam->capture); 1198 1202 spin_lock_init(&mx3_cam->lock); 1199 1203 1200 - base = ioremap(res->start, resource_size(res)); 1201 - if (!base) { 1202 - pr_err("Couldn't map %x@%x\n", resource_size(res), res->start); 1203 - err = -ENOMEM; 1204 - goto eioremap; 1205 - } 1206 - 1207 1204 mx3_cam->base = base; 1208 1205 1209 1206 soc_host = &mx3_cam->soc_host; ··· 1207 1218 soc_host->nr = pdev->id; 1208 1219 1209 1220 mx3_cam->alloc_ctx = vb2_dma_contig_init_ctx(&pdev->dev); 1210 - if (IS_ERR(mx3_cam->alloc_ctx)) { 1211 - err = PTR_ERR(mx3_cam->alloc_ctx); 1212 - goto eallocctx; 1213 - } 1221 + if (IS_ERR(mx3_cam->alloc_ctx)) 1222 + return PTR_ERR(mx3_cam->alloc_ctx); 1214 1223 1215 1224 err = soc_camera_host_register(soc_host); 1216 1225 if (err) ··· 1221 1234 1222 1235 ecamhostreg: 1223 1236 vb2_dma_contig_cleanup_ctx(mx3_cam->alloc_ctx); 1224 - eallocctx: 1225 - iounmap(base); 1226 - eioremap: 1227 - clk_put(mx3_cam->clk); 1228 - eclkget: 1229 - vfree(mx3_cam); 1230 - ealloc: 1231 - egetres: 1232 1237 return err; 1233 1238 } 1234 1239 ··· 1230 1251 struct mx3_camera_dev *mx3_cam = container_of(soc_host, 1231 1252 struct mx3_camera_dev, soc_host); 1232 1253 1233 - clk_put(mx3_cam->clk); 1234 - 1235 1254 soc_camera_host_unregister(soc_host); 1236 - 1237 - iounmap(mx3_cam->base); 1238 1255 1239 1256 /* 1240 1257 * The channel has either not been allocated, ··· 1240 1265 dma_release_channel(&mx3_cam->idmac_channel[0]->dma_chan); 1241 1266 1242 1267 vb2_dma_contig_cleanup_ctx(mx3_cam->alloc_ctx); 1243 - 1244 - vfree(mx3_cam); 1245 1268 1246 1269 dmaengine_put(); 1247 1270