/**
 * BAM DMA device enable
 *
 * This function initializes a BAM DMA device.
 *
 * @dev - pointer to BAM DMA device context
 *
 * @return 0 on success, negative value on error
 *
 */
static int sps_dma_device_disable(struct bamdma_device *dev)
{
	u32 pipe_index;

	if (!dev->enabled)
		return 0;

	/* Do not disable if channels active */
	for (pipe_index = 0; pipe_index < dev->num_pipes; pipe_index++) {
		if (dev->pipes[pipe_index] != PIPE_INACTIVE)
			break;
	}

	if (pipe_index < dev->num_pipes) {
		SPS_ERR("Failed to disable BAM-DMA %x: channels are active",
			dev->phys_addr);
		return SPS_ERROR;
	}

	dev->enabled = false;

	/* Disable BAM device */
	if (sps_bam_disable(dev->bam)) {
		SPS_ERR("Failed to disable BAM-DMA %x BAM", dev->phys_addr);
		return SPS_ERROR;
	}

	/* Is the BAM-DMA device locally controlled? */
	if (dev->local)
		/* Disable BAM-DMA device */
		dma_write_reg(dev->virt_addr, DMA_ENBL, 0);

	return 0;
}
예제 #2
0
static int sps_dma_device_disable(struct bamdma_device *dev)
{
	u32 pipe_index;

	if (!dev->enabled)
		return 0;

	
	for (pipe_index = 0; pipe_index < dev->num_pipes; pipe_index++) {
		if (dev->pipes[pipe_index] != PIPE_INACTIVE)
			break;
	}

	if (pipe_index < dev->num_pipes) {
		SPS_ERR("sps:Fail to disable BAM-DMA %x:channels are active",
			dev->phys_addr);
		return SPS_ERROR;
	}

	dev->enabled = false;

	
	if (sps_bam_disable(dev->bam)) {
		SPS_ERR("sps:Fail to disable BAM-DMA BAM:%x", dev->phys_addr);
		return SPS_ERROR;
	}

	
	if (dev->local)
		
		dma_write_reg(dev->virt_addr, DMA_ENBL, 0);

	return 0;
}
예제 #3
0
static int sps_dma_device_enable(struct bamdma_device *dev)
{
	if (dev->enabled)
		return 0;

	if (dev->local)
		dma_write_reg(dev->virt_addr, DMA_ENBL, 1);

	
	if (sps_bam_enable(dev->bam)) {
		SPS_ERR("sps:Failed to enable BAM DMA's BAM: %x",
			dev->phys_addr);
		return SPS_ERROR;
	}

	dev->enabled = true;

	return 0;
}
/**
 * BAM DMA device enable
 *
 * This function enables a BAM DMA device and the associated BAM.
 *
 * @dev - pointer to BAM DMA device context
 *
 * @return 0 on success, negative value on error
 *
 */
static int sps_dma_device_enable(struct bamdma_device *dev)
{
	if (dev->enabled)
		return 0;

	/*
	 *  If the BAM-DMA device is locally controlled then enable BAM-DMA
	 *  device
	 */
	if (dev->local)
		dma_write_reg(dev->virt_addr, DMA_ENBL, 1);

	/* Enable BAM device */
	if (sps_bam_enable(dev->bam)) {
		SPS_ERR("Failed to enable BAM DMA's BAM: %x", dev->phys_addr);
		return SPS_ERROR;
	}

	dev->enabled = true;

	return 0;
}