コード例 #1
0
ファイル: tegra_pcm.c プロジェクト: 020gzh/linux
int tegra_pcm_platform_register_with_chan_names(struct device *dev,
				struct snd_dmaengine_pcm_config *config,
				char *txdmachan, char *rxdmachan)
{
	*config = tegra_dmaengine_pcm_config;
	config->dma_dev = dev->parent;
	config->chan_names[0] = txdmachan;
	config->chan_names[1] = rxdmachan;

	return snd_dmaengine_pcm_register(dev, config, 0);
}
コード例 #2
0
ファイル: rt5350-pcm.c プロジェクト: qrsrjm/openwrt-rt5350
static int rt5350_pcm_dev_probe(struct platform_device *pdev)
{
	struct rt5350_pcm *pcm;
	int ret;

	snd_dmaengine_pcm_register(&pdev->dev,
		&rt5350_dmaengine_pcm_config,
		SND_DMAENGINE_PCM_FLAG_COMPAT);

	pcm = kzalloc(sizeof(*pcm), GFP_KERNEL);
	if (!pcm)
		return -ENOMEM;

	pcm->mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
	if (!pcm->mem) {
		ret = -ENOENT;
		goto err_free;
	}

	pcm->mem = request_mem_region(pcm->mem->start, resource_size(pcm->mem),
				pdev->name);
	if (!pcm->mem) {
		ret = -EBUSY;
		goto err_free;
	}

	pcm->base = ioremap_nocache(pcm->mem->start, resource_size(pcm->mem));
	if (!pcm->base) {
		ret = -EBUSY;
		goto err_release_mem_region;
	}

	pcm->phys_base = pcm->mem->start;

	platform_set_drvdata(pdev, pcm);
	ret = snd_soc_register_component(&pdev->dev, &rt5350_pcm_component,
					 &rt5350_pcm_dai, 1);

	if (!ret) {
		dev_err(&pdev->dev, "loaded\n");
		return ret;
	}

	dev_err(&pdev->dev, "Failed to register DAI\n");
	iounmap(pcm->base);

err_release_mem_region:
	release_mem_region(pcm->mem->start, resource_size(pcm->mem));
err_free:
	kfree(pcm);

	return ret;
}
コード例 #3
0
int ux500_pcm_register_platform(struct platform_device *pdev)
{
	int ret;

	ret = snd_dmaengine_pcm_register(&pdev->dev,
			&ux500_dmaengine_pcm_config,
			SND_DMAENGINE_PCM_FLAG_NO_RESIDUE |
			SND_DMAENGINE_PCM_FLAG_COMPAT |
			SND_DMAENGINE_PCM_FLAG_NO_DT);
	if (ret < 0) {
		dev_err(&pdev->dev,
			"%s: ERROR: Failed to register platform '%s' (%d)!\n",
			__func__, pdev->name, ret);
		return ret;
	}

	return 0;
}
コード例 #4
0
ファイル: soc-devres.c プロジェクト: 020gzh/linux
/**
 * devm_snd_dmaengine_pcm_register - resource managed dmaengine PCM registration
 * @dev: The parent device for the PCM device
 * @config: Platform specific PCM configuration
 * @flags: Platform specific quirks
 *
 * Register a dmaengine based PCM device with automatic unregistration when the
 * device is unregistered.
 */
