aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/spi/spi-sh-msiof.c26
1 files changed, 16 insertions, 10 deletions
diff --git a/drivers/spi/spi-sh-msiof.c b/drivers/spi/spi-sh-msiof.c
index 373de70baf08..2a4354dcd661 100644
--- a/drivers/spi/spi-sh-msiof.c
+++ b/drivers/spi/spi-sh-msiof.c
@@ -638,8 +638,8 @@ static int sh_msiof_dma_once(struct sh_msiof_spi_priv *p, const void *tx,
638 638
639 if (tx) { 639 if (tx) {
640 ier_bits |= IER_TDREQE | IER_TDMAE; 640 ier_bits |= IER_TDREQE | IER_TDMAE;
641 dma_sync_single_for_device(&p->pdev->dev, p->tx_dma_addr, len, 641 dma_sync_single_for_device(p->master->dma_tx->device->dev,
642 DMA_TO_DEVICE); 642 p->tx_dma_addr, len, DMA_TO_DEVICE);
643 desc_tx = dmaengine_prep_slave_single(p->master->dma_tx, 643 desc_tx = dmaengine_prep_slave_single(p->master->dma_tx,
644 p->tx_dma_addr, len, DMA_TO_DEVICE, 644 p->tx_dma_addr, len, DMA_TO_DEVICE,
645 DMA_PREP_INTERRUPT | DMA_CTRL_ACK); 645 DMA_PREP_INTERRUPT | DMA_CTRL_ACK);
@@ -717,7 +717,8 @@ static int sh_msiof_dma_once(struct sh_msiof_spi_priv *p, const void *tx,
717 } 717 }
718 718
719 if (rx) 719 if (rx)
720 dma_sync_single_for_cpu(&p->pdev->dev, p->rx_dma_addr, len, 720 dma_sync_single_for_cpu(p->master->dma_rx->device->dev,
721 p->rx_dma_addr, len,
721 DMA_FROM_DEVICE); 722 DMA_FROM_DEVICE);
722 723
723 return 0; 724 return 0;
@@ -1003,6 +1004,7 @@ static int sh_msiof_request_dma(struct sh_msiof_spi_priv *p)
1003 const struct sh_msiof_spi_info *info = dev_get_platdata(dev); 1004 const struct sh_msiof_spi_info *info = dev_get_platdata(dev);
1004 const struct resource *res; 1005 const struct resource *res;
1005 struct spi_master *master; 1006 struct spi_master *master;
1007 struct device *tx_dev, *rx_dev;
1006 1008
1007 if (!info || !info->dma_tx_id || !info->dma_rx_id) 1009 if (!info || !info->dma_tx_id || !info->dma_rx_id)
1008 return 0; /* The driver assumes no error */ 1010 return 0; /* The driver assumes no error */
@@ -1033,21 +1035,23 @@ static int sh_msiof_request_dma(struct sh_msiof_spi_priv *p)
1033 if (!p->rx_dma_page) 1035 if (!p->rx_dma_page)
1034 goto free_tx_page; 1036 goto free_tx_page;
1035 1037
1036 p->tx_dma_addr = dma_map_single(dev, p->tx_dma_page, PAGE_SIZE, 1038 tx_dev = master->dma_tx->device->dev;
1039 p->tx_dma_addr = dma_map_single(tx_dev, p->tx_dma_page, PAGE_SIZE,
1037 DMA_TO_DEVICE); 1040 DMA_TO_DEVICE);
1038 if (dma_mapping_error(dev, p->tx_dma_addr)) 1041 if (dma_mapping_error(tx_dev, p->tx_dma_addr))
1039 goto free_rx_page; 1042 goto free_rx_page;
1040 1043
1041 p->rx_dma_addr = dma_map_single(dev, p->rx_dma_page, PAGE_SIZE, 1044 rx_dev = master->dma_rx->device->dev;
1045 p->rx_dma_addr = dma_map_single(rx_dev, p->rx_dma_page, PAGE_SIZE,
1042 DMA_FROM_DEVICE); 1046 DMA_FROM_DEVICE);
1043 if (dma_mapping_error(dev, p->rx_dma_addr)) 1047 if (dma_mapping_error(rx_dev, p->rx_dma_addr))
1044 goto unmap_tx_page; 1048 goto unmap_tx_page;
1045 1049
1046 dev_info(dev, "DMA available"); 1050 dev_info(dev, "DMA available");
1047 return 0; 1051 return 0;
1048 1052
1049unmap_tx_page: 1053unmap_tx_page:
1050 dma_unmap_single(dev, p->tx_dma_addr, PAGE_SIZE, DMA_TO_DEVICE); 1054 dma_unmap_single(tx_dev, p->tx_dma_addr, PAGE_SIZE, DMA_TO_DEVICE);
1051free_rx_page: 1055free_rx_page:
1052 free_page((unsigned long)p->rx_dma_page); 1056 free_page((unsigned long)p->rx_dma_page);
1053free_tx_page: 1057free_tx_page:
@@ -1069,8 +1073,10 @@ static void sh_msiof_release_dma(struct sh_msiof_spi_priv *p)
1069 return; 1073 return;
1070 1074
1071 dev = &p->pdev->dev; 1075 dev = &p->pdev->dev;
1072 dma_unmap_single(dev, p->rx_dma_addr, PAGE_SIZE, DMA_FROM_DEVICE); 1076 dma_unmap_single(master->dma_rx->device->dev, p->rx_dma_addr,
1073 dma_unmap_single(dev, p->tx_dma_addr, PAGE_SIZE, DMA_TO_DEVICE); 1077 PAGE_SIZE, DMA_FROM_DEVICE);
1078 dma_unmap_single(master->dma_tx->device->dev, p->tx_dma_addr,
1079 PAGE_SIZE, DMA_TO_DEVICE);
1074 free_page((unsigned long)p->rx_dma_page); 1080 free_page((unsigned long)p->rx_dma_page);
1075 free_page((unsigned long)p->tx_dma_page); 1081 free_page((unsigned long)p->tx_dma_page);
1076 dma_release_channel(master->dma_rx); 1082 dma_release_channel(master->dma_rx);