void cx25821_free_mem_upstream_audio(struct cx25821_dev *dev)
{
	if (dev->_audio_is_running)
		cx25821_stop_upstream_audio(dev);

	cx25821_free_memory_audio(dev);
}
static int cx25821_audio_upstream_buffer_prepare(struct cx25821_dev *dev,
						 struct sram_channel *sram_ch,
						 int bpl)
{
	int ret = 0;
	dma_addr_t dma_addr;
	dma_addr_t data_dma_addr;

	cx25821_free_memory_audio(dev);

	dev->_risc_virt_addr =
	    pci_alloc_consistent(dev->pci, dev->audio_upstream_riscbuf_size,
				 &dma_addr);
	dev->_risc_virt_start_addr = dev->_risc_virt_addr;
	dev->_risc_phys_start_addr = dma_addr;
	dev->_risc_phys_addr = dma_addr;
	dev->_audiorisc_size = dev->audio_upstream_riscbuf_size;

	if (!dev->_risc_virt_addr) {
		printk
		    ("cx25821 ERROR: pci_alloc_consistent() FAILED to allocate memory for RISC program! Returning.\n");
		return -ENOMEM;
	}
	//Clear out memory at address
	memset(dev->_risc_virt_addr, 0, dev->_audiorisc_size);

	//For Audio Data buffer allocation
	dev->_audiodata_buf_virt_addr =
	    pci_alloc_consistent(dev->pci, dev->audio_upstream_databuf_size,
				 &data_dma_addr);
	dev->_audiodata_buf_phys_addr = data_dma_addr;
	dev->_audiodata_buf_size = dev->audio_upstream_databuf_size;

	if (!dev->_audiodata_buf_virt_addr) {
		printk
		    ("cx25821 ERROR: pci_alloc_consistent() FAILED to allocate memory for data buffer! Returning. \n");
		return -ENOMEM;
	}
	//Clear out memory at address
	memset(dev->_audiodata_buf_virt_addr, 0, dev->_audiodata_buf_size);

	ret = cx25821_openfile_audio(dev, sram_ch);
	if (ret < 0)
		return ret;

	//Creating RISC programs
	ret =
	    cx25821_risc_buffer_upstream_audio(dev, dev->pci, bpl,
					       dev->_audio_lines_count);
	if (ret < 0) {
		printk(KERN_DEBUG
		       "cx25821 ERROR creating audio upstream RISC programs! \n");
		goto error;
	}

	return 0;

      error:
	return ret;
}