void DMAbuf_deinit(int dev) { struct audio_operations *adev = audio_devs[dev]; /* This routine is called when driver is being unloaded */ if (!adev) return; /* Persistent DMA buffers deallocated here */ if (sound_dmap_flag == DMAP_KEEP_ON_CLOSE) { sound_free_dmap(adev->dmap_out); if (adev->flags & DMA_DUPLEX) sound_free_dmap(adev->dmap_in); } }
static void close_dmap(struct audio_operations *adev, struct dma_buffparms *dmap) { unsigned long flags; sound_close_dma(dmap->dma); if (dmap->flags & DMA_BUSY) dmap->dma_mode = DMODE_NONE; dmap->flags &= ~DMA_BUSY; flags=claim_dma_lock(); disable_dma(dmap->dma); release_dma_lock(flags); if (sound_dmap_flag == DMAP_FREE_ON_CLOSE) sound_free_dmap(dmap); }