@@ -129,7 +129,6 @@ struct g2d_runqueue_node {
129
129
struct g2d_data {
130
130
struct device * dev ;
131
131
struct clk * gate_clk ;
132
- struct resource * regs_res ;
133
132
void __iomem * regs ;
134
133
int irq ;
135
134
struct workqueue_struct * g2d_workq ;
@@ -751,18 +750,16 @@ static int __devinit g2d_probe(struct platform_device *pdev)
751
750
struct exynos_drm_subdrv * subdrv ;
752
751
int ret ;
753
752
754
- g2d = kzalloc ( sizeof (* g2d ), GFP_KERNEL );
753
+ g2d = devm_kzalloc ( & pdev -> dev , sizeof (* g2d ), GFP_KERNEL );
755
754
if (!g2d ) {
756
755
dev_err (dev , "failed to allocate driver data\n" );
757
756
return - ENOMEM ;
758
757
}
759
758
760
759
g2d -> runqueue_slab = kmem_cache_create ("g2d_runqueue_slab" ,
761
760
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 ;
766
763
767
764
g2d -> dev = dev ;
768
765
@@ -794,38 +791,26 @@ static int __devinit g2d_probe(struct platform_device *pdev)
794
791
pm_runtime_enable (dev );
795
792
796
793
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
- }
802
794
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 );
812
796
if (!g2d -> regs ) {
813
797
dev_err (dev , "failed to remap I/O memory\n" );
814
798
ret = - ENXIO ;
815
- goto err_release_res ;
799
+ goto err_put_clk ;
816
800
}
817
801
818
802
g2d -> irq = platform_get_irq (pdev , 0 );
819
803
if (g2d -> irq < 0 ) {
820
804
dev_err (dev , "failed to get irq\n" );
821
805
ret = g2d -> irq ;
822
- goto err_unmap_base ;
806
+ goto err_put_clk ;
823
807
}
824
808
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 );
826
811
if (ret < 0 ) {
827
812
dev_err (dev , "irq request failed\n" );
828
- goto err_unmap_base ;
813
+ goto err_put_clk ;
829
814
}
830
815
831
816
platform_set_drvdata (pdev , g2d );
@@ -838,21 +823,14 @@ static int __devinit g2d_probe(struct platform_device *pdev)
838
823
ret = exynos_drm_subdrv_register (subdrv );
839
824
if (ret < 0 ) {
840
825
dev_err (dev , "failed to register drm g2d device\n" );
841
- goto err_free_irq ;
826
+ goto err_put_clk ;
842
827
}
843
828
844
829
dev_info (dev , "The exynos g2d(ver %d.%d) successfully probed\n" ,
845
830
G2D_HW_MAJOR_VER , G2D_HW_MINOR_VER );
846
831
847
832
return 0 ;
848
833
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 );
856
834
err_put_clk :
857
835
pm_runtime_disable (dev );
858
836
clk_put (g2d -> gate_clk );
@@ -862,8 +840,6 @@ static int __devinit g2d_probe(struct platform_device *pdev)
862
840
destroy_workqueue (g2d -> g2d_workq );
863
841
err_destroy_slab :
864
842
kmem_cache_destroy (g2d -> runqueue_slab );
865
- err_free_mem :
866
- kfree (g2d );
867
843
return ret ;
868
844
}
869
845
@@ -873,24 +849,18 @@ static int __devexit g2d_remove(struct platform_device *pdev)
873
849
874
850
cancel_work_sync (& g2d -> runqueue_work );
875
851
exynos_drm_subdrv_unregister (& g2d -> subdrv );
876
- free_irq (g2d -> irq , g2d );
877
852
878
853
while (g2d -> runqueue_node ) {
879
854
g2d_free_runqueue_node (g2d , g2d -> runqueue_node );
880
855
g2d -> runqueue_node = g2d_get_runqueue_node (g2d );
881
856
}
882
857
883
- iounmap (g2d -> regs );
884
- release_resource (g2d -> regs_res );
885
- kfree (g2d -> regs_res );
886
-
887
858
pm_runtime_disable (& pdev -> dev );
888
859
clk_put (g2d -> gate_clk );
889
860
890
861
g2d_fini_cmdlist (g2d );
891
862
destroy_workqueue (g2d -> g2d_workq );
892
863
kmem_cache_destroy (g2d -> runqueue_slab );
893
- kfree (g2d );
894
864
895
865
return 0 ;
896
866
}
0 commit comments