dac->sample_rate = hal2_compute_rate(dac, runtime->rate);
        memset(&dac->pcm_indirect, 0, sizeof(dac->pcm_indirect));
        dac->pcm_indirect.hw_buffer_size = H2_BUF_SIZE;
+       dac->pcm_indirect.hw_queue_size = H2_BUF_SIZE / 2;
+       dac->pcm_indirect.hw_io = dac->buffer_dma;
        dac->pcm_indirect.sw_buffer_size = snd_pcm_lib_buffer_bytes(substream);
        dac->substream = substream;
        hal2_setup_dac(hal2);
 
        switch (cmd) {
        case SNDRV_PCM_TRIGGER_START:
-               hal2->dac.pcm_indirect.hw_io = hal2->dac.buffer_dma;
-               hal2->dac.pcm_indirect.hw_data = 0;
                hal2_start_dac(hal2);
                break;
        case SNDRV_PCM_TRIGGER_STOP:
        struct snd_hal2 *hal2 = snd_pcm_substream_chip(substream);
        struct hal2_codec *dac = &hal2->dac;
 
-       dac->pcm_indirect.hw_queue_size = H2_BUF_SIZE / 2;
        return snd_pcm_indirect_playback_transfer(substream,
                                                  &dac->pcm_indirect,
                                                  hal2_playback_transfer);
        memset(&adc->pcm_indirect, 0, sizeof(adc->pcm_indirect));
        adc->pcm_indirect.hw_buffer_size = H2_BUF_SIZE;
        adc->pcm_indirect.hw_queue_size = H2_BUF_SIZE / 2;
+       adc->pcm_indirect.hw_io = adc->buffer_dma;
        adc->pcm_indirect.sw_buffer_size = snd_pcm_lib_buffer_bytes(substream);
        adc->substream = substream;
        hal2_setup_adc(hal2);
 
        switch (cmd) {
        case SNDRV_PCM_TRIGGER_START:
-               hal2->adc.pcm_indirect.hw_io = hal2->adc.buffer_dma;
-               hal2->adc.pcm_indirect.hw_data = 0;
-               printk(KERN_DEBUG "buffer_dma %x\n", hal2->adc.buffer_dma);
                hal2_start_adc(hal2);
                break;
        case SNDRV_PCM_TRIGGER_STOP: