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

[media] v4l: s5p-tv: use devm_ functions

The various devm_ functions allocate memory that is released when a driver
detaches. This patch uses these functions for data that is allocated in
the probe function of a platform device and is only freed in the remove
function.

Signed-off-by: Julia Lawall <Julia.Lawall@lip6.fr>
Acked-by: Kyungmin Park <kyungmin.park@samsung.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>

authored by

Julia Lawall and committed by
Mauro Carvalho Chehab
e861dccc 58df1716

+19 -37
+10 -20
drivers/media/video/s5p-tv/hdmi_drv.c
··· 875 875 876 876 dev_dbg(dev, "probe start\n"); 877 877 878 - hdmi_dev = kzalloc(sizeof(*hdmi_dev), GFP_KERNEL); 878 + hdmi_dev = devm_kzalloc(&pdev->dev, sizeof(*hdmi_dev), GFP_KERNEL); 879 879 if (!hdmi_dev) { 880 880 dev_err(dev, "out of memory\n"); 881 881 ret = -ENOMEM; ··· 886 886 887 887 ret = hdmi_resources_init(hdmi_dev); 888 888 if (ret) 889 - goto fail_hdev; 889 + goto fail; 890 890 891 891 /* mapping HDMI registers */ 892 892 res = platform_get_resource(pdev, IORESOURCE_MEM, 0); ··· 896 896 goto fail_init; 897 897 } 898 898 899 - hdmi_dev->regs = ioremap(res->start, resource_size(res)); 899 + hdmi_dev->regs = devm_ioremap(&pdev->dev, res->start, 900 + resource_size(res)); 900 901 if (hdmi_dev->regs == NULL) { 901 902 dev_err(dev, "register mapping failed.\n"); 902 903 ret = -ENXIO; 903 - goto fail_hdev; 904 + goto fail_init; 904 905 } 905 906 906 907 res = platform_get_resource(pdev, IORESOURCE_IRQ, 0); 907 908 if (res == NULL) { 908 909 dev_err(dev, "get interrupt resource failed.\n"); 909 910 ret = -ENXIO; 910 - goto fail_regs; 911 + goto fail_init; 911 912 } 912 913 913 - ret = request_irq(res->start, hdmi_irq_handler, 0, "hdmi", hdmi_dev); 914 + ret = devm_request_irq(&pdev->dev, res->start, hdmi_irq_handler, 0, 915 + "hdmi", hdmi_dev); 914 916 if (ret) { 915 917 dev_err(dev, "request interrupt failed.\n"); 916 - goto fail_regs; 918 + goto fail_init; 917 919 } 918 920 hdmi_dev->irq = res->start; 919 921 ··· 926 924 ret = v4l2_device_register(NULL, &hdmi_dev->v4l2_dev); 927 925 if (ret) { 928 926 dev_err(dev, "could not register v4l2 device.\n"); 929 - goto fail_irq; 927 + goto fail_init; 930 928 } 931 929 932 930 drv_data = (struct hdmi_driver_data *) ··· 971 969 fail_vdev: 972 970 v4l2_device_unregister(&hdmi_dev->v4l2_dev); 973 971 974 - fail_irq: 975 - free_irq(hdmi_dev->irq, hdmi_dev); 976 - 977 - fail_regs: 978 - iounmap(hdmi_dev->regs); 979 - 980 972 fail_init: 981 973 hdmi_resources_cleanup(hdmi_dev); 982 - 983 - fail_hdev: 984 - kfree(hdmi_dev); 985 974 986 975 fail: 987 976 dev_err(dev, "probe failed\n"); ··· 989 996 clk_disable(hdmi_dev->res.hdmi); 990 997 v4l2_device_unregister(&hdmi_dev->v4l2_dev); 991 998 disable_irq(hdmi_dev->irq); 992 - free_irq(hdmi_dev->irq, hdmi_dev); 993 - iounmap(hdmi_dev->regs); 994 999 hdmi_resources_cleanup(hdmi_dev); 995 - kfree(hdmi_dev); 996 1000 dev_info(dev, "remove successful\n"); 997 1001 998 1002 return 0;
+9 -17
drivers/media/video/s5p-tv/sdo_drv.c
··· 301 301 struct clk *sclk_vpll; 302 302 303 303 dev_info(dev, "probe start\n"); 304 - sdev = kzalloc(sizeof *sdev, GFP_KERNEL); 304 + sdev = devm_kzalloc(&pdev->dev, sizeof *sdev, GFP_KERNEL); 305 305 if (!sdev) { 306 306 dev_err(dev, "not enough memory.\n"); 307 307 ret = -ENOMEM; ··· 314 314 if (res == NULL) { 315 315 dev_err(dev, "get memory resource failed.\n"); 316 316 ret = -ENXIO; 317 - goto fail_sdev; 317 + goto fail; 318 318 } 319 319 320 - sdev->regs = ioremap(res->start, resource_size(res)); 320 + sdev->regs = devm_ioremap(&pdev->dev, res->start, resource_size(res)); 321 321 if (sdev->regs == NULL) { 322 322 dev_err(dev, "register mapping failed.\n"); 323 323 ret = -ENXIO; 324 - goto fail_sdev; 324 + goto fail; 325 325 } 326 326 327 327 /* acquiring interrupt */ ··· 329 329 if (res == NULL) { 330 330 dev_err(dev, "get interrupt resource failed.\n"); 331 331 ret = -ENXIO; 332 - goto fail_regs; 332 + goto fail; 333 333 } 334 - ret = request_irq(res->start, sdo_irq_handler, 0, "s5p-sdo", sdev); 334 + ret = devm_request_irq(&pdev->dev, res->start, sdo_irq_handler, 0, 335 + "s5p-sdo", sdev); 335 336 if (ret) { 336 337 dev_err(dev, "request interrupt failed.\n"); 337 - goto fail_regs; 338 + goto fail; 338 339 } 339 340 sdev->irq = res->start; 340 341 ··· 344 343 if (IS_ERR_OR_NULL(sdev->sclk_dac)) { 345 344 dev_err(dev, "failed to get clock 'sclk_dac'\n"); 346 345 ret = -ENXIO; 347 - goto fail_irq; 346 + goto fail; 348 347 } 349 348 sdev->dac = clk_get(dev, "dac"); 350 349 if (IS_ERR_OR_NULL(sdev->dac)) { ··· 416 415 clk_put(sdev->dac); 417 416 fail_sclk_dac: 418 417 clk_put(sdev->sclk_dac); 419 - fail_irq: 420 - free_irq(sdev->irq, sdev); 421 - fail_regs: 422 - iounmap(sdev->regs); 423 - fail_sdev: 424 - kfree(sdev); 425 418 fail: 426 419 dev_info(dev, "probe failed\n"); 427 420 return ret; ··· 434 439 clk_put(sdev->dacphy); 435 440 clk_put(sdev->dac); 436 441 clk_put(sdev->sclk_dac); 437 - free_irq(sdev->irq, sdev); 438 - iounmap(sdev->regs); 439 - kfree(sdev); 440 442 441 443 dev_info(&pdev->dev, "remove successful\n"); 442 444 return 0;