aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJon Hunter <jonathanh@nvidia.com>2015-11-13 11:39:41 -0500
committerVinod Koul <vinod.koul@intel.com>2015-12-05 05:43:08 -0500
commit4aad5be04088d9b6c2783d5f0fb6b1ac7bbc45c1 (patch)
treec06405095ada6e046a163d44e95e1b116cd487b6
parent68ae7a93fb0e6432baaa7c323a650b1b5461643f (diff)
dmaengine: tegra-apb: Only save channel state for those in use
Currently the tegra-apb DMA driver suspend/resume helpers, save and restore the registers for all channels regardless of whether they are in use or not. Change this so that only channels that have been allocated and configured are saved and restored. Signed-off-by: Jon Hunter <jonathanh@nvidia.com> Signed-off-by: Vinod Koul <vinod.koul@intel.com>
-rw-r--r--drivers/dma/tegra20-apb-dma.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/drivers/dma/tegra20-apb-dma.c b/drivers/dma/tegra20-apb-dma.c
index 18a561376c63..d4cabd6931e5 100644
--- a/drivers/dma/tegra20-apb-dma.c
+++ b/drivers/dma/tegra20-apb-dma.c
@@ -1545,6 +1545,10 @@ static int tegra_dma_pm_suspend(struct device *dev)
1545 struct tegra_dma_channel *tdc = &tdma->channels[i]; 1545 struct tegra_dma_channel *tdc = &tdma->channels[i];
1546 struct tegra_dma_channel_regs *ch_reg = &tdc->channel_reg; 1546 struct tegra_dma_channel_regs *ch_reg = &tdc->channel_reg;
1547 1547
1548 /* Only save the state of DMA channels that are in use */
1549 if (!tdc->config_init)
1550 continue;
1551
1548 ch_reg->csr = tdc_read(tdc, TEGRA_APBDMA_CHAN_CSR); 1552 ch_reg->csr = tdc_read(tdc, TEGRA_APBDMA_CHAN_CSR);
1549 ch_reg->ahb_ptr = tdc_read(tdc, TEGRA_APBDMA_CHAN_AHBPTR); 1553 ch_reg->ahb_ptr = tdc_read(tdc, TEGRA_APBDMA_CHAN_AHBPTR);
1550 ch_reg->apb_ptr = tdc_read(tdc, TEGRA_APBDMA_CHAN_APBPTR); 1554 ch_reg->apb_ptr = tdc_read(tdc, TEGRA_APBDMA_CHAN_APBPTR);
@@ -1579,6 +1583,10 @@ static int tegra_dma_pm_resume(struct device *dev)
1579 struct tegra_dma_channel *tdc = &tdma->channels[i]; 1583 struct tegra_dma_channel *tdc = &tdma->channels[i];
1580 struct tegra_dma_channel_regs *ch_reg = &tdc->channel_reg; 1584 struct tegra_dma_channel_regs *ch_reg = &tdc->channel_reg;
1581 1585
1586 /* Only restore the state of DMA channels that are in use */
1587 if (!tdc->config_init)
1588 continue;
1589
1582 if (tdma->chip_data->support_separate_wcount_reg) 1590 if (tdma->chip_data->support_separate_wcount_reg)
1583 tdc_write(tdc, TEGRA_APBDMA_CHAN_WCOUNT, 1591 tdc_write(tdc, TEGRA_APBDMA_CHAN_WCOUNT,
1584 ch_reg->wcount); 1592 ch_reg->wcount);