case SNDRV_PCM_TRIGGER_START:
        case SNDRV_PCM_TRIGGER_RESUME:
        case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
-               edma_start(prtd->asp_channel);
+               edma_resume(prtd->asp_channel);
                break;
        case SNDRV_PCM_TRIGGER_STOP:
        case SNDRV_PCM_TRIGGER_SUSPEND:
        case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
-               edma_stop(prtd->asp_channel);
+               edma_pause(prtd->asp_channel);
                break;
        default:
                ret = -EINVAL;
                        /* copy 1st iram buffer */
                        edma_start(prtd->ram_channel);
                }
+               edma_start(prtd->asp_channel);
                return 0;
        }
        prtd->period = 0;
        edma_read_slot(prtd->asp_link[0], &prtd->asp_params);
        edma_write_slot(prtd->asp_channel, &prtd->asp_params);
        davinci_pcm_enqueue_dma(substream);
+       edma_start(prtd->asp_channel);
 
        return 0;
 }