diff options
author | Jon Hunter <jonathanh@nvidia.com> | 2015-11-13 11:39:40 -0500 |
---|---|---|
committer | Vinod Koul <vinod.koul@intel.com> | 2015-12-05 05:43:08 -0500 |
commit | 68ae7a93fb0e6432baaa7c323a650b1b5461643f (patch) | |
tree | 3e5f8378cc6b9a69d554bd51d97e3ab30313d527 | |
parent | 286a6441a333abfa21a700683db5b3302f75a4de (diff) |
dmaengine: tegra-apb: Save and restore word count
Newer tegra devices have a separate word count register per channel that
contains the number of words to be transferred. This register is not
saved or restored by the suspend/resume helpers for these newer devices
and so ensure that it is.
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.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/drivers/dma/tegra20-apb-dma.c b/drivers/dma/tegra20-apb-dma.c index 355dbc354818..18a561376c63 100644 --- a/drivers/dma/tegra20-apb-dma.c +++ b/drivers/dma/tegra20-apb-dma.c | |||
@@ -1550,6 +1550,9 @@ static int tegra_dma_pm_suspend(struct device *dev) | |||
1550 | ch_reg->apb_ptr = tdc_read(tdc, TEGRA_APBDMA_CHAN_APBPTR); | 1550 | ch_reg->apb_ptr = tdc_read(tdc, TEGRA_APBDMA_CHAN_APBPTR); |
1551 | ch_reg->ahb_seq = tdc_read(tdc, TEGRA_APBDMA_CHAN_AHBSEQ); | 1551 | ch_reg->ahb_seq = tdc_read(tdc, TEGRA_APBDMA_CHAN_AHBSEQ); |
1552 | ch_reg->apb_seq = tdc_read(tdc, TEGRA_APBDMA_CHAN_APBSEQ); | 1552 | ch_reg->apb_seq = tdc_read(tdc, TEGRA_APBDMA_CHAN_APBSEQ); |
1553 | if (tdma->chip_data->support_separate_wcount_reg) | ||
1554 | ch_reg->wcount = tdc_read(tdc, | ||
1555 | TEGRA_APBDMA_CHAN_WCOUNT); | ||
1553 | } | 1556 | } |
1554 | 1557 | ||
1555 | /* Disable clock */ | 1558 | /* Disable clock */ |
@@ -1576,6 +1579,9 @@ static int tegra_dma_pm_resume(struct device *dev) | |||
1576 | struct tegra_dma_channel *tdc = &tdma->channels[i]; | 1579 | struct tegra_dma_channel *tdc = &tdma->channels[i]; |
1577 | struct tegra_dma_channel_regs *ch_reg = &tdc->channel_reg; | 1580 | struct tegra_dma_channel_regs *ch_reg = &tdc->channel_reg; |
1578 | 1581 | ||
1582 | if (tdma->chip_data->support_separate_wcount_reg) | ||
1583 | tdc_write(tdc, TEGRA_APBDMA_CHAN_WCOUNT, | ||
1584 | ch_reg->wcount); | ||
1579 | tdc_write(tdc, TEGRA_APBDMA_CHAN_APBSEQ, ch_reg->apb_seq); | 1585 | tdc_write(tdc, TEGRA_APBDMA_CHAN_APBSEQ, ch_reg->apb_seq); |
1580 | tdc_write(tdc, TEGRA_APBDMA_CHAN_APBPTR, ch_reg->apb_ptr); | 1586 | tdc_write(tdc, TEGRA_APBDMA_CHAN_APBPTR, ch_reg->apb_ptr); |
1581 | tdc_write(tdc, TEGRA_APBDMA_CHAN_AHBSEQ, ch_reg->ahb_seq); | 1587 | tdc_write(tdc, TEGRA_APBDMA_CHAN_AHBSEQ, ch_reg->ahb_seq); |