Example #1
0
static int nxp_spdif_set_plat_param(struct nxp_spdif_snd_param *par, void *data)
{
	struct platform_device *pdev = data;
	struct nxp_spdif_plat_data *plat = pdev->dev.platform_data;
	struct nxp_pcm_dma_param *dma = &par->dma;
	unsigned int phy_base = SPDIF_BASEADDR;

    par->sample_rate = plat->sample_rate ? plat->sample_rate : DEF_SAMPLE_RATE;
	par->base_addr = IO_ADDRESS(phy_base);
	spin_lock_init(&par->lock);

	if (!plat->dma_ch)
		return -EINVAL;

	dma->active = true;
	dma->dma_filter = plat->dma_filter;
	dma->dma_ch_name = (char*)(plat->dma_ch);
	dma->peri_addr = phy_base + SPDIF_DAT_OFFSET;	/* SPDIF DAT */
	dma->bus_width_byte = SPDIF_BUS_WIDTH;
	dma->max_burst_byte = SPDIF_MAX_BURST;
	pr_debug("spdif-rx: %s, %s dma, addr 0x%x, bus %dbyte, burst %dbyte\n",
		STREAM_STR(1), dma->dma_ch_name, dma->peri_addr,
		dma->bus_width_byte, dma->max_burst_byte);

	return nxp_spdif_check_param(par);
}
Example #2
0
static int nxp_pdm_set_plat_param(struct nxp_pdm_snd_param *par, void *data)
{
	struct platform_device *pdev = data;
	struct nxp_pdm_plat_data *plat = pdev->dev.platform_data;
	struct nxp_pcm_dma_param *dma = &par->dma;
	unsigned int phy_base = PDM_BASEADDR;
	int ret = 0;

    par->sample_rate = plat->sample_rate ? plat->sample_rate : DEF_SAMPLE_RATE;
	par->base_addr = IO_ADDRESS(phy_base);
	spin_lock_init(&par->lock);

	if (!plat->dma_ch)
		return -EINVAL;

	dma->active = true;
	dma->dma_filter = plat->dma_filter;
	dma->dma_ch_name = (char*)(plat->dma_ch);
	dma->peri_addr = phy_base + PDM_DATA_OFFSET;	/* PDM DAT */
	dma->bus_width_byte = PDM_BUS_WIDTH;
	dma->max_burst_byte = PDM_MAX_BURST;
	pr_debug("pdm-rec: %s, %s dma, addr 0x%x, bus %dbyte, burst %dbyte\n",
		STREAM_STR(1), dma->dma_ch_name, dma->peri_addr,
		dma->bus_width_byte, dma->max_burst_byte);

	par->clk = clk_get(&pdev->dev, NULL);
	if (IS_ERR(par->clk)) {
		ret = PTR_ERR(par->clk);
		return ret;
	}

	return nxp_pdm_check_param(par);
}
Example #3
0
static int nxp_spdif_trigger(struct snd_pcm_substream *substream,
				int cmd, struct snd_soc_dai *dai)
{
	struct nxp_spdif_snd_param *par = snd_soc_dai_get_drvdata(dai);
	int stream = substream->stream;
	pr_debug("%s: %s cmd=%d\n", __func__, STREAM_STR(stream), cmd);

	switch (cmd) {
	case SNDRV_PCM_TRIGGER_RESUME:
	case SNDRV_PCM_TRIGGER_START:
		spdif_start(par, stream);
		break;
	case SNDRV_PCM_TRIGGER_SUSPEND:
	case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
	case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
	case SNDRV_PCM_TRIGGER_STOP:
		spdif_stop(par, stream);
		break;

	default:
		return -EINVAL;
	}
	return 0;
}