diff options
author | Colin Cross <ccross@android.com> | 2010-04-15 14:06:44 -0700 |
---|---|---|
committer | Colin Cross <ccross@android.com> | 2010-04-15 15:31:54 -0700 |
commit | d0baf6f236ca49e237ca9bb635a3d37e1704dfa4 (patch) | |
tree | ee3183950479fb7d270441994558e1198f400582 | |
parent | 09c38ec748599a70a9675e2fce6b0983d9834f7d (diff) | |
download | tegra-android-tegra-2.6.34-rc4.tar.gz |
[ARM] tegra: tegrafb: Free irq in probe error case and remove functionandroid-tegra-2.6.34-rc4
v3: Fixes from review by Jaya Kumar
- Free irq in probe error case and remove function
Change-Id: Id6ebb8b79a738d0e3a9ac63fddd785f5652982f7
CC: Jaya Kumar <jayakumar.lkml@gmail.com>
-rw-r--r-- | drivers/video/tegrafb.c | 25 |
1 files changed, 16 insertions, 9 deletions
diff --git a/drivers/video/tegrafb.c b/drivers/video/tegrafb.c index 8f05c5631631..77cd3f578c5e 100644 --- a/drivers/video/tegrafb.c +++ b/drivers/video/tegrafb.c @@ -422,42 +422,42 @@ static int tegra_plat_probe(struct platform_device *pdev) irq = platform_get_irq(pdev, 0); if (irq <= 0) { - pr_debug("%s: no irq\n", pdev->name); + dev_err(&pdev->dev, "%s: no irq\n", pdev->name); ret = -ENOENT; goto err_free; } res = platform_get_resource(pdev, IORESOURCE_MEM, 0); if (!res) { - pr_debug("%s: no mem resource\n", pdev->name); + dev_err(&pdev->dev, "%s: no mem resource\n", pdev->name); ret = -ENOENT; goto err_free; } reg_mem = request_mem_region(res->start, resource_size(res), pdev->name); if (!reg_mem) { - pr_debug("%s: request_mem_region failed\n", pdev->name); + dev_err(&pdev->dev, "%s: request_mem_region failed\n", pdev->name); ret = -EBUSY; goto err_free; } reg_base = ioremap(res->start, resource_size(res)); if (!reg_base) { - pr_debug("%s: registers can't be mapped\n", pdev->name); + dev_err(&pdev->dev, "%s: registers can't be mapped\n", pdev->name); ret = -EBUSY; goto err_release_resource_reg; } res = platform_get_resource(pdev, IORESOURCE_MEM, 1); if (!res) { - pr_debug("%s: no mem resource\n", pdev->name); + dev_err(&pdev->dev, "%s: no mem resource\n", pdev->name); ret = -ENOENT; goto err_iounmap_reg; } fb_mem = request_mem_region(res->start, resource_size(res), pdev->name); if (!fb_mem) { - pr_debug("%s: request_mem_region failed\n", pdev->name); + dev_err(&pdev->dev, "%s: request_mem_region failed\n", pdev->name); ret = -EBUSY; goto err_iounmap_reg; } @@ -466,14 +466,14 @@ static int tegra_plat_probe(struct platform_device *pdev) fb_phys = res->start; fb_base = ioremap_nocache(fb_phys, fb_size); if (!fb_base) { - pr_debug("%s: fb can't be mapped\n", pdev->name); + dev_err(&pdev->dev, "%s: fb can't be mapped\n", pdev->name); ret = -EBUSY; goto err_release_resource_fb; } clk = clk_get(&pdev->dev, NULL); if (!clk) { - pr_debug("%s: can't get clock\n", pdev->name); + dev_err(&pdev->dev, "%s: can't get clock\n", pdev->name); ret = -ENOENT; goto err_iounmap_fb; } @@ -549,10 +549,16 @@ static int tegra_plat_probe(struct platform_device *pdev) (unsigned int)info->fix.smem_start, (unsigned int)info->screen_base); - register_framebuffer(info); + if (register_framebuffer(info)) { + dev_err(&pdev->dev, "failed to register framebuffer\n"); + ret = -ENODEV; + goto err_free_irq; + } platform_set_drvdata(pdev, info); return 0; +err_free_irq: + free_irq(irq, info); err_clk_disable: clk_disable(clk); err_iounmap_fb: @@ -574,6 +580,7 @@ static int tegra_plat_remove(struct platform_device *pdev) struct fb_info *info = platform_get_drvdata(pdev); struct tegra_fb_info *tegra_fb = info->par; unregister_framebuffer(info); + free_irq(tegra_fb->irq, info); clk_disable(tegra_fb->clk); iounmap(info->screen_base); release_resource(tegra_fb->fb_mem); |