static long audio_ioctl(struct file *file, unsigned int cmd, unsigned long arg) { struct audio *audio = file->private_data; int rc = -EINVAL; MM_DBG("cmd %d", cmd); mutex_lock(&audio->lock); switch (cmd) { case AUDIO_START: MM_DBG("AUDIO_START\n"); rc = audio_enable(audio); break; case AUDIO_STOP: MM_DBG("AUDIO_STOP\n"); rc = audio_disable(audio); audio->running = 0; audio->enabled = 0; break; default: rc = -EINVAL; } mutex_unlock(&audio->lock); return rc; }
static long audio_ioctl(struct file *file, unsigned int cmd, unsigned long arg) { struct audio *audio = file->private_data; int rc = -EINVAL; pr_info("cmd = %d\n", cmd); mutex_lock(&audio->lock); switch (cmd) { case AUDIO_START: pr_info("AUDIO_START\n"); rc = audio_enable(audio); break; case AUDIO_STOP: pr_info("AUDIO_STOP\n"); rc = audio_disable(audio); audio->running = 0; audio->enabled = 0; break; case AUDIO_GET_SESSION_ID: if (copy_to_user((void *) arg, &audio->dec_id, sizeof(unsigned short))) rc = -EFAULT; else rc = 0; break; default: rc = -EINVAL; } mutex_unlock(&audio->lock); return rc; }
static int audio_release(struct inode *inode, struct file *file) { struct audio *audio = file->private_data; MM_DBG("audio instance 0x%08x freeing\n", (int)audio); mutex_lock(&audio->lock); audio_disable(audio); audio->running = 0; audio->enabled = 0; audio->opened = 0; mutex_unlock(&audio->lock); return 0; }
static int audio_release(struct inode *inode, struct file *file) { struct audio *audio = file->private_data; pr_info("audio instance 0x%08x freeing\n", (int)audio); mutex_lock(&audio->lock); auddev_unregister_evt_listner(AUDDEV_CLNT_DEC, audio->dec_id); audio_disable(audio); audio->running = 0; audio->enabled = 0; audio->opened = 0; mutex_unlock(&audio->lock); return 0; }
static int audio_release(struct inode *inode, struct file *file) { struct audio *audio = file->private_data; mutex_lock(&audio->lock); if (audio->enabled) { audio->stopped = 1; audio_disable(audio); audio->running = 0; audio->enabled = 0; wake_up(&audio->wait); } msm_rpc_unregister_client(audio->client); kfree(audio->data); audio->data = NULL; audio->opened = 0; mutex_unlock(&audio->lock); return 0; }
static long audio_ioctl(struct file *file, unsigned int cmd, unsigned long arg) { struct audio *audio = file->private_data; int rc = -EINVAL; if (cmd == AUDIO_GET_STATS) { struct msm_audio_stats stats; memset(&stats, 0, sizeof(stats)); stats.byte_count = atomic_read(&audio->out_bytes); if (copy_to_user((void *) arg, &stats, sizeof(stats))) return -EFAULT; return 0; } mutex_lock(&audio->lock); switch (cmd) { case AUDIO_START: rc = audio_enable(audio); if (rc == 0) audio->enabled = 1; break; case AUDIO_STOP: if (audio->enabled) { audio->stopped = 1; rc = audio_disable(audio); if (rc == 0) { audio->enabled = 0; audio->running = 0; wake_up(&audio->wait); } else audio->stopped = 0; } break; case AUDIO_SET_CONFIG: { struct msm_audio_config config; if (copy_from_user(&config, (void *) arg, sizeof(config))) { rc = -EFAULT; break; } if (config.type == 0) { /* Selection for different PCM intect point */ } else { rc = -EINVAL; break; } rc = 0; break; } case AUDIO_GET_CONFIG: { struct msm_audio_config config; config.buffer_size = MAX_VOC_FRAME_SIZE * 2; config.buffer_count = MAX_VOC_FRAMES; config.sample_rate = 8000; config.channel_count = 1; config.type = 0; config.unused[0] = 0; config.unused[1] = 0; config.unused[2] = 0; if (copy_to_user((void *) arg, &config, sizeof(config))) rc = -EFAULT; else rc = 0; break; } default: { rc = -EINVAL; MM_ERR(" Unsupported ioctl 0x%8x\n", cmd); } } mutex_unlock(&audio->lock); return rc; }