static int config(struct pcm *pcm) { int ret = 0, i; struct audio_buffer *buf; pr_debug("%s\n", __func__); ret = q6asm_audio_client_buf_alloc_contiguous(OUT, pcm->ac, pcm->buffer_size, pcm->buffer_count); if (ret < 0) { pr_err("Audio Start: Buffer Allocation failed rc = %d\n", ret); return -ENOMEM; } buf = pcm->ac->port[OUT].buf; if (buf == NULL || buf[0].data == NULL) return -ENOMEM; memset(buf[0].data, 0, pcm->buffer_size * pcm->buffer_count); pcm->dma_addr = (u32) buf[0].phys; pcm->dma_virt = (u32) buf[0].data; for (i = 0; i < pcm->buffer_count; i++) { pcm->dma_buf[i].addr = (u32) (buf[i].phys); pcm->dma_buf[i].v_addr = (u32) (buf[i].data); pcm->dma_buf[i].used = 0; } ret = afe_register_get_events(RT_PROXY_DAI_001_TX, pcm_afe_callback, pcm); if (ret < 0) { pr_err("afe-pcm:register for events failed\n"); return ret; } ret = afe_cmd_memory_map(pcm->dma_addr, pcm->buffer_size * pcm->buffer_count); if (ret < 0) { pr_err("fail to map memory to DSP\n"); return ret; } pr_debug("%s:success\n", __func__); return ret; }
static int msm_afe_capture_prepare(struct snd_pcm_substream *substream) { struct snd_pcm_runtime *runtime = substream->runtime; struct pcm_afe_info *prtd = runtime->private_data; struct snd_soc_pcm_runtime *rtd = substream->private_data; struct snd_soc_dai *dai = rtd->cpu_dai; int ret = 0; pr_debug("%s\n", __func__); pr_debug("%s: dai->id =%x\n", __func__, dai->id); ret = afe_register_get_events(dai->id, pcm_afe_process_rx_pkt, prtd); if (ret < 0) { pr_err("afe-pcm:register for events failed\n"); return ret; } pr_debug("%s:success\n", __func__); prtd->prepared++; return 0; }