static int msm_pcm_playback_copy(struct snd_pcm_substream *substream, int a, snd_pcm_uframes_t hwoff, void __user *buf, snd_pcm_uframes_t frames) { int rc = 1; int fbytes = 0; struct snd_pcm_runtime *runtime = substream->runtime; struct msm_audio *prtd = runtime->private_data; fbytes = frames_to_bytes(runtime, frames); rc = alsa_send_buffer(prtd, buf, fbytes, NULL); ++copy_count; prtd->pcm_buf_pos += fbytes; if (copy_count == 1) { mutex_lock(&the_locks.lock); alsa_audio_configure(prtd); mutex_unlock(&the_locks.lock); } if ((prtd->running) && (msm_vol_ctl.update)) { rc = msm_audio_volume_update(PCMPLAYBACK_DECODERID, msm_vol_ctl.volume, msm_vol_ctl.pan); msm_vol_ctl.update = 0; } return rc; }
static int msm_pcm_playback_copy(struct snd_pcm_substream *substream, int a, snd_pcm_uframes_t hwoff, void __user *buf, snd_pcm_uframes_t frames) { int rc = 1; int fbytes = 0; struct snd_pcm_runtime *runtime = substream->runtime; struct msm_audio *prtd = runtime->private_data; fbytes = frames_to_bytes(runtime, frames); rc = alsa_send_buffer(prtd, buf, fbytes, NULL); ++copy_count; if (copy_count == 1) { mutex_lock(&the_locks.lock); alsa_audio_configure(prtd); mutex_unlock(&the_locks.lock); } return rc; }
static int msm_pcm_playback_prepare(struct snd_pcm_substream *substream) { struct snd_pcm_runtime *runtime = substream->runtime; struct msm_audio *prtd = runtime->private_data; prtd->pcm_size = snd_pcm_lib_buffer_bytes(substream); prtd->pcm_count = snd_pcm_lib_period_bytes(substream); prtd->pcm_irq_pos = 0; prtd->pcm_buf_pos = 0; /* rate and channels are sent to audio driver */ prtd->out_sample_rate = runtime->rate; prtd->out_channel_mode = runtime->channels; if (prtd->enabled | !(prtd->mmap_flag)) return 0; prtd->data = substream->dma_buffer.area; prtd->phys = substream->dma_buffer.addr; prtd->out[0].data = prtd->data + 0; prtd->out[0].addr = prtd->phys + 0; prtd->out[0].size = BUFSZ; prtd->out[1].data = prtd->data + BUFSZ; prtd->out[1].addr = prtd->phys + BUFSZ; prtd->out[1].size = BUFSZ; prtd->out[0].used = prtd->pcm_count; prtd->out[1].used = prtd->pcm_count; mutex_lock(&the_locks.lock); alsa_audio_configure(prtd); mutex_unlock(&the_locks.lock); return 0; }