diff options
author | Jonas Aaberg <jonas.aberg@stericsson.com> | 2010-06-21 01:26:01 +0400 |
---|---|---|
committer | Dan Williams <dan.j.williams@intel.com> | 2010-06-23 05:01:55 +0400 |
commit | 1d392a7ba43300b0bde877de15121b261d7a6ce2 (patch) | |
tree | 2e45005cfbe64623117c764d791b9e98c75ebd52 /drivers/dma | |
parent | 2123a61e174074b849fce2277412836b1b897942 (diff) | |
download | linux-1d392a7ba43300b0bde877de15121b261d7a6ce2.tar.xz |
DMAENGINE: ste_dma40: no premature stop
Correct bug that could cause paused channels to stop.
Signed-off-by: Jonas Aaberg <jonas.aberg@stericsson.com>
Signed-off-by: Linus Walleij <linus.walleij@stericsson.com>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Diffstat (limited to 'drivers/dma')
-rw-r--r-- | drivers/dma/ste_dma40.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/drivers/dma/ste_dma40.c b/drivers/dma/ste_dma40.c index aa098a672605..8c46bb803dbb 100644 --- a/drivers/dma/ste_dma40.c +++ b/drivers/dma/ste_dma40.c @@ -508,6 +508,7 @@ static int d40_channel_execute_command(struct d40_chan *d40c, void __iomem *active_reg; int ret = 0; unsigned long flags; + u32 wmask; spin_lock_irqsave(&d40c->base->execmd_lock, flags); @@ -525,7 +526,9 @@ static int d40_channel_execute_command(struct d40_chan *d40c, goto done; } - writel(command << D40_CHAN_POS(d40c->phy_chan->num), active_reg); + wmask = 0xffffffff & ~(D40_CHAN_POS_MASK(d40c->phy_chan->num)); + writel(wmask | (command << D40_CHAN_POS(d40c->phy_chan->num)), + active_reg); if (command == D40_DMA_SUSPEND_REQ) { |