case SNDRV_PCM_TRIGGER_START:
        case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
        case SNDRV_PCM_TRIGGER_RESUME:
+               if (dma->running && dma->suspended &&
+                   cmd == SNDRV_PCM_TRIGGER_RESUME)
+                       writel(dma->saved_curptr, chip->remap_addr +
+                              dma->ops->dt_cur);
                dma->ops->enable_transfer(chip, 1);
                dma->running = 1;
                dma->suspended = 0;
        case SNDRV_PCM_TRIGGER_STOP:
        case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
        case SNDRV_PCM_TRIGGER_SUSPEND:
+               dma->suspended = cmd == SNDRV_PCM_TRIGGER_SUSPEND;
+               if (dma->running && dma->suspended)
+                       dma->saved_curptr = readl(chip->remap_addr +
+                                                 dma->ops->dt_cur);
                dma->ops->enable_transfer(chip, 0);
                dma->running = 0;
-               dma->suspended = cmd == SNDRV_PCM_TRIGGER_SUSPEND;
                break;
        default:
                err = -EINVAL;
        int i;
 
        snd_power_change_state(card, SNDRV_CTL_POWER_D3hot);
-       for (i = 0; i < NUM_ATI_PCMDEVS; i++)
-               if (chip->pcmdevs[i]) {
-                       struct atiixp_dma *dma = &chip->dmas[i];
-                       if (dma->substream && dma->running)
-                               dma->saved_curptr = readl(chip->remap_addr +
-                                                         dma->ops->dt_cur);
-                       snd_pcm_suspend_all(chip->pcmdevs[i]);
-               }
        for (i = 0; i < NUM_ATI_CODECS; i++)
                snd_ac97_suspend(chip->ac97[i]);
        snd_atiixp_aclink_down(chip);
                                dma->substream->ops->prepare(dma->substream);
                                writel((u32)dma->desc_buf.addr | ATI_REG_LINKPTR_EN,
                                       chip->remap_addr + dma->ops->llp_offset);
-                               writel(dma->saved_curptr, chip->remap_addr +
-                                      dma->ops->dt_cur);
                        }
                }