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); }
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); }
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; }