@@ -515,7 +515,8 @@ static int sh_dmae_chan_probe(struct sh_dmae_device *shdev, int id,
515
515
struct shdma_chan * schan ;
516
516
int err ;
517
517
518
- sh_chan = kzalloc (sizeof (struct sh_dmae_chan ), GFP_KERNEL );
518
+ sh_chan = devm_kzalloc (sdev -> dma_dev .dev , sizeof (struct sh_dmae_chan ),
519
+ GFP_KERNEL );
519
520
if (!sh_chan ) {
520
521
dev_err (sdev -> dma_dev .dev ,
521
522
"No free memory for allocating dma channels!\n" );
@@ -551,7 +552,6 @@ static int sh_dmae_chan_probe(struct sh_dmae_device *shdev, int id,
551
552
err_no_irq :
552
553
/* remove from dmaengine device node */
553
554
shdma_chan_remove (schan );
554
- kfree (sh_chan );
555
555
return err ;
556
556
}
557
557
@@ -562,14 +562,9 @@ static void sh_dmae_chan_remove(struct sh_dmae_device *shdev)
562
562
int i ;
563
563
564
564
shdma_for_each_chan (schan , & shdev -> shdma_dev , i ) {
565
- struct sh_dmae_chan * sh_chan = container_of (schan ,
566
- struct sh_dmae_chan , shdma_chan );
567
565
BUG_ON (!schan );
568
566
569
- shdma_free_irq (& sh_chan -> shdma_chan );
570
-
571
567
shdma_chan_remove (schan );
572
- kfree (sh_chan );
573
568
}
574
569
dma_dev -> chancnt = 0 ;
575
570
}
@@ -706,33 +701,22 @@ static int sh_dmae_probe(struct platform_device *pdev)
706
701
if (!chan || !errirq_res )
707
702
return - ENODEV ;
708
703
709
- if (!request_mem_region (chan -> start , resource_size (chan ), pdev -> name )) {
710
- dev_err (& pdev -> dev , "DMAC register region already claimed\n" );
711
- return - EBUSY ;
712
- }
713
-
714
- if (dmars && !request_mem_region (dmars -> start , resource_size (dmars ), pdev -> name )) {
715
- dev_err (& pdev -> dev , "DMAC DMARS region already claimed\n" );
716
- err = - EBUSY ;
717
- goto ermrdmars ;
718
- }
719
-
720
- err = - ENOMEM ;
721
- shdev = kzalloc (sizeof (struct sh_dmae_device ), GFP_KERNEL );
704
+ shdev = devm_kzalloc (& pdev -> dev , sizeof (struct sh_dmae_device ),
705
+ GFP_KERNEL );
722
706
if (!shdev ) {
723
707
dev_err (& pdev -> dev , "Not enough memory\n" );
724
- goto ealloc ;
708
+ return - ENOMEM ;
725
709
}
726
710
727
711
dma_dev = & shdev -> shdma_dev .dma_dev ;
728
712
729
- shdev -> chan_reg = ioremap ( chan -> start , resource_size ( chan ) );
730
- if (! shdev -> chan_reg )
731
- goto emapchan ;
713
+ shdev -> chan_reg = devm_ioremap_resource ( & pdev -> dev , chan );
714
+ if (IS_ERR ( shdev -> chan_reg ) )
715
+ return PTR_ERR ( shdev -> chan_reg ) ;
732
716
if (dmars ) {
733
- shdev -> dmars = ioremap ( dmars -> start , resource_size ( dmars ) );
734
- if (! shdev -> dmars )
735
- goto emapdmars ;
717
+ shdev -> dmars = devm_ioremap_resource ( & pdev -> dev , dmars );
718
+ if (IS_ERR ( shdev -> dmars ) )
719
+ return PTR_ERR ( shdev -> dmars ) ;
736
720
}
737
721
738
722
if (!pdata -> slave_only )
@@ -793,8 +777,8 @@ static int sh_dmae_probe(struct platform_device *pdev)
793
777
794
778
errirq = errirq_res -> start ;
795
779
796
- err = request_irq ( errirq , sh_dmae_err , irqflags ,
797
- "DMAC Address Error" , shdev );
780
+ err = devm_request_irq ( & pdev -> dev , errirq , sh_dmae_err , irqflags ,
781
+ "DMAC Address Error" , shdev );
798
782
if (err ) {
799
783
dev_err (& pdev -> dev ,
800
784
"DMA failed requesting irq #%d, error %d\n" ,
@@ -872,7 +856,6 @@ static int sh_dmae_probe(struct platform_device *pdev)
872
856
sh_dmae_chan_remove (shdev );
873
857
874
858
#if defined(CONFIG_CPU_SH4 ) || defined(CONFIG_ARCH_SHMOBILE )
875
- free_irq (errirq , shdev );
876
859
eirq_err :
877
860
#endif
878
861
rst_err :
@@ -886,18 +869,7 @@ static int sh_dmae_probe(struct platform_device *pdev)
886
869
platform_set_drvdata (pdev , NULL );
887
870
shdma_cleanup (& shdev -> shdma_dev );
888
871
eshdma :
889
- if (dmars )
890
- iounmap (shdev -> dmars );
891
- emapdmars :
892
- iounmap (shdev -> chan_reg );
893
872
synchronize_rcu ();
894
- emapchan :
895
- kfree (shdev );
896
- ealloc :
897
- if (dmars )
898
- release_mem_region (dmars -> start , resource_size (dmars ));
899
- ermrdmars :
900
- release_mem_region (chan -> start , resource_size (chan ));
901
873
902
874
return err ;
903
875
}
@@ -923,21 +895,9 @@ static int sh_dmae_remove(struct platform_device *pdev)
923
895
sh_dmae_chan_remove (shdev );
924
896
shdma_cleanup (& shdev -> shdma_dev );
925
897
926
- if (shdev -> dmars )
927
- iounmap (shdev -> dmars );
928
- iounmap (shdev -> chan_reg );
929
-
930
898
platform_set_drvdata (pdev , NULL );
931
899
932
900
synchronize_rcu ();
933
- kfree (shdev );
934
-
935
- res = platform_get_resource (pdev , IORESOURCE_MEM , 0 );
936
- if (res )
937
- release_mem_region (res -> start , resource_size (res ));
938
- res = platform_get_resource (pdev , IORESOURCE_MEM , 1 );
939
- if (res )
940
- release_mem_region (res -> start , resource_size (res ));
941
901
942
902
return 0 ;
943
903
}
0 commit comments