|
@@ -164,23 +164,15 @@ struct spi_tegra_data {
|
|
|
* for the generic case.
|
|
|
*/
|
|
|
int dma_req_len;
|
|
|
-#if defined(CONFIG_TEGRA_SYSTEM_DMA)
|
|
|
- struct tegra_dma_req rx_dma_req;
|
|
|
- struct tegra_dma_channel *rx_dma;
|
|
|
-#else
|
|
|
struct dma_chan *rx_dma;
|
|
|
struct dma_slave_config sconfig;
|
|
|
struct dma_async_tx_descriptor *rx_dma_desc;
|
|
|
dma_cookie_t rx_cookie;
|
|
|
-#endif
|
|
|
u32 *rx_bb;
|
|
|
dma_addr_t rx_bb_phys;
|
|
|
};
|
|
|
|
|
|
-#if !defined(CONFIG_TEGRA_SYSTEM_DMA)
|
|
|
static void tegra_spi_rx_dma_complete(void *args);
|
|
|
-#endif
|
|
|
-
|
|
|
static inline unsigned long spi_tegra_readl(struct spi_tegra_data *tspi,
|
|
|
unsigned long reg)
|
|
|
{
|
|
@@ -204,10 +196,6 @@ static void spi_tegra_go(struct spi_tegra_data *tspi)
|
|
|
val &= ~SLINK_DMA_BLOCK_SIZE(~0) & ~SLINK_DMA_EN;
|
|
|
val |= SLINK_DMA_BLOCK_SIZE(tspi->dma_req_len / 4 - 1);
|
|
|
spi_tegra_writel(tspi, val, SLINK_DMA_CTL);
|
|
|
-#if defined(CONFIG_TEGRA_SYSTEM_DMA)
|
|
|
- tspi->rx_dma_req.size = tspi->dma_req_len;
|
|
|
- tegra_dma_enqueue_req(tspi->rx_dma, &tspi->rx_dma_req);
|
|
|
-#else
|
|
|
tspi->rx_dma_desc = dmaengine_prep_slave_single(tspi->rx_dma,
|
|
|
tspi->rx_bb_phys, tspi->dma_req_len,
|
|
|
DMA_DEV_TO_MEM, DMA_PREP_INTERRUPT);
|
|
@@ -219,7 +207,6 @@ static void spi_tegra_go(struct spi_tegra_data *tspi)
|
|
|
tspi->rx_dma_desc->callback_param = tspi;
|
|
|
tspi->rx_cookie = dmaengine_submit(tspi->rx_dma_desc);
|
|
|
dma_async_issue_pending(tspi->rx_dma);
|
|
|
-#endif
|
|
|
|
|
|
val |= SLINK_DMA_EN;
|
|
|
spi_tegra_writel(tspi, val, SLINK_DMA_CTL);
|
|
@@ -405,19 +392,12 @@ static void handle_spi_rx_dma_complete(struct spi_tegra_data *tspi)
|
|
|
|
|
|
spin_unlock_irqrestore(&tspi->lock, flags);
|
|
|
}
|
|
|
-#if defined(CONFIG_TEGRA_SYSTEM_DMA)
|
|
|
-static void tegra_spi_rx_dma_complete(struct tegra_dma_req *req)
|
|
|
-{
|
|
|
- struct spi_tegra_data *tspi = req->dev;
|
|
|
- handle_spi_rx_dma_complete(tspi);
|
|
|
-}
|
|
|
-#else
|
|
|
+
|
|
|
static void tegra_spi_rx_dma_complete(void *args)
|
|
|
{
|
|
|
struct spi_tegra_data *tspi = args;
|
|
|
handle_spi_rx_dma_complete(tspi);
|
|
|
}
|
|
|
-#endif
|
|
|
|
|
|
static int spi_tegra_setup(struct spi_device *spi)
|
|
|
{
|
|
@@ -509,9 +489,7 @@ static int __devinit spi_tegra_probe(struct platform_device *pdev)
|
|
|
struct spi_tegra_data *tspi;
|
|
|
struct resource *r;
|
|
|
int ret;
|
|
|
-#if !defined(CONFIG_TEGRA_SYSTEM_DMA)
|
|
|
dma_cap_mask_t mask;
|
|
|
-#endif
|
|
|
|
|
|
master = spi_alloc_master(&pdev->dev, sizeof *tspi);
|
|
|
if (master == NULL) {
|
|
@@ -563,14 +541,6 @@ static int __devinit spi_tegra_probe(struct platform_device *pdev)
|
|
|
|
|
|
INIT_LIST_HEAD(&tspi->queue);
|
|
|
|
|
|
-#if defined(CONFIG_TEGRA_SYSTEM_DMA)
|
|
|
- tspi->rx_dma = tegra_dma_allocate_channel(TEGRA_DMA_MODE_ONESHOT);
|
|
|
- if (!tspi->rx_dma) {
|
|
|
- dev_err(&pdev->dev, "can not allocate rx dma channel\n");
|
|
|
- ret = -ENODEV;
|
|
|
- goto err3;
|
|
|
- }
|
|
|
-#else
|
|
|
dma_cap_zero(mask);
|
|
|
dma_cap_set(DMA_SLAVE, mask);
|
|
|
tspi->rx_dma = dma_request_channel(mask, NULL, NULL);
|
|
@@ -580,8 +550,6 @@ static int __devinit spi_tegra_probe(struct platform_device *pdev)
|
|
|
goto err3;
|
|
|
}
|
|
|
|
|
|
-#endif
|
|
|
-
|
|
|
tspi->rx_bb = dma_alloc_coherent(&pdev->dev, sizeof(u32) * BB_LEN,
|
|
|
&tspi->rx_bb_phys, GFP_KERNEL);
|
|
|
if (!tspi->rx_bb) {
|
|
@@ -590,17 +558,6 @@ static int __devinit spi_tegra_probe(struct platform_device *pdev)
|
|
|
goto err4;
|
|
|
}
|
|
|
|
|
|
-#if defined(CONFIG_TEGRA_SYSTEM_DMA)
|
|
|
- tspi->rx_dma_req.complete = tegra_spi_rx_dma_complete;
|
|
|
- tspi->rx_dma_req.to_memory = 1;
|
|
|
- tspi->rx_dma_req.dest_addr = tspi->rx_bb_phys;
|
|
|
- tspi->rx_dma_req.dest_bus_width = 32;
|
|
|
- tspi->rx_dma_req.source_addr = tspi->phys + SLINK_RX_FIFO;
|
|
|
- tspi->rx_dma_req.source_bus_width = 32;
|
|
|
- tspi->rx_dma_req.source_wrap = 4;
|
|
|
- tspi->rx_dma_req.req_sel = spi_tegra_req_sels[pdev->id];
|
|
|
- tspi->rx_dma_req.dev = tspi;
|
|
|
-#else
|
|
|
/* Dmaengine Dma slave config */
|
|
|
tspi->sconfig.src_addr = tspi->phys + SLINK_RX_FIFO;
|
|
|
tspi->sconfig.dst_addr = tspi->phys + SLINK_RX_FIFO;
|
|
@@ -616,7 +573,6 @@ static int __devinit spi_tegra_probe(struct platform_device *pdev)
|
|
|
ret);
|
|
|
goto err4;
|
|
|
}
|
|
|
-#endif
|
|
|
|
|
|
master->dev.of_node = pdev->dev.of_node;
|
|
|
ret = spi_register_master(master);
|
|
@@ -630,11 +586,7 @@ err5:
|
|
|
dma_free_coherent(&pdev->dev, sizeof(u32) * BB_LEN,
|
|
|
tspi->rx_bb, tspi->rx_bb_phys);
|
|
|
err4:
|
|
|
-#if defined(CONFIG_TEGRA_SYSTEM_DMA)
|
|
|
- tegra_dma_free_channel(tspi->rx_dma);
|
|
|
-#else
|
|
|
dma_release_channel(tspi->rx_dma);
|
|
|
-#endif
|
|
|
err3:
|
|
|
clk_put(tspi->clk);
|
|
|
err2:
|
|
@@ -656,12 +608,7 @@ static int __devexit spi_tegra_remove(struct platform_device *pdev)
|
|
|
tspi = spi_master_get_devdata(master);
|
|
|
|
|
|
spi_unregister_master(master);
|
|
|
-#if defined(CONFIG_TEGRA_SYSTEM_DMA)
|
|
|
- tegra_dma_free_channel(tspi->rx_dma);
|
|
|
-#else
|
|
|
dma_release_channel(tspi->rx_dma);
|
|
|
-#endif
|
|
|
-
|
|
|
dma_free_coherent(&pdev->dev, sizeof(u32) * BB_LEN,
|
|
|
tspi->rx_bb, tspi->rx_bb_phys);
|
|
|
|