@@ -423,16 +423,12 @@ static void omap2_mcspi_tx_dma(struct spi_device *spi,
423
423
424
424
if (mcspi_dma -> dma_tx ) {
425
425
struct dma_async_tx_descriptor * tx ;
426
- struct scatterlist sg ;
427
426
428
427
dmaengine_slave_config (mcspi_dma -> dma_tx , & cfg );
429
428
430
- sg_init_table (& sg , 1 );
431
- sg_dma_address (& sg ) = xfer -> tx_dma ;
432
- sg_dma_len (& sg ) = xfer -> len ;
433
-
434
- tx = dmaengine_prep_slave_sg (mcspi_dma -> dma_tx , & sg , 1 ,
435
- DMA_MEM_TO_DEV , DMA_PREP_INTERRUPT | DMA_CTRL_ACK );
429
+ tx = dmaengine_prep_slave_sg (mcspi_dma -> dma_tx , xfer -> tx_sg .sgl ,
430
+ xfer -> tx_sg .nents , DMA_MEM_TO_DEV ,
431
+ DMA_PREP_INTERRUPT | DMA_CTRL_ACK );
436
432
if (tx ) {
437
433
tx -> callback = omap2_mcspi_tx_callback ;
438
434
tx -> callback_param = spi ;
@@ -478,20 +474,15 @@ omap2_mcspi_rx_dma(struct spi_device *spi, struct spi_transfer *xfer,
478
474
479
475
if (mcspi_dma -> dma_rx ) {
480
476
struct dma_async_tx_descriptor * tx ;
481
- struct scatterlist sg ;
482
477
483
478
dmaengine_slave_config (mcspi_dma -> dma_rx , & cfg );
484
479
485
480
if ((l & OMAP2_MCSPI_CHCONF_TURBO ) && mcspi -> fifo_depth == 0 )
486
481
dma_count -= es ;
487
482
488
- sg_init_table (& sg , 1 );
489
- sg_dma_address (& sg ) = xfer -> rx_dma ;
490
- sg_dma_len (& sg ) = dma_count ;
491
-
492
- tx = dmaengine_prep_slave_sg (mcspi_dma -> dma_rx , & sg , 1 ,
493
- DMA_DEV_TO_MEM , DMA_PREP_INTERRUPT |
494
- DMA_CTRL_ACK );
483
+ tx = dmaengine_prep_slave_sg (mcspi_dma -> dma_rx , xfer -> rx_sg .sgl ,
484
+ xfer -> rx_sg .nents , DMA_DEV_TO_MEM ,
485
+ DMA_PREP_INTERRUPT | DMA_CTRL_ACK );
495
486
if (tx ) {
496
487
tx -> callback = omap2_mcspi_rx_callback ;
497
488
tx -> callback_param = spi ;
@@ -505,8 +496,6 @@ omap2_mcspi_rx_dma(struct spi_device *spi, struct spi_transfer *xfer,
505
496
omap2_mcspi_set_dma_req (spi , 1 , 1 );
506
497
507
498
wait_for_completion (& mcspi_dma -> dma_rx_completion );
508
- dma_unmap_single (mcspi -> dev , xfer -> rx_dma , count ,
509
- DMA_FROM_DEVICE );
510
499
511
500
if (mcspi -> fifo_depth > 0 )
512
501
return count ;
@@ -619,8 +608,6 @@ omap2_mcspi_txrx_dma(struct spi_device *spi, struct spi_transfer *xfer)
619
608
620
609
if (tx != NULL ) {
621
610
wait_for_completion (& mcspi_dma -> dma_tx_completion );
622
- dma_unmap_single (mcspi -> dev , xfer -> tx_dma , xfer -> len ,
623
- DMA_TO_DEVICE );
624
611
625
612
if (mcspi -> fifo_depth > 0 ) {
626
613
irqstat_reg = mcspi -> base + OMAP2_MCSPI_IRQSTATUS ;
@@ -1087,6 +1074,16 @@ static void omap2_mcspi_cleanup(struct spi_device *spi)
1087
1074
gpio_free (spi -> cs_gpio );
1088
1075
}
1089
1076
1077
+ static bool omap2_mcspi_can_dma (struct spi_master * master ,
1078
+ struct spi_device * spi ,
1079
+ struct spi_transfer * xfer )
1080
+ {
1081
+ if (xfer -> len < DMA_MIN_BYTES )
1082
+ return false;
1083
+
1084
+ return true;
1085
+ }
1086
+
1090
1087
static int omap2_mcspi_work_one (struct omap2_mcspi * mcspi ,
1091
1088
struct spi_device * spi , struct spi_transfer * t )
1092
1089
{
@@ -1268,32 +1265,6 @@ static int omap2_mcspi_transfer_one(struct spi_master *master,
1268
1265
return - EINVAL ;
1269
1266
}
1270
1267
1271
- if (len < DMA_MIN_BYTES )
1272
- goto skip_dma_map ;
1273
-
1274
- if (mcspi_dma -> dma_tx && tx_buf != NULL ) {
1275
- t -> tx_dma = dma_map_single (mcspi -> dev , (void * ) tx_buf ,
1276
- len , DMA_TO_DEVICE );
1277
- if (dma_mapping_error (mcspi -> dev , t -> tx_dma )) {
1278
- dev_dbg (mcspi -> dev , "dma %cX %d bytes error\n" ,
1279
- 'T' , len );
1280
- return - EINVAL ;
1281
- }
1282
- }
1283
- if (mcspi_dma -> dma_rx && rx_buf != NULL ) {
1284
- t -> rx_dma = dma_map_single (mcspi -> dev , rx_buf , t -> len ,
1285
- DMA_FROM_DEVICE );
1286
- if (dma_mapping_error (mcspi -> dev , t -> rx_dma )) {
1287
- dev_dbg (mcspi -> dev , "dma %cX %d bytes error\n" ,
1288
- 'R' , len );
1289
- if (tx_buf != NULL )
1290
- dma_unmap_single (mcspi -> dev , t -> tx_dma ,
1291
- len , DMA_TO_DEVICE );
1292
- return - EINVAL ;
1293
- }
1294
- }
1295
-
1296
- skip_dma_map :
1297
1268
return omap2_mcspi_work_one (mcspi , spi , t );
1298
1269
}
1299
1270
@@ -1377,6 +1348,7 @@ static int omap2_mcspi_probe(struct platform_device *pdev)
1377
1348
master -> transfer_one = omap2_mcspi_transfer_one ;
1378
1349
master -> set_cs = omap2_mcspi_set_cs ;
1379
1350
master -> cleanup = omap2_mcspi_cleanup ;
1351
+ master -> can_dma = omap2_mcspi_can_dma ;
1380
1352
master -> dev .of_node = node ;
1381
1353
master -> max_speed_hz = OMAP2_MCSPI_MAX_FREQ ;
1382
1354
master -> min_speed_hz = OMAP2_MCSPI_MAX_FREQ >> 15 ;
0 commit comments