Skip to content

Commit b767593

Browse files
Sachin Kamatdaeinki
authored andcommitted
drm/exynos: Use devm_* functions in exynos_drm_g2d.c file
devm_* functions are device managed functions and make error handling and cleanup cleaner and simpler. Signed-off-by: Sachin Kamat <sachin.kamat@linaro.org> Signed-off-by: Inki Dae <inki.dae@samsung.com> Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
1 parent ae18294 commit b767593

File tree

1 file changed

+10
-40
lines changed

1 file changed

+10
-40
lines changed

drivers/gpu/drm/exynos/exynos_drm_g2d.c

Lines changed: 10 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,6 @@ struct g2d_runqueue_node {
129129
struct g2d_data {
130130
struct device *dev;
131131
struct clk *gate_clk;
132-
struct resource *regs_res;
133132
void __iomem *regs;
134133
int irq;
135134
struct workqueue_struct *g2d_workq;
@@ -751,18 +750,16 @@ static int __devinit g2d_probe(struct platform_device *pdev)
751750
struct exynos_drm_subdrv *subdrv;
752751
int ret;
753752

754-
g2d = kzalloc(sizeof(*g2d), GFP_KERNEL);
753+
g2d = devm_kzalloc(&pdev->dev, sizeof(*g2d), GFP_KERNEL);
755754
if (!g2d) {
756755
dev_err(dev, "failed to allocate driver data\n");
757756
return -ENOMEM;
758757
}
759758

760759
g2d->runqueue_slab = kmem_cache_create("g2d_runqueue_slab",
761760
sizeof(struct g2d_runqueue_node), 0, 0, NULL);
762-
if (!g2d->runqueue_slab) {
763-
ret = -ENOMEM;
764-
goto err_free_mem;
765-
}
761+
if (!g2d->runqueue_slab)
762+
return -ENOMEM;
766763

767764
g2d->dev = dev;
768765

@@ -794,38 +791,26 @@ static int __devinit g2d_probe(struct platform_device *pdev)
794791
pm_runtime_enable(dev);
795792

796793
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
797-
if (!res) {
798-
dev_err(dev, "failed to get I/O memory\n");
799-
ret = -ENOENT;
800-
goto err_put_clk;
801-
}
802794

803-
g2d->regs_res = request_mem_region(res->start, resource_size(res),
804-
dev_name(dev));
805-
if (!g2d->regs_res) {
806-
dev_err(dev, "failed to request I/O memory\n");
807-
ret = -ENOENT;
808-
goto err_put_clk;
809-
}
810-
811-
g2d->regs = ioremap(res->start, resource_size(res));
795+
g2d->regs = devm_request_and_ioremap(&pdev->dev, res);
812796
if (!g2d->regs) {
813797
dev_err(dev, "failed to remap I/O memory\n");
814798
ret = -ENXIO;
815-
goto err_release_res;
799+
goto err_put_clk;
816800
}
817801

818802
g2d->irq = platform_get_irq(pdev, 0);
819803
if (g2d->irq < 0) {
820804
dev_err(dev, "failed to get irq\n");
821805
ret = g2d->irq;
822-
goto err_unmap_base;
806+
goto err_put_clk;
823807
}
824808

825-
ret = request_irq(g2d->irq, g2d_irq_handler, 0, "drm_g2d", g2d);
809+
ret = devm_request_irq(&pdev->dev, g2d->irq, g2d_irq_handler, 0,
810+
"drm_g2d", g2d);
826811
if (ret < 0) {
827812
dev_err(dev, "irq request failed\n");
828-
goto err_unmap_base;
813+
goto err_put_clk;
829814
}
830815

831816
platform_set_drvdata(pdev, g2d);
@@ -838,21 +823,14 @@ static int __devinit g2d_probe(struct platform_device *pdev)
838823
ret = exynos_drm_subdrv_register(subdrv);
839824
if (ret < 0) {
840825
dev_err(dev, "failed to register drm g2d device\n");
841-
goto err_free_irq;
826+
goto err_put_clk;
842827
}
843828

844829
dev_info(dev, "The exynos g2d(ver %d.%d) successfully probed\n",
845830
G2D_HW_MAJOR_VER, G2D_HW_MINOR_VER);
846831

847832
return 0;
848833

849-
err_free_irq:
850-
free_irq(g2d->irq, g2d);
851-
err_unmap_base:
852-
iounmap(g2d->regs);
853-
err_release_res:
854-
release_resource(g2d->regs_res);
855-
kfree(g2d->regs_res);
856834
err_put_clk:
857835
pm_runtime_disable(dev);
858836
clk_put(g2d->gate_clk);
@@ -862,8 +840,6 @@ static int __devinit g2d_probe(struct platform_device *pdev)
862840
destroy_workqueue(g2d->g2d_workq);
863841
err_destroy_slab:
864842
kmem_cache_destroy(g2d->runqueue_slab);
865-
err_free_mem:
866-
kfree(g2d);
867843
return ret;
868844
}
869845

@@ -873,24 +849,18 @@ static int __devexit g2d_remove(struct platform_device *pdev)
873849

874850
cancel_work_sync(&g2d->runqueue_work);
875851
exynos_drm_subdrv_unregister(&g2d->subdrv);
876-
free_irq(g2d->irq, g2d);
877852

878853
while (g2d->runqueue_node) {
879854
g2d_free_runqueue_node(g2d, g2d->runqueue_node);
880855
g2d->runqueue_node = g2d_get_runqueue_node(g2d);
881856
}
882857

883-
iounmap(g2d->regs);
884-
release_resource(g2d->regs_res);
885-
kfree(g2d->regs_res);
886-
887858
pm_runtime_disable(&pdev->dev);
888859
clk_put(g2d->gate_clk);
889860

890861
g2d_fini_cmdlist(g2d);
891862
destroy_workqueue(g2d->g2d_workq);
892863
kmem_cache_destroy(g2d->runqueue_slab);
893-
kfree(g2d);
894864

895865
return 0;
896866
}

0 commit comments

Comments
 (0)