static int q6_qcelp_in_release(struct inode *inode, struct file *file) { int rc = 0; struct qcelp *qcelp = file->private_data; int i = 0; struct qcelp_fc *fc; mutex_lock(&qcelp->lock); fc = qcelp->qcelp_fc; kthread_stop(fc->task); fc->task = NULL; /*free flow control buffers*/ for (i = 0; i < QCELP_FC_BUFF_CNT; ++i) { kfree(fc->fc_buff[i].data); fc->fc_buff[i].data = NULL; } kfree(fc); if (qcelp->audio_client) rc = q6audio_close(qcelp->audio_client); mutex_unlock(&qcelp->lock); kfree(qcelp); return rc; }
static int q6_aac_in_release(struct inode *inode, struct file *file) { int rc = 0; struct aac *aac = file->private_data; int i = 0; struct aac_fc *fc; mutex_lock(&aac->lock); fc = aac->aac_fc; kthread_stop(fc->task); fc->task = NULL; /*free flow control buffers*/ for (i = 0; i < AAC_FC_BUFF_CNT; ++i) { kfree(fc->fc_buff[i].data); fc->fc_buff[i].data = NULL; } kfree(fc); if (aac->audio_client) rc = q6audio_close(aac->audio_client); mutex_unlock(&aac->lock); kfree(aac); pr_info("[%s:%s] release\n", __MM_FILE__, __func__); return rc; }
static int mp3_release(struct inode *inode, struct file *file) { struct mp3 *mp3 = file->private_data; if (mp3->ac) q6audio_close(mp3->ac); kfree(mp3); return 0; }
static int dtmf_release(struct inode *inode, struct file *file) { struct dtmf *dtmf = file->private_data; if (dtmf->ac) q6audio_close(dtmf->ac); kfree(dtmf); return 0; }
static int pcm_release(struct inode *inode, struct file *file) { struct pcm *pcm = file->private_data; if (pcm->ac) q6audio_close(pcm->ac); kfree(pcm); return 0; }
static int pcm_release(struct inode *inode, struct file *file) { struct pcm *pcm = file->private_data; if (pcm->ac) q6audio_close(pcm->ac); kfree(pcm); pr_info("[%s:%s] release\n", __MM_FILE__, __func__); return 0; }
static int q6_in_release(struct inode *inode, struct file *file) { int rc = 0; struct pcm *pcm = file->private_data; if (pcm->ac) rc = q6audio_close(pcm->ac); kfree(pcm); pr_info("pcm_out: release\n"); return rc; }
static int q6_in_release(struct inode *inode, struct file *file) { int rc = 0; mutex_lock(&pcm_in_lock); if (file->private_data) rc = q6audio_close(file->private_data); pcm_in_opened = 0; mutex_unlock(&pcm_in_lock); pr_info("pcm_in: release\n"); return rc; }
static int pcm_release(struct inode *inode, struct file *file) { struct pcm *pcm = file->private_data; AUDIO_INFO("%s\n", __func__); if (pcm->ac) q6audio_close(pcm->ac); kfree(pcm); pr_info("pcm_out: release\n"); return 0; }
static int q6_amrnb_in_release(struct inode *inode, struct file *file) { int rc = 0; struct amrnb *amrnb = file->private_data; mutex_lock(&amrnb->lock); if (amrnb->audio_client) rc = q6audio_close(amrnb->audio_client); mutex_unlock(&amrnb->lock); kfree(amrnb); return rc; }
static int q6_in_release(struct inode *inode, struct file *file) { int rc = 0; struct pcm *pcm = file->private_data; mutex_lock(&pcm->lock); if (pcm->audio_client) rc = q6audio_close(pcm->audio_client); mutex_unlock(&pcm->lock); kfree(pcm); return rc; }
static int q6_qcelp_in_release(struct inode *inode, struct file *file) { int rc = 0; struct qcelp *qcelp = file->private_data; mutex_lock(&qcelp->lock); if (qcelp->audio_client) rc = q6audio_close(qcelp->audio_client); mutex_unlock(&qcelp->lock); kfree(qcelp); return rc; }
static int q6_evrc_in_release(struct inode *inode, struct file *file) { int rc = 0; struct evrc *evrc = file->private_data; mutex_lock(&evrc->lock); if (evrc->audio_client) rc = q6audio_close(evrc->audio_client); mutex_unlock(&evrc->lock); kfree(evrc); return rc; }
static int qcelp_in_release(struct inode *inode, struct file *file) { int rc = 0; pr_info("qcelp_in: release\n"); mutex_lock(&qcelp_in_lock); if (file->private_data) rc = q6audio_close(file->private_data); kfree(qf); qcelp_in_opened = 0; mutex_unlock(&qcelp_in_lock); return rc; }
static int q6_amrnb_in_release(struct inode *inode, struct file *file) { int rc = 0; struct amrnb *amrnb = file->private_data; mutex_lock(&amrnb->lock); if (amrnb->audio_client) rc = q6audio_close(amrnb->audio_client); mutex_unlock(&amrnb->lock); kfree(amrnb); pr_info("[%s:%s] release\n", __MM_FILE__, __func__); return rc; }
static int q6_evrc_in_release(struct inode *inode, struct file *file) { int rc = 0; struct evrc *evrc = file->private_data; int i = 0; struct evrc_fc *fc; mutex_lock(&evrc->lock); fc = evrc->evrc_fc; kthread_stop(fc->task); fc->task = NULL; /*free flow control buffers*/ for (i = 0; i < EVRC_FC_BUFF_CNT; ++i) { kfree(fc->fc_buff[i].data); fc->fc_buff[i].data = NULL; } kfree(fc); if (evrc->audio_client) rc = q6audio_close(evrc->audio_client); mutex_unlock(&evrc->lock); kfree(evrc); return rc; }
static int q6_aac_in_release(struct inode *inode, struct file *file) { int rc = 0; struct aac *aac = file->private_data; int i = 0; struct aac_fc *fc; mutex_lock(&aac->lock); fc = aac->aac_fc; kthread_stop(fc->task); fc->task = NULL; for (i = 0; i < AAC_FC_BUFF_CNT; ++i) { kfree(fc->fc_buff[i].data); fc->fc_buff[i].data = NULL; } kfree(fc); if (aac->audio_client) rc = q6audio_close(aac->audio_client); mutex_unlock(&aac->lock); kfree(aac); return rc; }
// Jagan- static ssize_t pcm_write(struct file *file, const char __user *buf, size_t count, loff_t *pos) { struct pcm *pcm = file->private_data; struct audio_client *ac; struct audio_buffer *ab; const char __user *start = buf; int xfer; #if 0 // Jagan+ if(!task_has_rt_policy(current)) { struct sched_param param = { .sched_priority = 99 }; printk(KERN_INFO "pcm_write to change to RT tid = %d\n", current->pid); if(sched_setscheduler_nocheck(current, SCHED_FIFO, ¶m )!=0) { printk(KERN_ERR "pcm_write fail to change to RT\n"); } } // Jagan- #endif if (!pcm->ac) pcm_ioctl(file, AUDIO_START, 0); ac = pcm->ac; if (!ac) return -ENODEV; while (count > 0) { ab = ac->buf + ac->cpu_buf; if (ab->used) if (!wait_event_timeout(ac->wait, (ab->used == 0), 5*HZ)) { audio_client_dump(ac); pr_err("[%s:%s] timeout. dsp dead?\n", __MM_FILE__, __func__); q6audio_dsp_not_responding(); } xfer = count; if (xfer > ab->size) xfer = ab->size; if (copy_from_user(ab->data, buf, xfer)) return -EFAULT; buf += xfer; count -= xfer; ab->used = 1; ab->actual_size = xfer; q6audio_write(ac, ab); ac->cpu_buf ^= 1; } return buf - start; } static int pcm_release(struct inode *inode, struct file *file) { struct pcm *pcm = file->private_data; if (pcm->ac) q6audio_close(pcm->ac); kfree(pcm); pr_info("[%s:%s] release\n", __MM_FILE__, __func__); // Jagan+ if (unlikely(1 == Is_first_boot_flag)) Is_first_boot_flag = 0; // Jagan- return 0; } static struct file_operations pcm_fops = { .owner = THIS_MODULE, .open = pcm_open, .write = pcm_write, .release = pcm_release, .unlocked_ioctl = pcm_ioctl, }; struct miscdevice pcm_misc = { .minor = MISC_DYNAMIC_MINOR, .name = "msm_pcm_out", .fops = &pcm_fops, }; static int __init pcm_init(void) { return misc_register(&pcm_misc); } device_initcall(pcm_init);