diff options
| -rw-r--r-- | drivers/spi/spi-sh-msiof.c | 26 |
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 | ||
| 1049 | unmap_tx_page: | 1053 | unmap_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); |
| 1051 | free_rx_page: | 1055 | free_rx_page: |
| 1052 | free_page((unsigned long)p->rx_dma_page); | 1056 | free_page((unsigned long)p->rx_dma_page); |
| 1053 | free_tx_page: | 1057 | free_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); |