int devm_snd_dmaengine_pcm_register(struct device *dev,
	const struct snd_dmaengine_pcm_config *config, unsigned int flags)
{
	struct device **ptr;
	int ret;

	ptr = devres_alloc(devm_dmaengine_pcm_release, sizeof(*ptr), GFP_KERNEL);
	if (!ptr)
		return -ENOMEM;

	ret = snd_dmaengine_pcm_register(dev, config, flags);
	if (ret == 0) {
		*ptr = dev;
		devres_add(dev, ptr);
	} else {
		devres_free(ptr);
	}

	return ret;
}
コード例 #5
0
ファイル: rockchip_i2s.c プロジェクト: AkyZero/wrapfs-latest
static int rockchip_i2s_probe(struct platform_device *pdev)
{
	struct rk_i2s_dev *i2s;
	struct resource *res;
	void __iomem *regs;
	int ret;

	i2s = devm_kzalloc(&pdev->dev, sizeof(*i2s), GFP_KERNEL);
	if (!i2s) {
		dev_err(&pdev->dev, "Can't allocate rk_i2s_dev\n");
		return -ENOMEM;
	}

	/* try to prepare related clocks */
	i2s->hclk = devm_clk_get(&pdev->dev, "i2s_hclk");
	if (IS_ERR(i2s->hclk)) {
		dev_err(&pdev->dev, "Can't retrieve i2s bus clock\n");
		return PTR_ERR(i2s->hclk);
	}

	i2s->mclk = devm_clk_get(&pdev->dev, "i2s_clk");
	if (IS_ERR(i2s->mclk)) {
		dev_err(&pdev->dev, "Can't retrieve i2s master clock\n");
		return PTR_ERR(i2s->mclk);
	}

	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
	regs = devm_ioremap_resource(&pdev->dev, res);
	if (IS_ERR(regs))
		return PTR_ERR(regs);

	i2s->regmap = devm_regmap_init_mmio(&pdev->dev, regs,
					    &rockchip_i2s_regmap_config);
	if (IS_ERR(i2s->regmap)) {
		dev_err(&pdev->dev,
			"Failed to initialise managed register map\n");
		return PTR_ERR(i2s->regmap);
	}

	i2s->playback_dma_data.addr = res->start + I2S_TXDR;
	i2s->playback_dma_data.addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
	i2s->playback_dma_data.maxburst = 16;

	i2s->capture_dma_data.addr = res->start + I2S_RXDR;
	i2s->capture_dma_data.addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
	i2s->capture_dma_data.maxburst = 16;

	i2s->dev = &pdev->dev;
	dev_set_drvdata(&pdev->dev, i2s);

	pm_runtime_enable(&pdev->dev);
	if (!pm_runtime_enabled(&pdev->dev)) {
		ret = i2s_runtime_resume(&pdev->dev);
		if (ret)
			goto err_pm_disable;
	}

	ret = devm_snd_soc_register_component(&pdev->dev,
					      &rockchip_i2s_component,
					      &rockchip_i2s_dai, 1);
	if (ret) {
		dev_err(&pdev->dev, "Could not register DAI\n");
		goto err_suspend;
	}

	ret = snd_dmaengine_pcm_register(&pdev->dev, NULL, 0);
	if (ret) {
		dev_err(&pdev->dev, "Could not register PCM\n");
		goto err_pcm_register;
	}

	return 0;

err_pcm_register:
	snd_dmaengine_pcm_unregister(&pdev->dev);
err_suspend:
	if (!pm_runtime_status_suspended(&pdev->dev))
		i2s_runtime_suspend(&pdev->dev);
err_pm_disable:
	pm_runtime_disable(&pdev->dev);

	return ret;
}
コード例 #6
0
int tegra_pcm_platform_register(struct device *dev)
{
	return snd_dmaengine_pcm_register(dev, &tegra_dmaengine_pcm_config,
			SND_DMAENGINE_PCM_FLAG_NO_DT |
			SND_DMAENGINE_PCM_FLAG_COMPAT);
}
コード例 #7
0
ファイル: atmel-pcm-dma.c プロジェクト: 020gzh/linux
int atmel_pcm_dma_platform_register(struct device *dev)
{
	return snd_dmaengine_pcm_register(dev, &atmel_dmaengine_pcm_config, 0);
}
コード例 #8
0
int atmel_pcm_dma_platform_register(struct device *dev)
{
	return snd_dmaengine_pcm_register(dev, &atmel_dmaengine_pcm_config,
			SND_DMAENGINE_PCM_FLAG_NO_RESIDUE);
}
コード例 #9
0
int mxs_pcm_platform_register(struct device *dev)
{
	return snd_dmaengine_pcm_register(dev, &mxs_dmaengine_pcm_config,
		SND_DMAENGINE_PCM_FLAG_NO_RESIDUE |
		SND_DMAENGINE_PCM_FLAG_HALF_DUPLEX);
}
コード例 #10
0
ファイル: tegra_pcm.c プロジェクト: 020gzh/linux
int tegra_pcm_platform_register(struct device *dev)
{
	return snd_dmaengine_pcm_register(dev, &tegra_dmaengine_pcm_config, 0);
}
コード例 #11
0
int rockchip_pcm_platform_register(struct device *dev)
{
	return snd_dmaengine_pcm_register(dev, &rockchip_dmaengine_pcm_config,
			SND_DMAENGINE_PCM_FLAG_COMPAT|
			SND_DMAENGINE_PCM_FLAG_NO_RESIDUE);
}