static int s3c_idma_hw_params(struct snd_pcm_substream *substream, struct snd_pcm_hw_params *params) { struct snd_pcm_runtime *runtime = substream->runtime; struct lpam_i2s_pdata *prtd = substream->runtime->private_data; unsigned long idma_totbytes; pr_debug("Entered %s\n", __func__); idma_totbytes = params_buffer_bytes(params); prtd->end = LP_TXBUFF_ADDR + idma_totbytes; prtd->period = params_periods(params); s3c_idma.dma_end = prtd->end; s3c_idma.period_val = prtd->period; snd_pcm_set_runtime_buffer(substream, &substream->dma_buffer); memset(runtime->dma_area, 0, LP_BUFSIZE); runtime->dma_bytes = idma_totbytes; s3c_idma_setcallbk(s3c_idma_done, params_period_bytes(params)); prtd->start = runtime->dma_addr; prtd->pos = prtd->start; prtd->end = prtd->start + idma_totbytes; printk("DmaAddr=@%x Total=%lubytes PrdSz=%u #Prds=%u\n", prtd->start, idma_totbytes, params_period_bytes(params), prtd->period); return 0; }
static int s3c_idma_hw_params(struct snd_pcm_substream *substream, struct snd_pcm_hw_params *params) { struct snd_pcm_runtime *runtime = substream->runtime; struct lpam_i2s_pdata *prtd = substream->runtime->private_data; pr_debug("Entered %s\n", __func__); snd_pcm_set_runtime_buffer(substream, &substream->dma_buffer); runtime->dma_bytes = params_buffer_bytes(params); memset(runtime->dma_area, 0, runtime->dma_bytes); prtd->start = prtd->pos = runtime->dma_addr; prtd->period = params_periods(params); prtd->periodsz = params_period_bytes(params); prtd->end = LP_TXBUFF_ADDR + runtime->dma_bytes; s3c_idma_setcallbk(substream, s3c_idma_done); pr_info("DmaAddr=@%x Total=%dbytes PrdSz=%d #Prds=%d dma_area=0x%x\n", prtd->start, runtime->dma_bytes, prtd->periodsz, prtd->period, (unsigned int)runtime->dma_area); return 0; }