@@ -548,7 +548,7 @@ static void sh_mobile_i2c_xfer_dma(struct sh_mobile_i2c_data *pd)
548
548
dma_addr_t dma_addr ;
549
549
dma_cookie_t cookie ;
550
550
551
- if (! chan )
551
+ if (IS_ERR ( chan ) )
552
552
return ;
553
553
554
554
dma_addr = dma_map_single (chan -> device -> dev , pd -> msg -> buf , pd -> msg -> len , dir );
@@ -747,21 +747,18 @@ static const struct of_device_id sh_mobile_i2c_dt_ids[] = {
747
747
};
748
748
MODULE_DEVICE_TABLE (of , sh_mobile_i2c_dt_ids );
749
749
750
- static int sh_mobile_i2c_request_dma_chan (struct device * dev , enum dma_transfer_direction dir ,
751
- dma_addr_t port_addr , struct dma_chan * * chan_ptr )
750
+ static struct dma_chan * sh_mobile_i2c_request_dma_chan (struct device * dev ,
751
+ enum dma_transfer_direction dir , dma_addr_t port_addr )
752
752
{
753
753
struct dma_chan * chan ;
754
754
struct dma_slave_config cfg ;
755
755
char * chan_name = dir == DMA_MEM_TO_DEV ? "tx" : "rx" ;
756
756
int ret ;
757
757
758
- * chan_ptr = NULL ;
759
-
760
758
chan = dma_request_slave_channel_reason (dev , chan_name );
761
759
if (IS_ERR (chan )) {
762
- ret = PTR_ERR (chan );
763
760
dev_dbg (dev , "request_channel failed for %s (%d)\n" , chan_name , ret );
764
- return ret ;
761
+ return chan ;
765
762
}
766
763
767
764
memset (& cfg , 0 , sizeof (cfg ));
@@ -778,25 +775,23 @@ static int sh_mobile_i2c_request_dma_chan(struct device *dev, enum dma_transfer_
778
775
if (ret ) {
779
776
dev_dbg (dev , "slave_config failed for %s (%d)\n" , chan_name , ret );
780
777
dma_release_channel (chan );
781
- return ret ;
778
+ return ERR_PTR ( ret ) ;
782
779
}
783
780
784
- * chan_ptr = chan ;
785
-
786
781
dev_dbg (dev , "got DMA channel for %s\n" , chan_name );
787
- return 0 ;
782
+ return chan ;
788
783
}
789
784
790
785
static void sh_mobile_i2c_release_dma (struct sh_mobile_i2c_data * pd )
791
786
{
792
- if (pd -> dma_tx ) {
787
+ if (! IS_ERR ( pd -> dma_tx ) ) {
793
788
dma_release_channel (pd -> dma_tx );
794
- pd -> dma_tx = NULL ;
789
+ pd -> dma_tx = ERR_PTR ( - EPROBE_DEFER ) ;
795
790
}
796
791
797
- if (pd -> dma_rx ) {
792
+ if (! IS_ERR ( pd -> dma_rx ) ) {
798
793
dma_release_channel (pd -> dma_rx );
799
- pd -> dma_rx = NULL ;
794
+ pd -> dma_rx = ERR_PTR ( - EPROBE_DEFER ) ;
800
795
}
801
796
}
802
797
@@ -889,13 +884,15 @@ static int sh_mobile_i2c_probe(struct platform_device *dev)
889
884
/* Init DMA */
890
885
sg_init_table (& pd -> sg , 1 );
891
886
pd -> dma_direction = DMA_NONE ;
892
- ret = sh_mobile_i2c_request_dma_chan (pd -> dev , DMA_DEV_TO_MEM ,
893
- res -> start + ICDR , & pd -> dma_rx );
887
+ pd -> dma_rx = sh_mobile_i2c_request_dma_chan (pd -> dev , DMA_DEV_TO_MEM ,
888
+ res -> start + ICDR );
889
+ ret = PTR_ERR (pd -> dma_rx );
894
890
if (ret == - EPROBE_DEFER )
895
891
return ret ;
896
892
897
- ret = sh_mobile_i2c_request_dma_chan (pd -> dev , DMA_MEM_TO_DEV ,
898
- res -> start + ICDR , & pd -> dma_tx );
893
+ pd -> dma_tx = sh_mobile_i2c_request_dma_chan (pd -> dev , DMA_MEM_TO_DEV ,
894
+ res -> start + ICDR );
895
+ ret = PTR_ERR (pd -> dma_tx );
899
896
if (ret == - EPROBE_DEFER ) {
900
897
sh_mobile_i2c_release_dma (pd );
901
898
return ret ;
0 commit comments