static int qsd_pcm_playback_copy(struct snd_pcm_substream *substream, int a, snd_pcm_uframes_t hwoff, void __user *buf, snd_pcm_uframes_t frames) { int fbytes = 0; size_t xfer; int rc; struct snd_pcm_runtime *runtime = substream->runtime; struct qsd_audio *prtd = runtime->private_data; fbytes = frames_to_bytes(runtime, frames); prtd->cbs.buffer = (void *)buf; prtd->cbs.phys_addr = 0; prtd->cbs.max_size = fbytes; prtd->cbs.actual_size = fbytes; prtd->pcm_buf_pos += fbytes; mutex_lock(&the_locks.lock); xfer = cad_write(prtd->cad_w_handle, &prtd->cbs); mutex_unlock(&the_locks.lock); mutex_lock(&the_locks.mixer_lock); if (qsd_glb_ctl.update) { rc = qsd_audio_volume_update(prtd); qsd_glb_ctl.update = 0; } mutex_unlock(&the_locks.mixer_lock); return 0; }
static ssize_t msm8k_mp3_write(struct file *f, const char __user *buf, size_t cnt, loff_t *pos) { struct cad_buf_struct_type cbs; struct mp3 *mp3 = f->private_data; D("%s\n", __func__); memset(&cbs, 0, sizeof(struct cad_buf_struct_type)); cbs.buffer = (void *)buf; cbs.phys_addr = 0; cbs.max_size = cnt; cad_write(mp3->cad_w_handle, &cbs); return cnt; }
static ssize_t msm8k_aac_write(struct file *f, const char __user *buf, size_t cnt, loff_t *pos) { struct cad_buf_struct_type cbs; struct aac *aac = f->private_data; D("%s\n", __func__); memset(&cbs, 0, sizeof(struct cad_buf_struct_type)); cbs.buffer = (void *)buf; cbs.phys_addr = 0; cbs.max_size = cnt; mutex_lock(&aac->write_lock); cad_write(aac->cad_w_handle, &cbs); mutex_unlock(&aac->write_lock); return cnt; }